wolbarg 0.3.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors/index.ts","../src/compression/index.ts","../src/chunking/index.ts","../src/utils/index.ts","../src/embedding/index.ts","../src/llm/index.ts","../src/ingest/index.ts","../src/core/options.ts","../src/filters/match.ts","../src/schema/index.ts","../src/sql/index.ts","../src/utils/vector.ts","../src/utils/vector-index.ts","../src/storage/providers/sqlite.ts","../src/storage/providers/postgres.ts","../src/storage/index.ts","../src/memory/transfer.ts","../src/memory/index.ts","../src/retrieval/index.ts","../src/core/validate.ts","../src/telemetry/logger.ts","../src/telemetry/trace.ts","../src/telemetry/emitter.ts","../src/providers/sqlite/sqliteEventDatabase.ts","../src/providers/sqlite/sqliteTelemetryProvider.ts","../src/providers/sqlite/sqliteCheckpointProvider.ts","../src/core/wolbarg.ts","../src/filters/types.ts","../src/factories/index.ts","../src/keyword/index.ts","../src/rerank/index.ts","../src/ocr/index.ts","../src/vision/index.ts","../src/benchmark/index.ts"],"names":["meta","path","fs","DatabaseSync","sqliteVec","AsyncLocalStorage","result","SDK_VERSION","wolbarg"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Operation-scoped errors with reason + suggestion for developer experience.\n */\n\n/** Base class for all Wolbarg errors. */\nexport class WolbargError extends Error {\n readonly code: string;\n readonly reason?: string;\n readonly suggestion?: string;\n readonly operation?: string;\n\n constructor(\n message: string,\n code: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, options);\n this.name = \"WolbargError\";\n this.code = code;\n this.reason = options?.reason;\n this.suggestion = options?.suggestion;\n this.operation = options?.operation;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when SDK initialization fails. */\nexport class InitializationError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"INITIALIZATION_ERROR\", options);\n this.name = \"InitializationError\";\n }\n}\n\n/** Thrown when configuration values are missing or invalid. */\nexport class ConfigurationError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"CONFIGURATION_ERROR\", options);\n this.name = \"ConfigurationError\";\n }\n}\n\n/** Thrown when method arguments fail validation. */\nexport class ValidationError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"VALIDATION_ERROR\", options);\n this.name = \"ValidationError\";\n }\n}\n\n/** Thrown when a database operation fails. */\nexport class DatabaseError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"DATABASE_ERROR\", options);\n this.name = \"DatabaseError\";\n }\n}\n\n/** Thrown when an embedding request fails. */\nexport class EmbeddingError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"EMBEDDING_ERROR\", options);\n this.name = \"EmbeddingError\";\n }\n}\n\n/** Thrown when compression (LLM summarization) fails. */\nexport class CompressionError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"COMPRESSION_ERROR\", options);\n this.name = \"CompressionError\";\n }\n}\n\n/** Thrown when a requested memory does not exist. */\nexport class MemoryNotFoundError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"MEMORY_NOT_FOUND\", options);\n this.name = \"MemoryNotFoundError\";\n }\n}\n\n/**\n * Thrown when a method requires an optional provider that was not configured.\n */\nexport class ProviderNotConfiguredError extends ConfigurationError {\n readonly provider: string;\n\n constructor(provider: string, method: string, hint: string) {\n super(`${method} requires ${provider} — ${hint}`, {\n operation: method,\n reason: `${provider} was not configured`,\n suggestion: hint,\n });\n this.name = \"ProviderNotConfiguredError\";\n this.provider = provider;\n }\n}\n\n/** Map low-level SQLite / driver errors into actionable operation errors. */\nexport function wrapOperationError(\n operation: string,\n error: unknown,\n): WolbargError {\n // Preserve typed SDK errors so callers can still use instanceof checks.\n if (error instanceof WolbargError) {\n return error;\n }\n\n const raw = error instanceof Error ? error.message : String(error);\n const lower = raw.toLowerCase();\n\n if (lower.includes(\"database is locked\") || lower.includes(\"sqlite_busy\")) {\n return new DatabaseError(formatOperationMessage(operation, raw), {\n cause: error instanceof Error ? error : undefined,\n operation,\n reason: \"SQLite database locked\",\n suggestion: \"Increase timeout or reduce concurrent writes.\",\n });\n }\n\n if (lower.includes(\"no such file\") || lower.includes(\"enoent\")) {\n return new DatabaseError(formatOperationMessage(operation, raw), {\n cause: error instanceof Error ? error : undefined,\n operation,\n reason: \"Database file not found\",\n suggestion: \"Check the database path and ensure the directory exists.\",\n });\n }\n\n if (lower.includes(\"readonly\") || lower.includes(\"read-only\")) {\n return new DatabaseError(formatOperationMessage(operation, raw), {\n cause: error instanceof Error ? error : undefined,\n operation,\n reason: \"Database opened as read-only\",\n suggestion: \"Open the database with write permissions or choose another path.\",\n });\n }\n\n return new DatabaseError(formatOperationMessage(operation, raw), {\n cause: error instanceof Error ? error : undefined,\n operation,\n reason: raw,\n suggestion: \"Inspect the underlying cause and retry the operation.\",\n });\n}\n\nfunction formatOperationMessage(operation: string, reason: string | WolbargError): string {\n const reasonText =\n typeof reason === \"string\" ? reason : reason.reason ?? reason.message;\n return `Failed to execute ${operation}()\\nReason:\\n${reasonText}`;\n}\n","/**\n * Memory compression — provider-based summarization.\n */\n\nimport type { LlmProvider } from \"../llm/index.js\";\nimport type { MemoryRecord } from \"../types/index.js\";\nimport { CompressionError } from \"../errors/index.js\";\n\nconst SYSTEM_PROMPT = `You are a memory compression engine for multi-agent systems.\nGiven related memories from a single agent, produce ONE concise summary that preserves:\n- Key facts and decisions\n- Important entities, numbers, and identifiers\n- Actionable conclusions\n\nRules:\n- Output plain text only (no markdown headings, no bullet lists unless essential)\n- Do not invent facts that are not present\n- Prefer precision over verbosity\n- Keep the summary self-contained`;\n\n/** Contract for memory compression backends. */\nexport interface CompressionProvider {\n readonly name: string;\n compress(memories: MemoryRecord[]): Promise<string>;\n}\n\n/** Default compression provider wrapping an {@link LlmProvider}. */\nexport class LlmCompressionProvider implements CompressionProvider {\n readonly name = \"llm\";\n private readonly llm: LlmProvider;\n\n constructor(llm: LlmProvider) {\n this.llm = llm;\n }\n\n async compress(memories: MemoryRecord[]): Promise<string> {\n return compressMemories(this.llm, memories);\n }\n}\n\nexport async function compressMemories(\n llm: LlmProvider,\n memories: MemoryRecord[],\n): Promise<string> {\n if (memories.length === 0) {\n throw new CompressionError(\"No memories available to compress\");\n }\n\n const payload = memories\n .map((memory, index) => {\n const meta =\n Object.keys(memory.metadata).length > 0\n ? `\\nMetadata: ${JSON.stringify(memory.metadata)}`\n : \"\";\n return `[${index + 1}] (id=${memory.id}, created=${memory.createdAt.toISOString()})${meta}\\n${memory.content.text}`;\n })\n .join(\"\\n\\n\");\n\n try {\n return await llm.complete([\n { role: \"system\", content: SYSTEM_PROMPT },\n {\n role: \"user\",\n content: `Compress the following ${memories.length} memories into a single concise summary:\\n\\n${payload}`,\n },\n ]);\n } catch (error) {\n if (error instanceof CompressionError) {\n throw error;\n }\n throw new CompressionError(\n `Compression failed: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n}\n\nexport function createCompressionProvider(\n llm: LlmProvider,\n): CompressionProvider {\n return new LlmCompressionProvider(llm);\n}\n","/**\n * Chunking strategies for document ingestion.\n */\n\nexport interface Chunk {\n text: string;\n index: number;\n}\n\nexport interface ChunkingOptions {\n chunkSize?: number;\n overlap?: number;\n}\n\nexport interface ChunkingStrategy {\n readonly name: string;\n chunk(text: string, options?: ChunkingOptions): Chunk[];\n}\n\nfunction clampOptions(options?: ChunkingOptions): {\n chunkSize: number;\n overlap: number;\n} {\n const chunkSize = Math.max(32, options?.chunkSize ?? 800);\n const overlap = Math.min(\n Math.max(0, options?.overlap ?? 100),\n Math.floor(chunkSize / 2),\n );\n return { chunkSize, overlap };\n}\n\nfunction windowChunks(\n pieces: string[],\n chunkSize: number,\n overlap: number,\n joiner: string,\n): Chunk[] {\n if (pieces.length === 0) {\n return [];\n }\n const chunks: Chunk[] = [];\n let buf = \"\";\n let index = 0;\n\n const flush = (): void => {\n const trimmed = buf.trim();\n if (trimmed) {\n chunks.push({ text: trimmed, index });\n index += 1;\n }\n };\n\n for (const piece of pieces) {\n const candidate = buf ? `${buf}${joiner}${piece}` : piece;\n if (candidate.length <= chunkSize) {\n buf = candidate;\n continue;\n }\n flush();\n if (piece.length > chunkSize) {\n // Hard-split oversized piece\n let start = 0;\n while (start < piece.length) {\n const end = Math.min(start + chunkSize, piece.length);\n chunks.push({ text: piece.slice(start, end).trim(), index });\n index += 1;\n start = Math.max(end - overlap, end);\n }\n buf = \"\";\n } else {\n buf = piece;\n }\n }\n flush();\n\n if (overlap > 0 && chunks.length > 1) {\n // Rebuild with overlap by sliding on joined text for stability\n const full = pieces.join(joiner);\n return slidingWindow(full, chunkSize, overlap);\n }\n return chunks;\n}\n\nfunction slidingWindow(\n text: string,\n chunkSize: number,\n overlap: number,\n): Chunk[] {\n const chunks: Chunk[] = [];\n let start = 0;\n let index = 0;\n while (start < text.length) {\n const end = Math.min(start + chunkSize, text.length);\n const slice = text.slice(start, end).trim();\n if (slice) {\n chunks.push({ text: slice, index });\n index += 1;\n }\n if (end >= text.length) {\n break;\n }\n start = Math.max(end - overlap, start + 1);\n }\n return chunks;\n}\n\nexport class FixedChunkingStrategy implements ChunkingStrategy {\n readonly name = \"fixed\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n const { chunkSize, overlap } = clampOptions(options);\n return slidingWindow(text, chunkSize, overlap);\n }\n}\n\nexport class SentenceChunkingStrategy implements ChunkingStrategy {\n readonly name = \"sentence\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n const { chunkSize, overlap } = clampOptions(options);\n const sentences = text\n .split(/(?<=[.!?])\\s+/)\n .map((s) => s.trim())\n .filter(Boolean);\n return windowChunks(sentences, chunkSize, overlap, \" \");\n }\n}\n\nexport class ParagraphChunkingStrategy implements ChunkingStrategy {\n readonly name = \"paragraph\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n const { chunkSize, overlap } = clampOptions(options);\n const paragraphs = text\n .split(/\\n\\s*\\n/)\n .map((p) => p.trim())\n .filter(Boolean);\n return windowChunks(paragraphs, chunkSize, overlap, \"\\n\\n\");\n }\n}\n\nexport class MarkdownChunkingStrategy implements ChunkingStrategy {\n readonly name = \"markdown\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n const { chunkSize, overlap } = clampOptions(options);\n const sections = text\n .split(/(?=^#{1,6}\\s)/m)\n .map((s) => s.trim())\n .filter(Boolean);\n if (sections.length <= 1) {\n return new ParagraphChunkingStrategy().chunk(text, options);\n }\n return windowChunks(sections, chunkSize, overlap, \"\\n\\n\");\n }\n}\n\nexport class HeadingChunkingStrategy implements ChunkingStrategy {\n readonly name = \"heading\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n return new MarkdownChunkingStrategy().chunk(text, options);\n }\n}\n\nexport function createChunkingStrategy(\n name: \"fixed\" | \"sentence\" | \"paragraph\" | \"markdown\" | \"heading\" = \"sentence\",\n): ChunkingStrategy {\n switch (name) {\n case \"fixed\":\n return new FixedChunkingStrategy();\n case \"paragraph\":\n return new ParagraphChunkingStrategy();\n case \"markdown\":\n return new MarkdownChunkingStrategy();\n case \"heading\":\n return new HeadingChunkingStrategy();\n case \"sentence\":\n default:\n return new SentenceChunkingStrategy();\n }\n}\n\nexport function inferChunkingStrategy(text: string): ChunkingStrategy {\n if (/^#{1,6}\\s/m.test(text)) {\n return new MarkdownChunkingStrategy();\n }\n return new SentenceChunkingStrategy();\n}\n","/**\r\n * Shared utility helpers.\r\n */\r\n\r\nimport { ValidationError } from \"../errors/index.js\";\r\n\r\n/** Generate a RFC 4122 version 4 UUID. */\r\nexport function createId(): string {\r\n return crypto.randomUUID();\r\n}\r\n\r\n/** Current UTC timestamp as an ISO-8601 string. */\r\nexport function nowIso(): string {\r\n return new Date().toISOString();\r\n}\r\n\r\n/** Parse an ISO-8601 string into a Date. */\r\nexport function parseIso(value: string): Date {\r\n return new Date(value);\r\n}\r\n\r\n/** Assert that a string is non-empty after trimming. */\r\nexport function assertNonEmptyString(\r\n value: unknown,\r\n fieldName: string,\r\n): asserts value is string {\r\n if (typeof value !== \"string\" || value.trim().length === 0) {\r\n throw new ValidationError(`${fieldName} must be a non-empty string`);\r\n }\r\n}\r\n\r\n/** Assert that a value is a finite number within an optional range. */\r\nexport function assertFiniteNumber(\r\n value: unknown,\r\n fieldName: string,\r\n options?: { min?: number; max?: number },\r\n): asserts value is number {\r\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\r\n throw new ValidationError(`${fieldName} must be a finite number`);\r\n }\r\n if (options?.min !== undefined && value < options.min) {\r\n throw new ValidationError(`${fieldName} must be >= ${options.min}`);\r\n }\r\n if (options?.max !== undefined && value > options.max) {\r\n throw new ValidationError(`${fieldName} must be <= ${options.max}`);\r\n }\r\n}\r\n\r\nconst EMPTY_META_JSON = \"{}\";\r\n\r\n/** Safely serialize opaque metadata to JSON text. */\r\nexport function serializeMetadata(metadata: Record<string, unknown>): string {\r\n for (const _key in metadata) {\r\n return JSON.stringify(metadata);\r\n }\r\n return EMPTY_META_JSON;\r\n}\r\n\r\n/** Safely deserialize opaque metadata from JSON text. */\r\nexport function deserializeMetadata(raw: string): Record<string, unknown> {\r\n if (!raw || raw === EMPTY_META_JSON) {\r\n return {};\r\n }\r\n try {\r\n const parsed: unknown = JSON.parse(raw);\r\n if (parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)) {\r\n return parsed as Record<string, unknown>;\r\n }\r\n return {};\r\n } catch {\r\n return {};\r\n }\r\n}\r\n\r\n/**\r\n * Convert a Float32Array embedding into a Buffer suitable for sqlite-vec.\r\n */\r\nexport function embeddingToBuffer(embedding: Float32Array): Buffer {\r\n return Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);\r\n}\r\n\r\n/**\r\n * Convert cosine distance (as returned by sqlite-vec) to cosine similarity.\r\n * sqlite-vec cosine distance ≈ `1 - cosine_similarity`, range roughly [0, 2].\r\n */\r\nexport function distanceToSimilarity(distance: number): number {\r\n return 1 - distance;\r\n}\r\n\r\n/**\r\n * Simple async mutex for serializing write-critical sections across\r\n * concurrent async callers in the same process.\r\n */\r\nexport class AsyncMutex {\r\n private chain: Promise<void> = Promise.resolve();\r\n\r\n async runExclusive<T>(fn: () => Promise<T> | T): Promise<T> {\r\n let release!: () => void;\r\n const next = new Promise<void>((resolve) => {\r\n release = resolve;\r\n });\r\n const previous = this.chain;\r\n this.chain = previous.then(() => next);\r\n\r\n await previous;\r\n try {\r\n return await fn();\r\n } finally {\r\n release();\r\n }\r\n }\r\n}\r\n\r\n/** Join a base URL with a path, avoiding duplicate slashes. */\r\nexport function joinUrl(baseUrl: string, path: string): string {\r\n const base = baseUrl.replace(/\\/+$/, \"\");\r\n const suffix = path.startsWith(\"/\") ? path : `/${path}`;\r\n return `${base}${suffix}`;\r\n}\r\n","/**\n * Embedding providers and named factories.\n */\n\nimport type { EmbeddingConfig } from \"../types/index.js\";\nimport { EmbeddingError } from \"../errors/index.js\";\nimport { joinUrl } from \"../utils/index.js\";\n\n/** Contract for any embedding backend. */\nexport interface EmbeddingProvider {\n readonly model: string;\n /** Produce a float embedding for the given text. */\n embed(text: string): Promise<Float32Array>;\n /** Optional batch embedding. SDK falls back to parallel `embed` when absent. */\n embedBatch?(texts: string[]): Promise<Float32Array[]>;\n /** Lightweight connectivity + dimension probe. */\n validate(): Promise<{ dimensions: number }>;\n}\n\ninterface OpenAIEmbeddingResponse {\n data?: Array<{ embedding?: number[]; index?: number }>;\n error?: { message?: string };\n}\n\nexport class OpenAICompatibleEmbeddingProvider implements EmbeddingProvider {\n readonly model: string;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly timeoutMs: number;\n\n constructor(config: EmbeddingConfig) {\n this.baseUrl = config.baseUrl;\n this.apiKey = config.apiKey;\n this.model = config.model;\n this.timeoutMs = config.timeoutMs ?? 30_000;\n }\n\n async embed(text: string): Promise<Float32Array> {\n const response = await this.request(text);\n const vector = response.data?.[0]?.embedding;\n if (!vector || vector.length === 0) {\n throw new EmbeddingError(\"Embedding response did not contain a vector\");\n }\n return Float32Array.from(vector);\n }\n\n async embedBatch(texts: string[]): Promise<Float32Array[]> {\n if (texts.length === 0) {\n return [];\n }\n if (texts.length === 1) {\n return [await this.embed(texts[0]!)];\n }\n const response = await this.request(texts);\n const data = response.data ?? [];\n const sorted = [...data].sort(\n (a, b) => (a.index ?? 0) - (b.index ?? 0),\n );\n if (sorted.length !== texts.length) {\n // Fallback: embed sequentially\n const out: Float32Array[] = [];\n for (const text of texts) {\n out.push(await this.embed(text));\n }\n return out;\n }\n return sorted.map((item) => {\n if (!item.embedding || item.embedding.length === 0) {\n throw new EmbeddingError(\"Embedding batch response contained an empty vector\");\n }\n return Float32Array.from(item.embedding);\n });\n }\n\n async validate(): Promise<{ dimensions: number }> {\n try {\n const embedding = await this.embed(\"Wolbarg health check\");\n return { dimensions: embedding.length };\n } catch (error) {\n if (error instanceof EmbeddingError) {\n throw error;\n }\n throw new EmbeddingError(\n `Failed to validate embedding endpoint: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n private async request(\n input: string | string[],\n ): Promise<OpenAIEmbeddingResponse> {\n const url = joinUrl(this.baseUrl, \"/embeddings\");\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n input,\n }),\n signal: controller.signal,\n });\n\n let body: OpenAIEmbeddingResponse;\n try {\n body = (await res.json()) as OpenAIEmbeddingResponse;\n } catch {\n throw new EmbeddingError(\n `Embedding endpoint returned non-JSON response (HTTP ${res.status})`,\n );\n }\n\n if (!res.ok) {\n const message = body.error?.message ?? `HTTP ${res.status}`;\n throw new EmbeddingError(`Embedding request failed: ${message}`);\n }\n\n return body;\n } catch (error) {\n if (error instanceof EmbeddingError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new EmbeddingError(\n `Embedding request timed out after ${this.timeoutMs}ms`,\n );\n }\n throw new EmbeddingError(\n `Embedding request failed: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n } finally {\n clearTimeout(timer);\n }\n }\n\n private describe(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n }\n}\n\nexport function createEmbeddingProvider(\n config: EmbeddingConfig,\n): EmbeddingProvider {\n return new OpenAICompatibleEmbeddingProvider(config);\n}\n\nfunction factory(\n defaults: Partial<EmbeddingConfig> & Pick<EmbeddingConfig, \"baseUrl\">,\n) {\n return (config: Omit<EmbeddingConfig, \"baseUrl\"> & { baseUrl?: string }): EmbeddingProvider =>\n createEmbeddingProvider({\n baseUrl: config.baseUrl ?? defaults.baseUrl,\n apiKey: config.apiKey,\n model: config.model,\n timeoutMs: config.timeoutMs,\n });\n}\n\nexport const openaiCompatibleEmbedding = (\n config: EmbeddingConfig,\n): EmbeddingProvider => createEmbeddingProvider(config);\n\nexport const openaiEmbedding = factory({\n baseUrl: \"https://api.openai.com/v1\",\n});\n\nexport const ollamaEmbedding = factory({\n baseUrl: \"http://127.0.0.1:11434/v1\",\n});\n\nexport const openRouterEmbedding = factory({\n baseUrl: \"https://openrouter.ai/api/v1\",\n});\n\nexport const lmStudioEmbedding = factory({\n baseUrl: \"http://127.0.0.1:1234/v1\",\n});\n\nexport const geminiEmbedding = factory({\n baseUrl: \"https://generativelanguage.googleapis.com/v1beta/openai\",\n});\n\nexport const togetherEmbedding = factory({\n baseUrl: \"https://api.together.xyz/v1\",\n});\n\nexport const vllmEmbedding = factory({\n baseUrl: \"http://127.0.0.1:8000/v1\",\n});\n\n/** Embed many texts, using batch API when available. */\nexport async function embedMany(\n provider: EmbeddingProvider,\n texts: string[],\n concurrency = 8,\n): Promise<Float32Array[]> {\n if (provider.embedBatch) {\n return provider.embedBatch(texts);\n }\n const out: Float32Array[] = new Array(texts.length);\n let index = 0;\n async function worker(): Promise<void> {\n while (index < texts.length) {\n const current = index;\n index += 1;\n out[current] = await provider.embed(texts[current]!);\n }\n }\n await Promise.all(\n Array.from({ length: Math.min(concurrency, texts.length) }, () => worker()),\n );\n return out;\n}\n","/**\n * LLM provider abstractions and OpenAI-compatible chat implementation.\n * Used exclusively for memory compression (and future ORC features).\n */\n\nimport type { LlmConfig } from \"../types/index.js\";\nimport { CompressionError } from \"../errors/index.js\";\nimport { joinUrl } from \"../utils/index.js\";\n\nexport interface ChatMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\n/** Contract for any chat completion backend. */\nexport interface LlmProvider {\n readonly model: string;\n complete(messages: ChatMessage[]): Promise<string>;\n /** Lightweight connectivity probe. */\n validate(): Promise<void>;\n}\n\ninterface OpenAIChatResponse {\n choices?: Array<{ message?: { content?: string | null } }>;\n error?: { message?: string };\n}\n\nexport class OpenAICompatibleLlmProvider implements LlmProvider {\n readonly model: string;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly temperature: number;\n private readonly maxTokens: number;\n private readonly timeoutMs: number;\n\n constructor(config: LlmConfig) {\n this.baseUrl = config.baseUrl;\n this.apiKey = config.apiKey;\n this.model = config.model;\n this.temperature = config.temperature ?? 0.2;\n this.maxTokens = config.maxTokens ?? 4096;\n this.timeoutMs = config.timeoutMs ?? 60_000;\n }\n\n async complete(messages: ChatMessage[]): Promise<string> {\n const response = await this.request(messages);\n const content = response.choices?.[0]?.message?.content;\n if (typeof content !== \"string\" || content.trim().length === 0) {\n throw new CompressionError(\"LLM response did not contain text content\");\n }\n return content.trim();\n }\n\n async validate(): Promise<void> {\n try {\n await this.complete([\n {\n role: \"user\",\n content: 'Reply with exactly the word \"ok\".',\n },\n ]);\n } catch (error) {\n if (error instanceof CompressionError) {\n throw new CompressionError(\n `Failed to validate LLM endpoint: ${error.message}`,\n { cause: error },\n );\n }\n throw new CompressionError(\n `Failed to validate LLM endpoint: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n private async request(messages: ChatMessage[]): Promise<OpenAIChatResponse> {\n const url = joinUrl(this.baseUrl, \"/chat/completions\");\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n messages,\n temperature: this.temperature,\n max_tokens: this.maxTokens,\n }),\n signal: controller.signal,\n });\n\n let body: OpenAIChatResponse;\n try {\n body = (await res.json()) as OpenAIChatResponse;\n } catch {\n throw new CompressionError(\n `LLM endpoint returned non-JSON response (HTTP ${res.status})`,\n );\n }\n\n if (!res.ok) {\n const message = body.error?.message ?? `HTTP ${res.status}`;\n throw new CompressionError(`LLM request failed: ${message}`);\n }\n\n return body;\n } catch (error) {\n if (error instanceof CompressionError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new CompressionError(\n `LLM request timed out after ${this.timeoutMs}ms`,\n );\n }\n throw new CompressionError(`LLM request failed: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n } finally {\n clearTimeout(timer);\n }\n }\n\n private describe(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n }\n}\n\nexport function createLlmProvider(config: LlmConfig): LlmProvider {\n return new OpenAICompatibleLlmProvider(config);\n}\n\nfunction llmFactory(\n defaults: Partial<LlmConfig> & Pick<LlmConfig, \"baseUrl\">,\n) {\n return (config: Omit<LlmConfig, \"baseUrl\"> & { baseUrl?: string }): LlmProvider =>\n createLlmProvider({\n baseUrl: config.baseUrl ?? defaults.baseUrl,\n apiKey: config.apiKey,\n model: config.model,\n temperature: config.temperature,\n maxTokens: config.maxTokens,\n timeoutMs: config.timeoutMs,\n });\n}\n\nexport const openaiCompatibleLlm = (config: LlmConfig): LlmProvider =>\n createLlmProvider(config);\n\nexport const openaiLlm = llmFactory({\n baseUrl: \"https://api.openai.com/v1\",\n});\n\nexport const ollamaLlm = llmFactory({\n baseUrl: \"http://127.0.0.1:11434/v1\",\n});\n\nexport const openRouterLlm = llmFactory({\n baseUrl: \"https://openrouter.ai/api/v1\",\n});\n","/**\n * Document parsers for ingest pipeline.\n */\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { ConfigurationError } from \"../errors/index.js\";\n\nexport interface ParsedDocument {\n text: string;\n mimeType: string;\n filename?: string;\n isImage: boolean;\n imageBuffer?: Buffer;\n}\n\nexport interface DocumentParserProvider {\n readonly name: string;\n readonly extensions: string[];\n parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument>;\n}\n\nfunction extOf(filename?: string): string {\n if (!filename) {\n return \"\";\n }\n return path.extname(filename).toLowerCase();\n}\n\nexport class TextParser implements DocumentParserProvider {\n readonly name = \"text\";\n readonly extensions = [\".txt\", \".md\", \".markdown\", \".csv\", \".json\"];\n\n async parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument> {\n const ext = extOf(input.filename);\n let text = input.buffer.toString(\"utf8\");\n if (ext === \".json\") {\n try {\n text = JSON.stringify(JSON.parse(text), null, 2);\n } catch {\n // keep raw\n }\n }\n return {\n text,\n mimeType: input.mimeType ?? \"text/plain\",\n filename: input.filename,\n isImage: false,\n };\n }\n}\n\nexport class ImageParser implements DocumentParserProvider {\n readonly name = \"image\";\n readonly extensions = [\".png\", \".jpg\", \".jpeg\", \".webp\"];\n\n async parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument> {\n const ext = extOf(input.filename);\n const mime =\n input.mimeType ??\n (ext === \".png\"\n ? \"image/png\"\n : ext === \".webp\"\n ? \"image/webp\"\n : \"image/jpeg\");\n return {\n text: \"\",\n mimeType: mime,\n filename: input.filename,\n isImage: true,\n imageBuffer: input.buffer,\n };\n }\n}\n\nexport class PdfParser implements DocumentParserProvider {\n readonly name = \"pdf\";\n readonly extensions = [\".pdf\"];\n\n async parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument> {\n try {\n const mod = await import(\"pdf-parse\");\n // pdf-parse v1: default export is (buffer) => Promise<{ text }>\n // pdf-parse v2: named PDFParse class\n const maybeClass = (mod as { PDFParse?: new (opts: { data: Buffer }) => {\n getText: () => Promise<{ text: string }>;\n destroy?: () => Promise<void>;\n } }).PDFParse;\n let text = \"\";\n if (typeof maybeClass === \"function\") {\n const parser = new maybeClass({ data: input.buffer });\n try {\n const result = await parser.getText();\n text = result.text ?? \"\";\n } finally {\n await parser.destroy?.();\n }\n } else {\n const pdfParse =\n (mod as { default?: (buf: Buffer) => Promise<{ text: string }> }).default ??\n (mod as unknown as (buf: Buffer) => Promise<{ text: string }>);\n if (typeof pdfParse !== \"function\") {\n throw new Error(\"pdf-parse export is not a function\");\n }\n const result = await pdfParse(input.buffer);\n text = result.text ?? \"\";\n }\n return {\n text,\n mimeType: \"application/pdf\",\n filename: input.filename,\n isImage: false,\n };\n } catch (error) {\n if (\n error instanceof ConfigurationError\n ) {\n throw error;\n }\n const detail = error instanceof Error ? error.message : String(error);\n throw new ConfigurationError(\n `PDF ingest failed (${detail}). Install compatible pdf-parse: npm install pdf-parse@1.1.4`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n}\n\nexport class DocxParser implements DocumentParserProvider {\n readonly name = \"docx\";\n readonly extensions = [\".docx\"];\n\n async parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument> {\n try {\n const mod = await import(\"mammoth\" as string);\n const extractRawText =\n (mod as { extractRawText?: (opts: { buffer: Buffer }) => Promise<{ value: string }> })\n .extractRawText ??\n (mod as { default?: { extractRawText: (opts: { buffer: Buffer }) => Promise<{ value: string }> } })\n .default?.extractRawText;\n if (!extractRawText) {\n throw new Error(\"mammoth.extractRawText unavailable\");\n }\n const result = await extractRawText({ buffer: input.buffer });\n return {\n text: result.value ?? \"\",\n mimeType:\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n filename: input.filename,\n isImage: false,\n };\n } catch {\n throw new ConfigurationError(\n 'DOCX ingest requires the optional \"mammoth\" package. Install it with: npm install mammoth',\n );\n }\n }\n}\n\nconst DEFAULT_PARSERS: DocumentParserProvider[] = [\n new TextParser(),\n new ImageParser(),\n new PdfParser(),\n new DocxParser(),\n];\n\nexport function resolveParser(\n filename?: string,\n mimeType?: string,\n parsers: DocumentParserProvider[] = DEFAULT_PARSERS,\n): DocumentParserProvider {\n const ext = extOf(filename);\n if (ext) {\n const byExt = parsers.find((p) => p.extensions.includes(ext));\n if (byExt) {\n return byExt;\n }\n }\n if (mimeType?.startsWith(\"image/\")) {\n return parsers.find((p) => p.name === \"image\") ?? new ImageParser();\n }\n if (mimeType === \"application/pdf\") {\n return parsers.find((p) => p.name === \"pdf\") ?? new PdfParser();\n }\n return parsers.find((p) => p.name === \"text\") ?? new TextParser();\n}\n\nexport async function loadIngestSource(source: {\n path?: string;\n buffer?: Buffer;\n text?: string;\n filename?: string;\n mimeType?: string;\n}): Promise<{ buffer: Buffer; filename?: string; mimeType?: string; rawText?: string }> {\n if (source.text !== undefined) {\n return {\n buffer: Buffer.from(source.text, \"utf8\"),\n filename: source.filename ?? \"document.txt\",\n mimeType: source.mimeType ?? \"text/plain\",\n rawText: source.text,\n };\n }\n if (source.buffer) {\n return {\n buffer: source.buffer,\n filename: source.filename,\n mimeType: source.mimeType,\n };\n }\n if (source.path) {\n const buffer = await fs.readFile(source.path);\n return {\n buffer,\n filename: path.basename(source.path),\n mimeType: source.mimeType,\n };\n }\n throw new ConfigurationError(\"ingest source must include path, buffer, or text\");\n}\n\nexport { DEFAULT_PARSERS };\n","/**\n * Constructor options for Wolbarg v0.3.\n */\n\nimport type { ChunkingStrategy } from \"../chunking/index.js\";\nimport type { CompressionProvider } from \"../compression/index.js\";\nimport type { EmbeddingProvider } from \"../embedding/index.js\";\nimport type { KeywordSearchProvider } from \"../keyword/index.js\";\nimport type { LlmProvider } from \"../llm/index.js\";\nimport type { OCRProvider } from \"../ocr/index.js\";\nimport type { RerankerProvider } from \"../rerank/index.js\";\nimport type { StorageProvider } from \"../storage/types.js\";\nimport type { CheckpointProvider } from \"../providers/interfaces/CheckpointProvider.js\";\nimport type { TelemetryProvider } from \"../providers/interfaces/TelemetryProvider.js\";\nimport type {\n DatabaseConfig,\n EmbeddingConfig,\n LlmConfig,\n RetrievalConfig,\n StorageConfig,\n TelemetryConfig,\n} from \"../types/index.js\";\nimport type { VisionProvider } from \"../vision/index.js\";\n\nexport type EmbeddingInput = EmbeddingProvider | EmbeddingConfig;\nexport type LlmInput = LlmProvider | LlmConfig;\nexport type StorageInput = StorageProvider | StorageConfig | DatabaseConfig;\n\nexport interface WolbargOptionsBase {\n /** Organization namespace isolating memories within a shared database. */\n organization: string;\n /**\n * Storage provider instance or config.\n * Prefer `database` in v0.3 docs; `storage` remains fully supported.\n */\n storage?: StorageInput;\n /**\n * v0.3 alias for `storage`. Accepts `{ provider, url }` or `{ provider, connectionString }`.\n */\n database?: StorageInput;\n /** Embedding provider instance or config. */\n embedding: EmbeddingInput;\n /** Optional independent telemetry system (separate database). */\n telemetry?: TelemetryConfig | TelemetryProvider;\n /** Optional checkpoint provider override (defaults to SQLite when file-backed). */\n checkpoint?: CheckpointProvider;\n /** Optional directory for SQLite checkpoints. */\n checkpointDirectory?: string;\n /** Optional reranker — skipped when absent. */\n reranker?: RerankerProvider;\n /** Optional keyword search — enables hybrid recall when present. */\n keywordSearch?: KeywordSearchProvider;\n /** Optional OCR for image ingest. */\n ocr?: OCRProvider;\n /** Optional vision model for image captions. */\n vision?: VisionProvider;\n /** Optional compression provider (overrides llm-backed default). */\n compression?: CompressionProvider;\n /** Optional default chunking strategy for ingest. */\n chunking?: ChunkingStrategy;\n /** Optional retrieval defaults. */\n retrieval?: RetrievalConfig;\n}\n\nexport interface WolbargOptionsWithoutLlm extends WolbargOptionsBase {\n llm?: undefined;\n}\n\nexport interface WolbargOptionsWithLlm extends WolbargOptionsBase {\n /** Chat model used for compression. */\n llm: LlmInput;\n}\n\nexport type WolbargOptions =\n | WolbargOptionsWithoutLlm\n | WolbargOptionsWithLlm;\n\nexport function isEmbeddingProvider(\n value: EmbeddingInput,\n): value is EmbeddingProvider {\n return typeof (value as EmbeddingProvider).embed === \"function\";\n}\n\nexport function isLlmProvider(value: LlmInput): value is LlmProvider {\n return typeof (value as LlmProvider).complete === \"function\";\n}\n\nexport function isStorageProvider(\n value: StorageInput,\n): value is StorageProvider {\n return typeof (value as StorageProvider).open === \"function\";\n}\n\nexport function isTelemetryProvider(\n value: TelemetryConfig | TelemetryProvider,\n): value is TelemetryProvider {\n return typeof (value as TelemetryProvider).emit === \"function\";\n}\n\n/** Resolve connection path from url or connectionString. */\nexport function resolveDatabaseUrl(\n config: DatabaseConfig | StorageConfig,\n): string {\n const url =\n (\"url\" in config && config.url) ||\n (\"connectionString\" in config && config.connectionString) ||\n \"\";\n return typeof url === \"string\" ? url : \"\";\n}\n","/**\n * In-memory metadata filter evaluation (used as fallback / post-filter).\n */\n\nimport type { MemoryMetadata } from \"../types/index.js\";\nimport type { MetadataComparison, MetadataFilter } from \"./types.js\";\n\nfunction getField(metadata: MemoryMetadata, field: string): unknown {\n const parts = field.split(\".\");\n let current: unknown = metadata;\n for (const part of parts) {\n if (current === null || typeof current !== \"object\" || Array.isArray(current)) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction compare(value: unknown, op: MetadataComparison): boolean {\n if (\"eq\" in op) {\n return value === op.eq;\n }\n if (\"contains\" in op) {\n if (typeof value === \"string\") {\n return value.includes(op.contains);\n }\n if (Array.isArray(value)) {\n return value.some((item) => String(item).includes(op.contains));\n }\n return false;\n }\n if (\"gt\" in op) {\n return value != null && (value as string | number) > op.gt;\n }\n if (\"gte\" in op) {\n return value != null && (value as string | number) >= op.gte;\n }\n if (\"lt\" in op) {\n return value != null && (value as string | number) < op.lt;\n }\n if (\"lte\" in op) {\n return value != null && (value as string | number) <= op.lte;\n }\n if (\"between\" in op) {\n const [lo, hi] = op.between;\n return value != null && value >= lo && value <= hi;\n }\n return false;\n}\n\n/** Evaluate a metadata filter against an opaque metadata object. */\nexport function matchesMetadata(\n metadata: MemoryMetadata,\n filter: MetadataFilter,\n): boolean {\n if (\"and\" in filter) {\n return filter.and.every((f) => matchesMetadata(metadata, f));\n }\n if (\"or\" in filter) {\n return filter.or.some((f) => matchesMetadata(metadata, f));\n }\n if (\"not\" in filter) {\n return !matchesMetadata(metadata, filter.not);\n }\n return compare(getField(metadata, filter.field), filter.op);\n}\n","/**\n * SQL schema constants and migration statements.\n */\n\nexport const SCHEMA_VERSION = 2;\n\nexport const META_KEYS = {\n schemaVersion: \"schema_version\",\n embeddingDimensions: \"embedding_dimensions\",\n vectorBackend: \"vector_backend\",\n} as const;\n\n/** Vector storage backend used by the SQLite provider. */\nexport type VectorBackend = \"sqlite-vec\" | \"blob\";\n\nexport const CREATE_META_TABLE = `\nCREATE TABLE IF NOT EXISTS Wolbarg_meta (\n key TEXT PRIMARY KEY NOT NULL,\n value TEXT NOT NULL\n);\n`;\n\nexport const CREATE_MEMORIES_TABLE = `\nCREATE TABLE IF NOT EXISTS memories (\n id TEXT PRIMARY KEY NOT NULL,\n organization TEXT NOT NULL,\n agent TEXT NOT NULL,\n content_text TEXT NOT NULL,\n metadata_json TEXT NOT NULL DEFAULT '{}',\n archived INTEGER NOT NULL DEFAULT 0 CHECK (archived IN (0, 1)),\n compressed_into TEXT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n FOREIGN KEY (compressed_into) REFERENCES memories(id) ON DELETE SET NULL\n);\n`;\n\nexport const CREATE_HISTORY_TABLE = `\nCREATE TABLE IF NOT EXISTS memory_history (\n id TEXT PRIMARY KEY NOT NULL,\n memory_id TEXT NOT NULL,\n event_type TEXT NOT NULL CHECK (event_type IN ('created', 'archived', 'compressed')),\n related_memory_id TEXT NULL,\n created_at TEXT NOT NULL,\n FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE\n);\n`;\n\n/** Fallback embedding store used when sqlite-vec is unavailable on the platform. */\nexport const CREATE_BLOB_EMBEDDINGS_TABLE = `\nCREATE TABLE IF NOT EXISTS memory_embeddings_blob (\n memory_rowid INTEGER PRIMARY KEY NOT NULL,\n embedding BLOB NOT NULL\n);\n`;\n\n/** FTS5 index for keyword / BM25 search (schema v2). */\nexport const CREATE_FTS_TABLE = `\nCREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(\n content_text,\n memory_id UNINDEXED,\n organization UNINDEXED,\n agent UNINDEXED,\n tokenize = 'porter unicode61'\n);\n`;\n\nexport const CREATE_INDEXES = [\n `CREATE INDEX IF NOT EXISTS idx_memories_org_agent ON memories(organization, agent);`,\n `CREATE INDEX IF NOT EXISTS idx_memories_org_archived ON memories(organization, archived);`,\n /** Active-set covering path for org-scoped list / stats / compress. */\n `CREATE INDEX IF NOT EXISTS idx_memories_org_active_created\n ON memories(organization, created_at) WHERE archived = 0;`,\n `CREATE INDEX IF NOT EXISTS idx_memories_created_at ON memories(created_at);`,\n `CREATE INDEX IF NOT EXISTS idx_history_memory_id ON memory_history(memory_id);`,\n] as const;\n\n/**\n * Build the vec0 virtual table DDL for a fixed embedding dimensionality.\n * Cosine distance enables similarity = 1 - distance.\n */\nexport function buildVectorTableSql(dimensions: number): string {\n if (!Number.isInteger(dimensions) || dimensions <= 0) {\n throw new Error(`Invalid embedding dimensions: ${dimensions}`);\n }\n return `\nCREATE VIRTUAL TABLE IF NOT EXISTS memory_embeddings USING vec0(\n memory_rowid INTEGER PRIMARY KEY,\n embedding float[${dimensions}] distance_metric=cosine\n);\n`;\n}\n","/**\n * Prepared-statement SQL templates for the SQLite provider.\n */\n\nexport const SQL = {\n getMeta: `SELECT value FROM Wolbarg_meta WHERE key = ?`,\n setMeta: `\n INSERT INTO Wolbarg_meta (key, value) VALUES (?, ?)\n ON CONFLICT(key) DO UPDATE SET value = excluded.value\n `,\n\n insertMemory: `\n INSERT INTO memories (\n id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, 0, NULL, ?, ?)\n RETURNING rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n `,\n\n getMemoryById: `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n FROM memories\n WHERE id = ? AND organization = ?\n `,\n\n getMemoryByRowid: `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n FROM memories\n WHERE rowid = ? AND organization = ?\n `,\n\n getMemoriesByRowidsPrefix: `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n FROM memories\n WHERE organization = ? AND rowid IN (\n `,\n\n listMemoriesBase: `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n FROM memories\n WHERE organization = ?\n `,\n\n insertEmbedding: `\n INSERT INTO memory_embeddings (memory_rowid, embedding) VALUES (?, ?)\n `,\n\n deleteEmbedding: `\n DELETE FROM memory_embeddings WHERE memory_rowid = ?\n `,\n\n searchVectors: `\n SELECT memory_rowid, distance\n FROM memory_embeddings\n WHERE embedding MATCH ?\n AND k = ?\n `,\n\n insertEmbeddingBlob: `\n INSERT INTO memory_embeddings_blob (memory_rowid, embedding) VALUES (?, ?)\n `,\n\n deleteEmbeddingBlob: `\n DELETE FROM memory_embeddings_blob WHERE memory_rowid = ?\n `,\n\n listEmbeddingsBlob: `\n SELECT memory_rowid, embedding FROM memory_embeddings_blob\n `,\n\n archiveMemory: `\n UPDATE memories\n SET archived = 1,\n compressed_into = ?,\n updated_at = ?\n WHERE id = ? AND organization = ? AND archived = 0\n `,\n\n deleteMemoryById: `\n DELETE FROM memories WHERE id = ? AND organization = ?\n `,\n\n deleteMemoriesByOrg: `\n DELETE FROM memories WHERE organization = ?\n `,\n\n deleteMemoriesByOrgAgent: `\n DELETE FROM memories WHERE organization = ? AND agent = ?\n `,\n\n insertHistory: `\n INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n VALUES (?, ?, ?, ?, ?)\n `,\n\n getHistory: `\n SELECT id, memory_id, event_type, related_memory_id, created_at\n FROM memory_history\n WHERE memory_id = ?\n ORDER BY created_at ASC\n `,\n\n countMemories: `\n SELECT COUNT(*) AS count FROM memories WHERE organization = ?\n `,\n\n countActiveMemories: `\n SELECT COUNT(*) AS count FROM memories WHERE organization = ? AND archived = 0\n `,\n\n countArchivedMemories: `\n SELECT COUNT(*) AS count FROM memories WHERE organization = ? AND archived = 1\n `,\n\n countAgents: `\n SELECT COUNT(DISTINCT agent) AS count FROM memories WHERE organization = ? AND archived = 0\n `,\n\n /** FTS ranked by BM25 (archived rows are deleted from FTS on archive). */\n searchFts: `\n SELECT memory_id, bm25(memories_fts) AS rank\n FROM memories_fts\n WHERE memories_fts MATCH ?\n AND organization = ?\n ORDER BY rank\n LIMIT ?\n `,\n\n listRowidsForOrg: `\n SELECT rowid FROM memories WHERE organization = ?\n `,\n\n listRowidsForOrgAgent: `\n SELECT rowid FROM memories WHERE organization = ? AND agent = ?\n `,\n\n vectorTableExists: `\n SELECT name FROM sqlite_master\n WHERE type = 'table' AND name = 'memory_embeddings'\n `,\n\n updateMemoryContent: `\n UPDATE memories\n SET content_text = COALESCE(?, content_text),\n metadata_json = COALESCE(?, metadata_json),\n updated_at = ?\n WHERE id = ? AND organization = ?\n `,\n\n insertFts: `\n INSERT INTO memories_fts (content_text, memory_id, organization, agent)\n VALUES (?, ?, ?, ?)\n `,\n\n deleteFts: `\n DELETE FROM memories_fts WHERE memory_id = ?\n `,\n} as const;\n","/**\r\n * Cosine distance helpers for the blob vector fallback backend.\r\n */\r\n\r\n/** Cosine distance = 1 - cosine_similarity (matches sqlite-vec cosine metric). */\r\nexport function cosineDistance(a: Float32Array, b: Float32Array): number {\r\n const len = Math.min(a.length, b.length);\r\n let dot = 0;\r\n let normA = 0;\r\n let normB = 0;\r\n for (let i = 0; i < len; i += 1) {\r\n const av = a[i] ?? 0;\r\n const bv = b[i] ?? 0;\r\n dot += av * bv;\r\n normA += av * av;\r\n normB += bv * bv;\r\n }\r\n if (normA === 0 || normB === 0) {\r\n return 1;\r\n }\r\n const similarity = dot / (Math.sqrt(normA) * Math.sqrt(normB));\r\n return 1 - similarity;\r\n}\r\n\r\n/**\r\n * Decode a float32 embedding from a SQLite BLOB.\r\n * Avoids a copy when the underlying ArrayBuffer is already aligned/owned.\r\n */\r\nexport function bufferToEmbedding(data: Uint8Array | Buffer): Float32Array {\r\n const byteOffset = (data as Uint8Array).byteOffset ?? 0;\r\n const byteLength = data.byteLength;\r\n if (byteOffset % Float32Array.BYTES_PER_ELEMENT === 0) {\r\n return new Float32Array(\r\n (data as Uint8Array).buffer,\r\n byteOffset,\r\n byteLength / Float32Array.BYTES_PER_ELEMENT,\r\n );\r\n }\r\n const copy = new Uint8Array(byteLength);\r\n copy.set(data);\r\n return new Float32Array(copy.buffer);\r\n}\r\n","/**\n * Contiguous in-memory vector index for blob backends (e.g. win32-arm64\n * without sqlite-vec). Stores L2-normalized embeddings for O(n) top-k\n * via fused multiply-add + partial selection — no per-search allocations\n * of distance arrays when n is large.\n */\n\nexport interface InMemoryHit {\n memoryRowid: number;\n distance: number;\n}\n\nexport class InMemoryVectorIndex {\n private readonly dims: number;\n private rowids: number[] = [];\n private data: Float32Array;\n private count = 0;\n private readonly rowidToSlot = new Map<number, number>();\n\n constructor(dimensions: number, initialCapacity = 256) {\n this.dims = dimensions;\n this.data = new Float32Array(initialCapacity * dimensions);\n }\n\n get size(): number {\n return this.count;\n }\n\n clear(): void {\n this.rowids.length = 0;\n this.rowidToSlot.clear();\n this.count = 0;\n }\n\n upsert(rowid: number, embedding: Float32Array): void {\n const existing = this.rowidToSlot.get(rowid);\n const slot =\n existing !== undefined\n ? existing\n : (() => {\n this.ensureCapacity(this.count + 1);\n const s = this.count;\n this.rowids[s] = rowid;\n this.rowidToSlot.set(rowid, s);\n this.count += 1;\n return s;\n })();\n\n const dims = this.dims;\n const base = slot * dims;\n const data = this.data;\n const len = embedding.length < dims ? embedding.length : dims;\n let norm = 0;\n for (let i = 0; i < len; i += 1) {\n const v = embedding[i]!;\n data[base + i] = v;\n norm += v * v;\n }\n for (let i = len; i < dims; i += 1) {\n data[base + i] = 0;\n }\n if (norm > 0) {\n const inv = 1 / Math.sqrt(norm);\n for (let i = 0; i < len; i += 1) {\n data[base + i]! *= inv;\n }\n }\n }\n\n remove(rowid: number): void {\n const slot = this.rowidToSlot.get(rowid);\n if (slot === undefined) {\n return;\n }\n const last = this.count - 1;\n if (slot !== last) {\n const lastRowid = this.rowids[last]!;\n this.data.copyWithin(\n slot * this.dims,\n last * this.dims,\n (last + 1) * this.dims,\n );\n this.rowids[slot] = lastRowid;\n this.rowidToSlot.set(lastRowid, slot);\n }\n this.rowidToSlot.delete(rowid);\n this.count = last;\n }\n\n /** Top-k by cosine distance (1 - dot) assuming query is L2-normalized. */\n search(queryNormalized: Float32Array, topK: number): InMemoryHit[] {\n const n = this.count;\n if (n === 0 || topK <= 0) {\n return [];\n }\n const dims = this.dims;\n const data = this.data;\n const rowids = this.rowids;\n const k = topK < n ? topK : n;\n\n // Small-k: maintain a max-heap of distances (worst of the best-k at root).\n const heapDist = new Float64Array(k);\n const heapRow = new Int32Array(k);\n let heapSize = 0;\n\n for (let i = 0; i < n; i += 1) {\n const base = i * dims;\n let dot = 0;\n // Manual 4-wide unroll for hot loop\n let d = 0;\n for (; d + 3 < dims; d += 4) {\n dot +=\n queryNormalized[d]! * data[base + d]! +\n queryNormalized[d + 1]! * data[base + d + 1]! +\n queryNormalized[d + 2]! * data[base + d + 2]! +\n queryNormalized[d + 3]! * data[base + d + 3]!;\n }\n for (; d < dims; d += 1) {\n dot += queryNormalized[d]! * data[base + d]!;\n }\n const distance = 1 - dot;\n\n if (heapSize < k) {\n heapDist[heapSize] = distance;\n heapRow[heapSize] = rowids[i]!;\n heapSize += 1;\n if (heapSize === k) {\n buildMaxHeap(heapDist, heapRow, k);\n }\n } else if (distance < heapDist[0]!) {\n heapDist[0] = distance;\n heapRow[0] = rowids[i]!;\n siftDown(heapDist, heapRow, 0, k);\n }\n }\n\n const hits: InMemoryHit[] = new Array(heapSize);\n for (let i = 0; i < heapSize; i += 1) {\n hits[i] = { memoryRowid: heapRow[i]!, distance: heapDist[i]! };\n }\n hits.sort((a, b) => a.distance - b.distance);\n return hits;\n }\n\n private ensureCapacity(needed: number): void {\n if (needed * this.dims <= this.data.length) {\n return;\n }\n let cap = this.data.length / this.dims;\n if (cap < 1) cap = 1;\n while (cap < needed) cap *= 2;\n const next = new Float32Array(cap * this.dims);\n next.set(this.data.subarray(0, this.count * this.dims));\n this.data = next;\n }\n}\n\n/** L2-normalize into a new Float32Array of exactly `dims` length. */\nexport function normalizeEmbedding(\n embedding: Float32Array,\n dims = embedding.length,\n): Float32Array {\n return normalizeInto(embedding, dims);\n}\n\nfunction normalizeInto(embedding: Float32Array, dims: number): Float32Array {\n const out = new Float32Array(dims);\n const len = embedding.length < dims ? embedding.length : dims;\n let norm = 0;\n for (let i = 0; i < len; i += 1) {\n const v = embedding[i]!;\n out[i] = v;\n norm += v * v;\n }\n if (norm === 0) {\n return out;\n }\n const inv = 1 / Math.sqrt(norm);\n for (let i = 0; i < len; i += 1) {\n out[i]! *= inv;\n }\n return out;\n}\n\nfunction buildMaxHeap(\n dist: Float64Array,\n rows: Int32Array,\n n: number,\n): void {\n for (let i = (n >> 1) - 1; i >= 0; i -= 1) {\n siftDown(dist, rows, i, n);\n }\n}\n\nfunction siftDown(\n dist: Float64Array,\n rows: Int32Array,\n i: number,\n n: number,\n): void {\n for (;;) {\n let largest = i;\n const left = (i << 1) + 1;\n const right = left + 1;\n if (left < n && dist[left]! > dist[largest]!) largest = left;\n if (right < n && dist[right]! > dist[largest]!) largest = right;\n if (largest === i) return;\n const td = dist[i]!;\n dist[i] = dist[largest]!;\n dist[largest] = td;\n const tr = rows[i]!;\n rows[i] = rows[largest]!;\n rows[largest] = tr;\n i = largest;\n }\n}\n","/**\n * SQLite + sqlite-vec database provider (Node.js built-in `node:sqlite`).\n *\n * Responsibilities:\n * - WAL mode + crash-safe pragmas\n * - Automatic migrations / schema creation\n * - Prepared statements\n * - ACID transactions\n * - Vector index via sqlite-vec vec0 when available\n * - Blob + cosine fallback on unsupported platforms (e.g. win32-arm64)\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DatabaseSync, type StatementSync } from \"node:sqlite\";\nimport * as sqliteVec from \"sqlite-vec\";\n\nimport { DatabaseError, InitializationError } from \"../../errors/index.js\";\nimport { matchesMetadata } from \"../../filters/match.js\";\nimport {\n CREATE_BLOB_EMBEDDINGS_TABLE,\n CREATE_FTS_TABLE,\n CREATE_HISTORY_TABLE,\n CREATE_INDEXES,\n CREATE_MEMORIES_TABLE,\n CREATE_META_TABLE,\n META_KEYS,\n SCHEMA_VERSION,\n buildVectorTableSql,\n type VectorBackend,\n} from \"../../schema/index.js\";\nimport { SQL } from \"../../sql/index.js\";\nimport {\n deserializeMetadata,\n embeddingToBuffer,\n serializeMetadata,\n} from \"../../utils/index.js\";\nimport { bufferToEmbedding } from \"../../utils/vector.js\";\nimport {\n InMemoryVectorIndex,\n normalizeEmbedding,\n} from \"../../utils/vector-index.js\";\nimport type {\n HistoryRow,\n InsertMemoryInput,\n MemoryRow,\n RepositoryFilter,\n StorageProvider,\n UpdateMemoryInput,\n VectorSearchHit,\n} from \"../types.js\";\n\ninterface PreparedStatements {\n getMeta: StatementSync;\n setMeta: StatementSync;\n insertMemory: StatementSync;\n updateMemoryContent: StatementSync;\n getMemoryById: StatementSync;\n getMemoryByRowid: StatementSync;\n insertEmbedding: StatementSync | null;\n deleteEmbedding: StatementSync | null;\n searchVectors: StatementSync | null;\n insertEmbeddingBlob: StatementSync | null;\n deleteEmbeddingBlob: StatementSync | null;\n listEmbeddingsBlob: StatementSync | null;\n archiveMemory: StatementSync;\n deleteMemoryById: StatementSync;\n deleteMemoriesByOrg: StatementSync;\n deleteMemoriesByOrgAgent: StatementSync;\n insertHistory: StatementSync;\n getHistory: StatementSync;\n countMemories: StatementSync;\n countActiveMemories: StatementSync;\n countArchivedMemories: StatementSync;\n countAgents: StatementSync;\n listRowidsForOrg: StatementSync;\n listRowidsForOrgAgent: StatementSync;\n vectorTableExists: StatementSync;\n blobTableExists: StatementSync;\n insertFts: StatementSync | null;\n deleteFts: StatementSync | null;\n searchFts: StatementSync | null;\n}\n\nexport interface SqliteProviderOptions {\n connectionString: string;\n}\n\nexport class SqliteStorageProvider implements StorageProvider {\n readonly name = \"sqlite\";\n\n private readonly connectionString: string;\n private db: DatabaseSync | null = null;\n private statements: PreparedStatements | null = null;\n private vectorDimensions: number | null = null;\n private vectorBackend: VectorBackend | null = null;\n private sqliteVecLoaded = false;\n /** Hot in-process ANN for blob backend (sqlite-vec unavailable platforms). */\n private memoryIndex: InMemoryVectorIndex | null = null;\n private memoryIndexDirty = false;\n /** Resolved absolute path (or `:memory:`) — avoid re-resolving on size checks. */\n private resolvedPath: string | null = null;\n\n constructor(options: SqliteProviderOptions) {\n this.connectionString = options.connectionString;\n }\n\n /** Absolute or relative path / `:memory:` used by this provider. */\n get path(): string {\n return this.connectionString;\n }\n\n async open(): Promise<void> {\n try {\n const dbPath = this.resolvePath(this.connectionString);\n this.resolvedPath = dbPath;\n if (dbPath !== \":memory:\") {\n fs.mkdirSync(path.dirname(dbPath), { recursive: true });\n }\n\n const db = new DatabaseSync(dbPath, { allowExtension: true });\n this.db = db;\n\n // WAL + NORMAL is the production-safe default (multi-reader friendly).\n // Single-process SDK keeps locking_mode=NORMAL (not EXCLUSIVE) so other\n // tools/processes can open the same file for backups or inspection.\n db.exec(\"PRAGMA journal_mode = WAL;\");\n db.exec(`\n PRAGMA synchronous = NORMAL;\n PRAGMA foreign_keys = ON;\n PRAGMA busy_timeout = 5000;\n PRAGMA temp_store = MEMORY;\n PRAGMA cache_size = -65536;\n PRAGMA mmap_size = 268435456;\n PRAGMA wal_autocheckpoint = 1000;\n PRAGMA recursive_triggers = OFF;\n `);\n\n this.sqliteVecLoaded = this.tryLoadSqliteVec(db);\n this.runMigrations(db);\n this.statements = this.prepareStatements(db);\n this.ensureFtsConsistency(db);\n\n const backend = this.readMetaString(META_KEYS.vectorBackend) as VectorBackend | null;\n const dims = this.readMetaNumber(META_KEYS.embeddingDimensions);\n\n if (backend) {\n this.vectorBackend = backend;\n } else if (this.sqliteVecLoaded) {\n this.vectorBackend = \"sqlite-vec\";\n } else {\n this.vectorBackend = \"blob\";\n }\n\n if (dims !== null) {\n this.vectorDimensions = dims;\n this.ensureVectorStorage(dims);\n this.reprepareVectorStatements();\n // Blob ANN hydrate is deferred until first search (warm-start win).\n if (this.vectorBackend === \"blob\") {\n this.memoryIndexDirty = true;\n }\n }\n } catch (error) {\n try {\n this.db?.close();\n } catch {\n // ignore close errors during failed open\n }\n this.db = null;\n this.statements = null;\n throw new InitializationError(\n `Failed to open SQLite database: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async close(): Promise<void> {\n if (!this.db) {\n return;\n }\n try {\n this.db.close();\n } catch (error) {\n throw new DatabaseError(`Failed to close database: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n } finally {\n this.db = null;\n this.statements = null;\n this.memoryIndex = null;\n }\n }\n\n async ensureVectorSchema(dimensions: number): Promise<void> {\n const existing = await this.getEmbeddingDimensions();\n if (existing !== null && existing !== dimensions) {\n throw new InitializationError(\n `Embedding dimensions mismatch: database is configured for ${existing}-d vectors, but the embedding model returned ${dimensions}-d vectors.`,\n );\n }\n\n if (!this.vectorBackend) {\n this.vectorBackend = this.sqliteVecLoaded ? \"sqlite-vec\" : \"blob\";\n }\n\n // Prefer sqlite-vec when available and not already locked to blob.\n if (this.sqliteVecLoaded && this.vectorBackend !== \"blob\") {\n this.vectorBackend = \"sqlite-vec\";\n }\n\n this.ensureVectorStorage(dimensions);\n await this.setMeta(META_KEYS.vectorBackend, this.vectorBackend);\n\n if (existing === null) {\n await this.setEmbeddingDimensions(dimensions);\n }\n this.vectorDimensions = dimensions;\n this.reprepareVectorStatements();\n this.hydrateMemoryIndex();\n }\n\n async getEmbeddingDimensions(): Promise<number | null> {\n return this.readMetaNumber(META_KEYS.embeddingDimensions);\n }\n\n async setEmbeddingDimensions(dimensions: number): Promise<void> {\n await this.setMeta(META_KEYS.embeddingDimensions, String(dimensions));\n this.vectorDimensions = dimensions;\n }\n\n async insertMemory(input: InsertMemoryInput): Promise<MemoryRow> {\n const stmts = this.requireStatements();\n this.requireVectorReady();\n\n return this.withTransaction(() => {\n const row = stmts.insertMemory.get(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n serializeMetadata(input.metadata),\n input.createdAt,\n input.updatedAt,\n ) as unknown as MemoryRow | undefined;\n if (!row || row.rowid === undefined) {\n throw new DatabaseError(\"Failed to read memory after insert\");\n }\n\n this.insertEmbedding(row.rowid, input.embedding);\n // Keep FTS in the same ACID transaction — no deferred/stale keyword search.\n this.insertFtsRow(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n );\n\n stmts.insertHistory.run(\n crypto.randomUUID(),\n input.id,\n \"created\",\n null,\n input.createdAt,\n );\n\n return row;\n });\n }\n\n async insertMemoriesBatch(inputs: InsertMemoryInput[]): Promise<MemoryRow[]> {\n if (inputs.length === 0) {\n return [];\n }\n const stmts = this.requireStatements();\n this.requireVectorReady();\n\n return this.withTransaction(() => {\n const rows: MemoryRow[] = [];\n for (const input of inputs) {\n const row = stmts.insertMemory.get(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n serializeMetadata(input.metadata),\n input.createdAt,\n input.updatedAt,\n ) as unknown as MemoryRow | undefined;\n if (!row || row.rowid === undefined) {\n throw new DatabaseError(\"Failed to read memory after batch insert\");\n }\n\n this.insertEmbedding(row.rowid, input.embedding);\n this.insertFtsRow(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n );\n\n stmts.insertHistory.run(\n crypto.randomUUID(),\n input.id,\n \"created\",\n null,\n input.createdAt,\n );\n rows.push(row);\n }\n return rows;\n });\n }\n\n async updateMemory(input: UpdateMemoryInput): Promise<MemoryRow | null> {\n const stmts = this.requireStatements();\n return this.withTransaction(() => {\n const existing = stmts.getMemoryById.get(\n input.id,\n input.organization,\n ) as unknown as MemoryRow | undefined;\n if (!existing || existing.rowid === undefined) {\n return null;\n }\n\n const contentText = input.contentText ?? existing.content_text;\n const metadataJson =\n input.metadata !== undefined\n ? serializeMetadata(input.metadata)\n : existing.metadata_json;\n\n stmts.updateMemoryContent.run(\n input.contentText ?? null,\n input.metadata !== undefined ? metadataJson : null,\n input.updatedAt,\n input.id,\n input.organization,\n );\n\n if (input.embedding) {\n this.deleteEmbedding(existing.rowid);\n this.insertEmbedding(existing.rowid, input.embedding);\n }\n\n if (input.contentText !== undefined) {\n this.upsertFts(\n input.id,\n input.organization,\n existing.agent,\n contentText,\n );\n }\n\n return stmts.getMemoryById.get(input.id, input.organization) as unknown as MemoryRow;\n });\n }\n\n async searchByMetadata(\n filter: RepositoryFilter,\n limit?: number,\n ): Promise<MemoryRow[]> {\n const rows = await this.listMemories(filter, limit);\n if (!filter.metadata) {\n return rows;\n }\n return rows.filter((row) =>\n matchesMetadata(deserializeMetadata(row.metadata_json), filter.metadata!),\n );\n }\n\n /** Keyword search via FTS5 BM25. Returns memory IDs ranked by relevance. */\n async searchKeyword(\n query: string,\n organization: string,\n topK: number,\n ): Promise<Array<{ memoryId: string; score: number }>> {\n const stmts = this.requireStatements();\n if (!stmts.searchFts) {\n return [];\n }\n try {\n const sanitized = sanitizeFtsQuery(query);\n if (!sanitized) {\n return [];\n }\n const rows = stmts.searchFts.all(sanitized, organization, topK) as unknown as Array<{\n memory_id: string;\n rank: number;\n }>;\n return rows.map((row) => ({\n memoryId: row.memory_id,\n // bm25 returns lower (more negative) for better matches — invert to [0, ∞)\n score: 1 / (1 + Math.abs(row.rank)),\n }));\n } catch {\n return [];\n }\n }\n\n async getMemoryById(\n id: string,\n organization: string,\n ): Promise<MemoryRow | null> {\n const stmts = this.requireStatements();\n const row = stmts.getMemoryById.get(id, organization) as unknown as\n | MemoryRow\n | undefined;\n return row ?? null;\n }\n\n async getMemoryByRowid(\n rowid: number,\n organization: string,\n ): Promise<MemoryRow | null> {\n const stmts = this.requireStatements();\n const row = stmts.getMemoryByRowid.get(rowid, organization) as unknown as\n | MemoryRow\n | undefined;\n return row ?? null;\n }\n\n async getMemoriesByRowids(\n rowids: number[],\n organization: string,\n ): Promise<Map<number, MemoryRow>> {\n const out = new Map<number, MemoryRow>();\n if (rowids.length === 0) {\n return out;\n }\n const db = this.requireDb();\n // Chunk IN lists to stay well under SQLite variable limits.\n const chunkSize = 400;\n for (let offset = 0; offset < rowids.length; offset += chunkSize) {\n const chunk = rowids.slice(offset, offset + chunkSize);\n const placeholders = chunk.map(() => \"?\").join(\",\");\n const sql = `${SQL.getMemoriesByRowidsPrefix}${placeholders})`;\n const rows = db.prepare(sql).all(organization, ...chunk) as unknown as MemoryRow[];\n for (const row of rows) {\n if (row.rowid !== undefined) {\n out.set(row.rowid, row);\n }\n }\n }\n return out;\n }\n\n async listMemories(\n filter: RepositoryFilter,\n limit?: number,\n ): Promise<MemoryRow[]> {\n const db = this.requireDb();\n const clauses: string[] = [`organization = ?`];\n const params: Array<string | number> = [filter.organization];\n\n if (filter.agent) {\n clauses.push(`agent = ?`);\n params.push(filter.agent);\n }\n if (!filter.includeArchived) {\n clauses.push(`archived = 0`);\n }\n\n let sql = `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n FROM memories\n WHERE ${clauses.join(\" AND \")}\n ORDER BY created_at ASC\n `;\n if (limit !== undefined && !filter.metadata) {\n sql += ` LIMIT ?`;\n params.push(limit);\n }\n\n try {\n let rows = db.prepare(sql).all(...params) as unknown as MemoryRow[];\n if (filter.metadata) {\n rows = rows.filter((row) =>\n matchesMetadata(\n deserializeMetadata(row.metadata_json),\n filter.metadata!,\n ),\n );\n if (limit !== undefined) {\n rows = rows.slice(0, limit);\n }\n }\n return rows;\n } catch (error) {\n throw new DatabaseError(`Failed to list memories: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n }\n }\n\n async searchVectors(\n embedding: Float32Array,\n topK: number,\n ): Promise<VectorSearchHit[]> {\n this.requireVectorReady();\n\n if (this.vectorBackend === \"sqlite-vec\") {\n return this.searchWithSqliteVec(embedding, topK);\n }\n return this.searchWithBlobFallback(embedding, topK);\n }\n\n /**\n * Org-scoped KNN + memory rows.\n * Caller (Wolbarg.recall) already passes an overfetched topK — do not multiply again.\n */\n async searchVectorsWithMemories(\n embedding: Float32Array,\n topK: number,\n organization: string,\n options?: { agent?: string; includeArchived?: boolean },\n ): Promise<Array<{ row: MemoryRow; distance: number }>> {\n this.requireVectorReady();\n const hits = await this.searchVectors(embedding, topK);\n if (hits.length === 0) {\n return [];\n }\n const map = await this.getMemoriesByRowids(\n hits.map((h) => h.memoryRowid),\n organization,\n );\n const out: Array<{ row: MemoryRow; distance: number }> = [];\n for (const hit of hits) {\n const row = map.get(hit.memoryRowid);\n if (!row) continue;\n if (options?.agent && row.agent !== options.agent) continue;\n if (!options?.includeArchived && row.archived === 1) continue;\n out.push({ row, distance: hit.distance });\n }\n return out;\n }\n\n async archiveMemories(\n ids: string[],\n organization: string,\n compressedIntoId: string,\n archivedAt: string,\n ): Promise<string[]> {\n const stmts = this.requireStatements();\n const archived: string[] = [];\n\n return this.withTransaction(() => {\n for (const id of ids) {\n const result = stmts.archiveMemory.run(\n compressedIntoId,\n archivedAt,\n id,\n organization,\n );\n if (Number(result.changes) > 0) {\n archived.push(id);\n // Drop archived rows from FTS so keyword/hybrid never return them.\n this.deleteFts(id);\n stmts.insertHistory.run(\n crypto.randomUUID(),\n id,\n \"archived\",\n compressedIntoId,\n archivedAt,\n );\n stmts.insertHistory.run(\n crypto.randomUUID(),\n compressedIntoId,\n \"compressed\",\n id,\n archivedAt,\n );\n }\n }\n return archived;\n });\n }\n\n async deleteMemoryById(id: string, organization: string): Promise<boolean> {\n const stmts = this.requireStatements();\n\n return this.withTransaction(() => {\n const row = stmts.getMemoryById.get(id, organization) as unknown as\n | MemoryRow\n | undefined;\n if (!row || row.rowid === undefined) {\n return false;\n }\n\n this.deleteEmbedding(row.rowid);\n this.deleteFts(id);\n const result = stmts.deleteMemoryById.run(id, organization);\n return Number(result.changes) > 0;\n });\n }\n\n async deleteMemoriesByFilter(filter: RepositoryFilter): Promise<number> {\n const stmts = this.requireStatements();\n const agent = filter.agent;\n if (!agent) {\n throw new DatabaseError(\"deleteMemoriesByFilter requires an agent filter\");\n }\n\n return this.withTransaction(() => {\n const listed = this.listMemoriesSync({\n organization: filter.organization,\n agent,\n includeArchived: true,\n });\n for (const memory of listed) {\n if (memory.rowid !== undefined) {\n this.deleteEmbedding(memory.rowid);\n }\n this.deleteFts(memory.id);\n }\n const result = stmts.deleteMemoriesByOrgAgent.run(\n filter.organization,\n agent,\n );\n return Number(result.changes);\n });\n }\n\n async clearOrganization(organization: string): Promise<number> {\n const stmts = this.requireStatements();\n\n return this.withTransaction(() => {\n const listed = this.listMemoriesSync({ organization, includeArchived: true });\n for (const memory of listed) {\n if (memory.rowid !== undefined) {\n this.deleteEmbedding(memory.rowid);\n }\n this.deleteFts(memory.id);\n }\n const result = stmts.deleteMemoriesByOrg.run(organization);\n return Number(result.changes);\n });\n }\n\n async getHistory(memoryId: string): Promise<HistoryRow[]> {\n const stmts = this.requireStatements();\n return stmts.getHistory.all(memoryId) as unknown as HistoryRow[];\n }\n\n async insertHistoryEvent(event: HistoryRow): Promise<void> {\n const stmts = this.requireStatements();\n stmts.insertHistory.run(\n event.id,\n event.memory_id,\n event.event_type,\n event.related_memory_id,\n event.created_at,\n );\n }\n\n async getStats(\n organization: string,\n ): Promise<{\n totalMemories: number;\n activeMemories: number;\n archivedMemories: number;\n totalAgents: number;\n }> {\n const stmts = this.requireStatements();\n const memories = stmts.countMemories.get(organization) as unknown as {\n count: number | bigint;\n };\n const active = stmts.countActiveMemories.get(organization) as unknown as {\n count: number | bigint;\n };\n const archived = stmts.countArchivedMemories.get(organization) as unknown as {\n count: number | bigint;\n };\n const agents = stmts.countAgents.get(organization) as unknown as {\n count: number | bigint;\n };\n return {\n totalMemories: Number(memories.count),\n activeMemories: Number(active.count),\n archivedMemories: Number(archived.count),\n totalAgents: Number(agents.count),\n };\n }\n\n async getDatabaseSizeBytes(): Promise<number> {\n const db = this.requireDb();\n if (this.connectionString === \":memory:\") {\n const pageCountRow = db.prepare(\"PRAGMA page_count\").get() as\n | Record<string, number | bigint>\n | undefined;\n const pageSizeRow = db.prepare(\"PRAGMA page_size\").get() as\n | Record<string, number | bigint>\n | undefined;\n const pageCount = Number(\n pageCountRow?.page_count ?? Object.values(pageCountRow ?? {})[0] ?? 0,\n );\n const pageSize = Number(\n pageSizeRow?.page_size ?? Object.values(pageSizeRow ?? {})[0] ?? 0,\n );\n return pageCount * pageSize;\n }\n\n const dbPath = this.resolvedPath ?? this.resolvePath(this.connectionString);\n try {\n let total = fs.statSync(dbPath).size;\n for (const suffix of [\"-wal\", \"-shm\"]) {\n const side = `${dbPath}${suffix}`;\n if (fs.existsSync(side)) {\n total += fs.statSync(side).size;\n }\n }\n return total;\n } catch (error) {\n throw new DatabaseError(\n `Failed to determine database size: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n withTransaction<T>(fn: () => T): T {\n const db = this.requireDb();\n // DEFERRED is enough in single-threaded Node; IMMEDIATE adds lock latency.\n db.exec(\"BEGIN\");\n try {\n const result = fn();\n db.exec(\"COMMIT\");\n return result;\n } catch (error) {\n try {\n db.exec(\"ROLLBACK\");\n } catch {\n // ignore rollback errors\n }\n if (\n error instanceof DatabaseError ||\n error instanceof InitializationError\n ) {\n throw error;\n }\n throw new DatabaseError(`Transaction failed: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n }\n }\n\n // ─── internals ───────────────────────────────────────────────────────────\n\n private tryLoadSqliteVec(db: DatabaseSync): boolean {\n try {\n sqliteVec.load(db);\n return true;\n } catch {\n return false;\n }\n }\n\n private runMigrations(db: DatabaseSync): void {\n db.exec(CREATE_META_TABLE);\n db.exec(CREATE_MEMORIES_TABLE);\n db.exec(CREATE_HISTORY_TABLE);\n db.exec(CREATE_BLOB_EMBEDDINGS_TABLE);\n for (const indexSql of CREATE_INDEXES) {\n db.exec(indexSql);\n }\n\n const current = this.readMetaNumberFromDb(db, META_KEYS.schemaVersion);\n if (current === null) {\n db.exec(CREATE_FTS_TABLE);\n this.backfillFts(db);\n db.prepare(SQL.setMeta).run(META_KEYS.schemaVersion, String(SCHEMA_VERSION));\n } else if (current > SCHEMA_VERSION) {\n throw new InitializationError(\n `Database schema version ${current} is newer than this SDK (supports ${SCHEMA_VERSION}).`,\n );\n } else if (current < SCHEMA_VERSION) {\n db.exec(CREATE_FTS_TABLE);\n this.backfillFts(db);\n db.prepare(SQL.setMeta).run(META_KEYS.schemaVersion, String(SCHEMA_VERSION));\n } else {\n db.exec(CREATE_FTS_TABLE);\n }\n }\n\n /**\n * Rebuild FTS from active (non-archived) memories when counts diverge.\n * Guarantees keyword/hybrid correctness after crashes or interrupted writes.\n */\n private ensureFtsConsistency(db: DatabaseSync): void {\n try {\n const memCount = db\n .prepare(`SELECT COUNT(*) AS c FROM memories WHERE archived = 0`)\n .get() as { c: number | bigint };\n const ftsCount = db\n .prepare(`SELECT COUNT(*) AS c FROM memories_fts`)\n .get() as { c: number | bigint };\n if (Number(memCount.c) !== Number(ftsCount.c)) {\n this.backfillFts(db);\n }\n } catch {\n // FTS unavailable — keyword search degrades gracefully.\n }\n }\n\n private backfillFts(db: DatabaseSync): void {\n try {\n db.exec(`DELETE FROM memories_fts`);\n const rows = db\n .prepare(\n `SELECT id, organization, agent, content_text FROM memories WHERE archived = 0`,\n )\n .all() as unknown as Array<{\n id: string;\n organization: string;\n agent: string;\n content_text: string;\n }>;\n const insert = db.prepare(SQL.insertFts);\n for (const row of rows) {\n insert.run(row.content_text, row.id, row.organization, row.agent);\n }\n } catch {\n // FTS may be unavailable on exotic builds — keyword search degrades.\n }\n }\n\n private prepareStatements(db: DatabaseSync): PreparedStatements {\n let insertFts: StatementSync | null = null;\n let deleteFts: StatementSync | null = null;\n let searchFts: StatementSync | null = null;\n try {\n insertFts = db.prepare(SQL.insertFts);\n deleteFts = db.prepare(SQL.deleteFts);\n searchFts = db.prepare(SQL.searchFts);\n } catch {\n // FTS optional\n }\n\n return {\n getMeta: db.prepare(SQL.getMeta),\n setMeta: db.prepare(SQL.setMeta),\n insertMemory: db.prepare(SQL.insertMemory),\n updateMemoryContent: db.prepare(SQL.updateMemoryContent),\n getMemoryById: db.prepare(SQL.getMemoryById),\n getMemoryByRowid: db.prepare(SQL.getMemoryByRowid),\n insertEmbedding: null,\n deleteEmbedding: null,\n searchVectors: null,\n insertEmbeddingBlob: null,\n deleteEmbeddingBlob: null,\n listEmbeddingsBlob: null,\n archiveMemory: db.prepare(SQL.archiveMemory),\n deleteMemoryById: db.prepare(SQL.deleteMemoryById),\n deleteMemoriesByOrg: db.prepare(SQL.deleteMemoriesByOrg),\n deleteMemoriesByOrgAgent: db.prepare(SQL.deleteMemoriesByOrgAgent),\n insertHistory: db.prepare(SQL.insertHistory),\n getHistory: db.prepare(SQL.getHistory),\n countMemories: db.prepare(SQL.countMemories),\n countActiveMemories: db.prepare(SQL.countActiveMemories),\n countArchivedMemories: db.prepare(SQL.countArchivedMemories),\n countAgents: db.prepare(SQL.countAgents),\n listRowidsForOrg: db.prepare(SQL.listRowidsForOrg),\n listRowidsForOrgAgent: db.prepare(SQL.listRowidsForOrgAgent),\n vectorTableExists: db.prepare(SQL.vectorTableExists),\n blobTableExists: db.prepare(\n `SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'memory_embeddings_blob'`,\n ),\n insertFts,\n deleteFts,\n searchFts,\n };\n }\n\n private listMemoriesSync(filter: RepositoryFilter): MemoryRow[] {\n const db = this.requireDb();\n const clauses: string[] = [`organization = ?`];\n const params: Array<string | number> = [filter.organization];\n if (filter.agent) {\n clauses.push(`agent = ?`);\n params.push(filter.agent);\n }\n if (!filter.includeArchived) {\n clauses.push(`archived = 0`);\n }\n const sql = `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n FROM memories\n WHERE ${clauses.join(\" AND \")}\n `;\n return db.prepare(sql).all(...params) as unknown as MemoryRow[];\n }\n\n /** Insert-only FTS row (new memory IDs never collide). */\n private insertFtsRow(\n memoryId: string,\n organization: string,\n agent: string,\n contentText: string,\n ): void {\n const stmts = this.requireStatements();\n if (!stmts.insertFts) {\n return;\n }\n try {\n stmts.insertFts.run(contentText, memoryId, organization, agent);\n } catch {\n // ignore FTS errors — keyword search degrades but semantic search remains\n }\n }\n\n private upsertFts(\n memoryId: string,\n organization: string,\n agent: string,\n contentText: string,\n ): void {\n const stmts = this.requireStatements();\n if (!stmts.insertFts || !stmts.deleteFts) {\n return;\n }\n try {\n stmts.deleteFts.run(memoryId);\n stmts.insertFts.run(contentText, memoryId, organization, agent);\n } catch {\n // ignore FTS errors — keyword search degrades but semantic search remains\n }\n }\n\n private deleteFts(memoryId: string): void {\n const stmts = this.requireStatements();\n if (!stmts.deleteFts) {\n return;\n }\n try {\n stmts.deleteFts.run(memoryId);\n } catch {\n // ignore\n }\n }\n\n private ensureVectorStorage(dimensions: number): void {\n const db = this.requireDb();\n if (this.vectorBackend === \"sqlite-vec\") {\n if (!this.sqliteVecLoaded) {\n throw new InitializationError(\n \"sqlite-vec is required for this database but is unavailable on this platform.\",\n );\n }\n const stmts = this.requireStatements();\n const exists = stmts.vectorTableExists.get() as { name: string } | undefined;\n if (!exists) {\n db.exec(buildVectorTableSql(dimensions));\n }\n this.memoryIndex = null;\n return;\n }\n\n db.exec(CREATE_BLOB_EMBEDDINGS_TABLE);\n if (!this.memoryIndex || this.memoryIndex.size === 0) {\n this.memoryIndex = new InMemoryVectorIndex(dimensions);\n }\n }\n\n private hydrateMemoryIndex(): void {\n if (this.vectorBackend !== \"blob\" || this.vectorDimensions === null) {\n this.memoryIndex = null;\n return;\n }\n const stmts = this.requireStatements();\n if (!stmts.listEmbeddingsBlob) {\n stmts.listEmbeddingsBlob = this.requireDb().prepare(SQL.listEmbeddingsBlob);\n }\n const index = new InMemoryVectorIndex(this.vectorDimensions);\n try {\n const rows = stmts.listEmbeddingsBlob.all() as unknown as Array<{\n memory_rowid: number;\n embedding: Uint8Array | Buffer;\n }>;\n for (const row of rows) {\n index.upsert(row.memory_rowid, bufferToEmbedding(row.embedding));\n }\n } catch {\n // empty table is fine\n }\n this.memoryIndex = index;\n }\n\n private reprepareVectorStatements(): void {\n const db = this.requireDb();\n const stmts = this.requireStatements();\n\n if (this.vectorBackend === \"sqlite-vec\") {\n stmts.insertEmbedding = db.prepare(SQL.insertEmbedding);\n stmts.deleteEmbedding = db.prepare(SQL.deleteEmbedding);\n stmts.searchVectors = db.prepare(SQL.searchVectors);\n stmts.insertEmbeddingBlob = null;\n stmts.deleteEmbeddingBlob = null;\n stmts.listEmbeddingsBlob = null;\n return;\n }\n\n stmts.insertEmbeddingBlob = db.prepare(SQL.insertEmbeddingBlob);\n stmts.deleteEmbeddingBlob = db.prepare(SQL.deleteEmbeddingBlob);\n stmts.listEmbeddingsBlob = db.prepare(SQL.listEmbeddingsBlob);\n stmts.insertEmbedding = null;\n stmts.deleteEmbedding = null;\n stmts.searchVectors = null;\n }\n\n private insertEmbedding(rowid: number, embedding: Float32Array): void {\n const stmts = this.requireStatements();\n if (this.vectorBackend === \"sqlite-vec\") {\n stmts.insertEmbedding!.run(rowid, this.toVectorParam(embedding));\n return;\n }\n stmts.insertEmbeddingBlob!.run(rowid, embeddingToBuffer(embedding));\n // Defer in-memory index rebuild until the next search (faster writes).\n this.memoryIndexDirty = true;\n }\n\n private deleteEmbedding(rowid: number): void {\n const stmts = this.requireStatements();\n try {\n if (this.vectorBackend === \"sqlite-vec\" && stmts.deleteEmbedding) {\n stmts.deleteEmbedding.run(rowid);\n } else if (stmts.deleteEmbeddingBlob) {\n stmts.deleteEmbeddingBlob.run(rowid);\n this.memoryIndex?.remove(rowid);\n this.memoryIndexDirty = true;\n }\n } catch {\n // Ignore missing vectors during delete.\n }\n }\n\n private searchWithSqliteVec(\n embedding: Float32Array,\n topK: number,\n ): VectorSearchHit[] {\n const stmts = this.requireStatements();\n try {\n const rows = stmts.searchVectors!.all(\n this.toVectorParam(embedding),\n topK,\n ) as unknown as Array<{ memory_rowid: number; distance: number }>;\n\n const hits: VectorSearchHit[] = new Array(rows.length);\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i]!;\n hits[i] = {\n memoryRowid: row.memory_rowid,\n distance: row.distance,\n };\n }\n return hits;\n } catch (error) {\n throw new DatabaseError(`Vector search failed: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n }\n }\n\n private searchWithBlobFallback(\n embedding: Float32Array,\n topK: number,\n ): VectorSearchHit[] {\n if (this.memoryIndexDirty || !this.memoryIndex) {\n this.hydrateMemoryIndex();\n this.memoryIndexDirty = false;\n }\n if (this.memoryIndex && this.vectorDimensions !== null) {\n const query = normalizeEmbedding(embedding, this.vectorDimensions);\n return this.memoryIndex.search(query, topK);\n }\n throw new DatabaseError(\"Blob vector index is not initialized\");\n }\n\n private async setMeta(key: string, value: string): Promise<void> {\n const stmts = this.requireStatements();\n stmts.setMeta.run(key, value);\n }\n\n private readMetaNumber(key: string): number | null {\n const stmts = this.requireStatements();\n const row = stmts.getMeta.get(key) as { value: string } | undefined;\n if (!row) {\n return null;\n }\n const parsed = Number(row.value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n private readMetaString(key: string): string | null {\n const stmts = this.requireStatements();\n const row = stmts.getMeta.get(key) as { value: string } | undefined;\n return row?.value ?? null;\n }\n\n private readMetaNumberFromDb(db: DatabaseSync, key: string): number | null {\n const row = db.prepare(SQL.getMeta).get(key) as { value: string } | undefined;\n if (!row) {\n return null;\n }\n const parsed = Number(row.value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n private resolvePath(connectionString: string): string {\n if (connectionString === \":memory:\") {\n return \":memory:\";\n }\n return path.isAbsolute(connectionString)\n ? connectionString\n : path.resolve(process.cwd(), connectionString);\n }\n\n private requireDb(): DatabaseSync {\n if (!this.db) {\n throw new DatabaseError(\"Database is not open. Call init() first.\");\n }\n return this.db;\n }\n\n private requireStatements(): PreparedStatements {\n if (!this.statements) {\n throw new DatabaseError(\"Database statements are not prepared. Call init() first.\");\n }\n return this.statements;\n }\n\n private requireVectorReady(): void {\n if (!this.vectorBackend || this.vectorDimensions === null) {\n throw new DatabaseError(\n \"Vector index is not ready. Embedding dimensions have not been initialized.\",\n );\n }\n }\n\n private toVectorParam(embedding: Float32Array): Uint8Array {\n const buffer = embeddingToBuffer(embedding);\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n\n private describe(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n }\n}\n\n/** @deprecated Prefer {@link SqliteStorageProvider}. */\nexport const SqliteDatabaseProvider = SqliteStorageProvider;\n\n/** Turn free text into a safe FTS5 MATCH query (OR of terms). */\nfunction sanitizeFtsQuery(query: string): string {\n const terms = query\n .split(/\\s+/)\n .map((t) => t.replace(/[\"']/g, \"\").replace(/[^\\p{L}\\p{N}_-]/gu, \"\"))\n .filter((t) => t.length > 0);\n if (terms.length === 0) {\n return \"\";\n }\n return terms.map((t) => `\"${t}\"`).join(\" OR \");\n}\n","/**\n * PostgreSQL storage provider with optional pgvector support.\n * Requires the optional `pg` peer dependency.\n *\n * Performance design:\n * - Per-operation pool queries (no global write lock / shared tx client race)\n * - AsyncLocalStorage for nested transactions\n * - Single-statement CTE inserts (no BEGIN/COMMIT for one memory)\n * - Named prepared statements (parse/plan once per connection)\n * - Concurrent insert coalescing into unnest batches; sequential path is immediate\n * - COPY protocol for large ingest batches\n * - Org-filtered ANN with adaptive overfetch + HNSW iterative scan when available\n * - Joined vector search returning memories in one round-trip when possible\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { DatabaseError, InitializationError, ConfigurationError } from \"../../errors/index.js\";\nimport { matchesMetadata } from \"../../filters/match.js\";\nimport { SCHEMA_VERSION, META_KEYS } from \"../../schema/index.js\";\nimport {\n deserializeMetadata,\n serializeMetadata,\n} from \"../../utils/index.js\";\nimport { cosineDistance } from \"../../utils/vector.js\";\nimport type {\n HistoryRow,\n InsertMemoryInput,\n MemoryRow,\n RepositoryFilter,\n StorageProvider,\n UpdateMemoryInput,\n VectorSearchHit,\n} from \"../types.js\";\n\ntype PgQueryResult = {\n rows: Record<string, unknown>[];\n rowCount: number | null;\n};\n\ntype PgQueryable = {\n query: (\n textOrConfig: string | { name?: string; text: string; values?: unknown[] },\n params?: unknown[],\n ) => Promise<PgQueryResult>;\n};\n\ntype PgPoolClient = PgQueryable & {\n release: () => void;\n query: PgQueryable[\"query\"];\n};\n\ntype PgPool = PgQueryable & {\n end: () => Promise<void>;\n connect: () => Promise<PgPoolClient>;\n totalCount?: number;\n idleCount?: number;\n waitingCount?: number;\n};\n\nexport interface PostgresProviderOptions {\n connectionString: string;\n maxPoolSize?: number;\n}\n\nconst txStore = new AsyncLocalStorage<PgPoolClient>();\n\n/** Statement names for per-connection prepared-statement cache. */\nconst STMT = {\n insertOne: \"Wolbarg_insert_one_v1\",\n insertBatch: \"Wolbarg_insert_batch_v1\",\n} as const;\n\n/** Fast Float32Array → pgvector text literal without Array.from. */\nfunction toVectorLiteral(embedding: Float32Array): string {\n const n = embedding.length;\n let s = \"[\";\n for (let i = 0; i < n; i += 1) {\n if (i !== 0) s += \",\";\n s += embedding[i];\n }\n return s + \"]\";\n}\n\nconst INSERT_ONE_SQL = `WITH mem AS (\n INSERT INTO memories (\n id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n ) VALUES ($1,$2,$3,$4,$5::jsonb,false,NULL,$6,$7)\n RETURNING id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, created_at, updated_at\n ),\n hist AS (\n INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n SELECT $8, id, 'created', NULL, $6 FROM mem\n ),\n mapped AS (\n INSERT INTO memory_row_map (memory_id)\n SELECT id FROM mem\n ON CONFLICT (memory_id) DO NOTHING\n ),\n emb AS (\n INSERT INTO memory_embeddings (memory_id, embedding)\n SELECT id, $9::vector FROM mem\n ON CONFLICT (memory_id) DO UPDATE SET embedding = EXCLUDED.embedding\n )\n SELECT * FROM mem`;\n\nconst INSERT_BATCH_SQL = `WITH mem AS (\n INSERT INTO memories (\n id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n )\n SELECT id, org, agent, txt, meta::jsonb, false, NULL, c, u\n FROM unnest(\n $1::text[], $2::text[], $3::text[], $4::text[],\n $5::text[], $6::timestamptz[], $7::timestamptz[]\n ) AS t(id, org, agent, txt, meta, c, u)\n RETURNING id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, created_at, updated_at\n ),\n hist AS (\n INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n SELECT h, m, 'created', NULL, c\n FROM unnest($8::text[], $1::text[], $6::timestamptz[]) AS t(h, m, c)\n ),\n mapped AS (\n INSERT INTO memory_row_map (memory_id)\n SELECT unnest($1::text[])\n ON CONFLICT (memory_id) DO NOTHING\n ),\n emb AS (\n INSERT INTO memory_embeddings (memory_id, embedding)\n SELECT id, emb::vector\n FROM unnest($1::text[], $9::text[]) AS t(id, emb)\n ON CONFLICT (memory_id) DO UPDATE SET embedding = EXCLUDED.embedding\n )\n SELECT * FROM mem`;\n\nconst COPY_BATCH_THRESHOLD = 64;\n\nexport class PostgresStorageProvider implements StorageProvider {\n readonly name = \"postgres\";\n\n private readonly connectionString: string;\n private readonly maxPoolSize: number;\n private pool: PgPool | null = null;\n private vectorDimensions: number | null = null;\n private hasPgvector = false;\n private hnswIndexEnsured = false;\n private hnswCreateFailures = 0;\n private hasContentTsv = false;\n private iterativeScanEnabled = false;\n /** Coalesce concurrent insertMemory callers into one unnest batch. */\n private insertQueue: Array<{\n input: InsertMemoryInput;\n resolve: (row: MemoryRow) => void;\n reject: (err: unknown) => void;\n }> = [];\n private insertFlushScheduled = false;\n private insertFlushInFlight = false;\n\n constructor(options: PostgresProviderOptions) {\n this.connectionString = options.connectionString;\n // Default 32 — concurrent writers need pool headroom beyond the old max=10.\n this.maxPoolSize = options.maxPoolSize ?? 32;\n }\n\n getPoolStats(): {\n max: number;\n total: number;\n idle: number;\n waiting: number;\n } {\n const pool = this.pool;\n return {\n max: this.maxPoolSize,\n total: pool?.totalCount ?? 0,\n idle: pool?.idleCount ?? 0,\n waiting: pool?.waitingCount ?? 0,\n };\n }\n\n async open(): Promise<void> {\n let PoolCtor: new (config: Record<string, unknown>) => PgPool;\n try {\n const mod = await import(\"pg\");\n PoolCtor =\n (mod as { Pool: typeof PoolCtor }).Pool ??\n (mod as { default: { Pool: typeof PoolCtor } }).default.Pool;\n } catch {\n throw new ConfigurationError(\n 'PostgreSQL storage requires the optional \"pg\" package. Install it with: npm install pg',\n );\n }\n\n try {\n this.pool = new PoolCtor({\n connectionString: this.connectionString,\n max: this.maxPoolSize,\n idleTimeoutMillis: 30_000,\n allowExitOnIdle: true,\n keepAlive: true,\n });\n await this.runMigrations();\n this.hasPgvector = await this.tryEnablePgvector();\n const dims = await this.getEmbeddingDimensions();\n if (dims !== null) {\n this.vectorDimensions = dims;\n await this.ensureVectorTables(dims);\n }\n } catch (error) {\n await this.pool?.end().catch(() => undefined);\n this.pool = null;\n if (error instanceof ConfigurationError || error instanceof InitializationError) {\n throw error;\n }\n throw new InitializationError(\n `Failed to open PostgreSQL database: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async close(): Promise<void> {\n if (!this.pool) {\n return;\n }\n await this.pool.end();\n this.pool = null;\n }\n\n async ensureVectorSchema(dimensions: number): Promise<void> {\n const existing = await this.getEmbeddingDimensions();\n if (existing !== null && existing !== dimensions) {\n throw new InitializationError(\n `Embedding dimensions mismatch: database is configured for ${existing}-d vectors, but the embedding model returned ${dimensions}-d vectors.`,\n );\n }\n this.hasPgvector = await this.tryEnablePgvector();\n await this.ensureVectorTables(dimensions);\n if (existing === null) {\n await this.setEmbeddingDimensions(dimensions);\n }\n this.vectorDimensions = dimensions;\n }\n\n private async ensureVectorTables(dimensions: number): Promise<void> {\n if (this.hasPgvector) {\n await this.query(`\n CREATE TABLE IF NOT EXISTS memory_embeddings (\n memory_id TEXT PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,\n embedding vector(${dimensions})\n )\n `);\n // Do not create HNSW here — defer until first search so bulk inserts stay fast.\n // Do not DROP an existing index either (shared-DB benches would pay rebuild cost).\n const idx = await this.query(\n `SELECT 1 FROM pg_indexes WHERE indexname = 'idx_memory_embeddings_hnsw' LIMIT 1`,\n );\n this.hnswIndexEnsured = idx.rows.length > 0;\n } else {\n await this.query(`\n CREATE TABLE IF NOT EXISTS memory_embeddings_blob (\n memory_id TEXT PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,\n embedding BYTEA NOT NULL\n )\n `);\n }\n }\n\n /**\n * Soft reset for a single organization. Drops HNSW only when the embeddings\n * table is empty so other corpora on a shared bench DB stay intact.\n */\n async resetOrganization(organization: string): Promise<void> {\n await this.query(`DELETE FROM memories WHERE organization = $1`, [\n organization,\n ]);\n const count = await this.query(\n `SELECT COUNT(*)::int AS n FROM memory_embeddings`,\n );\n if (Number(count.rows[0]?.n ?? 0) === 0) {\n await this.query(\n `DROP INDEX IF EXISTS idx_memory_embeddings_hnsw`,\n ).catch(() => undefined);\n this.hnswIndexEnsured = false;\n }\n }\n\n /**\n * Wipe all Wolbarg tables (explicit opt-in). Prefer {@link resetOrganization}.\n */\n async wipeAllData(): Promise<void> {\n await this.query(`TRUNCATE TABLE memories CASCADE`).catch(() => undefined);\n await this.query(\n `DROP INDEX IF EXISTS idx_memory_embeddings_hnsw`,\n ).catch(() => undefined);\n this.hnswIndexEnsured = false;\n }\n\n /** Build HNSW once before the first KNN query (bulk-friendly inserts). */\n private async ensureHnswIndex(): Promise<void> {\n if (!this.hasPgvector || this.hnswIndexEnsured) {\n return;\n }\n try {\n await this.query(`\n CREATE INDEX IF NOT EXISTS idx_memory_embeddings_hnsw\n ON memory_embeddings USING hnsw (embedding vector_cosine_ops)\n WITH (m = 16, ef_construction = 64)\n `);\n this.hnswIndexEnsured = true;\n this.hnswCreateFailures = 0;\n // Prefer iterative filtered scans when the extension supports them.\n if (!this.iterativeScanEnabled) {\n try {\n await this.query(`SET hnsw.iterative_scan = relaxed_order`);\n this.iterativeScanEnabled = true;\n } catch {\n // Older pgvector — adaptive overfetch still guarantees correctness.\n }\n }\n } catch (error) {\n this.hnswCreateFailures += 1;\n if (this.hnswCreateFailures >= 3) {\n throw new DatabaseError(\n `Failed to create HNSW index after ${this.hnswCreateFailures} attempts: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n // Leave hnswIndexEnsured=false so the next search retries.\n }\n }\n\n async getEmbeddingDimensions(): Promise<number | null> {\n const result = await this.query(\n `SELECT value FROM Wolbarg_meta WHERE key = $1`,\n [META_KEYS.embeddingDimensions],\n );\n const value = result.rows[0]?.value;\n if (typeof value !== \"string\") {\n return null;\n }\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n async setEmbeddingDimensions(dimensions: number): Promise<void> {\n await this.query(\n `INSERT INTO Wolbarg_meta (key, value) VALUES ($1, $2)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,\n [META_KEYS.embeddingDimensions, String(dimensions)],\n );\n this.vectorDimensions = dimensions;\n }\n\n async insertMemory(input: InsertMemoryInput): Promise<MemoryRow> {\n this.requireVectorReady();\n\n // Non-contended path: one CTE, zero event-loop delay (production sequential insert).\n if (!this.insertFlushInFlight && this.insertQueue.length === 0) {\n this.insertFlushInFlight = true;\n try {\n return await this.insertMemoryImmediate(input);\n } finally {\n this.insertFlushInFlight = false;\n if (this.insertQueue.length > 0) {\n this.insertFlushScheduled = true;\n queueMicrotask(() => {\n void this.flushInsertQueue();\n });\n }\n }\n }\n\n // Contended path: coalesce concurrent waiters into one unnest round-trip.\n return new Promise<MemoryRow>((resolve, reject) => {\n this.insertQueue.push({ input, resolve, reject });\n if (this.insertQueue.length >= 16) {\n if (this.insertFlushScheduled) {\n this.insertFlushScheduled = false;\n }\n void this.flushInsertQueue();\n return;\n }\n if (!this.insertFlushScheduled) {\n this.insertFlushScheduled = true;\n queueMicrotask(() => {\n void this.flushInsertQueue();\n });\n }\n });\n }\n\n private async flushInsertQueue(): Promise<void> {\n if (this.insertFlushInFlight) {\n // Another writer owns the flush; it will re-check the queue on exit.\n return;\n }\n const batch = this.insertQueue;\n this.insertQueue = [];\n this.insertFlushScheduled = false;\n if (batch.length === 0) {\n return;\n }\n this.insertFlushInFlight = true;\n try {\n if (batch.length === 1) {\n const row = await this.insertMemoryImmediate(batch[0]!.input);\n batch[0]!.resolve(row);\n return;\n }\n const rows = await this.insertMemoriesBatch(batch.map((b) => b.input));\n for (let i = 0; i < batch.length; i += 1) {\n batch[i]!.resolve(rows[i]!);\n }\n } catch (error) {\n for (const item of batch) {\n item.reject(error);\n }\n } finally {\n this.insertFlushInFlight = false;\n if (this.insertQueue.length > 0) {\n this.insertFlushScheduled = true;\n queueMicrotask(() => {\n void this.flushInsertQueue();\n });\n } else {\n this.insertFlushScheduled = false;\n }\n }\n }\n\n /** Single-row insert without coalescing (used by flush + batch of 1). */\n private async insertMemoryImmediate(input: InsertMemoryInput): Promise<MemoryRow> {\n if (this.hasPgvector) {\n const inserted = await this.queryNamed(STMT.insertOne, INSERT_ONE_SQL, [\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n serializeMetadata(input.metadata),\n input.createdAt,\n input.updatedAt,\n crypto.randomUUID(),\n toVectorLiteral(input.embedding),\n ]);\n return this.mapRow(inserted.rows[0]!);\n }\n return this.insertOneBlob(input);\n }\n\n async insertMemoriesBatch(inputs: InsertMemoryInput[]): Promise<MemoryRow[]> {\n if (inputs.length === 0) {\n return [];\n }\n this.requireVectorReady();\n\n if (inputs.length === 1 && this.hasPgvector) {\n return [await this.insertMemoryImmediate(inputs[0]!)];\n }\n\n if (this.hasPgvector) {\n // Large batches: parallel unnest chunks use the pool as a pipeline.\n if (inputs.length >= COPY_BATCH_THRESHOLD) {\n return this.insertBatchChunked(inputs);\n }\n return this.insertBatchPgvector(inputs);\n }\n\n return this.withTransaction(async () => {\n const out: MemoryRow[] = [];\n for (const input of inputs) {\n out.push(await this.insertOneBlob(input));\n }\n return out;\n });\n }\n\n private async insertBatchPgvector(\n inputs: InsertMemoryInput[],\n ): Promise<MemoryRow[]> {\n const ids = new Array<string>(inputs.length);\n const orgs = new Array<string>(inputs.length);\n const agents = new Array<string>(inputs.length);\n const texts = new Array<string>(inputs.length);\n const metas = new Array<string>(inputs.length);\n const created = new Array<string>(inputs.length);\n const updated = new Array<string>(inputs.length);\n const histIds = new Array<string>(inputs.length);\n const vectors = new Array<string>(inputs.length);\n\n for (let i = 0; i < inputs.length; i += 1) {\n const input = inputs[i]!;\n ids[i] = input.id;\n orgs[i] = input.organization;\n agents[i] = input.agent;\n texts[i] = input.contentText;\n metas[i] = serializeMetadata(input.metadata);\n created[i] = input.createdAt;\n updated[i] = input.updatedAt;\n histIds[i] = crypto.randomUUID();\n vectors[i] = toVectorLiteral(input.embedding);\n }\n\n const inserted = await this.queryNamed(STMT.insertBatch, INSERT_BATCH_SQL, [\n ids,\n orgs,\n agents,\n texts,\n metas,\n created,\n updated,\n histIds,\n vectors,\n ]);\n\n const byId = new Map(\n inserted.rows.map((r) => [String(r.id), this.mapRow(r)]),\n );\n return ids.map((id) => byId.get(id)!);\n }\n\n /** Split large ingest batches into parallel unnest chunks (pool pipelining). */\n private async insertBatchChunked(\n inputs: InsertMemoryInput[],\n ): Promise<MemoryRow[]> {\n const chunkSize = 128;\n if (inputs.length <= chunkSize) {\n return this.insertBatchPgvector(inputs);\n }\n const chunks: InsertMemoryInput[][] = [];\n for (let i = 0; i < inputs.length; i += chunkSize) {\n chunks.push(inputs.slice(i, i + chunkSize));\n }\n const results = await Promise.all(\n chunks.map((chunk) => this.insertBatchPgvector(chunk)),\n );\n const out: MemoryRow[] = new Array(inputs.length);\n let offset = 0;\n for (const part of results) {\n for (let i = 0; i < part.length; i += 1) {\n out[offset + i] = part[i]!;\n }\n offset += part.length;\n }\n return out;\n }\n\n private async insertOneBlob(input: InsertMemoryInput): Promise<MemoryRow> {\n const buf = Buffer.from(\n input.embedding.buffer,\n input.embedding.byteOffset,\n input.embedding.byteLength,\n );\n const inserted = await this.query(\n `INSERT INTO memories (\n id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n ) VALUES ($1,$2,$3,$4,$5::jsonb,false,NULL,$6,$7)\n RETURNING id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, created_at, updated_at`,\n [\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n serializeMetadata(input.metadata),\n input.createdAt,\n input.updatedAt,\n ],\n );\n const row = this.mapRow(inserted.rows[0]!);\n await this.query(\n `WITH mapped AS (\n INSERT INTO memory_row_map (memory_id) VALUES ($1)\n ON CONFLICT (memory_id) DO NOTHING\n )\n INSERT INTO memory_embeddings_blob (memory_id, embedding)\n VALUES ($1, $2)\n ON CONFLICT (memory_id) DO UPDATE SET embedding = EXCLUDED.embedding`,\n [input.id, buf],\n );\n await this.query(\n `INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n VALUES ($1,$2,'created',NULL,$3)`,\n [crypto.randomUUID(), input.id, input.createdAt],\n );\n return row;\n }\n\n async updateMemory(input: UpdateMemoryInput): Promise<MemoryRow | null> {\n const existing = await this.getMemoryById(input.id, input.organization);\n if (!existing) {\n return null;\n }\n await this.query(\n `UPDATE memories SET\n content_text = COALESCE($1, content_text),\n metadata_json = COALESCE($2::jsonb, metadata_json),\n updated_at = $3\n WHERE id = $4 AND organization = $5`,\n [\n input.contentText ?? null,\n input.metadata !== undefined ? serializeMetadata(input.metadata) : null,\n input.updatedAt,\n input.id,\n input.organization,\n ],\n );\n if (input.embedding) {\n await this.deleteEmbedding(input.id);\n await this.insertEmbedding(input.id, input.embedding);\n }\n return this.getMemoryById(input.id, input.organization);\n }\n\n async getMemoryById(id: string, organization: string): Promise<MemoryRow | null> {\n const result = await this.query(\n `SELECT id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, created_at, updated_at\n FROM memories WHERE id = $1 AND organization = $2`,\n [id, organization],\n );\n const row = result.rows[0];\n return row ? this.mapRow(row) : null;\n }\n\n async getMemoryByRowid(rowid: number, organization: string): Promise<MemoryRow | null> {\n const result = await this.query(\n `SELECT m.id, m.organization, m.agent, m.content_text, m.metadata_json,\n m.archived::int AS archived, m.compressed_into, m.created_at, m.updated_at,\n e.row_num AS rowid\n FROM memories m\n JOIN memory_row_map e ON e.memory_id = m.id\n WHERE e.row_num = $1 AND m.organization = $2`,\n [rowid, organization],\n );\n const row = result.rows[0];\n return row ? this.mapRow(row) : null;\n }\n\n async getMemoriesByRowids(\n rowids: number[],\n organization: string,\n ): Promise<Map<number, MemoryRow>> {\n const out = new Map<number, MemoryRow>();\n if (rowids.length === 0) {\n return out;\n }\n const result = await this.query(\n `SELECT m.id, m.organization, m.agent, m.content_text, m.metadata_json,\n m.archived::int AS archived, m.compressed_into, m.created_at, m.updated_at,\n e.row_num AS rowid\n FROM memories m\n JOIN memory_row_map e ON e.memory_id = m.id\n WHERE m.organization = $1 AND e.row_num = ANY($2::bigint[])`,\n [organization, rowids],\n );\n for (const row of result.rows) {\n const mapped = this.mapRow(row);\n if (mapped.rowid !== undefined) {\n out.set(mapped.rowid, mapped);\n }\n }\n return out;\n }\n\n async listMemories(filter: RepositoryFilter, limit?: number): Promise<MemoryRow[]> {\n const clauses = [`organization = $1`];\n const params: unknown[] = [filter.organization];\n let idx = 2;\n if (filter.agent) {\n clauses.push(`agent = $${idx++}`);\n params.push(filter.agent);\n }\n if (!filter.includeArchived) {\n clauses.push(`archived = false`);\n }\n let sql = `\n SELECT id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, created_at, updated_at\n FROM memories\n WHERE ${clauses.join(\" AND \")}\n ORDER BY created_at ASC\n `;\n if (limit !== undefined && !filter.metadata) {\n sql += ` LIMIT $${idx}`;\n params.push(limit);\n }\n const result = await this.query(sql, params);\n let rows = result.rows.map((r) => this.mapRow(r));\n if (filter.metadata) {\n rows = rows.filter((row) =>\n matchesMetadata(deserializeMetadata(row.metadata_json), filter.metadata!),\n );\n if (limit !== undefined) {\n rows = rows.slice(0, limit);\n }\n }\n return rows;\n }\n\n async searchByMetadata(\n filter: RepositoryFilter,\n limit?: number,\n ): Promise<MemoryRow[]> {\n return this.listMemories(filter, limit);\n }\n\n async searchKeyword(\n query: string,\n organization: string,\n topK: number,\n ): Promise<Array<{ memoryId: string; score: number }>> {\n const trimmed = query.trim();\n if (!trimmed || topK <= 0) {\n return [];\n }\n try {\n const sql = this.hasContentTsv\n ? `SELECT id AS memory_id,\n ts_rank(content_tsv, plainto_tsquery('english', $1)) AS rank\n FROM memories\n WHERE organization = $2\n AND archived = false\n AND content_tsv @@ plainto_tsquery('english', $1)\n ORDER BY rank DESC\n LIMIT $3`\n : `SELECT id AS memory_id,\n ts_rank(to_tsvector('english', content_text), plainto_tsquery('english', $1)) AS rank\n FROM memories\n WHERE organization = $2\n AND archived = false\n AND to_tsvector('english', content_text) @@ plainto_tsquery('english', $1)\n ORDER BY rank DESC\n LIMIT $3`;\n const result = await this.query(sql, [trimmed, organization, topK]);\n return result.rows.map((row) => ({\n memoryId: String(row.memory_id),\n score: Number(row.rank),\n }));\n } catch {\n return [];\n }\n }\n\n async searchVectors(\n embedding: Float32Array,\n topK: number,\n ): Promise<VectorSearchHit[]> {\n this.requireVectorReady();\n if (this.hasPgvector) {\n await this.ensureHnswIndex();\n const result = await this.query(\n `SELECT r.row_num AS memory_rowid, ann.distance\n FROM (\n SELECT e.memory_id, (e.embedding <=> $1::vector) AS distance\n FROM memory_embeddings e\n ORDER BY e.embedding <=> $1::vector\n LIMIT $2\n ) ann\n JOIN memory_row_map r ON r.memory_id = ann.memory_id\n ORDER BY ann.distance`,\n [toVectorLiteral(embedding), topK],\n );\n const hits: VectorSearchHit[] = new Array(result.rows.length);\n for (let i = 0; i < result.rows.length; i += 1) {\n const row = result.rows[i]!;\n hits[i] = {\n memoryRowid: Number(row.memory_rowid),\n distance: Number(row.distance),\n };\n }\n return hits;\n }\n\n const result = await this.query(\n `SELECT r.row_num AS memory_rowid, e.embedding\n FROM memory_embeddings_blob e\n JOIN memory_row_map r ON r.memory_id = e.memory_id`,\n );\n const scored = result.rows.map((row) => {\n const buf = row.embedding as Buffer;\n const vec = new Float32Array(\n buf.buffer,\n buf.byteOffset,\n buf.byteLength / Float32Array.BYTES_PER_ELEMENT,\n );\n return {\n memoryRowid: Number(row.memory_rowid),\n distance: cosineDistance(embedding, vec),\n };\n });\n scored.sort((a, b) => a.distance - b.distance);\n return scored.slice(0, topK);\n }\n\n async searchVectorsWithMemories(\n embedding: Float32Array,\n topK: number,\n organization: string,\n options?: { agent?: string; includeArchived?: boolean },\n ): Promise<Array<{ row: MemoryRow; distance: number }>> {\n this.requireVectorReady();\n if (!this.hasPgvector) {\n const hits = await this.searchVectors(embedding, topK);\n const map = await this.getMemoriesByRowids(\n hits.map((h) => h.memoryRowid),\n organization,\n );\n const out: Array<{ row: MemoryRow; distance: number }> = [];\n for (const hit of hits) {\n const row = map.get(hit.memoryRowid);\n if (!row) continue;\n if (options?.agent && row.agent !== options.agent) continue;\n if (!options?.includeArchived && row.archived === 1) continue;\n out.push({ row, distance: hit.distance });\n }\n return out;\n }\n\n await this.ensureHnswIndex();\n const vec = toVectorLiteral(embedding);\n\n const mapHits = (\n rows: Record<string, unknown>[],\n ): Array<{ row: MemoryRow; distance: number }> =>\n rows.map((row) => ({\n row: this.mapRow(row),\n distance: Number(row.distance),\n }));\n\n // Subquery-first ANN keeps HNSW eligible. Start with a modest overfetch so\n // shared/multi-tenant corpora still fill topK after org post-filter without\n // many round-trips. Expand only when still under-filled.\n let overfetch = Math.min(Math.max(topK * 8, topK), 512);\n const maxFetch = Math.min(Math.max(topK * 64, 512), 8192);\n for (;;) {\n const agentClause = options?.agent ? \"AND m.agent = $5\" : \"\";\n const archivedClause = options?.includeArchived ? \"\" : \"AND m.archived = false\";\n const params = options?.agent\n ? [vec, overfetch, organization, topK, options.agent]\n : [vec, overfetch, organization, topK];\n const ann = await this.query(\n `WITH ann AS (\n SELECT e.memory_id, (e.embedding <=> $1::vector) AS distance\n FROM memory_embeddings e\n ORDER BY e.embedding <=> $1::vector\n LIMIT $2\n )\n SELECT m.id, m.organization, m.agent, m.content_text, m.metadata_json,\n m.archived::int AS archived, m.compressed_into, m.created_at, m.updated_at,\n r.row_num AS rowid,\n ann.distance,\n (SELECT COUNT(*)::int FROM ann) AS ann_fetched\n FROM ann\n JOIN memory_row_map r ON r.memory_id = ann.memory_id\n JOIN memories m ON m.id = ann.memory_id\n WHERE m.organization = $3\n ${agentClause}\n ${archivedClause}\n ORDER BY ann.distance\n LIMIT $4`,\n params,\n );\n\n const annFetched = Number(ann.rows[0]?.ann_fetched ?? ann.rows.length);\n if (\n ann.rows.length >= topK ||\n annFetched < overfetch ||\n overfetch >= maxFetch\n ) {\n return mapHits(ann.rows.slice(0, topK));\n }\n const next = Math.min(overfetch * 4, maxFetch);\n if (next === overfetch) {\n return mapHits(ann.rows.slice(0, topK));\n }\n overfetch = next;\n }\n }\n\n async archiveMemories(\n ids: string[],\n organization: string,\n compressedIntoId: string,\n archivedAt: string,\n ): Promise<string[]> {\n if (ids.length === 0) {\n return [];\n }\n const result = await this.query(\n `UPDATE memories\n SET archived = true, compressed_into = $1, updated_at = $2\n WHERE organization = $3 AND archived = false AND id = ANY($4::text[])\n RETURNING id`,\n [compressedIntoId, archivedAt, organization, ids],\n );\n const archived = result.rows.map((r) => String(r.id));\n if (archived.length === 0) {\n return [];\n }\n const histIds: string[] = [];\n const memIds: string[] = [];\n const types: string[] = [];\n const related: string[] = [];\n const times: string[] = [];\n for (const id of archived) {\n histIds.push(crypto.randomUUID(), crypto.randomUUID());\n memIds.push(id, compressedIntoId);\n types.push(\"archived\", \"compressed\");\n related.push(compressedIntoId, id);\n times.push(archivedAt, archivedAt);\n }\n await this.query(\n `INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n SELECT * FROM unnest($1::text[], $2::text[], $3::text[], $4::text[], $5::timestamptz[])`,\n [histIds, memIds, types, related, times],\n );\n return archived;\n }\n\n async deleteMemoryById(id: string, organization: string): Promise<boolean> {\n const result = await this.query(\n `DELETE FROM memories WHERE id = $1 AND organization = $2`,\n [id, organization],\n );\n return (result.rowCount ?? 0) > 0;\n }\n\n async deleteMemoriesByFilter(filter: RepositoryFilter): Promise<number> {\n if (!filter.agent) {\n throw new DatabaseError(\"deleteMemoriesByFilter requires an agent filter\");\n }\n const result = await this.query(\n `DELETE FROM memories WHERE organization = $1 AND agent = $2`,\n [filter.organization, filter.agent],\n );\n return result.rowCount ?? 0;\n }\n\n async clearOrganization(organization: string): Promise<number> {\n const result = await this.query(\n `DELETE FROM memories WHERE organization = $1`,\n [organization],\n );\n return result.rowCount ?? 0;\n }\n\n async getHistory(memoryId: string): Promise<HistoryRow[]> {\n const result = await this.query(\n `SELECT id, memory_id, event_type, related_memory_id, created_at\n FROM memory_history WHERE memory_id = $1 ORDER BY created_at ASC`,\n [memoryId],\n );\n return result.rows.map((row) => ({\n id: String(row.id),\n memory_id: String(row.memory_id),\n event_type: row.event_type as HistoryRow[\"event_type\"],\n related_memory_id:\n row.related_memory_id === null ? null : String(row.related_memory_id),\n created_at: String(row.created_at),\n }));\n }\n\n async insertHistoryEvent(event: HistoryRow): Promise<void> {\n await this.query(\n `INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n VALUES ($1,$2,$3,$4,$5)`,\n [\n event.id,\n event.memory_id,\n event.event_type,\n event.related_memory_id,\n event.created_at,\n ],\n );\n }\n\n async getStats(\n organization: string,\n ): Promise<{\n totalMemories: number;\n activeMemories: number;\n archivedMemories: number;\n totalAgents: number;\n }> {\n const result = await this.query(\n `SELECT\n COUNT(*)::int AS memories,\n COUNT(*) FILTER (WHERE archived = false)::int AS active,\n COUNT(*) FILTER (WHERE archived = true)::int AS archived,\n COUNT(DISTINCT agent) FILTER (WHERE archived = false)::int AS agents\n FROM memories WHERE organization = $1`,\n [organization],\n );\n return {\n totalMemories: Number(result.rows[0]?.memories ?? 0),\n activeMemories: Number(result.rows[0]?.active ?? 0),\n archivedMemories: Number(result.rows[0]?.archived ?? 0),\n totalAgents: Number(result.rows[0]?.agents ?? 0),\n };\n }\n\n async getDatabaseSizeBytes(): Promise<number> {\n const result = await this.query(\n `SELECT pg_database_size(current_database())::bigint AS size`,\n );\n return Number(result.rows[0]?.size ?? 0);\n }\n\n async withTransaction<T>(fn: () => T | Promise<T>): Promise<T> {\n const existing = txStore.getStore();\n if (existing) {\n return fn();\n }\n const client = await this.requirePool().connect();\n try {\n await client.query(\"BEGIN\");\n const result = await txStore.run(client, fn);\n await client.query(\"COMMIT\");\n return result;\n } catch (error) {\n await client.query(\"ROLLBACK\").catch(() => undefined);\n if (error instanceof DatabaseError || error instanceof InitializationError) {\n throw error;\n }\n throw new DatabaseError(`Transaction failed: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n } finally {\n client.release();\n }\n }\n\n private async runMigrations(): Promise<void> {\n // Split DDL: node-pg rejects multi-command prepared statements on some paths.\n await this.query(`\n CREATE TABLE IF NOT EXISTS Wolbarg_meta (\n key TEXT PRIMARY KEY NOT NULL,\n value TEXT NOT NULL\n )\n `);\n await this.query(`\n CREATE TABLE IF NOT EXISTS memories (\n id TEXT PRIMARY KEY NOT NULL,\n organization TEXT NOT NULL,\n agent TEXT NOT NULL,\n content_text TEXT NOT NULL,\n metadata_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n archived BOOLEAN NOT NULL DEFAULT false,\n compressed_into TEXT NULL REFERENCES memories(id) ON DELETE SET NULL,\n created_at TIMESTAMPTZ NOT NULL,\n updated_at TIMESTAMPTZ NOT NULL\n )\n `);\n await this.query(`\n CREATE TABLE IF NOT EXISTS memory_history (\n id TEXT PRIMARY KEY NOT NULL,\n memory_id TEXT NOT NULL REFERENCES memories(id) ON DELETE CASCADE,\n event_type TEXT NOT NULL CHECK (event_type IN ('created', 'archived', 'compressed')),\n related_memory_id TEXT NULL,\n created_at TIMESTAMPTZ NOT NULL\n )\n `);\n await this.query(`\n CREATE TABLE IF NOT EXISTS memory_row_map (\n memory_id TEXT PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,\n row_num BIGSERIAL UNIQUE NOT NULL\n )\n `);\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_org_agent ON memories(organization, agent)`,\n );\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_org_archived ON memories(organization, archived)`,\n );\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_org_active_created\n ON memories(organization, created_at) WHERE archived = false`,\n ).catch(() => undefined);\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_metadata ON memories USING GIN (metadata_json)`,\n );\n\n // Stored tsvector column — keyword/hybrid avoid re-computing to_tsvector.\n try {\n await this.query(`\n ALTER TABLE memories\n ADD COLUMN IF NOT EXISTS content_tsv tsvector\n GENERATED ALWAYS AS (to_tsvector('english', content_text)) STORED\n `);\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_content_tsv ON memories USING GIN (content_tsv)`,\n );\n this.hasContentTsv = true;\n } catch {\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_fts\n ON memories USING GIN (to_tsvector('english', content_text))`,\n ).catch(() => undefined);\n this.hasContentTsv = false;\n }\n\n const versionRow = await this.query(\n `SELECT value FROM Wolbarg_meta WHERE key = $1`,\n [META_KEYS.schemaVersion],\n );\n if (!versionRow.rows[0]) {\n await this.query(\n `INSERT INTO Wolbarg_meta (key, value) VALUES ($1, $2)`,\n [META_KEYS.schemaVersion, String(SCHEMA_VERSION)],\n );\n }\n }\n\n private async tryEnablePgvector(): Promise<boolean> {\n try {\n await this.query(`CREATE EXTENSION IF NOT EXISTS vector`);\n return true;\n } catch {\n return false;\n }\n }\n\n private async insertEmbedding(memoryId: string, embedding: Float32Array): Promise<void> {\n if (this.hasPgvector) {\n await this.query(\n `WITH mapped AS (\n INSERT INTO memory_row_map (memory_id) VALUES ($1)\n ON CONFLICT (memory_id) DO NOTHING\n )\n INSERT INTO memory_embeddings (memory_id, embedding)\n VALUES ($1, $2::vector)\n ON CONFLICT (memory_id) DO UPDATE SET embedding = EXCLUDED.embedding`,\n [memoryId, toVectorLiteral(embedding)],\n );\n return;\n }\n const buf = Buffer.from(\n embedding.buffer,\n embedding.byteOffset,\n embedding.byteLength,\n );\n await this.query(\n `WITH mapped AS (\n INSERT INTO memory_row_map (memory_id) VALUES ($1)\n ON CONFLICT (memory_id) DO NOTHING\n )\n INSERT INTO memory_embeddings_blob (memory_id, embedding)\n VALUES ($1, $2)\n ON CONFLICT (memory_id) DO UPDATE SET embedding = EXCLUDED.embedding`,\n [memoryId, buf],\n );\n }\n\n private async deleteEmbedding(memoryId: string): Promise<void> {\n await this.query(`DELETE FROM memory_embeddings WHERE memory_id = $1`, [memoryId]).catch(() => undefined);\n await this.query(`DELETE FROM memory_embeddings_blob WHERE memory_id = $1`, [memoryId]).catch(() => undefined);\n }\n\n private async query(\n text: string,\n params?: unknown[],\n ): Promise<PgQueryResult> {\n const tx = txStore.getStore();\n const target: PgQueryable = tx ?? this.requirePool();\n return target.query(text, params);\n }\n\n /** Named prepared statement — parse/plan cached per pool connection. */\n private async queryNamed(\n name: string,\n text: string,\n params: unknown[],\n ): Promise<PgQueryResult> {\n const tx = txStore.getStore();\n const target: PgQueryable = tx ?? this.requirePool();\n return target.query({ name, text, values: params });\n }\n\n private mapRow(row: Record<string, unknown>): MemoryRow {\n const meta = row.metadata_json;\n let metadata_json: string;\n if (typeof meta === \"string\") {\n metadata_json = meta;\n } else if (meta && typeof meta === \"object\") {\n metadata_json = JSON.stringify(meta);\n } else {\n metadata_json = \"{}\";\n }\n\n const created =\n row.created_at instanceof Date\n ? row.created_at.toISOString()\n : String(row.created_at);\n const updated =\n row.updated_at instanceof Date\n ? row.updated_at.toISOString()\n : String(row.updated_at);\n\n return {\n id: String(row.id),\n organization: String(row.organization),\n agent: String(row.agent),\n content_text: String(row.content_text),\n metadata_json,\n archived: Number(row.archived ?? 0),\n compressed_into:\n row.compressed_into === null || row.compressed_into === undefined\n ? null\n : String(row.compressed_into),\n created_at: created,\n updated_at: updated,\n rowid: row.rowid !== undefined ? Number(row.rowid) : undefined,\n };\n }\n\n private requirePool(): PgPool {\n if (!this.pool) {\n throw new DatabaseError(\"Database is not open. Call open() first.\");\n }\n return this.pool;\n }\n\n private requireVectorReady(): void {\n if (this.vectorDimensions === null) {\n throw new DatabaseError(\n \"Vector index is not ready. Embedding dimensions have not been initialized.\",\n );\n }\n }\n\n private describe(error: unknown): string {\n if (error instanceof Error) {\n const aggregate = error as Error & { errors?: unknown[] };\n if (Array.isArray(aggregate.errors) && aggregate.errors.length > 0) {\n const nested = aggregate.errors\n .map((item) => (item instanceof Error ? item.message : String(item)))\n .join(\"; \");\n return `${error.message || error.name}: ${nested}`;\n }\n return error.message || error.name;\n }\n return String(error);\n }\n}\n","/**\n * Storage provider factory and re-exports.\n */\n\nimport type { DatabaseConfig, StorageConfig } from \"../types/index.js\";\nimport { ConfigurationError } from \"../errors/index.js\";\nimport { resolveDatabaseUrl } from \"../core/options.js\";\nimport type { StorageProvider } from \"./types.js\";\nimport { SqliteStorageProvider } from \"./providers/sqlite.js\";\nimport { PostgresStorageProvider } from \"./providers/postgres.js\";\n\nexport function createStorageProvider(\n config: StorageConfig | DatabaseConfig,\n): StorageProvider {\n const connectionString = resolveDatabaseUrl(config);\n if (!connectionString) {\n throw new ConfigurationError(\n \"database.url or database.connectionString is required\",\n );\n }\n\n if (config.provider === \"sqlite\") {\n return new SqliteStorageProvider({\n connectionString,\n });\n }\n\n if (config.provider === \"postgres\") {\n return new PostgresStorageProvider({\n connectionString,\n maxPoolSize: config.maxPoolSize,\n });\n }\n\n throw new ConfigurationError(\n `Unsupported storage provider: ${String((config as { provider: string }).provider)}`,\n );\n}\n\n/** @deprecated Prefer {@link createStorageProvider}. */\nexport function createDatabaseProvider(\n config: DatabaseConfig,\n): StorageProvider {\n return createStorageProvider(config);\n}\n\nexport type {\n StorageProvider,\n DatabaseProvider,\n MemoryRow,\n HistoryRow,\n InsertMemoryInput,\n UpdateMemoryInput,\n RepositoryFilter,\n VectorSearchHit,\n} from \"./types.js\";\nexport {\n SqliteStorageProvider,\n SqliteDatabaseProvider,\n} from \"./providers/sqlite.js\";\nexport { PostgresStorageProvider } from \"./providers/postgres.js\";\n","/**\n * Portable memory database import / export helpers.\n * Interface is provider-agnostic; SQLite file+manifest is the first implementation.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DatabaseSync } from \"node:sqlite\";\n\nimport { ConfigurationError, DatabaseError, ValidationError } from \"../errors/index.js\";\nimport { nowIso } from \"../utils/index.js\";\n\nexport interface ExportManifest {\n format: \"wolbarg-export-v1\";\n exportedAt: string;\n sdkVersion: string;\n provider: string;\n sourcePath: string;\n organization?: string;\n}\n\nexport interface MemoryExportResult {\n path: string;\n manifest: ExportManifest;\n sizeBytes: number;\n}\n\nexport interface MemoryImportResult {\n path: string;\n manifest: ExportManifest;\n}\n\nexport interface MemoryTransferProvider {\n exportTo(path: string, sourcePath: string, organization?: string): Promise<MemoryExportResult>;\n importFrom(path: string, targetPath: string): Promise<MemoryImportResult>;\n}\n\nconst SDK_VERSION = \"0.3.0\";\n\nexport class SqliteMemoryTransferProvider implements MemoryTransferProvider {\n async exportTo(\n exportPath: string,\n sourcePath: string,\n organization?: string,\n ): Promise<MemoryExportResult> {\n const resolvedSource = resolvePath(sourcePath);\n if (resolvedSource === \":memory:\") {\n throw new ConfigurationError(\n \"Cannot export an in-memory database. Use a file-backed SQLite database.\",\n );\n }\n if (!fs.existsSync(resolvedSource)) {\n throw new DatabaseError(\n `Failed to execute export()\\nReason:\\nSource database not found at ${resolvedSource}\\nSuggestion:\\nInitialize Wolbarg and verify the database path.`,\n );\n }\n\n const resolvedExport = resolvePath(exportPath);\n fs.mkdirSync(path.dirname(resolvedExport), { recursive: true });\n\n const dbExportPath = resolvedExport.endsWith(\".db\")\n ? resolvedExport\n : `${resolvedExport}.db`;\n const manifestPath = `${dbExportPath}.manifest.json`;\n\n await copySqlite(resolvedSource, dbExportPath);\n\n const manifest: ExportManifest = {\n format: \"wolbarg-export-v1\",\n exportedAt: nowIso(),\n sdkVersion: SDK_VERSION,\n provider: \"sqlite\",\n sourcePath: resolvedSource,\n organization,\n };\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), \"utf8\");\n\n return {\n path: dbExportPath,\n manifest,\n sizeBytes: fs.statSync(dbExportPath).size,\n };\n }\n\n async importFrom(\n exportPath: string,\n targetPath: string,\n ): Promise<MemoryImportResult> {\n const resolvedExport = resolvePath(exportPath);\n const dbExportPath = resolvedExport.endsWith(\".db\")\n ? resolvedExport\n : fs.existsSync(`${resolvedExport}.db`)\n ? `${resolvedExport}.db`\n : resolvedExport;\n\n if (!fs.existsSync(dbExportPath)) {\n throw new ValidationError(\n `Failed to execute import()\\nReason:\\nExport file not found at ${dbExportPath}\\nSuggestion:\\nPass the path returned by export().`,\n );\n }\n\n const manifestPath = `${dbExportPath}.manifest.json`;\n let manifest: ExportManifest;\n if (fs.existsSync(manifestPath)) {\n manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf8\")) as ExportManifest;\n if (manifest.format !== \"wolbarg-export-v1\") {\n throw new ValidationError(\n `Unsupported export format: ${String((manifest as { format?: string }).format)}`,\n );\n }\n } else {\n manifest = {\n format: \"wolbarg-export-v1\",\n exportedAt: nowIso(),\n sdkVersion: SDK_VERSION,\n provider: \"sqlite\",\n sourcePath: dbExportPath,\n };\n }\n\n const resolvedTarget = resolvePath(targetPath);\n if (resolvedTarget === \":memory:\") {\n throw new ConfigurationError(\"Cannot import into an in-memory database.\");\n }\n\n for (const suffix of [\"\", \"-wal\", \"-shm\"]) {\n const side = `${resolvedTarget}${suffix}`;\n if (fs.existsSync(side)) {\n fs.rmSync(side, { force: true });\n }\n }\n await copySqlite(dbExportPath, resolvedTarget);\n\n return { path: resolvedTarget, manifest };\n }\n}\n\nasync function copySqlite(sourcePath: string, destPath: string): Promise<void> {\n fs.mkdirSync(path.dirname(destPath), { recursive: true });\n let source: DatabaseSync | null = null;\n let dest: DatabaseSync | null = null;\n try {\n source = new DatabaseSync(sourcePath);\n try {\n source.exec(\"PRAGMA wal_checkpoint(TRUNCATE);\");\n } catch {\n // ignore\n }\n dest = new DatabaseSync(destPath);\n const backupFn = (\n source as unknown as {\n backup?: (target: DatabaseSync) => void | Promise<void>;\n }\n ).backup;\n if (typeof backupFn === \"function\") {\n await backupFn.call(source, dest);\n } else {\n source.close();\n source = null;\n dest.close();\n dest = null;\n fs.copyFileSync(sourcePath, destPath);\n }\n } catch (error) {\n throw new DatabaseError(\n `SQLite transfer failed: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n } finally {\n try {\n source?.close();\n } catch {\n // ignore\n }\n try {\n dest?.close();\n } catch {\n // ignore\n }\n }\n}\n\nfunction resolvePath(p: string): string {\n if (p === \":memory:\") return \":memory:\";\n return path.isAbsolute(p) ? p : path.resolve(process.cwd(), p);\n}\n","/**\n * Memory domain helpers — mapping rows to public records.\n */\n\nimport type { HistoryEvent, MemoryRecord, RecallResult } from \"../types/index.js\";\nimport type { HistoryRow, MemoryRow } from \"../storage/types.js\";\nimport { deserializeMetadata, parseIso } from \"../utils/index.js\";\n\nexport function toMemoryRecord(row: MemoryRow): MemoryRecord {\n return {\n id: row.id,\n organization: row.organization,\n agent: row.agent,\n content: { text: row.content_text },\n metadata: deserializeMetadata(row.metadata_json),\n archived: row.archived === 1,\n compressedInto: row.compressed_into,\n createdAt: parseIso(row.created_at),\n updatedAt: parseIso(row.updated_at),\n };\n}\n\nexport function toRecallResult(row: MemoryRow, similarity: number): RecallResult {\n return {\n id: row.id,\n organization: row.organization,\n agent: row.agent,\n content: { text: row.content_text },\n metadata: deserializeMetadata(row.metadata_json),\n archived: row.archived === 1,\n similarity,\n createdAt: parseIso(row.created_at),\n updatedAt: parseIso(row.updated_at),\n };\n}\n\nexport function toHistoryEvent(row: HistoryRow): HistoryEvent {\n return {\n id: row.id,\n memoryId: row.memory_id,\n eventType: row.event_type,\n relatedMemoryId: row.related_memory_id,\n createdAt: parseIso(row.created_at),\n };\n}\n\nexport {\n SqliteMemoryTransferProvider,\n} from \"./transfer.js\";\nexport type {\n ExportManifest,\n MemoryExportResult,\n MemoryImportResult,\n MemoryTransferProvider,\n} from \"./transfer.js\";\n\n","/**\n * Retrieval pipeline — fusion, MMR, adaptive candidate selection.\n */\n\nimport type { HybridConfig, MmrConfig, RecallResult } from \"../types/index.js\";\n\nexport interface ScoredCandidate {\n id: string;\n semanticScore: number;\n keywordScore: number;\n fusedScore: number;\n result: RecallResult;\n}\n\nexport function fuseScores(\n semantic: Map<string, number>,\n keyword: Map<string, number>,\n weights: Required<HybridConfig>,\n): Map<string, number> {\n const ids = new Set([...semantic.keys(), ...keyword.keys()]);\n const fused = new Map<string, number>();\n const semMax = Math.max(...semantic.values(), 1e-9);\n const kwMax = Math.max(...keyword.values(), 1e-9);\n\n for (const id of ids) {\n const s = (semantic.get(id) ?? 0) / semMax;\n const k = (keyword.get(id) ?? 0) / kwMax;\n fused.set(\n id,\n weights.semanticWeight * s + weights.keywordWeight * k,\n );\n }\n return fused;\n}\n\nexport function resolveHybridWeights(\n hybrid: boolean | HybridConfig | undefined,\n): Required<HybridConfig> | null {\n if (hybrid === false || hybrid === undefined) {\n return null;\n }\n if (hybrid === true) {\n return { semanticWeight: 0.7, keywordWeight: 0.3 };\n }\n return {\n semanticWeight: hybrid.semanticWeight ?? 0.7,\n keywordWeight: hybrid.keywordWeight ?? 0.3,\n };\n}\n\nexport function resolveMmr(\n mmr: boolean | MmrConfig | undefined,\n): number | null {\n if (mmr === false || mmr === undefined) {\n return null;\n }\n if (mmr === true) {\n return 0.5;\n }\n return mmr.lambda ?? 0.5;\n}\n\n/**\n * Maximal Marginal Relevance diversification.\n * Uses character Jaccard as a cheap token-overlap proxy for embedding similarity.\n */\nexport function applyMmr(\n candidates: RecallResult[],\n topK: number,\n lambda: number,\n): RecallResult[] {\n if (candidates.length <= topK) {\n return candidates;\n }\n\n const selected: RecallResult[] = [];\n const remaining = [...candidates];\n\n while (selected.length < topK && remaining.length > 0) {\n let bestIdx = 0;\n let bestScore = -Infinity;\n\n for (let i = 0; i < remaining.length; i += 1) {\n const candidate = remaining[i]!;\n const relevance = candidate.similarity;\n let maxSim = 0;\n for (const chosen of selected) {\n maxSim = Math.max(\n maxSim,\n jaccard(candidate.content.text, chosen.content.text),\n );\n }\n const score = lambda * relevance - (1 - lambda) * maxSim;\n if (score > bestScore) {\n bestScore = score;\n bestIdx = i;\n }\n }\n\n selected.push(remaining[bestIdx]!);\n remaining.splice(bestIdx, 1);\n }\n\n return selected;\n}\n\nfunction jaccard(a: string, b: string): number {\n const ta = new Set(a.toLowerCase().split(/\\s+/).filter(Boolean));\n const tb = new Set(b.toLowerCase().split(/\\s+/).filter(Boolean));\n if (ta.size === 0 && tb.size === 0) {\n return 1;\n }\n let inter = 0;\n for (const t of ta) {\n if (tb.has(t)) {\n inter += 1;\n }\n }\n const union = ta.size + tb.size - inter;\n return union === 0 ? 0 : inter / union;\n}\n\nexport function adaptiveFetchK(\n topK: number,\n overFetchFactor: number,\n hasFilters: boolean,\n): number {\n const factor = hasFilters ? Math.max(overFetchFactor, 4) : overFetchFactor;\n return Math.min(Math.max(Math.ceil(topK * factor), topK), 1000);\n}\n","/**\n * Configuration validation for SDK initialization and constructor options.\n */\n\nimport type {\n WolbargOptions,\n StorageInput,\n} from \"./options.js\";\nimport {\n isEmbeddingProvider,\n isLlmProvider,\n isStorageProvider,\n isTelemetryProvider,\n resolveDatabaseUrl,\n} from \"./options.js\";\nimport type {\n DatabaseConfig,\n EmbeddingConfig,\n InitOptions,\n LlmConfig,\n StorageConfig,\n TelemetryConfig,\n} from \"../types/index.js\";\nimport { ConfigurationError } from \"../errors/index.js\";\n\nfunction assertNonEmpty(value: unknown, fieldName: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new ConfigurationError(`${fieldName} must be a non-empty string`);\n }\n}\n\nfunction assertUrl(value: string, fieldName: string): void {\n assertNonEmpty(value, fieldName);\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n } catch {\n throw new ConfigurationError(\n `${fieldName} must be a valid absolute URL (got \"${value}\")`,\n );\n }\n}\n\nexport function validateEmbeddingConfig(config: EmbeddingConfig): EmbeddingConfig {\n assertUrl(config.baseUrl, \"embedding.baseUrl\");\n assertNonEmpty(config.apiKey, \"embedding.apiKey\");\n assertNonEmpty(config.model, \"embedding.model\");\n if (\n config.timeoutMs !== undefined &&\n (!Number.isFinite(config.timeoutMs) || config.timeoutMs <= 0)\n ) {\n throw new ConfigurationError(\"embedding.timeoutMs must be a positive number\");\n }\n return {\n baseUrl: config.baseUrl.trim().replace(/\\/+$/, \"\"),\n apiKey: config.apiKey,\n model: config.model.trim(),\n ...(config.timeoutMs !== undefined ? { timeoutMs: config.timeoutMs } : {}),\n };\n}\n\nexport function validateLlmConfig(config: LlmConfig): LlmConfig {\n assertUrl(config.baseUrl, \"llm.baseUrl\");\n assertNonEmpty(config.apiKey, \"llm.apiKey\");\n assertNonEmpty(config.model, \"llm.model\");\n if (\n config.temperature !== undefined &&\n (!Number.isFinite(config.temperature) ||\n config.temperature < 0 ||\n config.temperature > 2)\n ) {\n throw new ConfigurationError(\"llm.temperature must be between 0 and 2\");\n }\n if (\n config.maxTokens !== undefined &&\n (!Number.isFinite(config.maxTokens) || config.maxTokens <= 0)\n ) {\n throw new ConfigurationError(\"llm.maxTokens must be a positive number\");\n }\n if (\n config.timeoutMs !== undefined &&\n (!Number.isFinite(config.timeoutMs) || config.timeoutMs <= 0)\n ) {\n throw new ConfigurationError(\"llm.timeoutMs must be a positive number\");\n }\n return {\n baseUrl: config.baseUrl.trim().replace(/\\/+$/, \"\"),\n apiKey: config.apiKey,\n model: config.model.trim(),\n ...(config.temperature !== undefined ? { temperature: config.temperature } : {}),\n ...(config.maxTokens !== undefined ? { maxTokens: config.maxTokens } : {}),\n ...(config.timeoutMs !== undefined ? { timeoutMs: config.timeoutMs } : {}),\n };\n}\n\nexport function normalizeDatabaseConfig(\n config: DatabaseConfig | StorageConfig,\n): DatabaseConfig {\n const provider = config.provider;\n if (provider !== \"sqlite\" && provider !== \"postgres\") {\n throw new ConfigurationError(\n `Unsupported database provider \"${String((config as { provider?: string }).provider)}\". Supported: \"sqlite\", \"postgres\".`,\n );\n }\n const connectionString = resolveDatabaseUrl(config).trim();\n assertNonEmpty(connectionString, \"database.url / database.connectionString\");\n\n if (provider === \"postgres\") {\n return {\n provider: \"postgres\",\n connectionString,\n url: connectionString,\n ...(\"maxPoolSize\" in config && config.maxPoolSize !== undefined\n ? { maxPoolSize: config.maxPoolSize }\n : {}),\n };\n }\n return {\n provider: \"sqlite\",\n connectionString,\n url: connectionString,\n };\n}\n\nexport function validateTelemetryConfig(config: TelemetryConfig): TelemetryConfig {\n if (!config.database || typeof config.database !== \"object\") {\n throw new ConfigurationError(\"telemetry.database is required when telemetry is enabled\");\n }\n if (config.database.provider !== \"sqlite\") {\n throw new ConfigurationError(\n `Unsupported telemetry provider \"${config.database.provider}\". Only \"sqlite\" is implemented in v0.3.0; PostgreSQL will be added later without changing application code.`,\n {\n reason: `provider=${config.database.provider}`,\n suggestion: 'Use telemetry: { database: { provider: \"sqlite\", url: \"./telemetry.db\" } }',\n },\n );\n }\n const url =\n config.database.url?.trim() ||\n config.database.connectionString?.trim() ||\n \"\";\n assertNonEmpty(url, \"telemetry.database.url\");\n\n const level = config.level ?? \"info\";\n const allowed = new Set([\"off\", \"error\", \"warn\", \"info\", \"debug\", \"trace\"]);\n if (!allowed.has(level)) {\n throw new ConfigurationError(`Invalid telemetry.level \"${level}\"`);\n }\n\n return {\n enabled: config.enabled ?? true,\n database: {\n provider: \"sqlite\",\n url,\n connectionString: url,\n },\n level,\n captureQueries: config.captureQueries ?? true,\n captureLatency: config.captureLatency ?? true,\n captureErrors: config.captureErrors ?? true,\n captureSimilarity: config.captureSimilarity ?? true,\n captureEmbeddings: config.captureEmbeddings ?? false,\n };\n}\n\n/**\n * Validate and normalize init options (v0.1 compat).\n */\nexport function validateInitOptions(options: InitOptions): InitOptions {\n if (options === null || typeof options !== \"object\") {\n throw new ConfigurationError(\"init options must be an object\");\n }\n\n assertNonEmpty(options.organization, \"organization\");\n\n if (!options.database || typeof options.database !== \"object\") {\n throw new ConfigurationError(\"database configuration is required\");\n }\n\n const database = normalizeDatabaseConfig(options.database);\n\n if (!options.embedding || typeof options.embedding !== \"object\") {\n throw new ConfigurationError(\"embedding configuration is required\");\n }\n\n const embedding = validateEmbeddingConfig(options.embedding);\n const llm = options.llm ? validateLlmConfig(options.llm) : undefined;\n\n return {\n organization: options.organization.trim(),\n database,\n embedding,\n ...(llm ? { llm } : {}),\n };\n}\n\nfunction resolveStorageInput(options: WolbargOptions): StorageInput {\n if (options.storage && options.database) {\n throw new ConfigurationError(\n \"Pass either storage or database, not both\",\n );\n }\n const input = options.storage ?? options.database;\n if (!input) {\n throw new ConfigurationError(\"storage or database is required\");\n }\n return input;\n}\n\nexport function validateWolbargOptions(options: WolbargOptions): WolbargOptions {\n if (options === null || typeof options !== \"object\") {\n throw new ConfigurationError(\"Wolbarg options must be an object\");\n }\n assertNonEmpty(options.organization, \"organization\");\n\n const storageInput = resolveStorageInput(options);\n let storage: StorageInput = storageInput;\n if (!isStorageProvider(storageInput)) {\n storage = normalizeDatabaseConfig(storageInput);\n }\n\n if (!options.embedding) {\n throw new ConfigurationError(\"embedding is required\");\n }\n if (!isEmbeddingProvider(options.embedding)) {\n validateEmbeddingConfig(options.embedding);\n }\n\n if (options.llm !== undefined && !isLlmProvider(options.llm)) {\n validateLlmConfig(options.llm);\n }\n\n let telemetry = options.telemetry;\n if (telemetry && !isTelemetryProvider(telemetry)) {\n telemetry = validateTelemetryConfig(telemetry);\n }\n\n return {\n ...options,\n organization: options.organization.trim(),\n storage,\n database: undefined,\n ...(telemetry ? { telemetry } : {}),\n };\n}\n","/**\n * Cross-platform structured logger gated by TelemetryLogLevel.\n */\n\nimport type { TelemetryLogLevel } from \"./types.js\";\n\nconst LEVEL_ORDER: Record<TelemetryLogLevel, number> = {\n off: 100,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10,\n};\n\nexport class WolbargLogger {\n constructor(private level: TelemetryLogLevel = \"info\") {}\n\n setLevel(level: TelemetryLogLevel): void {\n this.level = level;\n }\n\n getLevel(): TelemetryLogLevel {\n return this.level;\n }\n\n error(message: string, extra?: unknown): void {\n this.write(\"error\", message, extra);\n }\n\n warn(message: string, extra?: unknown): void {\n this.write(\"warn\", message, extra);\n }\n\n info(message: string, extra?: unknown): void {\n this.write(\"info\", message, extra);\n }\n\n debug(message: string, extra?: unknown): void {\n this.write(\"debug\", message, extra);\n }\n\n trace(message: string, extra?: unknown): void {\n this.write(\"trace\", message, extra);\n }\n\n private write(level: TelemetryLogLevel, message: string, extra?: unknown): void {\n if (LEVEL_ORDER[level] < LEVEL_ORDER[this.level]) {\n return;\n }\n if (this.level === \"off\") {\n return;\n }\n const line = `[wolbarg:${level}] ${message}`;\n if (level === \"error\") {\n console.error(line, extra ?? \"\");\n } else if (level === \"warn\") {\n console.warn(line, extra ?? \"\");\n } else {\n console.log(line, extra ?? \"\");\n }\n }\n}\n","/**\n * Trace context helpers — session_id, trace_id, parent_trace_id.\n */\n\nimport { createId } from \"../utils/index.js\";\n\nexport interface TraceContext {\n sessionId: string;\n traceId: string;\n parentTraceId: string | null;\n}\n\nexport function createSessionId(): string {\n return createId();\n}\n\nexport function createTraceId(): string {\n return createId();\n}\n\nexport function createRootTrace(sessionId: string): TraceContext {\n return {\n sessionId,\n traceId: createTraceId(),\n parentTraceId: null,\n };\n}\n\nexport function createChildTrace(parent: TraceContext): TraceContext {\n return {\n sessionId: parent.sessionId,\n traceId: createTraceId(),\n parentTraceId: parent.traceId,\n };\n}\n","/**\n * Async telemetry emitter that never blocks memory operations.\n */\n\nimport type { TelemetryProvider } from \"../providers/interfaces/TelemetryProvider.js\";\nimport type {\n LatencyBreakdown,\n StageSpan,\n TelemetryConfig,\n TelemetryEventInput,\n TelemetryOperation,\n TelemetryStatus,\n} from \"./types.js\";\nimport { WolbargLogger } from \"./logger.js\";\nimport {\n createChildTrace,\n createRootTrace,\n createSessionId,\n type TraceContext,\n} from \"./trace.js\";\nimport { createId, nowIso } from \"../utils/index.js\";\n\nexport class NoopTelemetryProvider implements TelemetryProvider {\n readonly name = \"noop\";\n\n async open(): Promise<void> {}\n async close(): Promise<void> {}\n emit(_event: TelemetryEventInput): void {}\n async flush(): Promise<void> {}\n}\n\nexport interface OperationTraceHandle {\n context: TraceContext;\n startedAt: number;\n latency: Partial<LatencyBreakdown>;\n child(operation: TelemetryOperation): OperationTraceHandle;\n mark(stage: keyof Omit<LatencyBreakdown, \"totalMs\">, ms: number): void;\n success(fields?: Partial<TelemetryEventInput>): void;\n failure(error: unknown, fields?: Partial<TelemetryEventInput>): void;\n}\n\nexport interface TelemetryEmitterContext {\n organization?: string | null;\n}\n\nexport class TelemetryEmitter {\n readonly sessionId: string;\n readonly logger: WolbargLogger;\n private provider: TelemetryProvider;\n private readonly config: Required<\n Pick<\n TelemetryConfig,\n | \"enabled\"\n | \"level\"\n | \"captureQueries\"\n | \"captureLatency\"\n | \"captureErrors\"\n | \"captureSimilarity\"\n | \"captureEmbeddings\"\n >\n >;\n private readonly context: TelemetryEmitterContext;\n\n constructor(\n provider: TelemetryProvider | null,\n config?: Partial<TelemetryConfig>,\n context: TelemetryEmitterContext = {},\n ) {\n this.sessionId = createSessionId();\n this.provider = provider ?? new NoopTelemetryProvider();\n this.config = {\n enabled: config?.enabled ?? Boolean(provider),\n level: config?.level ?? \"info\",\n captureQueries: config?.captureQueries ?? true,\n captureLatency: config?.captureLatency ?? true,\n captureErrors: config?.captureErrors ?? true,\n captureSimilarity: config?.captureSimilarity ?? true,\n captureEmbeddings: config?.captureEmbeddings ?? false,\n };\n this.context = context;\n this.logger = new WolbargLogger(this.config.level);\n }\n\n get enabled(): boolean {\n return this.config.enabled && this.provider.name !== \"noop\";\n }\n\n setProvider(provider: TelemetryProvider): void {\n this.provider = provider;\n }\n\n async open(): Promise<void> {\n if (!this.config.enabled) {\n return;\n }\n await this.provider.open();\n }\n\n async close(): Promise<void> {\n await this.provider.flush();\n await this.provider.close();\n }\n\n async flush(): Promise<void> {\n await this.provider.flush();\n }\n\n start(operation: TelemetryOperation, parent?: TraceContext): OperationTraceHandle {\n const context = parent\n ? createChildTrace(parent)\n : createRootTrace(this.sessionId);\n const startedAt = performance.now();\n const latency: Partial<LatencyBreakdown> = {};\n const spans: StageSpan[] = [];\n const self = this;\n\n const finish = (\n status: TelemetryStatus,\n fields?: Partial<TelemetryEventInput>,\n error?: unknown,\n ): void => {\n const totalMs = performance.now() - startedAt;\n const errMessage =\n error instanceof Error\n ? error.message\n : error\n ? String(error)\n : fields?.error ?? null;\n const errStack =\n error instanceof Error ? error.stack ?? null : fields?.errorStack ?? null;\n\n if (status === \"error\") {\n self.logger.error(`${operation} failed: ${errMessage ?? \"unknown\"}`);\n } else {\n self.logger.debug(`${operation} completed in ${totalMs.toFixed(2)}ms`);\n }\n\n if (!self.config.enabled) {\n return;\n }\n\n const event: TelemetryEventInput = {\n id: createId(),\n timestamp: nowIso(),\n operation,\n status,\n sessionId: context.sessionId,\n traceId: context.traceId,\n parentTraceId: context.parentTraceId,\n organization: fields?.organization ?? self.context.organization ?? null,\n agentId: fields?.agentId ?? null,\n tags: fields?.tags ?? null,\n checkpointId: fields?.checkpointId ?? null,\n durationMs: totalMs,\n provider: fields?.provider ?? null,\n query: self.config.captureQueries ? (fields?.query ?? null) : null,\n filters: fields?.filters ?? null,\n returnedCount: fields?.returnedCount ?? null,\n memoryIds: fields?.memoryIds ?? null,\n similarityScores: self.config.captureSimilarity\n ? (fields?.similarityScores ?? null)\n : null,\n metadata: fields?.metadata ?? null,\n embeddingProvider: fields?.embeddingProvider ?? null,\n model: fields?.model ?? null,\n error: self.config.captureErrors ? errMessage : null,\n errorStack: self.config.captureErrors ? errStack : null,\n userMetadata: fields?.userMetadata ?? null,\n extra: fields?.extra ?? null,\n latency: self.config.captureLatency\n ? { ...latency, totalMs, ...(fields?.latency ?? {}) }\n : { totalMs },\n explain: fields?.explain ?? null,\n spans: self.config.captureLatency\n ? [...spans, ...(fields?.spans ?? [])]\n : null,\n };\n\n // Never await — memory path must stay non-blocking.\n self.provider.emit(event);\n };\n\n return {\n context,\n startedAt,\n latency,\n child(childOp: TelemetryOperation): OperationTraceHandle {\n return self.start(childOp, context);\n },\n mark(stage, ms) {\n latency[stage] = ms;\n const elapsed = performance.now() - startedAt;\n spans.push({\n name: stage,\n startMs: Math.max(0, elapsed - ms),\n durationMs: ms,\n });\n },\n success(fields) {\n finish(\"ok\", fields);\n },\n failure(error, fields) {\n finish(\"error\", fields, error);\n },\n };\n }\n\n emitStartup(provider: string): void {\n const trace = this.start(\"startup\");\n trace.success({ provider });\n }\n\n emitShutdown(provider: string): void {\n const trace = this.start(\"shutdown\");\n trace.success({ provider });\n }\n}\n","/**\n * SQLite EventDatabase — completely separate from the memory database.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DatabaseSync, type StatementSync } from \"node:sqlite\";\n\nimport { DatabaseError, InitializationError } from \"../../errors/index.js\";\nimport type { EventDatabase } from \"../interfaces/EventDatabase.js\";\nimport type {\n LatencyBreakdown,\n PersistedRecallExplainPayload,\n StageSpan,\n TelemetryEvent,\n TelemetryEventInput,\n TelemetryQuery,\n TelemetryQueryResult,\n} from \"../../telemetry/types.js\";\nimport { createId, nowIso } from \"../../utils/index.js\";\n\nconst SCHEMA_SQL = `\nCREATE TABLE IF NOT EXISTS telemetry_events (\n id TEXT PRIMARY KEY,\n timestamp TEXT NOT NULL,\n operation TEXT NOT NULL,\n provider TEXT,\n duration_ms REAL,\n status TEXT NOT NULL,\n query TEXT,\n filters_json TEXT,\n returned_count INTEGER,\n memory_ids_json TEXT,\n similarity_scores_json TEXT,\n metadata_json TEXT,\n embedding_provider TEXT,\n model TEXT,\n error TEXT,\n error_stack TEXT,\n session_id TEXT NOT NULL,\n trace_id TEXT NOT NULL,\n parent_trace_id TEXT,\n user_metadata_json TEXT,\n extra_json TEXT,\n latency_json TEXT,\n organization TEXT,\n agent_id TEXT,\n tags_json TEXT,\n checkpoint_id TEXT,\n explain_json TEXT,\n spans_json TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_telemetry_timestamp ON telemetry_events(timestamp);\nCREATE INDEX IF NOT EXISTS idx_telemetry_operation ON telemetry_events(operation);\nCREATE INDEX IF NOT EXISTS idx_telemetry_trace ON telemetry_events(trace_id);\nCREATE INDEX IF NOT EXISTS idx_telemetry_session ON telemetry_events(session_id);\nCREATE INDEX IF NOT EXISTS idx_telemetry_status ON telemetry_events(status);\n`;\n\nconst V2_COLUMNS = {\n organization: \"TEXT\",\n agent_id: \"TEXT\",\n tags_json: \"TEXT\",\n checkpoint_id: \"TEXT\",\n explain_json: \"TEXT\",\n spans_json: \"TEXT\",\n} as const;\n\nconst V2_INDEXES_SQL = `\nCREATE INDEX IF NOT EXISTS idx_telemetry_agent ON telemetry_events(agent_id);\nCREATE INDEX IF NOT EXISTS idx_telemetry_org ON telemetry_events(organization);\nCREATE INDEX IF NOT EXISTS idx_telemetry_checkpoint ON telemetry_events(checkpoint_id);\nCREATE INDEX IF NOT EXISTS idx_telemetry_operation_time ON telemetry_events(operation, timestamp);\nCREATE INDEX IF NOT EXISTS idx_telemetry_status_time ON telemetry_events(status, timestamp);\n`;\n\nexport interface SqliteEventDatabaseOptions {\n url: string;\n /** When true, open read-only (Studio). */\n readonly?: boolean;\n}\n\nexport class SqliteEventDatabase implements EventDatabase {\n readonly name = \"sqlite\";\n private readonly url: string;\n private readonly readonly: boolean;\n private db: DatabaseSync | null = null;\n private insertStmt: StatementSync | null = null;\n private columns = new Set<string>();\n\n constructor(options: SqliteEventDatabaseOptions) {\n this.url = options.url;\n this.readonly = options.readonly ?? false;\n }\n\n async open(): Promise<void> {\n try {\n const dbPath = this.resolvePath(this.url);\n if (dbPath !== \":memory:\" && !this.readonly) {\n fs.mkdirSync(path.dirname(dbPath), { recursive: true });\n }\n\n const db = new DatabaseSync(dbPath, {\n allowExtension: false,\n readOnly: this.readonly,\n });\n this.db = db;\n\n if (!this.readonly) {\n db.exec(\"PRAGMA journal_mode = WAL;\");\n db.exec(`\n PRAGMA synchronous = NORMAL;\n PRAGMA busy_timeout = 5000;\n PRAGMA temp_store = MEMORY;\n `);\n db.exec(SCHEMA_SQL);\n this.migrateToV2(db);\n }\n this.columns = readColumns(db);\n if (!this.readonly) {\n this.insertStmt = db.prepare(`\n INSERT INTO telemetry_events (\n id, timestamp, operation, provider, duration_ms, status,\n query, filters_json, returned_count, memory_ids_json,\n similarity_scores_json, metadata_json, embedding_provider, model,\n error, error_stack, session_id, trace_id, parent_trace_id,\n user_metadata_json, extra_json, latency_json, organization,\n agent_id, tags_json, checkpoint_id, explain_json, spans_json\n ) VALUES (\n ?, ?, ?, ?, ?, ?,\n ?, ?, ?, ?,\n ?, ?, ?, ?,\n ?, ?, ?, ?, ?,\n ?, ?, ?, ?,\n ?, ?, ?, ?, ?\n )\n `);\n }\n } catch (error) {\n try {\n this.db?.close();\n } catch {\n // ignore\n }\n this.db = null;\n this.columns.clear();\n throw new InitializationError(\n `Failed to open telemetry EventDatabase: ${describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async close(): Promise<void> {\n if (!this.db) return;\n try {\n this.db.close();\n } finally {\n this.db = null;\n this.insertStmt = null;\n this.columns.clear();\n }\n }\n\n async insertEvent(input: TelemetryEventInput): Promise<TelemetryEvent> {\n const event = normalizeEvent(input);\n const stmt = this.insertStmt;\n if (!stmt) {\n throw new DatabaseError(\"Telemetry EventDatabase is not open for writes\");\n }\n try {\n stmt.run(\n event.id,\n event.timestamp,\n event.operation,\n event.provider,\n event.durationMs,\n event.status,\n event.query,\n jsonOrNull(event.filters),\n event.returnedCount,\n jsonOrNull(event.memoryIds),\n jsonOrNull(event.similarityScores),\n jsonOrNull(event.metadata),\n event.embeddingProvider,\n event.model,\n event.error,\n event.errorStack,\n event.sessionId,\n event.traceId,\n event.parentTraceId,\n jsonOrNull(event.userMetadata),\n jsonOrNull(event.extra),\n jsonOrNull(event.latency),\n event.organization,\n event.agentId,\n jsonOrNull(event.tags),\n event.checkpointId,\n jsonOrNull(event.explain),\n jsonOrNull(event.spans),\n );\n return event;\n } catch (error) {\n throw new DatabaseError(\n `Failed to write telemetry event: ${describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async insertEvents(inputs: TelemetryEventInput[]): Promise<TelemetryEvent[]> {\n const db = this.requireDb();\n const out: TelemetryEvent[] = [];\n db.exec(\"BEGIN\");\n try {\n for (const input of inputs) {\n out.push(await this.insertEvent(input));\n }\n db.exec(\"COMMIT\");\n return out;\n } catch (error) {\n try {\n db.exec(\"ROLLBACK\");\n } catch {\n // ignore\n }\n throw error;\n }\n }\n\n async query(options: TelemetryQuery): Promise<TelemetryQueryResult> {\n const db = this.requireDb();\n const clauses: string[] = [];\n const params: Array<string | number> = [];\n\n if (options.operation) {\n const ops = Array.isArray(options.operation)\n ? options.operation\n : [options.operation];\n clauses.push(`operation IN (${ops.map(() => \"?\").join(\",\")})`);\n params.push(...ops);\n }\n if (options.status) {\n clauses.push(`status = ?`);\n params.push(options.status);\n }\n if (options.traceId) {\n clauses.push(`(trace_id = ? OR parent_trace_id = ?)`);\n params.push(options.traceId, options.traceId);\n }\n if (options.sessionId) {\n clauses.push(`session_id = ?`);\n params.push(options.sessionId);\n }\n this.addOptionalColumnFilter(\n clauses,\n params,\n \"organization\",\n options.organization,\n );\n this.addOptionalColumnFilter(clauses, params, \"agent_id\", options.agentId);\n this.addOptionalColumnFilter(\n clauses,\n params,\n \"checkpoint_id\",\n options.checkpointId,\n );\n if (options.tag) {\n if (this.columns.has(\"tags_json\")) {\n clauses.push(\n `EXISTS (SELECT 1 FROM json_each(tags_json) WHERE json_each.value = ?)`,\n );\n params.push(options.tag);\n } else {\n clauses.push(\"0 = 1\");\n }\n }\n if (options.memoryId) {\n clauses.push(`memory_ids_json LIKE ?`);\n params.push(`%${options.memoryId}%`);\n }\n if (options.queryText) {\n clauses.push(`query LIKE ?`);\n params.push(`%${options.queryText}%`);\n }\n if (options.since) {\n clauses.push(`timestamp >= ?`);\n params.push(options.since);\n }\n if (options.until) {\n clauses.push(`timestamp <= ?`);\n params.push(options.until);\n }\n\n const where = clauses.length > 0 ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n const sortCol =\n options.sortBy === \"duration_ms\" ? \"duration_ms\" : \"timestamp\";\n const sortDir = options.sortDir === \"asc\" ? \"ASC\" : \"DESC\";\n const limit = options.limit ?? 50;\n const offset = options.offset ?? 0;\n\n const totalRow = db\n .prepare(`SELECT COUNT(*) AS c FROM telemetry_events ${where}`)\n .get(...params) as { c: number | bigint };\n const rows = db\n .prepare(\n `SELECT * FROM telemetry_events ${where}\n ORDER BY ${sortCol} ${sortDir}\n LIMIT ? OFFSET ?`,\n )\n .all(...params, limit, offset) as unknown as Row[];\n\n return {\n events: rows.map(rowToEvent),\n total: Number(totalRow.c),\n limit,\n offset,\n };\n }\n\n async getEvent(id: string): Promise<TelemetryEvent | null> {\n const db = this.requireDb();\n const row = db\n .prepare(`SELECT * FROM telemetry_events WHERE id = ?`)\n .get(id) as Row | undefined;\n return row ? rowToEvent(row) : null;\n }\n\n async countEvents(filter?: {\n since?: string;\n operation?: string;\n }): Promise<number> {\n const db = this.requireDb();\n const clauses: string[] = [];\n const params: string[] = [];\n if (filter?.since) {\n clauses.push(`timestamp >= ?`);\n params.push(filter.since);\n }\n if (filter?.operation) {\n clauses.push(`operation = ?`);\n params.push(filter.operation);\n }\n const where = clauses.length ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n const row = db\n .prepare(`SELECT COUNT(*) AS c FROM telemetry_events ${where}`)\n .get(...params) as { c: number | bigint };\n return Number(row.c);\n }\n\n private requireDb(): DatabaseSync {\n if (!this.db) {\n throw new DatabaseError(\"Telemetry EventDatabase is not open\");\n }\n return this.db;\n }\n\n private migrateToV2(db: DatabaseSync): void {\n const columns = readColumns(db);\n for (const [name, type] of Object.entries(V2_COLUMNS)) {\n if (!columns.has(name)) {\n db.exec(`ALTER TABLE telemetry_events ADD COLUMN ${name} ${type};`);\n }\n }\n db.exec(`\n CREATE TABLE IF NOT EXISTS telemetry_meta (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n INSERT INTO telemetry_meta(key, value) VALUES ('schema_version', '2')\n ON CONFLICT(key) DO UPDATE SET value = excluded.value;\n ${V2_INDEXES_SQL}\n `);\n }\n\n private addOptionalColumnFilter(\n clauses: string[],\n params: Array<string | number>,\n column: string,\n value: string | undefined,\n ): void {\n if (!value) return;\n if (!this.columns.has(column)) {\n clauses.push(\"0 = 1\");\n return;\n }\n clauses.push(`${column} = ?`);\n params.push(value);\n }\n\n private resolvePath(url: string): string {\n if (url === \":memory:\") return \":memory:\";\n return path.isAbsolute(url) ? url : path.resolve(process.cwd(), url);\n }\n}\n\ninterface Row {\n id: string;\n timestamp: string;\n operation: string;\n provider: string | null;\n duration_ms: number | null;\n status: string;\n query: string | null;\n filters_json: string | null;\n returned_count: number | null;\n memory_ids_json: string | null;\n similarity_scores_json: string | null;\n metadata_json: string | null;\n embedding_provider: string | null;\n model: string | null;\n error: string | null;\n error_stack: string | null;\n session_id: string;\n trace_id: string;\n parent_trace_id: string | null;\n user_metadata_json: string | null;\n extra_json: string | null;\n latency_json: string | null;\n organization?: string | null;\n agent_id?: string | null;\n tags_json?: string | null;\n checkpoint_id?: string | null;\n explain_json?: string | null;\n spans_json?: string | null;\n}\n\nfunction normalizeEvent(input: TelemetryEventInput): TelemetryEvent {\n return {\n id: input.id ?? createId(),\n timestamp: input.timestamp ?? nowIso(),\n operation: input.operation,\n provider: input.provider ?? null,\n durationMs: input.durationMs ?? null,\n status: input.status,\n query: input.query ?? null,\n filters: input.filters ?? null,\n returnedCount: input.returnedCount ?? null,\n memoryIds: input.memoryIds ?? null,\n similarityScores: input.similarityScores ?? null,\n metadata: input.metadata ?? null,\n embeddingProvider: input.embeddingProvider ?? null,\n model: input.model ?? null,\n error: input.error ?? null,\n errorStack: input.errorStack ?? null,\n sessionId: input.sessionId,\n traceId: input.traceId,\n parentTraceId: input.parentTraceId ?? null,\n organization: input.organization ?? null,\n agentId: input.agentId ?? null,\n tags: input.tags ?? null,\n checkpointId: input.checkpointId ?? null,\n userMetadata: input.userMetadata ?? null,\n extra: input.extra ?? null,\n latency: input.latency ?? null,\n explain: input.explain ?? null,\n spans: input.spans ?? null,\n };\n}\n\nfunction rowToEvent(row: Row): TelemetryEvent {\n return {\n id: row.id,\n timestamp: row.timestamp,\n operation: row.operation as TelemetryEvent[\"operation\"],\n provider: row.provider,\n durationMs: row.duration_ms,\n status: row.status as TelemetryEvent[\"status\"],\n query: row.query,\n filters: parseJson(row.filters_json),\n returnedCount: row.returned_count,\n memoryIds: parseJson(row.memory_ids_json) as string[] | null,\n similarityScores: parseJson(row.similarity_scores_json) as number[] | null,\n metadata: parseJson(row.metadata_json) as Record<string, unknown> | null,\n embeddingProvider: row.embedding_provider,\n model: row.model,\n error: row.error,\n errorStack: row.error_stack,\n sessionId: row.session_id,\n traceId: row.trace_id,\n parentTraceId: row.parent_trace_id,\n organization: row.organization ?? null,\n agentId: row.agent_id ?? null,\n tags: parseJson(row.tags_json ?? null) as string[] | null,\n checkpointId: row.checkpoint_id ?? null,\n userMetadata: parseJson(row.user_metadata_json) as Record<\n string,\n unknown\n > | null,\n extra: parseJson(row.extra_json) as Record<string, unknown> | null,\n latency: parseJson(row.latency_json) as LatencyBreakdown | null,\n explain: parseJson(\n row.explain_json ?? null,\n ) as PersistedRecallExplainPayload | null,\n spans: parseJson(row.spans_json ?? null) as StageSpan[] | null,\n };\n}\n\nfunction readColumns(db: DatabaseSync): Set<string> {\n const rows = db.prepare(\"PRAGMA table_info(telemetry_events)\").all() as Array<{\n name: string;\n }>;\n return new Set(rows.map((row) => row.name));\n}\n\nfunction jsonOrNull(value: unknown): string | null {\n if (value === undefined || value === null) return null;\n return JSON.stringify(value);\n}\n\nfunction parseJson(value: string | null): unknown {\n if (!value) return null;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n\nfunction describe(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","/**\n * SQLite TelemetryProvider backed by an independent EventDatabase.\n * Writes are queued and flushed asynchronously so memory ops stay fast.\n */\n\nimport type { TelemetryProvider } from \"../interfaces/TelemetryProvider.js\";\nimport type {\n TelemetryEvent,\n TelemetryEventInput,\n TelemetryQuery,\n TelemetryQueryResult,\n} from \"../../telemetry/types.js\";\nimport { SqliteEventDatabase } from \"./sqliteEventDatabase.js\";\n\nexport interface SqliteTelemetryProviderOptions {\n url: string;\n}\n\nexport class SqliteTelemetryProvider implements TelemetryProvider {\n readonly name = \"sqlite\";\n private readonly db: SqliteEventDatabase;\n private queue: TelemetryEventInput[] = [];\n private flushing: Promise<void> | null = null;\n private closed = false;\n private openPromise: Promise<void> | null = null;\n\n constructor(options: SqliteTelemetryProviderOptions) {\n this.db = new SqliteEventDatabase({ url: options.url });\n }\n\n async open(): Promise<void> {\n if (!this.openPromise) {\n this.openPromise = this.db.open();\n }\n await this.openPromise;\n this.closed = false;\n }\n\n async close(): Promise<void> {\n this.closed = true;\n await this.flush();\n await this.db.close();\n this.openPromise = null;\n }\n\n emit(event: TelemetryEventInput): void {\n if (this.closed) {\n return;\n }\n this.queue.push(event);\n void this.scheduleFlush();\n }\n\n async flush(): Promise<void> {\n while (this.queue.length > 0 || this.flushing) {\n await this.scheduleFlush();\n if (this.flushing) {\n await this.flushing;\n }\n }\n }\n\n async query(options: TelemetryQuery): Promise<TelemetryQueryResult> {\n await this.open();\n return this.db.query(options);\n }\n\n async getEvent(id: string): Promise<TelemetryEvent | null> {\n await this.open();\n return this.db.getEvent(id);\n }\n\n private scheduleFlush(): Promise<void> {\n if (this.flushing) {\n return this.flushing;\n }\n this.flushing = this.runFlush().finally(() => {\n this.flushing = null;\n });\n return this.flushing;\n }\n\n private async runFlush(): Promise<void> {\n if (this.queue.length === 0) {\n return;\n }\n await this.open();\n const batch = this.queue.splice(0, this.queue.length);\n try {\n if (typeof this.db.insertEvents === \"function\") {\n await this.db.insertEvents(batch);\n } else {\n for (const event of batch) {\n await this.db.insertEvent(event);\n }\n }\n } catch {\n // Telemetry must never crash the host application.\n // Drop failed batch rather than re-queue forever.\n }\n }\n}\n","/**\n * First-party SQLite checkpoint provider.\n * Creates immutable named snapshots of the memory database.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DatabaseSync } from \"node:sqlite\";\n\nimport {\n ConfigurationError,\n DatabaseError,\n ValidationError,\n} from \"../../errors/index.js\";\nimport type {\n CheckpointMeta,\n CheckpointProvider,\n CreateCheckpointOptions,\n} from \"../interfaces/CheckpointProvider.js\";\nimport { nowIso } from \"../../utils/index.js\";\n\nconst SDK_VERSION = \"0.3.0\";\n\nexport interface SqliteCheckpointProviderOptions {\n /** Directory that stores checkpoint snapshots + metadata. */\n directory?: string;\n}\n\ninterface CheckpointRecord extends CheckpointMeta {\n // marker for JSON shape\n}\n\nexport class SqliteCheckpointProvider implements CheckpointProvider {\n readonly name = \"sqlite\";\n private readonly directory: string;\n private ready = false;\n\n constructor(options?: SqliteCheckpointProviderOptions) {\n this.directory =\n options?.directory ??\n path.resolve(process.cwd(), \".wolbarg\", \"checkpoints\");\n }\n\n async open(): Promise<void> {\n fs.mkdirSync(this.directory, { recursive: true });\n this.ready = true;\n }\n\n async close(): Promise<void> {\n this.ready = false;\n }\n\n async checkpoint(\n name: string,\n sourcePath: string,\n options?: CreateCheckpointOptions,\n ): Promise<CheckpointMeta> {\n this.requireReady();\n assertCheckpointName(name);\n\n const metaPath = this.metaPath(name);\n if (fs.existsSync(metaPath)) {\n throw new ValidationError(\n `Checkpoint \"${name}\" already exists. Choose a different name — checkpoints are never overwritten.`,\n );\n }\n\n const resolvedSource = resolveDbPath(sourcePath);\n if (resolvedSource === \":memory:\") {\n throw new ConfigurationError(\n \"Cannot checkpoint an in-memory database. Use a file-backed SQLite database.\",\n );\n }\n if (!fs.existsSync(resolvedSource)) {\n throw new DatabaseError(\n `Failed to execute checkpoint()\\nReason:\\nMemory database not found at ${resolvedSource}\\nSuggestion:\\nEnsure Wolbarg has been initialized and the database path is correct.`,\n );\n }\n\n const snapshotPath = this.snapshotPath(name);\n await safeSqliteBackup(resolvedSource, snapshotPath);\n\n const stats = fs.statSync(snapshotPath);\n const meta: CheckpointRecord = {\n name,\n description: options?.description ?? null,\n createdAt: nowIso(),\n sdkVersion: SDK_VERSION,\n provider: this.name,\n snapshotPath,\n sourcePath: resolvedSource,\n sizeBytes: stats.size,\n };\n fs.writeFileSync(metaPath, JSON.stringify(meta, null, 2), \"utf8\");\n return meta;\n }\n\n async rollback(name: string, targetPath: string): Promise<CheckpointMeta> {\n this.requireReady();\n const meta = await this.getCheckpoint(name);\n if (!meta) {\n throw new ValidationError(`Checkpoint \"${name}\" was not found`);\n }\n const resolvedTarget = resolveDbPath(targetPath);\n if (resolvedTarget === \":memory:\") {\n throw new ConfigurationError(\n \"Cannot rollback into an in-memory database.\",\n );\n }\n\n fs.mkdirSync(path.dirname(resolvedTarget), { recursive: true });\n // Remove WAL/SHM so the restored main file is authoritative.\n for (const suffix of [\"\", \"-wal\", \"-shm\"]) {\n const side = `${resolvedTarget}${suffix}`;\n if (fs.existsSync(side)) {\n fs.rmSync(side, { force: true });\n }\n }\n await safeSqliteBackup(meta.snapshotPath, resolvedTarget);\n return meta;\n }\n\n async deleteCheckpoint(name: string): Promise<boolean> {\n this.requireReady();\n const metaPath = this.metaPath(name);\n const snapshotPath = this.snapshotPath(name);\n let removed = false;\n if (fs.existsSync(metaPath)) {\n fs.rmSync(metaPath, { force: true });\n removed = true;\n }\n if (fs.existsSync(snapshotPath)) {\n fs.rmSync(snapshotPath, { force: true });\n removed = true;\n }\n return removed;\n }\n\n async listCheckpoints(): Promise<CheckpointMeta[]> {\n this.requireReady();\n if (!fs.existsSync(this.directory)) {\n return [];\n }\n const files = fs\n .readdirSync(this.directory)\n .filter((f) => f.endsWith(\".json\"));\n const out: CheckpointMeta[] = [];\n for (const file of files) {\n try {\n const raw = fs.readFileSync(path.join(this.directory, file), \"utf8\");\n out.push(JSON.parse(raw) as CheckpointMeta);\n } catch {\n // skip corrupt metadata\n }\n }\n return out.sort((a, b) => a.createdAt.localeCompare(b.createdAt));\n }\n\n async getCheckpoint(name: string): Promise<CheckpointMeta | null> {\n this.requireReady();\n const metaPath = this.metaPath(name);\n if (!fs.existsSync(metaPath)) {\n return null;\n }\n try {\n return JSON.parse(fs.readFileSync(metaPath, \"utf8\")) as CheckpointMeta;\n } catch {\n return null;\n }\n }\n\n private metaPath(name: string): string {\n return path.join(this.directory, `${sanitize(name)}.json`);\n }\n\n private snapshotPath(name: string): string {\n return path.join(this.directory, `${sanitize(name)}.db`);\n }\n\n private requireReady(): void {\n if (!this.ready) {\n throw new DatabaseError(\n \"Checkpoint provider is not open. Call ready() / open first.\",\n );\n }\n }\n}\n\nfunction sanitize(name: string): string {\n return name.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n}\n\nfunction assertCheckpointName(name: string): void {\n if (typeof name !== \"string\" || name.trim().length === 0) {\n throw new ValidationError(\"checkpoint name must be a non-empty string\");\n }\n if (name.length > 128) {\n throw new ValidationError(\"checkpoint name must be <= 128 characters\");\n }\n}\n\nfunction resolveDbPath(connectionString: string): string {\n if (connectionString === \":memory:\") return \":memory:\";\n return path.isAbsolute(connectionString)\n ? connectionString\n : path.resolve(process.cwd(), connectionString);\n}\n\n/**\n * Consistent snapshot using SQLite backup API when available,\n * falling back to WAL checkpoint + file copy.\n */\nasync function safeSqliteBackup(\n sourcePath: string,\n destPath: string,\n): Promise<void> {\n fs.mkdirSync(path.dirname(destPath), { recursive: true });\n if (fs.existsSync(destPath)) {\n fs.rmSync(destPath, { force: true });\n }\n\n let source: DatabaseSync | null = null;\n let dest: DatabaseSync | null = null;\n try {\n source = new DatabaseSync(sourcePath);\n try {\n source.exec(\"PRAGMA wal_checkpoint(TRUNCATE);\");\n } catch {\n // ignore checkpoint failures on read-only / busy DBs\n }\n dest = new DatabaseSync(destPath);\n\n const backupFn = (\n source as unknown as {\n backup?: (target: DatabaseSync) => void | Promise<void>;\n }\n ).backup;\n\n if (typeof backupFn === \"function\") {\n await backupFn.call(source, dest);\n } else {\n // Fallback: close and copy main db (+ wal if present after checkpoint)\n source.close();\n source = null;\n dest.close();\n dest = null;\n fs.copyFileSync(sourcePath, destPath);\n }\n } catch (error) {\n throw new DatabaseError(\n `Failed to execute checkpoint()\\nReason:\\n${error instanceof Error ? error.message : String(error)}\\nSuggestion:\\nEnsure no exclusive lock is held and the destination directory is writable.`,\n { cause: error instanceof Error ? error : undefined },\n );\n } finally {\n try {\n source?.close();\n } catch {\n // ignore\n }\n try {\n dest?.close();\n } catch {\n // ignore\n }\n }\n}\n","/**\n * Wolbarg — modular semantic memory SDK for AI agents (v0.3).\n *\n * @example\n * ```ts\n * import { wolbarg, openaiEmbedding, openaiLlm } from \"wolbarg\";\n *\n * const ctx = wolbarg({\n * organization: \"my-org\",\n * database: { provider: \"sqlite\", url: \"./memory.db\" },\n * embedding: openaiEmbedding({\n * apiKey: process.env.OPENAI_API_KEY!,\n * model: \"text-embedding-3-small\",\n * }),\n * telemetry: {\n * enabled: true,\n * database: { provider: \"sqlite\", url: \"./telemetry.db\" },\n * level: \"debug\",\n * },\n * });\n *\n * await ctx.ready();\n * await ctx.remember({ agent: \"research\", content: { text: \"…\" } });\n * const hits = await ctx.recall({ query: \"…\", topK: 5 });\n * ```\n */\n\nimport path from \"node:path\";\n\nimport {\n createCompressionProvider,\n type CompressionProvider,\n} from \"../compression/index.js\";\nimport {\n createChunkingStrategy,\n inferChunkingStrategy,\n type ChunkingStrategy,\n} from \"../chunking/index.js\";\nimport {\n createEmbeddingProvider,\n embedMany,\n type EmbeddingProvider,\n} from \"../embedding/index.js\";\nimport { createLlmProvider, type LlmProvider } from \"../llm/index.js\";\nimport { loadIngestSource, resolveParser } from \"../ingest/index.js\";\nimport type { KeywordSearchProvider } from \"../keyword/index.js\";\nimport type { OCRProvider } from \"../ocr/index.js\";\nimport type { RerankerProvider } from \"../rerank/index.js\";\nimport type { VisionProvider } from \"../vision/index.js\";\nimport { createStorageProvider } from \"../storage/index.js\";\nimport type { StorageProvider } from \"../storage/types.js\";\nimport type { MemoryRow } from \"../storage/types.js\";\nimport { matchesMetadata } from \"../filters/match.js\";\nimport {\n toHistoryEvent,\n toMemoryRecord,\n toRecallResult,\n} from \"../memory/index.js\";\nimport {\n SqliteMemoryTransferProvider,\n type MemoryExportResult,\n type MemoryImportResult,\n} from \"../memory/transfer.js\";\nimport {\n adaptiveFetchK,\n applyMmr,\n fuseScores,\n resolveHybridWeights,\n resolveMmr,\n} from \"../retrieval/index.js\";\nimport {\n ConfigurationError,\n InitializationError,\n MemoryNotFoundError,\n ProviderNotConfiguredError,\n ValidationError,\n wrapOperationError,\n} from \"../errors/index.js\";\nimport type {\n CheckpointInfo,\n CheckpointOptions,\n ClearOptions,\n CompressOptions,\n CompressResult,\n ExportResult,\n ForgetOptions,\n HistoryOptions,\n HistoryResult,\n ImportResult,\n IngestOptions,\n IngestResult,\n InitOptions,\n MemoryRecord,\n RecallExplainResponse,\n RecallExplanationHit,\n RecallOptions,\n RecallResult,\n RememberOptions,\n RetrievalConfig,\n StatsResult,\n} from \"../types/index.js\";\nimport {\n AsyncMutex,\n assertFiniteNumber,\n assertNonEmptyString,\n createId,\n deserializeMetadata,\n distanceToSimilarity,\n nowIso,\n} from \"../utils/index.js\";\nimport type {\n WolbargOptions,\n WolbargOptionsWithLlm,\n WolbargOptionsWithoutLlm,\n} from \"./options.js\";\nimport {\n isEmbeddingProvider,\n isLlmProvider,\n isStorageProvider,\n isTelemetryProvider,\n resolveDatabaseUrl,\n} from \"./options.js\";\nimport { validateWolbargOptions, validateInitOptions } from \"./validate.js\";\nimport {\n TelemetryEmitter,\n} from \"../telemetry/index.js\";\nimport type { PersistedRecallExplainPayload } from \"../telemetry/index.js\";\nimport type { CheckpointProvider } from \"../providers/interfaces/CheckpointProvider.js\";\nimport { SqliteTelemetryProvider } from \"../providers/sqlite/sqliteTelemetryProvider.js\";\nimport { SqliteCheckpointProvider } from \"../providers/sqlite/sqliteCheckpointProvider.js\";\nimport { SqliteStorageProvider } from \"../storage/providers/sqlite.js\";\n\ntype ReadyState = {\n storage: StorageProvider;\n embedding: EmbeddingProvider;\n organization: string;\n};\n\nexport class Wolbarg<HasLlm extends boolean = false> {\n declare readonly __hasLlm: HasLlm;\n\n private initialized = false;\n private booting: Promise<void> | null = null;\n private organization: string | null = null;\n private storage: StorageProvider | null = null;\n private embedding: EmbeddingProvider | null = null;\n private llm: LlmProvider | null = null;\n private compression: CompressionProvider | null = null;\n private reranker: RerankerProvider | null = null;\n private keywordSearch: KeywordSearchProvider | null = null;\n private ocr: OCRProvider | null = null;\n private vision: VisionProvider | null = null;\n private chunking: ChunkingStrategy | null = null;\n private retrievalConfig: RetrievalConfig = {};\n private embeddingDimensions: number | null = null;\n private readonly writeMutex = new AsyncMutex();\n private telemetry: TelemetryEmitter;\n private checkpointProvider: CheckpointProvider | null = null;\n private memoryDbPath: string | null = null;\n private readonly transfer = new SqliteMemoryTransferProvider();\n\n constructor(options: WolbargOptionsWithLlm);\n constructor(options: WolbargOptionsWithoutLlm);\n constructor();\n constructor(options?: WolbargOptions) {\n this.telemetry = new TelemetryEmitter(null, { enabled: false, level: \"off\" });\n\n if (!options) {\n return;\n }\n\n const validated = validateWolbargOptions(options);\n this.organization = validated.organization;\n const storageInput = validated.storage!;\n this.storage = isStorageProvider(storageInput)\n ? storageInput\n : createStorageProvider(storageInput);\n\n if (!isStorageProvider(storageInput)) {\n this.memoryDbPath = resolveDatabaseUrl(storageInput);\n } else if (storageInput instanceof SqliteStorageProvider) {\n this.memoryDbPath = storageInput.path;\n }\n\n this.embedding = isEmbeddingProvider(validated.embedding)\n ? validated.embedding\n : createEmbeddingProvider(validated.embedding);\n\n if (validated.llm) {\n this.llm = isLlmProvider(validated.llm)\n ? validated.llm\n : createLlmProvider(validated.llm);\n this.compression =\n validated.compression ?? createCompressionProvider(this.llm);\n } else {\n this.compression = validated.compression ?? null;\n }\n\n this.reranker = validated.reranker ?? null;\n this.keywordSearch = validated.keywordSearch ?? null;\n this.ocr = validated.ocr ?? null;\n this.vision = validated.vision ?? null;\n this.chunking = validated.chunking ?? null;\n this.retrievalConfig = validated.retrieval ?? {};\n\n if (validated.telemetry) {\n if (isTelemetryProvider(validated.telemetry)) {\n this.telemetry = new TelemetryEmitter(validated.telemetry, {\n enabled: true,\n }, { organization: validated.organization });\n } else {\n const url =\n validated.telemetry.database.url ??\n validated.telemetry.database.connectionString ??\n \"\";\n const provider = new SqliteTelemetryProvider({ url });\n this.telemetry = new TelemetryEmitter(provider, validated.telemetry, {\n organization: validated.organization,\n });\n }\n }\n\n this.checkpointProvider =\n validated.checkpoint ??\n new SqliteCheckpointProvider({\n directory: validated.checkpointDirectory,\n });\n }\n\n /**\n * Backwards-compatible initialization (v0.1 API).\n */\n async init(options: InitOptions): Promise<void> {\n if (this.initialized || this.storage) {\n throw new InitializationError(\"Wolbarg is already initialized\");\n }\n\n let validated: InitOptions;\n try {\n validated = validateInitOptions(options);\n } catch (error) {\n if (error instanceof ConfigurationError || error instanceof ValidationError) {\n throw error;\n }\n throw new ConfigurationError(\n `Invalid configuration: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n\n this.organization = validated.organization;\n this.storage = createStorageProvider(validated.database);\n this.memoryDbPath = resolveDatabaseUrl(validated.database);\n this.embedding = createEmbeddingProvider(validated.embedding);\n if (validated.llm) {\n this.llm = createLlmProvider(validated.llm);\n this.compression = createCompressionProvider(this.llm);\n }\n if (!this.checkpointProvider) {\n this.checkpointProvider = new SqliteCheckpointProvider();\n }\n\n await this.ready();\n }\n\n /** Ensure storage (and optional telemetry) are open. */\n async ready(): Promise<void> {\n if (this.initialized) {\n return;\n }\n if (this.booting) {\n await this.booting;\n return;\n }\n this.booting = this.boot();\n try {\n await this.booting;\n } finally {\n this.booting = null;\n }\n }\n\n private async boot(): Promise<void> {\n if (!this.storage || !this.embedding || !this.organization) {\n throw new InitializationError(\n \"Wolbarg is not configured. Pass options to the constructor or call init().\",\n );\n }\n\n try {\n await this.storage.open();\n await this.telemetry.open();\n await this.checkpointProvider?.open();\n const probe = await this.embedding.validate();\n await this.storage.ensureVectorSchema(probe.dimensions);\n this.embeddingDimensions = probe.dimensions;\n this.initialized = true;\n this.telemetry.emitStartup(this.storage.name);\n } catch (error) {\n await this.storage.close().catch(() => undefined);\n await this.telemetry.close().catch(() => undefined);\n this.initialized = false;\n if (\n error instanceof ConfigurationError ||\n error instanceof InitializationError ||\n error instanceof ValidationError\n ) {\n throw error;\n }\n throw new InitializationError(\n `Initialization failed: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n /** Store a semantic memory for an agent. */\n async remember(options: RememberOptions): Promise<MemoryRecord> {\n const trace = this.telemetry.start(\"remember\");\n try {\n const { storage, embedding, organization } = await this.requireReady();\n assertNonEmptyString(options.agent, \"agent\");\n if (!options.content || typeof options.content.text !== \"string\") {\n throw new ValidationError(\"content.text must be a string\");\n }\n assertNonEmptyString(options.content.text, \"content.text\");\n\n const metadata = options.metadata ?? {};\n if (metadata === null || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n throw new ValidationError(\"metadata must be a plain object when provided\");\n }\n\n const tEmbed = performance.now();\n const vector = await embedding.embed(options.content.text);\n trace.mark(\"embeddingMs\", performance.now() - tEmbed);\n this.assertEmbeddingDimensions(vector.length);\n\n const id = createId();\n const timestamp = nowIso();\n\n const record = await this.withWriteLock(async () => {\n const tStore = performance.now();\n const row = await storage.insertMemory({\n id,\n organization,\n agent: options.agent.trim(),\n contentText: options.content.text,\n metadata,\n embedding: vector,\n createdAt: timestamp,\n updatedAt: timestamp,\n });\n trace.mark(\"databaseWriteMs\", performance.now() - tStore);\n return toMemoryRecord(row);\n });\n\n trace.success({\n provider: storage.name,\n memoryIds: [record.id],\n returnedCount: 1,\n embeddingProvider: embedding.model,\n model: embedding.model,\n metadata,\n agentId: options.agent.trim(),\n tags: telemetryTags(metadata),\n });\n return record;\n } catch (error) {\n trace.failure(error, { agentId: options.agent });\n throw wrapOperationError(\"remember\", error);\n }\n }\n\n /** Batch remember — one parent event + child traces per item. */\n async rememberBatch(items: RememberOptions[]): Promise<MemoryRecord[]> {\n const parent = this.telemetry.start(\"rememberBatch\");\n try {\n if (!Array.isArray(items) || items.length === 0) {\n throw new ValidationError(\"rememberBatch requires a non-empty array\");\n }\n const { storage, embedding, organization } = await this.requireReady();\n\n const tEmbed = performance.now();\n const texts = items.map((item, i) => {\n assertNonEmptyString(item.agent, `items[${i}].agent`);\n if (!item.content || typeof item.content.text !== \"string\") {\n throw new ValidationError(`items[${i}].content.text must be a string`);\n }\n assertNonEmptyString(item.content.text, `items[${i}].content.text`);\n return item.content.text;\n });\n const vectors = await embedMany(embedding, texts);\n parent.mark(\"embeddingMs\", performance.now() - tEmbed);\n for (const vector of vectors) {\n this.assertEmbeddingDimensions(vector.length);\n }\n\n const timestamp = nowIso();\n const inputs = items.map((item, i) => ({\n id: createId(),\n organization,\n agent: item.agent.trim(),\n contentText: item.content.text,\n metadata: item.metadata ?? {},\n embedding: vectors[i]!,\n createdAt: timestamp,\n updatedAt: timestamp,\n }));\n\n // Emit child traces for waterfall debugging.\n for (let i = 0; i < inputs.length; i += 1) {\n const child = parent.child(\"remember\");\n child.success({\n provider: storage.name,\n memoryIds: [inputs[i]!.id],\n returnedCount: 1,\n metadata: inputs[i]!.metadata,\n agentId: inputs[i]!.agent,\n tags: telemetryTags(inputs[i]!.metadata),\n });\n }\n\n const rows = await this.withWriteLock(async () => {\n const tStore = performance.now();\n const result = await storage.insertMemoriesBatch(inputs);\n parent.mark(\"databaseWriteMs\", performance.now() - tStore);\n return result;\n });\n\n const records = rows.map(toMemoryRecord);\n parent.success({\n provider: storage.name,\n memoryIds: records.map((r) => r.id),\n returnedCount: records.length,\n embeddingProvider: embedding.model,\n model: embedding.model,\n agentId: commonAgent(items.map((item) => item.agent.trim())),\n });\n return records;\n } catch (error) {\n parent.failure(error);\n throw wrapOperationError(\"rememberBatch\", error);\n }\n }\n\n /**\n * Semantic / hybrid search over stored memories.\n * Pass `{ explain: true }` for enriched ranking diagnostics.\n */\n async recall(options: RecallOptions & { explain: true }): Promise<RecallExplainResponse>;\n async recall(options: RecallOptions & { explain?: false }): Promise<RecallResult[]>;\n async recall(options: RecallOptions): Promise<RecallResult[] | RecallExplainResponse>;\n async recall(options: RecallOptions): Promise<RecallResult[] | RecallExplainResponse> {\n const trace = this.telemetry.start(\"recall\");\n const explain = options.explain === true;\n try {\n const { storage, embedding, organization } = await this.requireReady();\n assertNonEmptyString(options.query, \"query\");\n\n const topK = options.topK ?? 5;\n const threshold = options.threshold ?? 0;\n assertFiniteNumber(topK, \"topK\", { min: 1, max: 1000 });\n assertFiniteNumber(threshold, \"threshold\", { min: 0, max: 1 });\n\n const query = options.query.trim();\n const tEmbed = performance.now();\n const vector = await embedding.embed(query);\n trace.mark(\"embeddingMs\", performance.now() - tEmbed);\n this.assertEmbeddingDimensions(vector.length);\n\n const hasFilters = Boolean(\n options.filter?.agent || options.filter?.metadata,\n );\n const overFetch =\n this.retrievalConfig.overFetchFactor ?? (hasFilters ? 4 : 2);\n const fetchK = adaptiveFetchK(topK, overFetch, hasFilters);\n\n const semanticScores = new Map<string, number>();\n const distances = new Map<string, number>();\n const byId = new Map<string, RecallResult>();\n const metadataMatched = new Map<string, boolean>();\n\n const tSearch = performance.now();\n const joined = storage.searchVectorsWithMemories;\n if (typeof joined === \"function\") {\n const joinedHits = await joined.call(\n storage,\n vector,\n fetchK,\n organization,\n {\n agent: options.filter?.agent,\n includeArchived: options.filter?.includeArchived,\n },\n );\n const tFilter = performance.now();\n for (const { row, distance } of joinedHits) {\n let metaOk = true;\n if (\n options.filter?.metadata &&\n !matchesMetadata(\n deserializeMetadata(row.metadata_json),\n options.filter.metadata,\n )\n ) {\n metaOk = false;\n continue;\n }\n const similarity = distanceToSimilarity(distance);\n if (similarity < threshold) {\n continue;\n }\n const result = toRecallResult(row, similarity);\n semanticScores.set(result.id, similarity);\n distances.set(result.id, distance);\n metadataMatched.set(result.id, metaOk);\n byId.set(result.id, result);\n }\n trace.mark(\"metadataFilteringMs\", performance.now() - tFilter);\n } else {\n const hits = await storage.searchVectors(vector, fetchK);\n const rowids = hits.map((h) => h.memoryRowid);\n let rowMap: Map<number, MemoryRow>;\n if (typeof storage.getMemoriesByRowids === \"function\") {\n rowMap = await storage.getMemoriesByRowids(rowids, organization);\n } else {\n rowMap = new Map();\n const looked = await Promise.all(\n hits.map(async (hit) => ({\n hit,\n row: await storage.getMemoryByRowid(hit.memoryRowid, organization),\n })),\n );\n for (const { hit, row } of looked) {\n if (row) rowMap.set(hit.memoryRowid, row);\n }\n }\n\n const tFilter = performance.now();\n for (const hit of hits) {\n const row = rowMap.get(hit.memoryRowid);\n if (!row) continue;\n if (options.filter?.agent && row.agent !== options.filter.agent) continue;\n if (!options.filter?.includeArchived && row.archived === 1) continue;\n const metadata = deserializeMetadata(row.metadata_json);\n if (\n options.filter?.metadata &&\n !matchesMetadata(metadata, options.filter.metadata)\n ) {\n continue;\n }\n const similarity = distanceToSimilarity(hit.distance);\n if (similarity < threshold) continue;\n const result = toRecallResult(row, similarity);\n semanticScores.set(result.id, similarity);\n distances.set(result.id, hit.distance);\n metadataMatched.set(result.id, true);\n byId.set(result.id, result);\n }\n trace.mark(\"metadataFilteringMs\", performance.now() - tFilter);\n }\n const searchTime = performance.now() - tSearch;\n trace.mark(\"vectorSearchMs\", searchTime);\n trace.mark(\"databaseReadMs\", searchTime);\n\n const hybridWeights =\n resolveHybridWeights(options.hybrid) ??\n (options.hybrid === undefined\n ? resolveHybridWeights(this.retrievalConfig.hybrid)\n : null);\n let keywordSignal: \"enabled\" | \"disabled\" | \"unknown\" = \"disabled\";\n\n if (hybridWeights) {\n let keywordScores = new Map<string, number>();\n\n if (typeof storage.searchKeyword === \"function\") {\n keywordSignal = \"enabled\";\n const ftsHits = await storage.searchKeyword(\n query,\n organization,\n fetchK,\n );\n keywordScores = new Map(ftsHits.map((h) => [h.memoryId, h.score]));\n const missingIds: string[] = [];\n for (const id of keywordScores.keys()) {\n if (!byId.has(id)) missingIds.push(id);\n }\n if (missingIds.length > 0) {\n const fetched = await Promise.all(\n missingIds.map((id) => storage.getMemoryById(id, organization)),\n );\n for (const row of fetched) {\n if (!row) continue;\n if (options.filter?.agent && row.agent !== options.filter.agent) {\n continue;\n }\n if (!options.filter?.includeArchived && row.archived === 1) {\n continue;\n }\n if (\n options.filter?.metadata &&\n !matchesMetadata(\n deserializeMetadata(row.metadata_json),\n options.filter.metadata,\n )\n ) {\n continue;\n }\n byId.set(row.id, toRecallResult(row, 0));\n metadataMatched.set(row.id, true);\n }\n }\n } else if (this.keywordSearch) {\n keywordSignal = \"enabled\";\n const corpus = await storage.listMemories(\n {\n organization,\n agent: options.filter?.agent,\n includeArchived: options.filter?.includeArchived,\n metadata: options.filter?.metadata,\n },\n Math.min(fetchK * 2, 2000),\n );\n const keywordHits = await this.keywordSearch.search(\n query,\n corpus.map((row) => ({ id: row.id, text: row.content_text })),\n fetchK,\n );\n keywordScores = new Map(\n keywordHits.map((h) => [h.memoryId, h.score]),\n );\n for (const row of corpus) {\n if (byId.has(row.id) || !keywordScores.has(row.id)) continue;\n byId.set(row.id, toRecallResult(row, 0));\n metadataMatched.set(row.id, true);\n }\n }\n\n if (keywordScores.size > 0) {\n const fused = fuseScores(semanticScores, keywordScores, hybridWeights);\n for (const [id, score] of fused) {\n const existing = byId.get(id);\n if (existing) {\n byId.set(id, { ...existing, similarity: score });\n }\n }\n }\n }\n\n const tRank = performance.now();\n let results = [...byId.values()].sort(\n (a, b) => b.similarity - a.similarity,\n );\n\n const mmrLambda =\n resolveMmr(options.mmr) ??\n resolveMmr(\n this.retrievalConfig.mmr\n ? { lambda: this.retrievalConfig.mmr.lambda }\n : undefined,\n );\n let rankingReason = \"cosine similarity\";\n if (mmrLambda !== null) {\n results = applyMmr(results, Math.max(topK * 2, topK), mmrLambda);\n rankingReason = `MMR(lambda=${mmrLambda})`;\n }\n\n if (options.rerank && this.reranker) {\n const reranked = await this.reranker.rerank(\n query,\n results.map((r) => ({ id: r.id, text: r.content.text })),\n topK,\n );\n const order = new Map(\n reranked.map((r, i) => [r.id, { score: r.score, i }]),\n );\n results = results\n .filter((r) => order.has(r.id))\n .sort((a, b) => order.get(a.id)!.i - order.get(b.id)!.i)\n .map((r) => ({\n ...r,\n similarity: order.get(r.id)?.score ?? r.similarity,\n }));\n rankingReason = `reranker:${(this.reranker as { name?: string }).name ?? \"custom\"}`;\n }\n\n const rankingTime = performance.now() - tRank;\n trace.mark(\"rankingMs\", rankingTime);\n results = results.slice(0, topK);\n\n const tSer = performance.now();\n // Materialize final payload (serialization stage).\n const serialized = results.map((r) => ({ ...r }));\n trace.mark(\"serializationMs\", performance.now() - tSer);\n\n const telemetryFields = {\n provider: storage.name,\n query,\n filters: options.filter ?? null,\n returnedCount: serialized.length,\n memoryIds: serialized.map((r) => r.id),\n similarityScores: serialized.map((r) => r.similarity),\n embeddingProvider: embedding.model,\n model: embedding.model,\n agentId:\n options.filter?.agent ??\n commonAgent(serialized.map((result) => result.agent)),\n tags: commonTags(serialized.map((result) => result.metadata)),\n };\n\n if (!explain) {\n trace.success(telemetryFields);\n return serialized;\n }\n\n const explanations: RecallExplanationHit[] = serialized.map((memory) => {\n const matchedFields: string[] = [\"content\"];\n if (options.filter?.agent) matchedFields.push(\"agent\");\n if (options.filter?.metadata) matchedFields.push(\"metadata\");\n return {\n memory,\n score: memory.similarity,\n distance: distances.get(memory.id) ?? 1 - memory.similarity,\n rankingReason,\n matchedFields,\n metadataMatch: metadataMatched.get(memory.id) ?? true,\n providerUsed: storage.name,\n searchTime,\n rankingTime,\n };\n });\n\n const totalTime = performance.now() - trace.startedAt;\n const persistedExplain: PersistedRecallExplainPayload = {\n enabled: true,\n providerUsed: storage.name,\n rankingStrategy: rankingReason,\n signals: {\n semantic: \"enabled\",\n keyword: keywordSignal,\n reranker:\n options.rerank === true && this.reranker ? \"enabled\" : \"disabled\",\n mmr: mmrLambda === null ? \"disabled\" : \"enabled\",\n recency: \"disabled\",\n },\n results: explanations.map((hit) => ({\n memoryId: hit.memory.id,\n score: hit.score,\n distance: hit.distance,\n rankingReason: hit.rankingReason,\n matchedFields: hit.matchedFields,\n metadataMatch: hit.metadataMatch,\n })),\n searchTimeMs: searchTime,\n rankingTimeMs: rankingTime,\n totalTimeMs: totalTime,\n };\n trace.success({ ...telemetryFields, explain: persistedExplain });\n\n return {\n results: explanations,\n providerUsed: storage.name,\n searchTime,\n rankingTime,\n totalTime,\n traceId: trace.context.traceId,\n };\n } catch (error) {\n trace.failure(error, {\n query: options.query,\n agentId: options.filter?.agent ?? null,\n });\n throw wrapOperationError(\"recall\", error);\n }\n }\n\n /** Batch recall — parent event + child traces. */\n async recallBatch(\n queries: Array<Omit<RecallOptions, \"explain\">>,\n ): Promise<RecallResult[][]> {\n const parent = this.telemetry.start(\"recallBatch\");\n try {\n if (!Array.isArray(queries) || queries.length === 0) {\n throw new ValidationError(\"recallBatch requires a non-empty array\");\n }\n const out: RecallResult[][] = [];\n for (const q of queries) {\n const child = parent.child(\"recall\");\n try {\n const hits = await this.recall({ ...q, explain: false });\n child.success({\n query: q.query,\n returnedCount: hits.length,\n memoryIds: hits.map((h) => h.id),\n similarityScores: hits.map((h) => h.similarity),\n });\n out.push(hits);\n } catch (error) {\n child.failure(error, { query: q.query });\n throw error;\n }\n }\n parent.success({\n returnedCount: out.reduce((n, r) => n + r.length, 0),\n extra: { queryCount: queries.length },\n });\n return out;\n } catch (error) {\n parent.failure(error);\n throw wrapOperationError(\"recallBatch\", error);\n }\n }\n\n async compress(\n this: Wolbarg<true>,\n options: CompressOptions,\n ): Promise<CompressResult> {\n return this.runCompress(options);\n }\n\n /** @internal */\n private async runCompress(options: CompressOptions): Promise<CompressResult> {\n const trace = this.telemetry.start(\"compress\");\n try {\n const { storage, embedding, organization } = await this.requireReady();\n if (!this.compression) {\n throw new ProviderNotConfiguredError(\n \"llm\",\n \"compress\",\n \"pass llm: openaiLlm(...) (or compression) in the constructor\",\n );\n }\n assertNonEmptyString(options.agent, \"agent\");\n const limit = options.limit ?? 50;\n assertFiniteNumber(limit, \"limit\", { min: 2, max: 500 });\n\n const tRead = performance.now();\n const rows = await storage.listMemories(\n {\n organization,\n agent: options.agent.trim(),\n includeArchived: false,\n },\n limit,\n );\n trace.mark(\"databaseReadMs\", performance.now() - tRead);\n\n if (rows.length < 2) {\n throw new ValidationError(\n \"compress requires at least 2 active memories for the given agent\",\n );\n }\n\n const records = rows.map(toMemoryRecord);\n const summaryText = await this.compression.compress(records);\n const tEmbed = performance.now();\n const vector = await embedding.embed(summaryText);\n trace.mark(\"embeddingMs\", performance.now() - tEmbed);\n this.assertEmbeddingDimensions(vector.length);\n\n const summaryId = createId();\n const timestamp = nowIso();\n\n const result = await this.withWriteLock(async () => {\n const tWrite = performance.now();\n const summaryRow = await storage.insertMemory({\n id: summaryId,\n organization,\n agent: options.agent.trim(),\n contentText: summaryText,\n metadata: {\n compressed: true,\n sourceCount: records.length,\n sourceIds: records.map((r) => r.id),\n },\n embedding: vector,\n createdAt: timestamp,\n updatedAt: timestamp,\n });\n\n const archivedIds = await storage.archiveMemories(\n records.map((r) => r.id),\n organization,\n summaryId,\n timestamp,\n );\n trace.mark(\"databaseWriteMs\", performance.now() - tWrite);\n\n return {\n summary: toMemoryRecord(summaryRow),\n archivedIds,\n };\n });\n\n trace.success({\n provider: storage.name,\n memoryIds: [result.summary.id, ...result.archivedIds],\n returnedCount: 1,\n agentId: options.agent.trim(),\n });\n return result;\n } catch (error) {\n trace.failure(error, { agentId: options.agent });\n throw wrapOperationError(\"compress\", error);\n }\n }\n\n async ingest(options: IngestOptions): Promise<IngestResult> {\n const trace = this.telemetry.start(\"ingest\");\n try {\n const { storage, embedding, organization } = await this.requireReady();\n assertNonEmptyString(options.agent, \"agent\");\n\n const loaded = await loadIngestSource(options.source);\n let usedOcr = false;\n let usedVision = false;\n let text = loaded.rawText ?? \"\";\n\n if (!loaded.rawText) {\n const parser = resolveParser(loaded.filename, loaded.mimeType);\n const parsed = await parser.parse({\n buffer: loaded.buffer,\n filename: loaded.filename,\n mimeType: loaded.mimeType,\n });\n text = parsed.text;\n\n if (parsed.isImage && parsed.imageBuffer) {\n const parts: string[] = [];\n if (this.ocr) {\n const ocrResult = await this.ocr.recognize(\n parsed.imageBuffer,\n parsed.mimeType,\n );\n if (ocrResult.text) {\n parts.push(ocrResult.text);\n usedOcr = true;\n }\n }\n if (this.vision) {\n const visionResult = await this.vision.analyze(\n parsed.imageBuffer,\n parsed.mimeType,\n );\n if (visionResult.caption) {\n parts.push(`Caption: ${visionResult.caption}`);\n }\n if (visionResult.description) {\n parts.push(visionResult.description);\n }\n if (visionResult.entities.length > 0) {\n parts.push(`Entities: ${visionResult.entities.join(\", \")}`);\n }\n if (parts.length > 0) {\n usedVision = true;\n }\n }\n text = parts.join(\"\\n\\n\").trim();\n }\n }\n\n if (!text) {\n throw new ValidationError(\n \"ingest could not extract text from the document (configure ocr/vision for images, or provide text)\",\n );\n }\n\n const strategy =\n this.chunking ??\n (options.chunking?.strategy\n ? createChunkingStrategy(options.chunking.strategy)\n : inferChunkingStrategy(text));\n\n const chunks = strategy.chunk(text, {\n chunkSize: options.chunking?.chunkSize,\n overlap: options.chunking?.overlap,\n });\n\n if (chunks.length === 0) {\n throw new ValidationError(\"ingest produced zero chunks\");\n }\n\n const tEmbed = performance.now();\n const vectors = await embedMany(\n embedding,\n chunks.map((c) => c.text),\n );\n trace.mark(\"embeddingMs\", performance.now() - tEmbed);\n for (const vector of vectors) {\n this.assertEmbeddingDimensions(vector.length);\n }\n\n const baseMeta = options.metadata ?? {};\n const timestamp = nowIso();\n const inputs = chunks.map((chunk, i) => ({\n id: createId(),\n organization,\n agent: options.agent.trim(),\n contentText: chunk.text,\n metadata: {\n ...baseMeta,\n ingest: true,\n chunkIndex: chunk.index,\n chunkCount: chunks.length,\n sourceFilename: loaded.filename ?? null,\n },\n embedding: vectors[i]!,\n createdAt: timestamp,\n updatedAt: timestamp,\n }));\n\n const rows = await this.withWriteLock(async () => {\n const tWrite = performance.now();\n const result = await storage.insertMemoriesBatch(inputs);\n trace.mark(\"databaseWriteMs\", performance.now() - tWrite);\n return result;\n });\n\n const result = {\n memories: rows.map(toMemoryRecord),\n extractedChars: text.length,\n chunkCount: chunks.length,\n usedOcr,\n usedVision,\n };\n trace.success({\n provider: storage.name,\n memoryIds: result.memories.map((m) => m.id),\n returnedCount: result.memories.length,\n agentId: options.agent.trim(),\n tags: telemetryTags(baseMeta),\n });\n return result;\n } catch (error) {\n trace.failure(error, { agentId: options.agent });\n throw wrapOperationError(\"ingest\", error);\n }\n }\n\n async forget(options: ForgetOptions): Promise<number> {\n const trace = this.telemetry.start(\"forget\");\n try {\n const { storage, organization } = await this.requireReady();\n\n const deleted = await this.withWriteLock(async () => {\n if (\"id\" in options && options.id !== undefined) {\n assertNonEmptyString(options.id, \"id\");\n const ok = await storage.deleteMemoryById(\n options.id.trim(),\n organization,\n );\n return ok ? 1 : 0;\n }\n\n if (\"filter\" in options && options.filter?.agent) {\n assertNonEmptyString(options.filter.agent, \"filter.agent\");\n return storage.deleteMemoriesByFilter({\n organization,\n agent: options.filter.agent.trim(),\n includeArchived: true,\n });\n }\n\n throw new ValidationError(\n \"forget requires either { id } or { filter: { agent } }\",\n );\n });\n\n trace.success({\n provider: storage.name,\n returnedCount: deleted,\n memoryIds:\n \"id\" in options && options.id ? [options.id.trim()] : null,\n filters: \"filter\" in options ? options.filter : null,\n agentId:\n \"filter\" in options ? options.filter?.agent?.trim() ?? null : null,\n });\n return deleted;\n } catch (error) {\n trace.failure(error, {\n agentId: \"filter\" in options ? options.filter?.agent ?? null : null,\n });\n throw wrapOperationError(\"forget\", error);\n }\n }\n\n async history(options: HistoryOptions): Promise<HistoryResult> {\n const trace = this.telemetry.start(\"history\");\n try {\n const { storage, organization } = await this.requireReady();\n assertNonEmptyString(options.id, \"id\");\n\n const row = await storage.getMemoryById(options.id.trim(), organization);\n if (!row) {\n throw new MemoryNotFoundError(`Memory not found: ${options.id}`);\n }\n\n const events = await storage.getHistory(row.id);\n const result = {\n memory: toMemoryRecord(row),\n events: events.map(toHistoryEvent),\n };\n trace.success({\n provider: storage.name,\n memoryIds: [row.id],\n returnedCount: events.length,\n agentId: row.agent,\n tags: telemetryTags(deserializeMetadata(row.metadata_json)),\n });\n return result;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"history\", error);\n }\n }\n\n async stats(): Promise<StatsResult> {\n const trace = this.telemetry.start(\"stats\");\n try {\n const { storage, embedding, organization } = await this.requireReady();\n const counts = await storage.getStats(organization);\n const databaseSizeBytes = await storage.getDatabaseSizeBytes();\n\n const result = {\n totalMemories: counts.totalMemories,\n activeMemories: counts.activeMemories,\n archivedMemories: counts.archivedMemories,\n totalAgents: counts.totalAgents,\n databaseSizeBytes,\n embeddingModel: embedding.model,\n llmModel: this.llm?.model ?? null,\n organization,\n embeddingDimensions: this.embeddingDimensions ?? 0,\n };\n trace.success({\n provider: storage.name,\n returnedCount: result.totalMemories,\n });\n return result;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"stats\", error);\n }\n }\n\n async clear(options: ClearOptions): Promise<number> {\n const trace = this.telemetry.start(\"clear\");\n try {\n const { storage, organization } = await this.requireReady();\n\n if (!options || options.confirm !== true) {\n throw new ValidationError(\n \"clear requires { confirm: true } to permanently delete all memories\",\n );\n }\n\n const deleted = await this.withWriteLock(async () => {\n return storage.clearOrganization(organization);\n });\n trace.success({ provider: storage.name, returnedCount: deleted });\n return deleted;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"clear\", error);\n }\n }\n\n /** Create an immutable named checkpoint of the memory database. */\n async checkpoint(\n name: string,\n options?: CheckpointOptions,\n ): Promise<CheckpointInfo> {\n const trace = this.telemetry.start(\"checkpoint\");\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const source = this.requireMemoryDbPath();\n const tCheckpoint = performance.now();\n const meta = await provider.checkpoint(name, source, options);\n trace.mark(\"databaseWriteMs\", performance.now() - tCheckpoint);\n trace.success({\n provider: provider.name,\n checkpointId: meta.name,\n extra: { checkpoint: meta.name },\n });\n return meta;\n } catch (error) {\n trace.failure(error, { checkpointId: name });\n throw wrapOperationError(\"checkpoint\", error);\n }\n }\n\n /** Restore the memory database from a named checkpoint. */\n async rollback(name: string): Promise<CheckpointInfo> {\n const trace = this.telemetry.start(\"rollback\");\n let storageClosed = false;\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const target = this.requireMemoryDbPath();\n\n // Validate before closing — a missing checkpoint must not leave storage shut.\n const existing = await provider.getCheckpoint(name);\n if (!existing) {\n throw new ValidationError(`Checkpoint \"${name}\" was not found`);\n }\n\n // Close storage before replacing the file.\n if (this.storage) {\n await this.storage.close();\n storageClosed = true;\n }\n const tRollback = performance.now();\n const meta = await provider.rollback(name, target);\n trace.mark(\"databaseWriteMs\", performance.now() - tRollback);\n await this.storage?.open();\n storageClosed = false;\n if (this.embeddingDimensions !== null) {\n await this.storage?.ensureVectorSchema(this.embeddingDimensions);\n }\n\n trace.success({\n provider: provider.name,\n checkpointId: meta.name,\n extra: { checkpoint: meta.name },\n });\n return meta;\n } catch (error) {\n if (storageClosed && this.storage) {\n await this.storage.open().catch(() => undefined);\n if (this.embeddingDimensions !== null) {\n await this.storage\n .ensureVectorSchema(this.embeddingDimensions)\n .catch(() => undefined);\n }\n }\n trace.failure(error, { checkpointId: name });\n throw wrapOperationError(\"rollback\", error);\n }\n }\n\n async deleteCheckpoint(name: string): Promise<boolean> {\n const trace = this.telemetry.start(\"deleteCheckpoint\");\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const tDelete = performance.now();\n const removed = await provider.deleteCheckpoint(name);\n trace.mark(\"databaseWriteMs\", performance.now() - tDelete);\n trace.success({\n provider: provider.name,\n checkpointId: name,\n returnedCount: removed ? 1 : 0,\n });\n return removed;\n } catch (error) {\n trace.failure(error, { checkpointId: name });\n throw wrapOperationError(\"deleteCheckpoint\", error);\n }\n }\n\n async listCheckpoints(): Promise<CheckpointInfo[]> {\n const trace = this.telemetry.start(\"listCheckpoints\");\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const tList = performance.now();\n const list = await provider.listCheckpoints();\n trace.mark(\"databaseReadMs\", performance.now() - tList);\n trace.success({\n provider: provider.name,\n returnedCount: list.length,\n });\n return list;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"listCheckpoints\", error);\n }\n }\n\n async getCheckpoint(name: string): Promise<CheckpointInfo | null> {\n const trace = this.telemetry.start(\"getCheckpoint\");\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const tGet = performance.now();\n const meta = await provider.getCheckpoint(name);\n trace.mark(\"databaseReadMs\", performance.now() - tGet);\n trace.success({\n provider: provider.name,\n checkpointId: name,\n returnedCount: meta ? 1 : 0,\n });\n return meta;\n } catch (error) {\n trace.failure(error, { checkpointId: name });\n throw wrapOperationError(\"getCheckpoint\", error);\n }\n }\n\n /** Export the memory database to a portable SQLite + manifest bundle. */\n async export(exportPath: string): Promise<ExportResult> {\n const trace = this.telemetry.start(\"export\");\n try {\n await this.requireReady();\n const source = this.requireMemoryDbPath();\n // Checkpoint WAL so export sees a consistent file.\n if (this.storage?.name === \"sqlite\") {\n // best-effort consistency via transfer helper\n }\n const result: MemoryExportResult = await this.transfer.exportTo(\n exportPath,\n source,\n this.organization ?? undefined,\n );\n trace.success({\n provider: \"sqlite\",\n extra: { path: result.path, sizeBytes: result.sizeBytes },\n });\n return {\n path: result.path,\n sizeBytes: result.sizeBytes,\n exportedAt: result.manifest.exportedAt,\n };\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"export\", error);\n }\n }\n\n /** Import a previously exported memory database, replacing the current file. */\n async import(exportPath: string): Promise<ImportResult> {\n const trace = this.telemetry.start(\"import\");\n let storageClosed = false;\n try {\n await this.requireReady();\n const target = this.requireMemoryDbPath();\n if (this.storage) {\n await this.storage.close();\n storageClosed = true;\n }\n const result: MemoryImportResult = await this.transfer.importFrom(\n exportPath,\n target,\n );\n await this.storage?.open();\n storageClosed = false;\n if (this.embeddingDimensions !== null) {\n await this.storage?.ensureVectorSchema(this.embeddingDimensions);\n }\n trace.success({\n provider: \"sqlite\",\n extra: { path: result.path },\n });\n return {\n path: result.path,\n importedAt: nowIso(),\n };\n } catch (error) {\n if (storageClosed && this.storage) {\n await this.storage.open().catch(() => undefined);\n if (this.embeddingDimensions !== null) {\n await this.storage\n .ensureVectorSchema(this.embeddingDimensions)\n .catch(() => undefined);\n }\n }\n trace.failure(error);\n throw wrapOperationError(\"import\", error);\n }\n }\n\n /** Flush pending telemetry (useful in tests). */\n async flushTelemetry(): Promise<void> {\n await this.telemetry.flush();\n }\n\n /** Session id for this SDK instance (telemetry traces). */\n get sessionId(): string {\n return this.telemetry.sessionId;\n }\n\n private withWriteLock<T>(fn: () => Promise<T>): Promise<T> {\n if (this.storage?.name === \"sqlite\") {\n return this.writeMutex.runExclusive(fn);\n }\n return fn();\n }\n\n async close(): Promise<void> {\n if (this.storage) {\n this.telemetry.emitShutdown(this.storage.name);\n }\n await this.telemetry.close().catch(() => undefined);\n await this.checkpointProvider?.close().catch(() => undefined);\n if (this.storage) {\n await this.storage.close();\n }\n this.storage = null;\n this.embedding = null;\n this.llm = null;\n this.compression = null;\n this.organization = null;\n this.embeddingDimensions = null;\n this.initialized = false;\n }\n\n get isInitialized(): boolean {\n return this.initialized;\n }\n\n private async requireReady(): Promise<ReadyState> {\n await this.ready();\n if (\n !this.initialized ||\n !this.storage ||\n !this.embedding ||\n !this.organization\n ) {\n throw new InitializationError(\n \"Wolbarg is not initialized. Pass options to the constructor or call init().\",\n );\n }\n return {\n storage: this.storage,\n embedding: this.embedding,\n organization: this.organization,\n };\n }\n\n private assertEmbeddingDimensions(dimensions: number): void {\n if (\n this.embeddingDimensions !== null &&\n dimensions !== this.embeddingDimensions\n ) {\n throw new ValidationError(\n `Embedding dimension mismatch: expected ${this.embeddingDimensions}, got ${dimensions}`,\n );\n }\n }\n\n private requireCheckpointProvider(): CheckpointProvider {\n if (!this.checkpointProvider) {\n throw new ProviderNotConfiguredError(\n \"checkpoint\",\n \"checkpoint\",\n \"construct Wolbarg with a file-backed database\",\n );\n }\n return this.checkpointProvider;\n }\n\n private requireMemoryDbPath(): string {\n if (!this.memoryDbPath || this.memoryDbPath === \":memory:\") {\n throw new ConfigurationError(\n \"This operation requires a file-backed SQLite memory database (not :memory:).\",\n {\n suggestion:\n 'Use database: { provider: \"sqlite\", url: \"./memory.db\" }',\n },\n );\n }\n return path.isAbsolute(this.memoryDbPath)\n ? this.memoryDbPath\n : path.resolve(process.cwd(), this.memoryDbPath);\n }\n}\n\n/** Preferred v0.3 entry — re-exported from factories as well. */\nexport function wolbarg(options: WolbargOptions): Wolbarg {\n return new Wolbarg(options as never);\n}\n\nfunction telemetryTags(metadata: Record<string, unknown>): string[] | null {\n const value = metadata.tags;\n if (typeof value === \"string\") {\n const tag = value.trim();\n return tag ? [tag] : null;\n }\n if (Array.isArray(value)) {\n const tags = value.filter(\n (tag): tag is string => typeof tag === \"string\" && tag.trim().length > 0,\n );\n return tags.length > 0 ? tags.map((tag) => tag.trim()) : null;\n }\n return null;\n}\n\nfunction commonAgent(agents: string[]): string | null {\n const first = agents[0];\n return first && agents.every((agent) => agent === first) ? first : null;\n}\n\nfunction commonTags(metadata: Array<Record<string, unknown>>): string[] | null {\n const tags = new Set<string>();\n for (const item of metadata) {\n for (const tag of telemetryTags(item) ?? []) tags.add(tag);\n }\n return tags.size > 0 ? [...tags] : null;\n}\n","/**\n * Metadata filter AST for advanced recall filtering.\n */\n\n/** Comparison operators on a single metadata field. */\nexport type MetadataComparison =\n | { eq: unknown }\n | { contains: string }\n | { gt: number | string }\n | { gte: number | string }\n | { lt: number | string }\n | { lte: number | string }\n | { between: [number | string, number | string] };\n\n/** Recursive metadata filter supporting boolean combinators. */\nexport type MetadataFilter =\n | { field: string; op: MetadataComparison }\n | { and: MetadataFilter[] }\n | { or: MetadataFilter[] }\n | { not: MetadataFilter };\n\n/** Helpers for building filters fluently. */\nexport const meta = {\n eq: (field: string, value: unknown): MetadataFilter => ({\n field,\n op: { eq: value },\n }),\n contains: (field: string, value: string): MetadataFilter => ({\n field,\n op: { contains: value },\n }),\n gt: (field: string, value: number | string): MetadataFilter => ({\n field,\n op: { gt: value },\n }),\n gte: (field: string, value: number | string): MetadataFilter => ({\n field,\n op: { gte: value },\n }),\n lt: (field: string, value: number | string): MetadataFilter => ({\n field,\n op: { lt: value },\n }),\n lte: (field: string, value: number | string): MetadataFilter => ({\n field,\n op: { lte: value },\n }),\n between: (\n field: string,\n lo: number | string,\n hi: number | string,\n ): MetadataFilter => ({\n field,\n op: { between: [lo, hi] },\n }),\n and: (...filters: MetadataFilter[]): MetadataFilter => ({ and: filters }),\n or: (...filters: MetadataFilter[]): MetadataFilter => ({ or: filters }),\n not: (filter: MetadataFilter): MetadataFilter => ({ not: filter }),\n};\n","/**\n * Public factory helpers for storage / providers.\n */\n\nimport type {\n PostgresDatabaseConfig,\n SqliteDatabaseConfig,\n TelemetryConfig,\n} from \"../types/index.js\";\nimport { SqliteStorageProvider } from \"../storage/providers/sqlite.js\";\nimport { PostgresStorageProvider } from \"../storage/providers/postgres.js\";\nimport type { StorageProvider } from \"../storage/types.js\";\nimport { SqliteTelemetryProvider } from \"../providers/sqlite/sqliteTelemetryProvider.js\";\nimport { SqliteCheckpointProvider } from \"../providers/sqlite/sqliteCheckpointProvider.js\";\nimport type { TelemetryProvider } from \"../providers/interfaces/TelemetryProvider.js\";\nimport type { CheckpointProvider } from \"../providers/interfaces/CheckpointProvider.js\";\nimport { ConfigurationError } from \"../errors/index.js\";\nimport type { WolbargOptions } from \"../core/options.js\";\nimport { Wolbarg } from \"../core/wolbarg.js\";\n\n/** Create a SQLite storage provider from a path or `:memory:`. */\nexport function sqlite(connectionString: string): StorageProvider {\n return new SqliteStorageProvider({ connectionString });\n}\n\n/** Create a SQLite storage config object (for init / options). */\nexport function sqliteConfig(\n connectionString: string,\n): SqliteDatabaseConfig {\n return {\n provider: \"sqlite\",\n connectionString,\n url: connectionString,\n };\n}\n\n/** Create a PostgreSQL storage provider. Requires optional peer dependency `pg`. */\nexport function postgres(\n options: string | { connectionString: string; maxPoolSize?: number },\n): StorageProvider {\n const opts =\n typeof options === \"string\"\n ? { connectionString: options }\n : options;\n return new PostgresStorageProvider(opts);\n}\n\n/** Create a PostgreSQL storage config object. */\nexport function postgresConfig(\n connectionString: string,\n options?: { maxPoolSize?: number },\n): PostgresDatabaseConfig {\n return {\n provider: \"postgres\",\n connectionString,\n url: connectionString,\n ...options,\n };\n}\n\n/** Create a SQLite telemetry provider for an independent event database. */\nexport function sqliteTelemetry(url: string): TelemetryProvider {\n return new SqliteTelemetryProvider({ url });\n}\n\n/** Create a SQLite checkpoint provider. */\nexport function sqliteCheckpoint(directory?: string): CheckpointProvider {\n return new SqliteCheckpointProvider({ directory });\n}\n\n/** Create a telemetry provider from config (SQLite only in v0.3). */\nexport function createTelemetryProvider(\n config: TelemetryConfig,\n): TelemetryProvider {\n if (config.database.provider !== \"sqlite\") {\n throw new ConfigurationError(\n `Unsupported telemetry provider \"${config.database.provider}\". Only \"sqlite\" is implemented in v0.3.0.`,\n );\n }\n const url =\n config.database.url ?? config.database.connectionString ?? \"\";\n if (!url) {\n throw new ConfigurationError(\"telemetry.database.url is required\");\n }\n return new SqliteTelemetryProvider({ url });\n}\n\n/**\n * Preferred v0.3 factory. Equivalent to `new Wolbarg(options)`.\n */\nexport function wolbarg(options: WolbargOptions): Wolbarg {\n return new Wolbarg(options as never);\n}\n","/**\n * Keyword / BM25 search providers.\n */\n\nexport interface KeywordSearchHit {\n memoryId: string;\n score: number;\n}\n\nexport interface KeywordDocument {\n id: string;\n text: string;\n}\n\n/** Contract for keyword / lexical search. */\nexport interface KeywordSearchProvider {\n readonly name: string;\n search(\n query: string,\n documents: KeywordDocument[],\n topK: number,\n ): Promise<KeywordSearchHit[]>;\n}\n\n/** Simple in-memory BM25 (Okapi). */\nexport class Bm25KeywordSearchProvider implements KeywordSearchProvider {\n readonly name = \"bm25\";\n private readonly k1: number;\n private readonly b: number;\n\n constructor(options?: { k1?: number; b?: number }) {\n this.k1 = options?.k1 ?? 1.2;\n this.b = options?.b ?? 0.75;\n }\n\n async search(\n query: string,\n documents: KeywordDocument[],\n topK: number,\n ): Promise<KeywordSearchHit[]> {\n if (documents.length === 0 || topK <= 0) {\n return [];\n }\n\n const docs = documents.map((doc) => ({\n id: doc.id,\n tokens: tokenize(doc.text),\n }));\n const queryTokens = tokenize(query);\n if (queryTokens.length === 0) {\n return [];\n }\n\n const N = docs.length;\n const avgdl =\n docs.reduce((sum, d) => sum + d.tokens.length, 0) / Math.max(N, 1);\n\n const df = new Map<string, number>();\n for (const term of new Set(queryTokens)) {\n let count = 0;\n for (const doc of docs) {\n if (doc.tokens.includes(term)) {\n count += 1;\n }\n }\n df.set(term, count);\n }\n\n const scored = docs.map((doc) => {\n const tfMap = new Map<string, number>();\n for (const token of doc.tokens) {\n tfMap.set(token, (tfMap.get(token) ?? 0) + 1);\n }\n let score = 0;\n for (const term of queryTokens) {\n const tf = tfMap.get(term) ?? 0;\n if (tf === 0) {\n continue;\n }\n const n = df.get(term) ?? 0;\n const idf = Math.log(1 + (N - n + 0.5) / (n + 0.5));\n const denom =\n tf + this.k1 * (1 - this.b + this.b * (doc.tokens.length / avgdl));\n score += idf * ((tf * (this.k1 + 1)) / denom);\n }\n return { memoryId: doc.id, score };\n });\n\n scored.sort((a, b) => b.score - a.score);\n return scored.filter((s) => s.score > 0).slice(0, topK);\n }\n}\n\nfunction tokenize(text: string): string[] {\n return text\n .toLowerCase()\n .split(/[^\\p{L}\\p{N}]+/u)\n .filter((t) => t.length > 1);\n}\n\n/** Factory for in-memory BM25 keyword search. */\nexport function bm25(options?: { k1?: number; b?: number }): KeywordSearchProvider {\n return new Bm25KeywordSearchProvider(options);\n}\n","/**\n * Reranker provider abstractions.\n */\n\nexport interface RerankDocument {\n id: string;\n text: string;\n}\n\nexport interface RerankHit {\n id: string;\n score: number;\n}\n\n/** Contract for cross-encoder / API rerankers. */\nexport interface RerankerProvider {\n readonly name: string;\n rerank(\n query: string,\n documents: RerankDocument[],\n topK: number,\n ): Promise<RerankHit[]>;\n}\n\ninterface HttpRerankerOptions {\n name: string;\n url: string;\n apiKey: string;\n model?: string;\n timeoutMs?: number;\n /** Build request body for the provider. */\n buildBody: (\n query: string,\n documents: RerankDocument[],\n topK: number,\n model?: string,\n ) => unknown;\n /** Parse ranked results from JSON response. */\n parseResults: (body: unknown, documents: RerankDocument[]) => RerankHit[];\n}\n\nclass HttpRerankerProvider implements RerankerProvider {\n readonly name: string;\n private readonly options: HttpRerankerOptions;\n\n constructor(options: HttpRerankerOptions) {\n this.name = options.name;\n this.options = options;\n }\n\n async rerank(\n query: string,\n documents: RerankDocument[],\n topK: number,\n ): Promise<RerankHit[]> {\n if (documents.length === 0) {\n return [];\n }\n const controller = new AbortController();\n const timeoutMs = this.options.timeoutMs ?? 30_000;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const res = await fetch(this.options.url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.options.apiKey}`,\n },\n body: JSON.stringify(\n this.options.buildBody(\n query,\n documents,\n topK,\n this.options.model,\n ),\n ),\n signal: controller.signal,\n });\n const body: unknown = await res.json().catch(() => ({}));\n if (!res.ok) {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n }\n const parsed = this.options.parseResults(body, documents);\n return parsed.slice(0, topK);\n } catch {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\n/** Lightweight local cross-encoder proxy (OpenAI-compatible score endpoint fallback = identity order). */\nexport function crossEncoder(options: {\n baseUrl: string;\n apiKey: string;\n model?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n const base = options.baseUrl.replace(/\\/+$/, \"\");\n return new HttpRerankerProvider({\n name: \"cross-encoder\",\n url: `${base}/rerank`,\n apiKey: options.apiKey,\n model: options.model,\n timeoutMs: options.timeoutMs,\n buildBody: (query, documents, topK, model) => ({\n model,\n query,\n documents: documents.map((d) => d.text),\n top_n: topK,\n }),\n parseResults: (body, documents) => {\n const results =\n (body as { results?: Array<{ index: number; relevance_score: number }> })\n .results ?? [];\n return results.map((r) => ({\n id: documents[r.index]?.id ?? String(r.index),\n score: r.relevance_score,\n }));\n },\n });\n}\n\nexport function jinaReranker(options: {\n apiKey: string;\n model?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n return new HttpRerankerProvider({\n name: \"jina\",\n url: \"https://api.jina.ai/v1/rerank\",\n apiKey: options.apiKey,\n model: options.model ?? \"jina-reranker-v2-base-multilingual\",\n timeoutMs: options.timeoutMs,\n buildBody: (query, documents, topK, model) => ({\n model,\n query,\n documents: documents.map((d) => d.text),\n top_n: topK,\n }),\n parseResults: (body, documents) => {\n const results =\n (body as { results?: Array<{ index: number; relevance_score: number }> })\n .results ?? [];\n return results.map((r) => ({\n id: documents[r.index]?.id ?? String(r.index),\n score: r.relevance_score,\n }));\n },\n });\n}\n\nexport function cohereReranker(options: {\n apiKey: string;\n model?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n return new HttpRerankerProvider({\n name: \"cohere\",\n url: \"https://api.cohere.com/v2/rerank\",\n apiKey: options.apiKey,\n model: options.model ?? \"rerank-v3.5\",\n timeoutMs: options.timeoutMs,\n buildBody: (query, documents, topK, model) => ({\n model,\n query,\n documents: documents.map((d) => d.text),\n top_n: topK,\n }),\n parseResults: (body, documents) => {\n const results =\n (body as { results?: Array<{ index: number; relevance_score: number }> })\n .results ?? [];\n return results.map((r) => ({\n id: documents[r.index]?.id ?? String(r.index),\n score: r.relevance_score,\n }));\n },\n });\n}\n\n/** Alias for BGE-style remote rerank endpoints that speak the Jina/Cohere shape. */\nexport function bgeReranker(options: {\n apiKey: string;\n baseUrl: string;\n model?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n const base = options.baseUrl.replace(/\\/+$/, \"\");\n return new HttpRerankerProvider({\n name: \"bge\",\n url: `${base}/rerank`,\n apiKey: options.apiKey,\n model: options.model,\n timeoutMs: options.timeoutMs,\n buildBody: (query, documents, topK, model) => ({\n model,\n query,\n documents: documents.map((d) => d.text),\n top_n: topK,\n }),\n parseResults: (body, documents) => {\n const results =\n (body as { results?: Array<{ index: number; relevance_score: number }> })\n .results ?? [];\n return results.map((r) => ({\n id: documents[r.index]?.id ?? String(r.index),\n score: r.relevance_score,\n }));\n },\n });\n}\n\n/**\n * OpenAI chat-based reranker (no Cohere/Jina key required).\n * Scores query–document relevance via chat completions and reorders hits.\n */\nexport function openaiReranker(options: {\n apiKey: string;\n model?: string;\n baseUrl?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n const base = (options.baseUrl ?? \"https://api.openai.com/v1\").replace(\n /\\/+$/,\n \"\",\n );\n const model = options.model ?? \"gpt-4.1-mini\";\n const timeoutMs = options.timeoutMs ?? 60_000;\n\n return {\n name: \"openai\",\n async rerank(query, documents, topK) {\n if (documents.length === 0) {\n return [];\n }\n const listed = documents\n .map((d, i) => `[${i}] ${d.text.slice(0, 800)}`)\n .join(\"\\n\\n\");\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const res = await fetch(`${base}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${options.apiKey}`,\n },\n body: JSON.stringify({\n model,\n temperature: 0,\n response_format: { type: \"json_object\" },\n messages: [\n {\n role: \"system\",\n content:\n 'You rerank documents for a retrieval system. Reply ONLY with JSON: {\"results\":[{\"index\":0,\"score\":0.0}]} where score is 0-1 relevance.',\n },\n {\n role: \"user\",\n content: `Query: ${query}\\n\\nDocuments:\\n${listed}\\n\\nReturn the top ${topK} indices sorted by score descending.`,\n },\n ],\n }),\n signal: controller.signal,\n });\n const body = (await res.json()) as {\n choices?: Array<{ message?: { content?: string } }>;\n };\n const content = body.choices?.[0]?.message?.content ?? \"{}\";\n let parsed: { results?: Array<{ index: number; score: number }> };\n try {\n parsed = JSON.parse(content) as typeof parsed;\n } catch {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n }\n const results = parsed.results ?? [];\n if (results.length === 0) {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n }\n return results\n .filter((r) => documents[r.index])\n .slice(0, topK)\n .map((r) => ({\n id: documents[r.index]!.id,\n score: Number(r.score) || 0,\n }));\n } catch {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n } finally {\n clearTimeout(timer);\n }\n },\n };\n}\n\n","/**\n * Optional OCR provider — extract text from images.\n */\n\nexport interface OcrResult {\n text: string;\n}\n\nexport interface OCRProvider {\n readonly name: string;\n recognize(image: Buffer, mimeType?: string): Promise<OcrResult>;\n}\n\n/**\n * Placeholder Tesseract adapter.\n * Requires optional peer packages (`tesseract.js`) when used.\n */\nexport function tesseract(): OCRProvider {\n return {\n name: \"tesseract\",\n async recognize(image: Buffer): Promise<OcrResult> {\n try {\n const mod = await import(\"tesseract.js\" as string);\n const createWorker =\n (mod as { createWorker?: (lang: string) => Promise<{\n recognize: (img: Buffer) => Promise<{ data: { text: string } }>;\n terminate: () => Promise<void>;\n }> }).createWorker ??\n (mod as { default?: { createWorker: (lang: string) => Promise<{\n recognize: (img: Buffer) => Promise<{ data: { text: string } }>;\n terminate: () => Promise<void>;\n }> } }).default?.createWorker;\n if (!createWorker) {\n return { text: \"\" };\n }\n const worker = await createWorker(\"eng\");\n try {\n const result = await worker.recognize(image);\n return { text: result.data.text.trim() };\n } finally {\n await worker.terminate();\n }\n } catch {\n return { text: \"\" };\n }\n },\n };\n}\n","/**\n * Optional vision provider — captions / descriptions / entities from images.\n */\n\nexport interface VisionResult {\n caption: string;\n description: string;\n entities: string[];\n}\n\nexport interface VisionProvider {\n readonly name: string;\n analyze(image: Buffer, mimeType?: string): Promise<VisionResult>;\n}\n\ninterface VisionHttpOptions {\n name: string;\n baseUrl: string;\n apiKey: string;\n model: string;\n timeoutMs?: number;\n}\n\nclass OpenAICompatibleVisionProvider implements VisionProvider {\n readonly name: string;\n private readonly options: VisionHttpOptions;\n\n constructor(options: VisionHttpOptions) {\n this.name = options.name;\n this.options = options;\n }\n\n async analyze(image: Buffer, mimeType = \"image/png\"): Promise<VisionResult> {\n const base = this.options.baseUrl.replace(/\\/+$/, \"\");\n const url = `${base}/chat/completions`;\n const dataUrl = `data:${mimeType};base64,${image.toString(\"base64\")}`;\n const controller = new AbortController();\n const timer = setTimeout(\n () => controller.abort(),\n this.options.timeoutMs ?? 60_000,\n );\n try {\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.options.apiKey}`,\n },\n body: JSON.stringify({\n model: this.options.model,\n messages: [\n {\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: 'Describe this image. Reply as JSON: {\"caption\":\"...\",\"description\":\"...\",\"entities\":[\"...\"]}',\n },\n { type: \"image_url\", image_url: { url: dataUrl } },\n ],\n },\n ],\n max_tokens: 512,\n }),\n signal: controller.signal,\n });\n const body = (await res.json()) as {\n choices?: Array<{ message?: { content?: string } }>;\n };\n const content = body.choices?.[0]?.message?.content ?? \"\";\n return parseVisionJson(content);\n } catch {\n return { caption: \"\", description: \"\", entities: [] };\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\nfunction parseVisionJson(content: string): VisionResult {\n try {\n const match = content.match(/\\{[\\s\\S]*\\}/);\n if (!match) {\n return { caption: content.trim(), description: content.trim(), entities: [] };\n }\n const parsed = JSON.parse(match[0]) as Partial<VisionResult>;\n return {\n caption: String(parsed.caption ?? \"\"),\n description: String(parsed.description ?? \"\"),\n entities: Array.isArray(parsed.entities)\n ? parsed.entities.map(String)\n : [],\n };\n } catch {\n return { caption: content.trim(), description: content.trim(), entities: [] };\n }\n}\n\nexport function geminiVision(options: {\n apiKey: string;\n model?: string;\n baseUrl?: string;\n timeoutMs?: number;\n}): VisionProvider {\n return new OpenAICompatibleVisionProvider({\n name: \"gemini\",\n baseUrl:\n options.baseUrl ??\n \"https://generativelanguage.googleapis.com/v1beta/openai\",\n apiKey: options.apiKey,\n model: options.model ?? \"gemini-2.0-flash\",\n timeoutMs: options.timeoutMs,\n });\n}\n\nexport function openaiVision(options: {\n apiKey: string;\n model?: string;\n baseUrl?: string;\n timeoutMs?: number;\n}): VisionProvider {\n return new OpenAICompatibleVisionProvider({\n name: \"openai-vision\",\n baseUrl: options.baseUrl ?? \"https://api.openai.com/v1\",\n apiKey: options.apiKey,\n model: options.model ?? \"gpt-4o-mini\",\n timeoutMs: options.timeoutMs,\n });\n}\n","/**\n * Internal benchmark helpers for CLI / Studio later.\n * @internal\n */\n\nexport interface BenchmarkSample {\n name: string;\n durationMs: number;\n ok: boolean;\n error?: string;\n}\n\nexport interface BenchmarkReport {\n startedAt: string;\n finishedAt: string;\n samples: BenchmarkSample[];\n summary: {\n count: number;\n ok: number;\n failed: number;\n avgMs: number;\n p50Ms: number;\n p95Ms: number;\n p99Ms: number;\n };\n}\n\nexport async function runBenchmark(\n name: string,\n iterations: number,\n fn: () => Promise<void> | void,\n): Promise<BenchmarkSample[]> {\n const samples: BenchmarkSample[] = [];\n for (let i = 0; i < iterations; i += 1) {\n const t0 = performance.now();\n try {\n await fn();\n samples.push({\n name,\n durationMs: performance.now() - t0,\n ok: true,\n });\n } catch (error) {\n samples.push({\n name,\n durationMs: performance.now() - t0,\n ok: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return samples;\n}\n\nexport function summarizeBenchmark(\n samples: BenchmarkSample[],\n startedAt: string,\n finishedAt: string,\n): BenchmarkReport {\n const durations = samples\n .filter((s) => s.ok)\n .map((s) => s.durationMs)\n .sort((a, b) => a - b);\n const avg =\n durations.length === 0\n ? 0\n : durations.reduce((a, b) => a + b, 0) / durations.length;\n\n return {\n startedAt,\n finishedAt,\n samples,\n summary: {\n count: samples.length,\n ok: samples.filter((s) => s.ok).length,\n failed: samples.filter((s) => !s.ok).length,\n avgMs: avg,\n p50Ms: percentile(durations, 0.5),\n p95Ms: percentile(durations, 0.95),\n p99Ms: percentile(durations, 0.99),\n },\n };\n}\n\nfunction percentile(sorted: number[], p: number): number {\n if (sorted.length === 0) return 0;\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil(p * sorted.length) - 1),\n );\n return sorted[idx]!;\n}\n"]}
1
+ {"version":3,"sources":["../src/errors/index.ts","../src/compression/index.ts","../src/chunking/index.ts","../src/utils/index.ts","../src/embedding/index.ts","../src/embedding/cache.ts","../src/embedding/cache-store.ts","../src/llm/index.ts","../src/ingest/index.ts","../src/core/options.ts","../src/filters/match.ts","../src/filters/sql-compile.ts","../src/schema/index.ts","../src/sql/index.ts","../src/utils/vector.ts","../src/utils/vector-index.ts","../src/storage/sqlite/concurrency-config.ts","../src/storage/sqlite/transaction.ts","../src/memory/dedupe.ts","../src/storage/providers/sqlite.ts","../src/filters/sql-compile-postgres.ts","../src/subscribe/postgres-listener.ts","../src/storage/providers/postgres.ts","../src/storage/index.ts","../src/version.ts","../src/memory/transfer.ts","../src/memory/index.ts","../src/retrieval/index.ts","../src/graph/memory-node.ts","../src/graph/sync/cascade.ts","../src/graph/providers/sqlite-graph.ts","../src/graph/providers/neo4j.ts","../src/core/validate.ts","../src/telemetry/logger.ts","../src/telemetry/trace.ts","../src/telemetry/emitter.ts","../src/providers/sqlite/sqliteEventDatabase.ts","../src/providers/sqlite/sqliteTelemetryProvider.ts","../src/providers/sqlite/sqliteCheckpointProvider.ts","../src/subscribe/sqlite-emitter.ts","../src/core/wolbarg.ts","../src/filters/types.ts","../src/factories/index.ts","../src/keyword/index.ts","../src/rerank/index.ts","../src/ocr/index.ts","../src/vision/index.ts","../src/benchmark/index.ts"],"names":["meta","path","createHash","fs","DatabaseSync","sqliteVec","clauses","FIELD_RE","compileComparison","AsyncLocalStorage","out","offset","params","idx","sql","result","vec","tsvProbe","serializeMetadata","deserializeMetadata","nowIso","describe","matchesFilter","EventEmitter","sqlite","id","hits","best","wolbarg"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EAC7B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EAET,WAAA,CACE,OAAA,EACA,IAAA,EACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AACtB,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,SAAS,OAAA,EAAS,MAAA;AACvB,IAAA,IAAA,CAAK,aAAa,OAAA,EAAS,UAAA;AAC3B,IAAA,IAAA,CAAK,YAAY,OAAA,EAAS,SAAA;AAC1B,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAClD;AACF;AAGO,IAAM,mBAAA,GAAN,cAAkC,YAAA,CAAa;AAAA,EACpD,WAAA,CACE,SACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,wBAAwB,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF;AAGO,IAAM,kBAAA,GAAN,cAAiC,YAAA,CAAa;AAAA,EACnD,WAAA,CACE,SACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,uBAAuB,OAAO,CAAA;AAC7C,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAChD,WAAA,CACE,SACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,oBAAoB,OAAO,CAAA;AAC1C,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAGO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CACE,SACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,kBAAkB,OAAO,CAAA;AACxC,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAMO,IAAM,kBAAA,GAAN,cAAiC,YAAA,CAAa;AAAA,EACnD,WAAA,CACE,SACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,0BAA0B,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF;AAGO,IAAM,cAAA,GAAN,cAA6B,YAAA,CAAa;AAAA,EAC/C,WAAA,CACE,SACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,mBAAmB,OAAO,CAAA;AACzC,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AACF;AAGO,IAAM,gBAAA,GAAN,cAA+B,YAAA,CAAa;AAAA,EACjD,WAAA,CACE,SACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,qBAAqB,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF;AAGO,IAAM,mBAAA,GAAN,cAAkC,YAAA,CAAa;AAAA,EACpD,WAAA,CACE,SACA,OAAA,EAKA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,oBAAoB,OAAO,CAAA;AAC1C,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF;AAKO,IAAM,0BAAA,GAAN,cAAyC,kBAAA,CAAmB;AAAA,EACxD,QAAA;AAAA,EAET,WAAA,CAAY,QAAA,EAAkB,MAAA,EAAgB,IAAA,EAAc;AAC1D,IAAA,KAAA,CAAM,GAAG,MAAM,CAAA,UAAA,EAAa,QAAQ,CAAA,QAAA,EAAM,IAAI,CAAA,CAAA,EAAI;AAAA,MAChD,SAAA,EAAW,MAAA;AAAA,MACX,MAAA,EAAQ,GAAG,QAAQ,CAAA,mBAAA,CAAA;AAAA,MACnB,UAAA,EAAY;AAAA,KACb,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AACF;AAOO,IAAM,gCAAA,GAAN,cAA+C,YAAA,CAAa;AAAA,EACjE,WAAA,CAAY,SAAiB,SAAA,EAAmB;AAC9C,IAAA,KAAA;AAAA,MACE,sEAAsE,OAAO,CAAA,CAAA,CAAA;AAAA,MAC7E,gCAAA;AAAA,MACA;AAAA,QACE,SAAA;AAAA,QACA,MAAA,EAAQ,GAAG,OAAO,CAAA,+BAAA,CAAA;AAAA,QAClB,UAAA,EACE;AAAA;AACJ,KACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,kCAAA;AAAA,EACd;AACF;AAGO,SAAS,kBAAA,CACd,WACA,KAAA,EACc;AAEd,EAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAE9B,EAAA,IAAI,MAAM,QAAA,CAAS,oBAAoB,KAAK,KAAA,CAAM,QAAA,CAAS,aAAa,CAAA,EAAG;AACzE,IAAA,OAAO,IAAI,kBAAA,CAAmB,sBAAA,CAAuB,SAAA,EAAW,GAAG,CAAA,EAAG;AAAA,MACpE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ,MAAA;AAAA,MACxC,SAAA;AAAA,MACA,MAAA,EAAQ,wBAAA;AAAA,MACR,UAAA,EACE;AAAA,KACH,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAM,QAAA,CAAS,cAAc,KAAK,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC9D,IAAA,OAAO,IAAI,aAAA,CAAc,sBAAA,CAAuB,SAAA,EAAW,GAAG,CAAA,EAAG;AAAA,MAC/D,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ,MAAA;AAAA,MACxC,SAAA;AAAA,MACA,MAAA,EAAQ,yBAAA;AAAA,MACR,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAM,QAAA,CAAS,UAAU,KAAK,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,EAAG;AAC7D,IAAA,OAAO,IAAI,aAAA,CAAc,sBAAA,CAAuB,SAAA,EAAW,GAAG,CAAA,EAAG;AAAA,MAC/D,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ,MAAA;AAAA,MACxC,SAAA;AAAA,MACA,MAAA,EAAQ,8BAAA;AAAA,MACR,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAI,aAAA,CAAc,sBAAA,CAAuB,SAAA,EAAW,GAAG,CAAA,EAAG;AAAA,IAC/D,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ,MAAA;AAAA,IACxC,SAAA;AAAA,IACA,MAAA,EAAQ,GAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACb,CAAA;AACH;AAEA,SAAS,sBAAA,CAAuB,WAAmB,MAAA,EAAuC;AACxF,EAAA,MAAM,aACJ,OAAO,MAAA,KAAW,WAAW,MAAA,GAAS,MAAA,CAAO,UAAU,MAAA,CAAO,OAAA;AAChE,EAAA,OAAO,qBAAqB,SAAS,CAAA;AAAA;AAAA,EAAgB,UAAU,CAAA,CAAA;AACjE;;;AC5OA,IAAM,aAAA,GAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,iCAAA,CAAA;AAmBf,IAAM,yBAAN,MAA4D;AAAA,EACxD,IAAA,GAAO,KAAA;AAAA,EACC,GAAA;AAAA,EAEjB,YAAY,GAAA,EAAkB;AAC5B,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,EACb;AAAA,EAEA,MAAM,SAAS,QAAA,EAA2C;AACxD,IAAA,OAAO,gBAAA,CAAiB,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAAA,EAC5C;AACF;AAEA,eAAsB,gBAAA,CACpB,KACA,QAAA,EACiB;AACjB,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,iBAAiB,mCAAmC,CAAA;AAAA,EAChE;AAEA,EAAA,MAAM,OAAA,GAAU,QAAA,CACb,GAAA,CAAI,CAAC,QAAQ,KAAA,KAAU;AACtB,IAAA,MAAMA,QACJ,MAAA,CAAO,IAAA,CAAK,OAAO,QAAQ,CAAA,CAAE,SAAS,CAAA,GAClC;AAAA,UAAA,EAAe,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,GAC9C,EAAA;AACN,IAAA,OAAO,CAAA,CAAA,EAAI,KAAA,GAAQ,CAAC,CAAA,MAAA,EAAS,MAAA,CAAO,EAAE,CAAA,UAAA,EAAa,MAAA,CAAO,SAAA,CAAU,WAAA,EAAa,CAAA,CAAA,EAAIA,KAAI;AAAA,EAAK,MAAA,CAAO,QAAQ,IAAI,CAAA,CAAA;AAAA,EACnH,CAAC,CAAA,CACA,IAAA,CAAK,MAAM,CAAA;AAEd,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,IAAI,QAAA,CAAS;AAAA,MACxB,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,aAAA,EAAc;AAAA,MACzC;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,CAAA,uBAAA,EAA0B,QAAA,CAAS,MAAM,CAAA;;AAAA,EAA+C,OAAO,CAAA;AAAA;AAC1G,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,gBAAA,EAAkB;AACrC,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,MAAM,IAAI,gBAAA;AAAA,MACR,uBAAuB,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,MAC7E,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,KACtD;AAAA,EACF;AACF;AAEO,SAAS,0BACd,GAAA,EACqB;AACrB,EAAA,OAAO,IAAI,uBAAuB,GAAG,CAAA;AACvC;;;AC9DA,SAAS,aAAa,OAAA,EAGpB;AACA,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,OAAA,EAAS,aAAa,GAAG,CAAA;AACxD,EAAA,MAAM,UAAU,IAAA,CAAK,GAAA;AAAA,IACnB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,EAAS,WAAW,GAAG,CAAA;AAAA,IACnC,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,CAAC;AAAA,GAC1B;AACA,EAAA,OAAO,EAAE,WAAW,OAAA,EAAQ;AAC9B;AAEA,SAAS,YAAA,CACP,MAAA,EACA,SAAA,EACA,OAAA,EACA,MAAA,EACS;AACT,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,MAAM,SAAkB,EAAC;AACzB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,MAAM,QAAQ,MAAY;AACxB,IAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,CAAA;AACpC,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AAAA,EACF,CAAA;AAEA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,SAAA,GAAY,MAAM,CAAA,EAAG,GAAG,GAAG,MAAM,CAAA,EAAG,KAAK,CAAA,CAAA,GAAK,KAAA;AACpD,IAAA,IAAI,SAAA,CAAU,UAAU,SAAA,EAAW;AACjC,MAAA,GAAA,GAAM,SAAA;AACN,MAAA;AAAA,IACF;AACA,IAAA,KAAA,EAAM;AACN,IAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAE5B,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,OAAO,KAAA,GAAQ,MAAM,MAAA,EAAQ;AAC3B,QAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,SAAA,EAAW,MAAM,MAAM,CAAA;AACpD,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA,CAAE,IAAA,EAAK,EAAG,KAAA,EAAO,CAAA;AAC3D,QAAA,KAAA,IAAS,CAAA;AACT,QAAA,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,OAAA,EAAS,GAAG,CAAA;AAAA,MACrC;AACA,MAAA,GAAA,GAAM,EAAA;AAAA,IACR,CAAA,MAAO;AACL,MAAA,GAAA,GAAM,KAAA;AAAA,IACR;AAAA,EACF;AACA,EAAA,KAAA,EAAM;AAEN,EAAA,IAAI,OAAA,GAAU,CAAA,IAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAEpC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAC/B,IAAA,OAAO,aAAA,CAAc,IAAA,EAAM,SAAA,EAAW,OAAO,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAA,CACP,IAAA,EACA,SAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,SAAkB,EAAC;AACzB,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,OAAO,KAAA,GAAQ,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,SAAA,EAAW,KAAK,MAAM,CAAA;AACnD,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAG,EAAE,IAAA,EAAK;AAC1C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,CAAA;AAClC,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AACA,IAAA,IAAI,GAAA,IAAO,KAAK,MAAA,EAAQ;AACtB,MAAA;AAAA,IACF;AACA,IAAA,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,EAC3C;AACA,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,wBAAN,MAAwD;AAAA,EACpD,IAAA,GAAO,OAAA;AAAA,EAChB,KAAA,CAAM,MAAc,OAAA,EAAoC;AACtD,IAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,aAAa,OAAO,CAAA;AACnD,IAAA,OAAO,aAAA,CAAc,IAAA,EAAM,SAAA,EAAW,OAAO,CAAA;AAAA,EAC/C;AACF;AAEO,IAAM,2BAAN,MAA2D;AAAA,EACvD,IAAA,GAAO,UAAA;AAAA,EAChB,KAAA,CAAM,MAAc,OAAA,EAAoC;AACtD,IAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,aAAa,OAAO,CAAA;AACnD,IAAA,MAAM,SAAA,GAAY,IAAA,CACf,KAAA,CAAM,eAAe,CAAA,CACrB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,OAAO,OAAO,CAAA;AACjB,IAAA,OAAO,YAAA,CAAa,SAAA,EAAW,SAAA,EAAW,OAAA,EAAS,GAAG,CAAA;AAAA,EACxD;AACF;AAEO,IAAM,4BAAN,MAA4D;AAAA,EACxD,IAAA,GAAO,WAAA;AAAA,EAChB,KAAA,CAAM,MAAc,OAAA,EAAoC;AACtD,IAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,aAAa,OAAO,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,IAAA,CAChB,KAAA,CAAM,SAAS,CAAA,CACf,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,OAAO,OAAO,CAAA;AACjB,IAAA,OAAO,YAAA,CAAa,UAAA,EAAY,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAAA,EAC5D;AACF;AAEO,IAAM,2BAAN,MAA2D;AAAA,EACvD,IAAA,GAAO,UAAA;AAAA,EAChB,KAAA,CAAM,MAAc,OAAA,EAAoC;AACtD,IAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,aAAa,OAAO,CAAA;AACnD,IAAA,MAAM,QAAA,GAAW,IAAA,CACd,KAAA,CAAM,gBAAgB,CAAA,CACtB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,OAAO,OAAO,CAAA;AACjB,IAAA,IAAI,QAAA,CAAS,UAAU,CAAA,EAAG;AACxB,MAAA,OAAO,IAAI,yBAAA,EAA0B,CAAE,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,YAAA,CAAa,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAAA,EAC1D;AACF;AAEO,IAAM,0BAAN,MAA0D;AAAA,EACtD,IAAA,GAAO,SAAA;AAAA,EAChB,KAAA,CAAM,MAAc,OAAA,EAAoC;AACtD,IAAA,OAAO,IAAI,wBAAA,EAAyB,CAAE,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,EAC3D;AACF;AAEO,SAAS,sBAAA,CACd,OAAoE,UAAA,EAClD;AAClB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,OAAA;AACH,MAAA,OAAO,IAAI,qBAAA,EAAsB;AAAA,IACnC,KAAK,WAAA;AACH,MAAA,OAAO,IAAI,yBAAA,EAA0B;AAAA,IACvC,KAAK,UAAA;AACH,MAAA,OAAO,IAAI,wBAAA,EAAyB;AAAA,IACtC,KAAK,SAAA;AACH,MAAA,OAAO,IAAI,uBAAA,EAAwB;AAAA,IACrC,KAAK,UAAA;AAAA,IACL;AACE,MAAA,OAAO,IAAI,wBAAA,EAAyB;AAAA;AAE1C;AAEO,SAAS,sBAAsB,IAAA,EAAgC;AACpE,EAAA,IAAI,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,EAAG;AAC3B,IAAA,OAAO,IAAI,wBAAA,EAAyB;AAAA,EACtC;AACA,EAAA,OAAO,IAAI,wBAAA,EAAyB;AACtC;;;AChLO,SAAS,QAAA,GAAmB;AACjC,EAAA,OAAO,OAAO,UAAA,EAAW;AAC3B;AAGO,SAAS,MAAA,GAAiB;AAC/B,EAAA,OAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAChC;AAGO,SAAS,SAAS,KAAA,EAAqB;AAC5C,EAAA,OAAO,IAAI,KAAK,KAAK,CAAA;AACvB;AAGO,SAAS,oBAAA,CACd,OACA,SAAA,EACyB;AACzB,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC1D,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,SAAS,CAAA,2BAAA,CAA6B,CAAA;AAAA,EACrE;AACF;AAGO,SAAS,kBAAA,CACd,KAAA,EACA,SAAA,EACA,OAAA,EACyB;AACzB,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACxD,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,SAAS,CAAA,wBAAA,CAA0B,CAAA;AAAA,EAClE;AACA,EAAA,IAAI,OAAA,EAAS,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,QAAQ,GAAA,EAAK;AACrD,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,SAAS,CAAA,YAAA,EAAe,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,OAAA,EAAS,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,QAAQ,GAAA,EAAK;AACrD,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,SAAS,CAAA,YAAA,EAAe,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAAA,EACpE;AACF;AAEA,IAAM,eAAA,GAAkB,IAAA;AAGjB,SAAS,kBAAkB,QAAA,EAA2C;AAC3E,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,IAAA,CAAK,UAAU,QAAQ,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,eAAA;AACT;AAGO,SAAS,oBAAoB,GAAA,EAAsC;AACxE,EAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,eAAA,EAAiB;AACnC,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AACtC,IAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,MAAA,KAAW,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC3E,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,EAAC;AAAA,EACV,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAKO,SAAS,kBAAkB,SAAA,EAAiC;AACjE,EAAA,OAAO,OAAO,IAAA,CAAK,SAAA,CAAU,QAAQ,SAAA,CAAU,UAAA,EAAY,UAAU,UAAU,CAAA;AACjF;AAMO,SAAS,qBAAqB,QAAA,EAA0B;AAC7D,EAAA,OAAO,CAAA,GAAI,QAAA;AACb;AAMO,IAAM,aAAN,MAAiB;AAAA,EACd,KAAA,GAAuB,QAAQ,OAAA,EAAQ;AAAA,EAE/C,MAAM,aAAgB,EAAA,EAAsC;AAC1D,IAAA,IAAI,OAAA;AACJ,IAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AAC1C,MAAA,OAAA,GAAU,OAAA;AAAA,IACZ,CAAC,CAAA;AACD,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA;AACtB,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAErC,IAAA,MAAM,QAAA;AACN,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF;AACF,CAAA;AAGO,SAAS,OAAA,CAAQ,SAAiBC,KAAAA,EAAsB;AAC7D,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACvC,EAAA,MAAM,SAASA,KAAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAIA,KAAAA,GAAO,IAAIA,KAAI,CAAA,CAAA;AACrD,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,MAAM,CAAA,CAAA;AACzB;;;AC9FO,IAAM,oCAAN,MAAqE;AAAA,EACjE,KAAA;AAAA,EACQ,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EAEjB,YAAY,MAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,SAAA,IAAa,GAAA;AAAA,EACvC;AAAA,EAEA,MAAM,MAAM,IAAA,EAAqC;AAC/C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACxC,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,GAAO,CAAC,CAAA,EAAG,SAAA;AACnC,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAClC,MAAA,MAAM,IAAI,eAAe,6CAA6C,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,WAAW,KAAA,EAA0C;AACzD,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,CAAC,MAAM,IAAA,CAAK,MAAM,KAAA,CAAM,CAAC,CAAE,CAAC,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,IAAQ,EAAC;AAC/B,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,IAAI,CAAA,CAAE,IAAA;AAAA,MACvB,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,KAAA,IAAS,CAAA,KAAM,EAAE,KAAA,IAAS,CAAA;AAAA,KACzC;AACA,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ;AAElC,MAAA,MAAM,MAAsB,EAAC;AAC7B,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,GAAA,CAAI,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,MACjC;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,KAAS;AAC1B,MAAA,IAAI,CAAC,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA,CAAU,WAAW,CAAA,EAAG;AAClD,QAAA,MAAM,IAAI,eAAe,oDAAoD,CAAA;AAAA,MAC/E;AACA,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,IACzC,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,QAAA,GAA4C;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,KAAA,CAAM,sBAAsB,CAAA;AACzD,MAAA,OAAO,EAAE,UAAA,EAAY,SAAA,CAAU,MAAA,EAAO;AAAA,IACxC,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,cAAA,EAAgB;AACnC,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,IAAI,cAAA;AAAA,QACR,CAAA,uCAAA,EAA0C,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QAC9D,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,QACZ,KAAA,EACkC;AAClC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,aAAa,CAAA;AAC/C,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,KAAK,SAAS,CAAA;AAEjE,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAC3B,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,SACtC;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ;AAAA,SACD,CAAA;AAAA,QACD,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,GAAQ,MAAM,IAAI,IAAA,EAAK;AAAA,MACzB,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAI,cAAA;AAAA,UACR,CAAA,oDAAA,EAAuD,IAAI,MAAM,CAAA,CAAA;AAAA,SACnE;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,MAAM,UAAU,IAAA,CAAK,KAAA,EAAO,OAAA,IAAW,CAAA,KAAA,EAAQ,IAAI,MAAM,CAAA,CAAA;AACzD,QAAA,MAAM,IAAI,cAAA,CAAe,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CAAA;AAAA,MACjE;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,cAAA,EAAgB;AACnC,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,QAAA,MAAM,IAAI,cAAA;AAAA,UACR,CAAA,kCAAA,EAAqC,KAAK,SAAS,CAAA,EAAA;AAAA,SACrD;AAAA,MACF;AACA,MAAA,MAAM,IAAI,cAAA;AAAA,QACR,CAAA,0BAAA,EAA6B,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QACjD,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF;AAAA,EAEQ,SAAS,KAAA,EAAwB;AACvC,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAO,KAAA,CAAM,OAAA;AAAA,IACf;AACA,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF,CAAA;AAEO,SAAS,wBACd,MAAA,EACmB;AACnB,EAAA,OAAO,IAAI,kCAAkC,MAAM,CAAA;AACrD;AAEA,SAAS,QACP,QAAA,EACA;AACA,EAAA,OAAO,CAAC,WACN,uBAAA,CAAwB;AAAA,IACtB,OAAA,EAAS,MAAA,CAAO,OAAA,IAAW,QAAA,CAAS,OAAA;AAAA,IACpC,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,WAAW,MAAA,CAAO;AAAA,GACnB,CAAA;AACL;AAEO,IAAM,yBAAA,GAA4B,CACvC,MAAA,KACsB,uBAAA,CAAwB,MAAM;AAE/C,IAAM,kBAAkB,OAAA,CAAQ;AAAA,EACrC,OAAA,EAAS;AACX,CAAC;AAEM,IAAM,kBAAkB,OAAA,CAAQ;AAAA,EACrC,OAAA,EAAS;AACX,CAAC;AAEM,IAAM,sBAAsB,OAAA,CAAQ;AAAA,EACzC,OAAA,EAAS;AACX,CAAC;AAEM,IAAM,oBAAoB,OAAA,CAAQ;AAAA,EACvC,OAAA,EAAS;AACX,CAAC;AAEM,IAAM,kBAAkB,OAAA,CAAQ;AAAA,EACrC,OAAA,EAAS;AACX,CAAC;AAEM,IAAM,oBAAoB,OAAA,CAAQ;AAAA,EACvC,OAAA,EAAS;AACX,CAAC;AAEM,IAAM,gBAAgB,OAAA,CAAQ;AAAA,EACnC,OAAA,EAAS;AACX,CAAC;AAGD,eAAsB,SAAA,CACpB,QAAA,EACA,KAAA,EACA,WAAA,GAAc,CAAA,EACW;AACzB,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,OAAO,QAAA,CAAS,WAAW,KAAK,CAAA;AAAA,EAClC;AACA,EAAA,MAAM,GAAA,GAAsB,IAAI,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA;AAClD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,eAAe,MAAA,GAAwB;AACrC,IAAA,OAAO,KAAA,GAAQ,MAAM,MAAA,EAAQ;AAC3B,MAAA,MAAM,OAAA,GAAU,KAAA;AAChB,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,GAAA,CAAI,OAAO,CAAA,GAAI,MAAM,SAAS,KAAA,CAAM,KAAA,CAAM,OAAO,CAAE,CAAA;AAAA,IACrD;AAAA,EACF;AACA,EAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,IACZ,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,KAAA,CAAM,MAAM,CAAA,EAAE,EAAG,MAAM,QAAQ;AAAA,GAC5E;AACA,EAAA,OAAO,GAAA;AACT;AClMO,SAAS,4BACd,KAAA,EAC8B;AAC9B,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAO,OAAA,IAAW,IAAA;AAAA,IAC3B,KAAA,EAAO,OAAO,KAAA,IAAS,IAAA;AAAA,IACvB,UAAA,EAAY,OAAO,UAAA,IAAc;AAAA,GACnC;AACF;AAEO,SAAS,iBAAA,CAAkB,SAAiB,KAAA,EAAuB;AACxE,EAAA,MAAM,IAAA,GAAOC,oBAAW,QAAQ,CAAA,CAAE,OAAO,OAAA,EAAS,MAAM,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AACtE,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AACzB;AAmBO,SAAS,kBAAA,CACd,QAAA,EACA,KAAA,EACA,MAAA,EACqB;AACrB,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,WAAA,GAAc,CAAA;AAElB,EAAA,eAAe,SAAS,IAAA,EAAqC;AAC3D,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,WAAA,IAAe,CAAA;AACf,MAAA,OAAO,QAAA,CAAS,MAAM,IAAI,CAAA;AAAA,IAC5B;AACA,IAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,IAAA,EAAM,QAAA,CAAS,KAAK,CAAA;AAClD,IAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,SAAA,IAAa,CAAA;AAEb,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,WAAA,IAAe,CAAA;AACf,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAExC,IAAA,KAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,QAAA,CAAS,OAAO,MAAM,CAAA;AAC1C,IAAA,IAAI,MAAA,CAAO,eAAe,IAAA,EAAM;AAC9B,MAAA,KAAK,KAAA,CAAM,aAAA,CAAc,MAAA,CAAO,UAAU,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,eAAe,WAAW,KAAA,EAA0C;AAClE,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,IAAW,KAAA,CAAM,WAAW,CAAA,EAAG;AACzC,MAAA,IAAI,SAAS,UAAA,EAAY;AACvB,QAAA,WAAA,IAAe,KAAA,CAAM,MAAA;AACrB,QAAA,OAAO,QAAA,CAAS,WAAW,KAAK,CAAA;AAAA,MAClC;AACA,MAAA,OAAO,OAAA,CAAQ,IAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,OAAA,GAAsC,IAAI,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,CAAE,IAAA;AAAA,MAClE;AAAA,KACF;AACA,IAAA,MAAM,cAAwB,EAAC;AAC/B,IAAA,MAAM,YAAsB,EAAC;AAE7B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxC,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,IAAA,EAAM,QAAA,CAAS,KAAK,CAAA;AAClD,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAClC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAAA,MACf,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAClB,QAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,MACrB;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,WAAA,IAAe,SAAA,CAAU,MAAA;AACzB,MAAA,MAAM,UAAU,QAAA,CAAS,UAAA,GACrB,MAAM,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,GACnC,MAAM,QAAQ,GAAA,CAAI,SAAA,CAAU,IAAI,CAAC,CAAA,KAAM,SAAS,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAC7D,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC9C,QAAA,MAAM,GAAA,GAAM,YAAY,CAAC,CAAA;AACzB,QAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA;AACf,QAAA,MAAM,MAAM,iBAAA,CAAkB,SAAA,CAAU,CAAC,CAAA,EAAI,SAAS,KAAK,CAAA;AAC3D,QAAA,KAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,QAAA,CAAS,OAAO,MAAM,CAAA;AAAA,MAC5C;AACA,MAAA,IAAI,MAAA,CAAO,eAAe,IAAA,EAAM;AAC9B,QAAA,KAAK,KAAA,CAAM,aAAA,CAAc,MAAA,CAAO,UAAU,CAAA;AAAA,MAC5C;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,KAAA,EAAO,QAAA;AAAA,IACP,UAAA;AAAA,IACA,QAAA,EAAU,MAAM,QAAA,CAAS,QAAA,EAAS;AAAA,IAClC,IAAI,SAAA,GAAY;AACd,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAI,WAAA,GAAc;AAChB,MAAA,OAAO,WAAA;AAAA,IACT,CAAA;AAAA,IACA,eAAA,GAAkB;AAChB,MAAA,SAAA,GAAY,CAAA;AACZ,MAAA,WAAA,GAAc,CAAA;AAAA,IAChB;AAAA,GACF;AACF;;;ACjIA,IAAM,qBAAA,GAAwB,EAAA;AAC9B,IAAM,cAAA,GAAiB,GAAA;AAUvB,IAAM,UAAN,MAAc;AAAA,EACK,GAAA,uBAAU,GAAA,EAAqB;AAAA,EAC/B,UAAA;AAAA,EAEjB,WAAA,CAAY,aAAa,cAAA,EAAgB;AACvC,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA,EAEA,GAAA,CAAI,UAAkB,KAAA,EAA2C;AAC/D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA;AACnC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,UAAU,IAAA,IAAQ,IAAA,CAAK,KAAI,GAAI,KAAA,CAAM,YAAY,KAAA,EAAO;AAC1D,MAAA,IAAA,CAAK,GAAA,CAAI,OAAO,QAAQ,CAAA;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,KAAA,CAAM,UAAA,GAAa,KAAK,GAAA,EAAI;AAE5B,IAAA,IAAA,CAAK,GAAA,CAAI,OAAO,QAAQ,CAAA;AACxB,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA;AAC5B,IAAA,OAAO,KAAA,CAAM,MAAA;AAAA,EACf;AAAA,EAEA,GAAA,CAAI,QAAA,EAAkB,KAAA,EAAe,MAAA,EAA4B;AAC/D,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,IAC1B;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,IAAI,QAAA,EAAU;AAAA,MACrB,KAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAW,GAAA;AAAA,MACX,UAAA,EAAY;AAAA,KACb,CAAA;AACD,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEA,MAAM,QAAA,EAAwB;AAC5B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA;AACnC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,UAAA,GAAa,KAAK,GAAA,EAAI;AAC5B,IAAA,IAAA,CAAK,GAAA,CAAI,OAAO,QAAQ,CAAA;AACxB,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA;AAAA,EAC9B;AAAA,EAEA,cAAc,UAAA,EAA2B;AACvC,IAAA,MAAM,KAAA,GAAQ,cAAc,IAAA,CAAK,UAAA;AACjC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,GAAO,KAAA,EAAO;AAC5B,MAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AACtC,MAAA,IAAI,WAAW,MAAA,EAAW;AACxB,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA;AAAA,EAClB;AACF,CAAA;AAEO,IAAM,4BAAN,MAA+D;AAAA,EACnD,KAAA;AAAA,EACA,KAAA;AAAA,EACA,EAAA,GAAK,IAAI,OAAA,EAAQ;AAAA,EACjB,cAAA,uBAAqB,GAAA,EAAY;AAAA,EACjC,WAAA,uBAAkB,GAAA,EAGjC;AAAA,EACM,gBAAA,GAAmB,KAAA;AAAA,EACnB,KAAA,GAOG,IAAA;AAAA,EAEX,WAAA,CACE,YACA,OAAA,EACA;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAS,KAAA,IAAS,IAAA;AAC/B,IAAA,IAAA,CAAK,KAAA,GACH,OAAO,UAAA,KAAe,UAAA,GAAa,aAAa,MAAM,UAAA;AAAA,EAC1D;AAAA,EAEQ,SAAA,GAAiC;AACvC,IAAA,IAAI;AACF,MAAA,OAAO,KAAK,KAAA,EAAM;AAAA,IACpB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,iBAAiB,EAAA,EAAkD;AACzE,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,KAAK,EAAA,CAAG,OAAA;AAAA,QACN,CAAA,gFAAA;AAAA,OACF;AAAA,MACA,MAAA,EAAQ,EAAA,CAAG,OAAA,CAAQ,CAAA,+CAAA,CAAiD,CAAA;AAAA,MACpE,KAAK,EAAA,CAAG,OAAA;AAAA,QACN,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAAA;AAAA,OAMF;AAAA,MACA,OAAO,EAAA,CAAG,OAAA;AAAA,QACR,CAAA,+DAAA;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAA,CAAG,OAAA,CAAQ,CAAA,yCAAA,CAA2C,CAAA;AAAA,MAC7D,OAAO,EAAA,CAAG,OAAA;AAAA,QACR,CAAA;AAAA;AAAA;AAAA;AAAA,UAAA;AAAA;AAKF,KACF;AACA,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,MAAM,IAAI,QAAA,EAAgD;AACxD,IAAA,MAAM,QAAQ,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,QAAA,EAAU,KAAK,KAAK,CAAA;AAC9C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAC7C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,GAAG,GAAA,CAAI,QAAA,EAAU,OAAA,CAAQ,KAAA,EAAO,QAAQ,MAAM,CAAA;AACnD,MAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,IACjB;AAGA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,GAAA,CACJ,QAAA,EACA,KAAA,EACA,MAAA,EACe;AACf,IAAA,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,QAAA,EAAU,KAAA,EAAO,MAAM,CAAA;AACnC,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,QAAA,EAAU;AAAA,MAC7B,KAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AACD,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,QAAQ,CAAA;AACnC,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEA,MAAM,MAAM,QAAA,EAAiC;AAC3C,IAAA,IAAA,CAAK,EAAA,CAAG,MAAM,QAAQ,CAAA;AACtB,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA,EAAG;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,QAAQ,CAAA;AAChC,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,IAAA,IAAQ,qBAAA,EAAuB;AACrD,MAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,GAA8B;AAClC,IAAA,MAAM,KAAK,YAAA,EAAa;AAAA,EAC1B;AAAA,EAEA,MAAM,cAAc,UAAA,EAAmC;AACrD,IAAA,IAAA,CAAK,EAAA,CAAG,cAAc,UAAU,CAAA;AAAA,EAElC;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,IAAA,cAAA,CAAe,MAAM;AACnB,MAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AACxB,MAAA,KAAK,KAAK,YAAA,EAAa;AAAA,IACzB,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,YAAA,GAA8B;AAC1C,IAAA,IAAI,KAAK,WAAA,CAAY,IAAA,KAAS,KAAK,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA,EAAG;AACjE,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,MAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAO,CAAC,GAAG,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA;AAC3C,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,CAAK,cAAc,CAAA;AACvC,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,EAAE,CAAA;AAGtC,MAAA,IAAI;AACF,QAAA,EAAA,CAAG,KAAK,iBAAiB,CAAA;AAAA,MAC3B,CAAA,CAAA,MAAQ;AACN,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,IAAA,EAAM;AAC/B,UAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,QACjC;AACA,QAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,UAAA,IAAA,CAAK,cAAA,CAAe,IAAI,GAAG,CAAA;AAAA,QAC7B;AACA,QAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,QAAA;AAAA,MACF;AACA,MAAA,IAAI;AACF,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,IAAA,EAAM;AAC/B,UAAA,KAAA,CAAM,GAAA,CAAI,GAAA;AAAA,YACR,GAAA;AAAA,YACA,KAAA,CAAM,KAAA;AAAA,YACN,iBAAA,CAAkB,MAAM,MAAM,CAAA;AAAA,YAC9B,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,EAAE,WAAA,EAAY;AAAA,YACtC;AAAA,WACF;AAAA,QACF;AACA,QAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,UAAA,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,GAAG,CAAA;AAAA,QAC1B;AACA,QAAA,EAAA,CAAG,KAAK,QAAQ,CAAA;AAAA,MAClB,CAAA,CAAA,MAAQ;AACN,QAAA,IAAI;AACF,UAAA,EAAA,CAAG,KAAK,UAAU,CAAA;AAAA,QACpB,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,MACf;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,IACf;AAAA,EACF;AACF,CAAA;AAGO,IAAM,4BAAN,MAA+D;AAAA,EACnD,EAAA;AAAA,EACA,KAAA;AAAA,EAEjB,YAAY,OAAA,EAA0D;AACpE,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAS,KAAA,IAAS,IAAA;AAC/B,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,OAAA,CAAQ,OAAA,EAAS,cAAc,cAAc,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,IAAI,QAAA,EAAgD;AACxD,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,QAAA,EAAU,KAAK,KAAK,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,GAAA,CACJ,QAAA,EACA,KAAA,EACA,MAAA,EACe;AACf,IAAA,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,QAAA,EAAU,KAAA,EAAO,MAAM,CAAA;AAAA,EACrC;AAAA,EAEA,MAAM,MAAM,QAAA,EAAiC;AAC3C,IAAA,IAAA,CAAK,EAAA,CAAG,MAAM,QAAQ,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,cAAc,UAAA,EAAmC;AACrD,IAAA,IAAA,CAAK,EAAA,CAAG,cAAc,UAAU,CAAA;AAAA,EAClC;AACF,CAAA;AAcO,IAAM,8BAAN,MAAiE;AAAA,EACrD,KAAA;AAAA,EACA,SAAA;AAAA,EACA,EAAA,GAAK,IAAI,OAAA,EAAQ;AAAA,EACjB,cAAA,uBAAqB,GAAA,EAAY;AAAA,EAC1C,YAAA,GAA8B,QAAQ,OAAA,EAAQ;AAAA,EAC9C,cAAA;AAAA,EAER,WAAA,CACE,WACA,OAAA,EACA;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAS,KAAA,IAAS,IAAA;AAG/B,IAAA,IAAA,CAAK,cAAA,GAAiB,SAAS,OAAA,KAAY,IAAA;AAAA,EAC7C;AAAA,EAEA,MAAM,IAAI,QAAA,EAAgD;AACxD,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,QAAA,EAAU,KAAK,KAAK,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,GAAA,CACJ,QAAA,EACA,KAAA,EACA,MAAA,EACe;AACf,IAAA,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,QAAA,EAAU,KAAA,EAAO,MAAM,CAAA;AACnC,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,MAAA,KAAW;AACpC,MAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,GAAG,EAAE,WAAA,EAAY;AACtC,MAAA,MAAM,MAAA,CAAO,KAAA;AAAA,QACX,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAAA,CAAA;AAAA,QAMA,CAAC,QAAA,EAAU,KAAA,EAAO,kBAAkB,MAAM,CAAA,EAAG,KAAK,GAAG;AAAA,OACvD;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAAA,EAAiC;AAC3C,IAAA,IAAA,CAAK,EAAA,CAAG,MAAM,QAAQ,CAAA;AACtB,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,QAAQ,CAAA;AAChC,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,IAAA,IAAQ,qBAAA,EAAuB;AACrD,MAAA,KAAK,KAAK,YAAA,EAAa;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,GAA8B;AAClC,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA,EAAG;AAC1D,MAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAA,CAAK,cAAc,CAAA;AACpC,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,MAAA,KAAW;AACpC,MAAA,MAAM,MAAA,CAAO,KAAA;AAAA,QACX,CAAA;AAAA;AAAA,0CAAA,CAAA;AAAA,QAGA,CAAC,KAAK,IAAI;AAAA,OACZ;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,UAAA,EAAmC;AACrD,IAAA,IAAA,CAAK,EAAA,CAAG,cAAc,UAAU,CAAA;AAAA,EAClC;AAAA,EAEQ,eACN,IAAA,EACM;AACN,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,YAAA,CACtB,IAAA,CAAK,YAAY;AAChB,MAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAK,MAAM,CAAA;AAAA,IACnB,CAAC,CAAA,CACA,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,EAC1B;AACF,CAAA;;;AC/YO,IAAM,8BAAN,MAAyD;AAAA,EACrD,KAAA;AAAA,EACQ,OAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EAEjB,YAAY,MAAA,EAAmB;AAC7B,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,WAAA,GAAc,OAAO,WAAA,IAAe,GAAA;AACzC,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,SAAA,IAAa,IAAA;AACrC,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,SAAA,IAAa,GAAA;AAAA,EACvC;AAAA,EAEA,MAAM,SAAS,QAAA,EAA0C;AACvD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,OAAA,GAAU,CAAC,GAAG,OAAA,EAAS,OAAA;AAChD,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,QAAQ,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,iBAAiB,2CAA2C,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,QAAA,CAAS;AAAA,QAClB;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS;AAAA;AACX,OACD,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,gBAAA,EAAkB;AACrC,QAAA,MAAM,IAAI,gBAAA;AAAA,UACR,CAAA,iCAAA,EAAoC,MAAM,OAAO,CAAA,CAAA;AAAA,UACjD,EAAE,OAAO,KAAA;AAAM,SACjB;AAAA,MACF;AACA,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,CAAA,iCAAA,EAAoC,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QACxD,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,QAAQ,QAAA,EAAsD;AAC1E,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,mBAAmB,CAAA;AACrD,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,KAAK,SAAS,CAAA;AAEjE,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAC3B,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,SACtC;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,QAAA;AAAA,UACA,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,YAAY,IAAA,CAAK;AAAA,SAClB,CAAA;AAAA,QACD,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,GAAQ,MAAM,IAAI,IAAA,EAAK;AAAA,MACzB,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAI,gBAAA;AAAA,UACR,CAAA,8CAAA,EAAiD,IAAI,MAAM,CAAA,CAAA;AAAA,SAC7D;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,MAAM,UAAU,IAAA,CAAK,KAAA,EAAO,OAAA,IAAW,CAAA,KAAA,EAAQ,IAAI,MAAM,CAAA,CAAA;AACzD,QAAA,MAAM,IAAI,gBAAA,CAAiB,CAAA,oBAAA,EAAuB,OAAO,CAAA,CAAE,CAAA;AAAA,MAC7D;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,gBAAA,EAAkB;AACrC,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,QAAA,MAAM,IAAI,gBAAA;AAAA,UACR,CAAA,4BAAA,EAA+B,KAAK,SAAS,CAAA,EAAA;AAAA,SAC/C;AAAA,MACF;AACA,MAAA,MAAM,IAAI,gBAAA,CAAiB,CAAA,oBAAA,EAAuB,KAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,QACxE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ;AAAA,OACzC,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF;AAAA,EAEQ,SAAS,KAAA,EAAwB;AACvC,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAO,KAAA,CAAM,OAAA;AAAA,IACf;AACA,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF,CAAA;AAEO,SAAS,kBAAkB,MAAA,EAAgC;AAChE,EAAA,OAAO,IAAI,4BAA4B,MAAM,CAAA;AAC/C;AAEA,SAAS,WACP,QAAA,EACA;AACA,EAAA,OAAO,CAAC,WACN,iBAAA,CAAkB;AAAA,IAChB,OAAA,EAAS,MAAA,CAAO,OAAA,IAAW,QAAA,CAAS,OAAA;AAAA,IACpC,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,WAAW,MAAA,CAAO;AAAA,GACnB,CAAA;AACL;AAEO,IAAM,mBAAA,GAAsB,CAAC,MAAA,KAClC,iBAAA,CAAkB,MAAM;AAEnB,IAAM,YAAY,UAAA,CAAW;AAAA,EAClC,OAAA,EAAS;AACX,CAAC;AAEM,IAAM,YAAY,UAAA,CAAW;AAAA,EAClC,OAAA,EAAS;AACX,CAAC;AAEM,IAAM,gBAAgB,UAAA,CAAW;AAAA,EACtC,OAAA,EAAS;AACX,CAAC;AC7ID,SAAS,MAAM,QAAA,EAA2B;AACxC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAOD,sBAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,CAAE,WAAA,EAAY;AAC5C;AAEO,IAAM,aAAN,MAAmD;AAAA,EAC/C,IAAA,GAAO,MAAA;AAAA,EACP,aAAa,CAAC,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAa,QAAQ,OAAO,CAAA;AAAA,EAElE,MAAM,MAAM,KAAA,EAIgB;AAC1B,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA;AAChC,IAAA,IAAI,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AACvC,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,KAAK,SAAA,CAAU,IAAA,CAAK,MAAM,IAAI,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,MACjD,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,QAAA,EAAU,MAAM,QAAA,IAAY,YAAA;AAAA,MAC5B,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACF,CAAA;AAEO,IAAM,cAAN,MAAoD;AAAA,EAChD,IAAA,GAAO,OAAA;AAAA,EACP,UAAA,GAAa,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,EAEvD,MAAM,MAAM,KAAA,EAIgB;AAC1B,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA;AAChC,IAAA,MAAM,IAAA,GACJ,MAAM,QAAA,KACL,GAAA,KAAQ,SACL,WAAA,GACA,GAAA,KAAQ,UACN,YAAA,GACA,YAAA,CAAA;AACR,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,EAAA;AAAA,MACN,QAAA,EAAU,IAAA;AAAA,MACV,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,OAAA,EAAS,IAAA;AAAA,MACT,aAAa,KAAA,CAAM;AAAA,KACrB;AAAA,EACF;AACF,CAAA;AAEO,IAAM,YAAN,MAAkD;AAAA,EAC9C,IAAA,GAAO,KAAA;AAAA,EACP,UAAA,GAAa,CAAC,MAAM,CAAA;AAAA,EAE7B,MAAM,MAAM,KAAA,EAIgB;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,WAAW,CAAA;AAGpC,MAAA,MAAM,aAAc,GAAA,CAGf,QAAA;AACL,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,IAAI,OAAO,eAAe,UAAA,EAAY;AACpC,QAAA,MAAM,SAAS,IAAI,UAAA,CAAW,EAAE,IAAA,EAAM,KAAA,CAAM,QAAQ,CAAA;AACpD,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,EAAQ;AACpC,UAAA,IAAA,GAAO,OAAO,IAAA,IAAQ,EAAA;AAAA,QACxB,CAAA,SAAE;AACA,UAAA,MAAM,OAAO,OAAA,IAAU;AAAA,QACzB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,QAAA,GACH,IAAiE,OAAA,IACjE,GAAA;AACH,QAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,UAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,QACtD;AACA,QAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA;AAC1C,QAAA,IAAA,GAAO,OAAO,IAAA,IAAQ,EAAA;AAAA,MACxB;AACA,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,QAAA,EAAU,iBAAA;AAAA,QACV,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,OAAA,EAAS;AAAA,OACX;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IACE,iBAAiB,kBAAA,EACjB;AACA,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACpE,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,sBAAsB,MAAM,CAAA,4DAAA,CAAA;AAAA,QAC5B,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAEO,IAAM,aAAN,MAAmD;AAAA,EAC/C,IAAA,GAAO,MAAA;AAAA,EACP,UAAA,GAAa,CAAC,OAAO,CAAA;AAAA,EAE9B,MAAM,MAAM,KAAA,EAIgB;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,SAAmB,CAAA;AAC5C,MAAA,MAAM,cAAA,GACH,GAAA,CACE,cAAA,IACF,GAAA,CACE,OAAA,EAAS,cAAA;AACd,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,MACtD;AACA,MAAA,MAAM,SAAS,MAAM,cAAA,CAAe,EAAE,MAAA,EAAQ,KAAA,CAAM,QAAQ,CAAA;AAC5D,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAO,KAAA,IAAS,EAAA;AAAA,QACtB,QAAA,EACE,yEAAA;AAAA,QACF,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,OAAA,EAAS;AAAA,OACX;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAEA,IAAM,eAAA,GAA4C;AAAA,EAChD,IAAI,UAAA,EAAW;AAAA,EACf,IAAI,WAAA,EAAY;AAAA,EAChB,IAAI,SAAA,EAAU;AAAA,EACd,IAAI,UAAA;AACN,CAAA;AAEO,SAAS,aAAA,CACd,QAAA,EACA,QAAA,EACA,OAAA,GAAoC,eAAA,EACZ;AACxB,EAAA,MAAM,GAAA,GAAM,MAAM,QAAQ,CAAA;AAC1B,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,MAAM,KAAA,GAAQ,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,QAAA,CAAS,GAAG,CAAC,CAAA;AAC5D,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,IAAI,QAAA,EAAU,UAAA,CAAW,QAAQ,CAAA,EAAG;AAClC,IAAA,OAAO,OAAA,CAAQ,KAAK,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,OAAO,CAAA,IAAK,IAAI,WAAA,EAAY;AAAA,EACpE;AACA,EAAA,IAAI,aAAa,iBAAA,EAAmB;AAClC,IAAA,OAAO,OAAA,CAAQ,KAAK,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,KAAK,CAAA,IAAK,IAAI,SAAA,EAAU;AAAA,EAChE;AACA,EAAA,OAAO,OAAA,CAAQ,KAAK,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,MAAM,CAAA,IAAK,IAAI,UAAA,EAAW;AAClE;AAEA,eAAsB,iBAAiB,MAAA,EAMiD;AACtF,EAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAW;AAC7B,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MACvC,QAAA,EAAU,OAAO,QAAA,IAAY,cAAA;AAAA,MAC7B,QAAA,EAAU,OAAO,QAAA,IAAY,YAAA;AAAA,MAC7B,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,EACF;AACA,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,OAAO;AAAA,MACL,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,UAAU,MAAA,CAAO;AAAA,KACnB;AAAA,EACF;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAM,MAAA,GAAS,MAAME,mBAAA,CAAG,QAAA,CAAS,OAAO,IAAI,CAAA;AAC5C,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,QAAA,EAAUF,sBAAA,CAAK,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA;AAAA,MACnC,UAAU,MAAA,CAAO;AAAA,KACnB;AAAA,EACF;AACA,EAAA,MAAM,IAAI,mBAAmB,kDAAkD,CAAA;AACjF;;;AC9IO,SAAS,oBACd,KAAA,EAC4B;AAC5B,EAAA,OAAO,OAAQ,MAA4B,KAAA,KAAU,UAAA;AACvD;AAEO,SAAS,cAAc,KAAA,EAAuC;AACnE,EAAA,OAAO,OAAQ,MAAsB,QAAA,KAAa,UAAA;AACpD;AAEO,SAAS,kBACd,KAAA,EAC0B;AAC1B,EAAA,OAAO,OAAQ,MAA0B,IAAA,KAAS,UAAA;AACpD;AAEO,SAAS,oBACd,KAAA,EAC4B;AAC5B,EAAA,OAAO,OAAQ,MAA4B,IAAA,KAAS,UAAA;AACtD;AAEO,SAAS,gBAAgB,KAAA,EAA2C;AACzE,EAAA,OACE,OAAQ,KAAA,CAAwB,IAAA,KAAS,UAAA,IACzC,OAAQ,MAAwB,YAAA,KAAiB,UAAA,IACjD,OAAQ,KAAA,CAAwB,UAAA,KAAe,UAAA;AAEnD;AAGO,SAAS,mBACd,MAAA,EACQ;AACR,EAAA,MAAM,GAAA,GACH,SAAS,MAAA,IAAU,MAAA,CAAO,OAC1B,kBAAA,IAAsB,MAAA,IAAU,OAAO,gBAAA,IACxC,EAAA;AACF,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,EAAA;AACzC;;;AChIA,SAAS,QAAA,CAAS,UAA0B,KAAA,EAAwB;AAClE,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,IAAI,OAAA,GAAmB,QAAA;AACvB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,OAAA,KAAY,QAAQ,OAAO,OAAA,KAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC7E,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAA,GAAW,QAAoC,IAAI,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,OAAA,CAAQ,OAAgB,EAAA,EAAiC;AAChE,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO,UAAU,EAAA,CAAG,EAAA;AAAA,EACtB;AACA,EAAA,IAAI,cAAc,EAAA,EAAI;AACpB,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,KAAA,CAAM,QAAA,CAAS,EAAA,CAAG,QAAQ,CAAA;AAAA,IACnC;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,MAAA,CAAO,IAAI,CAAA,CAAE,QAAA,CAAS,EAAA,CAAG,QAAQ,CAAC,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO,KAAA,IAAS,IAAA,IAAS,KAAA,GAA4B,EAAA,CAAG,EAAA;AAAA,EAC1D;AACA,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO,KAAA,IAAS,IAAA,IAAS,KAAA,IAA6B,EAAA,CAAG,GAAA;AAAA,EAC3D;AACA,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO,KAAA,IAAS,IAAA,IAAS,KAAA,GAA4B,EAAA,CAAG,EAAA;AAAA,EAC1D;AACA,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO,KAAA,IAAS,IAAA,IAAS,KAAA,IAA6B,EAAA,CAAG,GAAA;AAAA,EAC3D;AACA,EAAA,IAAI,aAAa,EAAA,EAAI;AACnB,IAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,EAAA,CAAG,OAAA;AACpB,IAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,KAAA,IAAS,EAAA,IAAM,KAAA,IAAS,EAAA;AAAA,EAClD;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,eAAA,CACd,UACA,MAAA,EACS;AACT,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,OAAO,MAAA,CAAO,IAAI,KAAA,CAAM,CAAC,MAAM,eAAA,CAAgB,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,EAC7D;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,OAAO,MAAA,CAAO,GAAG,IAAA,CAAK,CAAC,MAAM,eAAA,CAAgB,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,EAC3D;AACA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,OAAO,CAAC,eAAA,CAAgB,QAAA,EAAU,MAAA,CAAO,GAAG,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,QAAQ,QAAA,CAAS,QAAA,EAAU,OAAO,KAAK,CAAA,EAAG,OAAO,EAAE,CAAA;AAC5D;;;ACrDA,IAAM,QAAA,GACJ,qDAAA;AAEF,SAAS,SAAS,KAAA,EAA8B;AAC9C,EAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAK,KAAK,CAAA,CAAA;AACnB;AAEA,SAAS,iBAAA,CACP,OACA,EAAA,EAC4B;AAC5B,EAAA,MAAMA,KAAAA,GAAO,SAAS,KAAK,CAAA;AAC3B,EAAA,IAAI,CAACA,KAAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,gCAAgCA,KAAI,CAAA,EAAA,CAAA;AAEpD,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,MAAM,QAAQ,EAAA,CAAG,EAAA;AACjB,IAAA,IACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,SAAA,EACjB;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,EAAE,YAAY,CAAA,EAAG,OAAO,QAAQ,MAAA,EAAQ,CAAC,KAAK,CAAA,EAAE;AAAA,EACzD;AACA,EAAA,IAAI,cAAc,EAAA,EAAI;AACpB,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,QAAQ,OAAO,CAAA,8BAAA,CAAA;AAAA,MAC3B,MAAA,EAAQ,CAAC,EAAA,CAAG,QAAQ;AAAA,KACtB;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,YAAY,CAAA,EAAG,OAAO,QAAQ,MAAA,EAAQ,CAAC,EAAA,CAAG,EAAE,CAAA,EAAE;AAAA,EACzD;AACA,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO,EAAE,YAAY,CAAA,EAAG,OAAO,SAAS,MAAA,EAAQ,CAAC,EAAA,CAAG,GAAG,CAAA,EAAE;AAAA,EAC3D;AACA,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,YAAY,CAAA,EAAG,OAAO,QAAQ,MAAA,EAAQ,CAAC,EAAA,CAAG,EAAE,CAAA,EAAE;AAAA,EACzD;AACA,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO,EAAE,YAAY,CAAA,EAAG,OAAO,SAAS,MAAA,EAAQ,CAAC,EAAA,CAAG,GAAG,CAAA,EAAE;AAAA,EAC3D;AACA,EAAA,IAAI,aAAa,EAAA,EAAI;AACnB,IAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,EAAA,CAAG,OAAA;AACpB,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,CAAA,EAAG,OAAO,CAAA,UAAA,EAAa,OAAO,CAAA,KAAA,CAAA;AAAA,MAC1C,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,2BACd,MAAA,EAC4B;AAC5B,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,IAAI,MAAA,CAAO,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG;AAC3B,MAAA,OAAO,EAAE,UAAA,EAAY,GAAA,EAAK,MAAA,EAAQ,EAAC,EAAE;AAAA,IACvC;AACA,IAAA,MAAM,QAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,GAAA,EAAK;AAC9B,MAAA,MAAM,QAAA,GAAW,2BAA2B,KAAK,CAAA;AACjD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,IACrB;AACA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,CAAE,UAAU,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AAAA,MAC9D,QAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,MAAM;AAAA,KACvC;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,IAAI,MAAA,CAAO,EAAA,CAAG,MAAA,KAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,EAAE,UAAA,EAAY,GAAA,EAAK,MAAA,EAAQ,EAAC,EAAE;AAAA,IACvC;AACA,IAAA,MAAM,QAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,EAAA,EAAI;AAC7B,MAAA,MAAM,QAAA,GAAW,2BAA2B,KAAK,CAAA;AACjD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,IACrB;AACA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,CAAE,UAAU,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAAA,MAC7D,QAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,MAAM;AAAA,KACvC;AAAA,EACF;AACA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,MAAM,KAAA,GAAQ,0BAAA,CAA2B,MAAA,CAAO,GAAG,CAAA;AACnD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,CAAA,KAAA,EAAQ,KAAA,CAAM,UAAU,CAAA,CAAA,CAAA;AAAA,MACpC,QAAQ,KAAA,CAAM;AAAA,KAChB;AAAA,EACF;AACA,EAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,EAAE,CAAA;AAClD;;;ACtHO,IAAM,cAAA,GAAiB,CAAA;AAEvB,IAAM,SAAA,GAAY;AAAA,EACvB,aAAA,EAAe,gBAAA;AAAA,EACf,mBAAA,EAAqB,sBAAA;AAAA,EACrB,aAAA,EAAe;AACjB,CAAA;AAKO,IAAM,iBAAA,GAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAO1B,IAAM,qBAAA,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAgB9B,IAAM,oBAAA,GAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAY7B,IAAM,4BAAA,GAA+B;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAYrC,IAAM,gBAAA,GAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAUzB,IAAM,4BAAA,GAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAcrC,IAAM,wBAAA,GAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWjC,IAAM,wBAAA,GAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAcjC,IAAM,oBAAA,GAAuB;AAAA,EAClC,CAAA;AAAA,kCAAA,CAAA;AAAA,EAEA,CAAA;AAAA,kCAAA,CAAA;AAAA,EAEA,CAAA;AAAA,gCAAA,CAAA;AAAA,EAEA,CAAA;AAAA,4CAAA,CAAA;AAAA,EAEA,CAAA;AAAA,0CAAA;AAEF,CAAA;AAEO,IAAM,cAAA,GAAiB;AAAA,EAC5B,CAAA,mFAAA,CAAA;AAAA,EACA,CAAA,yFAAA,CAAA;AAAA;AAAA,EAEA,CAAA;AAAA,8DAAA,CAAA;AAAA;AAAA,EAGA,CAAA;AAAA,qEAAA,CAAA;AAAA,EAEA,CAAA,8EAAA,CAAA;AAAA,EACA,CAAA;AAAA;AAAA,qDAAA,CAAA;AAAA,EAGA,CAAA;AAAA,sCAAA;AAEF,CAAA;AAGO,IAAM,yBAAA,GAA4B;AAAA,EACvC,CAAA,6CAAA;AACF,CAAA;AAMO,SAAS,oBAAoB,UAAA,EAA4B;AAC9D,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,UAAU,CAAA,IAAK,cAAc,CAAA,EAAG;AACpD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,UAAU,CAAA,CAAE,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO;AAAA;AAAA;AAAA,kBAAA,EAGW,UAAU,CAAA;AAAA;AAAA,CAAA;AAG9B;;;AC5JO,IAAM,GAAA,GAAM;AAAA,EACjB,OAAA,EAAS,CAAA,4CAAA,CAAA;AAAA,EACT,OAAA,EAAS;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAKT,YAAA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EASd,aAAA,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAOf,gBAAA,EAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAOlB,yBAAA,EAA2B;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAO3B,gBAAA,EAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAOlB,uBAAA,EAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAQzB,eAAA,EAAiB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIjB,eAAA,EAAiB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIjB,aAAA,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAOf,mBAAA,EAAqB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIrB,mBAAA,EAAqB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIrB,kBAAA,EAAoB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIpB,aAAA,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAQf,gBAAA,EAAkB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIlB,mBAAA,EAAqB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIrB,wBAAA,EAA0B;AAAA;AAAA,EAAA,CAAA;AAAA,EAI1B,aAAA,EAAe;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAKf,UAAA,EAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAOZ,aAAA,EAAe;AAAA;AAAA,EAAA,CAAA;AAAA,EAIf,mBAAA,EAAqB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIrB,qBAAA,EAAuB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIvB,WAAA,EAAa;AAAA;AAAA,EAAA,CAAA;AAAA;AAAA,EAKb,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EASX,gBAAA,EAAkB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIlB,qBAAA,EAAuB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIvB,iBAAA,EAAmB;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAKnB,mBAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EASrB,SAAA,EAAW;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAKX,SAAA,EAAW;AAAA;AAAA,EAAA,CAAA;AAAA,EAIX,cAAA,EAAgB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIhB,mBAAA,EAAqB;AAAA;AAAA,EAAA,CAAA;AAAA,EAIrB,qBAAA,EAAuB;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAMvB,0BAAA,EAA4B;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAM5B,yBAAA,EAA2B;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAM3B,8BAAA,EAAgC;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAMhC,wBAAA,EAA0B;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAM1B,4BAAA,EAA8B;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA;AAAA,EAO9B,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASZ,CAAA;;;AC7NO,SAAS,cAAA,CAAe,GAAiB,CAAA,EAAyB;AACvE,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,MAAA,EAAQ,EAAE,MAAM,CAAA;AACvC,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA;AACnB,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA;AACnB,IAAA,GAAA,IAAO,EAAA,GAAK,EAAA;AACZ,IAAA,KAAA,IAAS,EAAA,GAAK,EAAA;AACd,IAAA,KAAA,IAAS,EAAA,GAAK,EAAA;AAAA,EAChB;AACA,EAAA,IAAI,KAAA,KAAU,CAAA,IAAK,KAAA,KAAU,CAAA,EAAG;AAC9B,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA,CAAK,KAAK,KAAK,CAAA,CAAA;AAC5D,EAAA,OAAO,CAAA,GAAI,UAAA;AACb;AAMO,SAAS,kBAAkB,IAAA,EAAyC;AACzE,EAAA,MAAM,UAAA,GAAc,KAAoB,UAAA,IAAc,CAAA;AACtD,EAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,EAAA,IAAI,UAAA,GAAa,YAAA,CAAa,iBAAA,KAAsB,CAAA,EAAG;AACrD,IAAA,OAAO,IAAI,YAAA;AAAA,MACR,IAAA,CAAoB,MAAA;AAAA,MACrB,UAAA;AAAA,MACA,aAAa,YAAA,CAAa;AAAA,KAC5B;AAAA,EACF;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,UAAU,CAAA;AACtC,EAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AACb,EAAA,OAAO,IAAI,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACrC;;;AC7BO,IAAM,sBAAN,MAA0B;AAAA,EACd,IAAA;AAAA,EACT,SAAmB,EAAC;AAAA,EACpB,IAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACC,WAAA,uBAAkB,GAAA,EAAoB;AAAA,EAEvD,WAAA,CAAY,UAAA,EAAoB,eAAA,GAAkB,GAAA,EAAK;AACrD,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,YAAA,CAAa,eAAA,GAAkB,UAAU,CAAA;AAAA,EAC3D;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AACrB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AAAA,EACf;AAAA,EAEA,MAAA,CAAO,OAAe,SAAA,EAA+B;AACnD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA;AAC3C,IAAA,MAAM,IAAA,GACJ,QAAA,KAAa,MAAA,GACT,QAAA,GAAA,CACC,MAAM;AACL,MAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA;AAClC,MAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AACf,MAAA,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA;AACjB,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA;AAC7B,MAAA,IAAA,CAAK,KAAA,IAAS,CAAA;AACd,MAAA,OAAO,CAAA;AAAA,IACT,CAAA,GAAG;AAET,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,OAAO,IAAA,GAAO,IAAA;AACpB,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,GAAS,IAAA,GAAO,UAAU,MAAA,GAAS,IAAA;AACzD,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,MAAA,MAAM,CAAA,GAAI,UAAU,CAAC,CAAA;AACrB,MAAA,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA;AACjB,MAAA,IAAA,IAAQ,CAAA,GAAI,CAAA;AAAA,IACd;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,GAAA,EAAK,CAAA,GAAI,IAAA,EAAM,KAAK,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA,GAAI,CAAA;AAAA,IACnB;AACA,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA,MAAM,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAC9B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,QAAA,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA,IAAM,GAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,KAAA,EAAqB;AAC1B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA;AACvC,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,KAAK,KAAA,GAAQ,CAAA;AAC1B,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAClC,MAAA,IAAA,CAAK,IAAA,CAAK,UAAA;AAAA,QACR,OAAO,IAAA,CAAK,IAAA;AAAA,QACZ,OAAO,IAAA,CAAK,IAAA;AAAA,QAAA,CACX,IAAA,GAAO,KAAK,IAAA,CAAK;AAAA,OACpB;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,GAAI,SAAA;AACpB,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,SAAA,EAAW,IAAI,CAAA;AAAA,IACtC;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,OAAO,KAAK,CAAA;AAC7B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,EACf;AAAA;AAAA,EAGA,MAAA,CAAO,iBAA+B,IAAA,EAA6B;AACjE,IAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AACf,IAAA,IAAI,CAAA,KAAM,CAAA,IAAK,IAAA,IAAQ,CAAA,EAAG;AACxB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,MAAM,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,CAAA;AAG5B,IAAA,MAAM,QAAA,GAAW,IAAI,YAAA,CAAa,CAAC,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,CAAC,CAAA;AAChC,IAAA,IAAI,QAAA,GAAW,CAAA;AAEf,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,EAAG;AAC7B,MAAA,MAAM,OAAO,CAAA,GAAI,IAAA;AACjB,MAAA,IAAI,GAAA,GAAM,CAAA;AAEV,MAAA,IAAI,CAAA,GAAI,CAAA;AACR,MAAA,OAAO,CAAA,GAAI,CAAA,GAAI,IAAA,EAAM,CAAA,IAAK,CAAA,EAAG;AAC3B,QAAA,GAAA,IACE,eAAA,CAAgB,CAAC,CAAA,GAAK,IAAA,CAAK,OAAO,CAAC,CAAA,GACnC,eAAA,CAAgB,CAAA,GAAI,CAAC,CAAA,GAAK,IAAA,CAAK,IAAA,GAAO,IAAI,CAAC,CAAA,GAC3C,eAAA,CAAgB,CAAA,GAAI,CAAC,CAAA,GAAK,IAAA,CAAK,IAAA,GAAO,IAAI,CAAC,CAAA,GAC3C,eAAA,CAAgB,CAAA,GAAI,CAAC,CAAA,GAAK,IAAA,CAAK,IAAA,GAAO,IAAI,CAAC,CAAA;AAAA,MAC/C;AACA,MAAA,OAAO,CAAA,GAAI,IAAA,EAAM,CAAA,IAAK,CAAA,EAAG;AACvB,QAAA,GAAA,IAAO,eAAA,CAAgB,CAAC,CAAA,GAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,MAC5C;AACA,MAAA,MAAM,WAAW,CAAA,GAAI,GAAA;AAErB,MAAA,IAAI,WAAW,CAAA,EAAG;AAChB,QAAA,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA;AACrB,QAAA,OAAA,CAAQ,QAAQ,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAC5B,QAAA,QAAA,IAAY,CAAA;AACZ,QAAA,IAAI,aAAa,CAAA,EAAG;AAClB,UAAA,YAAA,CAAa,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA,QACnC;AAAA,MACF,CAAA,MAAA,IAAW,QAAA,GAAW,QAAA,CAAS,CAAC,CAAA,EAAI;AAClC,QAAA,QAAA,CAAS,CAAC,CAAA,GAAI,QAAA;AACd,QAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AACrB,QAAA,QAAA,CAAS,QAAA,EAAU,OAAA,EAAS,CAAA,EAAG,CAAC,CAAA;AAAA,MAClC;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAsB,IAAI,KAAA,CAAM,QAAQ,CAAA;AAC9C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,KAAK,CAAA,EAAG;AACpC,MAAA,IAAA,CAAK,CAAC,CAAA,GAAI,EAAE,WAAA,EAAa,OAAA,CAAQ,CAAC,CAAA,EAAI,QAAA,EAAU,QAAA,CAAS,CAAC,CAAA,EAAG;AAAA,IAC/D;AACA,IAAA,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAC3C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,eAAe,MAAA,EAAsB;AAC3C,IAAA,IAAI,MAAA,GAAS,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,MAAA,EAAQ;AAC1C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,IAAA;AAClC,IAAA,IAAI,GAAA,GAAM,GAAG,GAAA,GAAM,CAAA;AACnB,IAAA,OAAO,GAAA,GAAM,QAAQ,GAAA,IAAO,CAAA;AAC5B,IAAA,MAAM,IAAA,GAAO,IAAI,YAAA,CAAa,GAAA,GAAM,KAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,CAAK,QAAA,CAAS,GAAG,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AACtD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AACF,CAAA;AAGO,SAAS,kBAAA,CACd,SAAA,EACA,IAAA,GAAO,SAAA,CAAU,MAAA,EACH;AACd,EAAA,OAAO,aAAA,CAAc,WAAW,IAAI,CAAA;AACtC;AAEA,SAAS,aAAA,CAAc,WAAyB,IAAA,EAA4B;AAC1E,EAAA,MAAM,GAAA,GAAM,IAAI,YAAA,CAAa,IAAI,CAAA;AACjC,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,GAAS,IAAA,GAAO,UAAU,MAAA,GAAS,IAAA;AACzD,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,IAAA,MAAM,CAAA,GAAI,UAAU,CAAC,CAAA;AACrB,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AACT,IAAA,IAAA,IAAQ,CAAA,GAAI,CAAA;AAAA,EACd;AACA,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAC9B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,IAAA,GAAA,CAAI,CAAC,CAAA,IAAM,GAAA;AAAA,EACb;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,YAAA,CACP,IAAA,EACA,IAAA,EACA,CAAA,EACM;AACN,EAAA,KAAA,IAAS,KAAK,CAAA,IAAK,CAAA,IAAK,GAAG,CAAA,IAAK,CAAA,EAAG,KAAK,CAAA,EAAG;AACzC,IAAA,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AAAA,EAC3B;AACF;AAEA,SAAS,QAAA,CACP,IAAA,EACA,IAAA,EACA,CAAA,EACA,CAAA,EACM;AACN,EAAA,WAAS;AACP,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,MAAM,IAAA,GAAA,CAAQ,KAAK,CAAA,IAAK,CAAA;AACxB,IAAA,MAAM,QAAQ,IAAA,GAAO,CAAA;AACrB,IAAA,IAAI,IAAA,GAAO,KAAK,IAAA,CAAK,IAAI,IAAK,IAAA,CAAK,OAAO,GAAI,OAAA,GAAU,IAAA;AACxD,IAAA,IAAI,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAK,IAAK,IAAA,CAAK,OAAO,GAAI,OAAA,GAAU,KAAA;AAC1D,IAAA,IAAI,YAAY,CAAA,EAAG;AACnB,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,OAAO,CAAA;AACtB,IAAA,IAAA,CAAK,OAAO,CAAA,GAAI,EAAA;AAChB,IAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,CAAK,OAAO,CAAA;AACtB,IAAA,IAAA,CAAK,OAAO,CAAA,GAAI,EAAA;AAChB,IAAA,CAAA,GAAI,OAAA;AAAA,EACN;AACF;;;AC/LO,IAAM,mBAAA,GAAiD;AAAA,EAC5D,UAAA,EAAY,CAAA;AAAA,EACZ,aAAA,EAAe,EAAA;AAAA,EACf,YAAA,EAAc,GAAA;AAAA,EACd,aAAA,EAAe;AACjB,CAAA;AAEO,SAAS,yBACd,KAAA,EAC2B;AAC3B,EAAA,MAAM,QAAA,GAAsC;AAAA,IAC1C,UAAA,EAAY,KAAA,EAAO,UAAA,IAAc,mBAAA,CAAoB,UAAA;AAAA,IACrD,aAAA,EAAe,KAAA,EAAO,aAAA,IAAiB,mBAAA,CAAoB,aAAA;AAAA,IAC3D,YAAA,EAAc,KAAA,EAAO,YAAA,IAAgB,mBAAA,CAAoB,YAAA;AAAA,IACzD,aAAA,EAAe,KAAA,EAAO,aAAA,IAAiB,mBAAA,CAAoB;AAAA,GAC7D;AAEA,EAAA,iBAAA,CAAkB,QAAA,CAAS,YAAY,wBAAwB,CAAA;AAC/D,EAAA,oBAAA,CAAqB,QAAA,CAAS,eAAe,2BAA2B,CAAA;AACxE,EAAA,oBAAA,CAAqB,QAAA,CAAS,cAAc,0BAA0B,CAAA;AACtE,EAAA,iBAAA,CAAkB,QAAA,CAAS,eAAe,2BAA2B,CAAA;AAErE,EAAA,IAAI,QAAA,CAAS,YAAA,GAAe,QAAA,CAAS,aAAA,EAAe;AAClD,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,OAAe,KAAA,EAAqB;AAC7D,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,EAAG,KAAK,CAAA,+BAAA,CAAiC,CAAA;AAAA,EACxE;AACF;AAEA,SAAS,oBAAA,CAAqB,OAAe,KAAA,EAAqB;AAChE,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AACxC,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,EAAG,KAAK,CAAA,8BAAA,CAAgC,CAAA;AAAA,EACvE;AACF;;;ACzDO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,EAAA,OACE,KAAA,CAAM,QAAA,CAAS,oBAAoB,CAAA,IACnC,KAAA,CAAM,SAAS,aAAa,CAAA,IAC5B,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA;AAEzB;AAEA,SAAS,MAAM,EAAA,EAA2B;AACxC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAEA,SAAS,YAAA,CACP,SACA,MAAA,EACQ;AACR,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AAAA,IACf,MAAA,CAAO,YAAA;AAAA,IACP,MAAA,CAAO,gBAAgB,CAAA,IAAK;AAAA,GAC9B;AACA,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,EAAO,GAAI,MAAA,CAAO,aAAA;AACtC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,YAAA,EAAc,MAAM,MAAM,CAAA;AACnD;AA2DA,eAAsB,wBAAA,CACpB,EAAA,EACA,MAAA,EACA,EAAA,EACA,OAAA,EACY;AACZ,EAAA,IAAI,SAAA;AACJ,EAAA,KAAA,IAAS,UAAU,CAAA,EAAG,OAAA,IAAW,MAAA,CAAO,UAAA,EAAY,WAAW,CAAA,EAAG;AAChE,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,KAAK,iBAAiB,CAAA;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,EAAA,EAAG;AACxB,QAAA,EAAA,CAAG,KAAK,QAAQ,CAAA;AAChB,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,IAAI;AACF,UAAA,EAAA,CAAG,KAAK,UAAU,CAAA;AAAA,QACpB,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,GAAY,KAAA;AACZ,MAAA,MAAM,MAAA,GAAS,kBAAkB,KAAK,CAAA;AACtC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,IAAI,OAAA,IAAW,OAAO,UAAA,EAAY;AAChC,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,EAAS,MAAM,CAAA;AAC1C,MAAA,OAAA,GAAU,OAAA,GAAU,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACnC,MAAA,MAAM,MAAM,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,MAAM,IAAI,kBAAA;AAAA,IACR,CAAA,8CAAA,EAAiD,OAAO,UAAU,CAAA,QAAA,CAAA;AAAA,IAClE;AAAA,MACE,KAAA,EAAO,SAAA,YAAqB,KAAA,GAAQ,SAAA,GAAY,MAAA;AAAA,MAChD,MAAA,EAAQ,+BAAA;AAAA,MACR,UAAA,EACE;AAAA;AACJ,GACF;AACF;AC3HO,SAAS,uBAAuB,IAAA,EAAsB;AAC3D,EAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA,CAAE,MAAK,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACzD;AAEO,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,MAAM,UAAA,GAAa,uBAAuB,IAAI,CAAA;AAC9C,EAAA,OAAOC,mBAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,YAAY,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AACrE;AAoBO,IAAM,qBAAA,GAAoD;AAAA,EAC/D,OAAA,EAAS,KAAA;AAAA,EACT,QAAA,EAAU,eAAA;AAAA,EACV,aAAA,EAAe,IAAA;AAAA,EACf,kBAAA,EAAoB;AACtB,CAAA;AAEO,SAAS,0BACd,KAAA,EAC4B;AAC5B,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,EAAE,GAAG,qBAAA,EAAsB;AAAA,EACpC;AACA,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,EAAE,GAAG,qBAAA,EAAuB,OAAA,EAAS,KAAA,EAAM;AAAA,EACpD;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAM,OAAA,IAAW,IAAA;AAAA,IAC1B,QAAA,EAAU,KAAA,CAAM,QAAA,IAAY,qBAAA,CAAsB,QAAA;AAAA,IAClD,aAAA,EAAe,KAAA,CAAM,aAAA,IAAiB,qBAAA,CAAsB,aAAA;AAAA,IAC5D,kBAAA,EACE,KAAA,CAAM,kBAAA,IAAsB,qBAAA,CAAsB;AAAA,GACtD;AACF;AAEO,SAAS,mBAAA,CACd,UACA,QAAA,EACyB;AACzB,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,GAAG,QAAA,EAAS;AACpC;;;ACPA,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,kBAAA,GAAqB,GAAA;AAK3B,IAAM,kBAAA,GAAqB,EAAA;AAE3B,IAAM,iBAAA,GAAoB,IAAA;AAE1B,IAAM,yBAAA,GAA4B,EAAA;AAClC,IAAM,mBAAA,GAAsB,EAAA;AA2CrB,IAAM,qBAAA,GAAN,MAAM,sBAAA,CAAiD;AAAA,EACnD,IAAA,GAAO,QAAA;AAAA,EAEC,gBAAA;AAAA,EACA,WAAA;AAAA,EACT,EAAA,GAA0B,IAAA;AAAA,EAC1B,UAAA,GAAwC,IAAA;AAAA,EACxC,gBAAA,GAAkC,IAAA;AAAA,EAClC,aAAA,GAAsC,IAAA;AAAA,EACtC,eAAA,GAAkB,KAAA;AAAA;AAAA,EAElB,WAAA,GAA0C,IAAA;AAAA,EAC1C,gBAAA,GAAmB,KAAA;AAAA;AAAA,EAEnB,YAAA,GAA8B,IAAA;AAAA,EAC9B,QAAA,GAA2C,IAAA;AAAA;AAAA,EAE3C,iBAAA,uBAAwB,GAAA,EAA2B;AAAA;AAAA,EAEnD,cAAA,uBAAqB,GAAA,EAA2B;AAAA;AAAA,EAEhD,qBAAA,uBAA4B,GAAA,EAA2B;AAAA;AAAA,EAEvD,sBAAA,uBAA6B,GAAA,EAA2B;AAAA;AAAA,EAExD,kBAAA,uBAAyB,GAAA,EAA2B;AAAA;AAAA,EAEpD,sBAAA,uBAA6B,GAAA,EAA2B;AAAA;AAAA,EAExD,cAIH,EAAC;AAAA,EACE,oBAAA,GAAuB,KAAA;AAAA,EAE/B,YAAY,OAAA,EAAgC;AAC1C,IAAA,IAAA,CAAK,mBAAmB,OAAA,CAAQ,gBAAA;AAChC,IAAA,IAAA,CAAK,WAAA,GAAc,wBAAA,CAAyB,OAAA,CAAQ,WAAW,CAAA;AAAA,EACjE;AAAA;AAAA,EAGA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA;AAAA,EAGA,WAAA,GAAmC;AACjC,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEA,eAAe,EAAA,EAA0C;AACvD,IAAA,IAAA,CAAK,QAAA,GAAW,EAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,gBAAgB,CAAA;AACrD,MAAA,IAAA,CAAK,YAAA,GAAe,MAAA;AACpB,MAAA,IAAI,WAAW,UAAA,EAAY;AACzB,QAAAC,oBAAAA,CAAG,UAAUF,sBAAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,MACxD;AAEA,MAAA,MAAM,KAAK,IAAIG,qBAAA,CAAa,QAAQ,EAAE,cAAA,EAAgB,MAAM,CAAA;AAC5D,MAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AAKV,MAAA,EAAA,CAAG,KAAK,4BAA4B,CAAA;AACpC,MAAA,EAAA,CAAG,IAAA,CAAK;AAAA;AAAA;AAAA,8BAAA,EAGkB,IAAA,CAAK,YAAY,aAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAMvD,CAAA;AAED,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,gBAAA,CAAiB,EAAE,CAAA;AAC/C,MAAA,IAAA,CAAK,cAAc,EAAE,CAAA;AACrB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,iBAAA,CAAkB,EAAE,CAAA;AAI3C,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,SAAA,CAAU,aAAa,CAAA;AAC3D,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,SAAA,CAAU,mBAAmB,CAAA;AAE9D,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,IAAA,CAAK,aAAA,GAAgB,OAAA;AAAA,MACvB,CAAA,MAAA,IAAW,KAAK,eAAA,EAAiB;AAC/B,QAAA,IAAA,CAAK,aAAA,GAAgB,YAAA;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AAAA,MACvB;AAEA,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,QAAA,IAAA,CAAK,oBAAoB,IAAI,CAAA;AAC7B,QAAA,IAAA,CAAK,yBAAA,EAA0B;AAE/B,QAAA,IAAI,IAAA,CAAK,kBAAkB,MAAA,EAAQ;AACjC,UAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,IAAI,KAAA,EAAM;AAAA,MACjB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,CAAA,gCAAA,EAAmC,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QACvD,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,GAAuB;AAE3B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,GAAA;AAC9B,IAAA,OAAO,KAAK,WAAA,CAAY,MAAA,GAAS,KAAK,IAAA,CAAK,GAAA,KAAQ,QAAA,EAAU;AAC3D,MAAA,MAAM,KAAK,gBAAA,EAAiB;AAAA,IAC9B;AACA,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AAEF,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,EAAA,CAAG,KAAK,kBAAkB,CAAA;AAAA,MACjC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AAAA,IAChB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,aAAA,CAAc,CAAA,0BAAA,EAA6B,KAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,QAC3E,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ;AAAA,OACzC,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA,IAAA,CAAK,kBAAkB,KAAA,EAAM;AAC7B,MAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,MAAA,IAAA,CAAK,sBAAsB,KAAA,EAAM;AACjC,MAAA,IAAA,CAAK,uBAAuB,KAAA,EAAM;AAClC,MAAA,IAAA,CAAK,mBAAmB,KAAA,EAAM;AAC9B,MAAA,IAAA,CAAK,uBAAuB,KAAA,EAAM;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,UAAA,EAAmC;AAC1D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,sBAAA,EAAuB;AACnD,IAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,UAAA,EAAY;AAChD,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,CAAA,0DAAA,EAA6D,QAAQ,CAAA,6CAAA,EAAgD,UAAU,CAAA,WAAA;AAAA,OACjI;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,eAAA,GAAkB,YAAA,GAAe,MAAA;AAAA,IAC7D;AAGA,IAAA,IAAI,IAAA,CAAK,eAAA,IAAmB,IAAA,CAAK,aAAA,KAAkB,MAAA,EAAQ;AACzD,MAAA,IAAA,CAAK,aAAA,GAAgB,YAAA;AAAA,IACvB;AAEA,IAAA,IAAA,CAAK,oBAAoB,UAAU,CAAA;AACnC,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,aAAA,EAAe,KAAK,aAAa,CAAA;AAE9D,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,MAAM,IAAA,CAAK,uBAAuB,UAAU,CAAA;AAAA,IAC9C;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,UAAA;AACxB,IAAA,IAAA,CAAK,yBAAA,EAA0B;AAC/B,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAAA,EAEA,MAAM,sBAAA,GAAiD;AACrD,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,SAAA,CAAU,mBAAmB,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,uBAAuB,UAAA,EAAmC;AAC9D,IAAA,MAAM,KAAK,OAAA,CAAQ,SAAA,CAAU,mBAAA,EAAqB,MAAA,CAAO,UAAU,CAAC,CAAA;AACpE,IAAA,IAAA,CAAK,gBAAA,GAAmB,UAAA;AAAA,EAC1B;AAAA,EAEA,MAAM,aAAa,KAAA,EAA8C;AAC/D,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAGxB,IAAA,OAAO,IAAI,OAAA,CAAmB,CAAC,OAAA,EAAS,MAAA,KAAW;AACjD,MAAA,IAAA,CAAK,YAAY,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,QAAQ,CAAA;AAChD,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,IAAU,yBAAA,EAA2B;AACxD,QAAA,IAAA,CAAK,oBAAA,GAAuB,KAAA;AAC5B,QAAA,KAAK,KAAK,gBAAA,EAAiB;AAC3B,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,IAC3B,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,IAAI,KAAK,oBAAA,EAAsB;AAC7B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA;AAE5B,IAAA,YAAA,CAAa,MAAM;AACjB,MAAA,IAAA,CAAK,oBAAA,GAAuB,KAAA;AAC5B,MAAA,KAAK,KAAK,gBAAA,EAAiB;AAAA,IAC7B,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,gBAAA,GAAkC;AAC9C,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AACjC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,GAAG,mBAAmB,CAAA;AAC5D,IAAA,IAAI;AACF,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAM,MAAM,MAAM,IAAA,CAAK,sBAAsB,KAAA,CAAM,CAAC,EAAG,KAAK,CAAA;AAC5D,QAAA,KAAA,CAAM,CAAC,CAAA,CAAG,OAAA,CAAQ,GAAG,CAAA;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,mBAAA,CAAoB,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AACrE,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxC,UAAA,KAAA,CAAM,CAAC,CAAA,CAAG,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAE,CAAA;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,MACnB;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAC/B,MAAA,KAAK,KAAK,gBAAA,EAAiB;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA,EAGA,MAAc,sBAAsB,KAAA,EAA8C;AAChF,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,WAAA,GACJ,MAAM,WAAA,KAAgB,MAAA,GAClB,MAAM,WAAA,GACN,iBAAA,CAAkB,MAAM,WAAW,CAAA;AAEzC,IAAA,OAAO,IAAA,CAAK,gBAAgB,MAAM;AAChC,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,CAAa,GAAA;AAAA,QAC7B,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,KAAA,CAAM,WAAA;AAAA,QACN,iBAAA,CAAkB,MAAM,QAAQ,CAAA;AAAA,QAChC,WAAA;AAAA,QACA,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AACA,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,KAAA,KAAU,MAAA,EAAW;AACnC,QAAA,MAAM,IAAI,cAAc,oCAAoC,CAAA;AAAA,MAC9D;AAEA,MAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAA,EAAO,KAAA,CAAM,SAAS,CAAA;AAE/C,MAAA,IAAA,CAAK,YAAA;AAAA,QACH,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AAEA,MAAA,KAAA,CAAM,aAAA,CAAc,GAAA;AAAA,QAClB,OAAO,UAAA,EAAW;AAAA,QAClB,KAAA,CAAM,EAAA;AAAA,QACN,SAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA,CAAM;AAAA,OACR;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,oBAAoB,MAAA,EAAmD;AAC3E,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAExB,IAAA,OAAO,IAAA,CAAK,gBAAgB,MAAM;AAChC,MAAA,MAAM,OAAoB,EAAC;AAC3B,MAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,UAAU,kBAAA,EAAoB;AACzE,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,SAAS,kBAAkB,CAAA;AAC9D,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,KAAK,CAAA;AAC7C,QAAA,IAAA,CAAK,IAAA,CAAK,GAAG,QAAQ,CAAA;AAAA,MACvB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,KAAA,EAAqD;AACtE,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,OAAO,IAAA,CAAK,gBAAgB,MAAM;AAChC,MAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,GAAA;AAAA,QACnC,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AACA,MAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,KAAA,KAAU,MAAA,EAAW;AAC7C,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,QAAA,CAAS,YAAA;AAClD,MAAA,MAAM,YAAA,GACJ,MAAM,QAAA,KAAa,MAAA,GACf,kBAAkB,KAAA,CAAM,QAAQ,IAChC,QAAA,CAAS,aAAA;AACf,MAAA,MAAM,WAAA,GACJ,KAAA,CAAM,WAAA,KAAgB,MAAA,GAClB,MAAM,WAAA,GACN,KAAA,CAAM,WAAA,KAAgB,MAAA,GACpB,iBAAA,CAAkB,KAAA,CAAM,WAAW,CAAA,GAClC,SAAS,YAAA,IAAgB,IAAA;AAElC,MAAA,KAAA,CAAM,mBAAA,CAAoB,GAAA;AAAA,QACxB,MAAM,WAAA,IAAe,IAAA;AAAA,QACrB,KAAA,CAAM,QAAA,KAAa,MAAA,GAAY,YAAA,GAAe,IAAA;AAAA,QAC9C,WAAA;AAAA,QACA,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AAEA,MAAA,IAAI,MAAM,SAAA,EAAW;AACnB,QAAA,IAAA,CAAK,eAAA,CAAgB,SAAS,KAAK,CAAA;AACnC,QAAA,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,KAAA,EAAO,KAAA,CAAM,SAAS,CAAA;AAAA,MACtD;AAEA,MAAA,IAAI,KAAA,CAAM,gBAAgB,MAAA,EAAW;AACnC,QAAA,IAAA,CAAK,SAAA;AAAA,UACH,KAAA,CAAM,EAAA;AAAA,UACN,KAAA,CAAM,YAAA;AAAA,UACN,QAAA,CAAS,KAAA;AAAA,UACT;AAAA,SACF;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,aAAA,CAAc,GAAA;AAAA,QAClB,OAAO,UAAA,EAAW;AAAA,QAClB,KAAA,CAAM,EAAA;AAAA,QACN,SAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA,CAAM;AAAA,OACR;AAEA,MAAA,OAAO,MAAM,aAAA,CAAc,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,MAAM,YAAY,CAAA;AAAA,IAC7D,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,uBAAA,CACJ,YAAA,EACA,KAAA,EACA,WAAA,EAC2B;AAC3B,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,GAAA,GAAM,MAAM,uBAAA,CAAwB,GAAA;AAAA,MACxC,YAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,GAAA,IAAO,IAAA;AAAA,EAChB;AAAA,EAEA,MAAM,gBAAA,CACJ,MAAA,EACA,KAAA,EACsB;AACtB,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,YAAA,CAAa,QAAQ,KAAK,CAAA;AAClD,IAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,MAAO,CAAC,QAClB,eAAA,CAAgB,mBAAA,CAAoB,IAAI,aAAa,CAAA,EAAG,OAAO,QAAS;AAAA,KAC1E;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aAAA,CACJ,KAAA,EACA,YAAA,EACA,IAAA,EACqD;AACrD,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,iBAAiB,KAAK,CAAA;AACxC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,MAAM,OAAO,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,SAAA,EAAW,cAAc,IAAI,CAAA;AAI9D,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,QACxB,UAAU,GAAA,CAAI,SAAA;AAAA;AAAA,QAEd,OAAO,CAAA,IAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAI,CAAA;AAAA,OACnC,CAAE,CAAA;AAAA,IACJ,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,CACJ,EAAA,EACA,YAAA,EAC2B;AAC3B,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,IAAI,YAAY,CAAA;AAGpD,IAAA,OAAO,GAAA,IAAO,IAAA;AAAA,EAChB;AAAA,EAEA,MAAM,gBAAA,CACJ,KAAA,EACA,YAAA,EAC2B;AAC3B,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,OAAO,YAAY,CAAA;AAG1D,IAAA,OAAO,GAAA,IAAO,IAAA;AAAA,EAChB;AAAA,EAEA,MAAM,mBAAA,CACJ,MAAA,EACA,YAAA,EACiC;AACjC,IAAA,MAAM,GAAA,uBAAU,GAAA,EAAuB;AACvC,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,MAAM,SAAA,GAAY,GAAA;AAClB,IAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,UAAU,SAAA,EAAW;AAChE,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,SAAS,SAAS,CAAA;AACrD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,mBAAA,CAAoB,KAAA,CAAM,MAAM,CAAA;AAClD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,GAAG,KAAK,CAAA;AAC5C,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,IAAI,GAAA,CAAI,UAAU,MAAA,EAAW;AAC3B,UAAA,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,GAAG,CAAA;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CACJ,MAAA,EACA,KAAA,EACsB;AACtB,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,QAAA,EAAU;AACnB,QAAA,OAAO,IAAA,CAAK,wBAAA,CAAyB,MAAA,EAAQ,KAAK,CAAA;AAAA,MACpD;AACA,MAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,KAAK,CAAA;AAAA,IAC/C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,aAAA,CAAc,CAAA,yBAAA,EAA4B,KAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,QAC1E,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ;AAAA,OACzC,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,CACJ,SAAA,EACA,IAAA,EAC4B;AAC5B,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAExB,IAAA,IAAI,IAAA,CAAK,kBAAkB,YAAA,EAAc;AACvC,MAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,IAAI,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,IAAA,CAAK,sBAAA,CAAuB,SAAA,EAAW,IAAI,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,yBAAA,CACJ,SAAA,EACA,IAAA,EACA,cACA,OAAA,EACsD;AACtD,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,MAAM,QAAA,GAAW,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,GAAO,EAAA,EAAI,GAAG,CAAA,EAAG,iBAAiB,CAAA;AACrE,IAAA,IAAI,MAAmD,EAAC;AAExD,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,aAAA,CAAc,WAAW,MAAM,CAAA;AACvD,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,mBAAA;AAAA,QACrB,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAAA,QAC7B;AAAA,OACF;AACA,MAAA,GAAA,GAAM,EAAC;AACP,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,WAAW,CAAA;AACnC,QAAA,IAAI,CAAC,GAAA,EAAK;AACV,QAAA,IAAI,OAAA,EAAS,KAAA,IAAS,GAAA,CAAI,KAAA,KAAU,QAAQ,KAAA,EAAO;AACnD,QAAA,IAAI,CAAC,OAAA,EAAS,eAAA,IAAmB,GAAA,CAAI,aAAa,CAAA,EAAG;AACrD,QAAA,GAAA,CAAI,KAAK,EAAE,GAAA,EAAK,QAAA,EAAU,GAAA,CAAI,UAAU,CAAA;AACxC,QAAA,IAAI,GAAA,CAAI,UAAU,IAAA,EAAM;AACtB,UAAA,OAAO,GAAA;AAAA,QACT;AAAA,MACF;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,UAAU,QAAA,EAAU;AACtB,QAAA;AAAA,MACF;AACA,MAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,QAAQ,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAA,CACJ,GAAA,EACA,YAAA,EACA,kBACA,UAAA,EACmB;AACnB,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,WAAqB,EAAC;AAE5B,IAAA,OAAO,IAAA,CAAK,gBAAgB,MAAM;AAChC,MAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,IAAI,YAAY,CAAA;AAGzD,QAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,GAAA;AAAA,UACjC,gBAAA;AAAA,UACA,UAAA;AAAA,UACA,EAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,GAAI,CAAA,EAAG;AAC9B,UAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAEhB,UAAA,IAAI,QAAA,EAAU,UAAU,MAAA,EAAW;AACjC,YAAA,IAAA,CAAK,eAAA,CAAgB,SAAS,KAAK,CAAA;AAAA,UACrC;AACA,UAAA,IAAA,CAAK,UAAU,EAAE,CAAA;AACjB,UAAA,KAAA,CAAM,aAAA,CAAc,GAAA;AAAA,YAClB,OAAO,UAAA,EAAW;AAAA,YAClB,EAAA;AAAA,YACA,UAAA;AAAA,YACA,gBAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,KAAA,CAAM,aAAA,CAAc,GAAA;AAAA,YAClB,OAAO,UAAA,EAAW;AAAA,YAClB,gBAAA;AAAA,YACA,YAAA;AAAA,YACA,EAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,QAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,gBAAA,CAAiB,EAAA,EAAY,YAAA,EAAwC;AACzE,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AAErC,IAAA,OAAO,IAAA,CAAK,gBAAgB,MAAM;AAChC,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,IAAI,YAAY,CAAA;AAGpD,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,KAAA,KAAU,MAAA,EAAW;AACnC,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AAC9B,MAAA,IAAA,CAAK,UAAU,EAAE,CAAA;AACjB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,IAAI,YAAY,CAAA;AAC1D,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,GAAI,CAAA;AAAA,IAClC,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,uBAAuB,MAAA,EAA2C;AACtE,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,cAAc,iDAAiD,CAAA;AAAA,IAC3E;AAEA,IAAA,OAAO,IAAA,CAAK,gBAAgB,MAAM;AAChC,MAAA,IAAA,CAAK,wBAAA,CAAyB,MAAA,CAAO,YAAA,EAAc,KAAK,CAAA;AACxD,MAAA,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,YAAA,EAAc,KAAK,CAAA;AACjD,MAAA,MAAM,MAAA,GAAS,MAAM,wBAAA,CAAyB,GAAA;AAAA,QAC5C,MAAA,CAAO,YAAA;AAAA,QACP;AAAA,OACF;AACA,MAAA,OAAO,MAAA,CAAO,OAAO,OAAO,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,kBAAkB,YAAA,EAAuC;AAC7D,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AAErC,IAAA,OAAO,IAAA,CAAK,gBAAgB,MAAM;AAChC,MAAA,IAAA,CAAK,yBAAyB,YAAY,CAAA;AAC1C,MAAA,IAAA,CAAK,kBAAkB,YAAY,CAAA;AACnC,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,mBAAA,CAAoB,GAAA,CAAI,YAAY,CAAA;AACzD,MAAA,OAAO,MAAA,CAAO,OAAO,OAAO,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,QAAA,EAAyC;AACxD,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,OAAO,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,mBAAmB,KAAA,EAAkC;AACzD,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,KAAA,CAAM,aAAA,CAAc,GAAA;AAAA,MAClB,KAAA,CAAM,EAAA;AAAA,MACN,KAAA,CAAM,SAAA;AAAA,MACN,KAAA,CAAM,UAAA;AAAA,MACN,KAAA,CAAM,iBAAA;AAAA,MACN,KAAA,CAAM;AAAA,KACR;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,YAAA,EAMC;AACD,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,YAAY,CAAA;AAM3C,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,MAC/B,cAAA,EAAgB,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA;AAAA,MACjC,gBAAA,EAAkB,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA;AAAA,MACrC,WAAA,EAAa,MAAA,CAAO,GAAA,CAAI,MAAM;AAAA,KAChC;AAAA,EACF;AAAA,EAEA,MAAM,oBAAA,GAAwC;AAC5C,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,IAAI,IAAA,CAAK,qBAAqB,UAAA,EAAY;AACxC,MAAA,MAAM,YAAA,GAAe,EAAA,CAAG,OAAA,CAAQ,mBAAmB,EAAE,GAAA,EAAI;AAGzD,MAAA,MAAM,WAAA,GAAc,EAAA,CAAG,OAAA,CAAQ,kBAAkB,EAAE,GAAA,EAAI;AAGvD,MAAA,MAAM,SAAA,GAAY,MAAA;AAAA,QAChB,YAAA,EAAc,cAAc,MAAA,CAAO,MAAA,CAAO,gBAAgB,EAAE,CAAA,CAAE,CAAC,CAAA,IAAK;AAAA,OACtE;AACA,MAAA,MAAM,QAAA,GAAW,MAAA;AAAA,QACf,WAAA,EAAa,aAAa,MAAA,CAAO,MAAA,CAAO,eAAe,EAAE,CAAA,CAAE,CAAC,CAAA,IAAK;AAAA,OACnE;AACA,MAAA,OAAO,SAAA,GAAY,QAAA;AAAA,IACrB;AAEA,IAAA,MAAM,SAAS,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,WAAA,CAAY,KAAK,gBAAgB,CAAA;AAC1E,IAAA,IAAI;AACF,MAAA,IAAI,KAAA,GAAQD,oBAAAA,CAAG,QAAA,CAAS,MAAM,CAAA,CAAE,IAAA;AAChC,MAAA,KAAA,MAAW,MAAA,IAAU,CAAC,MAAA,EAAQ,MAAM,CAAA,EAAG;AACrC,QAAA,MAAM,IAAA,GAAO,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA;AAC/B,QAAA,IAAIA,oBAAAA,CAAG,UAAA,CAAW,IAAI,CAAA,EAAG;AACvB,UAAA,KAAA,IAASA,oBAAAA,CAAG,QAAA,CAAS,IAAI,CAAA,CAAE,IAAA;AAAA,QAC7B;AAAA,MACF;AACA,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,mCAAA,EAAsC,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QAC1D,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAmB,EAAA,EAAsC;AAC7D,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,OAAO,wBAAA;AAAA,MACL,EAAA;AAAA,MACA,IAAA,CAAK,WAAA;AAAA,MACL,EAAA;AAAA,MACA,CAAC,SAAS,OAAA,KAAY;AACpB,QAAA,IAAA,CAAK,QAAA;AAAA,UACH,6BAA6B,OAAO,CAAA,WAAA,EAAc,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,SACvE;AAAA,MACF;AAAA,KACF;AAAA,EACF;AAAA;AAAA,EAIQ,iBAAiB,EAAA,EAA2B;AAGlD,IAAA,MAAM,OAAO,CAAA,EAAG,OAAA,CAAQ,QAAQ,CAAA,CAAA,EAAI,QAAQ,IAAI,CAAA,CAAA;AAChD,IAAA,IAAI,sBAAA,CAAsB,oBAAA,CAAqB,GAAA,CAAI,IAAI,CAAA,EAAG;AACxD,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI;AACF,MAAUE,0BAAK,EAAE,CAAA;AACjB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,sBAAA,CAAsB,oBAAA,CAAqB,IAAI,IAAI,CAAA;AACnD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAe,oBAAA,mBAAuB,IAAI,GAAA,EAAY;AAAA,EAE9C,cAAc,EAAA,EAAwB;AAC5C,IAAA,EAAA,CAAG,KAAK,iBAAiB,CAAA;AACzB,IAAA,EAAA,CAAG,KAAK,qBAAqB,CAAA;AAC7B,IAAA,EAAA,CAAG,KAAK,oBAAoB,CAAA;AAC5B,IAAA,EAAA,CAAG,KAAK,4BAA4B,CAAA;AACpC,IAAA,EAAA,CAAG,KAAK,4BAA4B,CAAA;AAEpC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,oBAAA,CAAqB,EAAA,EAAI,UAAU,aAAa,CAAA;AACrE,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,EAAA,CAAG,KAAK,gBAAgB,CAAA;AACxB,MAAA,IAAA,CAAK,YAAY,EAAE,CAAA;AACnB,MAAA,IAAA,CAAK,YAAY,EAAE,CAAA;AACnB,MAAA,KAAA,MAAW,WAAW,yBAAA,EAA2B;AAC/C,QAAA,EAAA,CAAG,KAAK,OAAO,CAAA;AAAA,MACjB;AACA,MAAA,KAAA,MAAW,YAAY,cAAA,EAAgB;AACrC,QAAA,EAAA,CAAG,KAAK,QAAQ,CAAA;AAAA,MAClB;AACA,MAAA,EAAA,CAAG,OAAA,CAAQ,IAAI,OAAO,CAAA,CAAE,IAAI,SAAA,CAAU,aAAA,EAAe,MAAA,CAAO,cAAc,CAAC,CAAA;AAC3E,MAAA,IAAA,CAAK,qBAAqB,EAAE,CAAA;AAAA,IAC9B,CAAA,MAAA,IAAW,UAAU,cAAA,EAAgB;AACnC,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,CAAA,wBAAA,EAA2B,OAAO,CAAA,kCAAA,EAAqC,cAAc,CAAA,EAAA;AAAA,OACvF;AAAA,IACF,CAAA,MAAA,IAAW,UAAU,cAAA,EAAgB;AACnC,MAAA,IAAI,UAAU,CAAA,EAAG;AACf,QAAA,EAAA,CAAG,KAAK,gBAAgB,CAAA;AACxB,QAAA,IAAA,CAAK,YAAY,EAAE,CAAA;AACnB,QAAA,IAAA,CAAK,YAAY,EAAE,CAAA;AAAA,MACrB;AACA,MAAA,IAAI,UAAU,CAAA,EAAG;AACf,QAAA,IAAA,CAAK,YAAY,EAAE,CAAA;AAAA,MACrB;AACA,MAAA,KAAA,MAAW,YAAY,cAAA,EAAgB;AACrC,QAAA,EAAA,CAAG,KAAK,QAAQ,CAAA;AAAA,MAClB;AACA,MAAA,EAAA,CAAG,OAAA,CAAQ,IAAI,OAAO,CAAA,CAAE,IAAI,SAAA,CAAU,aAAA,EAAe,MAAA,CAAO,cAAc,CAAC,CAAA;AAC3E,MAAA,IAAA,CAAK,qBAAqB,EAAE,CAAA;AAAA,IAC9B;AAAA,EAEF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,YAAY,EAAA,EAAwB;AAC1C,IAAA,KAAA,MAAW,WAAW,yBAAA,EAA2B;AAC/C,MAAA,EAAA,CAAG,KAAK,OAAO,CAAA;AAAA,IACjB;AAGA,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,wBAAwB,CAAA,CAAE,GAAA,EAAI;AAAA,IAC/C,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,4BAA4B,CAAA,CAAE,GAAA,EAAI;AAAA,IACnD,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,YAAY,EAAA,EAAwB;AAE1C,IAAA,MAAM,IAAA,GAAO,EAAA,CACV,OAAA,CAAQ,CAAA,2BAAA,CAA6B,EACrC,GAAA,EAAI;AACP,IAAA,MAAM,UAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,cAAc,CAAA;AAC1D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,EAAA,CAAG,KAAK,CAAA,iDAAA,CAAmD,CAAA;AAAA,IAC7D;AAGA,IAAA,MAAM,SAAS,EAAA,CACZ,OAAA;AAAA,MACC,CAAA,6FAAA;AAAA,MAED,GAAA,EAAI;AAKP,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,aAAa,EAAA,CAAG,OAAA;AAAA,MACpB,CAAA,iDAAA;AAAA,KACF;AACA,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,MAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,GAAA,CAAI,YAAY,CAAA;AAG/C,MAAA,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,EAAE,CAAA;AAAA,IAC7B;AAGA,IAAA,MAAM,aAAa,EAAA,CAChB,OAAA;AAAA,MACC,CAAA;AAAA;AAAA,iCAAA;AAAA,MAID,GAAA,EAAI;AAOP,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,MAAM,YAAY,EAAA,CAAG,OAAA;AAAA,MACnB,CAAA,oDAAA;AAAA,KACF;AACA,IAAA,MAAM,UAAU,EAAA,CAAG,OAAA;AAAA,MACjB,CAAA,iDAAA;AAAA,KACF;AACA,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,GAAA,CAAI,YAAY,CAAA;AAC/C,MAAA,MAAM,GAAA,GAAM,GAAG,GAAA,CAAI,YAAY,KAAK,GAAA,CAAI,KAAK,KAAK,IAAI,CAAA,CAAA;AACtD,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,QAAA,SAAA,CAAU,GAAA,CAAI,IAAI,EAAE,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,EAAE,CAAA;AAAA,MAC1B;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,2BAA2B,EAAE,CAAA;AAClC,IAAA,EAAA,CAAG,KAAK,4BAA4B,CAAA;AAAA,EACtC;AAAA,EAEQ,2BAA2B,EAAA,EAAwB;AACzD,IAAA,MAAM,MAAM,EAAA,CACT,OAAA;AAAA,MACC,CAAA,0EAAA;AAAA,MAED,GAAA,EAAI;AACP,IAAA,IAAI,GAAA,EAAK,GAAA,EAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACnC,MAAA;AAAA,IACF;AACA,IAAA,EAAA,CAAG,IAAA,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAcP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,qBAAqB,EAAA,EAAwB;AACnD,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,EAAA,CACd,OAAA,CAAQ,CAAA,qDAAA,CAAuD,EAC/D,GAAA,EAAI;AACP,MAAA,MAAM,QAAA,GAAW,EAAA,CACd,OAAA,CAAQ,CAAA,sCAAA,CAAwC,EAChD,GAAA,EAAI;AACP,MAAA,IAAI,OAAO,QAAA,CAAS,CAAC,MAAM,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG;AAC7C,QAAA,IAAA,CAAK,YAAY,EAAE,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,YAAY,EAAA,EAAwB;AAC1C,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,KAAK,CAAA,wBAAA,CAA0B,CAAA;AAClC,MAAA,MAAM,OAAO,EAAA,CACV,OAAA;AAAA,QACC,CAAA,6EAAA;AAAA,QAED,GAAA,EAAI;AAMP,MAAA,MAAM,MAAA,GAAS,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AACvC,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,MAAA,CAAO,GAAA,CAAI,IAAI,YAAA,EAAc,GAAA,CAAI,IAAI,GAAA,CAAI,YAAA,EAAc,IAAI,KAAK,CAAA;AAAA,MAClE;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,kBAAkB,EAAA,EAAsC;AAC9D,IAAA,IAAI,SAAA,GAAkC,IAAA;AACtC,IAAA,IAAI,SAAA,GAAkC,IAAA;AACtC,IAAA,IAAI,cAAA,GAAuC,IAAA;AAC3C,IAAA,IAAI,mBAAA,GAA4C,IAAA;AAChD,IAAA,IAAI,SAAA,GAAkC,IAAA;AACtC,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AACpC,MAAA,SAAA,GAAY,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AACpC,MAAA,cAAA,GAAiB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AAC9C,MAAA,mBAAA,GAAsB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA;AACxD,MAAA,SAAA,GAAY,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AAAA,IACtC,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,IAAI,qBAAA,GAA8C,IAAA;AAClD,IAAA,IAAI,0BAAA,GAAmD,IAAA;AACvD,IAAA,IAAI,yBAAA,GAAkD,IAAA;AACtD,IAAA,IAAI,8BAAA,GAAuD,IAAA;AAC3D,IAAA,IAAI;AACF,MAAA,qBAAA,GAAwB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA;AAC5D,MAAA,0BAAA,GAA6B,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,0BAA0B,CAAA;AAAA,IACxE,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAI;AACF,MAAA,yBAAA,GAA4B,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,yBAAyB,CAAA;AACpE,MAAA,8BAAA,GAAiC,EAAA,CAAG,OAAA;AAAA,QAClC,GAAA,CAAI;AAAA,OACN;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAAA,MAC/B,OAAA,EAAS,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAAA,MAC/B,YAAA,EAAc,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AAAA,MACzC,mBAAA,EAAqB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA;AAAA,MACvD,aAAA,EAAe,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AAAA,MAC3C,gBAAA,EAAkB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AAAA,MACjD,uBAAA,EAAyB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,uBAAuB,CAAA;AAAA,MAC/D,eAAA,EAAiB,IAAA;AAAA,MACjB,eAAA,EAAiB,IAAA;AAAA,MACjB,aAAA,EAAe,IAAA;AAAA,MACf,mBAAA,EAAqB,IAAA;AAAA,MACrB,mBAAA,EAAqB,IAAA;AAAA,MACrB,kBAAA,EAAoB,IAAA;AAAA,MACpB,aAAA,EAAe,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AAAA,MAC3C,gBAAA,EAAkB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AAAA,MACjD,mBAAA,EAAqB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA;AAAA,MACvD,wBAAA,EAA0B,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,wBAAwB,CAAA;AAAA,MACjE,aAAA,EAAe,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AAAA,MAC3C,UAAA,EAAY,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AAAA,MACrC,QAAA,EAAU,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAAA,MACjC,gBAAA,EAAkB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AAAA,MACjD,qBAAA,EAAuB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA;AAAA,MAC3D,iBAAA,EAAmB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,iBAAiB,CAAA;AAAA,MACnD,iBAAiB,EAAA,CAAG,OAAA;AAAA,QAClB,CAAA,uFAAA;AAAA,OACF;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA,SAAA;AAAA,MACA,qBAAA;AAAA,MACA,0BAAA;AAAA,MACA,yBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,mBAAA,CACN,QACA,KAAA,EACa;AACb,IAAA,MAAM,OAAA,GAAoB,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAC7C,IAAA,MAAM,MAAA,GAAiC,CAAC,MAAA,CAAO,YAAY,CAAA;AAC3D,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,OAAA,CAAQ,KAAK,CAAA,SAAA,CAAW,CAAA;AACxB,MAAA,MAAA,CAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,IAC1B;AACA,IAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC3B,MAAA,OAAA,CAAQ,KAAK,CAAA,YAAA,CAAc,CAAA;AAAA,IAC7B;AACA,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,MAAA,CAAO,KAAA,GAAQ,MAAM,GAAG,CAAA,CAAA,EAAI,MAAA,CAAO,eAAA,GAAkB,MAAM,GAAG,CAAA,CAAA,EAAI,KAAA,KAAU,MAAA,GAAY,MAAM,GAAG,CAAA,CAAA;AAChH,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACtC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAI,GAAA,GAAM;AAAA;AAAA;AAAA;AAAA,cAAA,EAIA,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC;AAAA;AAAA,MAAA,CAAA;AAG/B,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,GAAA,IAAO,CAAA,QAAA,CAAA;AAAA,MACT;AACA,MAAA,IAAA,GAAO,IAAA,CAAK,SAAA,EAAU,CAAE,OAAA,CAAQ,GAAG,CAAA;AACnC,MAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AAAA,IACnC;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,EAAQ,KAAK,CAAA;AAAA,IAClC;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,MAAM,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,wBAAA,CACN,QACA,KAAA,EACa;AACb,IAAA,MAAM,OAAO,KAAA,IAAS,iBAAA;AACtB,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA,GACpB,0BAAA,CAA2B,MAAA,CAAO,QAAQ,CAAA,GAC1C,IAAA;AAEJ,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAMC,WAAoB,CAAC,CAAA,gBAAA,CAAA,EAAoB,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,CAAG,CAAA;AACzE,MAAA,MAAM,SAAoB,CAAC,MAAA,CAAO,YAAA,EAAc,GAAG,SAAS,MAAM,CAAA;AAClE,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAAA,QAAAA,CAAQ,KAAK,CAAA,SAAA,CAAW,CAAA;AACxB,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,MAC1B;AACA,MAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC3B,QAAAA,QAAAA,CAAQ,KAAK,CAAA,YAAA,CAAc,CAAA;AAAA,MAC7B;AACA,MAAA,MAAM,GAAA,GAAM;AAAA;AAAA;AAAA;AAAA,cAAA,EAIFA,QAAAA,CAAQ,IAAA,CAAK,OAAO,CAAC;AAAA;AAAA;AAAA,MAAA,CAAA;AAI/B,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAChB,MAAA,OAAO,IAAA,CAAK,WAAU,CACnB,OAAA,CAAQ,GAAG,CAAA,CACX,GAAA,CAAI,GAAI,MAAkB,CAAA;AAAA,IAC/B;AAGA,IAAA,MAAM,UAAuB,EAAC;AAC9B,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,OAAA,GAAoB,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAqC,CAAC,MAAA,CAAO,YAAY,CAAA;AAC/D,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,OAAA,CAAQ,KAAK,CAAA,SAAA,CAAW,CAAA;AACxB,MAAA,UAAA,CAAW,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,IAC9B;AACA,IAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC3B,MAAA,OAAA,CAAQ,KAAK,CAAA,YAAA,CAAc,CAAA;AAAA,IAC7B;AACA,IAAA,MAAM,OAAA,GAAU;AAAA;AAAA;AAAA;AAAA,YAAA,EAIN,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC;AAAA;AAAA;AAAA,IAAA,CAAA;AAI/B,IAAA,MAAM,QAAA,GAAW,EAAA,CAAG,OAAA,CAAQ,OAAO,CAAA;AACnC,IAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,IAAA,IAAQ,MAAA,GAAS,iBAAA,EAAmB;AAC1D,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,kBAAA,EAAoB,oBAAoB,MAAM,CAAA;AACzE,MAAA,MAAM,OAAO,QAAA,CAAS,GAAA;AAAA,QACpB,GAAG,UAAA;AAAA,QACH,SAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA;AAAA,MACF;AACA,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,IACE,eAAA;AAAA,UACE,mBAAA,CAAoB,IAAI,aAAa,CAAA;AAAA,UACrC,MAAA,CAAO;AAAA,SACT,EACA;AACA,UAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAChB,UAAA,IAAI,OAAA,CAAQ,UAAU,IAAA,EAAM;AAC1B,YAAA,OAAO,OAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAA,IAAU,IAAA,CAAK,MAAA;AACf,MAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,oBAAoB,KAAA,EAA8B;AACxD,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,KAAK,CAAA;AAC3C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAG,MAAM,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACtE,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,GAAA,CAAI,yBAAyB,GAAG,YAAY,CAAA,CAAA,CAAA;AAC3D,MAAA,IAAA,GAAO,IAAA,CAAK,SAAA,EAAU,CAAE,OAAA,CAAQ,GAAG,CAAA;AACnC,MAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,kBAAkB,MAAA,EAA0C;AAClE,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,IAAI,MAAA,CAAO,MAAA;AACjB,IAAA,IAAI,MAAM,CAAA,EAAG;AACX,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,MAAM,WAAA,GACJ,MAAM,WAAA,KAAgB,MAAA,GAClB,MAAM,WAAA,GACN,iBAAA,CAAkB,MAAM,WAAW,CAAA;AACzC,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,CAAa,GAAA;AAAA,QAC7B,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,KAAA,CAAM,WAAA;AAAA,QACN,iBAAA,CAAkB,MAAM,QAAQ,CAAA;AAAA,QAChC,WAAA;AAAA,QACA,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AACA,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,KAAA,KAAU,MAAA,EAAW;AACnC,QAAA,MAAM,IAAI,cAAc,0CAA0C,CAAA;AAAA,MACpE;AACA,MAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAA,EAAO,KAAA,CAAM,SAAS,CAAA;AAC/C,MAAA,IAAA,CAAK,YAAA;AAAA,QACH,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AACA,MAAA,KAAA,CAAM,aAAA,CAAc,GAAA;AAAA,QAClB,OAAO,UAAA,EAAW;AAAA,QAClB,KAAA,CAAM,EAAA;AAAA,QACN,SAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA,CAAM;AAAA,OACR;AACA,MAAA,OAAO,CAAC,GAAG,CAAA;AAAA,IACb;AAEA,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,CAAC,CAAA;AAC3C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,QAAA,GACJ,mCAAA;AACF,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAE,EAAG,MAAM,QAAQ,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAClE,MAAA,MAAM,GAAA,GAAM;AAAA;AAAA;AAAA;AAAA,iBAAA,EAIC,MAAM;AAAA;AAAA;AAAA,MAAA,CAAA;AAInB,MAAA,IAAA,GAAO,IAAA,CAAK,SAAA,EAAU,CAAE,OAAA,CAAQ,GAAG,CAAA;AACnC,MAAA,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,QAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,WAAA,GACJ,MAAM,WAAA,KAAgB,MAAA,GAClB,MAAM,WAAA,GACN,iBAAA,CAAkB,MAAM,WAAW,CAAA;AACzC,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,KAAA,CAAM,WAAA;AAAA,QACN,iBAAA,CAAkB,MAAM,QAAQ,CAAA;AAAA,QAChC,WAAA;AAAA,QACA,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAI,KAAiB,CAAA;AAC3C,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,cAAc,4CAA4C,CAAA;AAAA,IACtE;AACA,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,GAAA,CAAI,UAAU,MAAA,EAAW;AAC3B,QAAA,MAAM,IAAI,cAAc,gDAAgD,CAAA;AAAA,MAC1E;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,qBAAA,CAAsB,MAAM,MAAM,CAAA;AACvC,IAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAC1B,IAAA,IAAA,CAAK,mBAAmB,MAAM,CAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,qBAAA,CACN,MACA,MAAA,EACM;AACN,IAAA,MAAM,IAAI,IAAA,CAAK,MAAA;AACf,IAAA,IAAI,IAAA,CAAK,kBAAkB,YAAA,EAAc;AACvC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,EAAG;AAC7B,QAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAG,OAAQ,MAAA,CAAO,CAAC,EAAG,SAAS,CAAA;AAAA,MAC5D;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,sBAAA,CAAuB,GAAA,CAAI,CAAC,CAAA;AAC5C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAE,EAAG,MAAM,QAAQ,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAClE,MAAA,IAAA,GAAO,IAAA,CAAK,WAAU,CAAE,OAAA;AAAA,QACtB,uEAAuE,MAAM,CAAA;AAAA,OAC/E;AACA,MAAA,IAAA,CAAK,sBAAA,CAAuB,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AAAA,IACzC;AACA,IAAA,MAAM,QAAmB,EAAC;AAC1B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,EAAG;AAC7B,MAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAG,KAAA,EAAQ,kBAAkB,MAAA,CAAO,CAAC,CAAA,CAAG,SAAS,CAAC,CAAA;AAAA,IACrE;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,GAAI,KAAiB,CAAA;AAC9B,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,gBAAA,KAAqB,IAAA,EAAM;AACtD,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,EAAG;AAC7B,QAAA,IAAA,CAAK,WAAA,CAAY,OAAO,IAAA,CAAK,CAAC,EAAG,KAAA,EAAQ,MAAA,CAAO,CAAC,CAAA,CAAG,SAAS,CAAA;AAAA,MAC/D;AACA,MAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEQ,eAAe,MAAA,EAAmC;AACxD,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAI,MAAA,CAAO,MAAA;AACjB,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,CAAC,CAAA;AACxC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAE,EAAG,MAAM,cAAc,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACxE,MAAA,IAAA,GAAO,IAAA,CAAK,WAAU,CAAE,OAAA;AAAA,QACtB,kFAAkF,MAAM,CAAA;AAAA,OAC1F;AACA,MAAA,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,QAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,KAAA,CAAM,WAAA;AAAA,QACN,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,GAAA,CAAI,GAAI,KAAiB,CAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AAEN,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAA,CAAK,YAAA;AAAA,UACH,KAAA,CAAM,EAAA;AAAA,UACN,KAAA,CAAM,YAAA;AAAA,UACN,KAAA,CAAM,KAAA;AAAA,UACN,KAAA,CAAM;AAAA,SACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBAAmB,MAAA,EAAmC;AAC5D,IAAA,MAAM,IAAI,MAAA,CAAO,MAAA;AACjB,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,sBAAA,CAAuB,GAAA,CAAI,CAAC,CAAA;AAC5C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAE,EAAG,MAAM,iBAAiB,CAAA,CAAE,IAAA;AAAA,QAChE;AAAA,OACF;AACA,MAAA,IAAA,GAAO,IAAA,CAAK,WAAU,CAAE,OAAA;AAAA,QACtB,CAAA;AAAA,gBAAA,EACU,MAAM,CAAA;AAAA,OAClB;AACA,MAAA,IAAA,CAAK,sBAAA,CAAuB,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AAAA,IACzC;AACA,IAAA,MAAM,QAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,OAAO,UAAA,EAAW;AAAA,QAClB,KAAA,CAAM,EAAA;AAAA,QACN,SAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA,CAAM;AAAA,OACR;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,GAAI,KAAiB,CAAA;AAAA,EAChC;AAAA,EAEQ,wBAAA,CACN,cACA,KAAA,EACM;AACN,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,kBAAkB,YAAA,EAAc;AACvC,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,KAAA,CAAM,0BAAA,EAA4B,GAAA,CAAI,YAAA,EAAc,KAAK,CAAA;AAAA,QAC3D,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,qBAAA,EAAuB,IAAI,YAAY,CAAA;AAAA,QAC/C;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,KAAA,CAAM,8BAAA,EAAgC,GAAA,CAAI,YAAA,EAAc,KAAK,CAAA;AAAA,QAC/D,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,yBAAA,EAA2B,IAAI,YAAY,CAAA;AAAA,QACnD;AACA,QAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,QAAA,IAAI,CAAC,KAAA,EAAO;AACV,UAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,iBAAA,CAAkB,cAAsB,KAAA,EAAsB;AACpE,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI;AACF,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,mBAAA,EAAqB,GAAA,CAAI,YAAA,EAAc,KAAK,CAAA;AAAA,MACpD,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,cAAA,EAAgB,IAAI,YAAY,CAAA;AAAA,MACxC;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA,EAGQ,YAAA,CACN,QAAA,EACA,YAAA,EACA,KAAA,EACA,WAAA,EACM;AACN,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,WAAA,EAAa,QAAA,EAAU,cAAc,KAAK,CAAA;AAAA,IAChE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,SAAA,CACN,QAAA,EACA,YAAA,EACA,KAAA,EACA,WAAA,EACM;AACN,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI,CAAC,KAAA,CAAM,SAAA,IAAa,CAAC,MAAM,SAAA,EAAW;AACxC,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,SAAA,CAAU,IAAI,QAAQ,CAAA;AAC5B,MAAA,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,WAAA,EAAa,QAAA,EAAU,cAAc,KAAK,CAAA;AAAA,IAChE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,UAAU,QAAA,EAAwB;AACxC,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,SAAA,CAAU,IAAI,QAAQ,CAAA;AAAA,IAC9B,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,oBAAoB,UAAA,EAA0B;AACpD,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,IAAI,IAAA,CAAK,kBAAkB,YAAA,EAAc;AACvC,MAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,QAAA,MAAM,IAAI,mBAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,iBAAA,CAAkB,GAAA,EAAI;AAC3C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,EAAA,CAAG,IAAA,CAAK,mBAAA,CAAoB,UAAU,CAAC,CAAA;AAAA,MACzC;AACA,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,EAAA,CAAG,KAAK,4BAA4B,CAAA;AACpC,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AACpD,MAAA,IAAA,CAAK,WAAA,GAAc,IAAI,mBAAA,CAAoB,UAAU,CAAA;AAAA,IACvD;AAAA,EACF;AAAA,EAEQ,kBAAA,GAA2B;AACjC,IAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,MAAA,IAAU,IAAA,CAAK,qBAAqB,IAAA,EAAM;AACnE,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI,CAAC,MAAM,kBAAA,EAAoB;AAC7B,MAAA,KAAA,CAAM,qBAAqB,IAAA,CAAK,SAAA,EAAU,CAAE,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAAA,IAC5E;AACA,IAAA,MAAM,KAAA,GAAQ,IAAI,mBAAA,CAAoB,IAAA,CAAK,gBAAgB,CAAA;AAC3D,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,kBAAA,CAAmB,GAAA,EAAI;AAI1C,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,KAAA,CAAM,OAAO,GAAA,CAAI,YAAA,EAAc,iBAAA,CAAkB,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,MACjE;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AAAA,EACrB;AAAA,EAEQ,yBAAA,GAAkC;AACxC,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AAErC,IAAA,IAAI,IAAA,CAAK,kBAAkB,YAAA,EAAc;AACvC,MAAA,KAAA,CAAM,eAAA,GAAkB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,eAAe,CAAA;AACtD,MAAA,KAAA,CAAM,eAAA,GAAkB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,eAAe,CAAA;AACtD,MAAA,KAAA,CAAM,aAAA,GAAgB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AAClD,MAAA,KAAA,CAAM,mBAAA,GAAsB,IAAA;AAC5B,MAAA,KAAA,CAAM,mBAAA,GAAsB,IAAA;AAC5B,MAAA,KAAA,CAAM,kBAAA,GAAqB,IAAA;AAC3B,MAAA,IAAI;AACF,QAAA,KAAA,CAAM,qBAAA,GAAwB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA;AAClE,QAAA,KAAA,CAAM,6BAA6B,EAAA,CAAG,OAAA;AAAA,UACpC,GAAA,CAAI;AAAA,SACN;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,mBAAA,GAAsB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA;AAC9D,IAAA,KAAA,CAAM,mBAAA,GAAsB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA;AAC9D,IAAA,KAAA,CAAM,kBAAA,GAAqB,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA;AAC5D,IAAA,KAAA,CAAM,eAAA,GAAkB,IAAA;AACxB,IAAA,KAAA,CAAM,eAAA,GAAkB,IAAA;AACxB,IAAA,KAAA,CAAM,aAAA,GAAgB,IAAA;AACtB,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,yBAAA,GAA4B,EAAA,CAAG,OAAA,CAAQ,GAAA,CAAI,yBAAyB,CAAA;AAC1E,MAAA,KAAA,CAAM,iCAAiC,EAAA,CAAG,OAAA;AAAA,QACxC,GAAA,CAAI;AAAA,OACN;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,eAAA,CAAgB,OAAe,SAAA,EAA+B;AACpE,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI,IAAA,CAAK,kBAAkB,YAAA,EAAc;AACvC,MAAA,KAAA,CAAM,gBAAiB,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,aAAA,CAAc,SAAS,CAAC,CAAA;AAC/D,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,mBAAA,CAAqB,GAAA,CAAI,KAAA,EAAO,iBAAA,CAAkB,SAAS,CAAC,CAAA;AAElE,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA;AACxC,MAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEQ,gBAAgB,KAAA,EAAqB;AAC3C,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,YAAA,IAAgB,KAAA,CAAM,eAAA,EAAiB;AAChE,QAAA,KAAA,CAAM,eAAA,CAAgB,IAAI,KAAK,CAAA;AAAA,MACjC,CAAA,MAAA,IAAW,MAAM,mBAAA,EAAqB;AACpC,QAAA,KAAA,CAAM,mBAAA,CAAoB,IAAI,KAAK,CAAA;AACnC,QAAA,IAAA,CAAK,WAAA,EAAa,OAAO,KAAK,CAAA;AAC9B,QAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,MAC1B;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,mBAAA,CACN,WACA,IAAA,EACmB;AACnB,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAe,GAAA;AAAA,QAChC,IAAA,CAAK,cAAc,SAAS,CAAA;AAAA,QAC5B;AAAA,OACF;AAEA,MAAA,MAAM,IAAA,GAA0B,IAAI,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AACrD,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACvC,QAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,QAAA,IAAA,CAAK,CAAC,CAAA,GAAI;AAAA,UACR,aAAa,GAAA,CAAI,YAAA;AAAA,UACjB,UAAU,GAAA,CAAI;AAAA,SAChB;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,aAAA,CAAc,CAAA,sBAAA,EAAyB,KAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,QACvE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ;AAAA,OACzC,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,sBAAA,CACN,WACA,IAAA,EACmB;AACnB,IAAA,IAAI,IAAA,CAAK,gBAAA,IAAoB,CAAC,IAAA,CAAK,WAAA,EAAa;AAC9C,MAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,MAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAAA,IAC1B;AACA,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,gBAAA,KAAqB,IAAA,EAAM;AACtD,MAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,SAAA,EAAW,IAAA,CAAK,gBAAgB,CAAA;AACjE,MAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,KAAA,EAAO,IAAI,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,IAAI,cAAc,sCAAsC,CAAA;AAAA,EAChE;AAAA,EAEA,MAAc,OAAA,CAAQ,GAAA,EAAa,KAAA,EAA8B;AAC/D,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,EAC9B;AAAA,EAEQ,eAAe,GAAA,EAA4B;AACjD,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACjC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAC/B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAAA,EAC5C;AAAA,EAEQ,eAAe,GAAA,EAA4B;AACjD,IAAA,MAAM,KAAA,GAAQ,KAAK,iBAAA,EAAkB;AACrC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACjC,IAAA,OAAO,KAAK,KAAA,IAAS,IAAA;AAAA,EACvB;AAAA,EAEQ,oBAAA,CAAqB,IAAkB,GAAA,EAA4B;AACzE,IAAA,MAAM,MAAM,EAAA,CAAG,OAAA,CAAQ,IAAI,OAAO,CAAA,CAAE,IAAI,GAAG,CAAA;AAC3C,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAC/B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAAA,EAC5C;AAAA,EAEQ,YAAY,gBAAA,EAAkC;AACpD,IAAA,IAAI,qBAAqB,UAAA,EAAY;AACnC,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAOL,sBAAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA,GACnC,gBAAA,GACAA,uBAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,gBAAgB,CAAA;AAAA,EAClD;AAAA,EAEQ,SAAA,GAA0B;AAChC,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,MAAA,MAAM,IAAI,cAAc,0CAA0C,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEQ,iBAAA,GAAwC;AAC9C,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,MAAM,IAAI,cAAc,0DAA0D,CAAA;AAAA,IACpF;AACA,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEQ,kBAAA,GAA2B;AACjC,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,qBAAqB,IAAA,EAAM;AACzD,MAAA,MAAM,IAAI,aAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cAAc,SAAA,EAAqC;AACzD,IAAA,MAAM,MAAA,GAAS,kBAAkB,SAAS,CAAA;AAC1C,IAAA,OAAO,IAAI,UAAA,CAAW,MAAA,CAAO,QAAQ,MAAA,CAAO,UAAA,EAAY,OAAO,UAAU,CAAA;AAAA,EAC3E;AAAA,EAEQ,SAAS,KAAA,EAAwB;AACvC,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAO,KAAA,CAAM,OAAA;AAAA,IACf;AACA,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;AAGO,IAAM,sBAAA,GAAyB;AAGtC,SAAS,iBAAiB,KAAA,EAAuB;AAC/C,EAAA,MAAM,KAAA,GAAQ,MACX,KAAA,CAAM,KAAK,EACX,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CAAE,OAAA,CAAQ,mBAAA,EAAqB,EAAE,CAAC,CAAA,CAClE,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAC/C;;;ACjwDA,IAAMM,SAAAA,GACJ,qDAAA;AAGF,SAAS,iBAAiB,KAAA,EAA8B;AACtD,EAAA,IAAI,CAACA,SAAAA,CAAS,IAAA,CAAK,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,CAAA,iBAAA,EAAoB,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EACrC;AACA,EAAA,MAAMN,KAAAA,GAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAC3B,EAAA,OAAO,uBAAuBA,KAAI,CAAA,EAAA,CAAA;AACpC;AAEA,SAAS,gBAAA,CACP,KAAA,EACA,KAAA,EACA,UAAA,EAC4B;AAC5B,EAAA,IAAI,CAACM,SAAAA,CAAS,IAAA,CAAK,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,IAAI,GAAA,GAAe,KAAA;AACnB,EAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,GAAG,CAAA,IAAK,CAAA,EAAG,KAAK,CAAA,EAAG;AAC7C,IAAA,GAAA,GAAM,EAAE,CAAC,KAAA,CAAM,CAAC,CAAE,GAAG,GAAA,EAAI;AAAA,EAC3B;AACA,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,qBAAqB,UAAU,CAAA,OAAA,CAAA;AAAA,IAC3C,MAAA,EAAQ,CAAC,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC;AAAA,GAC9B;AACF;AAEA,SAASC,kBAAAA,CACP,KAAA,EACA,EAAA,EACA,UAAA,EAC4B;AAC5B,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,MAAM,QAAQ,EAAA,CAAG,EAAA;AACjB,IAAA,IACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,SAAA,EACjB;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,KAAA,EAAO,UAAU,CAAA;AAAA,EAClD;AAEA,EAAA,MAAM,OAAA,GAAU,iBAAiB,KAAK,CAAA;AACtC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,cAAc,EAAA,EAAI;AACpB,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,CAAA,EAAG,OAAO,CAAA,cAAA,EAAiB,UAAU,CAAA,OAAA,CAAA;AAAA,MACjD,MAAA,EAAQ,CAAC,EAAA,CAAG,QAAQ;AAAA,KACtB;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,CAAA,CAAA,EAAI,OAAO,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAA;AAAA,MAClD,MAAA,EAAQ,CAAC,EAAA,CAAG,EAAE;AAAA,KAChB;AAAA,EACF;AACA,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,CAAA,CAAA,EAAI,OAAO,CAAA,eAAA,EAAkB,UAAU,CAAA,CAAA;AAAA,MACnD,MAAA,EAAQ,CAAC,EAAA,CAAG,GAAG;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,CAAA,CAAA,EAAI,OAAO,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAA;AAAA,MAClD,MAAA,EAAQ,CAAC,EAAA,CAAG,EAAE;AAAA,KAChB;AAAA,EACF;AACA,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,CAAA,CAAA,EAAI,OAAO,CAAA,eAAA,EAAkB,UAAU,CAAA,CAAA;AAAA,MACnD,MAAA,EAAQ,CAAC,EAAA,CAAG,GAAG;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,aAAa,EAAA,EAAI;AACnB,IAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,EAAA,CAAG,OAAA;AACpB,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,IAAI,OAAO,CAAA,eAAA,EAAkB,UAAU,CAAA,MAAA,EAAS,OAAO,CAAA,eAAA,EAAkB,UAAA,GAAa,CAAC,CAAA,CAAA;AAAA,MACnG,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAA,CACP,QACA,UAAA,EAC4B;AAC5B,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,IAAI,MAAA,CAAO,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG;AAC3B,MAAA,OAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAQ,EAAC,EAAE;AAAA,IAC1C;AACA,IAAA,MAAM,QAA+B,EAAC;AACtC,IAAA,IAAI,GAAA,GAAM,UAAA;AACV,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,GAAA,EAAK;AAC9B,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAA,EAAO,GAAG,CAAA;AACxC,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,MAAA,GAAA,IAAO,SAAS,MAAA,CAAO,MAAA;AAAA,IACzB;AACA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,CAAE,UAAU,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AAAA,MAC9D,QAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,MAAM;AAAA,KACvC;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,IAAI,MAAA,CAAO,EAAA,CAAG,MAAA,KAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,EAAE,UAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,EAAC,EAAE;AAAA,IAC3C;AACA,IAAA,MAAM,QAA+B,EAAC;AACtC,IAAA,IAAI,GAAA,GAAM,UAAA;AACV,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,EAAA,EAAI;AAC7B,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAA,EAAO,GAAG,CAAA;AACxC,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,MAAA,GAAA,IAAO,SAAS,MAAA,CAAO,MAAA;AAAA,IACzB;AACA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,CAAE,UAAU,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAAA,MAC7D,QAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,MAAM;AAAA,KACvC;AAAA,EACF;AACA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,UAAU,CAAA;AACjD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,CAAA,KAAA,EAAQ,KAAA,CAAM,UAAU,CAAA,CAAA,CAAA;AAAA,MACpC,QAAQ,KAAA,CAAM;AAAA,KAChB;AAAA,EACF;AACA,EAAA,OAAOA,kBAAAA,CAAkB,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,IAAI,UAAU,CAAA;AAC9D;AAMO,SAAS,+BAAA,CACd,MAAA,EACA,UAAA,GAAa,CAAA,EACe;AAC5B,EAAA,OAAO,YAAA,CAAa,QAAQ,UAAU,CAAA;AACxC;;;AC1JO,IAAM,sBAAA,GAAyB,gBAAA;AAOtC,SAAS,aAAA,CACP,QACA,KAAA,EACS;AACT,EAAA,IAAI,MAAA,CAAO,YAAA,KAAiB,KAAA,CAAM,YAAA,EAAc;AAC9C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,MAAA,IAAa,MAAA,CAAO,KAAA,KAAU,MAAM,KAAA,EAAO;AAC9D,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,IAAI,MAAA,CAAO,KAAA,GAAQ,CAAC,MAAA,CAAO,KAAK,CAAA;AACzE,EAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IACZ,CAAC,CAAA,KAAyB,CAAA,KAAM,GAAA,IAAO,MAAM,KAAA,CAAM;AAAA,GACrD;AACF;AAEO,SAAS,uBAAuB,KAAA,EAAkC;AACvE,EAAA,MAAM,OAAA,GAAU,KAAK,SAAA,CAAU;AAAA,IAC7B,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,cAAc,KAAA,CAAM;AAAA,GACrB,CAAA;AACD,EAAA,IAAI,OAAA,CAAQ,SAAS,IAAA,EAAM;AAEzB,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA,GAClC,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAC1B,KAAA,CAAM,QAAA;AAAA,MACV,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AAAA,EACH;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,mBAAmB,GAAA,EAAuC;AACxE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,IAAA,IACE,CAAC,MAAA,IACD,OAAO,MAAA,CAAO,KAAA,KAAU,YACxB,OAAO,MAAA,CAAO,YAAA,KAAiB,QAAA,IAC/B,OAAO,MAAA,CAAO,KAAA,KAAU,YACxB,OAAO,MAAA,CAAO,cAAc,QAAA,EAC5B;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAUO,IAAM,4BAAN,MAA4D;AAAA,EAChD,aAAA,uBAAoB,GAAA,EAA0B;AAAA,EACvD,MAAA,GAAS,CAAA;AAAA,EACT,MAAA,GAA4B,IAAA;AAAA,EAC5B,MAAA,GAAS,KAAA;AAAA,EACT,YAAA,GAAe,KAAA;AAAA,EACf,cAAA,GAAuC,IAAA;AAAA,EAC9B,gBAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EAEjB,YAAY,OAAA,EAAkC;AAC5C,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AACvB,IAAA,IAAA,CAAK,gBAAA,GAAmB,QAAQ,gBAAA,IAAoB,GAAA;AACpD,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AAAA,EACzB;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAK,eAAA,EAAgB;AAAA,EAC7B;AAAA,EAEA,MAAc,eAAA,GAAiC;AAC7C,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,EAAQ;AAC9B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,MAAM,IAAA,CAAK,cAAA;AACX,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,KAAK,oBAAA,EAAqB;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,cAAA;AAAA,IACb,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAc,oBAAA,GAAsC;AAClD,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,EAAQ;AAC9B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,EAAQ;AAClC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,QAAQ,IAAI,CAAA;AAAA,MACrB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,MAAA,CAAO,EAAA,CAAG,cAAA,EAAgB,CAAC,GAAA,KAAQ;AACjC,MAAA,IAAI,GAAA,CAAI,OAAA,KAAY,sBAAA,IAA0B,CAAC,IAAI,OAAA,EAAS;AAC1D,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,GAAA,CAAI,OAAO,CAAA;AAC5C,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,IACrB,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,EAAA,CAAG,OAAA,EAAS,CAAC,KAAA,KAAU;AAC5B,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,MAAA,KAAK,KAAK,gBAAA,EAAiB;AAAA,IAC7B,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,EAAA,CAAG,OAAO,MAAM;AACrB,MAAA,KAAK,KAAK,gBAAA,EAAiB;AAAA,IAC7B,CAAC,CAAA;AACD,IAAA,MAAM,MAAA,CAAO,KAAA,CAAM,CAAA,OAAA,EAAU,sBAAsB,CAAA,CAAE,CAAA;AAAA,EACvD;AAAA,EAEA,MAAc,gBAAA,GAAkC;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,YAAA,EAAc;AACpC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,MAAM,OAAO,IAAA,CAAK,MAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,MACnB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,IAAI,QAAQ,CAAC,CAAA,KAAM,WAAW,CAAA,EAAG,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAC7D,MAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,QAAA,MAAM,KAAK,eAAA,EAAgB;AAAA,MAC7B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AACpB,MAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,QAAA,KAAK,KAAK,gBAAA,EAAiB;AAAA,MAC7B;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AAAA,EACtB;AAAA,EAEQ,SAAS,KAAA,EAAgC;AAC/C,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,aAAA,CAAc,MAAA,EAAO,EAAG;AAC7C,MAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA,EAAG;AACrC,QAAA;AAAA,MACF;AACA,MAAA,IAAI;AACF,QAAA,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,MACpB,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN,qCAAA;AAAA,UACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,SAC3C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAA,CACE,QACA,QAAA,EACa;AACb,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AACA,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,EAAA;AAChB,IAAA,IAAA,CAAK,cAAc,GAAA,CAAI,EAAA,EAAI,EAAE,MAAA,EAAQ,UAAU,CAAA;AAC/C,IAAA,KAAK,KAAK,eAAA,EAAgB;AAC1B,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,aAAA,CAAc,OAAO,EAAE,CAAA;AAAA,IAC9B,CAAA;AAAA,EACF;AAAA;AAAA,EAGA,cAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,cAAc,IAAA,GAAO,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,MAAA,EAAiC;AAAA,EAEtC;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AACzB,IAAA,MAAM,UAAU,IAAA,CAAK,cAAA;AACrB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAGA,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,QAAQ,IAAI,CAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AACN,MAAA,IAAI;AACF,QAAC,OAAyC,GAAA,IAAM;AAAA,MAClD,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAGA,eAAsB,kBAAA,CACpB,QACA,KAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,uBAAuB,KAAK,CAAA;AAC5C,EAAA,MAAM,MAAA,CAAO,MAAM,CAAA,wBAAA,CAAA,EAA4B;AAAA,IAC7C,sBAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAGO,SAAS,8BAAA,CACd,MACA,OAAA,EAC2B;AAC3B,EAAA,OAAO,IAAI,yBAAA,CAA0B;AAAA,IACnC,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA,EAAQ;AAAA,IAC5B;AAAA,GACD,CAAA;AACH;;;ACtNA,IAAM,OAAA,GAAU,IAAIC,6BAAA,EAAgC;AAGpD,IAAM,IAAA,GAAO;AAAA,EACX,SAAA,EAAW,uBAAA;AAAA,EACX,WAAA,EAAa;AACf,CAAA;AAMA,SAAS,cAAc,SAAA,EAAmC;AACxD,EAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAc,SAAA,CAAU,MAAM,CAAA;AAC9C,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC5C,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,SAAA,CAAU,CAAC,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,GAAA;AACT;AAMA,SAAS,gBAAgB,SAAA,EAAiC;AACxD,EAAA,MAAM,IAAI,SAAA,CAAU,MAAA;AACpB,EAAA,IAAI,CAAA,GAAI,GAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,EAAG;AAC7B,IAAA,IAAI,CAAA,KAAM,GAAG,CAAA,IAAK,GAAA;AAClB,IAAA,CAAA,IAAK,UAAU,CAAC,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,CAAA,GAAI,GAAA;AACb;AAGA,SAAS,sBAAA,CACP,gBAAA,EACA,GAAA,EACA,KAAA,EACQ;AACR,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,gBAAgB,CAAA;AACpC,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA;AAC/C,MAAA,GAAA,CAAI,YAAA,CAAa,GAAA;AAAA,QACf,SAAA;AAAA,QACA,WAAW,CAAA,EAAG,QAAQ,IAAI,KAAK,CAAA,CAAA,CAAG,MAAK,GAAI;AAAA,OAC7C;AAAA,IACF;AAGA,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM,GAAA;AACnD,IAAA,OAAO,CAAA,EAAG,gBAAgB,CAAA,EAAG,GAAG,CAAA,EAAG,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAAA,EACzF;AACF;AAGA,SAAS,sBAAA,CACP,kBACA,aAAA,EACQ;AACR,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,YAAA;AAAA;AAAA,IAEA,sBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,KAAA,CAAM,QAAQ,2BAA2B,CAAA;AAAA,EAC3C;AACA,EAAA,OAAO,uBAAuB,gBAAA,EAAkB,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAC5E;AAEA,IAAM,cAAA,GAAiB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAA,CAAA;AAwBvB,IAAM,gBAAA,GAAmB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAA,CAAA;AA8BzB,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,wBAAA,GAA2B,EAAA;AACjC,IAAM,qBAAA,GAAwB,EAAA;AAC9B,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,oBAAA,GAAuB,GAAA;AAC7B,IAAM,oBAAA,GAAuB,EAAA;AAEtB,IAAM,uBAAA,GAAN,MAAM,wBAAA,CAAmD;AAAA,EACrD,IAAA,GAAO,UAAA;AAAA,EAEC,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACT,IAAA,GAAsB,IAAA;AAAA,EACtB,gBAAA,GAAkC,IAAA;AAAA,EAClC,WAAA,GAAc,KAAA;AAAA,EACd,gBAAA,GAAmB,KAAA;AAAA,EACnB,kBAAA,GAAqB,CAAA;AAAA;AAAA,EAErB,iBAAA,GAA0C,IAAA;AAAA,EAC1C,aAAA,GAAgB,KAAA;AAAA;AAAA,EAEhB,cAIH,EAAC;AAAA,EACE,oBAAA,GAAuB,KAAA;AAAA,EACvB,gBAAA,GAAyD,IAAA;AAAA,EACzD,mBAAA,GAAsB,CAAA;AAAA,EAE9B,YAAY,OAAA,EAAkC;AAC5C,IAAA,IAAA,CAAK,WAAA,GAAc,QAAQ,WAAA,IAAe,EAAA;AAC1C,IAAA,IAAA,CAAK,aAAA,GAAgB,QAAQ,aAAA,KAAkB,KAAA;AAE/C,IAAA,IAAA,CAAK,gBAAA,GAAmB,sBAAA;AAAA,MACtB,OAAA,CAAQ,gBAAA;AAAA,MACR,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEA,YAAA,GAKE;AACA,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,OAAO;AAAA,MACL,KAAK,IAAA,CAAK,WAAA;AAAA,MACV,KAAA,EAAO,MAAM,UAAA,IAAc,CAAA;AAAA,MAC3B,IAAA,EAAM,MAAM,SAAA,IAAa,CAAA;AAAA,MACzB,OAAA,EAAS,MAAM,YAAA,IAAgB;AAAA,KACjC;AAAA,EACF;AAAA;AAAA,EAGA,OAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,IAAI,CAAA;AAC7B,MAAA,QAAA,GACG,GAAA,CAAkC,IAAA,IAClC,GAAA,CAA+C,OAAA,CAAQ,IAAA;AAAA,IAC5D,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,IAAA,GAAO,IAAI,QAAA,CAAS;AAAA,QACvB,kBAAkB,IAAA,CAAK,gBAAA;AAAA,QACvB,KAAK,IAAA,CAAK,WAAA;AAAA,QACV,iBAAA,EAAmB,GAAA;AAAA,QACnB,uBAAA,EAAyB,GAAA;AAAA,QACzB,eAAA,EAAiB,IAAA;AAAA,QACjB,SAAA,EAAW;AAAA,OACZ,CAAA;AAGD,MAAA,MAAM,KAAK,aAAA,EAAc;AACzB,MAAA,IAAA,CAAK,WAAA,GAAc,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAChD,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,sBAAA,EAAuB;AAC/C,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,QAAA,MAAM,SAAA,GAAY,CAAA,EAAG,IAAA,CAAK,gBAAgB,KAAK,IAAI,CAAA,CAAA;AACnD,QAAA,IAAI,CAAC,wBAAA,CAAwB,iBAAA,CAAkB,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7D,UAAA,MAAM,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAClC,UAAA,wBAAA,CAAwB,iBAAA,CAAkB,IAAI,SAAS,CAAA;AAAA,QACzD,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAEnB,UAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,KAAA;AAAA,YACrB,CAAA,+EAAA;AAAA,YACA,KAAA,CAAM,OAAO,EAAE,IAAA,EAAM,IAAgC,CAAE,CAAA;AACzD,UAAA,IAAA,CAAK,gBAAA,GAAmB,GAAA,CAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,QAC5C;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,KAAK,IAAA,EAAM,GAAA,EAAI,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC5C,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,MAAA,IAAI,KAAA,YAAiB,kBAAA,IAAsB,KAAA,YAAiB,mBAAA,EAAqB;AAC/E,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,CAAA,oCAAA,EAAuC,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QAC3D,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAClC,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,GAAA;AAC9B,IAAA,OAAA,CACG,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,sBAAsB,CAAA,KAC3D,IAAA,CAAK,GAAA,EAAI,GAAI,QAAA,EACb;AACA,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAC/B,QAAA,MAAM,KAAK,gBAAA,EAAiB;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,OAAA,CAAc,CAAC,MAAM,UAAA,CAAW,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACjD;AAAA,IACF;AACA,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,CAAK,KAAK,GAAA,EAAI;AACpB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,kBACZ,EAAA,EACY;AACZ,IAAA,OAAO,EAAA,CAAG,IAAA,CAAK,WAAA,EAAa,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,GAAiC;AACrC,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,+CAAA,CAAiD,CAAA,CAAE,KAAA;AAAA,MAClE,MAAM;AAAA,KACR;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAAA,EAC1B;AAAA;AAAA,EAGA,MAAM,iBAAA,GAAmC;AACvC,IAAA,MAAM,KAAK,eAAA,EAAgB;AAAA,EAC7B;AAAA,EAEA,MAAM,mBAAmB,UAAA,EAAmC;AAC1D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,sBAAA,EAAuB;AACnD,IAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,UAAA,EAAY;AAChD,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,CAAA,0DAAA,EAA6D,QAAQ,CAAA,6CAAA,EAAgD,UAAU,CAAA,WAAA;AAAA,OACjI;AAAA,IACF;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAChD,IAAA,MAAM,IAAA,CAAK,mBAAmB,UAAU,CAAA;AACxC,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,MAAM,IAAA,CAAK,uBAAuB,UAAU,CAAA;AAAA,IAC9C;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,UAAA;AAAA,EAC1B;AAAA,EAEA,MAAc,mBAAmB,UAAA,EAAmC;AAClE,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA,2BAAA,EAGM,UAAU,CAAA;AAAA;AAAA,MAAA,CAEhC,CAAA;AAED,MAAA,MAAM,IAAA,CAAK,KAAA;AAAA,QACT,CAAA,wEAAA;AAAA,OACF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,MAAA,MAAM,IAAA,CAAK,KAAA;AAAA,QACT,CAAA,iEAAA;AAAA,OACF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,MAAA,MAAM,IAAA,CAAK,KAAA;AAAA,QACT,CAAA,8FAAA;AAAA,OACF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAEvB,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,KAAA;AAAA,QAC/B,CAAA,kEAAA;AAAA,QACA,KAAA,CAAM,OAAO,EAAE,IAAA,EAAM,IAAgC,CAAE,CAAA;AACzD,MAAA,IAAI,aAAA,CAAc,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACjC,QAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAQhB,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,MAC1B;AACA,MAAA,MAAM,IAAA,CAAK,KAAA;AAAA,QACT,CAAA;AAAA;AAAA,+BAAA;AAAA,OAGF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAEvB,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,KAAA;AAAA,QACrB,CAAA,+EAAA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,gBAAA,GAAmB,GAAA,CAAI,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,IAC5C,CAAA,MAAO;AACL,MAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAKhB,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aAAa,KAAA,EAAyC;AAC1D,IAAA,MAAM,kBAAA,CAAmB,IAAA,CAAK,WAAA,EAAY,EAAG,KAAK,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,YAAA,EAAqC;AAC3D,IAAA,MAAM,IAAA,CAAK,MAAM,CAAA,4CAAA,CAAA,EAAgD;AAAA,MAC/D;AAAA,KACD,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA;AAAA,MACvB,CAAA,gDAAA;AAAA,KACF;AACA,IAAA,IAAI,MAAA,CAAO,MAAM,IAAA,CAAK,CAAC,GAAG,CAAA,IAAK,CAAC,MAAM,CAAA,EAAG;AACvC,MAAA,MAAM,IAAA,CAAK,KAAA;AAAA,QACT,CAAA,+CAAA;AAAA,OACF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,MAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAA6B;AACjC,IAAA,MAAM,KAAK,KAAA,CAAM,CAAA,+BAAA,CAAiC,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACzE,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA,+CAAA;AAAA,KACF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,IAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAAA,EAC1B;AAAA;AAAA,EAGA,MAAc,eAAA,GAAiC;AAC7C,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,gBAAA,EAAkB;AAC9C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,MAAA,MAAM,IAAA,CAAK,iBAAA;AACX,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,iBAAA,GAAoB,KAAK,cAAA,EAAe;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,iBAAA;AAAA,IACb,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAc,cAAA,GAAgC;AAC5C,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AAGF,MAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA,MAAA,CAIhB,CAAA;AACD,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,MAAA,IAAA,CAAK,kBAAA,GAAqB,CAAA;AAAA,IAC5B,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,KAAA;AAAA,QACrB,CAAA,+EAAA;AAAA,QACA,KAAA,CAAM,OAAO,EAAE,IAAA,EAAM,IAAgC,CAAE,CAAA;AACzD,MAAA,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACvB,QAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,QAAA,IAAA,CAAK,kBAAA,GAAqB,CAAA;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,kBAAA,IAAsB,CAAA;AAC3B,MAAA,IAAI,IAAA,CAAK,sBAAsB,CAAA,EAAG;AAChC,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,qCAAqC,IAAA,CAAK,kBAAkB,cAAc,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,UAC9F,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,SACtD;AAAA,MACF;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,MAAM,sBAAA,GAAiD;AACrD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA,6CAAA,CAAA;AAAA,MACA,CAAC,UAAU,mBAAmB;AAAA,KAChC;AACA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA;AAC9B,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,uBAAuB,UAAA,EAAmC;AAC9D,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA,6DAAA,CAAA;AAAA,MAEA,CAAC,SAAA,CAAU,mBAAA,EAAqB,MAAA,CAAO,UAAU,CAAC;AAAA,KACpD;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,UAAA;AAAA,EAC1B;AAAA,EAEA,MAAM,aAAa,KAAA,EAA8C;AAC/D,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAIxB,IAAA,OAAO,IAAI,OAAA,CAAmB,CAAC,OAAA,EAAS,MAAA,KAAW;AACjD,MAAA,IAAA,CAAK,YAAY,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,QAAQ,CAAA;AAChD,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,IAAU,wBAAA,EAA0B;AACvD,QAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,QAAA,KAAK,KAAK,gBAAA,EAAiB;AAC3B,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,IAC3B,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,cAAA,CAAe,KAAK,gBAA+C,CAAA;AACnE,MAAA,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAClC,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AACA,IAAA,IAAA,CAAK,oBAAA,GAAuB,KAAA;AAAA,EAC9B;AAAA;AAAA,EAGQ,mBAAA,GAA4B;AAClC,IAAA,IAAI,KAAK,oBAAA,EAAsB;AAC7B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA;AAE5B,IAAA,IAAA,CAAK,gBAAA,GAAmB,aAAa,MAAM;AACzC,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,MAAA,IAAA,CAAK,oBAAA,GAAuB,KAAA;AAC5B,MAAA,KAAK,KAAK,gBAAA,EAAiB;AAAA,IAC7B,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,gBAAA,GAAkC;AAC9C,IAAA,IAAI,IAAA,CAAK,uBAAuB,qBAAA,EAAuB;AACrD,MAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,GAAG,kBAAkB,CAAA;AAC3D,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,mBAAA,IAAuB,CAAA;AAE5B,IAAA,IACE,KAAK,WAAA,CAAY,MAAA,GAAS,CAAA,IAC1B,IAAA,CAAK,sBAAsB,qBAAA,EAC3B;AACA,MAAA,KAAK,KAAK,gBAAA,EAAiB;AAAA,IAC7B;AACA,IAAA,IAAI;AACF,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAM,MAAM,MAAM,IAAA,CAAK,sBAAsB,KAAA,CAAM,CAAC,EAAG,KAAK,CAAA;AAC5D,QAAA,KAAA,CAAM,CAAC,CAAA,CAAG,OAAA,CAAQ,GAAG,CAAA;AACrB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,mBAAA,CAAoB,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AACrE,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxC,QAAA,KAAA,CAAM,CAAC,CAAA,CAAG,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAE,CAAA;AAAA,MAC5B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,MACnB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,mBAAA,IAAuB,CAAA;AAC5B,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAC/B,QAAA,KAAK,KAAK,gBAAA,EAAiB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAc,sBAAsB,KAAA,EAA8C;AAChF,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,WAAA,GACJ,MAAM,WAAA,KAAgB,MAAA,GAClB,MAAM,WAAA,GACN,iBAAA,CAAkB,MAAM,WAAW,CAAA;AACzC,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,WAAW,cAAA,EAAgB;AAAA,QACrE,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,KAAA,CAAM,WAAA;AAAA,QACN,iBAAA,CAAkB,MAAM,QAAQ,CAAA;AAAA,QAChC,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,SAAA;AAAA,QACN,aAAA,CAAc,MAAM,SAAS,CAAA;AAAA,QAC7B;AAAA,OACD,CAAA;AACD,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAC,CAAE,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,IAAA,CAAK,cAAc,KAAK,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,oBAAoB,MAAA,EAAmD;AAC3E,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAExB,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,WAAA,EAAa;AAC3C,MAAA,OAAO,CAAC,MAAM,IAAA,CAAK,sBAAsB,MAAA,CAAO,CAAC,CAAE,CAAC,CAAA;AAAA,IACtD;AAEA,IAAA,IAAI,KAAK,WAAA,EAAa;AAEpB,MAAA,IAAI,MAAA,CAAO,UAAU,oBAAA,EAAsB;AACzC,QAAA,OAAO,IAAA,CAAK,mBAAmB,MAAM,CAAA;AAAA,MACvC;AACA,MAAA,OAAO,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA,IACxC;AAEA,IAAA,OAAO,IAAA,CAAK,gBAAgB,YAAY;AACtC,MAAA,MAAM,MAAmB,EAAC;AAC1B,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,GAAA,CAAI,IAAA,CAAK,MAAM,IAAA,CAAK,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,MAC1C;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,oBACZ,MAAA,EACsB;AACtB,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC3C,IAAA,MAAM,IAAA,GAAO,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC5C,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,IAAI,KAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAE/C,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AACzC,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,GAAA,CAAI,CAAC,IAAI,KAAA,CAAM,EAAA;AACf,MAAA,IAAA,CAAK,CAAC,IAAI,KAAA,CAAM,YAAA;AAChB,MAAA,MAAA,CAAO,CAAC,IAAI,KAAA,CAAM,KAAA;AAClB,MAAA,KAAA,CAAM,CAAC,IAAI,KAAA,CAAM,WAAA;AACjB,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,iBAAA,CAAkB,KAAA,CAAM,QAAQ,CAAA;AAC3C,MAAA,OAAA,CAAQ,CAAC,IAAI,KAAA,CAAM,SAAA;AACnB,MAAA,OAAA,CAAQ,CAAC,IAAI,KAAA,CAAM,SAAA;AACnB,MAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,eAAA,CAAgB,KAAA,CAAM,SAAS,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,WAAA,EAAa,gBAAA,EAAkB;AAAA,MACxD,GAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,MAAO;AAAA,MAC/B,EAAA,EAAI,IAAI,CAAC,CAAA;AAAA,MACT,YAAA,EAAc,KAAK,CAAC,CAAA;AAAA,MACpB,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,MACf,YAAA,EAAc,MAAM,CAAC,CAAA;AAAA,MACrB,aAAA,EAAe,MAAM,CAAC,CAAA;AAAA,MACtB,QAAA,EAAU,CAAA;AAAA,MACV,eAAA,EAAiB,IAAA;AAAA,MACjB,YAAA,EACE,KAAA,CAAM,WAAA,KAAgB,MAAA,GAClB,MAAM,WAAA,GACN,IAAA;AAAA,MACN,UAAA,EAAY,QAAQ,CAAC,CAAA;AAAA,MACrB,UAAA,EAAY,QAAQ,CAAC;AAAA,KACvB,CAAE,CAAA;AAAA,EACJ;AAAA;AAAA,EAGA,MAAc,mBACZ,MAAA,EACsB;AACtB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,GACnB,oBAAA,GACA,kBAAA;AACJ,IAAA,IAAI,MAAA,CAAO,UAAU,SAAA,EAAW;AAC9B,MAAA,OAAO,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA,IACxC;AACA,IAAA,MAAM,SAAgC,EAAC;AACvC,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,SAAA,EAAW;AACjD,MAAA,MAAA,CAAO,KAAK,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAI,CAAC,KAAK,gBAAA,EAAkB;AAC1B,MAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,QAC1B,OAAO,GAAA,CAAI,CAAC,UAAU,IAAA,CAAK,mBAAA,CAAoB,KAAK,CAAC;AAAA,OACvD;AACA,MAAA,MAAMC,IAAAA,GAAmB,IAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAChD,MAAA,IAAIC,OAAAA,GAAS,CAAA;AACb,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACvC,UAAAD,IAAAA,CAAIC,OAAAA,GAAS,CAAC,CAAA,GAAI,KAAK,CAAC,CAAA;AAAA,QAC1B;AACA,QAAAA,WAAU,IAAA,CAAK,MAAA;AAAA,MACjB;AACA,MAAA,OAAOD,IAAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA,GAAmB,IAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAChD,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,mBAAA,CAAoB,KAAK,CAAA;AACjD,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACvC,QAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA;AAAA,MAC1B;AACA,MAAA,MAAA,IAAU,IAAA,CAAK,MAAA;AAAA,IACjB;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAc,cAAc,KAAA,EAA8C;AACxE,IAAA,MAAM,MAAM,MAAA,CAAO,IAAA;AAAA,MACjB,MAAM,SAAA,CAAU,MAAA;AAAA,MAChB,MAAM,SAAA,CAAU,UAAA;AAAA,MAChB,MAAM,SAAA,CAAU;AAAA,KAClB;AACA,IAAA,MAAM,WAAA,GACJ,MAAM,WAAA,KAAgB,MAAA,GAClB,MAAM,WAAA,GACN,iBAAA,CAAkB,MAAM,WAAW,CAAA;AACzC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gGAAA,CAAA;AAAA,MAMA;AAAA,QACE,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,KAAA,CAAM,WAAA;AAAA,QACN,iBAAA,CAAkB,MAAM,QAAQ,CAAA;AAAA,QAChC,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,SAAA;AAAA,QACN;AAAA;AACF,KACF;AACA,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAC,CAAE,CAAA;AACzC,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2EAAA,CAAA;AAAA,MAOA,CAAC,KAAA,CAAM,EAAA,EAAI,GAAG;AAAA,KAChB;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA,uCAAA,CAAA;AAAA,MAEA,CAAC,MAAA,CAAO,UAAA,IAAc,KAAA,CAAM,EAAA,EAAI,MAAM,SAAS;AAAA,KACjD;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,KAAA,EAAqD;AACtE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,cAAc,KAAA,CAAM,EAAA,EAAI,MAAM,YAAY,CAAA;AACtE,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,WAAA,GACJ,KAAA,CAAM,WAAA,KAAgB,MAAA,GAClB,MAAM,WAAA,GACN,KAAA,CAAM,WAAA,KAAgB,MAAA,GACpB,iBAAA,CAAkB,KAAA,CAAM,WAAW,CAAA,GAClC,SAAS,YAAA,IAAgB,IAAA;AAClC,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAAA,CAAA;AAAA,MAMA;AAAA,QACE,MAAM,WAAA,IAAe,IAAA;AAAA,QACrB,MAAM,QAAA,KAAa,MAAA,GAAY,iBAAA,CAAkB,KAAA,CAAM,QAAQ,CAAA,GAAI,IAAA;AAAA,QACnE,WAAA;AAAA,QACA,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM;AAAA;AACR,KACF;AACA,IAAA,IAAI,MAAM,SAAA,EAAW;AACnB,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,EAAE,CAAA;AACnC,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,EAAA,EAAI,MAAM,SAAS,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA,uCAAA,CAAA;AAAA,MAEA,CAAC,MAAA,CAAO,UAAA,IAAc,KAAA,CAAM,EAAA,EAAI,MAAM,SAAS;AAAA,KACjD;AACA,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,EAAA,EAAI,MAAM,YAAY,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,uBAAA,CACJ,YAAA,EACA,KAAA,EACA,WAAA,EAC2B;AAC3B,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA;AAAA;AAAA;AAAA;AAAA,cAAA,CAAA;AAAA,MAKA,CAAC,YAAA,EAAc,KAAA,EAAO,WAAW;AAAA,KACnC;AACA,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACzB,IAAA,OAAO,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAAA,EAClC;AAAA,EAEA,MAAM,aAAA,CAAc,EAAA,EAAY,YAAA,EAAiD;AAC/E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA;AAAA;AAAA,wDAAA,CAAA;AAAA,MAGA,CAAC,IAAI,YAAY;AAAA,KACnB;AACA,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACzB,IAAA,OAAO,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAAA,EAClC;AAAA,EAEA,MAAM,gBAAA,CAAiB,KAAA,EAAe,YAAA,EAAiD;AACrF,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mDAAA,CAAA;AAAA,MAMA,CAAC,OAAO,YAAY;AAAA,KACtB;AACA,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACzB,IAAA,OAAO,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAAA,EAClC;AAAA,EAEA,MAAM,mBAAA,CACJ,MAAA,EACA,YAAA,EACiC;AACjC,IAAA,MAAM,GAAA,uBAAU,GAAA,EAAuB;AACvC,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kEAAA,CAAA;AAAA,MAMA,CAAC,cAAc,MAAM;AAAA,KACvB;AACA,IAAA,KAAA,MAAW,GAAA,IAAO,OAAO,IAAA,EAAM;AAC7B,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAC9B,MAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,QAAA,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,KAAA,EAAO,MAAM,CAAA;AAAA,MAC9B;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CAAa,MAAA,EAA0B,KAAA,EAAsC;AACjF,IAAA,MAAM,OACJ,KAAA,KAAU,MAAA,GAAY,KAAA,GAAQ,MAAA,CAAO,WAAW,GAAA,GAAS,MAAA;AAC3D,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA,GACpB,gCAAgC,MAAA,CAAO,QAAA,EAAU,CAAC,CAAA,GAClD,IAAA;AAEJ,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAMJ,WAAU,CAAC,CAAA,iBAAA,CAAA,EAAqB,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,CAAG,CAAA;AAChE,MAAA,MAAMM,UAAoB,CAAC,MAAA,CAAO,YAAA,EAAc,GAAG,SAAS,MAAM,CAAA;AAClE,MAAA,IAAIC,IAAAA,GAAMD,QAAO,MAAA,GAAS,CAAA;AAC1B,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAAN,QAAAA,CAAQ,IAAA,CAAK,CAAA,SAAA,EAAYO,IAAAA,EAAK,CAAA,CAAE,CAAA;AAChC,QAAAD,OAAAA,CAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,MAC1B;AACA,MAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC3B,QAAAN,QAAAA,CAAQ,KAAK,CAAA,gBAAA,CAAkB,CAAA;AAAA,MACjC;AACA,MAAA,IAAIQ,IAAAA,GAAM;AAAA;AAAA;AAAA;AAAA,cAAA,EAIAR,QAAAA,CAAQ,IAAA,CAAK,OAAO,CAAC;AAAA;AAAA,MAAA,CAAA;AAG/B,MAAA,IAAI,SAAS,MAAA,EAAW;AACtB,QAAAQ,IAAAA,IAAO,WAAWD,IAAG,CAAA,CAAA;AACrB,QAAAD,OAAAA,CAAO,KAAK,IAAI,CAAA;AAAA,MAClB;AACA,MAAA,MAAMG,OAAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAMD,MAAKF,OAAM,CAAA;AAC3C,MAAA,OAAOG,OAAAA,CAAO,KAAK,GAAA,CAAI,CAAC,MAAM,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,iBAAA,CAAmB,CAAA;AACpC,IAAA,MAAM,MAAA,GAAoB,CAAC,MAAA,CAAO,YAAY,CAAA;AAC9C,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,SAAA,EAAY,GAAA,EAAK,CAAA,CAAE,CAAA;AAChC,MAAA,MAAA,CAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,IAC1B;AACA,IAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC3B,MAAA,OAAA,CAAQ,KAAK,CAAA,gBAAA,CAAkB,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,GAAA,GAAM;AAAA;AAAA;AAAA;AAAA,YAAA,EAIA,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC;AAAA;AAAA,IAAA,CAAA;AAG/B,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,CAAC,MAAA,CAAO,QAAA,EAAU;AAC3C,MAAA,GAAA,IAAO,WAAW,GAAG,CAAA,CAAA;AACrB,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IACnB;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,MAAM,CAAA;AAC3C,IAAA,IAAI,IAAA,GAAO,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAChD,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,IAAA,GAAO,IAAA,CAAK,MAAA;AAAA,QAAO,CAAC,QAClB,eAAA,CAAgB,mBAAA,CAAoB,IAAI,aAAa,CAAA,EAAG,OAAO,QAAS;AAAA,OAC1E;AACA,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAAA,MAC5B;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAA,CACJ,MAAA,EACA,KAAA,EACsB;AACtB,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,KAAK,CAAA;AAAA,EACxC;AAAA,EAEA,MAAM,aAAA,CACJ,KAAA,EACA,YAAA,EACA,IAAA,EACqD;AACrD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,OAAA,IAAW,IAAA,IAAQ,CAAA,EAAG;AACzB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,KAAK,aAAA,GACb,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAA,CAAA,GAQA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAA,CAAA;AAQJ,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,OAAA,EAAS,YAAA,EAAc,IAAI,CAAC,CAAA;AAClE,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,QAC/B,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA;AAAA,QAC9B,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,IAAI;AAAA,OACxB,CAAE,CAAA;AAAA,IACJ,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,CACJ,SAAA,EACA,IAAA,EAC4B;AAC5B,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,KAAK,eAAA,EAAgB;AAC3B,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,OAAO,MAAA,KAAW;AAC9C,QAAA,MAAMA,OAAAA,GAAS,MAAM,MAAA,CAAO,KAAA;AAAA,UAC1B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAA,CAAA;AAAA,UAUA,CAAC,aAAA,CAAc,SAAS,CAAA,EAAG,IAAI;AAAA,SACjC;AACA,QAAA,MAAM,IAAA,GAA0B,IAAI,KAAA,CAAMA,OAAAA,CAAO,KAAK,MAAM,CAAA;AAC5D,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAIA,QAAO,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC9C,UAAA,MAAM,GAAA,GAAMA,OAAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AACzB,UAAA,IAAA,CAAK,CAAC,CAAA,GAAI;AAAA,YACR,WAAA,EAAa,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AAAA,YACpC,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,QAAQ;AAAA,WAC/B;AAAA,QACF;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA;AAAA;AAAA,yDAAA;AAAA,KAGF;AACA,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACtC,MAAA,MAAM,MAAM,GAAA,CAAI,SAAA;AAChB,MAAA,MAAM,MAAM,IAAI,YAAA;AAAA,QACd,GAAA,CAAI,MAAA;AAAA,QACJ,GAAA,CAAI,UAAA;AAAA,QACJ,GAAA,CAAI,aAAa,YAAA,CAAa;AAAA,OAChC;AACA,MAAA,OAAO;AAAA,QACL,WAAA,EAAa,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AAAA,QACpC,QAAA,EAAU,cAAA,CAAe,SAAA,EAAW,GAAG;AAAA,OACzC;AAAA,IACF,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAC7C,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,MAAM,yBAAA,CACJ,SAAA,EACA,IAAA,EACA,cACA,OAAA,EACsD;AACtD,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AAGrB,MAAA,MAAM,OAAA,GAAU,CAAC,CAAA,mBAAA,CAAqB,CAAA;AACtC,MAAA,MAAMH,OAAAA,GAAoB,CAAC,YAAY,CAAA;AACvC,MAAA,IAAI,SAAS,KAAA,EAAO;AAClB,QAAA,OAAA,CAAQ,KAAK,CAAA,YAAA,CAAc,CAAA;AAC3B,QAAAA,OAAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAAA,MAC3B;AACA,MAAA,IAAI,CAAC,SAAS,eAAA,EAAiB;AAC7B,QAAA,OAAA,CAAQ,KAAK,CAAA,kBAAA,CAAoB,CAAA;AAAA,MACnC;AACA,MAAA,MAAMG,OAAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,QACxB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAA,EAMS,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,QAC9BH;AAAA,OACF;AACA,MAAA,MAAM,MAAA,GAASG,OAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACtC,QAAA,MAAM,MAAM,GAAA,CAAI,SAAA;AAChB,QAAA,MAAMC,OAAM,IAAI,YAAA;AAAA,UACd,GAAA,CAAI,MAAA;AAAA,UACJ,GAAA,CAAI,UAAA;AAAA,UACJ,GAAA,CAAI,aAAa,YAAA,CAAa;AAAA,SAChC;AACA,QAAA,OAAO;AAAA,UACL,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAAA,UACpB,QAAA,EAAU,cAAA,CAAe,SAAA,EAAWA,IAAG;AAAA,SACzC;AAAA,MACF,CAAC,CAAA;AACD,MAAA,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAC7C,MAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,KAAK,eAAA,EAAgB;AAC3B,IAAA,MAAM,GAAA,GAAM,cAAc,SAAS,CAAA;AAEnC,IAAA,MAAM,UAAU,CACd,IAAA,KAEA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MACjB,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAAA,MACpB,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,QAAQ;AAAA,KAC/B,CAAE,CAAA;AAKJ,IAAA,MAAM,WAAA,GAAc,OAAA,EAAS,KAAA,GAAQ,kBAAA,GAAqB,EAAA;AAC1D,IAAA,MAAM,cAAA,GAAiB,OAAA,EAAS,eAAA,GAC5B,EAAA,GACA,wBAAA;AACJ,IAAA,MAAM,MAAA,GAAS,OAAA,EAAS,KAAA,GACpB,CAAC,GAAA,EAAK,IAAA,EAAM,YAAA,EAAc,OAAA,CAAQ,KAAK,CAAA,GACvC,CAAC,GAAA,EAAK,MAAM,YAAY,CAAA;AAE5B,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAQK,WAAW;AAAA,SAAA,EACX,cAAc;AAAA;AAAA;AAAA,eAAA,CAAA;AAAA,MAInB;AAAA,KACF;AACA,IAAA,OAAO,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,MAAM,eAAA,CACJ,GAAA,EACA,YAAA,EACA,kBACA,UAAA,EACmB;AACnB,IAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA;AAAA;AAAA;AAAA,mBAAA,CAAA;AAAA,MAIA,CAAC,gBAAA,EAAkB,UAAA,EAAY,YAAA,EAAc,GAAG;AAAA,KAClD;AACA,IAAA,MAAM,QAAA,GAAW,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,EAAE,CAAC,CAAA;AACpD,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA;AAAA,wCAAA,CAAA;AAAA,MAGA,CAAC,QAAQ;AAAA,KACX,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,OAAA,CAAQ,KAAK,MAAA,CAAO,UAAA,EAAW,EAAG,MAAA,CAAO,YAAY,CAAA;AACrD,MAAA,MAAA,CAAO,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAChC,MAAA,KAAA,CAAM,IAAA,CAAK,YAAY,YAAY,CAAA;AACnC,MAAA,OAAA,CAAQ,IAAA,CAAK,kBAAkB,EAAE,CAAA;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,YAAY,UAAU,CAAA;AAAA,IACnC;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA,8FAAA,CAAA;AAAA,MAEA,CAAC,OAAA,EAAS,MAAA,EAAQ,KAAA,EAAO,SAAS,KAAK;AAAA,KACzC;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAA,CAAiB,EAAA,EAAY,YAAA,EAAwC;AACzE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA,wDAAA,CAAA;AAAA,MACA,CAAC,IAAI,YAAY;AAAA,KACnB;AACA,IAAA,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,IAAK,CAAA;AAAA,EAClC;AAAA,EAEA,MAAM,uBAAuB,MAAA,EAA2C;AACtE,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,MAAA,MAAM,IAAI,cAAc,iDAAiD,CAAA;AAAA,IAC3E;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA,2DAAA,CAAA;AAAA,MACA,CAAC,MAAA,CAAO,YAAA,EAAc,MAAA,CAAO,KAAK;AAAA,KACpC;AACA,IAAA,OAAO,OAAO,QAAA,IAAY,CAAA;AAAA,EAC5B;AAAA,EAEA,MAAM,kBAAkB,YAAA,EAAuC;AAC7D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA,4CAAA,CAAA;AAAA,MACA,CAAC,YAAY;AAAA,KACf;AACA,IAAA,OAAO,OAAO,QAAA,IAAY,CAAA;AAAA,EAC5B;AAAA,EAEA,MAAM,WAAW,QAAA,EAAyC;AACxD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA;AAAA,uEAAA,CAAA;AAAA,MAEA,CAAC,QAAQ;AAAA,KACX;AACA,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAC/B,EAAA,EAAI,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AAAA,MACjB,SAAA,EAAW,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA;AAAA,MAC/B,YAAY,GAAA,CAAI,UAAA;AAAA,MAChB,mBACE,GAAA,CAAI,iBAAA,KAAsB,OAAO,IAAA,GAAO,MAAA,CAAO,IAAI,iBAAiB,CAAA;AAAA,MACtE,UAAA,EAAY,MAAA,CAAO,GAAA,CAAI,UAAU;AAAA,KACnC,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,mBAAmB,KAAA,EAAkC;AACzD,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA,8BAAA,CAAA;AAAA,MAEA;AAAA,QACE,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,UAAA;AAAA,QACN,KAAA,CAAM,iBAAA;AAAA,QACN,KAAA,CAAM;AAAA;AACR,KACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,YAAA,EAMC;AACD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAAA,CAAA;AAAA,MAMA,CAAC,YAAY;AAAA,KACf;AACA,IAAA,OAAO;AAAA,MACL,eAAe,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,YAAY,CAAC,CAAA;AAAA,MACnD,gBAAgB,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,MAClD,kBAAkB,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,YAAY,CAAC,CAAA;AAAA,MACtD,aAAa,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,UAAU,CAAC;AAAA,KACjD;AAAA,EACF;AAAA,EAEA,MAAM,oBAAA,GAAwC;AAC5C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,MACxB,CAAA,2DAAA;AAAA,KACF;AACA,IAAA,OAAO,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,QAAQ,CAAC,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,gBAAmB,EAAA,EAAsC;AAC7D,IAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,EAAS;AAClC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,EAAA,EAAG;AAAA,IACZ;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,GAAc,OAAA,EAAQ;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,CAAO,MAAM,OAAO,CAAA;AAC1B,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,EAAE,CAAA;AAC3C,MAAA,MAAM,MAAA,CAAO,MAAM,QAAQ,CAAA;AAC3B,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,OAAO,KAAA,CAAM,UAAU,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACpD,MAAA,IAAI,KAAA,YAAiB,aAAA,IAAiB,KAAA,YAAiB,mBAAA,EAAqB;AAC1E,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,IAAI,aAAA,CAAc,CAAA,oBAAA,EAAuB,KAAK,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,QACrE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ;AAAA,OACzC,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,MAAA,CAAO,OAAA,EAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAc,aAAA,GAA+B;AAE3C,IAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAKhB,CAAA;AAED,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,KAAA;AAAA,MAC5B,CAAA,6CAAA,CAAA;AAAA,MACA,CAAC,UAAU,aAAa;AAAA,MACxB,KAAA,CAAM,OAAO,EAAE,IAAA,EAAM,IAAgC,CAAE,CAAA;AACzD,IAAA,MAAM,OAAA,GACJ,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA,KAAU,MAAA,GAC1B,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,CAAE,KAAK,CAAA,GAC/B,IAAA;AAGN,IAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,MAAA,MAAMC,SAAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,QAC1B,CAAA;AAAA;AAAA,gBAAA;AAAA,QAGA,KAAA,CAAM,OAAO,EAAE,IAAA,EAAM,IAAgC,CAAE,CAAA;AACzD,MAAA,IAAA,CAAK,aAAA,GAAgBA,SAAAA,CAAS,IAAA,CAAK,MAAA,GAAS,CAAA;AAC5C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAYhB,CAAA;AACD,IAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAQhB,CAAA;AACD,IAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAKhB,CAAA;AACD,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA,kFAAA;AAAA,KACF;AAEA,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA,8CAAA;AAAA,KACF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA,mEAAA;AAAA,KAEF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA,sFAAA;AAAA,KACF;AAGA,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA,+DAAA;AAAA,KACF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA;AAAA,0DAAA;AAAA,KAGF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,IAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAQhB,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAGxB,IAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAShB,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAIxB,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,KAAA;AAAA,MAC9B,CAAA,6CAAA,CAAA;AAAA,MACA,CAAC,UAAU,aAAa;AAAA,MACxB,KAAA,CAAM,OAAO,EAAE,IAAA,EAAM,IAAgC,CAAE,CAAA;AACzD,IAAA,MAAM,KAAA,GACJ,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,EAAG,KAAA,KAAU,MAAA,GAC5B,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,CAAE,KAAK,CAAA,GACjC,IAAA;AACN,IAAA,MAAM,iBAAA,GAAoB,UAAU,IAAA,IAAQ,CAAC,OAAO,QAAA,CAAS,KAAK,KAAK,KAAA,GAAQ,CAAA;AAE/E,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA;AAAA,QACxB,CAAA;AAAA;AAAA,iCAAA;AAAA,QAGA,KAAA,CAAM,OAAO,EAAE,IAAA,EAAM,IAAgC,CAAE,CAAA;AACzD,MAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,IAAA,EAAM;AAC7B,QAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,MAAA,CAAO,GAAA,CAAI,YAAY,CAAC,CAAA;AACvD,QAAA,MAAM,GAAA,GAAM,GAAG,GAAA,CAAI,YAAY,KAAK,GAAA,CAAI,KAAK,KAAK,IAAI,CAAA,CAAA;AACtD,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,UAAA,MAAM,IAAA,CAAK,KAAA;AAAA,YACT,CAAA,qDAAA,CAAA;AAAA,YACA,CAAC,IAAI,EAAE;AAAA,WACT,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,QACzB,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,UAAA,MAAM,IAAA,CAAK,KAAA;AAAA,YACT,CAAA,mDAAA,CAAA;AAAA,YACA,CAAC,IAAA,EAAM,GAAA,CAAI,EAAE;AAAA,WACf,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA,6DAAA,CAAA;AAAA,MAEA,CAAC,SAAA,CAAU,aAAA,EAAe,MAAA,CAAO,cAAc,CAAC;AAAA,KAClD,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAIvB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAAA,MAC1B,CAAA;AAAA;AAAA,cAAA;AAAA,MAGA,KAAA,CAAM,OAAO,EAAE,IAAA,EAAM,IAAgC,CAAE,CAAA;AACzD,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,IAAI;AACF,QAAA,MAAM,KAAK,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA,QAAA,CAIhB,CAAA;AACD,QAAA,MAAM,IAAA,CAAK,KAAA;AAAA,UACT,CAAA,uFAAA;AAAA,SACF;AACA,QAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,MACvB,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAA,CAAK,KAAA;AAAA,UACT,CAAA;AAAA,uEAAA;AAAA,SAEF,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACvB,QAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,iBAAA,GAAsC;AAClD,IAAA,MAAM,MAAA,GAAS,yBAAwB,cAAA,CAAe,GAAA;AAAA,MACpD,IAAA,CAAK;AAAA,KACP;AACA,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,MAAM,CAAA,qCAAA,CAAuC,CAAA;AACxD,MAAA,wBAAA,CAAwB,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,gBAAA,EAAkB,IAAI,CAAA;AACtE,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,wBAAA,CAAwB,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,gBAAA,EAAkB,KAAK,CAAA;AACvE,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAe,cAAA,mBAAiB,IAAI,GAAA,EAAqB;AAAA,EACzD,OAAe,iBAAA,mBAAoB,IAAI,GAAA,EAAY;AAAA,EAEnD,MAAc,eAAA,CAAgB,QAAA,EAAkB,SAAA,EAAwC;AACtF,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,IAAA,CAAK,KAAA;AAAA,QACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAAA,CAAA;AAAA,QAeA,CAAC,QAAA,EAAU,aAAA,CAAc,SAAS,CAAC;AAAA,OACrC;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAM,MAAA,CAAO,IAAA;AAAA,MACjB,SAAA,CAAU,MAAA;AAAA,MACV,SAAA,CAAU,UAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AACA,IAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2EAAA,CAAA;AAAA,MAOA,CAAC,UAAU,GAAG;AAAA,KAChB;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,QAAA,EAAiC;AAC7D,IAAA,MAAM,IAAA,CAAK,MAAM,CAAA,kDAAA,CAAA,EAAsD,CAAC,QAAQ,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACxG,IAAA,MAAM,IAAA,CAAK,MAAM,CAAA,uDAAA,CAAA,EAA2D,CAAC,QAAQ,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,EAC/G;AAAA,EAEA,MAAc,KAAA,CACZ,IAAA,EACA,MAAA,EACwB;AACxB,IAAA,MAAM,EAAA,GAAK,QAAQ,QAAA,EAAS;AAC5B,IAAA,MAAM,MAAA,GAAsB,EAAA,IAAM,IAAA,CAAK,WAAA,EAAY;AACnD,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,MAAM,CAAA;AAAA,EAClC;AAAA;AAAA,EAGA,MAAc,UAAA,CACZ,IAAA,EACA,IAAA,EACA,MAAA,EACwB;AACxB,IAAA,MAAM,EAAA,GAAK,QAAQ,QAAA,EAAS;AAC5B,IAAA,MAAM,MAAA,GAAsB,EAAA,IAAM,IAAA,CAAK,WAAA,EAAY;AACnD,IAAA,OAAO,OAAO,KAAA,CAAM,EAAE,MAAM,IAAA,EAAM,MAAA,EAAQ,QAAQ,CAAA;AAAA,EACpD;AAAA,EAEQ,OAAO,GAAA,EAAyC;AACtD,IAAA,MAAMjB,QAAO,GAAA,CAAI,aAAA;AACjB,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,OAAOA,UAAS,QAAA,EAAU;AAC5B,MAAA,aAAA,GAAgBA,KAAAA;AAAA,IAClB,CAAA,MAAA,IAAWA,KAAAA,IAAQ,OAAOA,KAAAA,KAAS,QAAA,EAAU;AAC3C,MAAA,aAAA,GAAgB,IAAA,CAAK,UAAUA,KAAI,CAAA;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,aAAA,GAAgB,IAAA;AAAA,IAClB;AAEA,IAAA,MAAM,OAAA,GACJ,GAAA,CAAI,UAAA,YAAsB,IAAA,GACtB,GAAA,CAAI,WAAW,WAAA,EAAY,GAC3B,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA;AAC3B,IAAA,MAAM,OAAA,GACJ,GAAA,CAAI,UAAA,YAAsB,IAAA,GACtB,GAAA,CAAI,WAAW,WAAA,EAAY,GAC3B,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA;AAE3B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AAAA,MACjB,YAAA,EAAc,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AAAA,MACrC,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,MACvB,YAAA,EAAc,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AAAA,MACrC,aAAA;AAAA,MACA,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,QAAA,IAAY,CAAC,CAAA;AAAA,MAClC,eAAA,EACE,GAAA,CAAI,eAAA,KAAoB,IAAA,IAAQ,GAAA,CAAI,oBAAoB,MAAA,GACpD,IAAA,GACA,MAAA,CAAO,GAAA,CAAI,eAAe,CAAA;AAAA,MAChC,YAAA,EACE,GAAA,CAAI,YAAA,KAAiB,IAAA,IAAQ,GAAA,CAAI,iBAAiB,MAAA,GAC9C,IAAA,GACA,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AAAA,MAC7B,UAAA,EAAY,OAAA;AAAA,MACZ,UAAA,EAAY,OAAA;AAAA,MACZ,OAAO,GAAA,CAAI,KAAA,KAAU,SAAY,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,GAAI;AAAA,KACvD;AAAA,EACF;AAAA,EAEQ,WAAA,GAAsB;AAC5B,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA,MAAM,IAAI,cAAc,0CAA0C,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEQ,kBAAA,GAA2B;AACjC,IAAA,IAAI,IAAA,CAAK,qBAAqB,IAAA,EAAM;AAClC,MAAA,MAAM,IAAI,aAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,SAAS,KAAA,EAAwB;AACvC,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,MAAM,SAAA,GAAY,KAAA;AAClB,MAAA,IAAI,KAAA,CAAM,QAAQ,SAAA,CAAU,MAAM,KAAK,SAAA,CAAU,MAAA,CAAO,SAAS,CAAA,EAAG;AAClE,QAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,CACtB,GAAA,CAAI,CAAC,IAAA,KAAU,IAAA,YAAgB,KAAA,GAAQ,IAAA,CAAK,UAAU,MAAA,CAAO,IAAI,CAAE,CAAA,CACnE,KAAK,IAAI,CAAA;AACZ,QAAA,OAAO,GAAG,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,IAAI,KAAK,MAAM,CAAA,CAAA;AAAA,MAClD;AACA,MAAA,OAAO,KAAA,CAAM,WAAW,KAAA,CAAM,IAAA;AAAA,IAChC;AACA,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;;;ACpnDO,SAAS,qBAAA,CACd,QACA,OAAA,EACiB;AACjB,EAAA,MAAM,gBAAA,GAAmB,mBAAmB,MAAM,CAAA;AAClD,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,aAAa,QAAA,EAAU;AAChC,IAAA,OAAO,IAAI,qBAAA,CAAsB;AAAA,MAC/B,gBAAA;AAAA,MACA,aAAa,OAAA,EAAS;AAAA,KACvB,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,CAAO,aAAa,UAAA,EAAY;AAClC,IAAA,OAAO,IAAI,uBAAA,CAAwB;AAAA,MACjC,gBAAA;AAAA,MACA,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,eAAe,MAAA,CAAO;AAAA,KACvB,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,IAAI,kBAAA;AAAA,IACR,CAAA,8BAAA,EAAiC,MAAA,CAAQ,MAAA,CAAgC,QAAQ,CAAC,CAAA;AAAA,GACpF;AACF;AAGO,SAAS,uBACd,MAAA,EACiB;AACjB,EAAA,OAAO,sBAAsB,MAAM,CAAA;AACrC;;;AC9CO,IAAM,WAAA,GAAc;;;ACqCpB,IAAM,+BAAN,MAAqE;AAAA,EAC1E,MAAM,QAAA,CACJ,UAAA,EACA,UAAA,EACA,YAAA,EAC6B;AAC7B,IAAA,MAAM,cAAA,GAAiB,YAAY,UAAU,CAAA;AAC7C,IAAA,IAAI,mBAAmB,UAAA,EAAY;AACjC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,CAACG,oBAAAA,CAAG,UAAA,CAAW,cAAc,CAAA,EAAG;AAClC,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA;AAAA;AAAA,6BAAA,EAAqE,cAAc;AAAA;AAAA,gDAAA;AAAA,OACrF;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GAAiB,YAAY,UAAU,CAAA;AAC7C,IAAAA,oBAAAA,CAAG,UAAUF,sBAAAA,CAAK,OAAA,CAAQ,cAAc,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAE9D,IAAA,MAAM,eAAe,cAAA,CAAe,QAAA,CAAS,KAAK,CAAA,GAC9C,cAAA,GACA,GAAG,cAAc,CAAA,GAAA,CAAA;AACrB,IAAA,MAAM,YAAA,GAAe,GAAG,YAAY,CAAA,cAAA,CAAA;AAEpC,IAAA,MAAM,UAAA,CAAW,gBAAgB,YAAY,CAAA;AAE7C,IAAA,MAAM,QAAA,GAA2B;AAAA,MAC/B,MAAA,EAAQ,mBAAA;AAAA,MACR,YAAY,MAAA,EAAO;AAAA,MACnB,UAAA,EAAY,WAAA;AAAA,MACZ,QAAA,EAAU,QAAA;AAAA,MACV,UAAA,EAAY,cAAA;AAAA,MACZ;AAAA,KACF;AACA,IAAAE,oBAAAA,CAAG,cAAc,YAAA,EAAc,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA,EAAG,MAAM,CAAA;AAExE,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,YAAA;AAAA,MACN,QAAA;AAAA,MACA,SAAA,EAAWA,oBAAAA,CAAG,QAAA,CAAS,YAAY,CAAA,CAAE;AAAA,KACvC;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,CACJ,UAAA,EACA,UAAA,EAC6B;AAC7B,IAAA,MAAM,cAAA,GAAiB,YAAY,UAAU,CAAA;AAC7C,IAAA,MAAM,YAAA,GAAe,cAAA,CAAe,QAAA,CAAS,KAAK,IAC9C,cAAA,GACAA,oBAAAA,CAAG,UAAA,CAAW,CAAA,EAAG,cAAc,CAAA,GAAA,CAAK,CAAA,GAClC,CAAA,EAAG,cAAc,CAAA,GAAA,CAAA,GACjB,cAAA;AAEN,IAAA,IAAI,CAACA,oBAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA;AAAA;AAAA,yBAAA,EAAiE,YAAY;AAAA;AAAA,mCAAA;AAAA,OAC/E;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,GAAG,YAAY,CAAA,cAAA,CAAA;AACpC,IAAA,IAAI,QAAA;AACJ,IAAA,IAAIA,oBAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,MAAA,QAAA,GAAW,KAAK,KAAA,CAAMA,oBAAAA,CAAG,YAAA,CAAa,YAAA,EAAc,MAAM,CAAC,CAAA;AAC3D,MAAA,IAAI,QAAA,CAAS,WAAW,mBAAA,EAAqB;AAC3C,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,2BAAA,EAA8B,MAAA,CAAQ,QAAA,CAAiC,MAAM,CAAC,CAAA;AAAA,SAChF;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,QAAA,GAAW;AAAA,QACT,MAAA,EAAQ,mBAAA;AAAA,QACR,YAAY,MAAA,EAAO;AAAA,QACnB,UAAA,EAAY,WAAA;AAAA,QACZ,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EAAY;AAAA,OACd;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GAAiB,YAAY,UAAU,CAAA;AAC7C,IAAA,IAAI,mBAAmB,UAAA,EAAY;AACjC,MAAA,MAAM,IAAI,mBAAmB,2CAA2C,CAAA;AAAA,IAC1E;AAEA,IAAA,KAAA,MAAW,MAAA,IAAU,CAAC,EAAA,EAAI,MAAA,EAAQ,MAAM,CAAA,EAAG;AACzC,MAAA,MAAM,IAAA,GAAO,CAAA,EAAG,cAAc,CAAA,EAAG,MAAM,CAAA,CAAA;AACvC,MAAA,IAAIA,oBAAAA,CAAG,UAAA,CAAW,IAAI,CAAA,EAAG;AACvB,QAAAA,qBAAG,MAAA,CAAO,IAAA,EAAM,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,MACjC;AAAA,IACF;AACA,IAAA,MAAM,UAAA,CAAW,cAAc,cAAc,CAAA;AAE7C,IAAA,OAAO,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAS;AAAA,EAC1C;AACF,CAAA;AAEA,eAAe,UAAA,CAAW,YAAoB,QAAA,EAAiC;AAC7E,EAAAA,oBAAAA,CAAG,UAAUF,sBAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACxD,EAAA,IAAI,MAAA,GAA8B,IAAA;AAClC,EAAA,IAAI,IAAA,GAA4B,IAAA;AAChC,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAIG,sBAAa,UAAU,CAAA;AACpC,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,KAAK,kCAAkC,CAAA;AAAA,IAChD,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAA,GAAO,IAAIA,sBAAa,QAAQ,CAAA;AAChC,IAAA,MAAM,WACJ,MAAA,CAGA,MAAA;AACF,IAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,MAAA,MAAM,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,IAAA,GAAO,IAAA;AACP,MAAAD,oBAAAA,CAAG,YAAA,CAAa,UAAA,EAAY,QAAQ,CAAA;AAAA,IACtC;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,2BAA2B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,MACjF,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,KACtD;AAAA,EACF,CAAA,SAAE;AACA,IAAA,IAAI;AACF,MAAA,MAAA,EAAQ,KAAA,EAAM;AAAA,IAChB,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAI;AACF,MAAA,IAAA,EAAM,KAAA,EAAM;AAAA,IACd,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,SAAS,YAAY,CAAA,EAAmB;AACtC,EAAA,IAAI,CAAA,KAAM,YAAY,OAAO,UAAA;AAC7B,EAAA,OAAOF,sBAAAA,CAAK,UAAA,CAAW,CAAC,CAAA,GAAI,CAAA,GAAIA,uBAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,CAAC,CAAA;AAC/D;;;AChLO,SAAS,eAAe,GAAA,EAA8B;AAC3D,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,cAAc,GAAA,CAAI,YAAA;AAAA,IAClB,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,OAAA,EAAS,EAAE,IAAA,EAAM,GAAA,CAAI,YAAA,EAAa;AAAA,IAClC,QAAA,EAAU,mBAAA,CAAoB,GAAA,CAAI,aAAa,CAAA;AAAA,IAC/C,QAAA,EAAU,IAAI,QAAA,KAAa,CAAA;AAAA,IAC3B,gBAAgB,GAAA,CAAI,eAAA;AAAA,IACpB,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA;AAAA,IAClC,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,UAAU;AAAA,GACpC;AACF;AAEO,SAAS,cAAA,CAAe,KAAgB,UAAA,EAAkC;AAC/E,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,cAAc,GAAA,CAAI,YAAA;AAAA,IAClB,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,OAAA,EAAS,EAAE,IAAA,EAAM,GAAA,CAAI,YAAA,EAAa;AAAA,IAClC,QAAA,EAAU,mBAAA,CAAoB,GAAA,CAAI,aAAa,CAAA;AAAA,IAC/C,QAAA,EAAU,IAAI,QAAA,KAAa,CAAA;AAAA,IAC3B,UAAA;AAAA,IACA,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA;AAAA,IAClC,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,UAAU;AAAA,GACpC;AACF;AAEO,SAAS,eAAe,GAAA,EAA+B;AAC5D,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,UAAU,GAAA,CAAI,SAAA;AAAA,IACd,WAAW,GAAA,CAAI,UAAA;AAAA,IACf,iBAAiB,GAAA,CAAI,iBAAA;AAAA,IACrB,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,UAAU;AAAA,GACpC;AACF;;;AC9BO,SAAS,UAAA,CACd,QAAA,EACA,OAAA,EACA,OAAA,EACqB;AACrB,EAAA,MAAM,GAAA,mBAAM,IAAI,GAAA,CAAI,CAAC,GAAG,QAAA,CAAS,IAAA,EAAK,EAAG,GAAG,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAA;AAC3D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,GAAG,QAAA,CAAS,MAAA,IAAU,IAAI,CAAA;AAClD,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,OAAA,CAAQ,MAAA,IAAU,IAAI,CAAA;AAEhD,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,MAAM,CAAA,GAAA,CAAK,QAAA,CAAS,GAAA,CAAI,EAAE,KAAK,CAAA,IAAK,MAAA;AACpC,IAAA,MAAM,CAAA,GAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,EAAE,KAAK,CAAA,IAAK,KAAA;AACnC,IAAA,KAAA,CAAM,GAAA;AAAA,MACJ,EAAA;AAAA,MACA,OAAA,CAAQ,cAAA,GAAiB,CAAA,GAAI,OAAA,CAAQ,aAAA,GAAgB;AAAA,KACvD;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,qBACd,MAAA,EAC+B;AAC/B,EAAA,IAAI,MAAA,KAAW,KAAA,IAAS,MAAA,KAAW,MAAA,EAAW;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,OAAO,EAAE,cAAA,EAAgB,GAAA,EAAK,aAAA,EAAe,GAAA,EAAI;AAAA,EACnD;AACA,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,OAAO,cAAA,IAAkB,GAAA;AAAA,IACzC,aAAA,EAAe,OAAO,aAAA,IAAiB;AAAA,GACzC;AACF;AAEO,SAAS,WACd,GAAA,EACe;AACf,EAAA,IAAI,GAAA,KAAQ,KAAA,IAAS,GAAA,KAAQ,MAAA,EAAW;AACtC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAI,MAAA,IAAU,GAAA;AACvB;AAMO,SAAS,QAAA,CACd,UAAA,EACA,IAAA,EACA,MAAA,EACgB;AAChB,EAAA,IAAI,UAAA,CAAW,UAAU,IAAA,EAAM;AAC7B,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAA2B,EAAC;AAClC,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,UAAU,CAAA;AAEhC,EAAA,OAAO,QAAA,CAAS,MAAA,GAAS,IAAA,IAAQ,SAAA,CAAU,SAAS,CAAA,EAAG;AACrD,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,IAAI,SAAA,GAAY,CAAA,QAAA;AAEhB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC5C,MAAA,MAAM,SAAA,GAAY,UAAU,CAAC,CAAA;AAC7B,MAAA,MAAM,YAAY,SAAA,CAAU,UAAA;AAC5B,MAAA,IAAI,MAAA,GAAS,CAAA;AACb,MAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAA,GAAS,IAAA,CAAK,GAAA;AAAA,UACZ,MAAA;AAAA,UACA,QAAQ,SAAA,CAAU,OAAA,CAAQ,IAAA,EAAM,MAAA,CAAO,QAAQ,IAAI;AAAA,SACrD;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,MAAA,GAAS,SAAA,GAAA,CAAa,CAAA,GAAI,MAAA,IAAU,MAAA;AAClD,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,SAAA,GAAY,KAAA;AACZ,QAAA,OAAA,GAAU,CAAA;AAAA,MACZ;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,OAAO,CAAE,CAAA;AACjC,IAAA,SAAA,CAAU,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,OAAA,CAAQ,GAAW,CAAA,EAAmB;AAC7C,EAAA,MAAM,EAAA,GAAK,IAAI,GAAA,CAAI,CAAA,CAAE,WAAA,EAAY,CAAE,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AAC/D,EAAA,MAAM,EAAA,GAAK,IAAI,GAAA,CAAI,CAAA,CAAE,WAAA,EAAY,CAAE,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AAC/D,EAAA,IAAI,EAAA,CAAG,IAAA,KAAS,CAAA,IAAK,EAAA,CAAG,SAAS,CAAA,EAAG;AAClC,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,KAAK,EAAA,EAAI;AAClB,IAAA,IAAI,EAAA,CAAG,GAAA,CAAI,CAAC,CAAA,EAAG;AACb,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,IAAA,GAAO,EAAA,CAAG,IAAA,GAAO,KAAA;AAClC,EAAA,OAAO,KAAA,KAAU,CAAA,GAAI,CAAA,GAAI,KAAA,GAAQ,KAAA;AACnC;AAEO,SAAS,cAAA,CACd,IAAA,EACA,eAAA,EACA,UAAA,EACQ;AACR,EAAA,MAAM,SAAS,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,CAAC,CAAA,GAAI,eAAA;AAC3D,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,MAAM,CAAA,EAAG,IAAI,CAAA,EAAG,GAAI,CAAA;AAChE;;;AC1HO,SAAS,iBAAiB,EAAA,EAA0B;AACzD,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,YAAA,EAAc,EAAA;AAAA,IACd,KAAA,EAAO,EAAA;AAAA,IACP,OAAA,EAAS,EAAE,IAAA,EAAM,EAAA,EAAG;AAAA,IACpB,UAAU,EAAC;AAAA,IACX,QAAA,EAAU,KAAA;AAAA,IACV,cAAA,EAAgB,IAAA;AAAA,IAChB,SAAA,kBAAW,IAAI,IAAA,CAAK,CAAC,CAAA;AAAA,IACrB,SAAA,kBAAW,IAAI,IAAA,CAAK,CAAC;AAAA,GACvB;AACF;AAEO,SAASiB,mBAAkBlB,KAAAA,EAAmD;AACnF,EAAA,OAAO,IAAA,CAAK,SAAA,CAAUA,KAAAA,IAAQ,EAAE,CAAA;AAClC;AAEO,SAASmB,qBAAoB,GAAA,EAAuC;AACzE,EAAA,IAAI,GAAA,IAAO,IAAA,IAAQ,GAAA,KAAQ,EAAA,SAAW,EAAC;AACvC,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAClD,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,EAAC;AACrC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,IAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClE,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,EAAC;AACV;AAEO,SAAS,kBAAkB,GAAA,EAA4C;AAC5E,EAAA,MAAM,KAAK,MAAA,CAAO,GAAA,CAAI,EAAA,IAAM,GAAA,CAAI,QAAQ,EAAE,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,UAAA,IAAc,IAAI,SAAS,CAAA;AAC3D,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,GAAA,CAAI,UAAA,IAAc,IAAI,SAAS,CAAA;AAC3D,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,YAAA,EAAc,MAAA,CAAO,GAAA,CAAI,YAAA,IAAgB,EAAE,CAAA;AAAA,IAC3C,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAA,IAAS,EAAE,CAAA;AAAA,IAC7B,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,CAAO,IAAI,YAAA,IAAgB,GAAA,CAAI,WAAA,IAAe,EAAE,CAAA,EAAE;AAAA,IACnE,QAAA,EAAUA,oBAAAA,CAAoB,GAAA,CAAI,aAAA,IAAiB,IAAI,QAAQ,CAAA;AAAA,IAC/D,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC9B,cAAA,EACE,GAAA,CAAI,eAAA,IAAmB,IAAA,IAAQ,GAAA,CAAI,oBAAoB,EAAA,GACnD,IAAA,GACA,MAAA,CAAO,GAAA,CAAI,eAAe,CAAA;AAAA,IAChC,SAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,UAAU,KAAA,EAAsB;AACvC,EAAA,IAAI,KAAA,YAAiB,MAAM,OAAO,KAAA;AAClC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AAC1D,IAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,KAAK,CAAA;AACxB,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,EAAE,OAAA,EAAS,GAAG,OAAO,CAAA;AAAA,EACzC;AACA,EAAA,uBAAO,IAAI,KAAK,CAAC,CAAA;AACnB;AAGO,SAAS,YAAA,CAAa,MAAc,IAAA,EAAsB;AAC/D,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA,EAAA,EAAK,IAAA,CAAK,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA,CAAA;AAEtE,EAAA,IAAI,CAAA,GAAI,UAAA;AACR,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA,EAAG;AACtC,IAAA,CAAA,IAAK,GAAA,CAAI,WAAW,CAAC,CAAA;AACrB,IAAA,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,QAAQ,CAAA;AAAA,EAC3B;AACA,EAAA,MAAM,CAAA,GAAA,CAAK,MAAM,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAChD,EAAA,IAAI,EAAA,GAAK,IAAA;AACT,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA,EAAG;AACtC,IAAA,EAAA,GAAM,EAAA,GAAK,EAAA,GAAM,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAAA,EACnC;AACA,EAAA,MAAM,CAAA,GAAA,CAAK,OAAO,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACjD,EAAA,OAAO,CAAA,IAAA,EAAO,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA;AACrB;;;AC3EO,IAAM,wBAAA,GAA2B,UAAA;AAKjC,SAAS,uBAAA,CACd,IACA,QAAA,EACM;AACN,EAAA,MAAM,OAAO,EAAA,CACV,OAAA;AAAA,IACC,CAAA,+DAAA;AAAA,GACF,CACC,IAAI,QAAQ,CAAA;AACf,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,EAAA,CAAG,OAAA;AAAA,IACD,CAAA,gEAAA;AAAA,GACF,CAAE,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,KAAK,EAAE,CAAA;AACtB,EAAA,EAAA,CAAG,OAAA,CAAQ,CAAA,oCAAA,CAAsC,CAAA,CAAE,GAAA,CAAI,KAAK,EAAE,CAAA;AAChE;;;ACcO,IAAM,yBAAA,GAA4B,CAAA;AACzC,IAAM,qBAAA,GAAwB,EAAA;AASvB,IAAM,sBAAN,MAAmD;AAAA,EAC/C,IAAA,GAAO,QAAA;AAAA,EACC,MAAA;AAAA,EACA,WAAA;AAAA,EACT,EAAA,GAA0B,IAAA;AAAA,EAC1B,MAAA,GAAS,KAAA;AAAA,EAEjB,YAAY,OAAA,EAAqC;AAC/C,IAAA,IAAI,CAAC,OAAA,EAAS,IAAA,IAAQ,OAAO,OAAA,CAAQ,IAAA,KAAS,QAAA,IAAY,CAAC,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAK,EAAG;AAC9E,MAAA,MAAM,IAAI,mBAAmB,wCAAwC,CAAA;AAAA,IACvE;AACA,IAAA,IAAA,CAAK,SAASlB,sBAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAC9C,IAAA,IAAA,CAAK,WAAA,GAAc,wBAAA,CAAyB,OAAA,CAAQ,WAAW,CAAA;AAAA,EACjE;AAAA,EAEA,oBAAA,GAAgC;AAC9B,IAAA,OAAO,KAAK,MAAA,KAAW,UAAA;AAAA,EACzB;AAAA,EAEA,WAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,MAAA,KAAW,UAAA,GAAa,IAAA,GAAO,IAAA,CAAK,MAAA;AAAA,EAClD;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,KAAK,MAAA,EAAQ;AAEjB,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,WAAW,UAAA,EAAY;AAC9B,QAAAE,oBAAAA,CAAG,SAAA,CAAUF,sBAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,MAC7D;AAEA,MAAA,MAAM,EAAA,GAAK,IAAIG,qBAAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACvC,MAAA,EAAA,CAAG,KAAK,4BAA4B,CAAA;AACpC,MAAA,EAAA,CAAG,IAAA,CAAK;AAAA;AAAA;AAAA,8BAAA,EAGkB,IAAA,CAAK,YAAY,aAAa,CAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAIvD,CAAA;AAED,MAAA,EAAA,CAAG,KAAK,wBAAwB,CAAA;AAChC,MAAA,EAAA,CAAG,KAAK,wBAAwB,CAAA;AAChC,MAAA,KAAA,MAAW,YAAY,oBAAA,EAAsB;AAC3C,QAAA,EAAA,CAAG,KAAK,QAAQ,CAAA;AAAA,MAClB;AAEA,MAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,IAChB,SAAS,KAAA,EAAO;AACd,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,IAAI,KAAA,EAAM;AAAA,MACjB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,MAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,sCAAA,EAAyC,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QACxD,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,MAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,EAAA,CAAG,KAAK,kBAAkB,CAAA;AAAA,MACjC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AAAA,IAChB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,uCAAA,EAA0C,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QACzD,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,MAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,CACJ,MAAA,EACA,IAAA,EACA,UACA,QAAA,EACe;AACf,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,IAAA,CAAK,OAAO,MAAM;AACtB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,EAAA,EAAI,MAAM,CAAA;AACrD,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,oBAAA,CAAqB,EAAA,EAAI,IAAI,CAAA;AACjD,MAAA,EAAA,CAAG,OAAA;AAAA,QACD,CAAA;AAAA,mEAAA;AAAA,OAEF,CAAE,GAAA,CAAI,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA;AAChC,MAAA,EAAA,CAAG,OAAA;AAAA,QACD,CAAA;AAAA,kCAAA;AAAA,OAEF,CAAE,GAAA;AAAA,QACA,OAAO,UAAA,EAAW;AAAA,QAClB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACAc,mBAAkB,QAAQ,CAAA;AAAA,QAC1BE,OAAAA;AAAO,OACT;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,cAAA,CACJ,MAAA,EACA,IAAA,EACA,QAAA,EACe;AACf,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,IAAA,CAAK,OAAO,MAAM;AACtB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,EAAA,EAAI,MAAM,CAAA;AACjD,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,CAAiB,EAAA,EAAI,IAAI,CAAA;AAC7C,MAAA,IAAI,CAAC,QAAA,IAAY,CAAC,MAAA,EAAQ;AAC1B,MAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,QAAA,EAAA,CAAG,OAAA;AAAA,UACD,CAAA;AAAA,qEAAA;AAAA,SAEF,CAAE,GAAA,CAAI,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA;AAChC,QAAA;AAAA,MACF;AACA,MAAA,EAAA,CAAG,OAAA;AAAA,QACD,CAAA,iEAAA;AAAA,OACF,CAAE,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AAAA,IACxB,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,UAAA,CACJ,QAAA,EACA,OAAA,EACyB;AACzB,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,MACjB,CAAA;AAAA,MACA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,KAAA,IAAS,2BAA2B,qBAAqB;AAAA,KAC7E;AACA,IAAA,MAAM,SAAA,GAAY,SAAS,SAAA,IAAa,MAAA;AACxC,IAAA,MAAM,QAAA,GAAW,SAAS,QAAA,IAAY,IAAA;AAEtC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,EAAA,EAAI,QAAQ,CAAA;AAChD,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AAEpB,IAAA,MAAM,GAAA,GAAM,mBAAmB,SAAS,CAAA;AAExC,IAAA,MAAM,IAAA,GAAO,EAAA,CACV,OAAA,CAAQ,GAAG,CAAA,CACX,IAAI,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAA;AAI9C,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,MAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,IAAI,MAAA,KAAW,QAAA,IAAY,KAAK,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA,EAAG;AACrD,MAAA,IAAA,CAAK,GAAA,CAAI,IAAI,MAAM,CAAA;AACnB,MAAA,GAAA,CAAI,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,MAAA,EAA2C;AAC5D,IAAA,MAAM,EAAA,GAAK,YAAA,CAAa,MAAA,CAAO,IAAA,EAAM,OAAO,IAAI,CAAA;AAChD,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAMpB,QAAOkB,kBAAAA,CAAkB;AAAA,MAC7B,GAAI,MAAA,CAAO,QAAA,IAAY,EAAC;AAAA,MACxB,YAAY,MAAA,CAAO;AAAA,KACpB,CAAA;AACD,IAAA,MAAM,IAAA,CAAK,OAAO,MAAM;AACtB,MAAA,MAAM,WAAW,EAAA,CACd,OAAA;AAAA,QACC,CAAA,+DAAA;AAAA,OACF,CACC,IAAI,EAAE,CAAA;AACT,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,EAAA,CAAG,OAAA;AAAA,UACD,CAAA,0DAAA;AAAA,UACA,GAAA,CAAI,MAAA,CAAO,IAAA,EAAMlB,KAAAA,EAAM,SAAS,EAAE,CAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,EAAA,CAAG,OAAA;AAAA,UACD,CAAA;AAAA,2CAAA;AAAA,SAEF,CAAE,IAAI,EAAA,EAAI,EAAA,EAAI,OAAO,IAAA,EAAMA,KAAAA,EAAMoB,SAAQ,CAAA;AAAA,MAC3C;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEA,MAAM,kBAAA,CACJ,QAAA,EACA,QAAA,EACA,IAAA,EACe;AACf,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,IAAA,CAAK,OAAO,MAAM;AACtB,MAAA,MAAM,SAAS,EAAA,CACZ,OAAA;AAAA,QACC,CAAA,+DAAA;AAAA,OACF,CACC,IAAI,QAAQ,CAAA;AACf,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,aAAA,CAAc,CAAA,kBAAA,EAAqB,QAAQ,CAAA,CAAA,EAAI;AAAA,UACvD,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH;AACA,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,oBAAA,CAAqB,EAAA,EAAI,QAAQ,CAAA;AACzD,MAAA,EAAA,CAAG,OAAA;AAAA,QACD,CAAA;AAAA,mEAAA;AAAA,OAEF,CAAE,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,YAAY,wBAAwB,CAAA;AACrD,MAAA,EAAA,CAAG,OAAA;AAAA,QACD,CAAA;AAAA,kCAAA;AAAA,OAEF,CAAE,GAAA;AAAA,QACA,OAAO,UAAA,EAAW;AAAA,QAClB,MAAA,CAAO,EAAA;AAAA,QACP,UAAA;AAAA,QACA,wBAAA;AAAA,QACAF,kBAAAA,CAAkB,EAAE,IAAA,EAAM,IAAA,IAAQ,IAAI,CAAA;AAAA,QACtCE,OAAAA;AAAO,OACT;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,QAAA,EAAiC;AAClD,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,IAAA,CAAK,OAAO,MAAM;AACtB,MAAA,uBAAA,CAAwB,IAAI,QAAQ,CAAA;AAAA,IACtC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAA,CAAM,OAAA,EAAiB,OAAA,EAAqD;AAChF,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,+LAAA;AAAA,MACA;AAAA,QACE,SAAA,EAAW,OAAA;AAAA,QACX,UAAA,EACE;AAAA;AACJ,KACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,GAAqC;AACzC,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,EAAA,EAAI;AAC5B,QAAA,OAAO,EAAE,IAAI,KAAA,EAAO,OAAA,EAAS,UAAU,OAAA,EAAS,EAAE,MAAA,EAAQ,UAAA,EAAW,EAAE;AAAA,MACzE;AACA,MAAA,MAAM,SAAA,GAAY,MAAA;AAAA,QACf,KAAK,EAAA,CAAG,OAAA,CAAQ,CAAA,qCAAA,CAAuC,CAAA,CAAE,KAAI,CAC3D;AAAA,OACL;AACA,MAAA,MAAM,SAAA,GAAY,MAAA;AAAA,QACf,KAAK,EAAA,CAAG,OAAA,CAAQ,CAAA,qCAAA,CAAuC,CAAA,CAAE,KAAI,CAC3D;AAAA,OACL;AACA,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,IAAA;AAAA,QACJ,OAAA,EAAS,QAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP,MAAM,IAAA,CAAK,MAAA;AAAA,UACX,QAAA,EAAU,IAAA;AAAA,UACV,SAAA;AAAA,UACA,SAAA;AAAA,UACA,QAAQ,IAAA,CAAK,MAAA,KAAW,cAAcjB,oBAAAA,CAAG,UAAA,CAAW,KAAK,MAAM;AAAA;AACjE,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,OAAA,EAAS,QAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP,MAAM,IAAA,CAAK,MAAA;AAAA,UACX,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA;AAC9D,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,OAAU,EAAA,EAAyB;AAC/C,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,OAAO,wBAAA,CAAyB,EAAA,EAAI,IAAA,CAAK,WAAA,EAAa,EAAE,CAAA;AAAA,EAC1D;AAAA,EAEQ,SAAA,GAA0B;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,CAAC,KAAK,MAAA,EAAQ;AAC5B,MAAA,MAAM,IAAI,cAAc,0BAAA,EAA4B;AAAA,QAClD,SAAA,EAAW,OAAA;AAAA,QACX,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEQ,gBAAA,CAAiB,IAAkB,QAAA,EAAiC;AAC1E,IAAA,MAAM,MAAM,EAAA,CACT,OAAA;AAAA,MACC,CAAA,+DAAA;AAAA,KACF,CACC,IAAI,QAAQ,CAAA;AACf,IAAA,OAAO,KAAK,EAAA,IAAM,IAAA;AAAA,EACpB;AAAA,EAEQ,oBAAA,CAAqB,IAAkB,QAAA,EAA0B;AACvE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,EAAA,EAAI,QAAQ,CAAA;AACnD,IAAA,IAAI,UAAU,OAAO,QAAA;AACrB,IAAA,EAAA,CAAG,OAAA;AAAA,MACD,CAAA;AAAA,6CAAA;AAAA,KAEF,CAAE,GAAA,CAAI,QAAA,EAAU,QAAA,EAAUiB,SAAQ,CAAA;AAClC,IAAA,OAAO,QAAA;AAAA,EACT;AACF;AAOA,SAAS,mBAAmB,SAAA,EAA0C;AACpE,EAAA,MAAM,QAAA,GAAW,wBAAA;AAEjB,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAAA,EAWoB,QAAQ,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,EAOrC;AAEA,EAAA,IAAI,cAAc,IAAA,EAAM;AACtB,IAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAAA,EAWoB,QAAQ,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,EAOrC;AAEA,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAA,EAiBoB,QAAQ,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAOrC;AAEA,SAASA,OAAAA,GAAiB;AACxB,EAAA,OAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAChC;AAEA,SAAS,SAAS,KAAA,EAAwB;AACxC,EAAA,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAC9D;;;ACzZO,IAAM,qBAAN,MAAkD;AAAA,EAC9C,IAAA,GAAO,OAAA;AAAA,EACC,GAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACT,MAAA,GAA6B,IAAA;AAAA,EAC7B,MAAA,GAAS,KAAA;AAAA,EAEjB,YAAY,OAAA,EAAoC;AAC9C,IAAA,IAAI,CAAC,OAAA,EAAS,GAAA,EAAK,IAAA,EAAK,EAAG;AACzB,MAAA,MAAM,IAAI,mBAAmB,sCAAsC,CAAA;AAAA,IACrE;AACA,IAAA,IAAI,CAAC,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK,EAAG;AAC9B,MAAA,MAAM,IAAI,mBAAmB,2CAA2C,CAAA;AAAA,IAC1E;AACA,IAAA,IAAI,OAAO,OAAA,CAAQ,QAAA,KAAa,QAAA,EAAU;AACxC,MAAA,MAAM,IAAI,mBAAmB,wCAAwC,CAAA;AAAA,IACvE;AACA,IAAA,IAAA,CAAK,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAK;AACtC,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,QAAA,EAAU,IAAA,EAAK,IAAK,MAAA;AAAA,EAC9C;AAAA,EAEA,oBAAA,GAAgC;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,WAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,KAAK,MAAA,EAAQ;AAEjB,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI;AACF,MAAA,GAAA,GAAO,MAAM,OAAO,cAAc,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,SAAS,GAAA,CAAI,MAAA;AAAA,MAChB,IAAA,CAAK,GAAA;AAAA,MACL,IAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAA,EAAU,KAAK,QAAQ;AAAA,KAC7C;AACA,IAAA,MAAM,IAAA,CAAK,OAAO,kBAAA,EAAmB;AACrC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAEd,IAAA,MAAM,IAAA,CAAK,WAAA,CAAY,OAAO,OAAA,KAAY;AACxC,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,UACZ,CAAA,+EAAA;AAAA,SACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,UACZ,CAAA,+EAAA;AAAA,SACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,IAC1B;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EAEQ,aAAA,GAA6B;AACnC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,MAAA,EAAQ;AAChC,MAAA,MAAM,IAAI,cAAc,yBAAA,EAA2B;AAAA,QACjD,SAAA,EAAW,OAAA;AAAA,QACX,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEA,MAAc,YAAe,EAAA,EAAuD;AAClF,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,EAAc;AAClC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,GACjB,MAAA,CAAO,OAAA,CAAQ,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,CAAA,GAC1C,MAAA,CAAO,OAAA,EAAQ;AACnB,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,GAAG,OAAO,CAAA;AAAA,IACzB,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,KAAA,EAAM;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAc,GAAA,CACZ,MAAA,EACA,MAAA,GAAkC,EAAC,EACC;AACpC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,OAAO,OAAA,KAAY;AACzC,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,MAAM,CAAA;AAC/C,MAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjC,QAAA,IAAI;AACF,UAAA,OAAO,IAAI,QAAA,EAAS;AAAA,QACtB,CAAA,CAAA,MAAQ;AACN,UAAA,MAAM,MAA+B,EAAC;AACtC,UAAA,KAAA,MAAW,GAAA,IAAO,IAAI,IAAA,EAAM;AAC1B,YAAA,GAAA,CAAI,GAAG,CAAA,GAAI,gBAAA,CAAiB,GAAA,CAAI,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,UAC1C;AACA,UAAA,OAAO,GAAA;AAAA,QACT;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,iBAAiB,EAAA,EAA2B;AACxD,IAAA,MAAM,IAAA,CAAK,GAAA;AAAA,MACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAA,CAAA;AAAA,MAUA,EAAE,EAAA;AAAG,KACP;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,CACJ,MAAA,EACA,IAAA,EACA,UACA,QAAA,EACe;AACf,IAAA,MAAM,IAAA,CAAK,iBAAiB,MAAM,CAAA;AAClC,IAAA,MAAM,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAChC,IAAA,MAAM,IAAA,CAAK,GAAA;AAAA,MACT,CAAA;AAAA;AAAA,sCAAA,CAAA;AAAA,MAGA;AAAA,QACE,MAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA,EAAUF,mBAAkB,QAAQ;AAAA;AACtC,KACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CACJ,MAAA,EACA,IAAA,EACA,QAAA,EACe;AACf,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,MAAM,IAAA,CAAK,GAAA;AAAA,QACT,CAAA;AAAA,iBAAA,CAAA;AAAA,QAEA,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAA;AAAS,OAC3B;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,CAAK,GAAA;AAAA,MACT,CAAA;AAAA,eAAA,CAAA;AAAA,MAEA,EAAE,QAAQ,IAAA;AAAK,KACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAA,CACJ,QAAA,EACA,OAAA,EACyB;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,OAAA,EAAS,KAAA,IAAS,CAAA,EAAG,EAAE,CAAC,CAAA;AAC3D,IAAA,MAAM,SAAA,GAAY,SAAS,SAAA,IAAa,MAAA;AACxC,IAAA,MAAM,WAAW,OAAA,EAAS,QAAA;AAI1B,IAAA,MAAM,WAAA,GACJ,SAAA,KAAc,KAAA,GACV,CAAA,qBAAA,EAAwB,KAAK,CAAA,aAAA,CAAA,GAC7B,SAAA,KAAc,IAAA,GACZ,CAAA,sBAAA,EAAyB,KAAK,CAAA,YAAA,CAAA,GAC9B,CAAA,qBAAA,EAAwB,KAAK,CAAA,YAAA,CAAA;AAErC,IAAA,MAAM,MAAA,GAAS,QAAA,GACX,CAAA,sCAAA,EAAyC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iEAAA,CAAA,GAQpD,yCAAyC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iEAAA,CAAA;AAQxD,IAAA,MAAM,MAAA,GAAkC,EAAE,EAAA,EAAI,QAAA,EAAS;AACvD,IAAA,IAAI,QAAA,KAAa,MAAA,EAAW,MAAA,CAAO,QAAA,GAAW,QAAA;AAE9C,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,QAAQ,MAAM,CAAA;AAC1C,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,MAAI,CAAC,GAAA,KACf,iBAAA,CAAkB,SAAA,CAAU,GAAG,CAAC;AAAA,KAClC;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,MAAA,EAA2C;AAC5D,IAAA,MAAM,EAAA,GAAK,YAAA,CAAa,MAAA,CAAO,IAAA,EAAM,OAAO,IAAI,CAAA;AAChD,IAAA,MAAM,IAAA,CAAK,GAAA;AAAA,MACT,CAAA;AAAA,sEAAA,CAAA;AAAA,MAEA;AAAA,QACE,EAAA;AAAA,QACA,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,QAAA,EAAUA,kBAAAA,CAAkB,MAAA,CAAO,QAAQ;AAAA;AAC7C,KACF;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEA,MAAM,kBAAA,CACJ,QAAA,EACA,QAAA,EACA,IAAA,EACe;AACf,IAAA,MAAM,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA;AAAA,MACvB,CAAA,8CAAA,CAAA;AAAA,MACA,EAAE,IAAI,QAAA;AAAS,KACjB;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,aAAA,CAAc,CAAA,kBAAA,EAAqB,QAAQ,CAAA,CAAA,EAAI;AAAA,QACvD,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH;AACA,IAAA,MAAM,IAAA,CAAK,GAAA;AAAA,MACT,CAAA;AAAA;AAAA,yBAAA,CAAA;AAAA,MAGA,EAAE,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,QAAQ,EAAA;AAAG,KACzC;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,QAAA,EAAiC;AAClD,IAAA,MAAM,IAAA,CAAK,GAAA;AAAA,MACT,CAAA;AAAA,sBAAA,CAAA;AAAA,MAEA,EAAE,IAAI,QAAA;AAAS,KACjB;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,CACJ,MAAA,EACA,MAAA,EACkB;AAClB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,MAAA,IAAU,EAAE,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,MAAA,GAAqC;AACzC,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,MAAA,EAAQ;AAChC,QAAA,OAAO,EAAE,IAAI,KAAA,EAAO,OAAA,EAAS,SAAS,OAAA,EAAS,EAAE,MAAA,EAAQ,UAAA,EAAW,EAAE;AAAA,MACxE;AACA,MAAA,MAAM,IAAA,CAAK,OAAO,kBAAA,EAAmB;AACrC,MAAA,IAAI,UAAA,GAAsB,KAAA,CAAA;AAC1B,MAAA,IAAI,OAAO,IAAA,CAAK,MAAA,CAAO,aAAA,KAAkB,UAAA,EAAY;AACnD,QAAA,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA,CAAO,aAAA,EAAc;AAAA,MAC/C;AACA,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,IAAA;AAAA,QACJ,OAAA,EAAS,OAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,QAAA,EAAU,KAAK,QAAA,IAAY,SAAA;AAAA,UAC3B,SAAA,EAAW,IAAA;AAAA,UACX;AAAA;AACF,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,OAAA,EAAS,OAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA;AAC9D,OACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,KAAA,EAAyB;AACjD,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,KAAA;AAC1B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,cAAc,KAAA,EAAO;AACtE,IAAA,IAAI;AACF,MAAA,OAAQ,MAAqC,QAAA,EAAS;AAAA,IACxD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,gBAAgB,KAAA,EAAO;AACxE,IAAA,OAAO,SAAA;AAAA,MACJ,KAAA,CAAkD;AAAA,KACrD;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,UAAU,GAAA,EAAuD;AACxE,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,GAAA;AACT;;;AClXA,SAAS,cAAA,CAAe,OAAgB,SAAA,EAA4C;AAClF,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC1D,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,EAAG,SAAS,CAAA,2BAAA,CAA6B,CAAA;AAAA,EACxE;AACF;AAEA,SAAS,SAAA,CAAU,OAAe,SAAA,EAAyB;AACzD,EAAA,cAAA,CAAe,OAAO,SAAS,CAAA;AAC/B,EAAA,IAAI;AAEF,IAAA,IAAI,IAAI,KAAK,CAAA;AAAA,EACf,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,EAAG,SAAS,CAAA,oCAAA,EAAuC,KAAK,CAAA,EAAA;AAAA,KAC1D;AAAA,EACF;AACF;AAEO,SAAS,wBAAwB,MAAA,EAA0C;AAChF,EAAA,SAAA,CAAU,MAAA,CAAO,SAAS,mBAAmB,CAAA;AAC7C,EAAA,cAAA,CAAe,MAAA,CAAO,QAAQ,kBAAkB,CAAA;AAChD,EAAA,cAAA,CAAe,MAAA,CAAO,OAAO,iBAAiB,CAAA;AAC9C,EAAA,IACE,MAAA,CAAO,SAAA,KAAc,MAAA,KACpB,CAAC,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA,IAAK,MAAA,CAAO,SAAA,IAAa,CAAA,CAAA,EAC3D;AACA,IAAA,MAAM,IAAI,mBAAmB,+CAA+C,CAAA;AAAA,EAC9E;AACA,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA,CAAQ,MAAK,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,IACjD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK;AAAA,IACzB,GAAI,OAAO,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,MAAA,CAAO,SAAA,EAAU,GAAI;AAAC,GAC1E;AACF;AAEO,SAAS,kBAAkB,MAAA,EAA8B;AAC9D,EAAA,SAAA,CAAU,MAAA,CAAO,SAAS,aAAa,CAAA;AACvC,EAAA,cAAA,CAAe,MAAA,CAAO,QAAQ,YAAY,CAAA;AAC1C,EAAA,cAAA,CAAe,MAAA,CAAO,OAAO,WAAW,CAAA;AACxC,EAAA,IACE,MAAA,CAAO,WAAA,KAAgB,MAAA,KACtB,CAAC,OAAO,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA,IAClC,MAAA,CAAO,WAAA,GAAc,CAAA,IACrB,MAAA,CAAO,cAAc,CAAA,CAAA,EACvB;AACA,IAAA,MAAM,IAAI,mBAAmB,yCAAyC,CAAA;AAAA,EACxE;AACA,EAAA,IACE,MAAA,CAAO,SAAA,KAAc,MAAA,KACpB,CAAC,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA,IAAK,MAAA,CAAO,SAAA,IAAa,CAAA,CAAA,EAC3D;AACA,IAAA,MAAM,IAAI,mBAAmB,yCAAyC,CAAA;AAAA,EACxE;AACA,EAAA,IACE,MAAA,CAAO,SAAA,KAAc,MAAA,KACpB,CAAC,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA,IAAK,MAAA,CAAO,SAAA,IAAa,CAAA,CAAA,EAC3D;AACA,IAAA,MAAM,IAAI,mBAAmB,yCAAyC,CAAA;AAAA,EACxE;AACA,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA,CAAQ,MAAK,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,IACjD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK;AAAA,IACzB,GAAI,OAAO,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,MAAA,CAAO,WAAA,EAAY,GAAI,EAAC;AAAA,IAC9E,GAAI,OAAO,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,MAAA,CAAO,SAAA,EAAU,GAAI,EAAC;AAAA,IACxE,GAAI,OAAO,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,MAAA,CAAO,SAAA,EAAU,GAAI;AAAC,GAC1E;AACF;AAEO,SAAS,wBACd,MAAA,EACgB;AAChB,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,EAAA,IAAI,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,UAAA,EAAY;AACpD,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,+BAAA,EAAkC,MAAA,CAAQ,MAAA,CAAiC,QAAQ,CAAC,CAAA,mCAAA;AAAA,KACtF;AAAA,EACF;AACA,EAAA,MAAM,gBAAA,GAAmB,kBAAA,CAAmB,MAAM,CAAA,CAAE,IAAA,EAAK;AACzD,EAAA,cAAA,CAAe,kBAAkB,0CAA0C,CAAA;AAE3E,EAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,UAAA;AAAA,MACV,gBAAA;AAAA,MACA,GAAA,EAAK,gBAAA;AAAA,MACL,GAAI,aAAA,IAAiB,MAAA,IAAU,MAAA,CAAO,WAAA,KAAgB,MAAA,GAClD,EAAE,WAAA,EAAa,MAAA,CAAO,WAAA,EAAY,GAClC,EAAC;AAAA,MACL,GAAI,eAAA,IAAmB,MAAA,IAAU,MAAA,CAAO,aAAA,KAAkB,MAAA,GACtD,EAAE,aAAA,EAAe,MAAA,CAAO,aAAA,EAAc,GACtC;AAAC,KACP;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,gBAAA;AAAA,IACA,GAAA,EAAK;AAAA,GACP;AACF;AAEO,SAAS,wBAAwB,MAAA,EAA0C;AAChF,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,IAAY,OAAO,MAAA,CAAO,aAAa,QAAA,EAAU;AAC3D,IAAA,MAAM,IAAI,mBAAmB,0DAA0D,CAAA;AAAA,EACzF;AACA,EAAA,MAAM,YAAA,GAAe,MAAA;AAAA,IAClB,MAAA,CAAO,SAAmC,QAAA,IAAY;AAAA,GACzD;AACA,EAAA,IAAI,YAAA,KAAiB,MAAA,IAAU,YAAA,KAAiB,OAAA,EAAS;AACvD,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,oDAAoD,YAAY,CAAA,EAAA,CAAA;AAAA,MAChE;AAAA,QACE,MAAA,EAAQ,YAAY,YAAY,CAAA,CAAA;AAAA,QAChC,UAAA,EACE;AAAA;AACJ,KACF;AAAA,EACF;AACA,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,KAAa,QAAA,EAAU;AACzC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,gCAAA,EAAmC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,wIAAA,CAAA;AAAA,MAC3D;AAAA,QACE,MAAA,EAAQ,CAAA,SAAA,EAAY,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAAA;AAAA,QAC5C,UAAA,EAAY;AAAA;AACd,KACF;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GACJ,MAAA,CAAO,QAAA,CAAS,GAAA,EAAK,IAAA,MACrB,MAAA,CAAO,QAAA,CAAS,gBAAA,EAAkB,IAAA,EAAK,IACvC,EAAA;AACF,EAAA,cAAA,CAAe,KAAK,wBAAwB,CAAA;AAE5C,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,MAAA;AAC9B,EAAA,MAAM,OAAA,mBAAU,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,SAAS,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAC,CAAA;AAC1E,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,yBAAA,EAA4B,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EACnE;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAO,OAAA,IAAW,IAAA;AAAA,IAC3B,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,QAAA;AAAA,MACV,GAAA;AAAA,MACA,gBAAA,EAAkB;AAAA,KACpB;AAAA,IACA,KAAA;AAAA,IACA,cAAA,EAAgB,OAAO,cAAA,IAAkB,IAAA;AAAA,IACzC,cAAA,EAAgB,OAAO,cAAA,IAAkB,IAAA;AAAA,IACzC,aAAA,EAAe,OAAO,aAAA,IAAiB,IAAA;AAAA,IACvC,iBAAA,EAAmB,OAAO,iBAAA,IAAqB,IAAA;AAAA,IAC/C,iBAAA,EAAmB,OAAO,iBAAA,IAAqB;AAAA,GACjD;AACF;AAKO,SAAS,oBAAoB,OAAA,EAAmC;AACrE,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAO,OAAA,KAAY,QAAA,EAAU;AACnD,IAAA,MAAM,IAAI,mBAAmB,gCAAgC,CAAA;AAAA,EAC/D;AAEA,EAAA,cAAA,CAAe,OAAA,CAAQ,cAAc,cAAc,CAAA;AAEnD,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,IAAY,OAAO,OAAA,CAAQ,aAAa,QAAA,EAAU;AAC7D,IAAA,MAAM,IAAI,mBAAmB,oCAAoC,CAAA;AAAA,EACnE;AAEA,EAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,OAAA,CAAQ,QAAQ,CAAA;AAEzD,EAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,IAAa,OAAO,OAAA,CAAQ,cAAc,QAAA,EAAU;AAC/D,IAAA,MAAM,IAAI,mBAAmB,qCAAqC,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,SAAA,GAAY,uBAAA,CAAwB,OAAA,CAAQ,SAAS,CAAA;AAC3D,EAAA,MAAM,MAAM,OAAA,CAAQ,GAAA,GAAM,iBAAA,CAAkB,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA;AAE3D,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,OAAA,CAAQ,YAAA,CAAa,IAAA,EAAK;AAAA,IACxC,QAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAI,GAAA,GAAM,EAAE,GAAA,KAAQ;AAAC,GACvB;AACF;AAEA,SAAS,oBAAoB,OAAA,EAAuC;AAClE,EAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,QAAA,EAAU;AACvC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,QAAA;AACzC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,mBAAmB,iCAAiC,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,uBAAuB,OAAA,EAAyC;AAC9E,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAO,OAAA,KAAY,QAAA,EAAU;AACnD,IAAA,MAAM,IAAI,mBAAmB,mCAAmC,CAAA;AAAA,EAClE;AACA,EAAA,cAAA,CAAe,OAAA,CAAQ,cAAc,cAAc,CAAA;AAEnD,EAAA,MAAM,YAAA,GAAe,oBAAoB,OAAO,CAAA;AAChD,EAAA,IAAI,OAAA,GAAwB,YAAA;AAC5B,EAAA,IAAI,CAAC,iBAAA,CAAkB,YAAY,CAAA,EAAG;AACpC,IAAA,OAAA,GAAU,wBAAwB,YAAY,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACtB,IAAA,MAAM,IAAI,mBAAmB,uBAAuB,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,CAAC,mBAAA,CAAoB,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC3C,IAAA,uBAAA,CAAwB,QAAQ,SAAS,CAAA;AAAA,EAC3C;AAEA,EAAA,IAAI,QAAQ,GAAA,KAAQ,MAAA,IAAa,CAAC,aAAA,CAAc,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC5D,IAAA,iBAAA,CAAkB,QAAQ,GAAG,CAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,YAAY,OAAA,CAAQ,SAAA;AACxB,EAAA,IAAI,SAAA,IAAa,CAAC,mBAAA,CAAoB,SAAS,CAAA,EAAG;AAChD,IAAA,SAAA,GAAY,wBAAwB,SAAS,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,QAAQ,OAAA,CAAQ,KAAA;AACpB,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,KAAA,GAAQ,kBAAkB,KAAK,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,YAAA,EAAc,OAAA,CAAQ,YAAA,CAAa,IAAA,EAAK;AAAA,IACxC,OAAA;AAAA,IACA,QAAA,EAAU,MAAA;AAAA,IACV,GAAI,SAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,IACjC,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU;AAAC,GACzC;AACF;AAMO,SAAS,kBAAkB,KAAA,EAAkC;AAClE,EAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC9C,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,2DAAA;AAAA,MACA;AAAA,QACE,UAAA,EACE;AAAA;AACJ,KACF;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,2DAAA;AAAA,MACA;AAAA,QACE,UAAA,EACE;AAAA;AACJ,KACF;AAAA,EACF;AACA,EAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,IAAI,MAAA,CAAO,aAAa,QAAA,EAAU;AAChC,IAAA,IAAI,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,MAAA,CAAO,IAAA,CAAK,MAAK,EAAG;AAC1D,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAI,mBAAA,CAAoB,EAAE,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,MAAA,CAAO,aAAa,OAAA,EAAS;AAC/B,IAAA,IAAI,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,MAAA,CAAO,GAAA,CAAI,MAAK,EAAG;AACxD,MAAA,MAAM,IAAI,mBAAmB,+CAA+C,CAAA;AAAA,IAC9E;AACA,IAAA,IAAI,OAAO,OAAO,QAAA,KAAa,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,MAAK,EAAG;AAClE,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AACvC,MAAA,MAAM,IAAI,mBAAmB,iDAAiD,CAAA;AAAA,IAChF;AACA,IAAA,OAAO,IAAI,kBAAA,CAAmB;AAAA,MAC5B,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AAAA,EACH;AACA,EAAA,MAAM,IAAI,kBAAA;AAAA,IACR,CAAA,4BAAA,EAA+B,MAAA,CAAQ,MAAA,CAAiC,QAAQ,CAAC,CAAA,6DAAA,CAAA;AAAA,IACjF;AAAA,MACE,UAAA,EACE;AAAA;AACJ,GACF;AACF;;;ACxUA,IAAM,WAAA,GAAiD;AAAA,EACrD,GAAA,EAAK,GAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACzB,WAAA,CAAoB,QAA2B,MAAA,EAAQ;AAAnC,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAoC;AAAA,EAApC,KAAA;AAAA,EAEpB,SAAS,KAAA,EAAgC;AACvC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,QAAA,GAA8B;AAC5B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,KAAA,CAAM,SAAiB,KAAA,EAAuB;AAC5C,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,KAAK,CAAA;AAAA,EACpC;AAAA,EAEA,IAAA,CAAK,SAAiB,KAAA,EAAuB;AAC3C,IAAA,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAA;AAAA,EACnC;AAAA,EAEA,IAAA,CAAK,SAAiB,KAAA,EAAuB;AAC3C,IAAA,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAA;AAAA,EACnC;AAAA,EAEA,KAAA,CAAM,SAAiB,KAAA,EAAuB;AAC5C,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,KAAK,CAAA;AAAA,EACpC;AAAA,EAEA,KAAA,CAAM,SAAiB,KAAA,EAAuB;AAC5C,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,KAAK,CAAA;AAAA,EACpC;AAAA,EAEQ,KAAA,CAAM,KAAA,EAA0B,OAAA,EAAiB,KAAA,EAAuB;AAC9E,IAAA,IAAI,YAAY,KAAK,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA,EAAG;AAChD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAU,KAAA,EAAO;AACxB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,CAAA,SAAA,EAAY,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAC1C,IAAA,IAAI,UAAU,OAAA,EAAS;AACrB,MAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,KAAA,IAAS,EAAE,CAAA;AAAA,IACjC,CAAA,MAAA,IAAW,UAAU,MAAA,EAAQ;AAC3B,MAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,KAAA,IAAS,EAAE,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,KAAA,IAAS,EAAE,CAAA;AAAA,IAC/B;AAAA,EACF;AACF;;;AClDO,SAAS,eAAA,GAA0B;AACxC,EAAA,OAAO,QAAA,EAAS;AAClB;AAEO,SAAS,aAAA,GAAwB;AACtC,EAAA,OAAO,QAAA,EAAS;AAClB;AAEO,SAAS,gBAAgB,SAAA,EAAiC;AAC/D,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,SAAS,aAAA,EAAc;AAAA,IACvB,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,iBAAiB,MAAA,EAAoC;AACnE,EAAA,OAAO;AAAA,IACL,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,SAAS,aAAA,EAAc;AAAA,IACvB,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;;;ACZO,IAAM,wBAAN,MAAyD;AAAA,EACrD,IAAA,GAAO,MAAA;AAAA,EAEhB,MAAM,IAAA,GAAsB;AAAA,EAAC;AAAA,EAC7B,MAAM,KAAA,GAAuB;AAAA,EAAC;AAAA,EAC9B,KAAK,MAAA,EAAmC;AAAA,EAAC;AAAA,EACzC,MAAM,KAAA,GAAuB;AAAA,EAAC;AAChC;AAgBO,IAAM,mBAAN,MAAuB;AAAA,EACnB,SAAA;AAAA,EACA,MAAA;AAAA,EACD,QAAA;AAAA,EACS,MAAA;AAAA,EAYA,OAAA;AAAA,EAEjB,WAAA,CACE,QAAA,EACA,MAAA,EACA,OAAA,GAAmC,EAAC,EACpC;AACA,IAAA,IAAA,CAAK,YAAY,eAAA,EAAgB;AACjC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA,IAAY,IAAI,qBAAA,EAAsB;AACtD,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,OAAA,EAAS,MAAA,EAAQ,OAAA,IAAW,OAAA,CAAQ,QAAQ,CAAA;AAAA,MAC5C,KAAA,EAAO,QAAQ,KAAA,IAAS,MAAA;AAAA,MACxB,cAAA,EAAgB,QAAQ,cAAA,IAAkB,IAAA;AAAA,MAC1C,cAAA,EAAgB,QAAQ,cAAA,IAAkB,IAAA;AAAA,MAC1C,aAAA,EAAe,QAAQ,aAAA,IAAiB,IAAA;AAAA,MACxC,iBAAA,EAAmB,QAAQ,iBAAA,IAAqB,IAAA;AAAA,MAChD,iBAAA,EAAmB,QAAQ,iBAAA,IAAqB;AAAA,KAClD;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,aAAA,CAAc,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EACnD;AAAA,EAEA,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,IAAW,IAAA,CAAK,SAAS,IAAA,KAAS,MAAA;AAAA,EACvD;AAAA,EAEA,YAAY,QAAA,EAAmC;AAC7C,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS;AACxB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,CAAK,SAAS,IAAA,EAAK;AAAA,EAC3B;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,IAAA,CAAK,SAAS,KAAA,EAAM;AAC1B,IAAA,MAAM,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EAC5B;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EAC5B;AAAA,EAEA,KAAA,CAAM,WAA+B,MAAA,EAA6C;AAChF,IAAA,MAAM,UAAU,MAAA,GACZ,gBAAA,CAAiB,MAAM,CAAA,GACvB,eAAA,CAAgB,KAAK,SAAS,CAAA;AAClC,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,IAAA,MAAM,UAAqC,EAAC;AAC5C,IAAA,MAAM,QAAqB,EAAC;AAC5B,IAAA,MAAM,IAAA,GAAO,IAAA;AAEb,IAAA,MAAM,MAAA,GAAS,CACb,MAAA,EACA,MAAA,EACA,KAAA,KACS;AACT,MAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AACpC,MAAA,MAAM,UAAA,GACJ,KAAA,YAAiB,KAAA,GACb,KAAA,CAAM,OAAA,GACN,QACE,MAAA,CAAO,KAAK,CAAA,GACZ,MAAA,EAAQ,KAAA,IAAS,IAAA;AACzB,MAAA,MAAM,WACJ,KAAA,YAAiB,KAAA,GAAQ,MAAM,KAAA,IAAS,IAAA,GAAO,QAAQ,UAAA,IAAc,IAAA;AAEvE,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,SAAA,EAAY,UAAA,IAAc,SAAS,CAAA,CAAE,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,EAAG,SAAS,iBAAiB,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,MACvE;AAEA,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS;AACxB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAA6B;AAAA,QACjC,IAAI,QAAA,EAAS;AAAA,QACb,WAAW,MAAA,EAAO;AAAA,QAClB,SAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,eAAe,OAAA,CAAQ,aAAA;AAAA,QACvB,YAAA,EAAc,MAAA,EAAQ,YAAA,IAAgB,IAAA,CAAK,QAAQ,YAAA,IAAgB,IAAA;AAAA,QACnE,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,QAC5B,IAAA,EAAM,QAAQ,IAAA,IAAQ,IAAA;AAAA,QACtB,YAAA,EAAc,QAAQ,YAAA,IAAgB,IAAA;AAAA,QACtC,UAAA,EAAY,OAAA;AAAA,QACZ,QAAA,EAAU,QAAQ,QAAA,IAAY,IAAA;AAAA,QAC9B,OAAO,IAAA,CAAK,MAAA,CAAO,cAAA,GAAkB,MAAA,EAAQ,SAAS,IAAA,GAAQ,IAAA;AAAA,QAC9D,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,QAC5B,aAAA,EAAe,QAAQ,aAAA,IAAiB,IAAA;AAAA,QACxC,SAAA,EAAW,QAAQ,SAAA,IAAa,IAAA;AAAA,QAChC,kBAAkB,IAAA,CAAK,MAAA,CAAO,iBAAA,GACzB,MAAA,EAAQ,oBAAoB,IAAA,GAC7B,IAAA;AAAA,QACJ,QAAA,EAAU,QAAQ,QAAA,IAAY,IAAA;AAAA,QAC9B,iBAAA,EAAmB,QAAQ,iBAAA,IAAqB,IAAA;AAAA,QAChD,KAAA,EAAO,QAAQ,KAAA,IAAS,IAAA;AAAA,QACxB,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,aAAA,GAAgB,UAAA,GAAa,IAAA;AAAA,QAChD,UAAA,EAAY,IAAA,CAAK,MAAA,CAAO,aAAA,GAAgB,QAAA,GAAW,IAAA;AAAA,QACnD,YAAA,EAAc,QAAQ,YAAA,IAAgB,IAAA;AAAA,QACtC,KAAA,EAAO,QAAQ,KAAA,IAAS,IAAA;AAAA,QACxB,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,cAAA,GACjB,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,GAAI,QAAQ,OAAA,IAAW,EAAC,EAAG,GAClD,EAAE,OAAA,EAAQ;AAAA,QACd,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,QAC5B,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,cAAA,GACf,CAAC,GAAG,KAAA,EAAO,GAAI,MAAA,EAAQ,KAAA,IAAS,EAAG,CAAA,GACnC;AAAA,OACN;AAGA,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAM,OAAA,EAAmD;AACvD,QAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAAA,MACpC,CAAA;AAAA,MACA,IAAA,CAAK,OAAO,EAAA,EAAI;AACd,QAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,EAAA;AACjB,QAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AACpC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,KAAA;AAAA,UACN,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,EAAE,CAAA;AAAA,UACjC,UAAA,EAAY;AAAA,SACb,CAAA;AAAA,MACH,CAAA;AAAA,MACA,QAAQ,MAAA,EAAQ;AACd,QAAA,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MACrB,CAAA;AAAA,MACA,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACrB,QAAA,MAAA,CAAO,OAAA,EAAS,QAAQ,KAAK,CAAA;AAAA,MAC/B;AAAA,KACF;AAAA,EACF;AAAA,EAEA,YAAY,QAAA,EAAwB;AAClC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAClC,IAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,QAAA,EAAU,CAAA;AAAA,EAC5B;AAAA,EAEA,aAAa,QAAA,EAAwB;AACnC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACnC,IAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,QAAA,EAAU,CAAA;AAAA,EAC5B;AACF;ACnMA,IAAM,UAAA,GAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAuCnB,IAAM,UAAA,GAAa;AAAA,EACjB,YAAA,EAAc,MAAA;AAAA,EACd,QAAA,EAAU,MAAA;AAAA,EACV,SAAA,EAAW,MAAA;AAAA,EACX,aAAA,EAAe,MAAA;AAAA,EACf,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAY;AACd,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAchB,IAAM,sBAAN,MAAmD;AAAA,EAC/C,IAAA,GAAO,QAAA;AAAA,EACC,GAAA;AAAA,EACA,QAAA;AAAA,EACT,EAAA,GAA0B,IAAA;AAAA,EAC1B,UAAA,GAAmC,IAAA;AAAA,EACnC,OAAA,uBAAc,GAAA,EAAY;AAAA,EAElC,YAAY,OAAA,EAAqC;AAC/C,IAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,QAAA,IAAY,KAAA;AAAA,EACtC;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA;AACxC,MAAA,IAAI,MAAA,KAAW,UAAA,IAAc,CAAC,IAAA,CAAK,QAAA,EAAU;AAC3C,QAAAf,oBAAAA,CAAG,UAAUF,sBAAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,MACxD;AAEA,MAAA,MAAM,EAAA,GAAK,IAAIG,qBAAAA,CAAa,MAAA,EAAQ;AAAA,QAClC,cAAA,EAAgB,KAAA;AAAA,QAChB,UAAU,IAAA,CAAK;AAAA,OAChB,CAAA;AACD,MAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AAEV,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,QAAA,EAAA,CAAG,KAAK,4BAA4B,CAAA;AACpC,QAAA,EAAA,CAAG,IAAA,CAAK;AAAA;AAAA;AAAA;AAAA,QAAA,CAIP,CAAA;AACD,QAAA,EAAA,CAAG,KAAK,UAAU,CAAA;AAClB,QAAA,IAAA,CAAK,YAAY,EAAE,CAAA;AAAA,MACrB;AACA,MAAA,IAAA,CAAK,OAAA,GAAU,YAAY,EAAE,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,QAAA,IAAA,CAAK,UAAA,GAAa,GAAG,OAAA,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAgB5B,CAAA;AAAA,MACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,IAAI,KAAA,EAAM;AAAA,MACjB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,MAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AACnB,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,CAAA,wCAAA,EAA2CiB,SAAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QAC1D,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACd,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AAAA,IAChB,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,MAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,KAAA,EAAqD;AACrE,IAAA,MAAM,KAAA,GAAQ,eAAe,KAAK,CAAA;AAClC,IAAA,MAAM,OAAO,IAAA,CAAK,UAAA;AAClB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,cAAc,gDAAgD,CAAA;AAAA,IAC1E;AACA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,GAAA;AAAA,QACH,KAAA,CAAM,EAAA;AAAA,QACN,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,QAAA;AAAA,QACN,KAAA,CAAM,UAAA;AAAA,QACN,KAAA,CAAM,MAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,UAAA,CAAW,MAAM,OAAO,CAAA;AAAA,QACxB,KAAA,CAAM,aAAA;AAAA,QACN,UAAA,CAAW,MAAM,SAAS,CAAA;AAAA,QAC1B,UAAA,CAAW,MAAM,gBAAgB,CAAA;AAAA,QACjC,UAAA,CAAW,MAAM,QAAQ,CAAA;AAAA,QACzB,KAAA,CAAM,iBAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QACN,KAAA,CAAM,UAAA;AAAA,QACN,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,OAAA;AAAA,QACN,KAAA,CAAM,aAAA;AAAA,QACN,UAAA,CAAW,MAAM,YAAY,CAAA;AAAA,QAC7B,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,QACtB,UAAA,CAAW,MAAM,OAAO,CAAA;AAAA,QACxB,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,OAAA;AAAA,QACN,UAAA,CAAW,MAAM,IAAI,CAAA;AAAA,QACrB,KAAA,CAAM,YAAA;AAAA,QACN,UAAA,CAAW,MAAM,OAAO,CAAA;AAAA,QACxB,UAAA,CAAW,MAAM,KAAK;AAAA,OACxB;AACA,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,iCAAA,EAAoCA,SAAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,QACnD,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,MAAA,EAA0D;AAC3E,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,MAAwB,EAAC;AAC/B,IAAA,EAAA,CAAG,KAAK,OAAO,CAAA;AACf,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,GAAA,CAAI,IAAA,CAAK,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,MACxC;AACA,MAAA,EAAA,CAAG,KAAK,QAAQ,CAAA;AAChB,MAAA,OAAO,GAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI;AACF,QAAA,EAAA,CAAG,KAAK,UAAU,CAAA;AAAA,MACpB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,OAAA,EAAwD;AAClE,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,SAAS,IACvC,OAAA,CAAQ,SAAA,GACR,CAAC,OAAA,CAAQ,SAAS,CAAA;AACtB,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,cAAA,EAAiB,GAAA,CAAI,GAAA,CAAI,MAAM,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7D,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,GAAG,CAAA;AAAA,IACpB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAA,UAAA,CAAY,CAAA;AACzB,MAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,IAC5B;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,KAAK,CAAA,qCAAA,CAAuC,CAAA;AACpD,MAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA;AAAA,IAC9C;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,OAAA,CAAQ,KAAK,CAAA,cAAA,CAAgB,CAAA;AAC7B,MAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,SAAS,CAAA;AAAA,IAC/B;AACA,IAAA,IAAA,CAAK,uBAAA;AAAA,MACH,OAAA;AAAA,MACA,MAAA;AAAA,MACA,cAAA;AAAA,MACA,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,IAAA,CAAK,uBAAA,CAAwB,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAQ,OAAO,CAAA;AACzE,IAAA,IAAA,CAAK,uBAAA;AAAA,MACH,OAAA;AAAA,MACA,MAAA;AAAA,MACA,eAAA;AAAA,MACA,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,EAAG;AACjC,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,CAAA,qEAAA;AAAA,SACF;AACA,QAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,MACtB;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,OAAA,CAAQ,KAAK,CAAA,sBAAA,CAAwB,CAAA;AACrC,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IACrC;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,OAAA,CAAQ,KAAK,CAAA,YAAA,CAAc,CAAA;AAC3B,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,EAAI,OAAA,CAAQ,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,OAAA,CAAQ,KAAK,CAAA,cAAA,CAAgB,CAAA;AAC7B,MAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,IAC3B;AACA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,OAAA,CAAQ,KAAK,CAAA,cAAA,CAAgB,CAAA;AAC7B,MAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,IAC3B;AAEA,IAAA,MAAM,KAAA,GAAQ,QAAQ,MAAA,GAAS,CAAA,GAAI,SAAS,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA,GAAK,EAAA;AACtE,IAAA,MAAM,OAAA,GACJ,OAAA,CAAQ,MAAA,KAAW,aAAA,GAAgB,aAAA,GAAgB,WAAA;AACrD,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,KAAY,KAAA,GAAQ,KAAA,GAAQ,MAAA;AACpD,IAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AAEjC,IAAA,MAAM,QAAA,GAAW,GACd,OAAA,CAAQ,CAAA,2CAAA,EAA8C,KAAK,CAAA,CAAE,CAAA,CAC7D,GAAA,CAAI,GAAG,MAAM,CAAA;AAChB,IAAA,MAAM,OAAO,EAAA,CACV,OAAA;AAAA,MACC,kCAAkC,KAAK;AAAA,kBAAA,EAC3B,OAAO,IAAI,OAAO;AAAA,yBAAA;AAAA,KAEhC,CACC,GAAA,CAAI,GAAG,MAAA,EAAQ,OAAO,MAAM,CAAA;AAE/B,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA;AAAA,MAC3B,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA;AAAA,MACxB,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,EAAA,EAA4C;AACzD,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,MAAM,EAAA,CACT,OAAA,CAAQ,CAAA,2CAAA,CAA6C,CAAA,CACrD,IAAI,EAAE,CAAA;AACT,IAAA,OAAO,GAAA,GAAM,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA;AAAA,EACjC;AAAA,EAEA,MAAM,YAAY,MAAA,EAGE;AAClB,IAAA,MAAM,EAAA,GAAK,KAAK,SAAA,EAAU;AAC1B,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,OAAA,CAAQ,KAAK,CAAA,cAAA,CAAgB,CAAA;AAC7B,MAAA,MAAA,CAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,IAC1B;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,OAAA,CAAQ,KAAK,CAAA,aAAA,CAAe,CAAA;AAC5B,MAAA,MAAA,CAAO,IAAA,CAAK,OAAO,SAAS,CAAA;AAAA,IAC9B;AACA,IAAA,MAAM,KAAA,GAAQ,QAAQ,MAAA,GAAS,CAAA,MAAA,EAAS,QAAQ,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA,GAAK,EAAA;AAClE,IAAA,MAAM,GAAA,GAAM,GACT,OAAA,CAAQ,CAAA,2CAAA,EAA8C,KAAK,CAAA,CAAE,CAAA,CAC7D,GAAA,CAAI,GAAG,MAAM,CAAA;AAChB,IAAA,OAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,EACrB;AAAA,EAEQ,SAAA,GAA0B;AAChC,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,MAAA,MAAM,IAAI,cAAc,qCAAqC,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA,EAEQ,YAAY,EAAA,EAAwB;AAC1C,IAAA,MAAM,OAAA,GAAU,YAAY,EAAE,CAAA;AAC9B,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,QAAA,EAAA,CAAG,IAAA,CAAK,CAAA,wCAAA,EAA2C,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MACpE;AAAA,IACF;AACA,IAAA,EAAA,CAAG,IAAA,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAOJ,cAAc;AAAA,IAAA,CACjB,CAAA;AAAA,EACH;AAAA,EAEQ,uBAAA,CACN,OAAA,EACA,MAAA,EACA,MAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AAC7B,MAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AACpB,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,IAAA,CAAM,CAAA;AAC5B,IAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EACnB;AAAA,EAEQ,YAAY,GAAA,EAAqB;AACvC,IAAA,IAAI,GAAA,KAAQ,YAAY,OAAO,UAAA;AAC/B,IAAA,OAAOpB,sBAAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,GAAA,GAAMA,uBAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,GAAG,CAAA;AAAA,EACrE;AACF;AAiCA,SAAS,eAAe,KAAA,EAA4C;AAClE,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA,CAAM,EAAA,IAAM,QAAA,EAAS;AAAA,IACzB,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,MAAA,EAAO;AAAA,IACrC,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,QAAA,EAAU,MAAM,QAAA,IAAY,IAAA;AAAA,IAC5B,UAAA,EAAY,MAAM,UAAA,IAAc,IAAA;AAAA,IAChC,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,IACtB,OAAA,EAAS,MAAM,OAAA,IAAW,IAAA;AAAA,IAC1B,aAAA,EAAe,MAAM,aAAA,IAAiB,IAAA;AAAA,IACtC,SAAA,EAAW,MAAM,SAAA,IAAa,IAAA;AAAA,IAC9B,gBAAA,EAAkB,MAAM,gBAAA,IAAoB,IAAA;AAAA,IAC5C,QAAA,EAAU,MAAM,QAAA,IAAY,IAAA;AAAA,IAC5B,iBAAA,EAAmB,MAAM,iBAAA,IAAqB,IAAA;AAAA,IAC9C,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,IACtB,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,IACtB,UAAA,EAAY,MAAM,UAAA,IAAc,IAAA;AAAA,IAChC,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,aAAA,EAAe,MAAM,aAAA,IAAiB,IAAA;AAAA,IACtC,YAAA,EAAc,MAAM,YAAA,IAAgB,IAAA;AAAA,IACpC,OAAA,EAAS,MAAM,OAAA,IAAW,IAAA;AAAA,IAC1B,IAAA,EAAM,MAAM,IAAA,IAAQ,IAAA;AAAA,IACpB,YAAA,EAAc,MAAM,YAAA,IAAgB,IAAA;AAAA,IACpC,YAAA,EAAc,MAAM,YAAA,IAAgB,IAAA;AAAA,IACpC,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,IACtB,OAAA,EAAS,MAAM,OAAA,IAAW,IAAA;AAAA,IAC1B,OAAA,EAAS,MAAM,OAAA,IAAW,IAAA;AAAA,IAC1B,KAAA,EAAO,MAAM,KAAA,IAAS;AAAA,GACxB;AACF;AAEA,SAAS,WAAW,GAAA,EAA0B;AAC5C,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,YAAY,GAAA,CAAI,WAAA;AAAA,IAChB,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,OAAA,EAAS,SAAA,CAAU,GAAA,CAAI,YAAY,CAAA;AAAA,IACnC,eAAe,GAAA,CAAI,cAAA;AAAA,IACnB,SAAA,EAAW,SAAA,CAAU,GAAA,CAAI,eAAe,CAAA;AAAA,IACxC,gBAAA,EAAkB,SAAA,CAAU,GAAA,CAAI,sBAAsB,CAAA;AAAA,IACtD,QAAA,EAAU,SAAA,CAAU,GAAA,CAAI,aAAa,CAAA;AAAA,IACrC,mBAAmB,GAAA,CAAI,kBAAA;AAAA,IACvB,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,YAAY,GAAA,CAAI,WAAA;AAAA,IAChB,WAAW,GAAA,CAAI,UAAA;AAAA,IACf,SAAS,GAAA,CAAI,QAAA;AAAA,IACb,eAAe,GAAA,CAAI,eAAA;AAAA,IACnB,YAAA,EAAc,IAAI,YAAA,IAAgB,IAAA;AAAA,IAClC,OAAA,EAAS,IAAI,QAAA,IAAY,IAAA;AAAA,IACzB,IAAA,EAAM,SAAA,CAAU,GAAA,CAAI,SAAA,IAAa,IAAI,CAAA;AAAA,IACrC,YAAA,EAAc,IAAI,aAAA,IAAiB,IAAA;AAAA,IACnC,YAAA,EAAc,SAAA,CAAU,GAAA,CAAI,kBAAkB,CAAA;AAAA,IAI9C,KAAA,EAAO,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA;AAAA,IAC/B,OAAA,EAAS,SAAA,CAAU,GAAA,CAAI,YAAY,CAAA;AAAA,IACnC,OAAA,EAAS,SAAA;AAAA,MACP,IAAI,YAAA,IAAgB;AAAA,KACtB;AAAA,IACA,KAAA,EAAO,SAAA,CAAU,GAAA,CAAI,UAAA,IAAc,IAAI;AAAA,GACzC;AACF;AAEA,SAAS,YAAY,EAAA,EAA+B;AAClD,EAAA,MAAM,IAAA,GAAO,EAAA,CAAG,OAAA,CAAQ,qCAAqC,EAAE,GAAA,EAAI;AAGnE,EAAA,OAAO,IAAI,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAI,CAAC,CAAA;AAC5C;AAEA,SAAS,WAAW,KAAA,EAA+B;AACjD,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,IAAA;AAClD,EAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7B;AAEA,SAAS,UAAU,KAAA,EAA+B;AAChD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAASoB,UAAS,KAAA,EAAwB;AACxC,EAAA,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAC9D;;;ACxfO,IAAM,0BAAN,MAA2D;AAAA,EACvD,IAAA,GAAO,QAAA;AAAA,EACC,EAAA;AAAA,EACT,QAA+B,EAAC;AAAA,EAChC,QAAA,GAAiC,IAAA;AAAA,EACjC,MAAA,GAAS,KAAA;AAAA,EACT,WAAA,GAAoC,IAAA;AAAA,EAE5C,YAAY,OAAA,EAAyC;AACnD,IAAA,IAAA,CAAK,KAAK,IAAI,mBAAA,CAAoB,EAAE,GAAA,EAAK,OAAA,CAAQ,KAAK,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,EAAA,CAAG,IAAA,EAAK;AAAA,IAClC;AACA,IAAA,MAAM,IAAA,CAAK,WAAA;AACX,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,MAAM,KAAK,KAAA,EAAM;AACjB,IAAA,MAAM,IAAA,CAAK,GAAG,KAAA,EAAM;AACpB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AAAA,EAEA,KAAK,KAAA,EAAkC;AACrC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,KAAK,KAAK,CAAA;AACrB,IAAA,KAAK,KAAK,aAAA,EAAc;AAAA,EAC1B;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAK,QAAA,EAAU;AAC7C,MAAA,MAAM,KAAK,aAAA,EAAc;AACzB,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,MAAM,IAAA,CAAK,QAAA;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,OAAA,EAAwD;AAClE,IAAA,MAAM,KAAK,IAAA,EAAK;AAChB,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,KAAA,CAAM,OAAO,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAM,SAAS,EAAA,EAA4C;AACzD,IAAA,MAAM,KAAK,IAAA,EAAK;AAChB,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,QAAA,CAAS,EAAE,CAAA;AAAA,EAC5B;AAAA,EAEQ,aAAA,GAA+B;AACrC,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IACd;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,EAAS,CAAE,QAAQ,MAAM;AAC5C,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,IAClB,CAAC,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,MAAc,QAAA,GAA0B;AACtC,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAK,IAAA,EAAK;AAChB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,MAAM,CAAA;AACpD,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,IAAA,CAAK,EAAA,CAAG,YAAA,KAAiB,UAAA,EAAY;AAC9C,QAAA,MAAM,IAAA,CAAK,EAAA,CAAG,YAAA,CAAa,KAAK,CAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,UAAA,MAAM,IAAA,CAAK,EAAA,CAAG,WAAA,CAAY,KAAK,CAAA;AAAA,QACjC;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAGR;AAAA,EACF;AACF;ACtEO,IAAM,2BAAN,MAA6D;AAAA,EACzD,IAAA,GAAO,QAAA;AAAA,EACC,SAAA;AAAA,EACT,KAAA,GAAQ,KAAA;AAAA,EAEhB,YAAY,OAAA,EAA2C;AACrD,IAAA,IAAA,CAAK,SAAA,GACH,SAAS,SAAA,IACTpB,sBAAAA,CAAK,QAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,UAAA,EAAY,aAAa,CAAA;AAAA,EACzD;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAAE,qBAAG,SAAA,CAAU,IAAA,CAAK,WAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,EACf;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,MAAM,UAAA,CACJ,IAAA,EACA,UAAA,EACA,OAAA,EACyB;AACzB,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,oBAAA,CAAqB,IAAI,CAAA;AAEzB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AACnC,IAAA,IAAIA,oBAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,eAAe,IAAI,CAAA,mFAAA;AAAA,OACrB;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GAAiB,cAAc,UAAU,CAAA;AAC/C,IAAA,IAAI,mBAAmB,UAAA,EAAY;AACjC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,CAACA,oBAAAA,CAAG,UAAA,CAAW,cAAc,CAAA,EAAG;AAClC,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA;AAAA;AAAA,6BAAA,EAAyE,cAAc;AAAA;AAAA,qEAAA;AAAA,OACzF;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AAC3C,IAAA,MAAM,gBAAA,CAAiB,gBAAgB,YAAY,CAAA;AAEnD,IAAA,MAAM,KAAA,GAAQA,oBAAAA,CAAG,QAAA,CAAS,YAAY,CAAA;AACtC,IAAA,MAAMH,KAAAA,GAAyB;AAAA,MAC7B,IAAA;AAAA,MACA,WAAA,EAAa,SAAS,WAAA,IAAe,IAAA;AAAA,MACrC,WAAW,MAAA,EAAO;AAAA,MAClB,UAAA,EAAY,WAAA;AAAA,MACZ,UAAU,IAAA,CAAK,IAAA;AAAA,MACf,YAAA;AAAA,MACA,UAAA,EAAY,cAAA;AAAA,MACZ,WAAW,KAAA,CAAM;AAAA,KACnB;AACA,IAAAG,oBAAAA,CAAG,cAAc,QAAA,EAAU,IAAA,CAAK,UAAUH,KAAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG,MAAM,CAAA;AAChE,IAAA,OAAOA,KAAAA;AAAA,EACT;AAAA,EAEA,MAAM,QAAA,CAAS,IAAA,EAAc,UAAA,EAA6C;AACxE,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,MAAMA,KAAAA,GAAO,MAAM,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAC1C,IAAA,IAAI,CAACA,KAAAA,EAAM;AACT,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,YAAA,EAAe,IAAI,CAAA,eAAA,CAAiB,CAAA;AAAA,IAChE;AACA,IAAA,MAAM,cAAA,GAAiB,cAAc,UAAU,CAAA;AAC/C,IAAA,IAAI,mBAAmB,UAAA,EAAY;AACjC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAAG,oBAAAA,CAAG,UAAUF,sBAAAA,CAAK,OAAA,CAAQ,cAAc,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAE9D,IAAA,KAAA,MAAW,MAAA,IAAU,CAAC,EAAA,EAAI,MAAA,EAAQ,MAAM,CAAA,EAAG;AACzC,MAAA,MAAM,IAAA,GAAO,CAAA,EAAG,cAAc,CAAA,EAAG,MAAM,CAAA,CAAA;AACvC,MAAA,IAAIE,oBAAAA,CAAG,UAAA,CAAW,IAAI,CAAA,EAAG;AACvB,QAAAA,qBAAG,MAAA,CAAO,IAAA,EAAM,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,MACjC;AAAA,IACF;AACA,IAAA,MAAM,gBAAA,CAAiBH,KAAAA,CAAK,YAAA,EAAc,cAAc,CAAA;AACxD,IAAA,OAAOA,KAAAA;AAAA,EACT;AAAA,EAEA,MAAM,iBAAiB,IAAA,EAAgC;AACrD,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AACnC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AAC3C,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,IAAIG,oBAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAAA,qBAAG,MAAA,CAAO,QAAA,EAAU,EAAE,KAAA,EAAO,MAAM,CAAA;AACnC,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ;AACA,IAAA,IAAIA,oBAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,MAAAA,qBAAG,MAAA,CAAO,YAAA,EAAc,EAAE,KAAA,EAAO,MAAM,CAAA;AACvC,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAA,GAA6C;AACjD,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,IAAI,CAACA,oBAAAA,CAAG,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA,EAAG;AAClC,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,KAAA,GAAQA,oBAAAA,CACX,WAAA,CAAY,IAAA,CAAK,SAAS,CAAA,CAC1B,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AACpC,IAAA,MAAM,MAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAMA,qBAAG,YAAA,CAAaF,sBAAAA,CAAK,KAAK,IAAA,CAAK,SAAA,EAAW,IAAI,CAAA,EAAG,MAAM,CAAA;AACnE,QAAA,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAmB,CAAA;AAAA,MAC5C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,OAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,SAAA,CAAU,aAAA,CAAc,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA,EAClE;AAAA,EAEA,MAAM,cAAc,IAAA,EAA8C;AAChE,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AACnC,IAAA,IAAI,CAACE,oBAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI;AACF,MAAA,OAAO,KAAK,KAAA,CAAMA,oBAAAA,CAAG,YAAA,CAAa,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,IACrD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBAAA,CAAiB,UAAA,EAAoB,QAAA,EAAiC;AAC1E,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,MAAM,QAAA,GAAW,cAAc,UAAU,CAAA;AACzC,IAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,CAACA,oBAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,4BAA4B,QAAQ,CAAA,CAAA;AAAA,QACpC;AAAA,UACE,UAAA,EAAY;AAAA;AACd,OACF;AAAA,IACF;AACA,IAAA,MAAM,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,CACJ,IAAA,EACA,eAAA,EACiB;AACjB,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,iBAAA,CAAkB,IAAI,CAAA;AACxC,IAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,eAAA,EAAiB,IAAI,CAAA;AACjD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,IAAA,EAAc,UAAA,EAAmC;AACnE,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,IAAI,CAAA;AAC5C,IAAA,IAAI,CAACA,oBAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,cAAA,GAAiB,cAAc,UAAU,CAAA;AAC/C,IAAA,IAAI,mBAAmB,UAAA,EAAY;AACjC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAAA,oBAAAA,CAAG,UAAUF,sBAAAA,CAAK,OAAA,CAAQ,cAAc,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC9D,IAAA,KAAA,MAAW,MAAA,IAAU,CAAC,EAAA,EAAI,MAAA,EAAQ,MAAM,CAAA,EAAG;AACzC,MAAA,MAAM,IAAA,GAAO,CAAA,EAAG,cAAc,CAAA,EAAG,MAAM,CAAA,CAAA;AACvC,MAAA,IAAIE,oBAAAA,CAAG,UAAA,CAAW,IAAI,CAAA,EAAG;AACvB,QAAAA,qBAAG,MAAA,CAAO,IAAA,EAAM,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,MACjC;AAAA,IACF;AACA,IAAA,MAAM,gBAAA,CAAiB,UAAU,cAAc,CAAA;AAAA,EACjD;AAAA;AAAA,EAGA,kBAAkB,IAAA,EAAsB;AACtC,IAAA,OAAOF,sBAAAA,CAAK,KAAK,IAAA,CAAK,SAAA,EAAW,GAAG,QAAA,CAAS,IAAI,CAAC,CAAA,SAAA,CAAW,CAAA;AAAA,EAC/D;AAAA,EAEQ,SAAS,IAAA,EAAsB;AACrC,IAAA,OAAOA,sBAAAA,CAAK,KAAK,IAAA,CAAK,SAAA,EAAW,GAAG,QAAA,CAAS,IAAI,CAAC,CAAA,KAAA,CAAO,CAAA;AAAA,EAC3D;AAAA,EAEQ,aAAa,IAAA,EAAsB;AACzC,IAAA,OAAOA,sBAAAA,CAAK,KAAK,IAAA,CAAK,SAAA,EAAW,GAAG,QAAA,CAAS,IAAI,CAAC,CAAA,GAAA,CAAK,CAAA;AAAA,EACzD;AAAA,EAEQ,YAAA,GAAqB;AAC3B,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,MAAM,IAAI,aAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SAAS,IAAA,EAAsB;AACtC,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,kBAAA,EAAoB,GAAG,CAAA;AAC7C;AAEA,SAAS,qBAAqB,IAAA,EAAoB;AAChD,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,KAAK,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACxD,IAAA,MAAM,IAAI,gBAAgB,4CAA4C,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,GAAA,EAAK;AACrB,IAAA,MAAM,IAAI,gBAAgB,2CAA2C,CAAA;AAAA,EACvE;AACF;AAEA,SAAS,cAAc,gBAAA,EAAkC;AACvD,EAAA,IAAI,gBAAA,KAAqB,YAAY,OAAO,UAAA;AAC5C,EAAA,OAAOA,sBAAAA,CAAK,UAAA,CAAW,gBAAgB,CAAA,GACnC,gBAAA,GACAA,uBAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,gBAAgB,CAAA;AAClD;AAMA,eAAe,gBAAA,CACb,YACA,QAAA,EACe;AACf,EAAAE,oBAAAA,CAAG,UAAUF,sBAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACxD,EAAA,IAAIE,oBAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,IAAAA,qBAAG,MAAA,CAAO,QAAA,EAAU,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,MAAA,GAA8B,IAAA;AAClC,EAAA,IAAI,IAAA,GAA4B,IAAA;AAChC,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAIC,sBAAa,UAAU,CAAA;AACpC,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,KAAK,kCAAkC,CAAA;AAAA,IAChD,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAA,GAAO,IAAIA,sBAAa,QAAQ,CAAA;AAEhC,IAAA,MAAM,WACJ,MAAA,CAGA,MAAA;AAEF,IAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,MAAA,MAAM,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAAA,IAClC,CAAA,MAAO;AAEL,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,IAAA,GAAO,IAAA;AACP,MAAAD,oBAAAA,CAAG,YAAA,CAAa,UAAA,EAAY,QAAQ,CAAA;AAAA,IACtC;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,CAAA;AAAA;AAAA,EAA4C,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;AAAA;AAAA,2EAAA,CAAA;AAAA,MAClG,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,KACtD;AAAA,EACF,CAAA,SAAE;AACA,IAAA,IAAI;AACF,MAAA,MAAA,EAAQ,KAAA,EAAM;AAAA,IAChB,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAI;AACF,MAAA,IAAA,EAAM,KAAA,EAAM;AAAA,IACd,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;ACvTA,SAASmB,cAAAA,CACP,QACA,KAAA,EACS;AACT,EAAA,IAAI,MAAA,CAAO,YAAA,KAAiB,KAAA,CAAM,YAAA,EAAc;AAC9C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,MAAA,IAAa,MAAA,CAAO,KAAA,KAAU,MAAM,KAAA,EAAO;AAC9D,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,IAAI,MAAA,CAAO,KAAA,GAAQ,CAAC,MAAA,CAAO,KAAK,CAAA;AACzE,EAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IACZ,CAAC,CAAA,KAAyB,CAAA,KAAM,GAAA,IAAO,MAAM,KAAA,CAAM;AAAA,GACrD;AACF;AAEO,IAAM,yBAAN,MAAyD;AAAA,EAC7C,OAAA,GAAU,IAAIC,mBAAA,EAAa;AAAA,EAC3B,aAAA,uBAAoB,GAAA,EAA0B;AAAA,EACvD,MAAA,GAAS,CAAA;AAAA,EACT,MAAA,GAAS,KAAA;AAAA,EAEjB,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,OAAA,CAAQ,gBAAgB,CAAC,CAAA;AAC9B,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,KAAA,KAA6B;AACtD,MAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,aAAA,CAAc,MAAA,EAAO,EAAG;AAC7C,QAAA,IAAI,CAACD,cAAAA,CAAc,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA,EAAG;AACrC,UAAA;AAAA,QACF;AACA,QAAA,IAAI;AACF,UAAA,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,QACpB,SAAS,KAAA,EAAO;AAEd,UAAA,OAAA,CAAQ,KAAA;AAAA,YACN,qCAAA;AAAA,YACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,WAC3C;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,SAAA,CACE,QACA,QAAA,EACa;AACb,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AACA,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,EAAA;AAChB,IAAA,IAAA,CAAK,cAAc,GAAA,CAAI,EAAA,EAAI,EAAE,MAAA,EAAQ,UAAU,CAAA;AAC/C,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,aAAA,CAAc,OAAO,EAAE,CAAA;AAAA,IAC9B,CAAA;AAAA,EACF;AAAA,EAEA,KAAK,KAAA,EAAgC;AACnC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,KAAK,CAAA;AAAA,EACnC;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AACzB,IAAA,IAAA,CAAK,QAAQ,kBAAA,EAAmB;AAAA,EAClC;AACF,CAAA;;;AC6EO,IAAM,UAAN,MAA8C;AAAA,EAG3C,WAAA,GAAc,KAAA;AAAA,EACd,OAAA,GAAgC,IAAA;AAAA,EAChC,YAAA,GAA8B,IAAA;AAAA,EAC9B,OAAA,GAAkC,IAAA;AAAA,EAClC,SAAA,GAAsC,IAAA;AAAA,EACtC,GAAA,GAA0B,IAAA;AAAA,EAC1B,WAAA,GAA0C,IAAA;AAAA,EAC1C,QAAA,GAAoC,IAAA;AAAA,EACpC,aAAA,GAA8C,IAAA;AAAA,EAC9C,GAAA,GAA0B,IAAA;AAAA,EAC1B,MAAA,GAAgC,IAAA;AAAA,EAChC,KAAA,GAA8B,IAAA;AAAA,EAC9B,QAAA,GAAoC,IAAA;AAAA,EACpC,kBAAmC,EAAC;AAAA,EACpC,mBAAA,GAAqC,IAAA;AAAA,EAC5B,UAAA,GAAa,IAAI,UAAA,EAAW;AAAA,EACrC,SAAA;AAAA,EACA,kBAAA,GAAgD,IAAA;AAAA,EAChD,YAAA,GAA8B,IAAA;AAAA,EACrB,QAAA,GAAW,IAAI,4BAAA,EAA6B;AAAA,EACrD,gBAAA,GAA4C,IAAA;AAAA,EAC5C,eAAA,GAA2C,IAAA;AAAA,EAC3C,eAA2C,yBAAA,EAA0B;AAAA,EACrE,uBACN,2BAAA,EAA4B;AAAA,EACtB,YAAA,GAAyC,IAAA;AAAA,EAKjD,YAAY,OAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,CAAiB,IAAA,EAAM,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,CAAA;AAE5E,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,uBAAuB,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,eAAe,SAAA,CAAU,YAAA;AAC9B,IAAA,IAAA,CAAK,YAAA,GAAe,yBAAA,CAA0B,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAA;AACtE,IAAA,IAAA,CAAK,oBAAA,GAAuB,2BAAA;AAAA,MAC1B,SAAA,CAAU;AAAA,KACZ;AAEA,IAAA,MAAM,eAAe,SAAA,CAAU,OAAA;AAC/B,IAAA,IAAA,CAAK,UAAU,iBAAA,CAAkB,YAAY,CAAA,GACzC,YAAA,GACA,sBAAsB,YAAA,EAAc;AAAA,MAClC,aAAa,SAAA,CAAU;AAAA,KACxB,CAAA;AAEL,IAAA,IAAI,CAAC,iBAAA,CAAkB,YAAY,CAAA,EAAG;AACpC,MAAA,IAAA,CAAK,YAAA,GAAe,mBAAmB,YAAY,CAAA;AAAA,IACrD,CAAA,MAAA,IAAW,wBAAwB,qBAAA,EAAuB;AACxD,MAAA,IAAA,CAAK,eAAe,YAAA,CAAa,IAAA;AAAA,IACnC;AAEA,IAAA,MAAM,SAAA,GAAY,oBAAoB,SAAA,CAAU,SAAS,IACrD,SAAA,CAAU,SAAA,GACV,uBAAA,CAAwB,SAAA,CAAU,SAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,YAAA,GAAe,SAAA;AACpB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAEjB,IAAA,IAAI,UAAU,GAAA,EAAK;AACjB,MAAA,IAAA,CAAK,GAAA,GAAM,cAAc,SAAA,CAAU,GAAG,IAClC,SAAA,CAAU,GAAA,GACV,iBAAA,CAAkB,SAAA,CAAU,GAAG,CAAA;AACnC,MAAA,IAAA,CAAK,WAAA,GACH,SAAA,CAAU,WAAA,IAAe,yBAAA,CAA0B,KAAK,GAAG,CAAA;AAAA,IAC/D,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,WAAA,GAAc,UAAU,WAAA,IAAe,IAAA;AAAA,IAC9C;AAEA,IAAA,IAAA,CAAK,QAAA,GAAW,UAAU,QAAA,IAAY,IAAA;AACtC,IAAA,IAAA,CAAK,aAAA,GAAgB,UAAU,aAAA,IAAiB,IAAA;AAChD,IAAA,IAAA,CAAK,GAAA,GAAM,UAAU,GAAA,IAAO,IAAA;AAC5B,IAAA,IAAA,CAAK,MAAA,GAAS,UAAU,MAAA,IAAU,IAAA;AAClC,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,KAAA;AAAA,IACzB;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,UAAU,QAAA,IAAY,IAAA;AACtC,IAAA,IAAA,CAAK,eAAA,GAAkB,SAAA,CAAU,SAAA,IAAa,EAAC;AAG/C,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,sBAAA,EAAuB;AAEnD,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,IAAI,mBAAA,CAAoB,SAAA,CAAU,SAAS,CAAA,EAAG;AAC5C,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,CAAiB,SAAA,CAAU,SAAA,EAAW;AAAA,UACzD,OAAA,EAAS;AAAA,SACX,EAAG,EAAE,YAAA,EAAc,SAAA,CAAU,cAAc,CAAA;AAAA,MAC7C,CAAA,MAAO;AACL,QAAA,MAAM,GAAA,GACJ,UAAU,SAAA,CAAU,QAAA,CAAS,OAC7B,SAAA,CAAU,SAAA,CAAU,SAAS,gBAAA,IAC7B,EAAA;AACF,QAAA,MAAM,QAAA,GAAW,IAAI,uBAAA,CAAwB,EAAE,KAAK,CAAA;AACpD,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,CAAiB,QAAA,EAAU,UAAU,SAAA,EAAW;AAAA,UACnE,cAAc,SAAA,CAAU;AAAA,SACzB,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,kBAAA,GACH,SAAA,CAAU,UAAA,IACV,IAAI,wBAAA,CAAyB;AAAA,MAC3B,WAAW,SAAA,CAAU;AAAA,KACtB,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,OAAA,EAAqC;AAC9C,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,OAAA,EAAS;AACpC,MAAA,MAAM,IAAI,oBAAoB,gCAAgC,CAAA;AAAA,IAChE;AAEA,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,oBAAoB,OAAO,CAAA;AAAA,IACzC,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,KAAA,YAAiB,kBAAA,IAAsB,KAAA,YAAiB,eAAA,EAAiB;AAC3E,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,0BAA0B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QAChF,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,eAAe,SAAA,CAAU,YAAA;AAC9B,IAAA,IAAA,CAAK,OAAA,GAAU,qBAAA,CAAsB,SAAA,CAAU,QAAQ,CAAA;AACvD,IAAA,IAAA,CAAK,YAAA,GAAe,kBAAA,CAAmB,SAAA,CAAU,QAAQ,CAAA;AACzD,IAAA,IAAA,CAAK,SAAA,GAAY,uBAAA,CAAwB,SAAA,CAAU,SAAS,CAAA;AAC5D,IAAA,IAAI,UAAU,GAAA,EAAK;AACjB,MAAA,IAAA,CAAK,GAAA,GAAM,iBAAA,CAAkB,SAAA,CAAU,GAAG,CAAA;AAC1C,MAAA,IAAA,CAAK,WAAA,GAAc,yBAAA,CAA0B,IAAA,CAAK,GAAG,CAAA;AAAA,IACvD;AACA,IAAA,IAAI,CAAC,KAAK,kBAAA,EAAoB;AAC5B,MAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,wBAAA,EAAyB;AAAA,IACzD;AAEA,IAAA,MAAM,KAAK,KAAA,EAAM;AAAA,EACnB;AAAA;AAAA,EAGA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,MAAM,IAAA,CAAK,OAAA;AACX,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,KAAK,IAAA,EAAK;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,OAAA;AAAA,IACb,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,MAAc,IAAA,GAAsB;AAClC,IAAA,IAAI,CAAC,KAAK,OAAA,IAAW,CAAC,KAAK,SAAA,IAAa,CAAC,KAAK,YAAA,EAAc;AAC1D,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,QAAQ,IAAA,EAAK;AACxB,MAAA,MAAM,IAAA,CAAK,UAAU,IAAA,EAAK;AAC1B,MAAA,MAAM,IAAA,CAAK,oBAAoB,IAAA,EAAK;AACpC,MAAA,MAAM,IAAA,CAAK,OAAO,IAAA,EAAK;AAGvB,MAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,oBAAA,CAAqB,OAAA,EAAS;AAC1D,QAAA,IAAI,IAAA,CAAK,mBAAmB,qBAAA,EAAuB;AACjD,UAAA,MAAME,UAAS,IAAA,CAAK,OAAA;AACpB,UAAA,MAAM,QAAQ,IAAI,yBAAA,CAA0B,MAAMA,OAAAA,CAAO,aAAY,EAAG;AAAA,YACtE,KAAA,EAAO,KAAK,oBAAA,CAAqB;AAAA,WAClC,CAAA;AACD,UAAA,IAAA,CAAK,SAAA,GAAY,kBAAA;AAAA,YACf,IAAA,CAAK,YAAA;AAAA,YACL,KAAA;AAAA,YACA,IAAA,CAAK;AAAA,WACP;AAAA,QACF,CAAA,MAAA,IAAW,IAAA,CAAK,OAAA,YAAmB,uBAAA,EAAyB;AAG1D,UAAA,IAAA,CAAK,SAAA,GAAY,kBAAA;AAAA,YACf,IAAA,CAAK,YAAA;AAAA,YACL,IAAI,2BAAA,CAA4B,MAAM,IAAA,EAAM;AAAA,cAC1C,KAAA,EAAO,KAAK,oBAAA,CAAqB,KAAA;AAAA,cACjC,OAAA,EAAS;AAAA,aACV,CAAA;AAAA,YACD,IAAA,CAAK;AAAA,WACP;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,SAAA,GAAY,kBAAA;AAAA,YACf,IAAA,CAAK,YAAA;AAAA,YACL,IAAI,yBAAA,CAA0B;AAAA,cAC5B,KAAA,EAAO,KAAK,oBAAA,CAAqB;AAAA,aAClC,CAAA;AAAA,YACD,IAAA,CAAK;AAAA,WACP;AAAA,QACF;AAAA,MACF;AAIA,MAAA,IAAI,IAAA,CAAK,mBAAmB,uBAAA,EAAyB;AAAA,MAErD;AAEA,MAAA,IAAI,IAAA,CAAK,mBAAmB,qBAAA,EAAuB;AACjD,QAAA,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,CAAC,GAAA,KAAQ;AAEnC,UAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,KAAA,EAAO;AACnD,YAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,GAAG,CAAA,CAAE,CAAA;AAAA,UAClC;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,OAAA,CAAQ,sBAAA,EAAuB;AAC7D,MAAA,IAAI,UAAA,KAAe,IAAA,IAAQ,UAAA,GAAa,CAAA,EAAG;AACzC,QAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,UAAU,CAAA;AAChD,QAAA,IAAA,CAAK,mBAAA,GAAsB,UAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,SAAA,CAAU,QAAA,EAAS;AAC5C,QAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,KAAA,CAAM,UAAU,CAAA;AACtD,QAAA,IAAA,CAAK,sBAAsB,KAAA,CAAM,UAAA;AAAA,MACnC;AACA,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA,IAAA,CAAK,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAAA,IAC9C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,KAAK,KAAA,EAAO,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC/C,MAAA,MAAM,KAAK,OAAA,CAAQ,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAChD,MAAA,MAAM,KAAK,SAAA,CAAU,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAClD,MAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AACnB,MAAA,IACE,KAAA,YAAiB,kBAAA,IACjB,KAAA,YAAiB,mBAAA,IACjB,iBAAiB,eAAA,EACjB;AACA,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,0BAA0B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QAChF,EAAE,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,QAAQ,MAAA;AAAU,OACtD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAAS,OAAA,EAAmD;AAChE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,CAAY,SAAS,KAAK,CAAA;AACpD,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,QAAA,EAAU,KAAK,OAAA,EAAS,IAAA;AAAA,QACxB,SAAA,EAAW,CAAC,MAAA,CAAO,EAAE,CAAA;AAAA,QACrB,aAAA,EAAe,CAAA;AAAA,QACf,iBAAA,EAAmB,KAAK,SAAA,EAAW,KAAA;AAAA,QACnC,KAAA,EAAO,KAAK,SAAA,EAAW,KAAA;AAAA,QACvB,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,SAAS,MAAA,CAAO,KAAA;AAAA,QAChB,IAAA,EAAM,aAAA,CAAc,MAAA,CAAO,QAAQ,CAAA;AAAA,QACnC,OAAO,EAAE,YAAA,EAAc,OAAO,MAAA,EAAQ,MAAA,EAAQ,OAAO,MAAA;AAAO,OAC7D,CAAA;AACD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA;AAC/C,MAAA,MAAM,kBAAA,CAAmB,YAAY,KAAK,CAAA;AAAA,IAC5C;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,cAAc,KAAA,EAAqD;AACvE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,eAAe,CAAA;AACnD,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC/C,QAAA,MAAM,IAAI,gBAAgB,0CAA0C,CAAA;AAAA,MACtE;AAEA,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS;AACrC,QAAA,MAAM,GAAA,GAAM,yBAAA;AAAA,UACV,IAAA,CAAK,UAAU,IAAA,CAAK;AAAA,SACtB;AACA,QAAA,OAAO,GAAA,CAAI,OAAA;AAAA,MACb,CAAC,CAAA,IAAK,IAAA,CAAK,YAAA,CAAa,OAAA;AAExB,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,MAAwB,EAAC;AAC/B,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AACrC,UAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,CAAY,MAAM,KAAK,CAAA;AACjD,UAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,YACZ,QAAA,EAAU,KAAK,OAAA,EAAS,IAAA;AAAA,YACxB,SAAA,EAAW,CAAC,MAAA,CAAO,EAAE,CAAA;AAAA,YACrB,aAAA,EAAe,CAAA;AAAA,YACf,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,SAAS,MAAA,CAAO,KAAA;AAAA,YAChB,IAAA,EAAM,aAAA,CAAc,MAAA,CAAO,QAAQ,CAAA;AAAA,YACnC,KAAA,EAAO,EAAE,YAAA,EAAc,MAAA,CAAO,MAAA;AAAO,WACtC,CAAA;AACD,UAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,QACjB;AACA,QAAA,MAAA,CAAO,OAAA,CAAQ;AAAA,UACb,QAAA,EAAU,KAAK,OAAA,EAAS,IAAA;AAAA,UACxB,WAAW,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,UAC9B,eAAe,GAAA,CAAI,MAAA;AAAA,UACnB,iBAAA,EAAmB,KAAK,SAAA,EAAW,KAAA;AAAA,UACnC,KAAA,EAAO,KAAK,SAAA,EAAW,KAAA;AAAA,UACvB,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAC;AAAA,SAC5D,CAAA;AACD,QAAA,IAAA,CAAK,UAAA,CAAW;AAAA,UACd,KAAA,EAAO,UAAA;AAAA,UACP,cAAc,IAAA,CAAK,YAAA;AAAA,UACnB,KAAA,EAAO,WAAA,CAAY,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,IAAA,EAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,CAAG,KAAA;AAAA,UAClE,UAAU,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,UAC7B,WAAW,MAAA,EAAO;AAAA,UAClB,OAAA,EAAS,OAAO,OAAA,CAAQ,OAAA;AAAA,UACxB,SAAA,EAAW,KAAK,SAAA,CAAU;AAAA,SAC3B,CAAA;AACD,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,cAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AAErE,MAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AACnC,QAAA,oBAAA,CAAqB,IAAA,CAAK,KAAA,EAAO,CAAA,MAAA,EAAS,CAAC,CAAA,OAAA,CAAS,CAAA;AACpD,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,OAAO,IAAA,CAAK,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC1D,UAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,MAAA,EAAS,CAAC,CAAA,+BAAA,CAAiC,CAAA;AAAA,QACvE;AACA,QAAA,oBAAA,CAAqB,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAA,MAAA,EAAS,CAAC,CAAA,cAAA,CAAgB,CAAA;AAClE,QAAA,OAAO,KAAK,OAAA,CAAQ,IAAA;AAAA,MACtB,CAAC,CAAA;AACD,MAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,SAAA,EAAW,KAAK,CAAA;AAChD,MAAA,MAAA,CAAO,IAAA,CAAK,aAAA,EAAe,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACrD,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,IAAA,CAAK,yBAAA,CAA0B,OAAO,MAAM,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAM,YAAY,MAAA,EAAO;AACzB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,MAAO;AAAA,QACrC,IAAI,QAAA,EAAS;AAAA,QACb,YAAA;AAAA,QACA,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK;AAAA,QACvB,WAAA,EAAa,KAAK,OAAA,CAAQ,IAAA;AAAA,QAC1B,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,EAAC;AAAA,QAC5B,SAAA,EAAW,QAAQ,CAAC,CAAA;AAAA,QACpB,SAAA,EAAW,SAAA;AAAA,QACX,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa;AAAA;AAAA,OACf,CAAE,CAAA;AAEF,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AACzC,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AACrC,QAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,UACZ,UAAU,OAAA,CAAQ,IAAA;AAAA,UAClB,SAAA,EAAW,CAAC,MAAA,CAAO,CAAC,EAAG,EAAE,CAAA;AAAA,UACzB,aAAA,EAAe,CAAA;AAAA,UACf,QAAA,EAAU,MAAA,CAAO,CAAC,CAAA,CAAG,QAAA;AAAA,UACrB,OAAA,EAAS,MAAA,CAAO,CAAC,CAAA,CAAG,KAAA;AAAA,UACpB,IAAA,EAAM,aAAA,CAAc,MAAA,CAAO,CAAC,EAAG,QAAQ;AAAA,SACxC,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AAChD,QAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,mBAAA,CAAoB,MAAM,CAAA;AACvD,QAAA,MAAA,CAAO,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACzD,QAAA,OAAO,MAAA;AAAA,MACT,CAAC,CAAA;AAED,MAAA,MAAM,OAAA,GAA4B,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,QACnD,GAAG,eAAe,GAAG,CAAA;AAAA,QACrB,MAAA,EAAQ;AAAA,OACV,CAAE,CAAA;AACF,MAAA,MAAA,CAAO,OAAA,CAAQ;AAAA,QACb,UAAU,OAAA,CAAQ,IAAA;AAAA,QAClB,WAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,QAClC,eAAe,OAAA,CAAQ,MAAA;AAAA,QACvB,mBAAmB,SAAA,CAAU,KAAA;AAAA,QAC7B,OAAO,SAAA,CAAU,KAAA;AAAA,QACjB,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAC;AAAA,OAC5D,CAAA;AACD,MAAA,IAAA,CAAK,UAAA,CAAW;AAAA,QACd,KAAA,EAAO,UAAA;AAAA,QACP,YAAA;AAAA,QACA,KAAA,EAAO,WAAA,CAAY,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,IAAA,EAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,CAAG,KAAA;AAAA,QAClE,UAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,QACjC,SAAA;AAAA,QACA,OAAA,EAAS,OAAO,OAAA,CAAQ,OAAA;AAAA,QACxB,SAAA,EAAW,KAAK,SAAA,CAAU;AAAA,OAC3B,CAAA;AACD,MAAA,OAAO,OAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,QAAQ,KAAK,CAAA;AACpB,MAAA,MAAM,kBAAA,CAAmB,iBAAiB,KAAK,CAAA;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,OAAA,EAIe;AAC1B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,cAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AACrE,MAAA,oBAAA,CAAqB,OAAA,CAAQ,IAAI,IAAI,CAAA;AACrC,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,aAAA,CAAc,QAAQ,EAAA,CAAG,IAAA,IAAQ,YAAY,CAAA;AAC5E,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,kBAAA,EAAqB,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,MACjE;AAEA,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,EAAS,IAAA,IAAQ,QAAA,CAAS,YAAA;AACtD,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,oBAAA,CAAqB,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,cAAc,CAAA;AAAA,MAC3D;AACA,MAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,QAAA,CAAS,aAAa,CAAA;AAC/D,MAAA,MAAM,QAAA,GACJ,QAAQ,QAAA,KAAa,KAAA,CAAA,GACjB,oBAAoB,YAAA,EAAc,OAAA,CAAQ,QAAQ,CAAA,GAClD,YAAA;AAEN,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,OAAA,CAAQ,YAAY,KAAA,CAAA,EAAW;AACjC,QAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,QAAA,MAAA,GAAS,MAAM,SAAA,CAAU,KAAA,CAAM,WAAW,CAAA;AAC1C,QAAA,KAAA,CAAM,IAAA,CAAK,aAAA,EAAe,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACpD,QAAA,IAAA,CAAK,yBAAA,CAA0B,OAAO,MAAM,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAM,YAAY,MAAA,EAAO;AACzB,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AAC/C,QAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,QAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,YAAA,CAAa;AAAA,UACzC,IAAI,QAAA,CAAS,EAAA;AAAA,UACb,YAAA;AAAA,UACA,WAAA,EAAa,OAAA,CAAQ,OAAA,KAAY,KAAA,CAAA,GAAY,WAAA,GAAc,KAAA,CAAA;AAAA,UAC3D,QAAA;AAAA,UACA,SAAA,EAAW,MAAA;AAAA,UACX,SAAA,EAAW,SAAA;AAAA,UACX,aACE,OAAA,CAAQ,OAAA,KAAY,KAAA,CAAA,GAChB,iBAAA,CAAkB,WAAW,CAAA,GAC7B,KAAA;AAAA,SACP,CAAA;AACD,QAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACxD,QAAA,OAAO,OAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,kBAAA,EAAqB,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,MACjE;AACA,MAAA,MAAM,MAAA,GAAyB;AAAA,QAC7B,GAAG,eAAe,GAAG,CAAA;AAAA,QACrB,MAAA,EAAQ;AAAA,OACV;AACA,MAAA,IAAA,CAAK,UAAA,CAAW;AAAA,QACd,KAAA,EAAO,QAAA;AAAA,QACP,YAAA;AAAA,QACA,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,UAAU,MAAA,CAAO,EAAA;AAAA,QACjB,SAAA;AAAA,QACA,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,QACvB,SAAA,EAAW,KAAK,SAAA,CAAU,SAAA;AAAA,QAC1B,YAAA,EAAc;AAAA,OACf,CAAA;AACD,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,OAAA,CAAQ,IAAA;AAAA,QAClB,SAAA,EAAW,CAAC,MAAA,CAAO,EAAE,CAAA;AAAA,QACrB,aAAA,EAAe,CAAA;AAAA,QACf,SAAS,MAAA,CAAO,KAAA;AAAA,QAChB,KAAA,EAAO,EAAE,YAAA,EAAc,SAAA;AAAU,OAClC,CAAA;AACD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,MAAM,kBAAA,CAAmB,UAAU,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAA,CACE,QACA,QAAA,EACa;AACb,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,IAAgB,IAAA,CAAK,YAAA;AACxC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,eAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAA8B;AAAA,MAClC,GAAG,MAAA;AAAA,MACH,YAAA,EAAc;AAAA,KAChB;AAGA,IAAA,IAAI,IAAA,CAAK,mBAAmB,uBAAA,EAAyB;AACnD,MAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,IAAU;AACpC,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,IAAA,CAAK,eAAA,GAAkB,+BAA+B,IAAa,CAAA;AAAA,QACrE;AAAA,MACF;AACA,MAAA,IAAI,KAAK,eAAA,EAAiB;AAGxB,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,SAAA,CAAU,UAAA,EAAY,QAAQ,CAAA;AAAA,MAC5D;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAK,gBAAA,EAAkB;AAC1B,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,sBAAA,EAAuB;AAAA,IACrD;AACA,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,SAAA,CAAU,UAAA,EAAY,QAAQ,CAAA;AAAA,EAC7D;AAAA,EAEQ,WAAW,KAAA,EAAgC;AACjD,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,mBAAmB,uBAAA,EAAyB;AAEnD,QAAA,MAAM,WAAW,IAAA,CAAK,eAAA;AAGtB,QAAA,IAAI,QAAA,EAAU,kBAAiB,EAAG;AAChC,UAAA,KAAK,KAAK,OAAA,CAAQ,YAAA,CAAa,KAAK,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AACrD,YAAA,OAAA,CAAQ,KAAA;AAAA,cACN,0BAAA;AAAA,cACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,aAC3C;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,gBAAA,EAAkB,KAAK,KAAK,CAAA;AAAA,IACnC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,6BAAA;AAAA,QACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,OAC3C;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAc,WAAA,CACZ,OAAA,EACA,KAAA,EACyB;AACzB,IAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,cAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AACrE,IAAA,oBAAA,CAAqB,OAAA,CAAQ,OAAO,OAAO,CAAA;AAC3C,IAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,IAAW,OAAO,OAAA,CAAQ,OAAA,CAAQ,SAAS,QAAA,EAAU;AAChE,MAAA,MAAM,IAAI,gBAAgB,+BAA+B,CAAA;AAAA,IAC3D;AACA,IAAA,oBAAA,CAAqB,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,cAAc,CAAA;AAEzD,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,QAAA,IAAY,EAAC;AACtC,IAAA,IAAI,QAAA,KAAa,QAAQ,OAAO,QAAA,KAAa,YAAY,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAChF,MAAA,MAAM,IAAI,gBAAgB,+CAA+C,CAAA;AAAA,IAC3E;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AACjC,IAAA,MAAM,IAAA,GAAO,QAAQ,OAAA,CAAQ,IAAA;AAC7B,IAAA,MAAM,MAAA,GAAS,yBAAA;AAAA,MACb,OAAA,CAAQ,MAAA,KAAW,MAAA,GAAY,OAAA,CAAQ,SAAS,IAAA,CAAK;AAAA,KACvD;AAEA,IAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK,aAAA,EAAe,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACpD,IAAA,IAAA,CAAK,yBAAA,CAA0B,OAAO,MAAM,CAAA;AAE5C,IAAA,MAAM,YAAY,MAAA,EAAO;AACzB,IAAA,MAAM,WAAA,GAAc,kBAAkB,IAAI,CAAA;AAE1C,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,MAAMC,MAAK,QAAA,EAAS;AACpB,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AAClD,QAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,QAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,YAAA,CAAa;AAAA,UACrC,EAAA,EAAAA,GAAAA;AAAA,UACA,YAAA;AAAA,UACA,KAAA;AAAA,UACA,WAAA,EAAa,IAAA;AAAA,UACb,QAAA;AAAA,UACA,SAAA,EAAW,MAAA;AAAA,UACX,SAAA,EAAW,SAAA;AAAA,UACX,SAAA,EAAW,SAAA;AAAA;AAAA,UAEX,WAAA,EAAa;AAAA,SACd,CAAA;AACD,QAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACxD,QAAA,OAAO,eAAe,GAAG,CAAA;AAAA,MAC3B,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,UAAA,CAAW;AAAA,QACd,KAAA,EAAO,UAAA;AAAA,QACP,YAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAU,MAAA,CAAO,EAAA;AAAA,QACjB,SAAA;AAAA,QACA,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,QACvB,SAAA,EAAW,KAAK,SAAA,CAAU,SAAA;AAAA,QAC1B,YAAA,EAAc;AAAA,OACf,CAAA;AACD,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,IACxC;AAGA,IAAA,IAAI,QAAA,GAA6B,IAAA;AACjC,IAAA,IACE,MAAA,CAAO,QAAA,KAAa,OAAA,IACpB,MAAA,CAAO,aAAa,eAAA,EACpB;AACA,MAAA,IAAI,OAAO,OAAA,CAAQ,uBAAA,KAA4B,UAAA,EAAY;AACzD,QAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,uBAAA;AAAA,UACvB,YAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,MAAA,GAAS,mBAAA;AAAA,QACb,mBAAA,CAAoB,SAAS,aAAa,CAAA;AAAA,QAC1C;AAAA,OACF;AACA,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AAC/C,QAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,QAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,YAAA,CAAa;AAAA,UACzC,IAAI,QAAA,CAAU,EAAA;AAAA,UACd,YAAA;AAAA,UACA,QAAA,EAAU,MAAA;AAAA,UACV,SAAA,EAAW,SAAA;AAAA,UACX;AAAA,SACD,CAAA;AACD,QAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACxD,QAAA,OAAO,OAAA;AAAA,MACT,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACtB,MAAA,MAAM,MAAA,GAAS,eAAe,GAAI,CAAA;AAClC,MAAA,IAAA,CAAK,UAAA,CAAW;AAAA,QACd,KAAA,EAAO,QAAA;AAAA,QACP,YAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAU,MAAA,CAAO,EAAA;AAAA,QACjB,SAAA;AAAA,QACA,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,QACvB,SAAA,EAAW,KAAK,SAAA,CAAU,SAAA;AAAA,QAC1B,YAAA,EAAc;AAAA,OACf,CAAA;AACD,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,IACxC;AAGA,IAAA,IACE,MAAA,CAAO,QAAA,KAAa,MAAA,IACpB,MAAA,CAAO,aAAa,eAAA,EACpB;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,iBAAA;AAAA,QACtB,OAAA;AAAA,QACA,YAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA,CAAO,aAAA;AAAA,QACP,MAAA,CAAO;AAAA,OACT;AACA,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,MAAA,GAAS,mBAAA;AAAA,UACb,mBAAA,CAAoB,KAAK,aAAa,CAAA;AAAA,UACtC;AAAA,SACF;AACA,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AAC/C,UAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,UAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,YAAA,CAAa;AAAA,YACzC,IAAI,IAAA,CAAK,EAAA;AAAA,YACT,YAAA;AAAA,YACA,WAAA,EAAa,IAAA;AAAA,YACb,QAAA,EAAU,MAAA;AAAA,YACV,SAAA,EAAW,MAAA;AAAA,YACX,SAAA,EAAW,SAAA;AAAA,YACX;AAAA,WACD,CAAA;AACD,UAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACxD,UAAA,OAAO,OAAA;AAAA,QACT,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACtB,QAAA,MAAM,MAAA,GAAS,eAAe,GAAI,CAAA;AAClC,QAAA,IAAA,CAAK,UAAA,CAAW;AAAA,UACd,KAAA,EAAO,QAAA;AAAA,UACP,YAAA;AAAA,UACA,KAAA;AAAA,UACA,UAAU,MAAA,CAAO,EAAA;AAAA,UACjB,SAAA;AAAA,UACA,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,UACvB,SAAA,EAAW,KAAK,SAAA,CAAU,SAAA;AAAA,UAC1B,YAAA,EAAc;AAAA,SACf,CAAA;AACD,QAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,MACxC;AAAA,IACF;AAGA,IAAA,MAAM,KAAK,QAAA,EAAS;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AAClD,QAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,QAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,YAAA,CAAa;AAAA,UACrC,EAAA;AAAA,UACA,YAAA;AAAA,UACA,KAAA;AAAA,UACA,WAAA,EAAa,IAAA;AAAA,UACb,QAAA;AAAA,UACA,SAAA,EAAW,MAAA;AAAA,UACX,SAAA,EAAW,SAAA;AAAA,UACX,SAAA,EAAW,SAAA;AAAA,UACX;AAAA,SACD,CAAA;AACD,QAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACxD,QAAA,OAAO,eAAe,GAAG,CAAA;AAAA,MAC3B,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACtB,MAAA,IAAA,CAAK,UAAA,CAAW;AAAA,QACd,KAAA,EAAO,UAAA;AAAA,QACP,YAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAU,MAAA,CAAO,EAAA;AAAA,QACjB,SAAA;AAAA,QACA,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,QACvB,SAAA,EAAW,KAAK,SAAA,CAAU,SAAA;AAAA,QAC1B,YAAA,EAAc;AAAA,OACf,CAAA;AACD,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,IACxC,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,MAAA,IACE,GAAA,CAAI,aAAY,CAAE,QAAA,CAAS,QAAQ,CAAA,IACnC,OAAO,OAAA,CAAQ,uBAAA,KAA4B,UAAA,EAC3C;AACA,QAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,uBAAA;AAAA,UAC1B,YAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,MAAA,GAAS,mBAAA;AAAA,YACb,mBAAA,CAAoB,MAAM,aAAa,CAAA;AAAA,YACvC;AAAA,WACF;AACA,UAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,aAAA;AAAA,YACrB,YACE,QAAQ,YAAA,CAAa;AAAA,cACnB,IAAI,KAAA,CAAM,EAAA;AAAA,cACV,YAAA;AAAA,cACA,QAAA,EAAU,MAAA;AAAA,cACV,WAAW,MAAA,EAAO;AAAA,cAClB;AAAA,aACD,CAAA;AAAA,YACH,EAAE,WAAW,IAAA;AAAK,WACpB;AACA,UAAA,MAAM,MAAA,GAAS,eAAe,GAAI,CAAA;AAClC,UAAA,IAAA,CAAK,UAAA,CAAW;AAAA,YACd,KAAA,EAAO,QAAA;AAAA,YACP,YAAA;AAAA,YACA,KAAA;AAAA,YACA,UAAU,MAAA,CAAO,EAAA;AAAA,YACjB,WAAW,MAAA,EAAO;AAAA,YAClB,YAAA,EAAc;AAAA,WACf,CAAA;AACD,UAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,QACxC;AAAA,MACF;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,iBAAA,CACZ,OAAA,EACA,cACA,KAAA,EACA,MAAA,EACA,WACA,KAAA,EAC2B;AAC3B,IAAA,IAAI,OAAO,OAAA,CAAQ,yBAAA,KAA8B,UAAA,EAAY;AAC3D,MAAA,MAAMC,KAAAA,GAAO,MAAM,OAAA,CAAQ,yBAAA;AAAA,QACzB,MAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA;AAAM,OAClC;AACA,MAAA,IAAIC,KAAAA,GAA+C,IAAA;AACnD,MAAA,KAAA,MAAW,EAAE,GAAA,EAAK,QAAA,EAAS,IAAKD,KAAAA,EAAM;AACpC,QAAA,IAAI,GAAA,CAAI,aAAa,CAAA,EAAG;AACxB,QAAA,MAAM,GAAA,GAAM,qBAAqB,QAAQ,CAAA;AACzC,QAAA,IAAI,OAAO,SAAA,KAAc,CAACC,KAAAA,IAAQ,GAAA,GAAMA,MAAK,GAAA,CAAA,EAAM;AACjD,UAAAA,KAAAA,GAAO,EAAE,GAAA,EAAK,GAAA,EAAI;AAAA,QACpB;AAAA,MACF;AACA,MAAA,OAAOA,OAAM,GAAA,IAAO,IAAA;AAAA,IACtB;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,aAAA,CAAc,QAAQ,KAAK,CAAA;AACtD,IAAA,IAAI,IAAA,GAA+C,IAAA;AACnD,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,MAAM,MAAM,OAAA,CAAQ,gBAAA,CAAiB,GAAA,CAAI,aAAa,YAAY,CAAA;AACxE,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,aAAa,CAAA,IAAK,GAAA,CAAI,UAAU,KAAA,EAAO;AACvD,MAAA,MAAM,GAAA,GAAM,oBAAA,CAAqB,GAAA,CAAI,QAAQ,CAAA;AAC7C,MAAA,IAAI,OAAO,SAAA,KAAc,CAAC,IAAA,IAAQ,GAAA,GAAM,KAAK,GAAA,CAAA,EAAM;AACjD,QAAA,IAAA,GAAO,EAAE,KAAK,GAAA,EAAI;AAAA,MACpB;AAAA,IACF;AACA,IAAA,OAAO,MAAM,GAAA,IAAO,IAAA;AAAA,EACtB;AAAA,EASA,MAAM,OAAO,OAAA,EAAyE;AACpF,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,KAAY,IAAA;AACpC,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,cAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AACrE,MAAA,oBAAA,CAAqB,OAAA,CAAQ,OAAO,OAAO,CAAA;AAE3C,MAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,CAAA;AAC7B,MAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,CAAA;AACvC,MAAA,kBAAA,CAAmB,MAAM,MAAA,EAAQ,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,KAAM,CAAA;AACtD,MAAA,kBAAA,CAAmB,WAAW,WAAA,EAAa,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AAE7D,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AACjC,MAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA;AAC1C,MAAA,KAAA,CAAM,IAAA,CAAK,aAAA,EAAe,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACpD,MAAA,IAAA,CAAK,yBAAA,CAA0B,OAAO,MAAM,CAAA;AAE5C,MAAA,MAAM,UAAA,GAAa,OAAA;AAAA,QACjB,OAAA,CAAQ,MAAA,EAAQ,KAAA,IAAS,OAAA,CAAQ,MAAA,EAAQ;AAAA,OAC3C;AACA,MAAA,MAAM,SAAA,GACJ,IAAA,CAAK,eAAA,CAAgB,eAAA,KAAoB,aAAa,CAAA,GAAI,CAAA,CAAA;AAC5D,MAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,EAAM,SAAA,EAAW,UAAU,CAAA;AAEzD,MAAA,MAAM,cAAA,uBAAqB,GAAA,EAAoB;AAC/C,MAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,MAAA,MAAM,IAAA,uBAAW,GAAA,EAA0B;AAC3C,MAAA,MAAM,eAAA,uBAAsB,GAAA,EAAqB;AAEjD,MAAA,MAAM,OAAA,GAAU,YAAY,GAAA,EAAI;AAChC,MAAA,MAAM,SAAS,OAAA,CAAQ,yBAAA;AACvB,MAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAChC,QAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,IAAA;AAAA,UAC9B,OAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA;AAAA,UACA,YAAA;AAAA,UACA;AAAA,YACE,KAAA,EAAO,QAAQ,MAAA,EAAQ,KAAA;AAAA,YACvB,eAAA,EAAiB,QAAQ,MAAA,EAAQ;AAAA;AACnC,SACF;AACA,QAAA,MAAM,OAAA,GAAU,YAAY,GAAA,EAAI;AAChC,QAAA,KAAA,MAAW,EAAE,GAAA,EAAK,QAAA,EAAS,IAAK,UAAA,EAAY;AAC1C,UAAA,IAAI,MAAA,GAAS,IAAA;AACb,UAAA,IACE,OAAA,CAAQ,MAAA,EAAQ,QAAA,IAChB,CAAC,eAAA;AAAA,YACC,mBAAA,CAAoB,IAAI,aAAa,CAAA;AAAA,YACrC,QAAQ,MAAA,CAAO;AAAA,WACjB,EACA;AACA,YAAA,MAAA,GAAS,KAAA;AACT,YAAA;AAAA,UACF;AACA,UAAA,MAAM,UAAA,GAAa,qBAAqB,QAAQ,CAAA;AAChD,UAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,YAAA;AAAA,UACF;AACA,UAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,EAAK,UAAU,CAAA;AAC7C,UAAA,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,UAAU,CAAA;AACxC,UAAA,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,QAAQ,CAAA;AACjC,UAAA,eAAA,CAAgB,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,MAAM,CAAA;AACrC,UAAA,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,MAAM,CAAA;AAAA,QAC5B;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,qBAAA,EAAuB,WAAA,CAAY,GAAA,KAAQ,OAAO,CAAA;AAAA,MAC/D,CAAA,MAAO;AACL,QAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,aAAA,CAAc,QAAQ,MAAM,CAAA;AACvD,QAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAC5C,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,OAAO,OAAA,CAAQ,mBAAA,KAAwB,UAAA,EAAY;AACrD,UAAA,MAAA,GAAS,MAAM,OAAA,CAAQ,mBAAA,CAAoB,MAAA,EAAQ,YAAY,CAAA;AAAA,QACjE,CAAA,MAAO;AACL,UAAA,MAAA,uBAAa,GAAA,EAAI;AACjB,UAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,YAC3B,IAAA,CAAK,GAAA,CAAI,OAAO,GAAA,MAAS;AAAA,cACvB,GAAA;AAAA,cACA,KAAK,MAAM,OAAA,CAAQ,gBAAA,CAAiB,GAAA,CAAI,aAAa,YAAY;AAAA,aACnE,CAAE;AAAA,WACJ;AACA,UAAA,KAAA,MAAW,EAAE,GAAA,EAAK,GAAA,EAAI,IAAK,MAAA,EAAQ;AACjC,YAAA,IAAI,GAAA,EAAK,MAAA,CAAO,GAAA,CAAI,GAAA,CAAI,aAAa,GAAG,CAAA;AAAA,UAC1C;AAAA,QACF;AAEA,QAAA,MAAM,OAAA,GAAU,YAAY,GAAA,EAAI;AAChC,QAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,UAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,GAAA,CAAI,WAAW,CAAA;AACtC,UAAA,IAAI,CAAC,GAAA,EAAK;AACV,UAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,IAAS,IAAI,KAAA,KAAU,OAAA,CAAQ,OAAO,KAAA,EAAO;AACjE,UAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,eAAA,IAAmB,GAAA,CAAI,aAAa,CAAA,EAAG;AAC5D,UAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,GAAA,CAAI,aAAa,CAAA;AACtD,UAAA,IACE,OAAA,CAAQ,QAAQ,QAAA,IAChB,CAAC,gBAAgB,QAAA,EAAU,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,EAClD;AACA,YAAA;AAAA,UACF;AACA,UAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,GAAA,CAAI,QAAQ,CAAA;AACpD,UAAA,IAAI,aAAa,SAAA,EAAW;AAC5B,UAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,EAAK,UAAU,CAAA;AAC7C,UAAA,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,UAAU,CAAA;AACxC,UAAA,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,GAAA,CAAI,QAAQ,CAAA;AACrC,UAAA,eAAA,CAAgB,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,IAAI,CAAA;AACnC,UAAA,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,MAAM,CAAA;AAAA,QAC5B;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,qBAAA,EAAuB,WAAA,CAAY,GAAA,KAAQ,OAAO,CAAA;AAAA,MAC/D;AACA,MAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,EAAI,GAAI,OAAA;AACvC,MAAA,KAAA,CAAM,IAAA,CAAK,kBAAkB,UAAU,CAAA;AACvC,MAAA,KAAA,CAAM,IAAA,CAAK,kBAAkB,UAAU,CAAA;AAEvC,MAAA,MAAM,aAAA,GACJ,oBAAA,CAAqB,OAAA,CAAQ,MAAM,CAAA,KAClC,OAAA,CAAQ,MAAA,KAAW,KAAA,CAAA,GAChB,oBAAA,CAAqB,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA,GAChD,IAAA,CAAA;AACN,MAAA,IAAI,aAAA,GAAoD,UAAA;AAExD,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,IAAI,aAAA,uBAAoB,GAAA,EAAoB;AAE5C,QAAA,IAAI,OAAO,OAAA,CAAQ,aAAA,KAAkB,UAAA,EAAY;AAC/C,UAAA,aAAA,GAAgB,SAAA;AAChB,UAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,aAAA;AAAA,YAC5B,KAAA;AAAA,YACA,YAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,aAAA,GAAgB,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA;AACjE,UAAA,MAAM,aAAuB,EAAC;AAC9B,UAAA,KAAA,MAAW,EAAA,IAAM,aAAA,CAAc,IAAA,EAAK,EAAG;AACrC,YAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG,UAAA,CAAW,KAAK,EAAE,CAAA;AAAA,UACvC;AACA,UAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,YAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,cAC5B,UAAA,CAAW,IAAI,CAAC,EAAA,KAAO,QAAQ,aAAA,CAAc,EAAA,EAAI,YAAY,CAAC;AAAA,aAChE;AACA,YAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,cAAA,IAAI,CAAC,GAAA,EAAK;AACV,cAAA,IAAI,QAAQ,MAAA,EAAQ,KAAA,IAAS,IAAI,KAAA,KAAU,OAAA,CAAQ,OAAO,KAAA,EAAO;AAC/D,gBAAA;AAAA,cACF;AACA,cAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,eAAA,IAAmB,GAAA,CAAI,aAAa,CAAA,EAAG;AAC1D,gBAAA;AAAA,cACF;AACA,cAAA,IACE,OAAA,CAAQ,MAAA,EAAQ,QAAA,IAChB,CAAC,eAAA;AAAA,gBACC,mBAAA,CAAoB,IAAI,aAAa,CAAA;AAAA,gBACrC,QAAQ,MAAA,CAAO;AAAA,eACjB,EACA;AACA,gBAAA;AAAA,cACF;AACA,cAAA,IAAA,CAAK,IAAI,GAAA,CAAI,EAAA,EAAI,cAAA,CAAe,GAAA,EAAK,CAAC,CAAC,CAAA;AACvC,cAAA,eAAA,CAAgB,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,IAAI,CAAA;AAAA,YAClC;AAAA,UACF;AAAA,QACF,CAAA,MAAA,IAAW,KAAK,aAAA,EAAe;AAC7B,UAAA,aAAA,GAAgB,SAAA;AAChB,UAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,YAAA;AAAA,YAC3B;AAAA,cACE,YAAA;AAAA,cACA,KAAA,EAAO,QAAQ,MAAA,EAAQ,KAAA;AAAA,cACvB,eAAA,EAAiB,QAAQ,MAAA,EAAQ,eAAA;AAAA,cACjC,QAAA,EAAU,QAAQ,MAAA,EAAQ;AAAA,aAC5B;AAAA,YACA,IAAA,CAAK,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,GAAI;AAAA,WAC3B;AACA,UAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,aAAA,CAAc,MAAA;AAAA,YAC3C,KAAA;AAAA,YACA,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,IAAA,EAAM,GAAA,CAAI,YAAA,EAAa,CAAE,CAAA;AAAA,YAC5D;AAAA,WACF;AACA,UAAA,aAAA,GAAgB,IAAI,GAAA;AAAA,YAClB,WAAA,CAAY,IAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,KAAK,CAAC;AAAA,WAC9C;AACA,UAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,YAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,IAAK,CAAC,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,EAAG;AACpD,YAAA,IAAA,CAAK,IAAI,GAAA,CAAI,EAAA,EAAI,cAAA,CAAe,GAAA,EAAK,CAAC,CAAC,CAAA;AACvC,YAAA,eAAA,CAAgB,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,IAAI,CAAA;AAAA,UAClC;AAAA,QACF;AAEA,QAAA,IAAI,aAAA,CAAc,OAAO,CAAA,EAAG;AAC1B,UAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,cAAA,EAAgB,aAAA,EAAe,aAAa,CAAA;AACrE,UAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,KAAA,EAAO;AAC/B,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AAC5B,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,IAAA,CAAK,IAAI,EAAA,EAAI,EAAE,GAAG,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA;AAAA,YACjD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAC9B,MAAA,IAAI,UAAU,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,IAAA;AAAA,QAC/B,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA,CAAE;AAAA,OAC7B;AAEA,MAAA,MAAM,SAAA,GACJ,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA,IACtB,UAAA;AAAA,QACE,IAAA,CAAK,gBAAgB,GAAA,GACjB,EAAE,QAAQ,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,MAAA,EAAO,GAC1C,KAAA;AAAA,OACN;AACF,MAAA,IAAI,aAAA,GAAgB,mBAAA;AACpB,MAAA,IAAI,cAAc,IAAA,EAAM;AACtB,QAAA,OAAA,GAAU,QAAA,CAAS,SAAS,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG,IAAI,GAAG,SAAS,CAAA;AAC/D,QAAA,aAAA,GAAgB,cAAc,SAAS,CAAA,CAAA,CAAA;AAAA,MACzC;AAEA,MAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAK,QAAA,EAAU;AACnC,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,MAAA;AAAA,UACnC,KAAA;AAAA,UACA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAK,CAAE,CAAA;AAAA,UACvD;AAAA,SACF;AACA,QAAA,MAAM,QAAQ,IAAI,GAAA;AAAA,UAChB,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAC,CAAA,CAAE,EAAA,EAAI,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,CAAA,EAAG,CAAC;AAAA,SACtD;AACA,QAAA,OAAA,GAAU,OAAA,CACP,MAAA,CAAO,CAAC,CAAA,KAAM,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA,CAC7B,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,CAAG,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,CAAG,CAAC,CAAA,CACtD,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACX,GAAG,CAAA;AAAA,UACH,YAAY,KAAA,CAAM,GAAA,CAAI,EAAE,EAAE,CAAA,EAAG,SAAS,CAAA,CAAE;AAAA,SAC1C,CAAE,CAAA;AACJ,QAAA,aAAA,GAAgB,CAAA,SAAA,EAAa,IAAA,CAAK,QAAA,CAA+B,IAAA,IAAQ,QAAQ,CAAA,CAAA;AAAA,MACnF;AAEA,MAAA,MAAM,WAAA,GAAc,WAAA,CAAY,GAAA,EAAI,GAAI,KAAA;AACxC,MAAA,KAAA,CAAM,IAAA,CAAK,aAAa,WAAW,CAAA;AACnC,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAE/B,MAAA,MAAM,IAAA,GAAO,YAAY,GAAA,EAAI;AAE7B,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAA,CAAI,CAAC,OAAO,EAAE,GAAG,GAAE,CAAE,CAAA;AAChD,MAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,IAAI,CAAA;AAEtD,MAAA,MAAM,eAAA,GAAkB;AAAA,QACtB,UAAU,OAAA,CAAQ,IAAA;AAAA,QAClB,KAAA;AAAA,QACA,OAAA,EAAS,QAAQ,MAAA,IAAU,IAAA;AAAA,QAC3B,eAAe,UAAA,CAAW,MAAA;AAAA,QAC1B,WAAW,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,QACrC,kBAAkB,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,UAAU,CAAA;AAAA,QACpD,mBAAmB,SAAA,CAAU,KAAA;AAAA,QAC7B,OAAO,SAAA,CAAU,KAAA;AAAA,QACjB,OAAA,EACE,OAAA,CAAQ,MAAA,EAAQ,KAAA,IAChB,WAAA,CAAY,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QACtD,IAAA,EAAM,WAAW,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,QAAQ,CAAC;AAAA,OAC9D;AAEA,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,IAAI,OAAA,CAAQ,YAAA,KAAiB,IAAA,IAAQ,IAAA,CAAK,KAAA,EAAO;AAC/C,UAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,UAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,YAAA,GAAA,CAAI,OAAA,GAAU,MAAM,IAAA,CAAK,cAAA,CAAe,IAAI,EAAE,CAAA;AAAA,UAChD;AACA,UAAA,KAAA,CAAM,IAAA,CAAK,gBAAA,EAAkB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AAAA,QACzD;AACA,QAAA,KAAA,CAAM,QAAQ,eAAe,CAAA;AAC7B,QAAA,OAAO,UAAA;AAAA,MACT;AAEA,MAAA,MAAM,YAAA,GAAuC,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW;AACtE,QAAA,MAAM,aAAA,GAA0B,CAAC,SAAS,CAAA;AAC1C,QAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,KAAA,EAAO,aAAA,CAAc,KAAK,OAAO,CAAA;AACrD,QAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,aAAA,CAAc,KAAK,UAAU,CAAA;AAC3D,QAAA,OAAO;AAAA,UACL,MAAA;AAAA,UACA,OAAO,MAAA,CAAO,UAAA;AAAA,UACd,UAAU,SAAA,CAAU,GAAA,CAAI,OAAO,EAAE,CAAA,IAAK,IAAI,MAAA,CAAO,UAAA;AAAA,UACjD,aAAA;AAAA,UACA,aAAA;AAAA,UACA,aAAA,EAAe,eAAA,CAAgB,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,IAAK,IAAA;AAAA,UACjD,cAAc,OAAA,CAAQ,IAAA;AAAA,UACtB,UAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAA,EAAI,GAAI,KAAA,CAAM,SAAA;AAC5C,MAAA,MAAM,gBAAA,GAAkD;AAAA,QACtD,OAAA,EAAS,IAAA;AAAA,QACT,cAAc,OAAA,CAAQ,IAAA;AAAA,QACtB,eAAA,EAAiB,aAAA;AAAA,QACjB,OAAA,EAAS;AAAA,UACP,QAAA,EAAU,SAAA;AAAA,UACV,OAAA,EAAS,aAAA;AAAA,UACT,UACE,OAAA,CAAQ,MAAA,KAAW,IAAA,IAAQ,IAAA,CAAK,WAAW,SAAA,GAAY,UAAA;AAAA,UACzD,GAAA,EAAK,SAAA,KAAc,IAAA,GAAO,UAAA,GAAa,SAAA;AAAA,UACvC,OAAA,EAAS;AAAA,SACX;AAAA,QACA,OAAA,EAAS,YAAA,CAAa,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,UAClC,QAAA,EAAU,IAAI,MAAA,CAAO,EAAA;AAAA,UACrB,OAAO,GAAA,CAAI,KAAA;AAAA,UACX,UAAU,GAAA,CAAI,QAAA;AAAA,UACd,eAAe,GAAA,CAAI,aAAA;AAAA,UACnB,eAAe,GAAA,CAAI,aAAA;AAAA,UACnB,eAAe,GAAA,CAAI;AAAA,SACrB,CAAE,CAAA;AAAA,QACF,YAAA,EAAc,UAAA;AAAA,QACd,aAAA,EAAe,WAAA;AAAA,QACf,WAAA,EAAa;AAAA,OACf;AACA,MAAA,KAAA,CAAM,QAAQ,EAAE,GAAG,eAAA,EAAiB,OAAA,EAAS,kBAAkB,CAAA;AAE/D,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,YAAA;AAAA,QACT,cAAc,OAAA,CAAQ,IAAA;AAAA,QACtB,UAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA,EAAS,MAAM,OAAA,CAAQ;AAAA,OACzB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAA,EAAO;AAAA,QACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,KAAA,IAAS;AAAA,OACnC,CAAA;AACD,MAAA,MAAM,kBAAA,CAAmB,UAAU,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,YACJ,OAAA,EAC2B;AAC3B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,aAAa,CAAA;AACjD,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AACnD,QAAA,MAAM,IAAI,gBAAgB,wCAAwC,CAAA;AAAA,MACpE;AACA,MAAA,MAAM,MAAwB,EAAC;AAC/B,MAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA;AACnC,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,EAAE,GAAG,CAAA,EAAG,OAAA,EAAS,KAAA,EAAO,CAAA;AACvD,UAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,YACZ,OAAO,CAAA,CAAE,KAAA;AAAA,YACT,eAAe,IAAA,CAAK,MAAA;AAAA,YACpB,WAAW,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,YAC/B,kBAAkB,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,UAAU;AAAA,WAC/C,CAAA;AACD,UAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,QACf,SAAS,KAAA,EAAO;AACd,UAAA,KAAA,CAAM,QAAQ,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,CAAE,OAAO,CAAA;AACvC,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF;AACA,MAAA,MAAA,CAAO,OAAA,CAAQ;AAAA,QACb,aAAA,EAAe,IAAI,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,QACnD,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,CAAQ,MAAA;AAAO,OACrC,CAAA;AACD,MAAA,OAAO,GAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,QAAQ,KAAK,CAAA;AACpB,MAAA,MAAM,kBAAA,CAAmB,eAAe,KAAK,CAAA;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,MAAM,SAEJ,OAAA,EACyB;AACzB,IAAA,OAAO,IAAA,CAAK,YAAY,OAAO,CAAA;AAAA,EACjC;AAAA;AAAA,EAGA,MAAc,YAAY,OAAA,EAAmD;AAC3E,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA;AAC7C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,cAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AACrE,MAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,QAAA,MAAM,IAAI,0BAAA;AAAA,UACR,KAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,oBAAA,CAAqB,OAAA,CAAQ,OAAO,OAAO,CAAA;AAC3C,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAC/B,MAAA,kBAAA,CAAmB,OAAO,OAAA,EAAS,EAAE,KAAK,CAAA,EAAG,GAAA,EAAK,KAAK,CAAA;AAEvD,MAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAC9B,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,YAAA;AAAA,QACzB;AAAA,UACE,YAAA;AAAA,UACA,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AAAA,UAC1B,eAAA,EAAiB;AAAA,SACnB;AAAA,QACA;AAAA,OACF;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,gBAAA,EAAkB,WAAA,CAAY,GAAA,KAAQ,KAAK,CAAA;AAEtD,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,IAAI,eAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,cAAc,CAAA;AACvC,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,WAAA,CAAY,SAAS,OAAO,CAAA;AAC3D,MAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,KAAA,CAAM,WAAW,CAAA;AAChD,MAAA,KAAA,CAAM,IAAA,CAAK,aAAA,EAAe,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACpD,MAAA,IAAA,CAAK,yBAAA,CAA0B,OAAO,MAAM,CAAA;AAE5C,MAAA,MAAM,YAAY,QAAA,EAAS;AAC3B,MAAA,MAAM,YAAY,MAAA,EAAO;AAEzB,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AAClD,QAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,QAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,YAAA,CAAa;AAAA,UAC5C,EAAA,EAAI,SAAA;AAAA,UACJ,YAAA;AAAA,UACA,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AAAA,UAC1B,WAAA,EAAa,WAAA;AAAA,UACb,QAAA,EAAU;AAAA,YACR,UAAA,EAAY,IAAA;AAAA,YACZ,aAAa,OAAA,CAAQ,MAAA;AAAA,YACrB,WAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE;AAAA,WACpC;AAAA,UACA,SAAA,EAAW,MAAA;AAAA,UACX,SAAA,EAAW,SAAA;AAAA,UACX,SAAA,EAAW;AAAA,SACZ,CAAA;AAED,QAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,eAAA;AAAA,UAChC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,UACvB,YAAA;AAAA,UACA,SAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AAExD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,eAAe,UAAU,CAAA;AAAA,UAClC;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,OAAA,CAAQ,IAAA;AAAA,QAClB,WAAW,CAAC,MAAA,CAAO,QAAQ,EAAA,EAAI,GAAG,OAAO,WAAW,CAAA;AAAA,QACpD,aAAA,EAAe,CAAA;AAAA,QACf,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAK,OAC7B,CAAA;AACD,MAAA,IAAA,CAAK,UAAA,CAAW;AAAA,QACd,KAAA,EAAO,UAAA;AAAA,QACP,YAAA;AAAA,QACA,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AAAA,QAC1B,UAAU,CAAC,MAAA,CAAO,QAAQ,EAAA,EAAI,GAAG,OAAO,WAAW,CAAA;AAAA,QACnD,SAAA;AAAA,QACA,SAAA,EAAW,KAAK,SAAA,CAAU;AAAA,OAC3B,CAAA;AACD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA;AAC/C,MAAA,MAAM,kBAAA,CAAmB,YAAY,KAAK,CAAA;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,OAAA,EAA+C;AAC1D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,cAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AACrE,MAAA,oBAAA,CAAqB,OAAA,CAAQ,OAAO,OAAO,CAAA;AAE3C,MAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,OAAA,CAAQ,MAAM,CAAA;AACpD,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,IAAI,UAAA,GAAa,KAAA;AACjB,MAAA,IAAI,IAAA,GAAO,OAAO,OAAA,IAAW,EAAA;AAE7B,MAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,QAAA,MAAM,MAAA,GAAS,aAAA,CAAc,MAAA,CAAO,QAAA,EAAU,OAAO,QAAQ,CAAA;AAC7D,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAM;AAAA,UAChC,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,UAAU,MAAA,CAAO;AAAA,SAClB,CAAA;AACD,QAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AAEd,QAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,WAAA,EAAa;AACxC,UAAA,MAAM,QAAkB,EAAC;AACzB,UAAA,IAAI,KAAK,GAAA,EAAK;AACZ,YAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,GAAA,CAAI,SAAA;AAAA,cAC/B,MAAA,CAAO,WAAA;AAAA,cACP,MAAA,CAAO;AAAA,aACT;AACA,YAAA,IAAI,UAAU,IAAA,EAAM;AAClB,cAAA,KAAA,CAAM,IAAA,CAAK,UAAU,IAAI,CAAA;AACzB,cAAA,OAAA,GAAU,IAAA;AAAA,YACZ;AAAA,UACF;AACA,UAAA,IAAI,KAAK,MAAA,EAAQ;AACf,YAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA;AAAA,cACrC,MAAA,CAAO,WAAA;AAAA,cACP,MAAA,CAAO;AAAA,aACT;AACA,YAAA,IAAI,aAAa,OAAA,EAAS;AACxB,cAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,YAAA,CAAa,OAAO,CAAA,CAAE,CAAA;AAAA,YAC/C;AACA,YAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,cAAA,KAAA,CAAM,IAAA,CAAK,aAAa,WAAW,CAAA;AAAA,YACrC;AACA,YAAA,IAAI,YAAA,CAAa,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACpC,cAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,YAAA,CAAa,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,YAC5D;AACA,YAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,cAAA,UAAA,GAAa,IAAA;AAAA,YACf;AAAA,UACF;AACA,UAAA,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,CAAE,IAAA,EAAK;AAAA,QACjC;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,eAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GACJ,IAAA,CAAK,QAAA,KACJ,OAAA,CAAQ,QAAA,EAAU,QAAA,GACf,sBAAA,CAAuB,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,GAChD,qBAAA,CAAsB,IAAI,CAAA,CAAA;AAEhC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM;AAAA,QAClC,SAAA,EAAW,QAAQ,QAAA,EAAU,SAAA;AAAA,QAC7B,OAAA,EAAS,QAAQ,QAAA,EAAU;AAAA,OAC5B,CAAA;AAED,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,MAAM,IAAI,gBAAgB,6BAA6B,CAAA;AAAA,MACzD;AAEA,MAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,MAAA,MAAM,UAAU,MAAM,SAAA;AAAA,QACpB,SAAA;AAAA,QACA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI;AAAA,OAC1B;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,aAAA,EAAe,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACpD,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,IAAA,CAAK,yBAAA,CAA0B,OAAO,MAAM,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,QAAA,IAAY,EAAC;AACtC,MAAA,MAAM,YAAY,MAAA,EAAO;AACzB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,CAAA,MAAO;AAAA,QACvC,IAAI,QAAA,EAAS;AAAA,QACb,YAAA;AAAA,QACA,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AAAA,QAC1B,aAAa,KAAA,CAAM,IAAA;AAAA,QACnB,QAAA,EAAU;AAAA,UACR,GAAG,QAAA;AAAA,UACH,MAAA,EAAQ,IAAA;AAAA,UACR,YAAY,KAAA,CAAM,KAAA;AAAA,UAClB,YAAY,MAAA,CAAO,MAAA;AAAA,UACnB,cAAA,EAAgB,OAAO,QAAA,IAAY;AAAA,SACrC;AAAA,QACA,SAAA,EAAW,QAAQ,CAAC,CAAA;AAAA,QACpB,SAAA,EAAW,SAAA;AAAA,QACX,SAAA,EAAW,SAAA;AAAA,QACX,aAAa,IAAA,CAAK,YAAA,CAAa,UAC3B,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA,GAC5B;AAAA,OACN,CAAE,CAAA;AAEF,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,IAAA,CAAK,aAAa,OAAA,EAAS;AAC7B,QAAA,MAAM,WAA6B,EAAC;AACpC,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AACzC,UAAA,MAAMZ,OAAAA,GAAS,MAAM,IAAA,CAAK,WAAA;AAAA,YACxB;AAAA,cACE,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AAAA,cAC1B,SAAS,EAAE,IAAA,EAAM,MAAA,CAAO,CAAC,EAAG,IAAA,EAAK;AAAA,cACjC,QAAA,EAAU;AAAA,gBACR,GAAG,QAAA;AAAA,gBACH,MAAA,EAAQ,IAAA;AAAA,gBACR,UAAA,EAAY,MAAA,CAAO,CAAC,CAAA,CAAG,KAAA;AAAA,gBACvB,YAAY,MAAA,CAAO,MAAA;AAAA,gBACnB,cAAA,EAAgB,OAAO,QAAA,IAAY;AAAA;AACrC,aACF;AAAA,YACA;AAAA,WACF;AACA,UAAA,QAAA,CAAS,KAAKA,OAAM,CAAA;AAAA,QACtB;AACA,QAAA,MAAMA,OAAAA,GAAS;AAAA,UACb,QAAA;AAAA,UACA,gBAAgB,IAAA,CAAK,MAAA;AAAA,UACrB,YAAY,MAAA,CAAO,MAAA;AAAA,UACnB,OAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,UACZ,UAAU,OAAA,CAAQ,IAAA;AAAA,UAClB,WAAWA,OAAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,UAC1C,aAAA,EAAeA,QAAO,QAAA,CAAS,MAAA;AAAA,UAC/B,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AAAA,UAC5B,IAAA,EAAM,cAAc,QAAQ;AAAA,SAC7B,CAAA;AACD,QAAA,IAAA,CAAK,UAAA,CAAW;AAAA,UACd,KAAA,EAAO,QAAA;AAAA,UACP,YAAA;AAAA,UACA,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AAAA,UAC1B,UAAUA,OAAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,UACzC,SAAA;AAAA,UACA,SAAA,EAAW,KAAK,SAAA,CAAU;AAAA,SAC3B,CAAA;AACD,QAAA,OAAOA,OAAAA;AAAA,MACT;AAEA,MAAA,IAAA,GAAO,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AAC1C,QAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,QAAA,MAAMA,OAAAA,GAAS,MAAM,OAAA,CAAQ,mBAAA,CAAoB,MAAM,CAAA;AACvD,QAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACxD,QAAA,OAAOA,OAAAA;AAAA,MACT,CAAC,CAAA;AAED,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,cAAc,CAAA;AAAA,QACjC,gBAAgB,IAAA,CAAK,MAAA;AAAA,QACrB,YAAY,MAAA,CAAO,MAAA;AAAA,QACnB,OAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,OAAA,CAAQ,IAAA;AAAA,QAClB,WAAW,MAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,QAC1C,aAAA,EAAe,OAAO,QAAA,CAAS,MAAA;AAAA,QAC/B,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AAAA,QAC5B,IAAA,EAAM,cAAc,QAAQ;AAAA,OAC7B,CAAA;AACD,MAAA,IAAA,CAAK,UAAA,CAAW;AAAA,QACd,KAAA,EAAO,QAAA;AAAA,QACP,YAAA;AAAA,QACA,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK;AAAA,QAC1B,UAAU,MAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,QACzC,SAAA;AAAA,QACA,SAAA,EAAW,KAAK,SAAA,CAAU;AAAA,OAC3B,CAAA;AACD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA;AAC/C,MAAA,MAAM,kBAAA,CAAmB,UAAU,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAA,CACJ,MAAA,EACA,IAAA,EACA,UACA,QAAA,EACe;AACf,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,cAAc,CAAA;AACjD,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,cAAc,CAAA;AAC9C,MAAA,oBAAA,CAAqB,QAAQ,QAAQ,CAAA;AACrC,MAAA,oBAAA,CAAqB,MAAM,MAAM,CAAA;AACjC,MAAA,oBAAA,CAAqB,UAAU,UAAU,CAAA;AACzC,MAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,MAAA,MAAM,KAAA,CAAM,YAAA;AAAA,QACV,OAAO,IAAA,EAAK;AAAA,QACZ,KAAK,IAAA,EAAK;AAAA,QACV,SAAS,IAAA,EAAK;AAAA,QACd;AAAA,OACF;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACxD,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,KAAA,CAAM,IAAA;AAAA,QAChB,WAAW,CAAC,MAAA,CAAO,MAAK,EAAG,IAAA,CAAK,MAAM,CAAA;AAAA,QACtC,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,CAAS,MAAK;AAAE,OACpC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,MAAM,kBAAA,CAAmB,gBAAgB,KAAK,CAAA;AAAA,IAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAA,CACJ,QAAA,EACA,OAAA,EACyB;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,YAAY,CAAA;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,YAAY,CAAA;AAC5C,MAAA,oBAAA,CAAqB,UAAU,UAAU,CAAA;AACzC,MAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,MAAA,MAAM,UAAU,MAAM,IAAA,CAAK,eAAe,QAAA,CAAS,IAAA,IAAQ,OAAO,CAAA;AAClE,MAAA,KAAA,CAAM,IAAA,CAAK,gBAAA,EAAkB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AACvD,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,KAAA,CAAM,IAAA;AAAA,QAChB,SAAA,EAAW,CAAC,QAAA,CAAS,IAAA,EAAK,EAAG,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,QACxD,eAAe,OAAA,CAAQ;AAAA,OACxB,CAAA;AACD,MAAA,OAAO,OAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,MAAM,kBAAA,CAAmB,cAAc,KAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,OAAA,EAAyC;AACpD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AAE1D,MAAA,MAAM,aAAuB,EAAC;AAC9B,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AACnD,QAAA,IAAI,IAAA,IAAQ,OAAA,IAAW,OAAA,CAAQ,EAAA,KAAO,KAAA,CAAA,EAAW;AAC/C,UAAA,oBAAA,CAAqB,OAAA,CAAQ,IAAI,IAAI,CAAA;AACrC,UAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAK;AAC3B,UAAA,MAAM,EAAA,GAAK,MAAM,OAAA,CAAQ,gBAAA,CAAiB,IAAI,YAAY,CAAA;AAC1D,UAAA,IAAI,EAAA,EAAI,UAAA,CAAW,IAAA,CAAK,EAAE,CAAA;AAC1B,UAAA,OAAO,KAAK,CAAA,GAAI,CAAA;AAAA,QAClB;AAEA,QAAA,IAAI,QAAA,IAAY,OAAA,IAAW,OAAA,CAAQ,MAAA,EAAQ,KAAA,EAAO;AAChD,UAAA,oBAAA,CAAqB,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,cAAc,CAAA;AACzD,UAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,YAAA,CAAa;AAAA,YACtC,YAAA;AAAA,YACA,KAAA,EAAO,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK;AAAA,YACjC,eAAA,EAAiB;AAAA,WAClB,CAAA;AACD,UAAA,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,UAAA,CAAW,IAAA,CAAK,IAAI,EAAE,CAAA;AAC9C,UAAA,OAAO,QAAQ,sBAAA,CAAuB;AAAA,YACpC,YAAA;AAAA,YACA,KAAA,EAAO,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK;AAAA,YACjC,eAAA,EAAiB;AAAA,WAClB,CAAA;AAAA,QACH;AAEA,QAAA,MAAM,IAAI,eAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,IAAI,UAAU,CAAA,IAAK,IAAA,CAAK,KAAA,IAAS,UAAA,CAAW,SAAS,CAAA,EAAG;AACtD,QAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,QAAA,KAAA,MAAW,MAAM,UAAA,EAAY;AAC3B,UAAA,MAAM,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,EAAE,CAAA;AAAA,QAClC;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,MAAM,CAAA;AAAA,MAC1D;AAEA,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,OAAA,CAAQ,IAAA;AAAA,QAClB,aAAA,EAAe,OAAA;AAAA,QACf,SAAA,EAAW,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,IAAA;AAAA,QAChD,OAAA,EAAS,QAAA,IAAY,OAAA,GAAU,OAAA,CAAQ,MAAA,GAAS,IAAA;AAAA,QAChD,OAAA,EACE,YAAY,OAAA,GAAU,OAAA,CAAQ,QAAQ,KAAA,EAAO,IAAA,MAAU,IAAA,GAAO,IAAA;AAAA,QAChE,OAAO,IAAA,CAAK,KAAA,GACR,EAAE,YAAA,EAAc,UAAA,CAAW,QAAO,GAClC,KAAA;AAAA,OACL,CAAA;AACD,MAAA,IAAI,UAAU,CAAA,EAAG;AACf,QAAA,IAAA,CAAK,UAAA,CAAW;AAAA,UACd,KAAA,EAAO,QAAA;AAAA,UACP,YAAA;AAAA,UACA,KAAA,EACG,QAAA,IAAY,OAAA,IAAW,OAAA,CAAQ,MAAA,EAAQ,OAAO,IAAA,EAAK,KACnD,IAAA,IAAQ,OAAA,GAAU,GAAA,GAAM,GAAA,CAAA;AAAA,UAC3B,QAAA,EACE,QAAQ,OAAA,IAAW,OAAA,CAAQ,KAAK,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAK,GAAI,EAAC;AAAA,UACvD,WAAW,MAAA,EAAO;AAAA,UAClB,SAAA,EAAW,KAAK,SAAA,CAAU;AAAA,SAC3B,CAAA;AAAA,MACH;AACA,MAAA,OAAO,OAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAA,EAAO;AAAA,QACnB,SAAS,QAAA,IAAY,OAAA,GAAU,OAAA,CAAQ,MAAA,EAAQ,SAAS,IAAA,GAAO;AAAA,OAChE,CAAA;AACD,MAAA,MAAM,kBAAA,CAAmB,UAAU,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,OAAA,EAAiD;AAC7D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA;AAC5C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AAC1D,MAAA,oBAAA,CAAqB,OAAA,CAAQ,IAAI,IAAI,CAAA;AAErC,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,aAAA,CAAc,QAAQ,EAAA,CAAG,IAAA,IAAQ,YAAY,CAAA;AACvE,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,kBAAA,EAAqB,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,MACjE;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,EAAE,CAAA;AAC9C,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,MAAA,EAAQ,eAAe,GAAG,CAAA;AAAA,QAC1B,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,cAAc;AAAA,OACnC;AACA,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,OAAA,CAAQ,IAAA;AAAA,QAClB,SAAA,EAAW,CAAC,GAAA,CAAI,EAAE,CAAA;AAAA,QAClB,eAAe,MAAA,CAAO,MAAA;AAAA,QACtB,SAAS,GAAA,CAAI,KAAA;AAAA,QACb,IAAA,EAAM,aAAA,CAAc,mBAAA,CAAoB,GAAA,CAAI,aAAa,CAAC;AAAA,OAC3D,CAAA;AACD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,MAAM,kBAAA,CAAmB,WAAW,KAAK,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,GAA8B;AAClC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,OAAO,CAAA;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,cAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AACrE,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA;AAClD,MAAA,MAAM,iBAAA,GAAoB,MAAM,OAAA,CAAQ,oBAAA,EAAqB;AAE7D,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,eAAe,MAAA,CAAO,aAAA;AAAA,QACtB,gBAAgB,MAAA,CAAO,cAAA;AAAA,QACvB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,QACzB,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,iBAAA;AAAA,QACA,gBAAgB,SAAA,CAAU,KAAA;AAAA,QAC1B,QAAA,EAAU,IAAA,CAAK,GAAA,EAAK,KAAA,IAAS,IAAA;AAAA,QAC7B,YAAA;AAAA,QACA,mBAAA,EAAqB,KAAK,mBAAA,IAAuB;AAAA,OACnD;AACA,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,OAAA,CAAQ,IAAA;AAAA,QAClB,eAAe,MAAA,CAAO;AAAA,OACvB,CAAA;AACD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,MAAM,kBAAA,CAAmB,SAAS,KAAK,CAAA;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,OAAA,EAAwC;AAClD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,OAAO,CAAA;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AAE1D,MAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,OAAA,KAAY,IAAA,EAAM;AACxC,QAAA,MAAM,IAAI,eAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY;AACnD,QAAA,IAAI,KAAK,KAAA,EAAO;AACd,UAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,YAAA,CAAa;AAAA,YACtC,YAAA;AAAA,YACA,eAAA,EAAiB;AAAA,WAClB,CAAA;AACD,UAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,YAAA,MAAM,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AAAA,UACtC;AAAA,QACF;AACA,QAAA,OAAO,OAAA,CAAQ,kBAAkB,YAAY,CAAA;AAAA,MAC/C,CAAC,CAAA;AACD,MAAA,KAAA,CAAM,QAAQ,EAAE,QAAA,EAAU,QAAQ,IAAA,EAAM,aAAA,EAAe,SAAS,CAAA;AAChE,MAAA,OAAO,OAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,MAAM,kBAAA,CAAmB,SAAS,KAAK,CAAA;AAAA,IACzC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,UAAA,CACJ,IAAA,EACA,OAAA,EACyB;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,YAAY,CAAA;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,QAAA,GAAW,KAAK,yBAAA,EAA0B;AAChD,MAAA,MAAM,MAAA,GAAS,KAAK,mBAAA,EAAoB;AACxC,MAAA,IAAA,CAAK,+BAA+B,YAAY,CAAA;AAChD,MAAA,MAAM,WAAA,GAAc,YAAY,GAAA,EAAI;AACpC,MAAA,MAAMf,QAAO,MAAM,QAAA,CAAS,UAAA,CAAW,IAAA,EAAM,QAAQ,OAAO,CAAA;AAC5D,MAAA,MAAM,IAAA,CAAK,sBAAA,CAAuBA,KAAAA,CAAK,YAAA,EAAc,YAAY,CAAA;AACjE,MAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,WAAW,CAAA;AAC7D,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,QAAA,CAAS,IAAA;AAAA,QACnB,cAAcA,KAAAA,CAAK,IAAA;AAAA,QACnB,KAAA,EAAO,EAAE,UAAA,EAAYA,KAAAA,CAAK,IAAA;AAAK,OAChC,CAAA;AACD,MAAA,OAAOA,KAAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,YAAA,EAAc,MAAM,CAAA;AAC3C,MAAA,MAAM,kBAAA,CAAmB,cAAc,KAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAAS,IAAA,EAAuC;AACpD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA;AAC7C,IAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,QAAA,GAAW,KAAK,yBAAA,EAA0B;AAChD,MAAA,MAAM,MAAA,GAAS,KAAK,mBAAA,EAAoB;AAGxC,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA;AAClD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,YAAA,EAAe,IAAI,CAAA,eAAA,CAAiB,CAAA;AAAA,MAChE;AAGA,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,MAAM,IAAA,CAAK,QAAQ,KAAA,EAAM;AACzB,QAAA,aAAA,GAAgB,IAAA;AAAA,MAClB;AACA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,qBAAA,EAAsB;AACrD,MAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,MAAA,MAAMA,KAAAA,GAAO,MAAM,QAAA,CAAS,QAAA,CAAS,MAAM,MAAM,CAAA;AACjD,MAAA,MAAM,IAAA,CAAK,qBAAA,CAAsBA,KAAAA,CAAK,YAAA,EAAc,UAAU,CAAA;AAC9D,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,MACzB;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,SAAS,CAAA;AAC3D,MAAA,MAAM,IAAA,CAAK,SAAS,IAAA,EAAK;AACzB,MAAA,aAAA,GAAgB,KAAA;AAChB,MAAA,IAAI,IAAA,CAAK,wBAAwB,IAAA,EAAM;AACrC,QAAA,MAAM,IAAA,CAAK,OAAA,EAAS,kBAAA,CAAmB,IAAA,CAAK,mBAAmB,CAAA;AAAA,MACjE;AAEA,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,QAAA,CAAS,IAAA;AAAA,QACnB,cAAcA,KAAAA,CAAK,IAAA;AAAA,QACnB,KAAA,EAAO,EAAE,UAAA,EAAYA,KAAAA,CAAK,IAAA;AAAK,OAChC,CAAA;AACD,MAAA,OAAOA,KAAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,aAAA,IAAiB,KAAK,OAAA,EAAS;AACjC,QAAA,MAAM,KAAK,OAAA,CAAQ,IAAA,EAAK,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC/C,QAAA,IAAI,IAAA,CAAK,wBAAwB,IAAA,EAAM;AACrC,UAAA,MAAM,IAAA,CAAK,QACR,kBAAA,CAAmB,IAAA,CAAK,mBAAmB,CAAA,CAC3C,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,QAC1B;AAAA,MACF;AACA,MAAA,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,YAAA,EAAc,MAAM,CAAA;AAC3C,MAAA,MAAM,kBAAA,CAAmB,YAAY,KAAK,CAAA;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,IAAA,EAAgC;AACrD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,kBAAkB,CAAA;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,QAAA,GAAW,KAAK,yBAAA,EAA0B;AAChD,MAAA,MAAM,OAAA,GAAU,YAAY,GAAA,EAAI;AAChC,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,gBAAA,CAAiB,IAAI,CAAA;AACpD,MAAA,KAAA,CAAM,IAAA,CAAK,iBAAA,EAAmB,WAAA,CAAY,GAAA,KAAQ,OAAO,CAAA;AACzD,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,QAAA,CAAS,IAAA;AAAA,QACnB,YAAA,EAAc,IAAA;AAAA,QACd,aAAA,EAAe,UAAU,CAAA,GAAI;AAAA,OAC9B,CAAA;AACD,MAAA,OAAO,OAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,YAAA,EAAc,MAAM,CAAA;AAC3C,MAAA,MAAM,kBAAA,CAAmB,oBAAoB,KAAK,CAAA;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,eAAA,GAA6C;AACjD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,iBAAiB,CAAA;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,QAAA,GAAW,KAAK,yBAAA,EAA0B;AAChD,MAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAC9B,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,eAAA,EAAgB;AAC5C,MAAA,KAAA,CAAM,IAAA,CAAK,gBAAA,EAAkB,WAAA,CAAY,GAAA,KAAQ,KAAK,CAAA;AACtD,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,QAAA,CAAS,IAAA;AAAA,QACnB,eAAe,IAAA,CAAK;AAAA,OACrB,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,MAAM,kBAAA,CAAmB,mBAAmB,KAAK,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,IAAA,EAA8C;AAChE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,eAAe,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,QAAA,GAAW,KAAK,yBAAA,EAA0B;AAChD,MAAA,MAAM,IAAA,GAAO,YAAY,GAAA,EAAI;AAC7B,MAAA,MAAMA,KAAAA,GAAO,MAAM,QAAA,CAAS,aAAA,CAAc,IAAI,CAAA;AAC9C,MAAA,KAAA,CAAM,IAAA,CAAK,gBAAA,EAAkB,WAAA,CAAY,GAAA,KAAQ,IAAI,CAAA;AACrD,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,UAAU,QAAA,CAAS,IAAA;AAAA,QACnB,YAAA,EAAc,IAAA;AAAA,QACd,aAAA,EAAeA,QAAO,CAAA,GAAI;AAAA,OAC3B,CAAA;AACD,MAAA,OAAOA,KAAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,YAAA,EAAc,MAAM,CAAA;AAC3C,MAAA,MAAM,kBAAA,CAAmB,iBAAiB,KAAK,CAAA;AAAA,IACjD;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,OAAO,UAAA,EAA2C;AACtD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA;AAC3C,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,MAAA,GAAS,KAAK,mBAAA,EAAoB;AACxC,MAAA,IAAA,CAAK,+BAA+B,QAAQ,CAAA;AAE5C,MAAA,IAAI,IAAA,CAAK,OAAA,EAAS,IAAA,KAAS,QAAA,EAAU;AAAA,MAErC;AACA,MAAA,MAAM,MAAA,GAA6B,MAAM,IAAA,CAAK,QAAA,CAAS,QAAA;AAAA,QACrD,UAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAK,YAAA,IAAgB,KAAA;AAAA,OACvB;AACA,MAAA,MAAM,IAAA,CAAK,sBAAA,CAAuB,MAAA,CAAO,IAAA,EAAM,QAAQ,CAAA;AACvD,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,QAAA,EAAU,QAAA;AAAA,QACV,OAAO,EAAE,IAAA,EAAM,OAAO,IAAA,EAAM,SAAA,EAAW,OAAO,SAAA;AAAU,OACzD,CAAA;AACD,MAAA,OAAO;AAAA,QACL,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,UAAA,EAAY,OAAO,QAAA,CAAS;AAAA,OAC9B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,MAAM,kBAAA,CAAmB,UAAU,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,OAAO,UAAA,EAA2C;AACtD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA;AAC3C,IAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,MAAA,GAAS,KAAK,mBAAA,EAAoB;AACxC,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,MAAM,IAAA,CAAK,QAAQ,KAAA,EAAM;AACzB,QAAA,aAAA,GAAgB,IAAA;AAAA,MAClB;AACA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,qBAAA,EAAsB;AACrD,MAAA,IAAA,CAAK,+BAA+B,QAAQ,CAAA;AAC5C,MAAA,MAAM,MAAA,GAA6B,MAAM,IAAA,CAAK,QAAA,CAAS,UAAA;AAAA,QACrD,UAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,IAAA,CAAK,qBAAA,CAAsB,MAAA,CAAO,IAAA,EAAM,QAAQ,CAAA;AACtD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,MACzB;AACA,MAAA,MAAM,IAAA,CAAK,SAAS,IAAA,EAAK;AACzB,MAAA,aAAA,GAAgB,KAAA;AAChB,MAAA,IAAI,IAAA,CAAK,wBAAwB,IAAA,EAAM;AACrC,QAAA,MAAM,IAAA,CAAK,OAAA,EAAS,kBAAA,CAAmB,IAAA,CAAK,mBAAmB,CAAA;AAAA,MACjE;AACA,MAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,QACZ,QAAA,EAAU,QAAA;AAAA,QACV,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA;AAAK,OAC5B,CAAA;AACD,MAAA,OAAO;AAAA,QACL,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,YAAY,MAAA;AAAO,OACrB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,aAAA,IAAiB,KAAK,OAAA,EAAS;AACjC,QAAA,MAAM,KAAK,OAAA,CAAQ,IAAA,EAAK,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC/C,QAAA,IAAI,IAAA,CAAK,wBAAwB,IAAA,EAAM;AACrC,UAAA,MAAM,IAAA,CAAK,QACR,kBAAA,CAAmB,IAAA,CAAK,mBAAmB,CAAA,CAC3C,KAAA,CAAM,MAAM,MAAS,CAAA;AAAA,QAC1B;AAAA,MACF;AACA,MAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AACnB,MAAA,MAAM,kBAAA,CAAmB,UAAU,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,cAAA,GAAgC;AACpC,IAAA,MAAM,IAAA,CAAK,UAAU,KAAA,EAAM;AAAA,EAC7B;AAAA;AAAA,EAGA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,KAAK,SAAA,CAAU,SAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,aAAA,CACN,IACA,OAAA,EACY;AACZ,IAAA,IACE,OAAA,EAAS,SAAA,IACT,IAAA,CAAK,OAAA,EAAS,SAAS,QAAA,EACvB;AACA,MAAA,OAAO,IAAA,CAAK,UAAA,CAAW,YAAA,CAAa,EAAE,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,EAAA,EAAG;AAAA,EACZ;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAAA,IAC/C;AACA,IAAA,MAAM,KAAK,gBAAA,EAAkB,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC1D,IAAA,MAAM,KAAK,eAAA,EAAiB,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACzD,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,IAAA,MAAM,KAAK,SAAA,CAAU,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAClD,IAAA,MAAM,KAAK,kBAAA,EAAoB,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC5D,IAAA,MAAM,KAAK,KAAA,EAAO,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,MAAM,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,IAC3B;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA;AAC3B,IAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AAAA,EACrB;AAAA,EAEA,IAAI,aAAA,GAAyB;AAC3B,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,MAAc,YAAA,GAAoC;AAChD,IAAA,MAAM,KAAK,KAAA,EAAM;AACjB,IAAA,IACE,CAAC,IAAA,CAAK,WAAA,IACN,CAAC,IAAA,CAAK,OAAA,IACN,CAAC,IAAA,CAAK,SAAA,IACN,CAAC,IAAA,CAAK,YAAA,EACN;AACA,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,cAAc,IAAA,CAAK;AAAA,KACrB;AAAA,EACF;AAAA,EAEQ,0BAA0B,UAAA,EAA0B;AAC1D,IAAA,IACE,IAAA,CAAK,mBAAA,KAAwB,IAAA,IAC7B,UAAA,KAAe,KAAK,mBAAA,EACpB;AACA,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,uCAAA,EAA0C,IAAA,CAAK,mBAAmB,CAAA,MAAA,EAAS,UAAU,CAAA;AAAA,OACvF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,yBAAA,GAAgD;AACtD,IAAA,IAAI,CAAC,KAAK,kBAAA,EAAoB;AAC5B,MAAA,MAAM,IAAI,0BAAA;AAAA,QACR,YAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,kBAAA;AAAA,EACd;AAAA,EAEQ,aAAa,MAAA,EAA+B;AAClD,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,MAAM,IAAI,0BAAA;AAAA,QACR,OAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEQ,+BAA+B,SAAA,EAAyB;AAC9D,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACjB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,oBAAA,EAAqB,EAAG;AACtC,MAAA,MAAM,IAAI,gCAAA,CAAiC,IAAA,CAAK,KAAA,CAAM,MAAM,SAAS,CAAA;AAAA,IACvE;AAAA,EACF;AAAA,EAEQ,iBAAiB,aAAA,EAA+B;AACtD,IAAA,OAAO,GAAG,aAAa,CAAA,MAAA,CAAA;AAAA,EACzB;AAAA,EAEA,MAAc,qBAAA,GAA0C;AACtD,IAAA,IAAI,CAAC,KAAK,KAAA,IAAS,CAAC,KAAK,KAAA,CAAM,oBAAA,IAAwB,OAAO,KAAA;AAC9D,IAAA,MAAM,IAAA,CAAK,MAAM,KAAA,EAAM;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAc,sBAAA,CACZ,aAAA,EACA,SAAA,EACe;AACf,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACjB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,oBAAA,EAAqB,EAAG;AACtC,MAAA,MAAM,IAAI,gCAAA,CAAiC,IAAA,CAAK,KAAA,CAAM,MAAM,SAAS,CAAA;AAAA,IACvE;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY;AACxC,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAEhD,IAAA,MAAM,IAAA,CAAK,MAAM,KAAA,EAAM;AACvB,IAAA,IAAI;AACF,MAAA,IAAIG,oBAAAA,CAAG,UAAA,CAAW,IAAI,CAAA,EAAG;AACvB,QAAAA,oBAAAA,CAAG,OAAO,IAAA,EAAM,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,MAClD;AACA,MAAA,IAAIA,oBAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,QAAA,MAAM,IAAA,GAAOA,oBAAAA,CAAG,QAAA,CAAS,QAAQ,CAAA;AACjC,QAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AACtB,UAAAA,qBAAG,MAAA,CAAO,QAAA,EAAU,MAAM,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,QAC/C,CAAA,MAAO;AACL,UAAAA,qBAAG,SAAA,CAAU,IAAA,EAAM,EAAE,SAAA,EAAW,MAAM,CAAA;AACtC,UAAAA,oBAAAA,CAAG,MAAA,CAAO,QAAA,EAAUF,sBAAAA,CAAK,IAAA,CAAK,MAAMA,sBAAAA,CAAK,QAAA,CAAS,QAAQ,CAAC,CAAC,CAAA;AAE5D,UAAA,MAAM,MAAA,GAASA,sBAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACpC,UAAA,MAAM,IAAA,GAAOA,sBAAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACnC,UAAA,KAAA,MAAW,KAAA,IAASE,oBAAAA,CAAG,WAAA,CAAY,MAAM,CAAA,EAAG;AAC1C,YAAA,IAAI,UAAU,IAAA,EAAM;AACpB,YAAA,IAAI,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,EAAG;AAC1B,cAAAA,oBAAAA,CAAG,MAAA;AAAA,gBACDF,sBAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AAAA,gBACvBA,sBAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAAA,gBACrB,EAAE,WAAW,IAAA;AAAK,eACpB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AACA,MAAA,MAAM,IAAA,CAAK,MAAM,IAAA,EAAK;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAc,qBAAA,CACZ,aAAA,EACA,SAAA,EACe;AACf,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACjB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,oBAAA,EAAqB,EAAG;AACtC,MAAA,MAAM,IAAI,gCAAA,CAAiC,IAAA,CAAK,KAAA,CAAM,MAAM,SAAS,CAAA;AAAA,IACvE;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY;AACxC,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAC/C,IAAA,IAAI,CAACE,oBAAAA,CAAG,UAAA,CAAW,GAAG,CAAA,EAAG;AAEvB,MAAA;AAAA,IACF;AACA,IAAA,IAAIA,oBAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAAA,oBAAAA,CAAG,OAAO,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IACtD;AACA,IAAA,MAAM,OAAA,GAAUA,oBAAAA,CAAG,WAAA,CAAY,GAAG,CAAA;AAClC,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,IAAK,OAAA,CAAQ,CAAC,CAAA,KAAMF,sBAAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AAClE,MAAAE,oBAAAA,CAAG,UAAUF,sBAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACxD,MAAAE,oBAAAA,CAAG,MAAA,CAAOF,sBAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAE,CAAA,EAAG,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IACtE,CAAA,MAAO;AACL,MAAAE,oBAAAA,CAAG,UAAUF,sBAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACxD,MAAAE,qBAAG,MAAA,CAAO,GAAA,EAAK,UAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAc,cAAA,CACZ,QAAA,EACA,OAAA,EACyB;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,YAAY,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,UAAA,CAAW,UAAU,OAAO,CAAA;AACxD,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,MAAM,KAAK,YAAA,EAAa;AAC1D,IAAA,MAAM,MAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,MAAM,MAAM,MAAM,OAAA,CAAQ,aAAA,CAAc,IAAA,CAAK,IAAI,YAAY,CAAA;AAC7D,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,GAAA,CAAI,IAAA,CAAK,cAAA,CAAe,GAAG,CAAC,CAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,MACf;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,mBAAA,GAA8B;AACpC,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,iBAAiB,UAAA,EAAY;AAC1D,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,8EAAA;AAAA,QACA;AAAA,UACE,UAAA,EACE;AAAA;AACJ,OACF;AAAA,IACF;AACA,IAAA,OAAOF,sBAAAA,CAAK,UAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GACpC,IAAA,CAAK,YAAA,GACLA,sBAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,KAAK,YAAY,CAAA;AAAA,EACnD;AACF;AAGO,SAAS,QAAQ,OAAA,EAAkC;AACxD,EAAA,OAAO,IAAI,QAAQ,OAAgB,CAAA;AACrC;AAEA,SAAS,cAAc,QAAA,EAAoD;AACzE,EAAA,MAAM,QAAQ,QAAA,CAAS,IAAA;AACvB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,EAAK;AACvB,IAAA,OAAO,GAAA,GAAM,CAAC,GAAG,CAAA,GAAI,IAAA;AAAA,EACvB;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,OAAO,KAAA,CAAM,MAAA;AAAA,MACjB,CAAC,QAAuB,OAAO,GAAA,KAAQ,YAAY,GAAA,CAAI,IAAA,GAAO,MAAA,GAAS;AAAA,KACzE;AACA,IAAA,OAAO,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,IAAA;AAAA,EAC3D;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAY,MAAA,EAAiC;AACpD,EAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,CAAM,CAAC,UAAU,KAAA,KAAU,KAAK,IAAI,KAAA,GAAQ,IAAA;AACrE;AAEA,SAAS,WAAW,QAAA,EAA2D;AAC7E,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,KAAA,MAAW,GAAA,IAAO,cAAc,IAAI,CAAA,IAAK,EAAC,EAAG,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,KAAK,IAAA,GAAO,CAAA,GAAI,CAAC,GAAG,IAAI,CAAA,GAAI,IAAA;AACrC;;;ACtzEO,IAAM,IAAA,GAAO;AAAA,EAClB,EAAA,EAAI,CAAC,KAAA,EAAe,KAAA,MAAoC;AAAA,IACtD,KAAA;AAAA,IACA,EAAA,EAAI,EAAE,EAAA,EAAI,KAAA;AAAM,GAClB,CAAA;AAAA,EACA,QAAA,EAAU,CAAC,KAAA,EAAe,KAAA,MAAmC;AAAA,IAC3D,KAAA;AAAA,IACA,EAAA,EAAI,EAAE,QAAA,EAAU,KAAA;AAAM,GACxB,CAAA;AAAA,EACA,EAAA,EAAI,CAAC,KAAA,EAAe,KAAA,MAA4C;AAAA,IAC9D,KAAA;AAAA,IACA,EAAA,EAAI,EAAE,EAAA,EAAI,KAAA;AAAM,GAClB,CAAA;AAAA,EACA,GAAA,EAAK,CAAC,KAAA,EAAe,KAAA,MAA4C;AAAA,IAC/D,KAAA;AAAA,IACA,EAAA,EAAI,EAAE,GAAA,EAAK,KAAA;AAAM,GACnB,CAAA;AAAA,EACA,EAAA,EAAI,CAAC,KAAA,EAAe,KAAA,MAA4C;AAAA,IAC9D,KAAA;AAAA,IACA,EAAA,EAAI,EAAE,EAAA,EAAI,KAAA;AAAM,GAClB,CAAA;AAAA,EACA,GAAA,EAAK,CAAC,KAAA,EAAe,KAAA,MAA4C;AAAA,IAC/D,KAAA;AAAA,IACA,EAAA,EAAI,EAAE,GAAA,EAAK,KAAA;AAAM,GACnB,CAAA;AAAA,EACA,OAAA,EAAS,CACP,KAAA,EACA,EAAA,EACA,EAAA,MACoB;AAAA,IACpB,KAAA;AAAA,IACA,IAAI,EAAE,OAAA,EAAS,CAAC,EAAA,EAAI,EAAE,CAAA;AAAE,GAC1B,CAAA;AAAA,EACA,GAAA,EAAK,CAAA,GAAI,OAAA,MAA+C,EAAE,KAAK,OAAA,EAAQ,CAAA;AAAA,EACvE,EAAA,EAAI,CAAA,GAAI,OAAA,MAA+C,EAAE,IAAI,OAAA,EAAQ,CAAA;AAAA,EACrE,GAAA,EAAK,CAAC,MAAA,MAA4C,EAAE,KAAK,MAAA,EAAO;AAClE;;;AClCO,SAAS,OAAO,gBAAA,EAA2C;AAChE,EAAA,OAAO,IAAI,qBAAA,CAAsB,EAAE,gBAAA,EAAkB,CAAA;AACvD;AAGO,SAAS,aACd,gBAAA,EACsB;AACtB,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,gBAAA;AAAA,IACA,GAAA,EAAK;AAAA,GACP;AACF;AAGO,SAAS,SACd,OAAA,EAQiB;AACjB,EAAA,MAAM,OACJ,OAAO,OAAA,KAAY,WACf,EAAE,gBAAA,EAAkB,SAAQ,GAC5B,OAAA;AACN,EAAA,OAAO,IAAI,wBAAwB,IAAI,CAAA;AACzC;AAGO,SAAS,cAAA,CACd,kBACA,OAAA,EACwB;AACxB,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV,gBAAA;AAAA,IACA,GAAA,EAAK,gBAAA;AAAA,IACL,GAAG;AAAA,GACL;AACF;AAGO,SAAS,gBAAgB,GAAA,EAAgC;AAC9D,EAAA,OAAO,IAAI,uBAAA,CAAwB,EAAE,GAAA,EAAK,CAAA;AAC5C;AAGO,SAAS,iBAAiB,SAAA,EAAwC;AACvE,EAAA,OAAO,IAAI,wBAAA,CAAyB,EAAE,SAAA,EAAW,CAAA;AACnD;AAGO,SAAS,YAAY,OAAA,EAA0C;AACpE,EAAA,OAAO,IAAI,oBAAoB,OAAO,CAAA;AACxC;AAGO,SAAS,WAAW,OAAA,EAKT;AAChB,EAAA,OAAO,IAAI,mBAAmB,OAAO,CAAA;AACvC;AAGO,SAAS,wBACd,MAAA,EACmB;AACnB,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,KAAa,QAAA,EAAU;AACzC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,gCAAA,EAAmC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,kGAAA;AAAA,KAC7D;AAAA,EACF;AACA,EAAA,MAAM,MACJ,MAAA,CAAO,QAAA,CAAS,GAAA,IAAO,MAAA,CAAO,SAAS,gBAAA,IAAoB,EAAA;AAC7D,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,mBAAmB,oCAAoC,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,IAAI,uBAAA,CAAwB,EAAE,GAAA,EAAK,CAAA;AAC5C;AAKO,SAAS2B,SAAQ,OAAA,EAAkC;AACxD,EAAA,OAAO,IAAI,QAAQ,OAAgB,CAAA;AACrC;;;AC5FO,IAAM,4BAAN,MAAiE;AAAA,EAC7D,IAAA,GAAO,MAAA;AAAA,EACC,EAAA;AAAA,EACA,CAAA;AAAA,EAEjB,YAAY,OAAA,EAAuC;AACjD,IAAA,IAAA,CAAK,EAAA,GAAK,SAAS,EAAA,IAAM,GAAA;AACzB,IAAA,IAAA,CAAK,CAAA,GAAI,SAAS,CAAA,IAAK,IAAA;AAAA,EACzB;AAAA,EAEA,MAAM,MAAA,CACJ,KAAA,EACA,SAAA,EACA,IAAA,EAC6B;AAC7B,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,IAAA,IAAQ,CAAA,EAAG;AACvC,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MACnC,IAAI,GAAA,CAAI,EAAA;AAAA,MACR,MAAA,EAAQ,QAAA,CAAS,GAAA,CAAI,IAAI;AAAA,KAC3B,CAAE,CAAA;AACF,IAAA,MAAM,WAAA,GAAc,SAAS,KAAK,CAAA;AAClC,IAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,IAAI,IAAA,CAAK,MAAA;AACf,IAAA,MAAM,KAAA,GACJ,IAAA,CAAK,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAEnE,IAAA,MAAM,EAAA,uBAAS,GAAA,EAAoB;AACnC,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACvC,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,IAAI,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG;AAC7B,UAAA,KAAA,IAAS,CAAA;AAAA,QACX;AAAA,MACF;AACA,MAAA,EAAA,CAAG,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA,IACpB;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC/B,MAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,MAAA,KAAA,MAAW,KAAA,IAAS,IAAI,MAAA,EAAQ;AAC9B,QAAA,KAAA,CAAM,IAAI,KAAA,EAAA,CAAQ,KAAA,CAAM,IAAI,KAAK,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,MAC9C;AACA,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,QAAA,MAAM,EAAA,GAAK,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,IAAK,CAAA;AAC9B,QAAA,IAAI,OAAO,CAAA,EAAG;AACZ,UAAA;AAAA,QACF;AACA,QAAA,MAAM,CAAA,GAAI,EAAA,CAAG,GAAA,CAAI,IAAI,CAAA,IAAK,CAAA;AAC1B,QAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,CAAA,GAAA,CAAK,IAAI,CAAA,GAAI,GAAA,KAAQ,IAAI,GAAA,CAAI,CAAA;AAClD,QAAA,MAAM,KAAA,GACJ,EAAA,GAAK,IAAA,CAAK,EAAA,IAAM,CAAA,GAAI,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,CAAA,IAAK,GAAA,CAAI,MAAA,CAAO,MAAA,GAAS,KAAA,CAAA,CAAA;AAC7D,QAAA,KAAA,IAAS,GAAA,IAAQ,EAAA,IAAM,IAAA,CAAK,EAAA,GAAK,CAAA,CAAA,GAAM,KAAA,CAAA;AAAA,MACzC;AACA,MAAA,OAAO,EAAE,QAAA,EAAU,GAAA,CAAI,EAAA,EAAI,KAAA,EAAM;AAAA,IACnC,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AACvC,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAAA,EACxD;AACF,CAAA;AAEA,SAAS,SAAS,IAAA,EAAwB;AACxC,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,KAAA,CAAM,iBAAiB,CAAA,CACvB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAC/B;AAGO,SAAS,KAAK,OAAA,EAA8D;AACjF,EAAA,OAAO,IAAI,0BAA0B,OAAO,CAAA;AAC9C;;;AC9DA,IAAM,uBAAN,MAAuD;AAAA,EAC5C,IAAA;AAAA,EACQ,OAAA;AAAA,EAEjB,YAAY,OAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,MAAM,MAAA,CACJ,KAAA,EACA,SAAA,EACA,IAAA,EACsB;AACtB,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,SAAA,IAAa,GAAA;AAC5C,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,SAAS,CAAA;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,IAAA,CAAK,QAAQ,GAAA,EAAK;AAAA,QACxC,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAAA,SAC9C;AAAA,QACA,MAAM,IAAA,CAAK,SAAA;AAAA,UACT,KAAK,OAAA,CAAQ,SAAA;AAAA,YACX,KAAA;AAAA,YACA,SAAA;AAAA,YACA,IAAA;AAAA,YACA,KAAK,OAAA,CAAQ;AAAA;AACf,SACF;AAAA,QACA,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AACD,MAAA,MAAM,IAAA,GAAgB,MAAM,GAAA,CAAI,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AACvD,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,OAAO,SAAA,CAAU,MAAM,CAAA,EAAG,IAAI,EAAE,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,UAC7C,IAAI,CAAA,CAAE,EAAA;AAAA,UACN,OAAO,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAC;AAAA,SAC7C,CAAE,CAAA;AAAA,MACJ;AACA,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,MAAM,SAAS,CAAA;AACxD,MAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,SAAA,CAAU,MAAM,CAAA,EAAG,IAAI,EAAE,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,QAC7C,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,OAAO,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAC;AAAA,OAC7C,CAAE,CAAA;AAAA,IACJ,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAA;AAGO,SAAS,aAAa,OAAA,EAKR;AACnB,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC/C,EAAA,OAAO,IAAI,oBAAA,CAAqB;AAAA,IAC9B,IAAA,EAAM,eAAA;AAAA,IACN,GAAA,EAAK,GAAG,IAAI,CAAA,OAAA,CAAA;AAAA,IACZ,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,SAAA,EAAW,CAAC,KAAA,EAAO,SAAA,EAAW,MAAM,KAAA,MAAW;AAAA,MAC7C,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAW,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MACtC,KAAA,EAAO;AAAA,KACT,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,IAAA,EAAM,SAAA,KAAc;AACjC,MAAA,MAAM,OAAA,GACH,IAAA,CACE,OAAA,IAAW,EAAC;AACjB,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACzB,EAAA,EAAI,UAAU,CAAA,CAAE,KAAK,GAAG,EAAA,IAAM,MAAA,CAAO,EAAE,KAAK,CAAA;AAAA,QAC5C,OAAO,CAAA,CAAE;AAAA,OACX,CAAE,CAAA;AAAA,IACJ;AAAA,GACD,CAAA;AACH;AAEO,SAAS,aAAa,OAAA,EAIR;AACnB,EAAA,OAAO,IAAI,oBAAA,CAAqB;AAAA,IAC9B,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,+BAAA;AAAA,IACL,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,KAAA,EAAO,QAAQ,KAAA,IAAS,oCAAA;AAAA,IACxB,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,SAAA,EAAW,CAAC,KAAA,EAAO,SAAA,EAAW,MAAM,KAAA,MAAW;AAAA,MAC7C,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAW,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MACtC,KAAA,EAAO;AAAA,KACT,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,IAAA,EAAM,SAAA,KAAc;AACjC,MAAA,MAAM,OAAA,GACH,IAAA,CACE,OAAA,IAAW,EAAC;AACjB,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACzB,EAAA,EAAI,UAAU,CAAA,CAAE,KAAK,GAAG,EAAA,IAAM,MAAA,CAAO,EAAE,KAAK,CAAA;AAAA,QAC5C,OAAO,CAAA,CAAE;AAAA,OACX,CAAE,CAAA;AAAA,IACJ;AAAA,GACD,CAAA;AACH;AAEO,SAAS,eAAe,OAAA,EAIV;AACnB,EAAA,OAAO,IAAI,oBAAA,CAAqB;AAAA,IAC9B,IAAA,EAAM,QAAA;AAAA,IACN,GAAA,EAAK,kCAAA;AAAA,IACL,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,KAAA,EAAO,QAAQ,KAAA,IAAS,aAAA;AAAA,IACxB,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,SAAA,EAAW,CAAC,KAAA,EAAO,SAAA,EAAW,MAAM,KAAA,MAAW;AAAA,MAC7C,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAW,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MACtC,KAAA,EAAO;AAAA,KACT,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,IAAA,EAAM,SAAA,KAAc;AACjC,MAAA,MAAM,OAAA,GACH,IAAA,CACE,OAAA,IAAW,EAAC;AACjB,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACzB,EAAA,EAAI,UAAU,CAAA,CAAE,KAAK,GAAG,EAAA,IAAM,MAAA,CAAO,EAAE,KAAK,CAAA;AAAA,QAC5C,OAAO,CAAA,CAAE;AAAA,OACX,CAAE,CAAA;AAAA,IACJ;AAAA,GACD,CAAA;AACH;AAGO,SAAS,YAAY,OAAA,EAKP;AACnB,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC/C,EAAA,OAAO,IAAI,oBAAA,CAAqB;AAAA,IAC9B,IAAA,EAAM,KAAA;AAAA,IACN,GAAA,EAAK,GAAG,IAAI,CAAA,OAAA,CAAA;AAAA,IACZ,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,SAAA,EAAW,CAAC,KAAA,EAAO,SAAA,EAAW,MAAM,KAAA,MAAW;AAAA,MAC7C,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAW,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MACtC,KAAA,EAAO;AAAA,KACT,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,IAAA,EAAM,SAAA,KAAc;AACjC,MAAA,MAAM,OAAA,GACH,IAAA,CACE,OAAA,IAAW,EAAC;AACjB,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACzB,EAAA,EAAI,UAAU,CAAA,CAAE,KAAK,GAAG,EAAA,IAAM,MAAA,CAAO,EAAE,KAAK,CAAA;AAAA,QAC5C,OAAO,CAAA,CAAE;AAAA,OACX,CAAE,CAAA;AAAA,IACJ;AAAA,GACD,CAAA;AACH;AAMO,SAAS,eAAe,OAAA,EAKV;AACnB,EAAA,MAAM,IAAA,GAAA,CAAQ,OAAA,CAAQ,OAAA,IAAW,2BAAA,EAA6B,OAAA;AAAA,IAC5D,MAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,cAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AAEvC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,MAAM,MAAA,CAAO,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM;AACnC,MAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,MAAM,SAAS,SAAA,CACZ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA,CAC9C,KAAK,MAAM,CAAA;AACd,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,SAAS,CAAA;AAC5D,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,iBAAA,CAAA,EAAqB;AAAA,UAClD,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAA,EAAgB,kBAAA;AAAA,YAChB,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,MAAM,CAAA;AAAA,WACzC;AAAA,UACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,YACnB,KAAA;AAAA,YACA,WAAA,EAAa,CAAA;AAAA,YACb,eAAA,EAAiB,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,YACvC,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,IAAA,EAAM,QAAA;AAAA,gBACN,OAAA,EACE;AAAA,eACJ;AAAA,cACA;AAAA,gBACE,IAAA,EAAM,MAAA;AAAA,gBACN,OAAA,EAAS,UAAU,KAAK;;AAAA;AAAA,EAAmB,MAAM;;AAAA,eAAA,EAAsB,IAAI,CAAA,oCAAA;AAAA;AAC7E;AACF,WACD,CAAA;AAAA,UACD,QAAQ,UAAA,CAAW;AAAA,SACpB,CAAA;AACD,QAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAG7B,QAAA,MAAM,UAAU,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA,EAAG,SAAS,OAAA,IAAW,IAAA;AACvD,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,QAC7B,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,SAAA,CAAU,MAAM,CAAA,EAAG,IAAI,EAAE,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,YAC7C,IAAI,CAAA,CAAE,EAAA;AAAA,YACN,OAAO,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAC;AAAA,WAC7C,CAAE,CAAA;AAAA,QACJ;AACA,QAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AACnC,QAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,UAAA,OAAO,SAAA,CAAU,MAAM,CAAA,EAAG,IAAI,EAAE,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,YAC7C,IAAI,CAAA,CAAE,EAAA;AAAA,YACN,OAAO,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAC;AAAA,WAC7C,CAAE,CAAA;AAAA,QACJ;AACA,QAAA,OAAO,OAAA,CACJ,MAAA,CAAO,CAAC,CAAA,KAAM,UAAU,CAAA,CAAE,KAAK,CAAC,CAAA,CAChC,MAAM,CAAA,EAAG,IAAI,CAAA,CACb,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACX,EAAA,EAAI,SAAA,CAAU,CAAA,CAAE,KAAK,CAAA,CAAG,EAAA;AAAA,UACxB,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,IAAK;AAAA,SAC5B,CAAE,CAAA;AAAA,MACN,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,SAAA,CAAU,MAAM,CAAA,EAAG,IAAI,EAAE,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,UAC7C,IAAI,CAAA,CAAE,EAAA;AAAA,UACN,OAAO,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAC;AAAA,SAC7C,CAAE,CAAA;AAAA,MACJ,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAAA,IACF;AAAA,GACF;AACF;;;ACrSO,SAAS,SAAA,GAAyB;AACvC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,MAAM,UAAU,KAAA,EAAmC;AACjD,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,OAAO,cAAwB,CAAA;AACjD,QAAA,MAAM,YAAA,GACH,GAAA,CAGK,YAAA,IACL,GAAA,CAGO,OAAA,EAAS,YAAA;AACnB,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,OAAO,EAAE,MAAM,EAAA,EAAG;AAAA,QACpB;AACA,QAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AACvC,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA;AAC3C,UAAA,OAAO,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAK,EAAE;AAAA,QACzC,CAAA,SAAE;AACA,UAAA,MAAM,OAAO,SAAA,EAAU;AAAA,QACzB;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAE,MAAM,EAAA,EAAG;AAAA,MACpB;AAAA,IACF;AAAA,GACF;AACF;;;ACxBA,IAAM,iCAAN,MAA+D;AAAA,EACpD,IAAA;AAAA,EACQ,OAAA;AAAA,EAEjB,YAAY,OAAA,EAA4B;AACtC,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,MAAM,OAAA,CAAQ,KAAA,EAAe,QAAA,GAAW,WAAA,EAAoC;AAC1E,IAAA,MAAM,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACpD,IAAA,MAAM,GAAA,GAAM,GAAG,IAAI,CAAA,iBAAA,CAAA;AACnB,IAAA,MAAM,UAAU,CAAA,KAAA,EAAQ,QAAQ,WAAW,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAC,CAAA,CAAA;AACnE,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,MACZ,MAAM,WAAW,KAAA,EAAM;AAAA,MACvB,IAAA,CAAK,QAAQ,SAAA,IAAa;AAAA,KAC5B;AACA,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAC3B,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAAA,SAC9C;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,KAAA,EAAO,KAAK,OAAA,CAAQ,KAAA;AAAA,UACpB,QAAA,EAAU;AAAA,YACR;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,OAAA,EAAS;AAAA,gBACP;AAAA,kBACE,IAAA,EAAM,MAAA;AAAA,kBACN,IAAA,EAAM;AAAA,iBACR;AAAA,gBACA,EAAE,IAAA,EAAM,WAAA,EAAa,WAAW,EAAE,GAAA,EAAK,SAAQ;AAAE;AACnD;AACF,WACF;AAAA,UACA,UAAA,EAAY;AAAA,SACb,CAAA;AAAA,QACD,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AACD,MAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAG7B,MAAA,MAAM,UAAU,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA,EAAG,SAAS,OAAA,IAAW,EAAA;AACvD,MAAA,OAAO,gBAAgB,OAAO,CAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAE,OAAA,EAAS,EAAA,EAAI,aAAa,EAAA,EAAI,QAAA,EAAU,EAAC,EAAE;AAAA,IACtD,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAA;AAEA,SAAS,gBAAgB,OAAA,EAA+B;AACtD,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,aAAa,CAAA;AACzC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,EAAE,OAAA,EAAS,OAAA,CAAQ,IAAA,EAAK,EAAG,WAAA,EAAa,OAAA,CAAQ,IAAA,EAAK,EAAG,QAAA,EAAU,EAAC,EAAE;AAAA,IAC9E;AACA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAClC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA;AAAA,MACpC,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,WAAA,IAAe,EAAE,CAAA;AAAA,MAC5C,QAAA,EAAU,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,GACnC,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,GAC1B;AAAC,KACP;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,OAAA,EAAS,OAAA,CAAQ,IAAA,EAAK,EAAG,WAAA,EAAa,OAAA,CAAQ,IAAA,EAAK,EAAG,QAAA,EAAU,EAAC,EAAE;AAAA,EAC9E;AACF;AAEO,SAAS,aAAa,OAAA,EAKV;AACjB,EAAA,OAAO,IAAI,8BAAA,CAA+B;AAAA,IACxC,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EACE,QAAQ,OAAA,IACR,yDAAA;AAAA,IACF,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,KAAA,EAAO,QAAQ,KAAA,IAAS,kBAAA;AAAA,IACxB,WAAW,OAAA,CAAQ;AAAA,GACpB,CAAA;AACH;AAEO,SAAS,aAAa,OAAA,EAKV;AACjB,EAAA,OAAO,IAAI,8BAAA,CAA+B;AAAA,IACxC,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,QAAQ,OAAA,IAAW,2BAAA;AAAA,IAC5B,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,KAAA,EAAO,QAAQ,KAAA,IAAS,aAAA;AAAA,IACxB,WAAW,OAAA,CAAQ;AAAA,GACpB,CAAA;AACH;;;ACrGA,eAAsB,YAAA,CACpB,IAAA,EACA,UAAA,EACA,EAAA,EAC4B;AAC5B,EAAA,MAAM,UAA6B,EAAC;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,EAAY,KAAK,CAAA,EAAG;AACtC,IAAA,MAAM,EAAA,GAAK,YAAY,GAAA,EAAI;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,EAAG;AACT,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAA;AAAA,QACA,UAAA,EAAY,WAAA,CAAY,GAAA,EAAI,GAAI,EAAA;AAAA,QAChC,EAAA,EAAI;AAAA,OACL,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAA;AAAA,QACA,UAAA,EAAY,WAAA,CAAY,GAAA,EAAI,GAAI,EAAA;AAAA,QAChC,EAAA,EAAI,KAAA;AAAA,QACJ,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,OAC7D,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,kBAAA,CACd,OAAA,EACA,SAAA,EACA,UAAA,EACiB;AACjB,EAAA,MAAM,YAAY,OAAA,CACf,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CAClB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA,CACvB,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACvB,EAAA,MAAM,GAAA,GACJ,SAAA,CAAU,MAAA,KAAW,CAAA,GACjB,IACA,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,IAAI,SAAA,CAAU,MAAA;AAEvD,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAO,OAAA,CAAQ,MAAA;AAAA,MACf,IAAI,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CAAE,MAAA;AAAA,MAChC,MAAA,EAAQ,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,EAAE,CAAA,CAAE,MAAA;AAAA,MACrC,KAAA,EAAO,GAAA;AAAA,MACP,KAAA,EAAO,UAAA,CAAW,SAAA,EAAW,GAAG,CAAA;AAAA,MAChC,KAAA,EAAO,UAAA,CAAW,SAAA,EAAW,IAAI,CAAA;AAAA,MACjC,KAAA,EAAO,UAAA,CAAW,SAAA,EAAW,IAAI;AAAA;AACnC,GACF;AACF;AAEA,SAAS,UAAA,CAAW,QAAkB,CAAA,EAAmB;AACvD,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAChC,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AAAA,IACf,OAAO,MAAA,GAAS,CAAA;AAAA,IAChB,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,GAAI,MAAA,CAAO,MAAM,CAAA,GAAI,CAAC;AAAA,GAC9C;AACA,EAAA,OAAO,OAAO,GAAG,CAAA;AACnB","file":"index.cjs","sourcesContent":["/**\n * Operation-scoped errors with reason + suggestion for developer experience.\n */\n\n/** Base class for all Wolbarg errors. */\nexport class WolbargError extends Error {\n readonly code: string;\n readonly reason?: string;\n readonly suggestion?: string;\n readonly operation?: string;\n\n constructor(\n message: string,\n code: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, options);\n this.name = \"WolbargError\";\n this.code = code;\n this.reason = options?.reason;\n this.suggestion = options?.suggestion;\n this.operation = options?.operation;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown when SDK initialization fails. */\nexport class InitializationError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"INITIALIZATION_ERROR\", options);\n this.name = \"InitializationError\";\n }\n}\n\n/** Thrown when configuration values are missing or invalid. */\nexport class ConfigurationError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"CONFIGURATION_ERROR\", options);\n this.name = \"ConfigurationError\";\n }\n}\n\n/** Thrown when method arguments fail validation. */\nexport class ValidationError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"VALIDATION_ERROR\", options);\n this.name = \"ValidationError\";\n }\n}\n\n/** Thrown when a database operation fails. */\nexport class DatabaseError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"DATABASE_ERROR\", options);\n this.name = \"DatabaseError\";\n }\n}\n\n/**\n * Thrown when SQLite write-lock retries are exhausted.\n * Stable code: WOLBARG_STORAGE_LOCKED\n */\nexport class StorageLockedError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"WOLBARG_STORAGE_LOCKED\", options);\n this.name = \"StorageLockedError\";\n }\n}\n\n/** Thrown when an embedding request fails. */\nexport class EmbeddingError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"EMBEDDING_ERROR\", options);\n this.name = \"EmbeddingError\";\n }\n}\n\n/** Thrown when compression (LLM summarization) fails. */\nexport class CompressionError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"COMPRESSION_ERROR\", options);\n this.name = \"CompressionError\";\n }\n}\n\n/** Thrown when a requested memory does not exist. */\nexport class MemoryNotFoundError extends WolbargError {\n constructor(\n message: string,\n options?: ErrorOptions & {\n reason?: string;\n suggestion?: string;\n operation?: string;\n },\n ) {\n super(message, \"MEMORY_NOT_FOUND\", options);\n this.name = \"MemoryNotFoundError\";\n }\n}\n\n/**\n * Thrown when a method requires an optional provider that was not configured.\n */\nexport class ProviderNotConfiguredError extends ConfigurationError {\n readonly provider: string;\n\n constructor(provider: string, method: string, hint: string) {\n super(`${method} requires ${provider} — ${hint}`, {\n operation: method,\n reason: `${provider} was not configured`,\n suggestion: hint,\n });\n this.name = \"ProviderNotConfiguredError\";\n this.provider = provider;\n }\n}\n\n/**\n * Thrown when graph checkpoint / rollback / export / import is requested for a\n * network-backed graph provider (e.g. Neo4j). File-backed SQLite graph supports\n * snapshots; Neo4j does not in v1 — we refuse rather than silently skip.\n */\nexport class GraphCheckpointNotSupportedError extends WolbargError {\n constructor(backend: string, operation: string) {\n super(\n `graph checkpoint not supported for network-backed graph providers (${backend})`,\n \"GRAPH_CHECKPOINT_NOT_SUPPORTED\",\n {\n operation,\n reason: `${backend} is networked / not file-backed`,\n suggestion:\n \"Use sqliteGraph({ path }) for local snapshots, or checkpoint memory storage only without a network graph provider.\",\n },\n );\n this.name = \"GraphCheckpointNotSupportedError\";\n }\n}\n\n/** Map low-level SQLite / driver errors into actionable operation errors. */\nexport function wrapOperationError(\n operation: string,\n error: unknown,\n): WolbargError {\n // Preserve typed SDK errors so callers can still use instanceof checks.\n if (error instanceof WolbargError) {\n return error;\n }\n\n const raw = error instanceof Error ? error.message : String(error);\n const lower = raw.toLowerCase();\n\n if (lower.includes(\"database is locked\") || lower.includes(\"sqlite_busy\")) {\n return new StorageLockedError(formatOperationMessage(operation, raw), {\n cause: error instanceof Error ? error : undefined,\n operation,\n reason: \"SQLite database locked\",\n suggestion:\n \"Increase concurrency.maxRetries or concurrency.lockTimeoutMs, or consider the Postgres backend for high-concurrency multi-agent workloads.\",\n });\n }\n\n if (lower.includes(\"no such file\") || lower.includes(\"enoent\")) {\n return new DatabaseError(formatOperationMessage(operation, raw), {\n cause: error instanceof Error ? error : undefined,\n operation,\n reason: \"Database file not found\",\n suggestion: \"Check the database path and ensure the directory exists.\",\n });\n }\n\n if (lower.includes(\"readonly\") || lower.includes(\"read-only\")) {\n return new DatabaseError(formatOperationMessage(operation, raw), {\n cause: error instanceof Error ? error : undefined,\n operation,\n reason: \"Database opened as read-only\",\n suggestion: \"Open the database with write permissions or choose another path.\",\n });\n }\n\n return new DatabaseError(formatOperationMessage(operation, raw), {\n cause: error instanceof Error ? error : undefined,\n operation,\n reason: raw,\n suggestion: \"Inspect the underlying cause and retry the operation.\",\n });\n}\n\nfunction formatOperationMessage(operation: string, reason: string | WolbargError): string {\n const reasonText =\n typeof reason === \"string\" ? reason : reason.reason ?? reason.message;\n return `Failed to execute ${operation}()\\nReason:\\n${reasonText}`;\n}\n","/**\n * Memory compression — provider-based summarization.\n */\n\nimport type { LlmProvider } from \"../llm/index.js\";\nimport type { MemoryRecord } from \"../types/index.js\";\nimport { CompressionError } from \"../errors/index.js\";\n\nconst SYSTEM_PROMPT = `You are a memory compression engine for multi-agent systems.\nGiven related memories from a single agent, produce ONE concise summary that preserves:\n- Key facts and decisions\n- Important entities, numbers, and identifiers\n- Actionable conclusions\n\nRules:\n- Output plain text only (no markdown headings, no bullet lists unless essential)\n- Do not invent facts that are not present\n- Prefer precision over verbosity\n- Keep the summary self-contained`;\n\n/** Contract for memory compression backends. */\nexport interface CompressionProvider {\n readonly name: string;\n compress(memories: MemoryRecord[]): Promise<string>;\n}\n\n/** Default compression provider wrapping an {@link LlmProvider}. */\nexport class LlmCompressionProvider implements CompressionProvider {\n readonly name = \"llm\";\n private readonly llm: LlmProvider;\n\n constructor(llm: LlmProvider) {\n this.llm = llm;\n }\n\n async compress(memories: MemoryRecord[]): Promise<string> {\n return compressMemories(this.llm, memories);\n }\n}\n\nexport async function compressMemories(\n llm: LlmProvider,\n memories: MemoryRecord[],\n): Promise<string> {\n if (memories.length === 0) {\n throw new CompressionError(\"No memories available to compress\");\n }\n\n const payload = memories\n .map((memory, index) => {\n const meta =\n Object.keys(memory.metadata).length > 0\n ? `\\nMetadata: ${JSON.stringify(memory.metadata)}`\n : \"\";\n return `[${index + 1}] (id=${memory.id}, created=${memory.createdAt.toISOString()})${meta}\\n${memory.content.text}`;\n })\n .join(\"\\n\\n\");\n\n try {\n return await llm.complete([\n { role: \"system\", content: SYSTEM_PROMPT },\n {\n role: \"user\",\n content: `Compress the following ${memories.length} memories into a single concise summary:\\n\\n${payload}`,\n },\n ]);\n } catch (error) {\n if (error instanceof CompressionError) {\n throw error;\n }\n throw new CompressionError(\n `Compression failed: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n}\n\nexport function createCompressionProvider(\n llm: LlmProvider,\n): CompressionProvider {\n return new LlmCompressionProvider(llm);\n}\n","/**\n * Chunking strategies for document ingestion.\n */\n\nexport interface Chunk {\n text: string;\n index: number;\n}\n\nexport interface ChunkingOptions {\n chunkSize?: number;\n overlap?: number;\n}\n\nexport interface ChunkingStrategy {\n readonly name: string;\n chunk(text: string, options?: ChunkingOptions): Chunk[];\n}\n\nfunction clampOptions(options?: ChunkingOptions): {\n chunkSize: number;\n overlap: number;\n} {\n const chunkSize = Math.max(32, options?.chunkSize ?? 800);\n const overlap = Math.min(\n Math.max(0, options?.overlap ?? 100),\n Math.floor(chunkSize / 2),\n );\n return { chunkSize, overlap };\n}\n\nfunction windowChunks(\n pieces: string[],\n chunkSize: number,\n overlap: number,\n joiner: string,\n): Chunk[] {\n if (pieces.length === 0) {\n return [];\n }\n const chunks: Chunk[] = [];\n let buf = \"\";\n let index = 0;\n\n const flush = (): void => {\n const trimmed = buf.trim();\n if (trimmed) {\n chunks.push({ text: trimmed, index });\n index += 1;\n }\n };\n\n for (const piece of pieces) {\n const candidate = buf ? `${buf}${joiner}${piece}` : piece;\n if (candidate.length <= chunkSize) {\n buf = candidate;\n continue;\n }\n flush();\n if (piece.length > chunkSize) {\n // Hard-split oversized piece\n let start = 0;\n while (start < piece.length) {\n const end = Math.min(start + chunkSize, piece.length);\n chunks.push({ text: piece.slice(start, end).trim(), index });\n index += 1;\n start = Math.max(end - overlap, end);\n }\n buf = \"\";\n } else {\n buf = piece;\n }\n }\n flush();\n\n if (overlap > 0 && chunks.length > 1) {\n // Rebuild with overlap by sliding on joined text for stability\n const full = pieces.join(joiner);\n return slidingWindow(full, chunkSize, overlap);\n }\n return chunks;\n}\n\nfunction slidingWindow(\n text: string,\n chunkSize: number,\n overlap: number,\n): Chunk[] {\n const chunks: Chunk[] = [];\n let start = 0;\n let index = 0;\n while (start < text.length) {\n const end = Math.min(start + chunkSize, text.length);\n const slice = text.slice(start, end).trim();\n if (slice) {\n chunks.push({ text: slice, index });\n index += 1;\n }\n if (end >= text.length) {\n break;\n }\n start = Math.max(end - overlap, start + 1);\n }\n return chunks;\n}\n\nexport class FixedChunkingStrategy implements ChunkingStrategy {\n readonly name = \"fixed\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n const { chunkSize, overlap } = clampOptions(options);\n return slidingWindow(text, chunkSize, overlap);\n }\n}\n\nexport class SentenceChunkingStrategy implements ChunkingStrategy {\n readonly name = \"sentence\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n const { chunkSize, overlap } = clampOptions(options);\n const sentences = text\n .split(/(?<=[.!?])\\s+/)\n .map((s) => s.trim())\n .filter(Boolean);\n return windowChunks(sentences, chunkSize, overlap, \" \");\n }\n}\n\nexport class ParagraphChunkingStrategy implements ChunkingStrategy {\n readonly name = \"paragraph\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n const { chunkSize, overlap } = clampOptions(options);\n const paragraphs = text\n .split(/\\n\\s*\\n/)\n .map((p) => p.trim())\n .filter(Boolean);\n return windowChunks(paragraphs, chunkSize, overlap, \"\\n\\n\");\n }\n}\n\nexport class MarkdownChunkingStrategy implements ChunkingStrategy {\n readonly name = \"markdown\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n const { chunkSize, overlap } = clampOptions(options);\n const sections = text\n .split(/(?=^#{1,6}\\s)/m)\n .map((s) => s.trim())\n .filter(Boolean);\n if (sections.length <= 1) {\n return new ParagraphChunkingStrategy().chunk(text, options);\n }\n return windowChunks(sections, chunkSize, overlap, \"\\n\\n\");\n }\n}\n\nexport class HeadingChunkingStrategy implements ChunkingStrategy {\n readonly name = \"heading\";\n chunk(text: string, options?: ChunkingOptions): Chunk[] {\n return new MarkdownChunkingStrategy().chunk(text, options);\n }\n}\n\nexport function createChunkingStrategy(\n name: \"fixed\" | \"sentence\" | \"paragraph\" | \"markdown\" | \"heading\" = \"sentence\",\n): ChunkingStrategy {\n switch (name) {\n case \"fixed\":\n return new FixedChunkingStrategy();\n case \"paragraph\":\n return new ParagraphChunkingStrategy();\n case \"markdown\":\n return new MarkdownChunkingStrategy();\n case \"heading\":\n return new HeadingChunkingStrategy();\n case \"sentence\":\n default:\n return new SentenceChunkingStrategy();\n }\n}\n\nexport function inferChunkingStrategy(text: string): ChunkingStrategy {\n if (/^#{1,6}\\s/m.test(text)) {\n return new MarkdownChunkingStrategy();\n }\n return new SentenceChunkingStrategy();\n}\n","/**\r\n * Shared utility helpers.\r\n */\r\n\r\nimport { ValidationError } from \"../errors/index.js\";\r\n\r\n/** Generate a RFC 4122 version 4 UUID. */\r\nexport function createId(): string {\r\n return crypto.randomUUID();\r\n}\r\n\r\n/** Current UTC timestamp as an ISO-8601 string. */\r\nexport function nowIso(): string {\r\n return new Date().toISOString();\r\n}\r\n\r\n/** Parse an ISO-8601 string into a Date. */\r\nexport function parseIso(value: string): Date {\r\n return new Date(value);\r\n}\r\n\r\n/** Assert that a string is non-empty after trimming. */\r\nexport function assertNonEmptyString(\r\n value: unknown,\r\n fieldName: string,\r\n): asserts value is string {\r\n if (typeof value !== \"string\" || value.trim().length === 0) {\r\n throw new ValidationError(`${fieldName} must be a non-empty string`);\r\n }\r\n}\r\n\r\n/** Assert that a value is a finite number within an optional range. */\r\nexport function assertFiniteNumber(\r\n value: unknown,\r\n fieldName: string,\r\n options?: { min?: number; max?: number },\r\n): asserts value is number {\r\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\r\n throw new ValidationError(`${fieldName} must be a finite number`);\r\n }\r\n if (options?.min !== undefined && value < options.min) {\r\n throw new ValidationError(`${fieldName} must be >= ${options.min}`);\r\n }\r\n if (options?.max !== undefined && value > options.max) {\r\n throw new ValidationError(`${fieldName} must be <= ${options.max}`);\r\n }\r\n}\r\n\r\nconst EMPTY_META_JSON = \"{}\";\r\n\r\n/** Safely serialize opaque metadata to JSON text. */\r\nexport function serializeMetadata(metadata: Record<string, unknown>): string {\r\n for (const _key in metadata) {\r\n return JSON.stringify(metadata);\r\n }\r\n return EMPTY_META_JSON;\r\n}\r\n\r\n/** Safely deserialize opaque metadata from JSON text. */\r\nexport function deserializeMetadata(raw: string): Record<string, unknown> {\r\n if (!raw || raw === EMPTY_META_JSON) {\r\n return {};\r\n }\r\n try {\r\n const parsed: unknown = JSON.parse(raw);\r\n if (parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)) {\r\n return parsed as Record<string, unknown>;\r\n }\r\n return {};\r\n } catch {\r\n return {};\r\n }\r\n}\r\n\r\n/**\r\n * Convert a Float32Array embedding into a Buffer suitable for sqlite-vec.\r\n */\r\nexport function embeddingToBuffer(embedding: Float32Array): Buffer {\r\n return Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);\r\n}\r\n\r\n/**\r\n * Convert cosine distance (as returned by sqlite-vec) to cosine similarity.\r\n * sqlite-vec cosine distance ≈ `1 - cosine_similarity`, range roughly [0, 2].\r\n */\r\nexport function distanceToSimilarity(distance: number): number {\r\n return 1 - distance;\r\n}\r\n\r\n/**\r\n * Simple async mutex for serializing write-critical sections across\r\n * concurrent async callers in the same process.\r\n */\r\nexport class AsyncMutex {\r\n private chain: Promise<void> = Promise.resolve();\r\n\r\n async runExclusive<T>(fn: () => Promise<T> | T): Promise<T> {\r\n let release!: () => void;\r\n const next = new Promise<void>((resolve) => {\r\n release = resolve;\r\n });\r\n const previous = this.chain;\r\n this.chain = previous.then(() => next);\r\n\r\n await previous;\r\n try {\r\n return await fn();\r\n } finally {\r\n release();\r\n }\r\n }\r\n}\r\n\r\n/** Join a base URL with a path, avoiding duplicate slashes. */\r\nexport function joinUrl(baseUrl: string, path: string): string {\r\n const base = baseUrl.replace(/\\/+$/, \"\");\r\n const suffix = path.startsWith(\"/\") ? path : `/${path}`;\r\n return `${base}${suffix}`;\r\n}\r\n","/**\n * Embedding providers and named factories.\n */\n\nimport type { EmbeddingConfig } from \"../types/index.js\";\nimport { EmbeddingError } from \"../errors/index.js\";\nimport { joinUrl } from \"../utils/index.js\";\n\n/** Contract for any embedding backend. */\nexport interface EmbeddingProvider {\n readonly model: string;\n /** Produce a float embedding for the given text. */\n embed(text: string): Promise<Float32Array>;\n /** Optional batch embedding. SDK falls back to parallel `embed` when absent. */\n embedBatch?(texts: string[]): Promise<Float32Array[]>;\n /** Lightweight connectivity + dimension probe. */\n validate(): Promise<{ dimensions: number }>;\n}\n\ninterface OpenAIEmbeddingResponse {\n data?: Array<{ embedding?: number[]; index?: number }>;\n error?: { message?: string };\n}\n\nexport class OpenAICompatibleEmbeddingProvider implements EmbeddingProvider {\n readonly model: string;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly timeoutMs: number;\n\n constructor(config: EmbeddingConfig) {\n this.baseUrl = config.baseUrl;\n this.apiKey = config.apiKey;\n this.model = config.model;\n this.timeoutMs = config.timeoutMs ?? 30_000;\n }\n\n async embed(text: string): Promise<Float32Array> {\n const response = await this.request(text);\n const vector = response.data?.[0]?.embedding;\n if (!vector || vector.length === 0) {\n throw new EmbeddingError(\"Embedding response did not contain a vector\");\n }\n return Float32Array.from(vector);\n }\n\n async embedBatch(texts: string[]): Promise<Float32Array[]> {\n if (texts.length === 0) {\n return [];\n }\n if (texts.length === 1) {\n return [await this.embed(texts[0]!)];\n }\n const response = await this.request(texts);\n const data = response.data ?? [];\n const sorted = [...data].sort(\n (a, b) => (a.index ?? 0) - (b.index ?? 0),\n );\n if (sorted.length !== texts.length) {\n // Fallback: embed sequentially\n const out: Float32Array[] = [];\n for (const text of texts) {\n out.push(await this.embed(text));\n }\n return out;\n }\n return sorted.map((item) => {\n if (!item.embedding || item.embedding.length === 0) {\n throw new EmbeddingError(\"Embedding batch response contained an empty vector\");\n }\n return Float32Array.from(item.embedding);\n });\n }\n\n async validate(): Promise<{ dimensions: number }> {\n try {\n const embedding = await this.embed(\"Wolbarg health check\");\n return { dimensions: embedding.length };\n } catch (error) {\n if (error instanceof EmbeddingError) {\n throw error;\n }\n throw new EmbeddingError(\n `Failed to validate embedding endpoint: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n private async request(\n input: string | string[],\n ): Promise<OpenAIEmbeddingResponse> {\n const url = joinUrl(this.baseUrl, \"/embeddings\");\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n input,\n }),\n signal: controller.signal,\n });\n\n let body: OpenAIEmbeddingResponse;\n try {\n body = (await res.json()) as OpenAIEmbeddingResponse;\n } catch {\n throw new EmbeddingError(\n `Embedding endpoint returned non-JSON response (HTTP ${res.status})`,\n );\n }\n\n if (!res.ok) {\n const message = body.error?.message ?? `HTTP ${res.status}`;\n throw new EmbeddingError(`Embedding request failed: ${message}`);\n }\n\n return body;\n } catch (error) {\n if (error instanceof EmbeddingError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new EmbeddingError(\n `Embedding request timed out after ${this.timeoutMs}ms`,\n );\n }\n throw new EmbeddingError(\n `Embedding request failed: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n } finally {\n clearTimeout(timer);\n }\n }\n\n private describe(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n }\n}\n\nexport function createEmbeddingProvider(\n config: EmbeddingConfig,\n): EmbeddingProvider {\n return new OpenAICompatibleEmbeddingProvider(config);\n}\n\nfunction factory(\n defaults: Partial<EmbeddingConfig> & Pick<EmbeddingConfig, \"baseUrl\">,\n) {\n return (config: Omit<EmbeddingConfig, \"baseUrl\"> & { baseUrl?: string }): EmbeddingProvider =>\n createEmbeddingProvider({\n baseUrl: config.baseUrl ?? defaults.baseUrl,\n apiKey: config.apiKey,\n model: config.model,\n timeoutMs: config.timeoutMs,\n });\n}\n\nexport const openaiCompatibleEmbedding = (\n config: EmbeddingConfig,\n): EmbeddingProvider => createEmbeddingProvider(config);\n\nexport const openaiEmbedding = factory({\n baseUrl: \"https://api.openai.com/v1\",\n});\n\nexport const ollamaEmbedding = factory({\n baseUrl: \"http://127.0.0.1:11434/v1\",\n});\n\nexport const openRouterEmbedding = factory({\n baseUrl: \"https://openrouter.ai/api/v1\",\n});\n\nexport const lmStudioEmbedding = factory({\n baseUrl: \"http://127.0.0.1:1234/v1\",\n});\n\nexport const geminiEmbedding = factory({\n baseUrl: \"https://generativelanguage.googleapis.com/v1beta/openai\",\n});\n\nexport const togetherEmbedding = factory({\n baseUrl: \"https://api.together.xyz/v1\",\n});\n\nexport const vllmEmbedding = factory({\n baseUrl: \"http://127.0.0.1:8000/v1\",\n});\n\n/** Embed many texts, using batch API when available. */\nexport async function embedMany(\n provider: EmbeddingProvider,\n texts: string[],\n concurrency = 8,\n): Promise<Float32Array[]> {\n if (provider.embedBatch) {\n return provider.embedBatch(texts);\n }\n const out: Float32Array[] = new Array(texts.length);\n let index = 0;\n async function worker(): Promise<void> {\n while (index < texts.length) {\n const current = index;\n index += 1;\n out[current] = await provider.embed(texts[current]!);\n }\n }\n await Promise.all(\n Array.from({ length: Math.min(concurrency, texts.length) }, () => worker()),\n );\n return out;\n}\n","/**\n * Transparent embedding cache wrapping any EmbeddingProvider.\n */\n\nimport { createHash } from \"node:crypto\";\n\n/** Minimal provider contract — avoids circular import with embedding/index.ts */\nexport interface EmbeddingProviderLike {\n readonly model: string;\n embed(text: string): Promise<Float32Array>;\n embedBatch?(texts: string[]): Promise<Float32Array[]>;\n validate(): Promise<{ dimensions: number }>;\n}\n\nexport interface EmbeddingCacheConfig {\n /** Default true in 0.4 */\n enabled?: boolean;\n /** Lazy TTL expiry on read; default no expiry */\n ttlMs?: number;\n /** LRU eviction when set; default unbounded */\n maxEntries?: number;\n}\n\nexport interface ResolvedEmbeddingCacheConfig {\n enabled: boolean;\n ttlMs: number | null;\n maxEntries: number | null;\n}\n\nexport function resolveEmbeddingCacheConfig(\n input?: EmbeddingCacheConfig,\n): ResolvedEmbeddingCacheConfig {\n return {\n enabled: input?.enabled ?? true,\n ttlMs: input?.ttlMs ?? null,\n maxEntries: input?.maxEntries ?? null,\n };\n}\n\nexport function embeddingCacheKey(content: string, model: string): string {\n const hash = createHash(\"sha256\").update(content, \"utf8\").digest(\"hex\");\n return `${hash}:${model}`;\n}\n\nexport interface EmbeddingCacheStore {\n get(cacheKey: string): Promise<Float32Array | null>;\n set(cacheKey: string, model: string, vector: Float32Array): Promise<void>;\n touch(cacheKey: string): Promise<void>;\n evictIfNeeded(maxEntries: number): Promise<void>;\n}\n\nexport interface CacheAwareEmbedding extends EmbeddingProviderLike {\n readonly cacheHits: number;\n readonly cacheMisses: number;\n resetCacheStats(): void;\n}\n\n/**\n * Wrap an embedding provider with a content+model cache.\n * Cache check happens per-item before batch assembly.\n */\nexport function withEmbeddingCache(\n provider: EmbeddingProviderLike,\n store: EmbeddingCacheStore,\n config: ResolvedEmbeddingCacheConfig,\n): CacheAwareEmbedding {\n let cacheHits = 0;\n let cacheMisses = 0;\n\n async function embedOne(text: string): Promise<Float32Array> {\n if (!config.enabled) {\n cacheMisses += 1;\n return provider.embed(text);\n }\n const key = embeddingCacheKey(text, provider.model);\n const cached = await store.get(key);\n if (cached) {\n cacheHits += 1;\n // LRU touch is batched inside SqliteEmbeddingCacheStore.get — no per-hit write here.\n return cached;\n }\n cacheMisses += 1;\n const vector = await provider.embed(text);\n // Fire-and-forget durable write — L1 is updated synchronously inside set().\n void store.set(key, provider.model, vector);\n if (config.maxEntries !== null) {\n void store.evictIfNeeded(config.maxEntries);\n }\n return vector;\n }\n\n async function embedBatch(texts: string[]): Promise<Float32Array[]> {\n if (!config.enabled || texts.length === 0) {\n if (provider.embedBatch) {\n cacheMisses += texts.length;\n return provider.embedBatch(texts);\n }\n return Promise.all(texts.map((t) => embedOne(t)));\n }\n\n const results: Array<Float32Array | null> = new Array(texts.length).fill(\n null,\n );\n const missIndexes: number[] = [];\n const missTexts: string[] = [];\n\n for (let i = 0; i < texts.length; i += 1) {\n const text = texts[i]!;\n const key = embeddingCacheKey(text, provider.model);\n const cached = await store.get(key);\n if (cached) {\n cacheHits += 1;\n results[i] = cached;\n } else {\n missIndexes.push(i);\n missTexts.push(text);\n }\n }\n\n if (missTexts.length > 0) {\n cacheMisses += missTexts.length;\n const vectors = provider.embedBatch\n ? await provider.embedBatch(missTexts)\n : await Promise.all(missTexts.map((t) => provider.embed(t)));\n for (let j = 0; j < missIndexes.length; j += 1) {\n const idx = missIndexes[j]!;\n const vector = vectors[j]!;\n results[idx] = vector;\n const key = embeddingCacheKey(missTexts[j]!, provider.model);\n void store.set(key, provider.model, vector);\n }\n if (config.maxEntries !== null) {\n void store.evictIfNeeded(config.maxEntries);\n }\n }\n\n return results as Float32Array[];\n }\n\n return {\n model: provider.model,\n embed: embedOne,\n embedBatch,\n validate: () => provider.validate(),\n get cacheHits() {\n return cacheHits;\n },\n get cacheMisses() {\n return cacheMisses;\n },\n resetCacheStats() {\n cacheHits = 0;\n cacheMisses = 0;\n },\n };\n}\n","/**\n * Storage-backend-agnostic embedding_cache table access.\n *\n * Design: L1 Map is the hot path (sync hit). Durable stores are write-behind\n * so cache never contends with memory inserts on the same connection/pool.\n */\n\nimport type { DatabaseSync, StatementSync } from \"node:sqlite\";\nimport type { EmbeddingCacheStore } from \"./cache.js\";\nimport { embeddingToBuffer } from \"../utils/index.js\";\n\nexport const CREATE_EMBEDDING_CACHE_TABLE = `\nCREATE TABLE IF NOT EXISTS embedding_cache (\n cache_key TEXT PRIMARY KEY NOT NULL,\n model TEXT NOT NULL,\n vector BLOB NOT NULL,\n created_at TEXT NOT NULL,\n last_used_at TEXT NOT NULL\n);\n`;\n\nexport const CREATE_EMBEDDING_CACHE_INDEX = `\nCREATE INDEX IF NOT EXISTS idx_embedding_cache_last_used\n ON embedding_cache(last_used_at);\n`;\n\nconst TOUCH_FLUSH_THRESHOLD = 64;\nconst L1_DEFAULT_MAX = 50_000;\n\ntype L1Entry = {\n model: string;\n vector: Float32Array;\n createdAt: number;\n lastUsedAt: number;\n};\n\n/** Shared L1 so repeated texts never touch durable I/O on the hot path. */\nclass L1Cache {\n private readonly map = new Map<string, L1Entry>();\n private readonly maxEntries: number;\n\n constructor(maxEntries = L1_DEFAULT_MAX) {\n this.maxEntries = maxEntries;\n }\n\n get(cacheKey: string, ttlMs: number | null): Float32Array | null {\n const entry = this.map.get(cacheKey);\n if (!entry) {\n return null;\n }\n if (ttlMs !== null && Date.now() - entry.createdAt > ttlMs) {\n this.map.delete(cacheKey);\n return null;\n }\n entry.lastUsedAt = Date.now();\n // Refresh LRU order without reallocating the entry.\n this.map.delete(cacheKey);\n this.map.set(cacheKey, entry);\n return entry.vector;\n }\n\n set(cacheKey: string, model: string, vector: Float32Array): void {\n const now = Date.now();\n if (this.map.has(cacheKey)) {\n this.map.delete(cacheKey);\n }\n this.map.set(cacheKey, {\n model,\n vector,\n createdAt: now,\n lastUsedAt: now,\n });\n this.evictIfNeeded();\n }\n\n touch(cacheKey: string): void {\n const entry = this.map.get(cacheKey);\n if (!entry) {\n return;\n }\n entry.lastUsedAt = Date.now();\n this.map.delete(cacheKey);\n this.map.set(cacheKey, entry);\n }\n\n evictIfNeeded(maxEntries?: number): void {\n const limit = maxEntries ?? this.maxEntries;\n while (this.map.size > limit) {\n const oldest = this.map.keys().next().value;\n if (oldest === undefined) {\n break;\n }\n this.map.delete(oldest);\n }\n }\n\n get size(): number {\n return this.map.size;\n }\n}\n\nexport class SqliteEmbeddingCacheStore implements EmbeddingCacheStore {\n private readonly ttlMs: number | null;\n private readonly getDb: () => DatabaseSync | null;\n private readonly l1 = new L1Cache();\n private readonly pendingTouches = new Set<string>();\n private readonly pendingSets = new Map<\n string,\n { model: string; vector: Float32Array; createdAt: number }\n >();\n private persistScheduled = false;\n private stmts: {\n get: StatementSync;\n delete: StatementSync;\n set: StatementSync;\n touch: StatementSync;\n count: StatementSync;\n evict: StatementSync;\n } | null = null;\n\n constructor(\n dbOrGetter: DatabaseSync | (() => DatabaseSync | null),\n options?: { ttlMs?: number | null },\n ) {\n this.ttlMs = options?.ttlMs ?? null;\n this.getDb =\n typeof dbOrGetter === \"function\" ? dbOrGetter : () => dbOrGetter;\n }\n\n private requireDb(): DatabaseSync | null {\n try {\n return this.getDb();\n } catch {\n return null;\n }\n }\n\n private ensureStatements(db: DatabaseSync): NonNullable<typeof this.stmts> {\n if (this.stmts) {\n return this.stmts;\n }\n this.stmts = {\n get: db.prepare(\n `SELECT vector, last_used_at, created_at FROM embedding_cache WHERE cache_key = ?`,\n ),\n delete: db.prepare(`DELETE FROM embedding_cache WHERE cache_key = ?`),\n set: db.prepare(\n `INSERT INTO embedding_cache (cache_key, model, vector, created_at, last_used_at)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(cache_key) DO UPDATE SET\n model = excluded.model,\n vector = excluded.vector,\n last_used_at = excluded.last_used_at`,\n ),\n touch: db.prepare(\n `UPDATE embedding_cache SET last_used_at = ? WHERE cache_key = ?`,\n ),\n count: db.prepare(`SELECT COUNT(*) AS c FROM embedding_cache`),\n evict: db.prepare(\n `DELETE FROM embedding_cache WHERE cache_key IN (\n SELECT cache_key FROM embedding_cache\n ORDER BY last_used_at ASC\n LIMIT ?\n )`,\n ),\n };\n return this.stmts;\n }\n\n async get(cacheKey: string): Promise<Float32Array | null> {\n const l1Hit = this.l1.get(cacheKey, this.ttlMs);\n if (l1Hit) {\n return l1Hit;\n }\n // Pending durable write not yet flushed — still a hit.\n const pending = this.pendingSets.get(cacheKey);\n if (pending) {\n this.l1.set(cacheKey, pending.model, pending.vector);\n return pending.vector;\n }\n // No synchronous durable read on the hot path — that contends with\n // BEGIN IMMEDIATE writers. Cold process restart still misses once.\n return null;\n }\n\n async set(\n cacheKey: string,\n model: string,\n vector: Float32Array,\n ): Promise<void> {\n this.l1.set(cacheKey, model, vector);\n this.pendingSets.set(cacheKey, {\n model,\n vector,\n createdAt: Date.now(),\n });\n this.pendingTouches.delete(cacheKey);\n this.schedulePersist();\n }\n\n async touch(cacheKey: string): Promise<void> {\n this.l1.touch(cacheKey);\n if (this.pendingSets.has(cacheKey)) {\n return;\n }\n this.pendingTouches.add(cacheKey);\n if (this.pendingTouches.size >= TOUCH_FLUSH_THRESHOLD) {\n this.schedulePersist();\n }\n }\n\n async flushTouches(): Promise<void> {\n await this.flushPending();\n }\n\n async evictIfNeeded(maxEntries: number): Promise<void> {\n this.l1.evictIfNeeded(maxEntries);\n // Durable eviction is deferred — L1 already respects the cap.\n }\n\n private schedulePersist(): void {\n if (this.persistScheduled) {\n return;\n }\n this.persistScheduled = true;\n queueMicrotask(() => {\n this.persistScheduled = false;\n void this.flushPending();\n });\n }\n\n private async flushPending(): Promise<void> {\n if (this.pendingSets.size === 0 && this.pendingTouches.size === 0) {\n return;\n }\n const db = this.requireDb();\n if (!db) {\n this.pendingSets.clear();\n this.pendingTouches.clear();\n return;\n }\n const sets = [...this.pendingSets.entries()];\n this.pendingSets.clear();\n const touches = [...this.pendingTouches];\n this.pendingTouches.clear();\n const now = new Date().toISOString();\n try {\n const stmts = this.ensureStatements(db);\n // Best-effort durable write outside the memory write critical section.\n // Use a short IMMEDIATE try; if busy, re-queue and retry later.\n try {\n db.exec(\"BEGIN IMMEDIATE\");\n } catch {\n for (const [key, value] of sets) {\n this.pendingSets.set(key, value);\n }\n for (const key of touches) {\n this.pendingTouches.add(key);\n }\n this.schedulePersist();\n return;\n }\n try {\n for (const [key, value] of sets) {\n stmts.set.run(\n key,\n value.model,\n embeddingToBuffer(value.vector),\n new Date(value.createdAt).toISOString(),\n now,\n );\n }\n for (const key of touches) {\n stmts.touch.run(now, key);\n }\n db.exec(\"COMMIT\");\n } catch {\n try {\n db.exec(\"ROLLBACK\");\n } catch {\n // ignore\n }\n this.stmts = null;\n }\n } catch {\n this.stmts = null;\n }\n }\n}\n\n/** In-memory cache store for tests / providers without SQL access. */\nexport class MemoryEmbeddingCacheStore implements EmbeddingCacheStore {\n private readonly l1: L1Cache;\n private readonly ttlMs: number | null;\n\n constructor(options?: { ttlMs?: number | null; maxEntries?: number }) {\n this.ttlMs = options?.ttlMs ?? null;\n this.l1 = new L1Cache(options?.maxEntries ?? L1_DEFAULT_MAX);\n }\n\n async get(cacheKey: string): Promise<Float32Array | null> {\n return this.l1.get(cacheKey, this.ttlMs);\n }\n\n async set(\n cacheKey: string,\n model: string,\n vector: Float32Array,\n ): Promise<void> {\n this.l1.set(cacheKey, model, vector);\n }\n\n async touch(cacheKey: string): Promise<void> {\n this.l1.touch(cacheKey);\n }\n\n async evictIfNeeded(maxEntries: number): Promise<void> {\n this.l1.evictIfNeeded(maxEntries);\n }\n}\n\ntype PgQueryable = {\n query: (\n text: string,\n params?: unknown[],\n ) => Promise<{ rows: Record<string, unknown>[]; rowCount: number | null }>;\n};\n\n/**\n * Postgres embedding cache: L1-only on the hot path.\n * Durable writes are fire-and-forget on a deferred chain and must never use\n * the memory-insert pool under concurrency (that caused cache speedup <1x).\n */\nexport class PostgresEmbeddingCacheStore implements EmbeddingCacheStore {\n private readonly ttlMs: number | null;\n private readonly getClient: () => PgQueryable | null;\n private readonly l1 = new L1Cache();\n private readonly pendingTouches = new Set<string>();\n private persistChain: Promise<void> = Promise.resolve();\n private durableEnabled: boolean;\n\n constructor(\n getClient: () => PgQueryable | null,\n options?: { ttlMs?: number | null; durable?: boolean },\n ) {\n this.getClient = getClient;\n this.ttlMs = options?.ttlMs ?? null;\n // Durable off by default for write-heavy / concurrent workloads.\n // L1 still delivers multi-x cache hits within a process.\n this.durableEnabled = options?.durable === true;\n }\n\n async get(cacheKey: string): Promise<Float32Array | null> {\n return this.l1.get(cacheKey, this.ttlMs);\n }\n\n async set(\n cacheKey: string,\n model: string,\n vector: Float32Array,\n ): Promise<void> {\n this.l1.set(cacheKey, model, vector);\n if (!this.durableEnabled) {\n return;\n }\n const now = Date.now();\n this.enqueuePersist(async (client) => {\n const iso = new Date(now).toISOString();\n await client.query(\n `INSERT INTO embedding_cache (cache_key, model, vector, created_at, last_used_at)\n VALUES ($1, $2, $3, $4::timestamptz, $5::timestamptz)\n ON CONFLICT (cache_key) DO UPDATE SET\n model = EXCLUDED.model,\n vector = EXCLUDED.vector,\n last_used_at = EXCLUDED.last_used_at`,\n [cacheKey, model, embeddingToBuffer(vector), iso, iso],\n );\n });\n }\n\n async touch(cacheKey: string): Promise<void> {\n this.l1.touch(cacheKey);\n if (!this.durableEnabled) {\n return;\n }\n this.pendingTouches.add(cacheKey);\n if (this.pendingTouches.size >= TOUCH_FLUSH_THRESHOLD) {\n void this.flushTouches();\n }\n }\n\n async flushTouches(): Promise<void> {\n if (!this.durableEnabled || this.pendingTouches.size === 0) {\n this.pendingTouches.clear();\n return;\n }\n const keys = [...this.pendingTouches];\n this.pendingTouches.clear();\n const now = new Date().toISOString();\n this.enqueuePersist(async (client) => {\n await client.query(\n `UPDATE embedding_cache\n SET last_used_at = $1::timestamptz\n WHERE cache_key = ANY($2::text[])`,\n [now, keys],\n );\n });\n }\n\n async evictIfNeeded(maxEntries: number): Promise<void> {\n this.l1.evictIfNeeded(maxEntries);\n }\n\n private enqueuePersist(\n work: (client: PgQueryable) => Promise<void>,\n ): void {\n this.persistChain = this.persistChain\n .then(async () => {\n const client = this.getClient();\n if (!client) {\n return;\n }\n await work(client);\n })\n .catch(() => undefined);\n }\n}\n","/**\n * LLM provider abstractions and OpenAI-compatible chat implementation.\n * Used exclusively for memory compression (and future ORC features).\n */\n\nimport type { LlmConfig } from \"../types/index.js\";\nimport { CompressionError } from \"../errors/index.js\";\nimport { joinUrl } from \"../utils/index.js\";\n\nexport interface ChatMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\n/** Contract for any chat completion backend. */\nexport interface LlmProvider {\n readonly model: string;\n complete(messages: ChatMessage[]): Promise<string>;\n /** Lightweight connectivity probe. */\n validate(): Promise<void>;\n}\n\ninterface OpenAIChatResponse {\n choices?: Array<{ message?: { content?: string | null } }>;\n error?: { message?: string };\n}\n\nexport class OpenAICompatibleLlmProvider implements LlmProvider {\n readonly model: string;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n private readonly temperature: number;\n private readonly maxTokens: number;\n private readonly timeoutMs: number;\n\n constructor(config: LlmConfig) {\n this.baseUrl = config.baseUrl;\n this.apiKey = config.apiKey;\n this.model = config.model;\n this.temperature = config.temperature ?? 0.2;\n this.maxTokens = config.maxTokens ?? 4096;\n this.timeoutMs = config.timeoutMs ?? 60_000;\n }\n\n async complete(messages: ChatMessage[]): Promise<string> {\n const response = await this.request(messages);\n const content = response.choices?.[0]?.message?.content;\n if (typeof content !== \"string\" || content.trim().length === 0) {\n throw new CompressionError(\"LLM response did not contain text content\");\n }\n return content.trim();\n }\n\n async validate(): Promise<void> {\n try {\n await this.complete([\n {\n role: \"user\",\n content: 'Reply with exactly the word \"ok\".',\n },\n ]);\n } catch (error) {\n if (error instanceof CompressionError) {\n throw new CompressionError(\n `Failed to validate LLM endpoint: ${error.message}`,\n { cause: error },\n );\n }\n throw new CompressionError(\n `Failed to validate LLM endpoint: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n private async request(messages: ChatMessage[]): Promise<OpenAIChatResponse> {\n const url = joinUrl(this.baseUrl, \"/chat/completions\");\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n messages,\n temperature: this.temperature,\n max_tokens: this.maxTokens,\n }),\n signal: controller.signal,\n });\n\n let body: OpenAIChatResponse;\n try {\n body = (await res.json()) as OpenAIChatResponse;\n } catch {\n throw new CompressionError(\n `LLM endpoint returned non-JSON response (HTTP ${res.status})`,\n );\n }\n\n if (!res.ok) {\n const message = body.error?.message ?? `HTTP ${res.status}`;\n throw new CompressionError(`LLM request failed: ${message}`);\n }\n\n return body;\n } catch (error) {\n if (error instanceof CompressionError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new CompressionError(\n `LLM request timed out after ${this.timeoutMs}ms`,\n );\n }\n throw new CompressionError(`LLM request failed: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n } finally {\n clearTimeout(timer);\n }\n }\n\n private describe(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n }\n}\n\nexport function createLlmProvider(config: LlmConfig): LlmProvider {\n return new OpenAICompatibleLlmProvider(config);\n}\n\nfunction llmFactory(\n defaults: Partial<LlmConfig> & Pick<LlmConfig, \"baseUrl\">,\n) {\n return (config: Omit<LlmConfig, \"baseUrl\"> & { baseUrl?: string }): LlmProvider =>\n createLlmProvider({\n baseUrl: config.baseUrl ?? defaults.baseUrl,\n apiKey: config.apiKey,\n model: config.model,\n temperature: config.temperature,\n maxTokens: config.maxTokens,\n timeoutMs: config.timeoutMs,\n });\n}\n\nexport const openaiCompatibleLlm = (config: LlmConfig): LlmProvider =>\n createLlmProvider(config);\n\nexport const openaiLlm = llmFactory({\n baseUrl: \"https://api.openai.com/v1\",\n});\n\nexport const ollamaLlm = llmFactory({\n baseUrl: \"http://127.0.0.1:11434/v1\",\n});\n\nexport const openRouterLlm = llmFactory({\n baseUrl: \"https://openrouter.ai/api/v1\",\n});\n","/**\n * Document parsers for ingest pipeline.\n */\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { ConfigurationError } from \"../errors/index.js\";\n\nexport interface ParsedDocument {\n text: string;\n mimeType: string;\n filename?: string;\n isImage: boolean;\n imageBuffer?: Buffer;\n}\n\nexport interface DocumentParserProvider {\n readonly name: string;\n readonly extensions: string[];\n parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument>;\n}\n\nfunction extOf(filename?: string): string {\n if (!filename) {\n return \"\";\n }\n return path.extname(filename).toLowerCase();\n}\n\nexport class TextParser implements DocumentParserProvider {\n readonly name = \"text\";\n readonly extensions = [\".txt\", \".md\", \".markdown\", \".csv\", \".json\"];\n\n async parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument> {\n const ext = extOf(input.filename);\n let text = input.buffer.toString(\"utf8\");\n if (ext === \".json\") {\n try {\n text = JSON.stringify(JSON.parse(text), null, 2);\n } catch {\n // keep raw\n }\n }\n return {\n text,\n mimeType: input.mimeType ?? \"text/plain\",\n filename: input.filename,\n isImage: false,\n };\n }\n}\n\nexport class ImageParser implements DocumentParserProvider {\n readonly name = \"image\";\n readonly extensions = [\".png\", \".jpg\", \".jpeg\", \".webp\"];\n\n async parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument> {\n const ext = extOf(input.filename);\n const mime =\n input.mimeType ??\n (ext === \".png\"\n ? \"image/png\"\n : ext === \".webp\"\n ? \"image/webp\"\n : \"image/jpeg\");\n return {\n text: \"\",\n mimeType: mime,\n filename: input.filename,\n isImage: true,\n imageBuffer: input.buffer,\n };\n }\n}\n\nexport class PdfParser implements DocumentParserProvider {\n readonly name = \"pdf\";\n readonly extensions = [\".pdf\"];\n\n async parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument> {\n try {\n const mod = await import(\"pdf-parse\");\n // pdf-parse v1: default export is (buffer) => Promise<{ text }>\n // pdf-parse v2: named PDFParse class\n const maybeClass = (mod as { PDFParse?: new (opts: { data: Buffer }) => {\n getText: () => Promise<{ text: string }>;\n destroy?: () => Promise<void>;\n } }).PDFParse;\n let text = \"\";\n if (typeof maybeClass === \"function\") {\n const parser = new maybeClass({ data: input.buffer });\n try {\n const result = await parser.getText();\n text = result.text ?? \"\";\n } finally {\n await parser.destroy?.();\n }\n } else {\n const pdfParse =\n (mod as { default?: (buf: Buffer) => Promise<{ text: string }> }).default ??\n (mod as unknown as (buf: Buffer) => Promise<{ text: string }>);\n if (typeof pdfParse !== \"function\") {\n throw new Error(\"pdf-parse export is not a function\");\n }\n const result = await pdfParse(input.buffer);\n text = result.text ?? \"\";\n }\n return {\n text,\n mimeType: \"application/pdf\",\n filename: input.filename,\n isImage: false,\n };\n } catch (error) {\n if (\n error instanceof ConfigurationError\n ) {\n throw error;\n }\n const detail = error instanceof Error ? error.message : String(error);\n throw new ConfigurationError(\n `PDF ingest failed (${detail}). Install compatible pdf-parse: npm install pdf-parse@1.1.4`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n}\n\nexport class DocxParser implements DocumentParserProvider {\n readonly name = \"docx\";\n readonly extensions = [\".docx\"];\n\n async parse(input: {\n buffer: Buffer;\n filename?: string;\n mimeType?: string;\n }): Promise<ParsedDocument> {\n try {\n const mod = await import(\"mammoth\" as string);\n const extractRawText =\n (mod as { extractRawText?: (opts: { buffer: Buffer }) => Promise<{ value: string }> })\n .extractRawText ??\n (mod as { default?: { extractRawText: (opts: { buffer: Buffer }) => Promise<{ value: string }> } })\n .default?.extractRawText;\n if (!extractRawText) {\n throw new Error(\"mammoth.extractRawText unavailable\");\n }\n const result = await extractRawText({ buffer: input.buffer });\n return {\n text: result.value ?? \"\",\n mimeType:\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n filename: input.filename,\n isImage: false,\n };\n } catch {\n throw new ConfigurationError(\n 'DOCX ingest requires the optional \"mammoth\" package. Install it with: npm install mammoth',\n );\n }\n }\n}\n\nconst DEFAULT_PARSERS: DocumentParserProvider[] = [\n new TextParser(),\n new ImageParser(),\n new PdfParser(),\n new DocxParser(),\n];\n\nexport function resolveParser(\n filename?: string,\n mimeType?: string,\n parsers: DocumentParserProvider[] = DEFAULT_PARSERS,\n): DocumentParserProvider {\n const ext = extOf(filename);\n if (ext) {\n const byExt = parsers.find((p) => p.extensions.includes(ext));\n if (byExt) {\n return byExt;\n }\n }\n if (mimeType?.startsWith(\"image/\")) {\n return parsers.find((p) => p.name === \"image\") ?? new ImageParser();\n }\n if (mimeType === \"application/pdf\") {\n return parsers.find((p) => p.name === \"pdf\") ?? new PdfParser();\n }\n return parsers.find((p) => p.name === \"text\") ?? new TextParser();\n}\n\nexport async function loadIngestSource(source: {\n path?: string;\n buffer?: Buffer;\n text?: string;\n filename?: string;\n mimeType?: string;\n}): Promise<{ buffer: Buffer; filename?: string; mimeType?: string; rawText?: string }> {\n if (source.text !== undefined) {\n return {\n buffer: Buffer.from(source.text, \"utf8\"),\n filename: source.filename ?? \"document.txt\",\n mimeType: source.mimeType ?? \"text/plain\",\n rawText: source.text,\n };\n }\n if (source.buffer) {\n return {\n buffer: source.buffer,\n filename: source.filename,\n mimeType: source.mimeType,\n };\n }\n if (source.path) {\n const buffer = await fs.readFile(source.path);\n return {\n buffer,\n filename: path.basename(source.path),\n mimeType: source.mimeType,\n };\n }\n throw new ConfigurationError(\"ingest source must include path, buffer, or text\");\n}\n\nexport { DEFAULT_PARSERS };\n","/**\n * Constructor options for Wolbarg v0.3.\n */\n\nimport type { ChunkingStrategy } from \"../chunking/index.js\";\nimport type { CompressionProvider } from \"../compression/index.js\";\nimport type { EmbeddingProvider } from \"../embedding/index.js\";\nimport type { GraphConfig, GraphProvider } from \"../graph/types.js\";\nimport type { KeywordSearchProvider } from \"../keyword/index.js\";\nimport type { LlmProvider } from \"../llm/index.js\";\nimport type { OCRProvider } from \"../ocr/index.js\";\nimport type { RerankerProvider } from \"../rerank/index.js\";\nimport type { StorageProvider } from \"../storage/types.js\";\nimport type { CheckpointProvider } from \"../providers/interfaces/CheckpointProvider.js\";\nimport type { TelemetryProvider } from \"../providers/interfaces/TelemetryProvider.js\";\nimport type {\n ConcurrencyConfig,\n DatabaseConfig,\n EmbeddingCacheConfig,\n EmbeddingConfig,\n LlmConfig,\n MemoryDedupeConfig,\n RetrievalConfig,\n StorageConfig,\n TelemetryConfig,\n} from \"../types/index.js\";\nimport type { VisionProvider } from \"../vision/index.js\";\n\nexport type EmbeddingInput = EmbeddingProvider | EmbeddingConfig;\nexport type LlmInput = LlmProvider | LlmConfig;\nexport type StorageInput = StorageProvider | StorageConfig | DatabaseConfig;\nexport type GraphInput = GraphProvider | GraphConfig;\n\nexport interface WolbargOptionsBase {\n /** Organization namespace isolating memories within a shared database. */\n organization: string;\n /**\n * Storage provider instance or config.\n * Prefer `database` in v0.3 docs; `storage` remains fully supported.\n */\n storage?: StorageInput;\n /**\n * v0.3 alias for `storage`. Accepts `{ provider, url }` or `{ provider, connectionString }`.\n */\n database?: StorageInput;\n /** Embedding provider instance or config. */\n embedding: EmbeddingInput;\n /** Optional independent telemetry system (separate database). */\n telemetry?: TelemetryConfig | TelemetryProvider;\n /** Optional checkpoint provider override (defaults to SQLite when file-backed). */\n checkpoint?: CheckpointProvider;\n /** Optional directory for SQLite checkpoints. */\n checkpointDirectory?: string;\n /** Optional reranker — skipped when absent. */\n reranker?: RerankerProvider;\n /** Optional keyword search — enables hybrid recall when present. */\n keywordSearch?: KeywordSearchProvider;\n /** Optional OCR for image ingest. */\n ocr?: OCRProvider;\n /** Optional vision model for image captions. */\n vision?: VisionProvider;\n /**\n * Optional graph memory layer (SQLite embedded or Neo4j networked).\n * Fully optional — omitting it does not change existing memory behavior.\n * Accepts a {@link GraphProvider} instance or a recognized config shape.\n */\n graph?: GraphInput;\n /** Optional compression provider (overrides llm-backed default). */\n compression?: CompressionProvider;\n /** Optional default chunking strategy for ingest. */\n chunking?: ChunkingStrategy;\n /** Optional retrieval defaults. */\n retrieval?: RetrievalConfig;\n /** SQLite multi-writer concurrency tuning (ignored for Postgres). */\n concurrency?: ConcurrencyConfig;\n /** Transparent embedding cache (default enabled). */\n embeddingCache?: EmbeddingCacheConfig;\n /** Memory write-path options (dedupe / upsert). */\n memory?: {\n dedupe?: MemoryDedupeConfig;\n };\n}\n\nexport interface WolbargOptionsWithoutLlm extends WolbargOptionsBase {\n llm?: undefined;\n}\n\nexport interface WolbargOptionsWithLlm extends WolbargOptionsBase {\n /** Chat model used for compression. */\n llm: LlmInput;\n}\n\nexport type WolbargOptions =\n | WolbargOptionsWithoutLlm\n | WolbargOptionsWithLlm;\n\nexport function isEmbeddingProvider(\n value: EmbeddingInput,\n): value is EmbeddingProvider {\n return typeof (value as EmbeddingProvider).embed === \"function\";\n}\n\nexport function isLlmProvider(value: LlmInput): value is LlmProvider {\n return typeof (value as LlmProvider).complete === \"function\";\n}\n\nexport function isStorageProvider(\n value: StorageInput,\n): value is StorageProvider {\n return typeof (value as StorageProvider).open === \"function\";\n}\n\nexport function isTelemetryProvider(\n value: TelemetryConfig | TelemetryProvider,\n): value is TelemetryProvider {\n return typeof (value as TelemetryProvider).emit === \"function\";\n}\n\nexport function isGraphProvider(value: GraphInput): value is GraphProvider {\n return (\n typeof (value as GraphProvider).open === \"function\" &&\n typeof (value as GraphProvider).linkMemories === \"function\" &&\n typeof (value as GraphProvider).getRelated === \"function\"\n );\n}\n\n/** Resolve connection path from url or connectionString. */\nexport function resolveDatabaseUrl(\n config: DatabaseConfig | StorageConfig,\n): string {\n const url =\n (\"url\" in config && config.url) ||\n (\"connectionString\" in config && config.connectionString) ||\n \"\";\n return typeof url === \"string\" ? url : \"\";\n}\n","/**\n * In-memory metadata filter evaluation (used as fallback / post-filter).\n */\n\nimport type { MemoryMetadata } from \"../types/index.js\";\nimport type { MetadataComparison, MetadataFilter } from \"./types.js\";\n\nfunction getField(metadata: MemoryMetadata, field: string): unknown {\n const parts = field.split(\".\");\n let current: unknown = metadata;\n for (const part of parts) {\n if (current === null || typeof current !== \"object\" || Array.isArray(current)) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction compare(value: unknown, op: MetadataComparison): boolean {\n if (\"eq\" in op) {\n return value === op.eq;\n }\n if (\"contains\" in op) {\n if (typeof value === \"string\") {\n return value.includes(op.contains);\n }\n if (Array.isArray(value)) {\n return value.some((item) => String(item).includes(op.contains));\n }\n return false;\n }\n if (\"gt\" in op) {\n return value != null && (value as string | number) > op.gt;\n }\n if (\"gte\" in op) {\n return value != null && (value as string | number) >= op.gte;\n }\n if (\"lt\" in op) {\n return value != null && (value as string | number) < op.lt;\n }\n if (\"lte\" in op) {\n return value != null && (value as string | number) <= op.lte;\n }\n if (\"between\" in op) {\n const [lo, hi] = op.between;\n return value != null && value >= lo && value <= hi;\n }\n return false;\n}\n\n/** Evaluate a metadata filter against an opaque metadata object. */\nexport function matchesMetadata(\n metadata: MemoryMetadata,\n filter: MetadataFilter,\n): boolean {\n if (\"and\" in filter) {\n return filter.and.every((f) => matchesMetadata(metadata, f));\n }\n if (\"or\" in filter) {\n return filter.or.some((f) => matchesMetadata(metadata, f));\n }\n if (\"not\" in filter) {\n return !matchesMetadata(metadata, filter.not);\n }\n return compare(getField(metadata, filter.field), filter.op);\n}\n","/**\n * Compile MetadataFilter ASTs into SQLite json_extract predicates.\n * Returns null when the filter cannot be pushed down safely.\n */\n\nimport type { MetadataComparison, MetadataFilter } from \"./types.js\";\n\nexport interface CompiledMetadataSql {\n /** SQL boolean expression (no leading AND). */\n expression: string;\n params: unknown[];\n}\n\nconst FIELD_RE =\n /^[a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z_][a-zA-Z0-9_]*)*$/;\n\nfunction jsonPath(field: string): string | null {\n if (!FIELD_RE.test(field)) {\n return null;\n }\n return `$.${field}`;\n}\n\nfunction compileComparison(\n field: string,\n op: MetadataComparison,\n): CompiledMetadataSql | null {\n const path = jsonPath(field);\n if (!path) {\n return null;\n }\n const extract = `json_extract(metadata_json, '${path}')`;\n\n if (\"eq\" in op) {\n const value = op.eq;\n if (\n value !== null &&\n typeof value !== \"string\" &&\n typeof value !== \"number\" &&\n typeof value !== \"boolean\"\n ) {\n return null;\n }\n return { expression: `${extract} = ?`, params: [value] };\n }\n if (\"contains\" in op) {\n return {\n expression: `CAST(${extract} AS TEXT) LIKE '%' || ? || '%'`,\n params: [op.contains],\n };\n }\n if (\"gt\" in op) {\n return { expression: `${extract} > ?`, params: [op.gt] };\n }\n if (\"gte\" in op) {\n return { expression: `${extract} >= ?`, params: [op.gte] };\n }\n if (\"lt\" in op) {\n return { expression: `${extract} < ?`, params: [op.lt] };\n }\n if (\"lte\" in op) {\n return { expression: `${extract} <= ?`, params: [op.lte] };\n }\n if (\"between\" in op) {\n const [lo, hi] = op.between;\n return {\n expression: `${extract} >= ? AND ${extract} <= ?`,\n params: [lo, hi],\n };\n }\n return null;\n}\n\n/** Push a metadata filter into SQLite JSON predicates, or null if unsupported. */\nexport function compileMetadataFilterToSql(\n filter: MetadataFilter,\n): CompiledMetadataSql | null {\n if (\"and\" in filter) {\n if (filter.and.length === 0) {\n return { expression: \"1\", params: [] };\n }\n const parts: CompiledMetadataSql[] = [];\n for (const child of filter.and) {\n const compiled = compileMetadataFilterToSql(child);\n if (!compiled) {\n return null;\n }\n parts.push(compiled);\n }\n return {\n expression: parts.map((p) => `(${p.expression})`).join(\" AND \"),\n params: parts.flatMap((p) => p.params),\n };\n }\n if (\"or\" in filter) {\n if (filter.or.length === 0) {\n return { expression: \"0\", params: [] };\n }\n const parts: CompiledMetadataSql[] = [];\n for (const child of filter.or) {\n const compiled = compileMetadataFilterToSql(child);\n if (!compiled) {\n return null;\n }\n parts.push(compiled);\n }\n return {\n expression: parts.map((p) => `(${p.expression})`).join(\" OR \"),\n params: parts.flatMap((p) => p.params),\n };\n }\n if (\"not\" in filter) {\n const inner = compileMetadataFilterToSql(filter.not);\n if (!inner) {\n return null;\n }\n return {\n expression: `NOT (${inner.expression})`,\n params: inner.params,\n };\n }\n return compileComparison(filter.field, filter.op);\n}\n","/**\n * SQL schema constants and migration statements.\n */\n\nexport const SCHEMA_VERSION = 4;\n\nexport const META_KEYS = {\n schemaVersion: \"schema_version\",\n embeddingDimensions: \"embedding_dimensions\",\n vectorBackend: \"vector_backend\",\n} as const;\n\n/** Vector storage backend used by the SQLite provider. */\nexport type VectorBackend = \"sqlite-vec\" | \"blob\";\n\nexport const CREATE_META_TABLE = `\nCREATE TABLE IF NOT EXISTS Wolbarg_meta (\n key TEXT PRIMARY KEY NOT NULL,\n value TEXT NOT NULL\n);\n`;\n\nexport const CREATE_MEMORIES_TABLE = `\nCREATE TABLE IF NOT EXISTS memories (\n id TEXT PRIMARY KEY NOT NULL,\n organization TEXT NOT NULL,\n agent TEXT NOT NULL,\n content_text TEXT NOT NULL,\n metadata_json TEXT NOT NULL DEFAULT '{}',\n archived INTEGER NOT NULL DEFAULT 0 CHECK (archived IN (0, 1)),\n compressed_into TEXT NULL,\n content_hash TEXT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n FOREIGN KEY (compressed_into) REFERENCES memories(id) ON DELETE SET NULL\n);\n`;\n\nexport const CREATE_HISTORY_TABLE = `\nCREATE TABLE IF NOT EXISTS memory_history (\n id TEXT PRIMARY KEY NOT NULL,\n memory_id TEXT NOT NULL,\n event_type TEXT NOT NULL CHECK (event_type IN ('created', 'archived', 'compressed', 'updated')),\n related_memory_id TEXT NULL,\n created_at TEXT NOT NULL,\n FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE\n);\n`;\n\n/** Fallback embedding store used when sqlite-vec is unavailable on the platform. */\nexport const CREATE_BLOB_EMBEDDINGS_TABLE = `\nCREATE TABLE IF NOT EXISTS memory_embeddings_blob (\n memory_rowid INTEGER PRIMARY KEY NOT NULL,\n embedding BLOB NOT NULL\n);\n`;\n\n/**\n * FTS5 index for keyword / BM25 search.\n * `organization` stays UNINDEXED so tenant IDs are not Porter-tokenized;\n * equality filters and bulk DELETE BY organization still use the stored value.\n */\nexport const CREATE_FTS_TABLE = `\nCREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(\n content_text,\n memory_id UNINDEXED,\n organization UNINDEXED,\n agent UNINDEXED,\n tokenize = 'porter unicode61'\n);\n`;\n\nexport const CREATE_EMBEDDING_CACHE_TABLE = `\nCREATE TABLE IF NOT EXISTS embedding_cache (\n cache_key TEXT PRIMARY KEY NOT NULL,\n model TEXT NOT NULL,\n vector BLOB NOT NULL,\n created_at TEXT NOT NULL,\n last_used_at TEXT NOT NULL\n);\n`;\n\n/**\n * Graph memory tables (SQLite graph provider — separate DB file by default).\n * `type` is the node kind (`memory` | `entity`); entity classification lives in metadata.\n */\nexport const CREATE_GRAPH_NODES_TABLE = `\nCREATE TABLE IF NOT EXISTS graph_nodes (\n id TEXT PRIMARY KEY NOT NULL,\n type TEXT NOT NULL CHECK (type IN ('memory', 'entity')),\n ref_id TEXT NOT NULL,\n name TEXT NULL,\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL\n);\n`;\n\nexport const CREATE_GRAPH_EDGES_TABLE = `\nCREATE TABLE IF NOT EXISTS graph_edges (\n id TEXT PRIMARY KEY NOT NULL,\n from_node_id TEXT NOT NULL,\n to_node_id TEXT NOT NULL,\n relation TEXT NOT NULL,\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL,\n FOREIGN KEY (from_node_id) REFERENCES graph_nodes(id) ON DELETE CASCADE,\n FOREIGN KEY (to_node_id) REFERENCES graph_nodes(id) ON DELETE CASCADE\n);\n`;\n\n/** Indexes required for in-SQL recursive CTE graph walks. */\nexport const CREATE_GRAPH_INDEXES = [\n `CREATE UNIQUE INDEX IF NOT EXISTS idx_graph_nodes_type_ref\n ON graph_nodes(type, ref_id);`,\n `CREATE INDEX IF NOT EXISTS idx_graph_edges_from\n ON graph_edges(from_node_id);`,\n `CREATE INDEX IF NOT EXISTS idx_graph_edges_to\n ON graph_edges(to_node_id);`,\n `CREATE INDEX IF NOT EXISTS idx_graph_edges_from_rel\n ON graph_edges(from_node_id, relation);`,\n `CREATE INDEX IF NOT EXISTS idx_graph_edges_to_rel\n ON graph_edges(to_node_id, relation);`,\n] as const;\n\nexport const CREATE_INDEXES = [\n `CREATE INDEX IF NOT EXISTS idx_memories_org_agent ON memories(organization, agent);`,\n `CREATE INDEX IF NOT EXISTS idx_memories_org_archived ON memories(organization, archived);`,\n /** Active-set path for org-scoped list / stats / compress. */\n `CREATE INDEX IF NOT EXISTS idx_memories_org_active_created\n ON memories(organization, created_at) WHERE archived = 0;`,\n /** Agent-scoped active list (compress / forget-by-agent). */\n `CREATE INDEX IF NOT EXISTS idx_memories_org_agent_active_created\n ON memories(organization, agent, created_at) WHERE archived = 0;`,\n `CREATE INDEX IF NOT EXISTS idx_history_memory_id ON memory_history(memory_id);`,\n `CREATE UNIQUE INDEX IF NOT EXISTS idx_memories_org_agent_hash_active\n ON memories(organization, agent, content_hash)\n WHERE archived = 0 AND content_hash IS NOT NULL;`,\n `CREATE INDEX IF NOT EXISTS idx_embedding_cache_last_used\n ON embedding_cache(last_used_at);`,\n] as const;\n\n/** Dropped in schema v4 — global created_at index was unused (all queries scope by org). */\nexport const DROP_REDUNDANT_INDEXES_V4 = [\n `DROP INDEX IF EXISTS idx_memories_created_at;`,\n] as const;\n\n/**\n * Build the vec0 virtual table DDL for a fixed embedding dimensionality.\n * Cosine distance enables similarity = 1 - distance.\n */\nexport function buildVectorTableSql(dimensions: number): string {\n if (!Number.isInteger(dimensions) || dimensions <= 0) {\n throw new Error(`Invalid embedding dimensions: ${dimensions}`);\n }\n return `\nCREATE VIRTUAL TABLE IF NOT EXISTS memory_embeddings USING vec0(\n memory_rowid INTEGER PRIMARY KEY,\n embedding float[${dimensions}] distance_metric=cosine\n);\n`;\n}\n","/**\n * Prepared-statement SQL templates for the SQLite provider.\n */\n\nexport const SQL = {\n getMeta: `SELECT value FROM Wolbarg_meta WHERE key = ?`,\n setMeta: `\n INSERT INTO Wolbarg_meta (key, value) VALUES (?, ?)\n ON CONFLICT(key) DO UPDATE SET value = excluded.value\n `,\n\n insertMemory: `\n INSERT INTO memories (\n id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, 0, NULL, ?, ?, ?)\n RETURNING rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n `,\n\n getMemoryById: `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n FROM memories\n WHERE id = ? AND organization = ?\n `,\n\n getMemoryByRowid: `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n FROM memories\n WHERE rowid = ? AND organization = ?\n `,\n\n getMemoriesByRowidsPrefix: `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n FROM memories\n WHERE organization = ? AND rowid IN (\n `,\n\n listMemoriesBase: `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n FROM memories\n WHERE organization = ?\n `,\n\n findActiveByContentHash: `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n FROM memories\n WHERE organization = ? AND agent = ? AND content_hash = ? AND archived = 0\n LIMIT 1\n `,\n\n insertEmbedding: `\n INSERT INTO memory_embeddings (memory_rowid, embedding) VALUES (?, ?)\n `,\n\n deleteEmbedding: `\n DELETE FROM memory_embeddings WHERE memory_rowid = ?\n `,\n\n searchVectors: `\n SELECT memory_rowid, distance\n FROM memory_embeddings\n WHERE embedding MATCH ?\n AND k = ?\n `,\n\n insertEmbeddingBlob: `\n INSERT INTO memory_embeddings_blob (memory_rowid, embedding) VALUES (?, ?)\n `,\n\n deleteEmbeddingBlob: `\n DELETE FROM memory_embeddings_blob WHERE memory_rowid = ?\n `,\n\n listEmbeddingsBlob: `\n SELECT memory_rowid, embedding FROM memory_embeddings_blob\n `,\n\n archiveMemory: `\n UPDATE memories\n SET archived = 1,\n compressed_into = ?,\n updated_at = ?\n WHERE id = ? AND organization = ? AND archived = 0\n `,\n\n deleteMemoryById: `\n DELETE FROM memories WHERE id = ? AND organization = ?\n `,\n\n deleteMemoriesByOrg: `\n DELETE FROM memories WHERE organization = ?\n `,\n\n deleteMemoriesByOrgAgent: `\n DELETE FROM memories WHERE organization = ? AND agent = ?\n `,\n\n insertHistory: `\n INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n VALUES (?, ?, ?, ?, ?)\n `,\n\n getHistory: `\n SELECT id, memory_id, event_type, related_memory_id, created_at\n FROM memory_history\n WHERE memory_id = ?\n ORDER BY created_at ASC\n `,\n\n countMemories: `\n SELECT COUNT(*) AS count FROM memories WHERE organization = ?\n `,\n\n countActiveMemories: `\n SELECT COUNT(*) AS count FROM memories WHERE organization = ? AND archived = 0\n `,\n\n countArchivedMemories: `\n SELECT COUNT(*) AS count FROM memories WHERE organization = ? AND archived = 1\n `,\n\n countAgents: `\n SELECT COUNT(DISTINCT agent) AS count FROM memories WHERE organization = ? AND archived = 0\n `,\n\n /** FTS ranked by BM25 (archived rows are deleted from FTS on archive). */\n searchFts: `\n SELECT memory_id, bm25(memories_fts) AS rank\n FROM memories_fts\n WHERE memories_fts MATCH ?\n AND organization = ?\n ORDER BY rank\n LIMIT ?\n `,\n\n listRowidsForOrg: `\n SELECT rowid FROM memories WHERE organization = ?\n `,\n\n listRowidsForOrgAgent: `\n SELECT rowid FROM memories WHERE organization = ? AND agent = ?\n `,\n\n vectorTableExists: `\n SELECT name FROM sqlite_master\n WHERE type = 'table' AND name = 'memory_embeddings'\n `,\n\n updateMemoryContent: `\n UPDATE memories\n SET content_text = COALESCE(?, content_text),\n metadata_json = COALESCE(?, metadata_json),\n content_hash = COALESCE(?, content_hash),\n updated_at = ?\n WHERE id = ? AND organization = ?\n `,\n\n insertFts: `\n INSERT INTO memories_fts (content_text, memory_id, organization, agent)\n VALUES (?, ?, ?, ?)\n `,\n\n deleteFts: `\n DELETE FROM memories_fts WHERE memory_id = ?\n `,\n\n deleteFtsByOrg: `\n DELETE FROM memories_fts WHERE organization = ?\n `,\n\n deleteFtsByOrgAgent: `\n DELETE FROM memories_fts WHERE organization = ? AND agent = ?\n `,\n\n deleteEmbeddingsByOrg: `\n DELETE FROM memory_embeddings WHERE memory_rowid IN (\n SELECT rowid FROM memories WHERE organization = ?\n )\n `,\n\n deleteEmbeddingsByOrgAgent: `\n DELETE FROM memory_embeddings WHERE memory_rowid IN (\n SELECT rowid FROM memories WHERE organization = ? AND agent = ?\n )\n `,\n\n deleteEmbeddingsBlobByOrg: `\n DELETE FROM memory_embeddings_blob WHERE memory_rowid IN (\n SELECT rowid FROM memories WHERE organization = ?\n )\n `,\n\n deleteEmbeddingsBlobByOrgAgent: `\n DELETE FROM memory_embeddings_blob WHERE memory_rowid IN (\n SELECT rowid FROM memories WHERE organization = ? AND agent = ?\n )\n `,\n\n deleteArchivedEmbeddings: `\n DELETE FROM memory_embeddings WHERE memory_rowid IN (\n SELECT rowid FROM memories WHERE archived = 1\n )\n `,\n\n deleteArchivedEmbeddingsBlob: `\n DELETE FROM memory_embeddings_blob WHERE memory_rowid IN (\n SELECT rowid FROM memories WHERE archived = 1\n )\n `,\n\n /** Single-pass org stats (avoids 4 separate COUNT queries). */\n getStats: `\n SELECT\n COUNT(*) AS total,\n COALESCE(SUM(CASE WHEN archived = 0 THEN 1 ELSE 0 END), 0) AS active,\n COALESCE(SUM(CASE WHEN archived = 1 THEN 1 ELSE 0 END), 0) AS archived,\n COUNT(DISTINCT CASE WHEN archived = 0 THEN agent END) AS agents\n FROM memories\n WHERE organization = ?\n `,\n} as const;\n","/**\r\n * Cosine distance helpers for the blob vector fallback backend.\r\n */\r\n\r\n/** Cosine distance = 1 - cosine_similarity (matches sqlite-vec cosine metric). */\r\nexport function cosineDistance(a: Float32Array, b: Float32Array): number {\r\n const len = Math.min(a.length, b.length);\r\n let dot = 0;\r\n let normA = 0;\r\n let normB = 0;\r\n for (let i = 0; i < len; i += 1) {\r\n const av = a[i] ?? 0;\r\n const bv = b[i] ?? 0;\r\n dot += av * bv;\r\n normA += av * av;\r\n normB += bv * bv;\r\n }\r\n if (normA === 0 || normB === 0) {\r\n return 1;\r\n }\r\n const similarity = dot / (Math.sqrt(normA) * Math.sqrt(normB));\r\n return 1 - similarity;\r\n}\r\n\r\n/**\r\n * Decode a float32 embedding from a SQLite BLOB.\r\n * Avoids a copy when the underlying ArrayBuffer is already aligned/owned.\r\n */\r\nexport function bufferToEmbedding(data: Uint8Array | Buffer): Float32Array {\r\n const byteOffset = (data as Uint8Array).byteOffset ?? 0;\r\n const byteLength = data.byteLength;\r\n if (byteOffset % Float32Array.BYTES_PER_ELEMENT === 0) {\r\n return new Float32Array(\r\n (data as Uint8Array).buffer,\r\n byteOffset,\r\n byteLength / Float32Array.BYTES_PER_ELEMENT,\r\n );\r\n }\r\n const copy = new Uint8Array(byteLength);\r\n copy.set(data);\r\n return new Float32Array(copy.buffer);\r\n}\r\n","/**\n * Contiguous in-memory vector index for blob backends (e.g. win32-arm64\n * without sqlite-vec). Stores L2-normalized embeddings for O(n) top-k\n * via fused multiply-add + partial selection — no per-search allocations\n * of distance arrays when n is large.\n */\n\nexport interface InMemoryHit {\n memoryRowid: number;\n distance: number;\n}\n\nexport class InMemoryVectorIndex {\n private readonly dims: number;\n private rowids: number[] = [];\n private data: Float32Array;\n private count = 0;\n private readonly rowidToSlot = new Map<number, number>();\n\n constructor(dimensions: number, initialCapacity = 256) {\n this.dims = dimensions;\n this.data = new Float32Array(initialCapacity * dimensions);\n }\n\n get size(): number {\n return this.count;\n }\n\n clear(): void {\n this.rowids.length = 0;\n this.rowidToSlot.clear();\n this.count = 0;\n }\n\n upsert(rowid: number, embedding: Float32Array): void {\n const existing = this.rowidToSlot.get(rowid);\n const slot =\n existing !== undefined\n ? existing\n : (() => {\n this.ensureCapacity(this.count + 1);\n const s = this.count;\n this.rowids[s] = rowid;\n this.rowidToSlot.set(rowid, s);\n this.count += 1;\n return s;\n })();\n\n const dims = this.dims;\n const base = slot * dims;\n const data = this.data;\n const len = embedding.length < dims ? embedding.length : dims;\n let norm = 0;\n for (let i = 0; i < len; i += 1) {\n const v = embedding[i]!;\n data[base + i] = v;\n norm += v * v;\n }\n for (let i = len; i < dims; i += 1) {\n data[base + i] = 0;\n }\n if (norm > 0) {\n const inv = 1 / Math.sqrt(norm);\n for (let i = 0; i < len; i += 1) {\n data[base + i]! *= inv;\n }\n }\n }\n\n remove(rowid: number): void {\n const slot = this.rowidToSlot.get(rowid);\n if (slot === undefined) {\n return;\n }\n const last = this.count - 1;\n if (slot !== last) {\n const lastRowid = this.rowids[last]!;\n this.data.copyWithin(\n slot * this.dims,\n last * this.dims,\n (last + 1) * this.dims,\n );\n this.rowids[slot] = lastRowid;\n this.rowidToSlot.set(lastRowid, slot);\n }\n this.rowidToSlot.delete(rowid);\n this.count = last;\n }\n\n /** Top-k by cosine distance (1 - dot) assuming query is L2-normalized. */\n search(queryNormalized: Float32Array, topK: number): InMemoryHit[] {\n const n = this.count;\n if (n === 0 || topK <= 0) {\n return [];\n }\n const dims = this.dims;\n const data = this.data;\n const rowids = this.rowids;\n const k = topK < n ? topK : n;\n\n // Small-k: maintain a max-heap of distances (worst of the best-k at root).\n const heapDist = new Float64Array(k);\n const heapRow = new Int32Array(k);\n let heapSize = 0;\n\n for (let i = 0; i < n; i += 1) {\n const base = i * dims;\n let dot = 0;\n // Manual 4-wide unroll for hot loop\n let d = 0;\n for (; d + 3 < dims; d += 4) {\n dot +=\n queryNormalized[d]! * data[base + d]! +\n queryNormalized[d + 1]! * data[base + d + 1]! +\n queryNormalized[d + 2]! * data[base + d + 2]! +\n queryNormalized[d + 3]! * data[base + d + 3]!;\n }\n for (; d < dims; d += 1) {\n dot += queryNormalized[d]! * data[base + d]!;\n }\n const distance = 1 - dot;\n\n if (heapSize < k) {\n heapDist[heapSize] = distance;\n heapRow[heapSize] = rowids[i]!;\n heapSize += 1;\n if (heapSize === k) {\n buildMaxHeap(heapDist, heapRow, k);\n }\n } else if (distance < heapDist[0]!) {\n heapDist[0] = distance;\n heapRow[0] = rowids[i]!;\n siftDown(heapDist, heapRow, 0, k);\n }\n }\n\n const hits: InMemoryHit[] = new Array(heapSize);\n for (let i = 0; i < heapSize; i += 1) {\n hits[i] = { memoryRowid: heapRow[i]!, distance: heapDist[i]! };\n }\n hits.sort((a, b) => a.distance - b.distance);\n return hits;\n }\n\n private ensureCapacity(needed: number): void {\n if (needed * this.dims <= this.data.length) {\n return;\n }\n let cap = this.data.length / this.dims;\n if (cap < 1) cap = 1;\n while (cap < needed) cap *= 2;\n const next = new Float32Array(cap * this.dims);\n next.set(this.data.subarray(0, this.count * this.dims));\n this.data = next;\n }\n}\n\n/** L2-normalize into a new Float32Array of exactly `dims` length. */\nexport function normalizeEmbedding(\n embedding: Float32Array,\n dims = embedding.length,\n): Float32Array {\n return normalizeInto(embedding, dims);\n}\n\nfunction normalizeInto(embedding: Float32Array, dims: number): Float32Array {\n const out = new Float32Array(dims);\n const len = embedding.length < dims ? embedding.length : dims;\n let norm = 0;\n for (let i = 0; i < len; i += 1) {\n const v = embedding[i]!;\n out[i] = v;\n norm += v * v;\n }\n if (norm === 0) {\n return out;\n }\n const inv = 1 / Math.sqrt(norm);\n for (let i = 0; i < len; i += 1) {\n out[i]! *= inv;\n }\n return out;\n}\n\nfunction buildMaxHeap(\n dist: Float64Array,\n rows: Int32Array,\n n: number,\n): void {\n for (let i = (n >> 1) - 1; i >= 0; i -= 1) {\n siftDown(dist, rows, i, n);\n }\n}\n\nfunction siftDown(\n dist: Float64Array,\n rows: Int32Array,\n i: number,\n n: number,\n): void {\n for (;;) {\n let largest = i;\n const left = (i << 1) + 1;\n const right = left + 1;\n if (left < n && dist[left]! > dist[largest]!) largest = left;\n if (right < n && dist[right]! > dist[largest]!) largest = right;\n if (largest === i) return;\n const td = dist[i]!;\n dist[i] = dist[largest]!;\n dist[largest] = td;\n const tr = rows[i]!;\n rows[i] = rows[largest]!;\n rows[largest] = tr;\n i = largest;\n }\n}\n","/**\n * SQLite multi-writer concurrency defaults and validation.\n */\n\nimport { ConfigurationError } from \"../../errors/index.js\";\n\nexport interface ConcurrencyConfig {\n /** Max retry attempts after SQLITE_BUSY. Default: 5 */\n maxRetries?: number;\n /** Base backoff in ms before jitter. Default: 50 */\n baseBackoffMs?: number;\n /** Cap on backoff delay in ms. Default: 2000 */\n maxBackoffMs?: number;\n /** SQLite busy_timeout pragma in ms. Default: 5000 */\n lockTimeoutMs?: number;\n}\n\nexport interface ResolvedConcurrencyConfig {\n maxRetries: number;\n baseBackoffMs: number;\n maxBackoffMs: number;\n lockTimeoutMs: number;\n}\n\nexport const DEFAULT_CONCURRENCY: ResolvedConcurrencyConfig = {\n maxRetries: 5,\n baseBackoffMs: 50,\n maxBackoffMs: 2000,\n lockTimeoutMs: 5000,\n};\n\nexport function resolveConcurrencyConfig(\n input?: ConcurrencyConfig,\n): ResolvedConcurrencyConfig {\n const resolved: ResolvedConcurrencyConfig = {\n maxRetries: input?.maxRetries ?? DEFAULT_CONCURRENCY.maxRetries,\n baseBackoffMs: input?.baseBackoffMs ?? DEFAULT_CONCURRENCY.baseBackoffMs,\n maxBackoffMs: input?.maxBackoffMs ?? DEFAULT_CONCURRENCY.maxBackoffMs,\n lockTimeoutMs: input?.lockTimeoutMs ?? DEFAULT_CONCURRENCY.lockTimeoutMs,\n };\n\n assertPositiveInt(resolved.maxRetries, \"concurrency.maxRetries\");\n assertPositiveNumber(resolved.baseBackoffMs, \"concurrency.baseBackoffMs\");\n assertPositiveNumber(resolved.maxBackoffMs, \"concurrency.maxBackoffMs\");\n assertPositiveInt(resolved.lockTimeoutMs, \"concurrency.lockTimeoutMs\");\n\n if (resolved.maxBackoffMs < resolved.baseBackoffMs) {\n throw new ConfigurationError(\n \"concurrency.maxBackoffMs must be >= concurrency.baseBackoffMs\",\n );\n }\n\n return resolved;\n}\n\nfunction assertPositiveInt(value: number, field: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new ConfigurationError(`${field} must be a non-negative integer`);\n }\n}\n\nfunction assertPositiveNumber(value: number, field: string): void {\n if (!Number.isFinite(value) || value < 0) {\n throw new ConfigurationError(`${field} must be a non-negative number`);\n }\n}\n","/**\n * BEGIN IMMEDIATE transactions with SQLITE_BUSY retry + jitter backoff.\n */\n\nimport type { DatabaseSync } from \"node:sqlite\";\nimport { StorageLockedError } from \"../../errors/index.js\";\nimport type { ResolvedConcurrencyConfig } from \"./concurrency-config.js\";\n\nexport function isSqliteBusyError(error: unknown): boolean {\n const raw = error instanceof Error ? error.message : String(error);\n const lower = raw.toLowerCase();\n return (\n lower.includes(\"database is locked\") ||\n lower.includes(\"sqlite_busy\") ||\n lower.includes(\"busy\")\n );\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction backoffDelay(\n attempt: number,\n config: ResolvedConcurrencyConfig,\n): number {\n const exp = Math.min(\n config.maxBackoffMs,\n config.baseBackoffMs * 2 ** attempt,\n );\n const jitter = Math.random() * config.baseBackoffMs;\n return Math.min(config.maxBackoffMs, exp + jitter);\n}\n\n/**\n * Run `fn` inside BEGIN IMMEDIATE … COMMIT, retrying on SQLITE_BUSY.\n */\nexport function withImmediateTransactionSync<T>(\n db: DatabaseSync,\n config: ResolvedConcurrencyConfig,\n fn: () => T,\n onRetry?: (attempt: number, delayMs: number, error: unknown) => void,\n): T {\n let lastError: unknown;\n for (let attempt = 0; attempt <= config.maxRetries; attempt += 1) {\n try {\n db.exec(\"BEGIN IMMEDIATE\");\n try {\n const result = fn();\n db.exec(\"COMMIT\");\n return result;\n } catch (error) {\n try {\n db.exec(\"ROLLBACK\");\n } catch {\n // ignore rollback errors\n }\n throw error;\n }\n } catch (error) {\n lastError = error;\n const isBusy = isSqliteBusyError(error);\n if (!isBusy) {\n throw error;\n }\n if (attempt >= config.maxRetries) {\n break;\n }\n const delay = backoffDelay(attempt, config);\n onRetry?.(attempt + 1, delay, error);\n // Sync path: busy-wait is unavoidable for node:sqlite sync API.\n const end = Date.now() + delay;\n while (Date.now() < end) {\n /* spin */\n }\n }\n }\n throw new StorageLockedError(\n `SQLite write lock could not be acquired after ${config.maxRetries} retries`,\n {\n cause: lastError instanceof Error ? lastError : undefined,\n reason: \"SQLITE_BUSY exhausted retries\",\n suggestion:\n \"Increase concurrency.maxRetries or concurrency.lockTimeoutMs, or consider the Postgres backend for high-concurrency multi-agent workloads.\",\n },\n );\n}\n\n/**\n * Async variant — preferred when callers can await between retries.\n */\nexport async function withImmediateTransaction<T>(\n db: DatabaseSync,\n config: ResolvedConcurrencyConfig,\n fn: () => T | Promise<T>,\n onRetry?: (attempt: number, delayMs: number, error: unknown) => void,\n): Promise<T> {\n let lastError: unknown;\n for (let attempt = 0; attempt <= config.maxRetries; attempt += 1) {\n try {\n db.exec(\"BEGIN IMMEDIATE\");\n try {\n const result = await fn();\n db.exec(\"COMMIT\");\n return result;\n } catch (error) {\n try {\n db.exec(\"ROLLBACK\");\n } catch {\n // ignore\n }\n throw error;\n }\n } catch (error) {\n lastError = error;\n const isBusy = isSqliteBusyError(error);\n if (!isBusy) {\n throw error;\n }\n if (attempt >= config.maxRetries) {\n break;\n }\n const delay = backoffDelay(attempt, config);\n onRetry?.(attempt + 1, delay, error);\n await sleep(delay);\n }\n }\n throw new StorageLockedError(\n `SQLite write lock could not be acquired after ${config.maxRetries} retries`,\n {\n cause: lastError instanceof Error ? lastError : undefined,\n reason: \"SQLITE_BUSY exhausted retries\",\n suggestion:\n \"Increase concurrency.maxRetries or concurrency.lockTimeoutMs, or consider the Postgres backend for high-concurrency multi-agent workloads.\",\n },\n );\n}\n","/**\n * Memory content normalization + hash for write-time dedupe.\n */\n\nimport { createHash } from \"node:crypto\";\n\n/**\n * Normalize content for exact-match dedupe:\n * 1. Unicode NFC\n * 2. Trim\n * 3. Collapse internal whitespace runs to a single space\n * 4. Do NOT case-fold\n */\nexport function normalizeMemoryContent(text: string): string {\n return text.normalize(\"NFC\").trim().replace(/\\s+/g, \" \");\n}\n\nexport function hashMemoryContent(text: string): string {\n const normalized = normalizeMemoryContent(text);\n return createHash(\"sha256\").update(normalized, \"utf8\").digest(\"hex\");\n}\n\nexport type MemoryDedupeStrategy = \"exact\" | \"near\" | \"exact-or-near\";\n\nexport interface MemoryDedupeConfig {\n enabled?: boolean;\n strategy?: MemoryDedupeStrategy;\n /** Cosine similarity threshold for near-dup. Default 0.92 */\n nearThreshold?: number;\n /** Max vector candidates for near-dup. Default 8 */\n nearCandidateLimit?: number;\n}\n\nexport interface ResolvedMemoryDedupeConfig {\n enabled: boolean;\n strategy: MemoryDedupeStrategy;\n nearThreshold: number;\n nearCandidateLimit: number;\n}\n\nexport const DEFAULT_MEMORY_DEDUPE: ResolvedMemoryDedupeConfig = {\n enabled: false,\n strategy: \"exact-or-near\",\n nearThreshold: 0.92,\n nearCandidateLimit: 8,\n};\n\nexport function resolveMemoryDedupeConfig(\n input?: boolean | MemoryDedupeConfig,\n): ResolvedMemoryDedupeConfig {\n if (input === undefined) {\n return { ...DEFAULT_MEMORY_DEDUPE };\n }\n if (typeof input === \"boolean\") {\n return { ...DEFAULT_MEMORY_DEDUPE, enabled: input };\n }\n return {\n enabled: input.enabled ?? true,\n strategy: input.strategy ?? DEFAULT_MEMORY_DEDUPE.strategy,\n nearThreshold: input.nearThreshold ?? DEFAULT_MEMORY_DEDUPE.nearThreshold,\n nearCandidateLimit:\n input.nearCandidateLimit ?? DEFAULT_MEMORY_DEDUPE.nearCandidateLimit,\n };\n}\n\nexport function mergeMemoryMetadata(\n existing: Record<string, unknown>,\n incoming: Record<string, unknown>,\n): Record<string, unknown> {\n return { ...existing, ...incoming };\n}\n","/**\n * SQLite + sqlite-vec database provider (Node.js built-in `node:sqlite`).\n *\n * Responsibilities:\n * - WAL mode + crash-safe pragmas\n * - Automatic migrations / schema creation\n * - Prepared statements\n * - ACID transactions\n * - Vector index via sqlite-vec vec0 when available\n * - Blob + cosine fallback on unsupported platforms (e.g. win32-arm64)\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DatabaseSync, type StatementSync } from \"node:sqlite\";\nimport * as sqliteVec from \"sqlite-vec\";\n\nimport { DatabaseError, InitializationError } from \"../../errors/index.js\";\nimport { matchesMetadata } from \"../../filters/match.js\";\nimport { compileMetadataFilterToSql } from \"../../filters/sql-compile.js\";\nimport {\n CREATE_BLOB_EMBEDDINGS_TABLE,\n CREATE_EMBEDDING_CACHE_TABLE,\n CREATE_FTS_TABLE,\n CREATE_HISTORY_TABLE,\n CREATE_INDEXES,\n CREATE_MEMORIES_TABLE,\n CREATE_META_TABLE,\n DROP_REDUNDANT_INDEXES_V4,\n META_KEYS,\n SCHEMA_VERSION,\n buildVectorTableSql,\n type VectorBackend,\n} from \"../../schema/index.js\";\nimport { SQL } from \"../../sql/index.js\";\nimport {\n deserializeMetadata,\n embeddingToBuffer,\n serializeMetadata,\n} from \"../../utils/index.js\";\nimport { bufferToEmbedding } from \"../../utils/vector.js\";\nimport {\n InMemoryVectorIndex,\n normalizeEmbedding,\n} from \"../../utils/vector-index.js\";\nimport type {\n HistoryRow,\n InsertMemoryInput,\n MemoryRow,\n RepositoryFilter,\n StorageProvider,\n UpdateMemoryInput,\n VectorSearchHit,\n} from \"../types.js\";\nimport {\n resolveConcurrencyConfig,\n type ConcurrencyConfig,\n type ResolvedConcurrencyConfig,\n} from \"../sqlite/concurrency-config.js\";\nimport { withImmediateTransaction } from \"../sqlite/transaction.js\";\nimport { hashMemoryContent } from \"../../memory/dedupe.js\";\n\n/** Hard cap when metadata cannot be fully pushed to SQL (prevents O(n) RAM blowups). */\nconst MAX_METADATA_SCAN = 50_000;\nconst METADATA_PAGE_SIZE = 500;\n/**\n * Multi-row INSERT chunk size. SQLite default bind limit is 999; 9 binds/row → 110.\n * Leave headroom for side-table multi-value inserts in the same transaction.\n */\nconst BATCH_INSERT_CHUNK = 96;\n/** Max ANN overfetch when post-filtering by org/agent/archived. */\nconst MAX_ANN_OVERFETCH = 8192;\n/** Coalesce concurrent single-row inserts (multi-writer throughput). */\nconst INSERT_COALESCE_THRESHOLD = 24;\nconst INSERT_COALESCE_MAX = 96;\n\ninterface PreparedStatements {\n getMeta: StatementSync;\n setMeta: StatementSync;\n insertMemory: StatementSync;\n updateMemoryContent: StatementSync;\n getMemoryById: StatementSync;\n getMemoryByRowid: StatementSync;\n findActiveByContentHash: StatementSync;\n insertEmbedding: StatementSync | null;\n deleteEmbedding: StatementSync | null;\n searchVectors: StatementSync | null;\n insertEmbeddingBlob: StatementSync | null;\n deleteEmbeddingBlob: StatementSync | null;\n listEmbeddingsBlob: StatementSync | null;\n archiveMemory: StatementSync;\n deleteMemoryById: StatementSync;\n deleteMemoriesByOrg: StatementSync;\n deleteMemoriesByOrgAgent: StatementSync;\n insertHistory: StatementSync;\n getHistory: StatementSync;\n getStats: StatementSync;\n listRowidsForOrg: StatementSync;\n listRowidsForOrgAgent: StatementSync;\n vectorTableExists: StatementSync;\n blobTableExists: StatementSync;\n insertFts: StatementSync | null;\n deleteFts: StatementSync | null;\n deleteFtsByOrg: StatementSync | null;\n deleteFtsByOrgAgent: StatementSync | null;\n searchFts: StatementSync | null;\n deleteEmbeddingsByOrg: StatementSync | null;\n deleteEmbeddingsByOrgAgent: StatementSync | null;\n deleteEmbeddingsBlobByOrg: StatementSync | null;\n deleteEmbeddingsBlobByOrgAgent: StatementSync | null;\n}\n\nexport interface SqliteProviderOptions {\n connectionString: string;\n concurrency?: ConcurrencyConfig;\n}\n\nexport class SqliteStorageProvider implements StorageProvider {\n readonly name = \"sqlite\";\n\n private readonly connectionString: string;\n private readonly concurrency: ResolvedConcurrencyConfig;\n private db: DatabaseSync | null = null;\n private statements: PreparedStatements | null = null;\n private vectorDimensions: number | null = null;\n private vectorBackend: VectorBackend | null = null;\n private sqliteVecLoaded = false;\n /** Hot in-process ANN for blob backend (sqlite-vec unavailable platforms). */\n private memoryIndex: InMemoryVectorIndex | null = null;\n private memoryIndexDirty = false;\n /** Resolved absolute path (or `:memory:`) — avoid re-resolving on size checks. */\n private resolvedPath: string | null = null;\n private retryLog: ((msg: string) => void) | null = null;\n /** Cached prepared statements for `rowid IN (…)` lookups keyed by list length. */\n private rowidInStatements = new Map<number, StatementSync>();\n /** Cached list SQL statements keyed by clause shape. */\n private listStatements = new Map<string, StatementSync>();\n /** Cached multi-row insert statements keyed by row count. */\n private batchInsertStatements = new Map<number, StatementSync>();\n /** Cached multi-row history inserts keyed by row count. */\n private batchHistoryStatements = new Map<number, StatementSync>();\n /** Cached multi-row FTS inserts keyed by row count. */\n private batchFtsStatements = new Map<number, StatementSync>();\n /** Cached multi-row blob embedding inserts keyed by row count. */\n private batchBlobEmbStatements = new Map<number, StatementSync>();\n /** Coalesce concurrent insertMemory callers into one IMMEDIATE transaction. */\n private insertQueue: Array<{\n input: InsertMemoryInput;\n resolve: (row: MemoryRow) => void;\n reject: (err: unknown) => void;\n }> = [];\n private insertFlushScheduled = false;\n\n constructor(options: SqliteProviderOptions) {\n this.connectionString = options.connectionString;\n this.concurrency = resolveConcurrencyConfig(options.concurrency);\n }\n\n /** Absolute or relative path / `:memory:` used by this provider. */\n get path(): string {\n return this.connectionString;\n }\n\n /** Expose DB for embedding cache store (same connection). */\n getDatabase(): DatabaseSync | null {\n return this.db;\n }\n\n setRetryLogger(fn: ((msg: string) => void) | null): void {\n this.retryLog = fn;\n }\n\n async open(): Promise<void> {\n try {\n const dbPath = this.resolvePath(this.connectionString);\n this.resolvedPath = dbPath;\n if (dbPath !== \":memory:\") {\n fs.mkdirSync(path.dirname(dbPath), { recursive: true });\n }\n\n const db = new DatabaseSync(dbPath, { allowExtension: true });\n this.db = db;\n\n // WAL + NORMAL is the production-safe default (multi-reader friendly).\n // Single-process SDK keeps locking_mode=NORMAL (not EXCLUSIVE) so other\n // tools/processes can open the same file for backups or inspection.\n db.exec(\"PRAGMA journal_mode = WAL;\");\n db.exec(`\n PRAGMA synchronous = NORMAL;\n PRAGMA foreign_keys = ON;\n PRAGMA busy_timeout = ${this.concurrency.lockTimeoutMs};\n PRAGMA temp_store = MEMORY;\n PRAGMA cache_size = -32768;\n PRAGMA mmap_size = 134217728;\n PRAGMA wal_autocheckpoint = 2000;\n PRAGMA recursive_triggers = OFF;\n `);\n\n this.sqliteVecLoaded = this.tryLoadSqliteVec(db);\n this.runMigrations(db);\n this.statements = this.prepareStatements(db);\n // FTS consistency check only on fresh / upgraded DBs (see runMigrations).\n // Re-scanning every warm open costs measurable ms for no benefit.\n\n const backend = this.readMetaString(META_KEYS.vectorBackend) as VectorBackend | null;\n const dims = this.readMetaNumber(META_KEYS.embeddingDimensions);\n\n if (backend) {\n this.vectorBackend = backend;\n } else if (this.sqliteVecLoaded) {\n this.vectorBackend = \"sqlite-vec\";\n } else {\n this.vectorBackend = \"blob\";\n }\n\n if (dims !== null) {\n this.vectorDimensions = dims;\n this.ensureVectorStorage(dims);\n this.reprepareVectorStatements();\n // Blob ANN hydrate is deferred until first search (warm-start win).\n if (this.vectorBackend === \"blob\") {\n this.memoryIndexDirty = true;\n }\n }\n } catch (error) {\n try {\n this.db?.close();\n } catch {\n // ignore close errors during failed open\n }\n this.db = null;\n this.statements = null;\n throw new InitializationError(\n `Failed to open SQLite database: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async close(): Promise<void> {\n // Drain coalesced inserts before tearing down the connection.\n const deadline = Date.now() + 2_000;\n while (this.insertQueue.length > 0 && Date.now() < deadline) {\n await this.flushInsertQueue();\n }\n if (!this.db) {\n return;\n }\n try {\n // Refresh query planner stats before close (cheap; measurable on large DBs).\n try {\n this.db.exec(\"PRAGMA optimize;\");\n } catch {\n // ignore — optimize is best-effort\n }\n this.db.close();\n } catch (error) {\n throw new DatabaseError(`Failed to close database: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n } finally {\n this.db = null;\n this.statements = null;\n this.memoryIndex = null;\n this.rowidInStatements.clear();\n this.listStatements.clear();\n this.batchInsertStatements.clear();\n this.batchHistoryStatements.clear();\n this.batchFtsStatements.clear();\n this.batchBlobEmbStatements.clear();\n }\n }\n\n async ensureVectorSchema(dimensions: number): Promise<void> {\n const existing = await this.getEmbeddingDimensions();\n if (existing !== null && existing !== dimensions) {\n throw new InitializationError(\n `Embedding dimensions mismatch: database is configured for ${existing}-d vectors, but the embedding model returned ${dimensions}-d vectors.`,\n );\n }\n\n if (!this.vectorBackend) {\n this.vectorBackend = this.sqliteVecLoaded ? \"sqlite-vec\" : \"blob\";\n }\n\n // Prefer sqlite-vec when available and not already locked to blob.\n if (this.sqliteVecLoaded && this.vectorBackend !== \"blob\") {\n this.vectorBackend = \"sqlite-vec\";\n }\n\n this.ensureVectorStorage(dimensions);\n await this.setMeta(META_KEYS.vectorBackend, this.vectorBackend);\n\n if (existing === null) {\n await this.setEmbeddingDimensions(dimensions);\n }\n this.vectorDimensions = dimensions;\n this.reprepareVectorStatements();\n this.hydrateMemoryIndex();\n }\n\n async getEmbeddingDimensions(): Promise<number | null> {\n return this.readMetaNumber(META_KEYS.embeddingDimensions);\n }\n\n async setEmbeddingDimensions(dimensions: number): Promise<void> {\n await this.setMeta(META_KEYS.embeddingDimensions, String(dimensions));\n this.vectorDimensions = dimensions;\n }\n\n async insertMemory(input: InsertMemoryInput): Promise<MemoryRow> {\n this.requireVectorReady();\n // Coalesce concurrent writers into one BEGIN IMMEDIATE + multi-row insert.\n // Without this, each remember() pays a full fsync-bound commit.\n return new Promise<MemoryRow>((resolve, reject) => {\n this.insertQueue.push({ input, resolve, reject });\n if (this.insertQueue.length >= INSERT_COALESCE_THRESHOLD) {\n this.insertFlushScheduled = false;\n void this.flushInsertQueue();\n return;\n }\n this.scheduleInsertFlush();\n });\n }\n\n private scheduleInsertFlush(): void {\n if (this.insertFlushScheduled) {\n return;\n }\n this.insertFlushScheduled = true;\n // setImmediate lets concurrent remember() callers join one IMMEDIATE tx.\n setImmediate(() => {\n this.insertFlushScheduled = false;\n void this.flushInsertQueue();\n });\n }\n\n private async flushInsertQueue(): Promise<void> {\n if (this.insertQueue.length === 0) {\n return;\n }\n const batch = this.insertQueue.splice(0, INSERT_COALESCE_MAX);\n try {\n if (batch.length === 1) {\n const row = await this.insertMemoryImmediate(batch[0]!.input);\n batch[0]!.resolve(row);\n } else {\n const rows = await this.insertMemoriesBatch(batch.map((b) => b.input));\n for (let i = 0; i < batch.length; i += 1) {\n batch[i]!.resolve(rows[i]!);\n }\n }\n } catch (error) {\n for (const item of batch) {\n item.reject(error);\n }\n }\n if (this.insertQueue.length > 0) {\n void this.flushInsertQueue();\n }\n }\n\n /** Single-row insert without coalescing (used by flush of size 1). */\n private async insertMemoryImmediate(input: InsertMemoryInput): Promise<MemoryRow> {\n const stmts = this.requireStatements();\n const contentHash =\n input.contentHash !== undefined\n ? input.contentHash\n : hashMemoryContent(input.contentText);\n\n return this.withTransaction(() => {\n const row = stmts.insertMemory.get(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n serializeMetadata(input.metadata),\n contentHash,\n input.createdAt,\n input.updatedAt,\n ) as unknown as MemoryRow | undefined;\n if (!row || row.rowid === undefined) {\n throw new DatabaseError(\"Failed to read memory after insert\");\n }\n\n this.insertEmbedding(row.rowid, input.embedding);\n // Keep FTS in the same ACID transaction — no deferred/stale keyword search.\n this.insertFtsRow(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n );\n\n stmts.insertHistory.run(\n crypto.randomUUID(),\n input.id,\n \"created\",\n null,\n input.createdAt,\n );\n\n return row;\n });\n }\n\n async insertMemoriesBatch(inputs: InsertMemoryInput[]): Promise<MemoryRow[]> {\n if (inputs.length === 0) {\n return [];\n }\n this.requireVectorReady();\n\n return this.withTransaction(() => {\n const rows: MemoryRow[] = [];\n for (let offset = 0; offset < inputs.length; offset += BATCH_INSERT_CHUNK) {\n const chunk = inputs.slice(offset, offset + BATCH_INSERT_CHUNK);\n const inserted = this.insertMemoryChunk(chunk);\n rows.push(...inserted);\n }\n return rows;\n });\n }\n\n async updateMemory(input: UpdateMemoryInput): Promise<MemoryRow | null> {\n const stmts = this.requireStatements();\n return this.withTransaction(() => {\n const existing = stmts.getMemoryById.get(\n input.id,\n input.organization,\n ) as unknown as MemoryRow | undefined;\n if (!existing || existing.rowid === undefined) {\n return null;\n }\n\n const contentText = input.contentText ?? existing.content_text;\n const metadataJson =\n input.metadata !== undefined\n ? serializeMetadata(input.metadata)\n : existing.metadata_json;\n const contentHash =\n input.contentHash !== undefined\n ? input.contentHash\n : input.contentText !== undefined\n ? hashMemoryContent(input.contentText)\n : (existing.content_hash ?? null);\n\n stmts.updateMemoryContent.run(\n input.contentText ?? null,\n input.metadata !== undefined ? metadataJson : null,\n contentHash,\n input.updatedAt,\n input.id,\n input.organization,\n );\n\n if (input.embedding) {\n this.deleteEmbedding(existing.rowid);\n this.insertEmbedding(existing.rowid, input.embedding);\n }\n\n if (input.contentText !== undefined) {\n this.upsertFts(\n input.id,\n input.organization,\n existing.agent,\n contentText,\n );\n }\n\n stmts.insertHistory.run(\n crypto.randomUUID(),\n input.id,\n \"updated\",\n null,\n input.updatedAt,\n );\n\n return stmts.getMemoryById.get(input.id, input.organization) as unknown as MemoryRow;\n });\n }\n\n async findActiveByContentHash(\n organization: string,\n agent: string,\n contentHash: string,\n ): Promise<MemoryRow | null> {\n const stmts = this.requireStatements();\n const row = stmts.findActiveByContentHash.get(\n organization,\n agent,\n contentHash,\n ) as unknown as MemoryRow | undefined;\n return row ?? null;\n }\n\n async searchByMetadata(\n filter: RepositoryFilter,\n limit?: number,\n ): Promise<MemoryRow[]> {\n const rows = await this.listMemories(filter, limit);\n if (!filter.metadata) {\n return rows;\n }\n return rows.filter((row) =>\n matchesMetadata(deserializeMetadata(row.metadata_json), filter.metadata!),\n );\n }\n\n /** Keyword search via FTS5 BM25. Returns memory IDs ranked by relevance. */\n async searchKeyword(\n query: string,\n organization: string,\n topK: number,\n ): Promise<Array<{ memoryId: string; score: number }>> {\n const stmts = this.requireStatements();\n if (!stmts.searchFts) {\n return [];\n }\n try {\n const sanitized = sanitizeFtsQuery(query);\n if (!sanitized) {\n return [];\n }\n const rows = stmts.searchFts.all(sanitized, organization, topK) as unknown as Array<{\n memory_id: string;\n rank: number;\n }>;\n return rows.map((row) => ({\n memoryId: row.memory_id,\n // bm25 returns lower (more negative) for better matches — invert to [0, ∞)\n score: 1 / (1 + Math.abs(row.rank)),\n }));\n } catch {\n return [];\n }\n }\n\n async getMemoryById(\n id: string,\n organization: string,\n ): Promise<MemoryRow | null> {\n const stmts = this.requireStatements();\n const row = stmts.getMemoryById.get(id, organization) as unknown as\n | MemoryRow\n | undefined;\n return row ?? null;\n }\n\n async getMemoryByRowid(\n rowid: number,\n organization: string,\n ): Promise<MemoryRow | null> {\n const stmts = this.requireStatements();\n const row = stmts.getMemoryByRowid.get(rowid, organization) as unknown as\n | MemoryRow\n | undefined;\n return row ?? null;\n }\n\n async getMemoriesByRowids(\n rowids: number[],\n organization: string,\n ): Promise<Map<number, MemoryRow>> {\n const out = new Map<number, MemoryRow>();\n if (rowids.length === 0) {\n return out;\n }\n const chunkSize = 400;\n for (let offset = 0; offset < rowids.length; offset += chunkSize) {\n const chunk = rowids.slice(offset, offset + chunkSize);\n const stmt = this.getRowidInStatement(chunk.length);\n const rows = stmt.all(organization, ...chunk) as unknown as MemoryRow[];\n for (const row of rows) {\n if (row.rowid !== undefined) {\n out.set(row.rowid, row);\n }\n }\n }\n return out;\n }\n\n async listMemories(\n filter: RepositoryFilter,\n limit?: number,\n ): Promise<MemoryRow[]> {\n try {\n if (filter.metadata) {\n return this.listMemoriesWithMetadata(filter, limit);\n }\n return this.listMemoriesIndexed(filter, limit);\n } catch (error) {\n throw new DatabaseError(`Failed to list memories: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n }\n }\n\n async searchVectors(\n embedding: Float32Array,\n topK: number,\n ): Promise<VectorSearchHit[]> {\n this.requireVectorReady();\n\n if (this.vectorBackend === \"sqlite-vec\") {\n return this.searchWithSqliteVec(embedding, topK);\n }\n return this.searchWithBlobFallback(embedding, topK);\n }\n\n /**\n * Org-scoped KNN + memory rows with adaptive overfetch.\n * Global ANN is post-filtered by org/agent/archived; underfill triggers larger k.\n */\n async searchVectorsWithMemories(\n embedding: Float32Array,\n topK: number,\n organization: string,\n options?: { agent?: string; includeArchived?: boolean },\n ): Promise<Array<{ row: MemoryRow; distance: number }>> {\n this.requireVectorReady();\n if (topK <= 0) {\n return [];\n }\n\n let fetchK = topK;\n const maxFetch = Math.min(Math.max(topK * 64, 512), MAX_ANN_OVERFETCH);\n let out: Array<{ row: MemoryRow; distance: number }> = [];\n\n while (true) {\n const hits = await this.searchVectors(embedding, fetchK);\n if (hits.length === 0) {\n return [];\n }\n const map = await this.getMemoriesByRowids(\n hits.map((h) => h.memoryRowid),\n organization,\n );\n out = [];\n for (const hit of hits) {\n const row = map.get(hit.memoryRowid);\n if (!row) continue;\n if (options?.agent && row.agent !== options.agent) continue;\n if (!options?.includeArchived && row.archived === 1) continue;\n out.push({ row, distance: hit.distance });\n if (out.length >= topK) {\n return out;\n }\n }\n if (hits.length < fetchK) {\n break;\n }\n if (fetchK >= maxFetch) {\n break;\n }\n fetchK = Math.min(fetchK * 4, maxFetch);\n }\n return out;\n }\n\n async archiveMemories(\n ids: string[],\n organization: string,\n compressedIntoId: string,\n archivedAt: string,\n ): Promise<string[]> {\n const stmts = this.requireStatements();\n const archived: string[] = [];\n\n return this.withTransaction(() => {\n for (const id of ids) {\n const existing = stmts.getMemoryById.get(id, organization) as unknown as\n | MemoryRow\n | undefined;\n const result = stmts.archiveMemory.run(\n compressedIntoId,\n archivedAt,\n id,\n organization,\n );\n if (Number(result.changes) > 0) {\n archived.push(id);\n // Drop from ANN + FTS so recall never resurfaces archived rows.\n if (existing?.rowid !== undefined) {\n this.deleteEmbedding(existing.rowid);\n }\n this.deleteFts(id);\n stmts.insertHistory.run(\n crypto.randomUUID(),\n id,\n \"archived\",\n compressedIntoId,\n archivedAt,\n );\n stmts.insertHistory.run(\n crypto.randomUUID(),\n compressedIntoId,\n \"compressed\",\n id,\n archivedAt,\n );\n }\n }\n return archived;\n });\n }\n\n async deleteMemoryById(id: string, organization: string): Promise<boolean> {\n const stmts = this.requireStatements();\n\n return this.withTransaction(() => {\n const row = stmts.getMemoryById.get(id, organization) as unknown as\n | MemoryRow\n | undefined;\n if (!row || row.rowid === undefined) {\n return false;\n }\n\n this.deleteEmbedding(row.rowid);\n this.deleteFts(id);\n const result = stmts.deleteMemoryById.run(id, organization);\n return Number(result.changes) > 0;\n });\n }\n\n async deleteMemoriesByFilter(filter: RepositoryFilter): Promise<number> {\n const stmts = this.requireStatements();\n const agent = filter.agent;\n if (!agent) {\n throw new DatabaseError(\"deleteMemoriesByFilter requires an agent filter\");\n }\n\n return this.withTransaction(() => {\n this.deleteEmbeddingsForScope(filter.organization, agent);\n this.deleteFtsForScope(filter.organization, agent);\n const result = stmts.deleteMemoriesByOrgAgent.run(\n filter.organization,\n agent,\n );\n return Number(result.changes);\n });\n }\n\n async clearOrganization(organization: string): Promise<number> {\n const stmts = this.requireStatements();\n\n return this.withTransaction(() => {\n this.deleteEmbeddingsForScope(organization);\n this.deleteFtsForScope(organization);\n const result = stmts.deleteMemoriesByOrg.run(organization);\n return Number(result.changes);\n });\n }\n\n async getHistory(memoryId: string): Promise<HistoryRow[]> {\n const stmts = this.requireStatements();\n return stmts.getHistory.all(memoryId) as unknown as HistoryRow[];\n }\n\n async insertHistoryEvent(event: HistoryRow): Promise<void> {\n const stmts = this.requireStatements();\n stmts.insertHistory.run(\n event.id,\n event.memory_id,\n event.event_type,\n event.related_memory_id,\n event.created_at,\n );\n }\n\n async getStats(\n organization: string,\n ): Promise<{\n totalMemories: number;\n activeMemories: number;\n archivedMemories: number;\n totalAgents: number;\n }> {\n const stmts = this.requireStatements();\n const row = stmts.getStats.get(organization) as unknown as {\n total: number | bigint;\n active: number | bigint;\n archived: number | bigint;\n agents: number | bigint;\n };\n return {\n totalMemories: Number(row.total),\n activeMemories: Number(row.active),\n archivedMemories: Number(row.archived),\n totalAgents: Number(row.agents),\n };\n }\n\n async getDatabaseSizeBytes(): Promise<number> {\n const db = this.requireDb();\n if (this.connectionString === \":memory:\") {\n const pageCountRow = db.prepare(\"PRAGMA page_count\").get() as\n | Record<string, number | bigint>\n | undefined;\n const pageSizeRow = db.prepare(\"PRAGMA page_size\").get() as\n | Record<string, number | bigint>\n | undefined;\n const pageCount = Number(\n pageCountRow?.page_count ?? Object.values(pageCountRow ?? {})[0] ?? 0,\n );\n const pageSize = Number(\n pageSizeRow?.page_size ?? Object.values(pageSizeRow ?? {})[0] ?? 0,\n );\n return pageCount * pageSize;\n }\n\n const dbPath = this.resolvedPath ?? this.resolvePath(this.connectionString);\n try {\n let total = fs.statSync(dbPath).size;\n for (const suffix of [\"-wal\", \"-shm\"]) {\n const side = `${dbPath}${suffix}`;\n if (fs.existsSync(side)) {\n total += fs.statSync(side).size;\n }\n }\n return total;\n } catch (error) {\n throw new DatabaseError(\n `Failed to determine database size: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async withTransaction<T>(fn: () => T | Promise<T>): Promise<T> {\n const db = this.requireDb();\n return withImmediateTransaction(\n db,\n this.concurrency,\n fn,\n (attempt, delayMs) => {\n this.retryLog?.(\n `SQLITE_BUSY retry attempt=${attempt} backoffMs=${Math.round(delayMs)}`,\n );\n },\n );\n }\n\n // ─── internals ───────────────────────────────────────────────────────────\n\n private tryLoadSqliteVec(db: DatabaseSync): boolean {\n // win32-arm64 (and similar) cannot load sqlite-vec — skip the failed\n // load attempt on every open (saves cold-start ms).\n const plat = `${process.platform}-${process.arch}`;\n if (SqliteStorageProvider.sqliteVecUnsupported.has(plat)) {\n return false;\n }\n try {\n sqliteVec.load(db);\n return true;\n } catch {\n SqliteStorageProvider.sqliteVecUnsupported.add(plat);\n return false;\n }\n }\n\n private static sqliteVecUnsupported = new Set<string>();\n\n private runMigrations(db: DatabaseSync): void {\n db.exec(CREATE_META_TABLE);\n db.exec(CREATE_MEMORIES_TABLE);\n db.exec(CREATE_HISTORY_TABLE);\n db.exec(CREATE_BLOB_EMBEDDINGS_TABLE);\n db.exec(CREATE_EMBEDDING_CACHE_TABLE);\n\n const current = this.readMetaNumberFromDb(db, META_KEYS.schemaVersion);\n if (current === null) {\n db.exec(CREATE_FTS_TABLE);\n this.backfillFts(db);\n this.migrateToV3(db);\n for (const dropSql of DROP_REDUNDANT_INDEXES_V4) {\n db.exec(dropSql);\n }\n for (const indexSql of CREATE_INDEXES) {\n db.exec(indexSql);\n }\n db.prepare(SQL.setMeta).run(META_KEYS.schemaVersion, String(SCHEMA_VERSION));\n this.ensureFtsConsistency(db);\n } else if (current > SCHEMA_VERSION) {\n throw new InitializationError(\n `Database schema version ${current} is newer than this SDK (supports ${SCHEMA_VERSION}).`,\n );\n } else if (current < SCHEMA_VERSION) {\n if (current < 3) {\n db.exec(CREATE_FTS_TABLE);\n this.backfillFts(db);\n this.migrateToV3(db);\n }\n if (current < 4) {\n this.migrateToV4(db);\n }\n for (const indexSql of CREATE_INDEXES) {\n db.exec(indexSql);\n }\n db.prepare(SQL.setMeta).run(META_KEYS.schemaVersion, String(SCHEMA_VERSION));\n this.ensureFtsConsistency(db);\n }\n // current === SCHEMA_VERSION: skip index churn and FTS rescans (warm-start path).\n }\n\n /**\n * Schema v4: drop unused global created_at index, strip archived vectors\n * from ANN, add agent-active covering index (via CREATE_INDEXES).\n */\n private migrateToV4(db: DatabaseSync): void {\n for (const dropSql of DROP_REDUNDANT_INDEXES_V4) {\n db.exec(dropSql);\n }\n\n // Archived memories must not remain in ANN (recall post-filter waste).\n try {\n db.prepare(SQL.deleteArchivedEmbeddings).run();\n } catch {\n // vec table may not exist yet\n }\n try {\n db.prepare(SQL.deleteArchivedEmbeddingsBlob).run();\n } catch {\n // ignore\n }\n this.memoryIndexDirty = true;\n }\n\n /**\n * Schema v3: content_hash column, history 'updated' event, embedding_cache.\n * SQLite cannot ALTER CHECK constraints — rebuild memory_history when needed.\n */\n private migrateToV3(db: DatabaseSync): void {\n // Add content_hash if missing\n const cols = db\n .prepare(`PRAGMA table_info(memories)`)\n .all() as unknown as Array<{ name: string }>;\n const hasHash = cols.some((c) => c.name === \"content_hash\");\n if (!hasHash) {\n db.exec(`ALTER TABLE memories ADD COLUMN content_hash TEXT`);\n }\n\n // Backfill content_hash for active rows (newest wins on collision via unique index)\n const active = db\n .prepare(\n `SELECT id, content_text, updated_at FROM memories WHERE archived = 0 ORDER BY updated_at DESC`,\n )\n .all() as unknown as Array<{\n id: string;\n content_text: string;\n updated_at: string;\n }>;\n const seen = new Set<string>();\n const updateHash = db.prepare(\n `UPDATE memories SET content_hash = ? WHERE id = ?`,\n );\n for (const row of active) {\n const hash = hashMemoryContent(row.content_text);\n // Scope uniqueness is (org, agent, hash) — we only have id here; full\n // uniqueness is enforced after org/agent-aware backfill below.\n updateHash.run(hash, row.id);\n }\n\n // Re-backfill with org+agent awareness: null out older duplicates\n const activeFull = db\n .prepare(\n `SELECT id, organization, agent, content_text, updated_at\n FROM memories WHERE archived = 0\n ORDER BY updated_at DESC`,\n )\n .all() as unknown as Array<{\n id: string;\n organization: string;\n agent: string;\n content_text: string;\n updated_at: string;\n }>;\n seen.clear();\n const clearHash = db.prepare(\n `UPDATE memories SET content_hash = NULL WHERE id = ?`,\n );\n const setHash = db.prepare(\n `UPDATE memories SET content_hash = ? WHERE id = ?`,\n );\n for (const row of activeFull) {\n const hash = hashMemoryContent(row.content_text);\n const key = `${row.organization}\\0${row.agent}\\0${hash}`;\n if (seen.has(key)) {\n clearHash.run(row.id);\n } else {\n seen.add(key);\n setHash.run(hash, row.id);\n }\n }\n\n // Rebuild history table to allow 'updated' in CHECK\n this.migrateHistoryAllowUpdated(db);\n db.exec(CREATE_EMBEDDING_CACHE_TABLE);\n }\n\n private migrateHistoryAllowUpdated(db: DatabaseSync): void {\n const sql = db\n .prepare(\n `SELECT sql FROM sqlite_master WHERE type='table' AND name='memory_history'`,\n )\n .get() as { sql?: string } | undefined;\n if (sql?.sql?.includes(\"'updated'\")) {\n return;\n }\n db.exec(`\n CREATE TABLE IF NOT EXISTS memory_history_v3 (\n id TEXT PRIMARY KEY NOT NULL,\n memory_id TEXT NOT NULL,\n event_type TEXT NOT NULL CHECK (event_type IN ('created', 'archived', 'compressed', 'updated')),\n related_memory_id TEXT NULL,\n created_at TEXT NOT NULL,\n FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE\n );\n INSERT INTO memory_history_v3 (id, memory_id, event_type, related_memory_id, created_at)\n SELECT id, memory_id, event_type, related_memory_id, created_at FROM memory_history;\n DROP TABLE memory_history;\n ALTER TABLE memory_history_v3 RENAME TO memory_history;\n CREATE INDEX IF NOT EXISTS idx_history_memory_id ON memory_history(memory_id);\n `);\n }\n\n /**\n * Rebuild FTS from active (non-archived) memories when counts diverge.\n * Guarantees keyword/hybrid correctness after crashes or interrupted writes.\n */\n private ensureFtsConsistency(db: DatabaseSync): void {\n try {\n const memCount = db\n .prepare(`SELECT COUNT(*) AS c FROM memories WHERE archived = 0`)\n .get() as { c: number | bigint };\n const ftsCount = db\n .prepare(`SELECT COUNT(*) AS c FROM memories_fts`)\n .get() as { c: number | bigint };\n if (Number(memCount.c) !== Number(ftsCount.c)) {\n this.backfillFts(db);\n }\n } catch {\n // FTS unavailable — keyword search degrades gracefully.\n }\n }\n\n private backfillFts(db: DatabaseSync): void {\n try {\n db.exec(`DELETE FROM memories_fts`);\n const rows = db\n .prepare(\n `SELECT id, organization, agent, content_text FROM memories WHERE archived = 0`,\n )\n .all() as unknown as Array<{\n id: string;\n organization: string;\n agent: string;\n content_text: string;\n }>;\n const insert = db.prepare(SQL.insertFts);\n for (const row of rows) {\n insert.run(row.content_text, row.id, row.organization, row.agent);\n }\n } catch {\n // FTS may be unavailable on exotic builds — keyword search degrades.\n }\n }\n\n private prepareStatements(db: DatabaseSync): PreparedStatements {\n let insertFts: StatementSync | null = null;\n let deleteFts: StatementSync | null = null;\n let deleteFtsByOrg: StatementSync | null = null;\n let deleteFtsByOrgAgent: StatementSync | null = null;\n let searchFts: StatementSync | null = null;\n try {\n insertFts = db.prepare(SQL.insertFts);\n deleteFts = db.prepare(SQL.deleteFts);\n deleteFtsByOrg = db.prepare(SQL.deleteFtsByOrg);\n deleteFtsByOrgAgent = db.prepare(SQL.deleteFtsByOrgAgent);\n searchFts = db.prepare(SQL.searchFts);\n } catch {\n // FTS optional\n }\n\n let deleteEmbeddingsByOrg: StatementSync | null = null;\n let deleteEmbeddingsByOrgAgent: StatementSync | null = null;\n let deleteEmbeddingsBlobByOrg: StatementSync | null = null;\n let deleteEmbeddingsBlobByOrgAgent: StatementSync | null = null;\n try {\n deleteEmbeddingsByOrg = db.prepare(SQL.deleteEmbeddingsByOrg);\n deleteEmbeddingsByOrgAgent = db.prepare(SQL.deleteEmbeddingsByOrgAgent);\n } catch {\n // vec table may not exist yet\n }\n try {\n deleteEmbeddingsBlobByOrg = db.prepare(SQL.deleteEmbeddingsBlobByOrg);\n deleteEmbeddingsBlobByOrgAgent = db.prepare(\n SQL.deleteEmbeddingsBlobByOrgAgent,\n );\n } catch {\n // ignore\n }\n\n return {\n getMeta: db.prepare(SQL.getMeta),\n setMeta: db.prepare(SQL.setMeta),\n insertMemory: db.prepare(SQL.insertMemory),\n updateMemoryContent: db.prepare(SQL.updateMemoryContent),\n getMemoryById: db.prepare(SQL.getMemoryById),\n getMemoryByRowid: db.prepare(SQL.getMemoryByRowid),\n findActiveByContentHash: db.prepare(SQL.findActiveByContentHash),\n insertEmbedding: null,\n deleteEmbedding: null,\n searchVectors: null,\n insertEmbeddingBlob: null,\n deleteEmbeddingBlob: null,\n listEmbeddingsBlob: null,\n archiveMemory: db.prepare(SQL.archiveMemory),\n deleteMemoryById: db.prepare(SQL.deleteMemoryById),\n deleteMemoriesByOrg: db.prepare(SQL.deleteMemoriesByOrg),\n deleteMemoriesByOrgAgent: db.prepare(SQL.deleteMemoriesByOrgAgent),\n insertHistory: db.prepare(SQL.insertHistory),\n getHistory: db.prepare(SQL.getHistory),\n getStats: db.prepare(SQL.getStats),\n listRowidsForOrg: db.prepare(SQL.listRowidsForOrg),\n listRowidsForOrgAgent: db.prepare(SQL.listRowidsForOrgAgent),\n vectorTableExists: db.prepare(SQL.vectorTableExists),\n blobTableExists: db.prepare(\n `SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'memory_embeddings_blob'`,\n ),\n insertFts,\n deleteFts,\n deleteFtsByOrg,\n deleteFtsByOrgAgent,\n searchFts,\n deleteEmbeddingsByOrg,\n deleteEmbeddingsByOrgAgent,\n deleteEmbeddingsBlobByOrg,\n deleteEmbeddingsBlobByOrgAgent,\n };\n }\n\n private listMemoriesIndexed(\n filter: RepositoryFilter,\n limit?: number,\n ): MemoryRow[] {\n const clauses: string[] = [`organization = ?`];\n const params: Array<string | number> = [filter.organization];\n if (filter.agent) {\n clauses.push(`agent = ?`);\n params.push(filter.agent);\n }\n if (!filter.includeArchived) {\n clauses.push(`archived = 0`);\n }\n const key = `${filter.agent ? \"a\" : \"_\"}:${filter.includeArchived ? \"A\" : \"0\"}:${limit !== undefined ? \"L\" : \"_\"}`;\n let stmt = this.listStatements.get(key);\n if (!stmt) {\n let sql = `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n FROM memories\n WHERE ${clauses.join(\" AND \")}\n ORDER BY created_at ASC\n `;\n if (limit !== undefined) {\n sql += ` LIMIT ?`;\n }\n stmt = this.requireDb().prepare(sql);\n this.listStatements.set(key, stmt);\n }\n if (limit !== undefined) {\n return stmt.all(...params, limit) as unknown as MemoryRow[];\n }\n return stmt.all(...params) as unknown as MemoryRow[];\n }\n\n /**\n * Metadata-filtered list: push filters to json_extract when possible;\n * otherwise page with a hard scan cap (never load unbounded orgs into RAM).\n */\n private listMemoriesWithMetadata(\n filter: RepositoryFilter,\n limit?: number,\n ): MemoryRow[] {\n const want = limit ?? MAX_METADATA_SCAN;\n const compiled = filter.metadata\n ? compileMetadataFilterToSql(filter.metadata)\n : null;\n\n if (compiled) {\n const clauses: string[] = [`organization = ?`, `(${compiled.expression})`];\n const params: unknown[] = [filter.organization, ...compiled.params];\n if (filter.agent) {\n clauses.push(`agent = ?`);\n params.push(filter.agent);\n }\n if (!filter.includeArchived) {\n clauses.push(`archived = 0`);\n }\n const sql = `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n FROM memories\n WHERE ${clauses.join(\" AND \")}\n ORDER BY created_at ASC\n LIMIT ?\n `;\n params.push(want);\n return this.requireDb()\n .prepare(sql)\n .all(...(params as never[])) as unknown as MemoryRow[];\n }\n\n // Fallback: paged JS filter with hard scan ceiling.\n const matched: MemoryRow[] = [];\n let offset = 0;\n const db = this.requireDb();\n const clauses: string[] = [`organization = ?`];\n const baseParams: Array<string | number> = [filter.organization];\n if (filter.agent) {\n clauses.push(`agent = ?`);\n baseParams.push(filter.agent);\n }\n if (!filter.includeArchived) {\n clauses.push(`archived = 0`);\n }\n const pageSql = `\n SELECT rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n FROM memories\n WHERE ${clauses.join(\" AND \")}\n ORDER BY created_at ASC\n LIMIT ? OFFSET ?\n `;\n const pageStmt = db.prepare(pageSql);\n while (matched.length < want && offset < MAX_METADATA_SCAN) {\n const pageLimit = Math.min(METADATA_PAGE_SIZE, MAX_METADATA_SCAN - offset);\n const page = pageStmt.all(\n ...baseParams,\n pageLimit,\n offset,\n ) as unknown as MemoryRow[];\n if (page.length === 0) {\n break;\n }\n for (const row of page) {\n if (\n matchesMetadata(\n deserializeMetadata(row.metadata_json),\n filter.metadata!,\n )\n ) {\n matched.push(row);\n if (matched.length >= want) {\n return matched;\n }\n }\n }\n offset += page.length;\n if (page.length < pageLimit) {\n break;\n }\n }\n return matched;\n }\n\n private getRowidInStatement(count: number): StatementSync {\n let stmt = this.rowidInStatements.get(count);\n if (!stmt) {\n const placeholders = Array.from({ length: count }, () => \"?\").join(\",\");\n const sql = `${SQL.getMemoriesByRowidsPrefix}${placeholders})`;\n stmt = this.requireDb().prepare(sql);\n this.rowidInStatements.set(count, stmt);\n }\n return stmt;\n }\n\n private insertMemoryChunk(inputs: InsertMemoryInput[]): MemoryRow[] {\n const stmts = this.requireStatements();\n const n = inputs.length;\n if (n === 1) {\n const input = inputs[0]!;\n const contentHash =\n input.contentHash !== undefined\n ? input.contentHash\n : hashMemoryContent(input.contentText);\n const row = stmts.insertMemory.get(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n serializeMetadata(input.metadata),\n contentHash,\n input.createdAt,\n input.updatedAt,\n ) as unknown as MemoryRow | undefined;\n if (!row || row.rowid === undefined) {\n throw new DatabaseError(\"Failed to read memory after batch insert\");\n }\n this.insertEmbedding(row.rowid, input.embedding);\n this.insertFtsRow(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n );\n stmts.insertHistory.run(\n crypto.randomUUID(),\n input.id,\n \"created\",\n null,\n input.createdAt,\n );\n return [row];\n }\n\n let stmt = this.batchInsertStatements.get(n);\n if (!stmt) {\n const valueRow =\n \"(?, ?, ?, ?, ?, 0, NULL, ?, ?, ?)\";\n const values = Array.from({ length: n }, () => valueRow).join(\", \");\n const sql = `\n INSERT INTO memories (\n id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n ) VALUES ${values}\n RETURNING rowid, id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n `;\n stmt = this.requireDb().prepare(sql);\n this.batchInsertStatements.set(n, stmt);\n }\n\n const binds: unknown[] = [];\n for (const input of inputs) {\n const contentHash =\n input.contentHash !== undefined\n ? input.contentHash\n : hashMemoryContent(input.contentText);\n binds.push(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n serializeMetadata(input.metadata),\n contentHash,\n input.createdAt,\n input.updatedAt,\n );\n }\n\n const rows = stmt.all(...(binds as never[])) as unknown as MemoryRow[];\n if (rows.length !== n) {\n throw new DatabaseError(\"Failed to read memories after batch insert\");\n }\n for (const row of rows) {\n if (row.rowid === undefined) {\n throw new DatabaseError(\"Failed to read memory rowid after batch insert\");\n }\n }\n\n // Multi-row side tables — one statement each instead of 3N run() calls.\n this.insertEmbeddingsBatch(rows, inputs);\n this.insertFtsBatch(inputs);\n this.insertHistoryBatch(inputs);\n return rows;\n }\n\n private insertEmbeddingsBatch(\n rows: MemoryRow[],\n inputs: InsertMemoryInput[],\n ): void {\n const n = rows.length;\n if (this.vectorBackend === \"sqlite-vec\") {\n for (let i = 0; i < n; i += 1) {\n this.insertEmbedding(rows[i]!.rowid!, inputs[i]!.embedding);\n }\n return;\n }\n // Blob backend: multi-value INSERT + incremental in-memory index upsert.\n let stmt = this.batchBlobEmbStatements.get(n);\n if (!stmt) {\n const values = Array.from({ length: n }, () => \"(?, ?)\").join(\", \");\n stmt = this.requireDb().prepare(\n `INSERT INTO memory_embeddings_blob (memory_rowid, embedding) VALUES ${values}`,\n );\n this.batchBlobEmbStatements.set(n, stmt);\n }\n const binds: unknown[] = [];\n for (let i = 0; i < n; i += 1) {\n binds.push(rows[i]!.rowid!, embeddingToBuffer(inputs[i]!.embedding));\n }\n stmt.run(...(binds as never[]));\n if (this.memoryIndex && this.vectorDimensions !== null) {\n for (let i = 0; i < n; i += 1) {\n this.memoryIndex.upsert(rows[i]!.rowid!, inputs[i]!.embedding);\n }\n this.memoryIndexDirty = false;\n } else {\n this.memoryIndexDirty = true;\n }\n }\n\n private insertFtsBatch(inputs: InsertMemoryInput[]): void {\n const stmts = this.requireStatements();\n if (!stmts.insertFts) {\n return;\n }\n const n = inputs.length;\n let stmt = this.batchFtsStatements.get(n);\n if (!stmt) {\n const values = Array.from({ length: n }, () => \"(?, ?, ?, ?)\").join(\", \");\n stmt = this.requireDb().prepare(\n `INSERT INTO memories_fts (content_text, memory_id, organization, agent) VALUES ${values}`,\n );\n this.batchFtsStatements.set(n, stmt);\n }\n const binds: unknown[] = [];\n for (const input of inputs) {\n binds.push(\n input.contentText,\n input.id,\n input.organization,\n input.agent,\n );\n }\n try {\n stmt.run(...(binds as never[]));\n } catch {\n // Fall back to per-row if FTS shape differs.\n for (const input of inputs) {\n this.insertFtsRow(\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n );\n }\n }\n }\n\n private insertHistoryBatch(inputs: InsertMemoryInput[]): void {\n const n = inputs.length;\n let stmt = this.batchHistoryStatements.get(n);\n if (!stmt) {\n const values = Array.from({ length: n }, () => \"(?, ?, ?, ?, ?)\").join(\n \", \",\n );\n stmt = this.requireDb().prepare(\n `INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n VALUES ${values}`,\n );\n this.batchHistoryStatements.set(n, stmt);\n }\n const binds: unknown[] = [];\n for (const input of inputs) {\n binds.push(\n crypto.randomUUID(),\n input.id,\n \"created\",\n null,\n input.createdAt,\n );\n }\n stmt.run(...(binds as never[]));\n }\n\n private deleteEmbeddingsForScope(\n organization: string,\n agent?: string,\n ): void {\n const stmts = this.requireStatements();\n try {\n if (this.vectorBackend === \"sqlite-vec\") {\n if (agent) {\n stmts.deleteEmbeddingsByOrgAgent?.run(organization, agent);\n } else {\n stmts.deleteEmbeddingsByOrg?.run(organization);\n }\n } else {\n if (agent) {\n stmts.deleteEmbeddingsBlobByOrgAgent?.run(organization, agent);\n } else {\n stmts.deleteEmbeddingsBlobByOrg?.run(organization);\n }\n this.memoryIndexDirty = true;\n if (!agent) {\n this.memoryIndex?.clear();\n }\n }\n } catch {\n // Vector table may not exist yet on a fresh DB.\n }\n }\n\n private deleteFtsForScope(organization: string, agent?: string): void {\n const stmts = this.requireStatements();\n try {\n if (agent) {\n stmts.deleteFtsByOrgAgent?.run(organization, agent);\n } else {\n stmts.deleteFtsByOrg?.run(organization);\n }\n } catch {\n // FTS optional\n }\n }\n\n /** Insert-only FTS row (new memory IDs never collide). */\n private insertFtsRow(\n memoryId: string,\n organization: string,\n agent: string,\n contentText: string,\n ): void {\n const stmts = this.requireStatements();\n if (!stmts.insertFts) {\n return;\n }\n try {\n stmts.insertFts.run(contentText, memoryId, organization, agent);\n } catch {\n // ignore FTS errors — keyword search degrades but semantic search remains\n }\n }\n\n private upsertFts(\n memoryId: string,\n organization: string,\n agent: string,\n contentText: string,\n ): void {\n const stmts = this.requireStatements();\n if (!stmts.insertFts || !stmts.deleteFts) {\n return;\n }\n try {\n stmts.deleteFts.run(memoryId);\n stmts.insertFts.run(contentText, memoryId, organization, agent);\n } catch {\n // ignore FTS errors — keyword search degrades but semantic search remains\n }\n }\n\n private deleteFts(memoryId: string): void {\n const stmts = this.requireStatements();\n if (!stmts.deleteFts) {\n return;\n }\n try {\n stmts.deleteFts.run(memoryId);\n } catch {\n // ignore\n }\n }\n\n private ensureVectorStorage(dimensions: number): void {\n const db = this.requireDb();\n if (this.vectorBackend === \"sqlite-vec\") {\n if (!this.sqliteVecLoaded) {\n throw new InitializationError(\n \"sqlite-vec is required for this database but is unavailable on this platform.\",\n );\n }\n const stmts = this.requireStatements();\n const exists = stmts.vectorTableExists.get() as { name: string } | undefined;\n if (!exists) {\n db.exec(buildVectorTableSql(dimensions));\n }\n this.memoryIndex = null;\n return;\n }\n\n db.exec(CREATE_BLOB_EMBEDDINGS_TABLE);\n if (!this.memoryIndex || this.memoryIndex.size === 0) {\n this.memoryIndex = new InMemoryVectorIndex(dimensions);\n }\n }\n\n private hydrateMemoryIndex(): void {\n if (this.vectorBackend !== \"blob\" || this.vectorDimensions === null) {\n this.memoryIndex = null;\n return;\n }\n const stmts = this.requireStatements();\n if (!stmts.listEmbeddingsBlob) {\n stmts.listEmbeddingsBlob = this.requireDb().prepare(SQL.listEmbeddingsBlob);\n }\n const index = new InMemoryVectorIndex(this.vectorDimensions);\n try {\n const rows = stmts.listEmbeddingsBlob.all() as unknown as Array<{\n memory_rowid: number;\n embedding: Uint8Array | Buffer;\n }>;\n for (const row of rows) {\n index.upsert(row.memory_rowid, bufferToEmbedding(row.embedding));\n }\n } catch {\n // empty table is fine\n }\n this.memoryIndex = index;\n }\n\n private reprepareVectorStatements(): void {\n const db = this.requireDb();\n const stmts = this.requireStatements();\n\n if (this.vectorBackend === \"sqlite-vec\") {\n stmts.insertEmbedding = db.prepare(SQL.insertEmbedding);\n stmts.deleteEmbedding = db.prepare(SQL.deleteEmbedding);\n stmts.searchVectors = db.prepare(SQL.searchVectors);\n stmts.insertEmbeddingBlob = null;\n stmts.deleteEmbeddingBlob = null;\n stmts.listEmbeddingsBlob = null;\n try {\n stmts.deleteEmbeddingsByOrg = db.prepare(SQL.deleteEmbeddingsByOrg);\n stmts.deleteEmbeddingsByOrgAgent = db.prepare(\n SQL.deleteEmbeddingsByOrgAgent,\n );\n } catch {\n // ignore\n }\n return;\n }\n\n stmts.insertEmbeddingBlob = db.prepare(SQL.insertEmbeddingBlob);\n stmts.deleteEmbeddingBlob = db.prepare(SQL.deleteEmbeddingBlob);\n stmts.listEmbeddingsBlob = db.prepare(SQL.listEmbeddingsBlob);\n stmts.insertEmbedding = null;\n stmts.deleteEmbedding = null;\n stmts.searchVectors = null;\n try {\n stmts.deleteEmbeddingsBlobByOrg = db.prepare(SQL.deleteEmbeddingsBlobByOrg);\n stmts.deleteEmbeddingsBlobByOrgAgent = db.prepare(\n SQL.deleteEmbeddingsBlobByOrgAgent,\n );\n } catch {\n // ignore\n }\n }\n\n private insertEmbedding(rowid: number, embedding: Float32Array): void {\n const stmts = this.requireStatements();\n if (this.vectorBackend === \"sqlite-vec\") {\n stmts.insertEmbedding!.run(rowid, this.toVectorParam(embedding));\n return;\n }\n stmts.insertEmbeddingBlob!.run(rowid, embeddingToBuffer(embedding));\n // Keep the hot in-memory ANN index incremental — avoid O(n) rebuilds.\n if (this.memoryIndex) {\n this.memoryIndex.upsert(rowid, embedding);\n this.memoryIndexDirty = false;\n } else {\n this.memoryIndexDirty = true;\n }\n }\n\n private deleteEmbedding(rowid: number): void {\n const stmts = this.requireStatements();\n try {\n if (this.vectorBackend === \"sqlite-vec\" && stmts.deleteEmbedding) {\n stmts.deleteEmbedding.run(rowid);\n } else if (stmts.deleteEmbeddingBlob) {\n stmts.deleteEmbeddingBlob.run(rowid);\n this.memoryIndex?.remove(rowid);\n this.memoryIndexDirty = true;\n }\n } catch {\n // Ignore missing vectors during delete.\n }\n }\n\n private searchWithSqliteVec(\n embedding: Float32Array,\n topK: number,\n ): VectorSearchHit[] {\n const stmts = this.requireStatements();\n try {\n const rows = stmts.searchVectors!.all(\n this.toVectorParam(embedding),\n topK,\n ) as unknown as Array<{ memory_rowid: number; distance: number }>;\n\n const hits: VectorSearchHit[] = new Array(rows.length);\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i]!;\n hits[i] = {\n memoryRowid: row.memory_rowid,\n distance: row.distance,\n };\n }\n return hits;\n } catch (error) {\n throw new DatabaseError(`Vector search failed: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n }\n }\n\n private searchWithBlobFallback(\n embedding: Float32Array,\n topK: number,\n ): VectorSearchHit[] {\n if (this.memoryIndexDirty || !this.memoryIndex) {\n this.hydrateMemoryIndex();\n this.memoryIndexDirty = false;\n }\n if (this.memoryIndex && this.vectorDimensions !== null) {\n const query = normalizeEmbedding(embedding, this.vectorDimensions);\n return this.memoryIndex.search(query, topK);\n }\n throw new DatabaseError(\"Blob vector index is not initialized\");\n }\n\n private async setMeta(key: string, value: string): Promise<void> {\n const stmts = this.requireStatements();\n stmts.setMeta.run(key, value);\n }\n\n private readMetaNumber(key: string): number | null {\n const stmts = this.requireStatements();\n const row = stmts.getMeta.get(key) as { value: string } | undefined;\n if (!row) {\n return null;\n }\n const parsed = Number(row.value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n private readMetaString(key: string): string | null {\n const stmts = this.requireStatements();\n const row = stmts.getMeta.get(key) as { value: string } | undefined;\n return row?.value ?? null;\n }\n\n private readMetaNumberFromDb(db: DatabaseSync, key: string): number | null {\n const row = db.prepare(SQL.getMeta).get(key) as { value: string } | undefined;\n if (!row) {\n return null;\n }\n const parsed = Number(row.value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n private resolvePath(connectionString: string): string {\n if (connectionString === \":memory:\") {\n return \":memory:\";\n }\n return path.isAbsolute(connectionString)\n ? connectionString\n : path.resolve(process.cwd(), connectionString);\n }\n\n private requireDb(): DatabaseSync {\n if (!this.db) {\n throw new DatabaseError(\"Database is not open. Call init() first.\");\n }\n return this.db;\n }\n\n private requireStatements(): PreparedStatements {\n if (!this.statements) {\n throw new DatabaseError(\"Database statements are not prepared. Call init() first.\");\n }\n return this.statements;\n }\n\n private requireVectorReady(): void {\n if (!this.vectorBackend || this.vectorDimensions === null) {\n throw new DatabaseError(\n \"Vector index is not ready. Embedding dimensions have not been initialized.\",\n );\n }\n }\n\n private toVectorParam(embedding: Float32Array): Uint8Array {\n const buffer = embeddingToBuffer(embedding);\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n\n private describe(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n }\n}\n\n/** @deprecated Prefer {@link SqliteStorageProvider}. */\nexport const SqliteDatabaseProvider = SqliteStorageProvider;\n\n/** Turn free text into a safe FTS5 MATCH query (OR of terms). */\nfunction sanitizeFtsQuery(query: string): string {\n const terms = query\n .split(/\\s+/)\n .map((t) => t.replace(/[\"']/g, \"\").replace(/[^\\p{L}\\p{N}_-]/gu, \"\"))\n .filter((t) => t.length > 0);\n if (terms.length === 0) {\n return \"\";\n }\n return terms.map((t) => `\"${t}\"`).join(\" OR \");\n}\n","/**\n * Compile MetadataFilter ASTs into PostgreSQL JSONB predicates.\n * Returns null when the filter cannot be pushed down safely.\n */\n\nimport type { MetadataComparison, MetadataFilter } from \"./types.js\";\nimport type { CompiledMetadataSql } from \"./sql-compile.js\";\n\nconst FIELD_RE =\n /^[a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z_][a-zA-Z0-9_]*)*$/;\n\n/** Safe identifier path → JSONB text extract expression (no bind params). */\nfunction jsonbTextExtract(field: string): string | null {\n if (!FIELD_RE.test(field)) {\n return null;\n }\n const parts = field.split(\".\");\n if (parts.length === 1) {\n return `metadata_json->>'${parts[0]}'`;\n }\n const path = parts.join(\",\");\n return `metadata_json #>> '{${path}}'`;\n}\n\nfunction jsonbContainment(\n field: string,\n value: string | number | boolean | null,\n paramIndex: number,\n): CompiledMetadataSql | null {\n if (!FIELD_RE.test(field)) {\n return null;\n }\n const parts = field.split(\".\");\n let obj: unknown = value;\n for (let i = parts.length - 1; i >= 0; i -= 1) {\n obj = { [parts[i]!]: obj };\n }\n return {\n expression: `metadata_json @> $${paramIndex}::jsonb`,\n params: [JSON.stringify(obj)],\n };\n}\n\nfunction compileComparison(\n field: string,\n op: MetadataComparison,\n startIndex: number,\n): CompiledMetadataSql | null {\n if (\"eq\" in op) {\n const value = op.eq;\n if (\n value !== null &&\n typeof value !== \"string\" &&\n typeof value !== \"number\" &&\n typeof value !== \"boolean\"\n ) {\n return null;\n }\n return jsonbContainment(field, value, startIndex);\n }\n\n const extract = jsonbTextExtract(field);\n if (!extract) {\n return null;\n }\n\n if (\"contains\" in op) {\n return {\n expression: `${extract} LIKE '%' || $${startIndex} || '%'`,\n params: [op.contains],\n };\n }\n if (\"gt\" in op) {\n return {\n expression: `(${extract})::numeric > $${startIndex}`,\n params: [op.gt],\n };\n }\n if (\"gte\" in op) {\n return {\n expression: `(${extract})::numeric >= $${startIndex}`,\n params: [op.gte],\n };\n }\n if (\"lt\" in op) {\n return {\n expression: `(${extract})::numeric < $${startIndex}`,\n params: [op.lt],\n };\n }\n if (\"lte\" in op) {\n return {\n expression: `(${extract})::numeric <= $${startIndex}`,\n params: [op.lte],\n };\n }\n if (\"between\" in op) {\n const [lo, hi] = op.between;\n return {\n expression: `(${extract})::numeric >= $${startIndex} AND (${extract})::numeric <= $${startIndex + 1}`,\n params: [lo, hi],\n };\n }\n return null;\n}\n\nfunction compileInner(\n filter: MetadataFilter,\n startIndex: number,\n): CompiledMetadataSql | null {\n if (\"and\" in filter) {\n if (filter.and.length === 0) {\n return { expression: \"TRUE\", params: [] };\n }\n const parts: CompiledMetadataSql[] = [];\n let idx = startIndex;\n for (const child of filter.and) {\n const compiled = compileInner(child, idx);\n if (!compiled) {\n return null;\n }\n parts.push(compiled);\n idx += compiled.params.length;\n }\n return {\n expression: parts.map((p) => `(${p.expression})`).join(\" AND \"),\n params: parts.flatMap((p) => p.params),\n };\n }\n if (\"or\" in filter) {\n if (filter.or.length === 0) {\n return { expression: \"FALSE\", params: [] };\n }\n const parts: CompiledMetadataSql[] = [];\n let idx = startIndex;\n for (const child of filter.or) {\n const compiled = compileInner(child, idx);\n if (!compiled) {\n return null;\n }\n parts.push(compiled);\n idx += compiled.params.length;\n }\n return {\n expression: parts.map((p) => `(${p.expression})`).join(\" OR \"),\n params: parts.flatMap((p) => p.params),\n };\n }\n if (\"not\" in filter) {\n const inner = compileInner(filter.not, startIndex);\n if (!inner) {\n return null;\n }\n return {\n expression: `NOT (${inner.expression})`,\n params: inner.params,\n };\n }\n return compileComparison(filter.field, filter.op, startIndex);\n}\n\n/**\n * Push a metadata filter into PostgreSQL JSONB predicates, or null if unsupported.\n * Parameter placeholders are `$N` starting at `startIndex` (default 1).\n */\nexport function compileMetadataFilterToPostgres(\n filter: MetadataFilter,\n startIndex = 1,\n): CompiledMetadataSql | null {\n return compileInner(filter, startIndex);\n}\n","/**\n * Postgres LISTEN/NOTIFY backend for cross-process subscribe().\n *\n * Uses a dedicated connection (not the pool). Payload is IDs + metadata only.\n */\n\nimport type { Pool, PoolClient } from \"pg\";\nimport type {\n MemoryChangeCallback,\n MemoryChangeEvent,\n SubscribeBackend,\n SubscribeFilter,\n SubscribableEvent,\n Unsubscribe,\n} from \"./types.js\";\n\nexport const WOLBARG_NOTIFY_CHANNEL = \"wolbarg_events\";\n\ninterface Subscription {\n filter: SubscribeFilter;\n callback: MemoryChangeCallback;\n}\n\nfunction matchesFilter(\n filter: SubscribeFilter,\n event: MemoryChangeEvent,\n): boolean {\n if (filter.organization !== event.organization) {\n return false;\n }\n if (filter.agent !== undefined && filter.agent !== event.agent) {\n return false;\n }\n if (filter.event === undefined) {\n return true;\n }\n const events = Array.isArray(filter.event) ? filter.event : [filter.event];\n return events.some(\n (e: SubscribableEvent) => e === \"*\" || e === event.event,\n );\n}\n\nexport function serializeNotifyPayload(event: MemoryChangeEvent): string {\n const payload = JSON.stringify({\n event: event.event,\n organization: event.organization,\n agent: event.agent,\n memoryId: event.memoryId,\n timestamp: event.timestamp,\n traceId: event.traceId,\n sessionId: event.sessionId,\n upsertAction: event.upsertAction,\n });\n if (payload.length > 7900) {\n // Hard Postgres NOTIFY limit is 8000 bytes — drop optional fields.\n return JSON.stringify({\n event: event.event,\n organization: event.organization,\n agent: event.agent,\n memoryId: Array.isArray(event.memoryId)\n ? event.memoryId.slice(0, 20)\n : event.memoryId,\n timestamp: event.timestamp,\n });\n }\n return payload;\n}\n\nexport function parseNotifyPayload(raw: string): MemoryChangeEvent | null {\n try {\n const parsed = JSON.parse(raw) as MemoryChangeEvent;\n if (\n !parsed ||\n typeof parsed.event !== \"string\" ||\n typeof parsed.organization !== \"string\" ||\n typeof parsed.agent !== \"string\" ||\n typeof parsed.timestamp !== \"string\"\n ) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nexport interface PostgresListenerOptions {\n /** Factory that returns a dedicated client (not from the write pool). */\n connect: () => Promise<PoolClient>;\n /** Optional reconnect delay in ms. Default 1000. */\n reconnectDelayMs?: number;\n onError?: (error: unknown) => void;\n}\n\nexport class PostgresSubscribeListener implements SubscribeBackend {\n private readonly subscriptions = new Map<number, Subscription>();\n private nextId = 1;\n private client: PoolClient | null = null;\n private closed = false;\n private reconnecting = false;\n private listenInFlight: Promise<void> | null = null;\n private readonly reconnectDelayMs: number;\n private readonly connect: () => Promise<PoolClient>;\n private readonly onError?: (error: unknown) => void;\n\n constructor(options: PostgresListenerOptions) {\n this.connect = options.connect;\n this.reconnectDelayMs = options.reconnectDelayMs ?? 1000;\n this.onError = options.onError;\n }\n\n async start(): Promise<void> {\n if (this.closed) {\n return;\n }\n await this.ensureListening();\n }\n\n private async ensureListening(): Promise<void> {\n if (this.client || this.closed) {\n return;\n }\n if (this.listenInFlight) {\n await this.listenInFlight;\n return;\n }\n this.listenInFlight = this.openListenConnection();\n try {\n await this.listenInFlight;\n } finally {\n this.listenInFlight = null;\n }\n }\n\n private async openListenConnection(): Promise<void> {\n if (this.client || this.closed) {\n return;\n }\n const client = await this.connect();\n if (this.closed) {\n try {\n client.release(true);\n } catch {\n // ignore\n }\n return;\n }\n this.client = client;\n client.on(\"notification\", (msg) => {\n if (msg.channel !== WOLBARG_NOTIFY_CHANNEL || !msg.payload) {\n return;\n }\n const event = parseNotifyPayload(msg.payload);\n if (!event) {\n return;\n }\n this.dispatch(event);\n });\n client.on(\"error\", (error) => {\n this.onError?.(error);\n void this.handleDisconnect();\n });\n client.on(\"end\", () => {\n void this.handleDisconnect();\n });\n await client.query(`LISTEN ${WOLBARG_NOTIFY_CHANNEL}`);\n }\n\n private async handleDisconnect(): Promise<void> {\n if (this.closed || this.reconnecting) {\n return;\n }\n this.reconnecting = true;\n const prev = this.client;\n this.client = null;\n if (prev) {\n try {\n prev.release(true);\n } catch {\n // ignore\n }\n }\n try {\n await new Promise((r) => setTimeout(r, this.reconnectDelayMs));\n if (!this.closed) {\n await this.ensureListening();\n }\n } catch (error) {\n this.onError?.(error);\n this.reconnecting = false;\n if (!this.closed) {\n void this.handleDisconnect();\n }\n return;\n }\n this.reconnecting = false;\n }\n\n private dispatch(event: MemoryChangeEvent): void {\n for (const sub of this.subscriptions.values()) {\n if (!matchesFilter(sub.filter, event)) {\n continue;\n }\n try {\n sub.callback(event);\n } catch (error) {\n console.error(\n \"[wolbarg] subscribe callback error:\",\n error instanceof Error ? error.message : error,\n );\n }\n }\n }\n\n subscribe(\n filter: SubscribeFilter,\n callback: MemoryChangeCallback,\n ): Unsubscribe {\n if (this.closed) {\n throw new Error(\"Subscribe backend is closed\");\n }\n const id = this.nextId++;\n this.subscriptions.set(id, { filter, callback });\n void this.ensureListening();\n return () => {\n this.subscriptions.delete(id);\n };\n }\n\n /** True when at least one subscribe() callback is registered. */\n hasSubscribers(): boolean {\n return this.subscriptions.size > 0;\n }\n\n /**\n * Local emit is a no-op for Postgres — writers use NOTIFY in-transaction.\n * Kept so the shared SubscribeBackend interface is uniform.\n */\n emit(_event: MemoryChangeEvent): void {\n // Cross-process delivery happens via NOTIFY from the storage layer.\n }\n\n async close(): Promise<void> {\n this.closed = true;\n this.subscriptions.clear();\n const pending = this.listenInFlight;\n if (pending) {\n await pending.catch(() => undefined);\n }\n const client = this.client;\n this.client = null;\n if (!client) {\n return;\n }\n // Destroy the pooled LISTEN client — UNLISTEN+release can hang while the\n // connection sits in ClientRead waiting for notifications.\n try {\n client.release(true);\n } catch {\n try {\n (client as { end?: () => Promise<void> }).end?.();\n } catch {\n // ignore\n }\n }\n }\n}\n\n/** Issue NOTIFY inside an already-open transaction client. */\nexport async function notifyMemoryChange(\n client: { query: (sql: string, params?: unknown[]) => Promise<unknown> },\n event: MemoryChangeEvent,\n): Promise<void> {\n const payload = serializeNotifyPayload(event);\n await client.query(`SELECT pg_notify($1, $2)`, [\n WOLBARG_NOTIFY_CHANNEL,\n payload,\n ]);\n}\n\n/** Helper to create a listener from a pg Pool. */\nexport function createPostgresListenerFromPool(\n pool: Pool,\n onError?: (error: unknown) => void,\n): PostgresSubscribeListener {\n return new PostgresSubscribeListener({\n connect: () => pool.connect(),\n onError,\n });\n}\n","/**\n * PostgreSQL storage provider with optional pgvector support.\n * Requires the optional `pg` peer dependency.\n *\n * Performance design:\n * - Per-operation pool queries (no global write lock / shared tx client race)\n * - AsyncLocalStorage for nested transactions\n * - Single-statement CTE inserts (no BEGIN/COMMIT for one memory)\n * - Named prepared statements (parse/plan once per connection)\n * - Concurrent insert coalescing into unnest batches\n * - float4[] vector bind (no text \"[f,f,…]\" parse tax)\n * - Org/agent/archived denormalized on embeddings for filtered ANN\n * - Large bulk inserts via sequential fat unnest (COPY-class amortization)\n * - JSONB metadata filter pushdown\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { DatabaseError, InitializationError, ConfigurationError } from \"../../errors/index.js\";\nimport { matchesMetadata } from \"../../filters/match.js\";\nimport { compileMetadataFilterToPostgres } from \"../../filters/sql-compile-postgres.js\";\nimport { SCHEMA_VERSION, META_KEYS } from \"../../schema/index.js\";\nimport {\n deserializeMetadata,\n serializeMetadata,\n} from \"../../utils/index.js\";\nimport { cosineDistance } from \"../../utils/vector.js\";\nimport { hashMemoryContent } from \"../../memory/dedupe.js\";\nimport { notifyMemoryChange } from \"../../subscribe/postgres-listener.js\";\nimport type { MemoryChangeEvent } from \"../../subscribe/types.js\";\nimport type {\n HistoryRow,\n InsertMemoryInput,\n MemoryRow,\n RepositoryFilter,\n StorageProvider,\n UpdateMemoryInput,\n VectorSearchHit,\n} from \"../types.js\";\ntype PgQueryResult = {\n rows: Record<string, unknown>[];\n rowCount: number | null;\n};\n\ntype PgQueryable = {\n query: (\n textOrConfig: string | { name?: string; text: string; values?: unknown[] },\n params?: unknown[],\n ) => Promise<PgQueryResult>;\n};\n\ntype PgPoolClient = PgQueryable & {\n release: () => void;\n query: PgQueryable[\"query\"];\n};\n\ntype PgPool = PgQueryable & {\n end: () => Promise<void>;\n connect: () => Promise<PgPoolClient>;\n on?: (event: \"connect\", listener: (client: PgPoolClient) => void) => void;\n totalCount?: number;\n idleCount?: number;\n waitingCount?: number;\n};\n\nexport interface PostgresProviderOptions {\n connectionString: string;\n maxPoolSize?: number;\n /**\n * When false, uses `synchronous_commit=off` on every pool connection.\n * Much higher write throughput; recent commits can be lost on OS crash.\n * Default true (full durability).\n */\n durableWrites?: boolean;\n}\n\nconst txStore = new AsyncLocalStorage<PgPoolClient>();\n\n/** Statement names for per-connection prepared-statement cache. */\nconst STMT = {\n insertOne: \"Wolbarg_insert_one_v5\",\n insertBatch: \"Wolbarg_insert_batch_v5\",\n} as const;\n\n/**\n * Bind embedding as float4[] for `$n::float4[]::vector` (single-row path).\n * Avoids multi-KB text literals and Postgres vector text parse.\n */\nfunction toFloat4Param(embedding: Float32Array): number[] {\n const out = new Array<number>(embedding.length);\n for (let i = 0; i < embedding.length; i += 1) {\n out[i] = embedding[i]!;\n }\n return out;\n}\n\n/**\n * pgvector text literal for batch unnest.\n * node-pg cannot reliably bind float4[][] (collapses to float4[] → cast errors).\n */\nfunction toVectorLiteral(embedding: Float32Array): string {\n const n = embedding.length;\n let s = \"[\";\n for (let i = 0; i < n; i += 1) {\n if (i !== 0) s += \",\";\n s += embedding[i];\n }\n return s + \"]\";\n}\n\n/** Append/override a libpq query param (e.g. options=-c synchronous_commit=off). */\nfunction appendConnectionOption(\n connectionString: string,\n key: string,\n value: string,\n): string {\n try {\n const url = new URL(connectionString);\n if (key === \"options\") {\n const existing = url.searchParams.get(\"options\");\n url.searchParams.set(\n \"options\",\n existing ? `${existing} ${value}`.trim() : value,\n );\n } else {\n url.searchParams.set(key, value);\n }\n return url.toString();\n } catch {\n const sep = connectionString.includes(\"?\") ? \"&\" : \"?\";\n return `${connectionString}${sep}${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n }\n}\n\n/** Session GUCs that must be set before the pool hands out a client. */\nfunction withPoolStartupOptions(\n connectionString: string,\n durableWrites: boolean,\n): string {\n const flags = [\n \"-c jit=off\",\n // Bake HNSW search GUCs into the connection — avoids per-recall set_config.\n \"-c hnsw.ef_search=40\",\n \"-c hnsw.iterative_scan=relaxed_order\",\n ];\n if (!durableWrites) {\n flags.unshift(\"-c synchronous_commit=off\");\n }\n return appendConnectionOption(connectionString, \"options\", flags.join(\" \"));\n}\n\nconst INSERT_ONE_SQL = `WITH mem AS (\n INSERT INTO memories (\n id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n ) VALUES ($1,$2,$3,$4,$5::jsonb,false,NULL,$9,$6,$7)\n RETURNING id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, content_hash, created_at, updated_at\n ),\n hist AS (\n INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n SELECT gen_random_uuid()::text, id, 'created', NULL, $6 FROM mem\n ),\n mapped AS (\n INSERT INTO memory_row_map (memory_id)\n SELECT id FROM mem\n ON CONFLICT (memory_id) DO NOTHING\n ),\n emb AS (\n INSERT INTO memory_embeddings (memory_id, embedding, organization, agent, archived)\n SELECT id, $8::float4[]::vector, $2, $3, false FROM mem\n )\n SELECT * FROM mem`;\n\n/** Batch: RETURNING id only — caller rebuilds MemoryRow from inputs. */\nconst INSERT_BATCH_SQL = `WITH mem AS (\n INSERT INTO memories (\n id, organization, agent, content_text, metadata_json,\n archived, compressed_into, created_at, updated_at\n )\n SELECT id, org, agent, txt, meta::jsonb, false, NULL, c, u\n FROM unnest(\n $1::text[], $2::text[], $3::text[], $4::text[],\n $5::text[], $6::timestamptz[], $7::timestamptz[]\n ) AS t(id, org, agent, txt, meta, c, u)\n RETURNING id\n ),\n hist AS (\n INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n SELECT gen_random_uuid()::text, id, 'created', NULL, c\n FROM unnest($1::text[], $6::timestamptz[]) AS t(id, c)\n ),\n mapped AS (\n INSERT INTO memory_row_map (memory_id)\n SELECT unnest($1::text[])\n ON CONFLICT (memory_id) DO NOTHING\n ),\n emb AS (\n INSERT INTO memory_embeddings (memory_id, embedding, organization, agent, archived)\n SELECT id, emb::vector, org, agent, false\n FROM unnest($1::text[], $8::text[], $2::text[], $3::text[]) AS t(id, emb, org, agent)\n )\n SELECT id FROM mem`;\n\n/** Cap per flush so multiple batches pipeline across the pool. */\nconst COALESCE_FLUSH_MAX = 128;\nconst COALESCE_FLUSH_THRESHOLD = 48;\nconst COALESCE_MAX_PARALLEL = 24;\nconst BULK_CHUNK_NO_HNSW = 500;\nconst BULK_CHUNK_WITH_HNSW = 250;\nconst COPY_BATCH_THRESHOLD = 48;\n\nexport class PostgresStorageProvider implements StorageProvider {\n readonly name = \"postgres\";\n\n private readonly connectionString: string;\n private readonly maxPoolSize: number;\n private readonly durableWrites: boolean;\n private pool: PgPool | null = null;\n private vectorDimensions: number | null = null;\n private hasPgvector = false;\n private hnswIndexEnsured = false;\n private hnswCreateFailures = 0;\n /** Dedup concurrent CREATE INDEX so mixed read/write storms don't pile up. */\n private hnswBuildInFlight: Promise<void> | null = null;\n private hasContentTsv = false;\n /** Coalesce concurrent insertMemory callers into one unnest batch. */\n private insertQueue: Array<{\n input: InsertMemoryInput;\n resolve: (row: MemoryRow) => void;\n reject: (err: unknown) => void;\n }> = [];\n private insertFlushScheduled = false;\n private insertFlushTimer: ReturnType<typeof setTimeout> | null = null;\n private insertFlushInFlight = 0;\n\n constructor(options: PostgresProviderOptions) {\n this.maxPoolSize = options.maxPoolSize ?? 64;\n this.durableWrites = options.durableWrites !== false;\n // Bake GUCs into the URL — never SET on 'connect' (races with pool checkout).\n this.connectionString = withPoolStartupOptions(\n options.connectionString,\n this.durableWrites,\n );\n }\n\n getPoolStats(): {\n max: number;\n total: number;\n idle: number;\n waiting: number;\n } {\n const pool = this.pool;\n return {\n max: this.maxPoolSize,\n total: pool?.totalCount ?? 0,\n idle: pool?.idleCount ?? 0,\n waiting: pool?.waitingCount ?? 0,\n };\n }\n\n /** Dedicated pool accessor for LISTEN/NOTIFY subscribe backend. */\n getPool(): PgPool | null {\n return this.pool;\n }\n\n async open(): Promise<void> {\n let PoolCtor: new (config: Record<string, unknown>) => PgPool;\n try {\n const mod = await import(\"pg\");\n PoolCtor =\n (mod as { Pool: typeof PoolCtor }).Pool ??\n (mod as { default: { Pool: typeof PoolCtor } }).default.Pool;\n } catch {\n throw new ConfigurationError(\n 'PostgreSQL storage requires the optional \"pg\" package. Install it with: npm install pg',\n );\n }\n\n try {\n this.pool = new PoolCtor({\n connectionString: this.connectionString,\n max: this.maxPoolSize,\n idleTimeoutMillis: 30_000,\n connectionTimeoutMillis: 10_000,\n allowExitOnIdle: true,\n keepAlive: true,\n });\n // Do NOT query on 'connect' — node-pg may check the client out concurrently\n // (overlapping query warning + multi-second stalls under concurrency).\n await this.runMigrations();\n this.hasPgvector = await this.tryEnablePgvector();\n const dims = await this.getEmbeddingDimensions();\n if (dims !== null) {\n this.vectorDimensions = dims;\n const schemaKey = `${this.connectionString}::${dims}`;\n if (!PostgresStorageProvider.vectorSchemaReady.has(schemaKey)) {\n await this.ensureVectorTables(dims);\n PostgresStorageProvider.vectorSchemaReady.add(schemaKey);\n } else {\n this.hasPgvector = true;\n // HNSW may have been dropped by a prior bulk load — check cheaply.\n const idx = await this.query(\n `SELECT 1 FROM pg_indexes WHERE indexname = 'idx_memory_embeddings_hnsw' LIMIT 1`,\n ).catch(() => ({ rows: [] as Record<string, unknown>[] }));\n this.hnswIndexEnsured = idx.rows.length > 0;\n }\n }\n } catch (error) {\n await this.pool?.end().catch(() => undefined);\n this.pool = null;\n if (error instanceof ConfigurationError || error instanceof InitializationError) {\n throw error;\n }\n throw new InitializationError(\n `Failed to open PostgreSQL database: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async close(): Promise<void> {\n if (this.insertFlushTimer) {\n clearTimeout(this.insertFlushTimer);\n this.insertFlushTimer = null;\n }\n // Drain coalesced inserts before tearing down the pool.\n const deadline = Date.now() + 5_000;\n while (\n (this.insertQueue.length > 0 || this.insertFlushInFlight > 0) &&\n Date.now() < deadline\n ) {\n if (this.insertQueue.length > 0) {\n await this.flushInsertQueue();\n } else {\n await new Promise<void>((r) => setTimeout(r, 5));\n }\n }\n if (!this.pool) {\n return;\n }\n await this.pool.end();\n this.pool = null;\n }\n\n /**\n * Run a search query. HNSW GUCs are baked into pool startup options —\n * no per-recall connect()+set_config round-trip.\n */\n private async withSearchSession<T>(\n fn: (client: PgQueryable) => Promise<T>,\n ): Promise<T> {\n return fn(this.requirePool());\n }\n\n /**\n * Drop HNSW so bulk / concurrent inserts avoid graph maintenance.\n * Next recall rebuilds the index (lazy).\n */\n async dropVectorIndex(): Promise<void> {\n await this.query(`DROP INDEX IF EXISTS idx_memory_embeddings_hnsw`).catch(\n () => undefined,\n );\n this.hnswIndexEnsured = false;\n }\n\n /** Force HNSW build now (e.g. before timed recall benches). */\n async ensureVectorIndex(): Promise<void> {\n await this.ensureHnswIndex();\n }\n\n async ensureVectorSchema(dimensions: number): Promise<void> {\n const existing = await this.getEmbeddingDimensions();\n if (existing !== null && existing !== dimensions) {\n throw new InitializationError(\n `Embedding dimensions mismatch: database is configured for ${existing}-d vectors, but the embedding model returned ${dimensions}-d vectors.`,\n );\n }\n this.hasPgvector = await this.tryEnablePgvector();\n await this.ensureVectorTables(dimensions);\n if (existing === null) {\n await this.setEmbeddingDimensions(dimensions);\n }\n this.vectorDimensions = dimensions;\n }\n\n private async ensureVectorTables(dimensions: number): Promise<void> {\n if (this.hasPgvector) {\n await this.query(`\n CREATE TABLE IF NOT EXISTS memory_embeddings (\n memory_id TEXT PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,\n embedding vector(${dimensions})\n )\n `);\n // Denormalize tenant filters onto embeddings so ANN can pre-filter.\n await this.query(\n `ALTER TABLE memory_embeddings ADD COLUMN IF NOT EXISTS organization TEXT`,\n ).catch(() => undefined);\n await this.query(\n `ALTER TABLE memory_embeddings ADD COLUMN IF NOT EXISTS agent TEXT`,\n ).catch(() => undefined);\n await this.query(\n `ALTER TABLE memory_embeddings ADD COLUMN IF NOT EXISTS archived BOOLEAN NOT NULL DEFAULT false`,\n ).catch(() => undefined);\n // One-shot denormalization — skip when columns are already populated.\n const needsBackfill = await this.query(\n `SELECT 1 FROM memory_embeddings WHERE organization IS NULL LIMIT 1`,\n ).catch(() => ({ rows: [] as Record<string, unknown>[] }));\n if (needsBackfill.rows.length > 0) {\n await this.query(`\n UPDATE memory_embeddings e\n SET organization = m.organization,\n agent = m.agent,\n archived = m.archived\n FROM memories m\n WHERE m.id = e.memory_id\n AND e.organization IS NULL\n `).catch(() => undefined);\n }\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memory_embeddings_org_active\n ON memory_embeddings (organization)\n WHERE archived = false`,\n ).catch(() => undefined);\n // Do not create HNSW here — defer until first search so bulk inserts stay fast.\n const idx = await this.query(\n `SELECT 1 FROM pg_indexes WHERE indexname = 'idx_memory_embeddings_hnsw' LIMIT 1`,\n );\n this.hnswIndexEnsured = idx.rows.length > 0;\n } else {\n await this.query(`\n CREATE TABLE IF NOT EXISTS memory_embeddings_blob (\n memory_id TEXT PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,\n embedding BYTEA NOT NULL\n )\n `);\n }\n }\n\n /** Cross-process subscribe: NOTIFY after a committed write. */\n async notifyChange(event: MemoryChangeEvent): Promise<void> {\n await notifyMemoryChange(this.requirePool(), event);\n }\n /**\n * Soft reset for a single organization. Drops HNSW only when the embeddings\n * table is empty so other corpora on a shared bench DB stay intact.\n */\n async resetOrganization(organization: string): Promise<void> {\n await this.query(`DELETE FROM memories WHERE organization = $1`, [\n organization,\n ]);\n const count = await this.query(\n `SELECT COUNT(*)::int AS n FROM memory_embeddings`,\n );\n if (Number(count.rows[0]?.n ?? 0) === 0) {\n await this.query(\n `DROP INDEX IF EXISTS idx_memory_embeddings_hnsw`,\n ).catch(() => undefined);\n this.hnswIndexEnsured = false;\n }\n }\n\n /**\n * Wipe all Wolbarg tables (explicit opt-in). Prefer {@link resetOrganization}.\n */\n async wipeAllData(): Promise<void> {\n await this.query(`TRUNCATE TABLE memories CASCADE`).catch(() => undefined);\n await this.query(\n `DROP INDEX IF EXISTS idx_memory_embeddings_hnsw`,\n ).catch(() => undefined);\n this.hnswIndexEnsured = false;\n }\n\n /** Build HNSW once before the first KNN query (bulk-friendly inserts). */\n private async ensureHnswIndex(): Promise<void> {\n if (!this.hasPgvector || this.hnswIndexEnsured) {\n return;\n }\n if (this.hnswBuildInFlight) {\n await this.hnswBuildInFlight;\n return;\n }\n this.hnswBuildInFlight = this.buildHnswIndex();\n try {\n await this.hnswBuildInFlight;\n } finally {\n this.hnswBuildInFlight = null;\n }\n }\n\n private async buildHnswIndex(): Promise<void> {\n if (this.hnswIndexEnsured) {\n return;\n }\n try {\n // CONCURRENTLY avoids blocking writers during mixed read/write storms.\n // IF NOT EXISTS is safe when another backend already finished the build.\n await this.query(`\n CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_memory_embeddings_hnsw\n ON memory_embeddings USING hnsw (embedding vector_cosine_ops)\n WITH (m = 16, ef_construction = 32)\n `);\n this.hnswIndexEnsured = true;\n this.hnswCreateFailures = 0;\n } catch (error) {\n // Another session may have created it; treat as success when present.\n const idx = await this.query(\n `SELECT 1 FROM pg_indexes WHERE indexname = 'idx_memory_embeddings_hnsw' LIMIT 1`,\n ).catch(() => ({ rows: [] as Record<string, unknown>[] }));\n if (idx.rows.length > 0) {\n this.hnswIndexEnsured = true;\n this.hnswCreateFailures = 0;\n return;\n }\n this.hnswCreateFailures += 1;\n if (this.hnswCreateFailures >= 3) {\n throw new DatabaseError(\n `Failed to create HNSW index after ${this.hnswCreateFailures} attempts: ${this.describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n // Soft-fail: ANN can still run as a sequential scan this round.\n }\n }\n\n async getEmbeddingDimensions(): Promise<number | null> {\n const result = await this.query(\n `SELECT value FROM Wolbarg_meta WHERE key = $1`,\n [META_KEYS.embeddingDimensions],\n );\n const value = result.rows[0]?.value;\n if (typeof value !== \"string\") {\n return null;\n }\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n async setEmbeddingDimensions(dimensions: number): Promise<void> {\n await this.query(\n `INSERT INTO Wolbarg_meta (key, value) VALUES ($1, $2)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,\n [META_KEYS.embeddingDimensions, String(dimensions)],\n );\n this.vectorDimensions = dimensions;\n }\n\n async insertMemory(input: InsertMemoryInput): Promise<MemoryRow> {\n this.requireVectorReady();\n\n // Always coalesce briefly so concurrent remember() calls share one unnest.\n // Do NOT hold a global inFlight mutex — that serializes Postgres like SQLite.\n return new Promise<MemoryRow>((resolve, reject) => {\n this.insertQueue.push({ input, resolve, reject });\n if (this.insertQueue.length >= COALESCE_FLUSH_THRESHOLD) {\n this.clearInsertFlushTimer();\n void this.flushInsertQueue();\n return;\n }\n this.scheduleInsertFlush();\n });\n }\n\n private clearInsertFlushTimer(): void {\n if (this.insertFlushTimer) {\n clearImmediate(this.insertFlushTimer as unknown as NodeJS.Immediate);\n clearTimeout(this.insertFlushTimer);\n this.insertFlushTimer = null;\n }\n this.insertFlushScheduled = false;\n }\n\n /** Flush coalesced inserts after a turn so concurrent remember() can join. */\n private scheduleInsertFlush(): void {\n if (this.insertFlushScheduled) {\n return;\n }\n this.insertFlushScheduled = true;\n // setImmediate > queueMicrotask: concurrent awaiters after embed can join.\n this.insertFlushTimer = setImmediate(() => {\n this.insertFlushTimer = null;\n this.insertFlushScheduled = false;\n void this.flushInsertQueue();\n }) as unknown as ReturnType<typeof setTimeout>;\n }\n\n private async flushInsertQueue(): Promise<void> {\n if (this.insertFlushInFlight >= COALESCE_MAX_PARALLEL) {\n this.scheduleInsertFlush();\n return;\n }\n // Cap flush size so remaining queue can pipeline on other pool connections.\n const batch = this.insertQueue.splice(0, COALESCE_FLUSH_MAX);\n this.clearInsertFlushTimer();\n if (batch.length === 0) {\n return;\n }\n this.insertFlushInFlight += 1;\n // Kick another flush immediately if more work remains (parallel drains).\n if (\n this.insertQueue.length > 0 &&\n this.insertFlushInFlight < COALESCE_MAX_PARALLEL\n ) {\n void this.flushInsertQueue();\n }\n try {\n if (batch.length === 1) {\n const row = await this.insertMemoryImmediate(batch[0]!.input);\n batch[0]!.resolve(row);\n return;\n }\n const rows = await this.insertMemoriesBatch(batch.map((b) => b.input));\n for (let i = 0; i < batch.length; i += 1) {\n batch[i]!.resolve(rows[i]!);\n }\n } catch (error) {\n for (const item of batch) {\n item.reject(error);\n }\n } finally {\n this.insertFlushInFlight -= 1;\n if (this.insertQueue.length > 0) {\n void this.flushInsertQueue();\n }\n }\n }\n\n /** Single-row insert without coalescing (used by flush + batch of 1). */\n private async insertMemoryImmediate(input: InsertMemoryInput): Promise<MemoryRow> {\n if (this.hasPgvector) {\n const contentHash =\n input.contentHash !== undefined\n ? input.contentHash\n : hashMemoryContent(input.contentText);\n const inserted = await this.queryNamed(STMT.insertOne, INSERT_ONE_SQL, [\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n serializeMetadata(input.metadata),\n input.createdAt,\n input.updatedAt,\n toFloat4Param(input.embedding),\n contentHash,\n ]);\n return this.mapRow(inserted.rows[0]!);\n }\n return this.insertOneBlob(input);\n }\n\n async insertMemoriesBatch(inputs: InsertMemoryInput[]): Promise<MemoryRow[]> {\n if (inputs.length === 0) {\n return [];\n }\n this.requireVectorReady();\n\n if (inputs.length === 1 && this.hasPgvector) {\n return [await this.insertMemoryImmediate(inputs[0]!)];\n }\n\n if (this.hasPgvector) {\n // Large batches: parallel unnest chunks use the pool as a pipeline.\n if (inputs.length >= COPY_BATCH_THRESHOLD) {\n return this.insertBatchChunked(inputs);\n }\n return this.insertBatchPgvector(inputs);\n }\n\n return this.withTransaction(async () => {\n const out: MemoryRow[] = [];\n for (const input of inputs) {\n out.push(await this.insertOneBlob(input));\n }\n return out;\n });\n }\n\n private async insertBatchPgvector(\n inputs: InsertMemoryInput[],\n ): Promise<MemoryRow[]> {\n const ids = new Array<string>(inputs.length);\n const orgs = new Array<string>(inputs.length);\n const agents = new Array<string>(inputs.length);\n const texts = new Array<string>(inputs.length);\n const metas = new Array<string>(inputs.length);\n const created = new Array<string>(inputs.length);\n const updated = new Array<string>(inputs.length);\n const vectors = new Array<string>(inputs.length);\n\n for (let i = 0; i < inputs.length; i += 1) {\n const input = inputs[i]!;\n ids[i] = input.id;\n orgs[i] = input.organization;\n agents[i] = input.agent;\n texts[i] = input.contentText;\n metas[i] = serializeMetadata(input.metadata);\n created[i] = input.createdAt;\n updated[i] = input.updatedAt;\n vectors[i] = toVectorLiteral(input.embedding);\n }\n\n await this.queryNamed(STMT.insertBatch, INSERT_BATCH_SQL, [\n ids,\n orgs,\n agents,\n texts,\n metas,\n created,\n updated,\n vectors,\n ]);\n\n // RETURNING id only — rebuild rows from inputs (avoids shipping JSONB back).\n return inputs.map((input, i) => ({\n id: ids[i]!,\n organization: orgs[i]!,\n agent: agents[i]!,\n content_text: texts[i]!,\n metadata_json: metas[i]!,\n archived: 0,\n compressed_into: null,\n content_hash:\n input.contentHash !== undefined\n ? input.contentHash\n : null,\n created_at: created[i]!,\n updated_at: updated[i]!,\n }));\n }\n\n /** Parallel unnest when HNSW is absent; sequential when index must stay consistent. */\n private async insertBatchChunked(\n inputs: InsertMemoryInput[],\n ): Promise<MemoryRow[]> {\n const chunkSize = this.hnswIndexEnsured\n ? BULK_CHUNK_WITH_HNSW\n : BULK_CHUNK_NO_HNSW;\n if (inputs.length <= chunkSize) {\n return this.insertBatchPgvector(inputs);\n }\n const chunks: InsertMemoryInput[][] = [];\n for (let i = 0; i < inputs.length; i += chunkSize) {\n chunks.push(inputs.slice(i, i + chunkSize));\n }\n // No HNSW → pipeline chunks across the pool. With HNSW → sequential (lock-friendly).\n if (!this.hnswIndexEnsured) {\n const parts = await Promise.all(\n chunks.map((chunk) => this.insertBatchPgvector(chunk)),\n );\n const out: MemoryRow[] = new Array(inputs.length);\n let offset = 0;\n for (const part of parts) {\n for (let j = 0; j < part.length; j += 1) {\n out[offset + j] = part[j]!;\n }\n offset += part.length;\n }\n return out;\n }\n const out: MemoryRow[] = new Array(inputs.length);\n let offset = 0;\n for (const chunk of chunks) {\n const part = await this.insertBatchPgvector(chunk);\n for (let j = 0; j < part.length; j += 1) {\n out[offset + j] = part[j]!;\n }\n offset += part.length;\n }\n return out;\n }\n\n private async insertOneBlob(input: InsertMemoryInput): Promise<MemoryRow> {\n const buf = Buffer.from(\n input.embedding.buffer,\n input.embedding.byteOffset,\n input.embedding.byteLength,\n );\n const contentHash =\n input.contentHash !== undefined\n ? input.contentHash\n : hashMemoryContent(input.contentText);\n const inserted = await this.query(\n `INSERT INTO memories (\n id, organization, agent, content_text, metadata_json,\n archived, compressed_into, content_hash, created_at, updated_at\n ) VALUES ($1,$2,$3,$4,$5::jsonb,false,NULL,$8,$6,$7)\n RETURNING id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, content_hash, created_at, updated_at`,\n [\n input.id,\n input.organization,\n input.agent,\n input.contentText,\n serializeMetadata(input.metadata),\n input.createdAt,\n input.updatedAt,\n contentHash,\n ],\n );\n const row = this.mapRow(inserted.rows[0]!);\n await this.query(\n `WITH mapped AS (\n INSERT INTO memory_row_map (memory_id) VALUES ($1)\n ON CONFLICT (memory_id) DO NOTHING\n )\n INSERT INTO memory_embeddings_blob (memory_id, embedding)\n VALUES ($1, $2)\n ON CONFLICT (memory_id) DO UPDATE SET embedding = EXCLUDED.embedding`,\n [input.id, buf],\n );\n await this.query(\n `INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n VALUES ($1,$2,'created',NULL,$3)`,\n [crypto.randomUUID(), input.id, input.createdAt],\n );\n return row;\n }\n\n async updateMemory(input: UpdateMemoryInput): Promise<MemoryRow | null> {\n const existing = await this.getMemoryById(input.id, input.organization);\n if (!existing) {\n return null;\n }\n const contentHash =\n input.contentHash !== undefined\n ? input.contentHash\n : input.contentText !== undefined\n ? hashMemoryContent(input.contentText)\n : (existing.content_hash ?? null);\n await this.query(\n `UPDATE memories SET\n content_text = COALESCE($1, content_text),\n metadata_json = COALESCE($2::jsonb, metadata_json),\n content_hash = COALESCE($3, content_hash),\n updated_at = $4\n WHERE id = $5 AND organization = $6`,\n [\n input.contentText ?? null,\n input.metadata !== undefined ? serializeMetadata(input.metadata) : null,\n contentHash,\n input.updatedAt,\n input.id,\n input.organization,\n ],\n );\n if (input.embedding) {\n await this.deleteEmbedding(input.id);\n await this.insertEmbedding(input.id, input.embedding);\n }\n await this.query(\n `INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n VALUES ($1,$2,'updated',NULL,$3)`,\n [crypto.randomUUID(), input.id, input.updatedAt],\n );\n return this.getMemoryById(input.id, input.organization);\n }\n\n async findActiveByContentHash(\n organization: string,\n agent: string,\n contentHash: string,\n ): Promise<MemoryRow | null> {\n const result = await this.query(\n `SELECT id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, content_hash, created_at, updated_at\n FROM memories\n WHERE organization = $1 AND agent = $2 AND content_hash = $3 AND archived = false\n LIMIT 1`,\n [organization, agent, contentHash],\n );\n const row = result.rows[0];\n return row ? this.mapRow(row) : null;\n }\n\n async getMemoryById(id: string, organization: string): Promise<MemoryRow | null> {\n const result = await this.query(\n `SELECT id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, content_hash, created_at, updated_at\n FROM memories WHERE id = $1 AND organization = $2`,\n [id, organization],\n );\n const row = result.rows[0];\n return row ? this.mapRow(row) : null;\n }\n\n async getMemoryByRowid(rowid: number, organization: string): Promise<MemoryRow | null> {\n const result = await this.query(\n `SELECT m.id, m.organization, m.agent, m.content_text, m.metadata_json,\n m.archived::int AS archived, m.compressed_into, m.created_at, m.updated_at,\n e.row_num AS rowid\n FROM memories m\n JOIN memory_row_map e ON e.memory_id = m.id\n WHERE e.row_num = $1 AND m.organization = $2`,\n [rowid, organization],\n );\n const row = result.rows[0];\n return row ? this.mapRow(row) : null;\n }\n\n async getMemoriesByRowids(\n rowids: number[],\n organization: string,\n ): Promise<Map<number, MemoryRow>> {\n const out = new Map<number, MemoryRow>();\n if (rowids.length === 0) {\n return out;\n }\n const result = await this.query(\n `SELECT m.id, m.organization, m.agent, m.content_text, m.metadata_json,\n m.archived::int AS archived, m.compressed_into, m.created_at, m.updated_at,\n e.row_num AS rowid\n FROM memories m\n JOIN memory_row_map e ON e.memory_id = m.id\n WHERE m.organization = $1 AND e.row_num = ANY($2::bigint[])`,\n [organization, rowids],\n );\n for (const row of result.rows) {\n const mapped = this.mapRow(row);\n if (mapped.rowid !== undefined) {\n out.set(mapped.rowid, mapped);\n }\n }\n return out;\n }\n\n async listMemories(filter: RepositoryFilter, limit?: number): Promise<MemoryRow[]> {\n const want =\n limit !== undefined ? limit : filter.metadata ? 10_000 : undefined;\n const compiled = filter.metadata\n ? compileMetadataFilterToPostgres(filter.metadata, 2)\n : null;\n\n if (compiled) {\n const clauses = [`organization = $1`, `(${compiled.expression})`];\n const params: unknown[] = [filter.organization, ...compiled.params];\n let idx = params.length + 1;\n if (filter.agent) {\n clauses.push(`agent = $${idx++}`);\n params.push(filter.agent);\n }\n if (!filter.includeArchived) {\n clauses.push(`archived = false`);\n }\n let sql = `\n SELECT id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, created_at, updated_at\n FROM memories\n WHERE ${clauses.join(\" AND \")}\n ORDER BY created_at ASC\n `;\n if (want !== undefined) {\n sql += ` LIMIT $${idx}`;\n params.push(want);\n }\n const result = await this.query(sql, params);\n return result.rows.map((r) => this.mapRow(r));\n }\n\n const clauses = [`organization = $1`];\n const params: unknown[] = [filter.organization];\n let idx = 2;\n if (filter.agent) {\n clauses.push(`agent = $${idx++}`);\n params.push(filter.agent);\n }\n if (!filter.includeArchived) {\n clauses.push(`archived = false`);\n }\n let sql = `\n SELECT id, organization, agent, content_text, metadata_json,\n archived::int AS archived, compressed_into, created_at, updated_at\n FROM memories\n WHERE ${clauses.join(\" AND \")}\n ORDER BY created_at ASC\n `;\n if (limit !== undefined && !filter.metadata) {\n sql += ` LIMIT $${idx}`;\n params.push(limit);\n }\n const result = await this.query(sql, params);\n let rows = result.rows.map((r) => this.mapRow(r));\n if (filter.metadata) {\n rows = rows.filter((row) =>\n matchesMetadata(deserializeMetadata(row.metadata_json), filter.metadata!),\n );\n if (limit !== undefined) {\n rows = rows.slice(0, limit);\n }\n }\n return rows;\n }\n\n async searchByMetadata(\n filter: RepositoryFilter,\n limit?: number,\n ): Promise<MemoryRow[]> {\n return this.listMemories(filter, limit);\n }\n\n async searchKeyword(\n query: string,\n organization: string,\n topK: number,\n ): Promise<Array<{ memoryId: string; score: number }>> {\n const trimmed = query.trim();\n if (!trimmed || topK <= 0) {\n return [];\n }\n try {\n const sql = this.hasContentTsv\n ? `SELECT id AS memory_id,\n ts_rank(content_tsv, plainto_tsquery('english', $1)) AS rank\n FROM memories\n WHERE organization = $2\n AND archived = false\n AND content_tsv @@ plainto_tsquery('english', $1)\n ORDER BY rank DESC\n LIMIT $3`\n : `SELECT id AS memory_id,\n ts_rank(to_tsvector('english', content_text), plainto_tsquery('english', $1)) AS rank\n FROM memories\n WHERE organization = $2\n AND archived = false\n AND to_tsvector('english', content_text) @@ plainto_tsquery('english', $1)\n ORDER BY rank DESC\n LIMIT $3`;\n const result = await this.query(sql, [trimmed, organization, topK]);\n return result.rows.map((row) => ({\n memoryId: String(row.memory_id),\n score: Number(row.rank),\n }));\n } catch {\n return [];\n }\n }\n\n async searchVectors(\n embedding: Float32Array,\n topK: number,\n ): Promise<VectorSearchHit[]> {\n this.requireVectorReady();\n if (this.hasPgvector) {\n await this.ensureHnswIndex();\n return this.withSearchSession(async (client) => {\n const result = await client.query(\n `SELECT r.row_num AS memory_rowid, ann.distance\n FROM (\n SELECT e.memory_id, (e.embedding <=> $1::float4[]::vector) AS distance\n FROM memory_embeddings e\n WHERE e.archived = false\n ORDER BY e.embedding <=> $1::float4[]::vector\n LIMIT $2\n ) ann\n JOIN memory_row_map r ON r.memory_id = ann.memory_id\n ORDER BY ann.distance`,\n [toFloat4Param(embedding), topK],\n );\n const hits: VectorSearchHit[] = new Array(result.rows.length);\n for (let i = 0; i < result.rows.length; i += 1) {\n const row = result.rows[i]!;\n hits[i] = {\n memoryRowid: Number(row.memory_rowid),\n distance: Number(row.distance),\n };\n }\n return hits;\n });\n }\n\n const result = await this.query(\n `SELECT r.row_num AS memory_rowid, e.embedding\n FROM memory_embeddings_blob e\n JOIN memory_row_map r ON r.memory_id = e.memory_id`,\n );\n const scored = result.rows.map((row) => {\n const buf = row.embedding as Buffer;\n const vec = new Float32Array(\n buf.buffer,\n buf.byteOffset,\n buf.byteLength / Float32Array.BYTES_PER_ELEMENT,\n );\n return {\n memoryRowid: Number(row.memory_rowid),\n distance: cosineDistance(embedding, vec),\n };\n });\n scored.sort((a, b) => a.distance - b.distance);\n return scored.slice(0, topK);\n }\n\n async searchVectorsWithMemories(\n embedding: Float32Array,\n topK: number,\n organization: string,\n options?: { agent?: string; includeArchived?: boolean },\n ): Promise<Array<{ row: MemoryRow; distance: number }>> {\n this.requireVectorReady();\n if (!this.hasPgvector) {\n // Scope to organization before scoring — shared DBs accumulate many orgs\n // across a suite; global topK + post-filter underfills tenant recalls.\n const clauses = [`m.organization = $1`];\n const params: unknown[] = [organization];\n if (options?.agent) {\n clauses.push(`m.agent = $2`);\n params.push(options.agent);\n }\n if (!options?.includeArchived) {\n clauses.push(`m.archived = false`);\n }\n const result = await this.query(\n `SELECT m.id, m.organization, m.agent, m.content_text, m.metadata_json,\n m.archived::int AS archived, m.compressed_into, m.created_at, m.updated_at,\n r.row_num AS rowid, e.embedding\n FROM memory_embeddings_blob e\n JOIN memory_row_map r ON r.memory_id = e.memory_id\n JOIN memories m ON m.id = e.memory_id\n WHERE ${clauses.join(\" AND \")}`,\n params,\n );\n const scored = result.rows.map((row) => {\n const buf = row.embedding as Buffer;\n const vec = new Float32Array(\n buf.buffer,\n buf.byteOffset,\n buf.byteLength / Float32Array.BYTES_PER_ELEMENT,\n );\n return {\n row: this.mapRow(row),\n distance: cosineDistance(embedding, vec),\n };\n });\n scored.sort((a, b) => a.distance - b.distance);\n return scored.slice(0, topK);\n }\n\n await this.ensureHnswIndex();\n const vec = toFloat4Param(embedding);\n\n const mapHits = (\n rows: Record<string, unknown>[],\n ): Array<{ row: MemoryRow; distance: number }> =>\n rows.map((row) => ({\n row: this.mapRow(row),\n distance: Number(row.distance),\n }));\n\n // Org-scoped exact KNN — avoids filtered-HNSW iterative_scan tax when the\n // shared DB holds many tenants (common in long-lived Postgres). For typical\n // agent memory corpora (<~50k/org) this is faster and more predictable.\n const agentClause = options?.agent ? \"AND e.agent = $4\" : \"\";\n const archivedClause = options?.includeArchived\n ? \"\"\n : \"AND e.archived = false\";\n const params = options?.agent\n ? [vec, topK, organization, options.agent]\n : [vec, topK, organization];\n\n const result = await this.query(\n `SELECT m.id, m.organization, m.agent, m.content_text, m.metadata_json,\n m.archived::int AS archived, m.compressed_into, m.created_at, m.updated_at,\n r.row_num AS rowid,\n (e.embedding <=> $1::float4[]::vector) AS distance\n FROM memory_embeddings e\n JOIN memory_row_map r ON r.memory_id = e.memory_id\n JOIN memories m ON m.id = e.memory_id\n WHERE e.organization = $3\n ${agentClause}\n ${archivedClause}\n AND m.organization = $3\n ORDER BY e.embedding <=> $1::float4[]::vector\n LIMIT $2`,\n params,\n );\n return mapHits(result.rows);\n }\n\n async archiveMemories(\n ids: string[],\n organization: string,\n compressedIntoId: string,\n archivedAt: string,\n ): Promise<string[]> {\n if (ids.length === 0) {\n return [];\n }\n const result = await this.query(\n `UPDATE memories\n SET archived = true, compressed_into = $1, updated_at = $2\n WHERE organization = $3 AND archived = false AND id = ANY($4::text[])\n RETURNING id`,\n [compressedIntoId, archivedAt, organization, ids],\n );\n const archived = result.rows.map((r) => String(r.id));\n if (archived.length === 0) {\n return [];\n }\n await this.query(\n `UPDATE memory_embeddings\n SET archived = true\n WHERE memory_id = ANY($1::text[])`,\n [archived],\n ).catch(() => undefined);\n const histIds: string[] = [];\n const memIds: string[] = [];\n const types: string[] = [];\n const related: string[] = [];\n const times: string[] = [];\n for (const id of archived) {\n histIds.push(crypto.randomUUID(), crypto.randomUUID());\n memIds.push(id, compressedIntoId);\n types.push(\"archived\", \"compressed\");\n related.push(compressedIntoId, id);\n times.push(archivedAt, archivedAt);\n }\n await this.query(\n `INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n SELECT * FROM unnest($1::text[], $2::text[], $3::text[], $4::text[], $5::timestamptz[])`,\n [histIds, memIds, types, related, times],\n );\n return archived;\n }\n\n async deleteMemoryById(id: string, organization: string): Promise<boolean> {\n const result = await this.query(\n `DELETE FROM memories WHERE id = $1 AND organization = $2`,\n [id, organization],\n );\n return (result.rowCount ?? 0) > 0;\n }\n\n async deleteMemoriesByFilter(filter: RepositoryFilter): Promise<number> {\n if (!filter.agent) {\n throw new DatabaseError(\"deleteMemoriesByFilter requires an agent filter\");\n }\n const result = await this.query(\n `DELETE FROM memories WHERE organization = $1 AND agent = $2`,\n [filter.organization, filter.agent],\n );\n return result.rowCount ?? 0;\n }\n\n async clearOrganization(organization: string): Promise<number> {\n const result = await this.query(\n `DELETE FROM memories WHERE organization = $1`,\n [organization],\n );\n return result.rowCount ?? 0;\n }\n\n async getHistory(memoryId: string): Promise<HistoryRow[]> {\n const result = await this.query(\n `SELECT id, memory_id, event_type, related_memory_id, created_at\n FROM memory_history WHERE memory_id = $1 ORDER BY created_at ASC`,\n [memoryId],\n );\n return result.rows.map((row) => ({\n id: String(row.id),\n memory_id: String(row.memory_id),\n event_type: row.event_type as HistoryRow[\"event_type\"],\n related_memory_id:\n row.related_memory_id === null ? null : String(row.related_memory_id),\n created_at: String(row.created_at),\n }));\n }\n\n async insertHistoryEvent(event: HistoryRow): Promise<void> {\n await this.query(\n `INSERT INTO memory_history (id, memory_id, event_type, related_memory_id, created_at)\n VALUES ($1,$2,$3,$4,$5)`,\n [\n event.id,\n event.memory_id,\n event.event_type,\n event.related_memory_id,\n event.created_at,\n ],\n );\n }\n\n async getStats(\n organization: string,\n ): Promise<{\n totalMemories: number;\n activeMemories: number;\n archivedMemories: number;\n totalAgents: number;\n }> {\n const result = await this.query(\n `SELECT\n COUNT(*)::int AS memories,\n COUNT(*) FILTER (WHERE archived = false)::int AS active,\n COUNT(*) FILTER (WHERE archived = true)::int AS archived,\n COUNT(DISTINCT agent) FILTER (WHERE archived = false)::int AS agents\n FROM memories WHERE organization = $1`,\n [organization],\n );\n return {\n totalMemories: Number(result.rows[0]?.memories ?? 0),\n activeMemories: Number(result.rows[0]?.active ?? 0),\n archivedMemories: Number(result.rows[0]?.archived ?? 0),\n totalAgents: Number(result.rows[0]?.agents ?? 0),\n };\n }\n\n async getDatabaseSizeBytes(): Promise<number> {\n const result = await this.query(\n `SELECT pg_database_size(current_database())::bigint AS size`,\n );\n return Number(result.rows[0]?.size ?? 0);\n }\n\n async withTransaction<T>(fn: () => T | Promise<T>): Promise<T> {\n const existing = txStore.getStore();\n if (existing) {\n return fn();\n }\n const client = await this.requirePool().connect();\n try {\n await client.query(\"BEGIN\");\n const result = await txStore.run(client, fn);\n await client.query(\"COMMIT\");\n return result;\n } catch (error) {\n await client.query(\"ROLLBACK\").catch(() => undefined);\n if (error instanceof DatabaseError || error instanceof InitializationError) {\n throw error;\n }\n throw new DatabaseError(`Transaction failed: ${this.describe(error)}`, {\n cause: error instanceof Error ? error : undefined,\n });\n } finally {\n client.release();\n }\n }\n\n private async runMigrations(): Promise<void> {\n // Split DDL: node-pg rejects multi-command prepared statements on some paths.\n await this.query(`\n CREATE TABLE IF NOT EXISTS Wolbarg_meta (\n key TEXT PRIMARY KEY NOT NULL,\n value TEXT NOT NULL\n )\n `);\n\n const versionRow = await this.query(\n `SELECT value FROM Wolbarg_meta WHERE key = $1`,\n [META_KEYS.schemaVersion],\n ).catch(() => ({ rows: [] as Record<string, unknown>[] }));\n const current =\n versionRow.rows[0]?.value !== undefined\n ? Number(versionRow.rows[0].value)\n : null;\n\n // Fast path: schema already current — skip DDL churn and hash backfill.\n if (current === SCHEMA_VERSION) {\n const tsvProbe = await this.query(\n `SELECT 1 FROM information_schema.columns\n WHERE table_name = 'memories' AND column_name = 'content_tsv'\n LIMIT 1`,\n ).catch(() => ({ rows: [] as Record<string, unknown>[] }));\n this.hasContentTsv = tsvProbe.rows.length > 0;\n return;\n }\n\n await this.query(`\n CREATE TABLE IF NOT EXISTS memories (\n id TEXT PRIMARY KEY NOT NULL,\n organization TEXT NOT NULL,\n agent TEXT NOT NULL,\n content_text TEXT NOT NULL,\n metadata_json JSONB NOT NULL DEFAULT '{}'::jsonb,\n archived BOOLEAN NOT NULL DEFAULT false,\n compressed_into TEXT NULL REFERENCES memories(id) ON DELETE SET NULL,\n created_at TIMESTAMPTZ NOT NULL,\n updated_at TIMESTAMPTZ NOT NULL\n )\n `);\n await this.query(`\n CREATE TABLE IF NOT EXISTS memory_history (\n id TEXT PRIMARY KEY NOT NULL,\n memory_id TEXT NOT NULL REFERENCES memories(id) ON DELETE CASCADE,\n event_type TEXT NOT NULL CHECK (event_type IN ('created', 'archived', 'compressed', 'updated')),\n related_memory_id TEXT NULL,\n created_at TIMESTAMPTZ NOT NULL\n )\n `);\n await this.query(`\n CREATE TABLE IF NOT EXISTS memory_row_map (\n memory_id TEXT PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,\n row_num BIGSERIAL UNIQUE NOT NULL\n )\n `);\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_org_agent ON memories(organization, agent)`,\n );\n // Drop redundant archived btree — partial active indexes cover the hot path.\n await this.query(\n `DROP INDEX IF EXISTS idx_memories_org_archived`,\n ).catch(() => undefined);\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_org_active_created\n ON memories(organization, created_at) WHERE archived = false`,\n ).catch(() => undefined);\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_metadata ON memories USING GIN (metadata_json)`,\n );\n\n // Schema v3: content_hash + unique active index + history updated event\n await this.query(\n `ALTER TABLE memories ADD COLUMN IF NOT EXISTS content_hash TEXT`,\n ).catch(() => undefined);\n await this.query(\n `CREATE UNIQUE INDEX IF NOT EXISTS idx_memories_org_agent_hash_active\n ON memories(organization, agent, content_hash)\n WHERE archived = false AND content_hash IS NOT NULL`,\n ).catch(() => undefined);\n await this.query(`\n CREATE TABLE IF NOT EXISTS embedding_cache (\n cache_key TEXT PRIMARY KEY NOT NULL,\n model TEXT NOT NULL,\n vector BYTEA NOT NULL,\n created_at TIMESTAMPTZ NOT NULL,\n last_used_at TIMESTAMPTZ NOT NULL\n )\n `).catch(() => undefined);\n\n // Widen history CHECK to allow 'updated' (drop + recreate constraint if present)\n await this.query(`\n DO $$\n BEGIN\n ALTER TABLE memory_history DROP CONSTRAINT IF EXISTS memory_history_event_type_check;\n ALTER TABLE memory_history ADD CONSTRAINT memory_history_event_type_check\n CHECK (event_type IN ('created', 'archived', 'compressed', 'updated'));\n EXCEPTION WHEN others THEN\n NULL;\n END $$;\n `).catch(() => undefined);\n\n // Backfill content_hash ONLY when upgrading from a pre-v3 schema.\n // Running this on every open() was the dominant cold-start cost (~100ms+).\n const priorVersion = await this.query(\n `SELECT value FROM Wolbarg_meta WHERE key = $1`,\n [META_KEYS.schemaVersion],\n ).catch(() => ({ rows: [] as Record<string, unknown>[] }));\n const prior =\n priorVersion.rows[0]?.value !== undefined\n ? Number(priorVersion.rows[0].value)\n : null;\n const needsHashBackfill = prior === null || !Number.isFinite(prior) || prior < 3;\n\n if (needsHashBackfill) {\n const active = await this.query(\n `SELECT id, organization, agent, content_text, updated_at\n FROM memories WHERE archived = false AND content_hash IS NULL\n ORDER BY updated_at DESC`,\n ).catch(() => ({ rows: [] as Record<string, unknown>[] }));\n const seen = new Set<string>();\n for (const row of active.rows) {\n const hash = hashMemoryContent(String(row.content_text));\n const key = `${row.organization}\\0${row.agent}\\0${hash}`;\n if (seen.has(key)) {\n await this.query(\n `UPDATE memories SET content_hash = NULL WHERE id = $1`,\n [row.id],\n ).catch(() => undefined);\n } else {\n seen.add(key);\n await this.query(\n `UPDATE memories SET content_hash = $1 WHERE id = $2`,\n [hash, row.id],\n ).catch(() => undefined);\n }\n }\n }\n\n await this.query(\n `INSERT INTO Wolbarg_meta (key, value) VALUES ($1, $2)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,\n [META_KEYS.schemaVersion, String(SCHEMA_VERSION)],\n ).catch(() => undefined);\n\n // Stored tsvector column — keyword/hybrid avoid re-computing to_tsvector.\n // Probe first: ALTER on every open is expensive when the column exists.\n const tsvProbe = await this.query(\n `SELECT 1 FROM information_schema.columns\n WHERE table_name = 'memories' AND column_name = 'content_tsv'\n LIMIT 1`,\n ).catch(() => ({ rows: [] as Record<string, unknown>[] }));\n if (tsvProbe.rows.length > 0) {\n this.hasContentTsv = true;\n } else {\n try {\n await this.query(`\n ALTER TABLE memories\n ADD COLUMN IF NOT EXISTS content_tsv tsvector\n GENERATED ALWAYS AS (to_tsvector('english', content_text)) STORED\n `);\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_content_tsv ON memories USING GIN (content_tsv)`,\n );\n this.hasContentTsv = true;\n } catch {\n await this.query(\n `CREATE INDEX IF NOT EXISTS idx_memories_fts\n ON memories USING GIN (to_tsvector('english', content_text))`,\n ).catch(() => undefined);\n this.hasContentTsv = false;\n }\n }\n }\n\n private async tryEnablePgvector(): Promise<boolean> {\n const cached = PostgresStorageProvider.pgvectorByConn.get(\n this.connectionString,\n );\n if (cached !== undefined) {\n return cached;\n }\n try {\n await this.query(`CREATE EXTENSION IF NOT EXISTS vector`);\n PostgresStorageProvider.pgvectorByConn.set(this.connectionString, true);\n return true;\n } catch {\n PostgresStorageProvider.pgvectorByConn.set(this.connectionString, false);\n return false;\n }\n }\n\n private static pgvectorByConn = new Map<string, boolean>();\n private static vectorSchemaReady = new Set<string>();\n\n private async insertEmbedding(memoryId: string, embedding: Float32Array): Promise<void> {\n if (this.hasPgvector) {\n await this.query(\n `WITH mapped AS (\n INSERT INTO memory_row_map (memory_id) VALUES ($1)\n ON CONFLICT (memory_id) DO NOTHING\n ),\n meta AS (\n SELECT organization, agent, archived FROM memories WHERE id = $1\n )\n INSERT INTO memory_embeddings (memory_id, embedding, organization, agent, archived)\n SELECT $1, $2::float4[]::vector, meta.organization, meta.agent, meta.archived\n FROM meta\n ON CONFLICT (memory_id) DO UPDATE SET\n embedding = EXCLUDED.embedding,\n organization = EXCLUDED.organization,\n agent = EXCLUDED.agent,\n archived = EXCLUDED.archived`,\n [memoryId, toFloat4Param(embedding)],\n );\n return;\n }\n const buf = Buffer.from(\n embedding.buffer,\n embedding.byteOffset,\n embedding.byteLength,\n );\n await this.query(\n `WITH mapped AS (\n INSERT INTO memory_row_map (memory_id) VALUES ($1)\n ON CONFLICT (memory_id) DO NOTHING\n )\n INSERT INTO memory_embeddings_blob (memory_id, embedding)\n VALUES ($1, $2)\n ON CONFLICT (memory_id) DO UPDATE SET embedding = EXCLUDED.embedding`,\n [memoryId, buf],\n );\n }\n\n private async deleteEmbedding(memoryId: string): Promise<void> {\n await this.query(`DELETE FROM memory_embeddings WHERE memory_id = $1`, [memoryId]).catch(() => undefined);\n await this.query(`DELETE FROM memory_embeddings_blob WHERE memory_id = $1`, [memoryId]).catch(() => undefined);\n }\n\n private async query(\n text: string,\n params?: unknown[],\n ): Promise<PgQueryResult> {\n const tx = txStore.getStore();\n const target: PgQueryable = tx ?? this.requirePool();\n return target.query(text, params);\n }\n\n /** Named prepared statement — parse/plan cached per pool connection. */\n private async queryNamed(\n name: string,\n text: string,\n params: unknown[],\n ): Promise<PgQueryResult> {\n const tx = txStore.getStore();\n const target: PgQueryable = tx ?? this.requirePool();\n return target.query({ name, text, values: params });\n }\n\n private mapRow(row: Record<string, unknown>): MemoryRow {\n const meta = row.metadata_json;\n let metadata_json: string;\n if (typeof meta === \"string\") {\n metadata_json = meta;\n } else if (meta && typeof meta === \"object\") {\n metadata_json = JSON.stringify(meta);\n } else {\n metadata_json = \"{}\";\n }\n\n const created =\n row.created_at instanceof Date\n ? row.created_at.toISOString()\n : String(row.created_at);\n const updated =\n row.updated_at instanceof Date\n ? row.updated_at.toISOString()\n : String(row.updated_at);\n\n return {\n id: String(row.id),\n organization: String(row.organization),\n agent: String(row.agent),\n content_text: String(row.content_text),\n metadata_json,\n archived: Number(row.archived ?? 0),\n compressed_into:\n row.compressed_into === null || row.compressed_into === undefined\n ? null\n : String(row.compressed_into),\n content_hash:\n row.content_hash === null || row.content_hash === undefined\n ? null\n : String(row.content_hash),\n created_at: created,\n updated_at: updated,\n rowid: row.rowid !== undefined ? Number(row.rowid) : undefined,\n };\n }\n\n private requirePool(): PgPool {\n if (!this.pool) {\n throw new DatabaseError(\"Database is not open. Call open() first.\");\n }\n return this.pool;\n }\n\n private requireVectorReady(): void {\n if (this.vectorDimensions === null) {\n throw new DatabaseError(\n \"Vector index is not ready. Embedding dimensions have not been initialized.\",\n );\n }\n }\n\n private describe(error: unknown): string {\n if (error instanceof Error) {\n const aggregate = error as Error & { errors?: unknown[] };\n if (Array.isArray(aggregate.errors) && aggregate.errors.length > 0) {\n const nested = aggregate.errors\n .map((item) => (item instanceof Error ? item.message : String(item)))\n .join(\"; \");\n return `${error.message || error.name}: ${nested}`;\n }\n return error.message || error.name;\n }\n return String(error);\n }\n}\n","/**\n * Storage provider factory and re-exports.\n */\n\nimport type { DatabaseConfig, StorageConfig } from \"../types/index.js\";\nimport { ConfigurationError } from \"../errors/index.js\";\nimport { resolveDatabaseUrl } from \"../core/options.js\";\nimport type { StorageProvider } from \"./types.js\";\nimport { SqliteStorageProvider } from \"./providers/sqlite.js\";\nimport { PostgresStorageProvider } from \"./providers/postgres.js\";\n\nexport function createStorageProvider(\n config: StorageConfig | DatabaseConfig,\n options?: { concurrency?: import(\"../types/index.js\").ConcurrencyConfig },\n): StorageProvider {\n const connectionString = resolveDatabaseUrl(config);\n if (!connectionString) {\n throw new ConfigurationError(\n \"database.url or database.connectionString is required\",\n );\n }\n\n if (config.provider === \"sqlite\") {\n return new SqliteStorageProvider({\n connectionString,\n concurrency: options?.concurrency,\n });\n }\n\n if (config.provider === \"postgres\") {\n return new PostgresStorageProvider({\n connectionString,\n maxPoolSize: config.maxPoolSize,\n durableWrites: config.durableWrites,\n });\n }\n\n throw new ConfigurationError(\n `Unsupported storage provider: ${String((config as { provider: string }).provider)}`,\n );\n}\n\n/** @deprecated Prefer {@link createStorageProvider}. */\nexport function createDatabaseProvider(\n config: DatabaseConfig,\n): StorageProvider {\n return createStorageProvider(config);\n}\n\nexport type {\n StorageProvider,\n DatabaseProvider,\n MemoryRow,\n HistoryRow,\n InsertMemoryInput,\n UpdateMemoryInput,\n RepositoryFilter,\n VectorSearchHit,\n} from \"./types.js\";\nexport {\n SqliteStorageProvider,\n SqliteDatabaseProvider,\n} from \"./providers/sqlite.js\";\nexport { PostgresStorageProvider } from \"./providers/postgres.js\";\n","/** Published SDK semver — keep in sync with package.json `version`. */\nexport const SDK_VERSION = \"0.5.0\";\n","/**\n * Portable memory database import / export helpers.\n * Interface is provider-agnostic; SQLite file+manifest is the first implementation.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DatabaseSync } from \"node:sqlite\";\n\nimport { ConfigurationError, DatabaseError, ValidationError } from \"../errors/index.js\";\nimport { nowIso } from \"../utils/index.js\";\nimport { SDK_VERSION } from \"../version.js\";\n\nexport interface ExportManifest {\n format: \"wolbarg-export-v1\";\n exportedAt: string;\n sdkVersion: string;\n provider: string;\n sourcePath: string;\n organization?: string;\n}\n\nexport interface MemoryExportResult {\n path: string;\n manifest: ExportManifest;\n sizeBytes: number;\n}\n\nexport interface MemoryImportResult {\n path: string;\n manifest: ExportManifest;\n}\n\nexport interface MemoryTransferProvider {\n exportTo(path: string, sourcePath: string, organization?: string): Promise<MemoryExportResult>;\n importFrom(path: string, targetPath: string): Promise<MemoryImportResult>;\n}\n\nexport class SqliteMemoryTransferProvider implements MemoryTransferProvider {\n async exportTo(\n exportPath: string,\n sourcePath: string,\n organization?: string,\n ): Promise<MemoryExportResult> {\n const resolvedSource = resolvePath(sourcePath);\n if (resolvedSource === \":memory:\") {\n throw new ConfigurationError(\n \"Cannot export an in-memory database. Use a file-backed SQLite database.\",\n );\n }\n if (!fs.existsSync(resolvedSource)) {\n throw new DatabaseError(\n `Failed to execute export()\\nReason:\\nSource database not found at ${resolvedSource}\\nSuggestion:\\nInitialize Wolbarg and verify the database path.`,\n );\n }\n\n const resolvedExport = resolvePath(exportPath);\n fs.mkdirSync(path.dirname(resolvedExport), { recursive: true });\n\n const dbExportPath = resolvedExport.endsWith(\".db\")\n ? resolvedExport\n : `${resolvedExport}.db`;\n const manifestPath = `${dbExportPath}.manifest.json`;\n\n await copySqlite(resolvedSource, dbExportPath);\n\n const manifest: ExportManifest = {\n format: \"wolbarg-export-v1\",\n exportedAt: nowIso(),\n sdkVersion: SDK_VERSION,\n provider: \"sqlite\",\n sourcePath: resolvedSource,\n organization,\n };\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), \"utf8\");\n\n return {\n path: dbExportPath,\n manifest,\n sizeBytes: fs.statSync(dbExportPath).size,\n };\n }\n\n async importFrom(\n exportPath: string,\n targetPath: string,\n ): Promise<MemoryImportResult> {\n const resolvedExport = resolvePath(exportPath);\n const dbExportPath = resolvedExport.endsWith(\".db\")\n ? resolvedExport\n : fs.existsSync(`${resolvedExport}.db`)\n ? `${resolvedExport}.db`\n : resolvedExport;\n\n if (!fs.existsSync(dbExportPath)) {\n throw new ValidationError(\n `Failed to execute import()\\nReason:\\nExport file not found at ${dbExportPath}\\nSuggestion:\\nPass the path returned by export().`,\n );\n }\n\n const manifestPath = `${dbExportPath}.manifest.json`;\n let manifest: ExportManifest;\n if (fs.existsSync(manifestPath)) {\n manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf8\")) as ExportManifest;\n if (manifest.format !== \"wolbarg-export-v1\") {\n throw new ValidationError(\n `Unsupported export format: ${String((manifest as { format?: string }).format)}`,\n );\n }\n } else {\n manifest = {\n format: \"wolbarg-export-v1\",\n exportedAt: nowIso(),\n sdkVersion: SDK_VERSION,\n provider: \"sqlite\",\n sourcePath: dbExportPath,\n };\n }\n\n const resolvedTarget = resolvePath(targetPath);\n if (resolvedTarget === \":memory:\") {\n throw new ConfigurationError(\"Cannot import into an in-memory database.\");\n }\n\n for (const suffix of [\"\", \"-wal\", \"-shm\"]) {\n const side = `${resolvedTarget}${suffix}`;\n if (fs.existsSync(side)) {\n fs.rmSync(side, { force: true });\n }\n }\n await copySqlite(dbExportPath, resolvedTarget);\n\n return { path: resolvedTarget, manifest };\n }\n}\n\nasync function copySqlite(sourcePath: string, destPath: string): Promise<void> {\n fs.mkdirSync(path.dirname(destPath), { recursive: true });\n let source: DatabaseSync | null = null;\n let dest: DatabaseSync | null = null;\n try {\n source = new DatabaseSync(sourcePath);\n try {\n source.exec(\"PRAGMA wal_checkpoint(TRUNCATE);\");\n } catch {\n // ignore\n }\n dest = new DatabaseSync(destPath);\n const backupFn = (\n source as unknown as {\n backup?: (target: DatabaseSync) => void | Promise<void>;\n }\n ).backup;\n if (typeof backupFn === \"function\") {\n await backupFn.call(source, dest);\n } else {\n source.close();\n source = null;\n dest.close();\n dest = null;\n fs.copyFileSync(sourcePath, destPath);\n }\n } catch (error) {\n throw new DatabaseError(\n `SQLite transfer failed: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n } finally {\n try {\n source?.close();\n } catch {\n // ignore\n }\n try {\n dest?.close();\n } catch {\n // ignore\n }\n }\n}\n\nfunction resolvePath(p: string): string {\n if (p === \":memory:\") return \":memory:\";\n return path.isAbsolute(p) ? p : path.resolve(process.cwd(), p);\n}\n","/**\n * Memory domain helpers — mapping rows to public records.\n */\n\nimport type { HistoryEvent, MemoryRecord, RecallResult } from \"../types/index.js\";\nimport type { HistoryRow, MemoryRow } from \"../storage/types.js\";\nimport { deserializeMetadata, parseIso } from \"../utils/index.js\";\n\nexport function toMemoryRecord(row: MemoryRow): MemoryRecord {\n return {\n id: row.id,\n organization: row.organization,\n agent: row.agent,\n content: { text: row.content_text },\n metadata: deserializeMetadata(row.metadata_json),\n archived: row.archived === 1,\n compressedInto: row.compressed_into,\n createdAt: parseIso(row.created_at),\n updatedAt: parseIso(row.updated_at),\n };\n}\n\nexport function toRecallResult(row: MemoryRow, similarity: number): RecallResult {\n return {\n id: row.id,\n organization: row.organization,\n agent: row.agent,\n content: { text: row.content_text },\n metadata: deserializeMetadata(row.metadata_json),\n archived: row.archived === 1,\n similarity,\n createdAt: parseIso(row.created_at),\n updatedAt: parseIso(row.updated_at),\n };\n}\n\nexport function toHistoryEvent(row: HistoryRow): HistoryEvent {\n return {\n id: row.id,\n memoryId: row.memory_id,\n eventType: row.event_type,\n relatedMemoryId: row.related_memory_id,\n createdAt: parseIso(row.created_at),\n };\n}\n\nexport {\n SqliteMemoryTransferProvider,\n} from \"./transfer.js\";\nexport type {\n ExportManifest,\n MemoryExportResult,\n MemoryImportResult,\n MemoryTransferProvider,\n} from \"./transfer.js\";\n\n","/**\n * Retrieval pipeline — fusion, MMR, adaptive candidate selection.\n */\n\nimport type { HybridConfig, MmrConfig, RecallResult } from \"../types/index.js\";\n\nexport interface ScoredCandidate {\n id: string;\n semanticScore: number;\n keywordScore: number;\n fusedScore: number;\n result: RecallResult;\n}\n\nexport function fuseScores(\n semantic: Map<string, number>,\n keyword: Map<string, number>,\n weights: Required<HybridConfig>,\n): Map<string, number> {\n const ids = new Set([...semantic.keys(), ...keyword.keys()]);\n const fused = new Map<string, number>();\n const semMax = Math.max(...semantic.values(), 1e-9);\n const kwMax = Math.max(...keyword.values(), 1e-9);\n\n for (const id of ids) {\n const s = (semantic.get(id) ?? 0) / semMax;\n const k = (keyword.get(id) ?? 0) / kwMax;\n fused.set(\n id,\n weights.semanticWeight * s + weights.keywordWeight * k,\n );\n }\n return fused;\n}\n\nexport function resolveHybridWeights(\n hybrid: boolean | HybridConfig | undefined,\n): Required<HybridConfig> | null {\n if (hybrid === false || hybrid === undefined) {\n return null;\n }\n if (hybrid === true) {\n return { semanticWeight: 0.7, keywordWeight: 0.3 };\n }\n return {\n semanticWeight: hybrid.semanticWeight ?? 0.7,\n keywordWeight: hybrid.keywordWeight ?? 0.3,\n };\n}\n\nexport function resolveMmr(\n mmr: boolean | MmrConfig | undefined,\n): number | null {\n if (mmr === false || mmr === undefined) {\n return null;\n }\n if (mmr === true) {\n return 0.5;\n }\n return mmr.lambda ?? 0.5;\n}\n\n/**\n * Maximal Marginal Relevance diversification.\n * Uses character Jaccard as a cheap token-overlap proxy for embedding similarity.\n */\nexport function applyMmr(\n candidates: RecallResult[],\n topK: number,\n lambda: number,\n): RecallResult[] {\n if (candidates.length <= topK) {\n return candidates;\n }\n\n const selected: RecallResult[] = [];\n const remaining = [...candidates];\n\n while (selected.length < topK && remaining.length > 0) {\n let bestIdx = 0;\n let bestScore = -Infinity;\n\n for (let i = 0; i < remaining.length; i += 1) {\n const candidate = remaining[i]!;\n const relevance = candidate.similarity;\n let maxSim = 0;\n for (const chosen of selected) {\n maxSim = Math.max(\n maxSim,\n jaccard(candidate.content.text, chosen.content.text),\n );\n }\n const score = lambda * relevance - (1 - lambda) * maxSim;\n if (score > bestScore) {\n bestScore = score;\n bestIdx = i;\n }\n }\n\n selected.push(remaining[bestIdx]!);\n remaining.splice(bestIdx, 1);\n }\n\n return selected;\n}\n\nfunction jaccard(a: string, b: string): number {\n const ta = new Set(a.toLowerCase().split(/\\s+/).filter(Boolean));\n const tb = new Set(b.toLowerCase().split(/\\s+/).filter(Boolean));\n if (ta.size === 0 && tb.size === 0) {\n return 1;\n }\n let inter = 0;\n for (const t of ta) {\n if (tb.has(t)) {\n inter += 1;\n }\n }\n const union = ta.size + tb.size - inter;\n return union === 0 ? 0 : inter / union;\n}\n\nexport function adaptiveFetchK(\n topK: number,\n overFetchFactor: number,\n hasFilters: boolean,\n): number {\n const factor = hasFilters ? Math.max(overFetchFactor, 4) : overFetchFactor;\n return Math.min(Math.max(Math.ceil(topK * factor), topK), 1000);\n}\n","/**\n * Shared Memory / Entity serialization helpers for graph backends.\n */\n\nimport type { MemoryRecord } from \"../types/index.js\";\n\n/** Minimal stub when only an id is known. */\nexport function stubMemoryRecord(id: string): MemoryRecord {\n return {\n id,\n organization: \"\",\n agent: \"\",\n content: { text: \"\" },\n metadata: {},\n archived: false,\n compressedInto: null,\n createdAt: new Date(0),\n updatedAt: new Date(0),\n };\n}\n\nexport function serializeMetadata(meta: Record<string, unknown> | undefined): string {\n return JSON.stringify(meta ?? {});\n}\n\nexport function deserializeMetadata(raw: unknown): Record<string, unknown> {\n if (raw == null || raw === \"\") return {};\n if (typeof raw === \"object\" && !Array.isArray(raw)) {\n return raw as Record<string, unknown>;\n }\n if (typeof raw !== \"string\") return {};\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>;\n }\n } catch {\n /* ignore */\n }\n return {};\n}\n\nexport function rowToMemoryRecord(row: Record<string, unknown>): MemoryRecord {\n const id = String(row.id ?? row.n_id ?? \"\");\n const createdAt = parseDate(row.created_at ?? row.createdAt);\n const updatedAt = parseDate(row.updated_at ?? row.updatedAt);\n return {\n id,\n organization: String(row.organization ?? \"\"),\n agent: String(row.agent ?? \"\"),\n content: { text: String(row.content_text ?? row.contentText ?? \"\") },\n metadata: deserializeMetadata(row.metadata_json ?? row.metadata),\n archived: Boolean(row.archived),\n compressedInto:\n row.compressed_into == null || row.compressed_into === \"\"\n ? null\n : String(row.compressed_into),\n createdAt,\n updatedAt,\n };\n}\n\nfunction parseDate(value: unknown): Date {\n if (value instanceof Date) return value;\n if (typeof value === \"string\" || typeof value === \"number\") {\n const d = new Date(value);\n if (!Number.isNaN(d.getTime())) return d;\n }\n return new Date(0);\n}\n\n/** Stable entity id from name+type (portable across backends). */\nexport function entityIdFrom(name: string, type: string): string {\n const key = `${type.trim().toLowerCase()}::${name.trim().toLowerCase()}`;\n // Simple deterministic hash → hex (no crypto dependency required).\n let h = 2166136261;\n for (let i = 0; i < key.length; i += 1) {\n h ^= key.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n const a = (h >>> 0).toString(16).padStart(8, \"0\");\n let h2 = 5381;\n for (let i = 0; i < key.length; i += 1) {\n h2 = (h2 * 33) ^ key.charCodeAt(i);\n }\n const b = (h2 >>> 0).toString(16).padStart(8, \"0\");\n return `ent_${a}${b}`;\n}\n","/**\n * Cascade delete helpers for the SQLite graph schema.\n *\n * Removes a memory graph node (and all incident edges) when the matching\n * memory is hard-deleted via forget/clear. Edge FK CASCADE covers edges when\n * the node row is deleted; we still delete edges explicitly first so partial\n * failures never leave dangling REFERENCES if FKs are off.\n */\n\nimport type { DatabaseSync } from \"node:sqlite\";\n\n/** Relation used for entity → memory links (never walked by getRelated). */\nexport const ENTITY_MENTIONS_RELATION = \"MENTIONS\";\n\n/**\n * Delete the memory graph node for `memoryId` and all edges that reference it.\n */\nexport function cascadeDeleteMemoryNode(\n db: DatabaseSync,\n memoryId: string,\n): void {\n const node = db\n .prepare(\n `SELECT id FROM graph_nodes WHERE type = 'memory' AND ref_id = ?`,\n )\n .get(memoryId) as { id: string } | undefined;\n if (!node) return;\n\n db.prepare(\n `DELETE FROM graph_edges WHERE from_node_id = ? OR to_node_id = ?`,\n ).run(node.id, node.id);\n db.prepare(`DELETE FROM graph_nodes WHERE id = ?`).run(node.id);\n}\n","/**\n * Embedded SQLite graph provider (file-backed, local/dev).\n *\n * Implements the five typed {@link GraphProvider} methods with plain SQL and\n * recursive CTEs — no Cypher. Schema is created on open (plain CREATE TABLE IF\n * NOT EXISTS; no graph-engine DDL / schema-creation-on-first-write complexity).\n *\n * Uses the same `node:sqlite` + {@link withImmediateTransaction} patterns as\n * {@link SqliteStorageProvider}. Graph data lives in a separate SQLite file from\n * the memory store by default.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DatabaseSync } from \"node:sqlite\";\n\nimport { ConfigurationError, DatabaseError } from \"../../errors/index.js\";\nimport {\n CREATE_GRAPH_EDGES_TABLE,\n CREATE_GRAPH_INDEXES,\n CREATE_GRAPH_NODES_TABLE,\n} from \"../../schema/index.js\";\nimport {\n resolveConcurrencyConfig,\n type ConcurrencyConfig,\n type ResolvedConcurrencyConfig,\n} from \"../../storage/sqlite/concurrency-config.js\";\nimport { withImmediateTransaction } from \"../../storage/sqlite/transaction.js\";\nimport type { MemoryRecord } from \"../../types/index.js\";\nimport {\n entityIdFrom,\n serializeMetadata,\n stubMemoryRecord,\n} from \"../memory-node.js\";\nimport {\n cascadeDeleteMemoryNode,\n ENTITY_MENTIONS_RELATION,\n} from \"../sync/cascade.js\";\nimport type {\n GetRelatedOptions,\n GraphEntityInput,\n GraphHealthResult,\n GraphProvider,\n} from \"../types.js\";\n\n/** Default traversal depth when `options.depth` is omitted (matches Neo4j). */\nexport const DEFAULT_GET_RELATED_DEPTH = 1;\nconst MAX_GET_RELATED_DEPTH = 16;\n\nexport interface SqliteGraphProviderOptions {\n /** Path to the graph SQLite file (separate from the memory store by default). */\n path: string;\n /** Optional write-concurrency tuning (same shape as memory SQLite). */\n concurrency?: ConcurrencyConfig;\n}\n\nexport class SqliteGraphProvider implements GraphProvider {\n readonly name = \"sqlite\";\n private readonly dbPath: string;\n private readonly concurrency: ResolvedConcurrencyConfig;\n private db: DatabaseSync | null = null;\n private opened = false;\n\n constructor(options: SqliteGraphProviderOptions) {\n if (!options?.path || typeof options.path !== \"string\" || !options.path.trim()) {\n throw new ConfigurationError(\"sqlite graph requires a non-empty path\");\n }\n this.dbPath = path.resolve(options.path.trim());\n this.concurrency = resolveConcurrencyConfig(options.concurrency);\n }\n\n supportsFileSnapshot(): boolean {\n return this.dbPath !== \":memory:\";\n }\n\n getDataPath(): string | null {\n return this.dbPath === \":memory:\" ? null : this.dbPath;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n\n try {\n if (this.dbPath !== \":memory:\") {\n fs.mkdirSync(path.dirname(this.dbPath), { recursive: true });\n }\n\n const db = new DatabaseSync(this.dbPath);\n db.exec(\"PRAGMA journal_mode = WAL;\");\n db.exec(`\n PRAGMA synchronous = NORMAL;\n PRAGMA foreign_keys = ON;\n PRAGMA busy_timeout = ${this.concurrency.lockTimeoutMs};\n PRAGMA temp_store = MEMORY;\n PRAGMA cache_size = -8192;\n PRAGMA wal_autocheckpoint = 1000;\n `);\n\n db.exec(CREATE_GRAPH_NODES_TABLE);\n db.exec(CREATE_GRAPH_EDGES_TABLE);\n for (const indexSql of CREATE_GRAPH_INDEXES) {\n db.exec(indexSql);\n }\n\n this.db = db;\n this.opened = true;\n } catch (error) {\n try {\n this.db?.close();\n } catch {\n /* ignore */\n }\n this.db = null;\n this.opened = false;\n throw new DatabaseError(\n `Failed to open SQLite graph database: ${describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async close(): Promise<void> {\n if (!this.db) {\n this.opened = false;\n return;\n }\n try {\n try {\n this.db.exec(\"PRAGMA optimize;\");\n } catch {\n /* best-effort */\n }\n this.db.close();\n } catch (error) {\n throw new DatabaseError(\n `Failed to close SQLite graph database: ${describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n } finally {\n this.db = null;\n this.opened = false;\n }\n }\n\n async linkMemories(\n fromId: string,\n toId: string,\n relation: string,\n metadata?: Record<string, unknown>,\n ): Promise<void> {\n const db = this.requireDb();\n await this.withTx(() => {\n const fromNode = this.ensureMemoryNodeSync(db, fromId);\n const toNode = this.ensureMemoryNodeSync(db, toId);\n db.prepare(\n `DELETE FROM graph_edges\n WHERE from_node_id = ? AND to_node_id = ? AND relation = ?`,\n ).run(fromNode, toNode, relation);\n db.prepare(\n `INSERT INTO graph_edges (id, from_node_id, to_node_id, relation, metadata, created_at)\n VALUES (?, ?, ?, ?, ?, ?)`,\n ).run(\n crypto.randomUUID(),\n fromNode,\n toNode,\n relation,\n serializeMetadata(metadata),\n nowIso(),\n );\n });\n }\n\n async unlinkMemories(\n fromId: string,\n toId: string,\n relation?: string,\n ): Promise<void> {\n const db = this.requireDb();\n await this.withTx(() => {\n const fromNode = this.findMemoryNodeId(db, fromId);\n const toNode = this.findMemoryNodeId(db, toId);\n if (!fromNode || !toNode) return;\n if (relation !== undefined) {\n db.prepare(\n `DELETE FROM graph_edges\n WHERE from_node_id = ? AND to_node_id = ? AND relation = ?`,\n ).run(fromNode, toNode, relation);\n return;\n }\n db.prepare(\n `DELETE FROM graph_edges WHERE from_node_id = ? AND to_node_id = ?`,\n ).run(fromNode, toNode);\n });\n }\n\n /**\n * Bounded recursive CTE over `graph_edges`.\n *\n * Default depth: {@link DEFAULT_GET_RELATED_DEPTH} (1). Cap: 16.\n * Only memory↔memory edges are walked (entity MENTIONS edges are excluded).\n * Cycle-safe via path membership (`instr`) so A→B→C→A terminates.\n *\n * Returns stub {@link MemoryRecord}s (id + empty fields). The facade\n * re-hydrates full rows via `toMemoryRecord` from storage when possible.\n */\n async getRelated(\n memoryId: string,\n options?: GetRelatedOptions,\n ): Promise<MemoryRecord[]> {\n const db = this.requireDb();\n const depth = Math.max(\n 1,\n Math.min(options?.depth ?? DEFAULT_GET_RELATED_DEPTH, MAX_GET_RELATED_DEPTH),\n );\n const direction = options?.direction ?? \"both\";\n const relation = options?.relation ?? null;\n\n const start = this.findMemoryNodeId(db, memoryId);\n if (!start) return [];\n\n const sql = buildGetRelatedSql(direction);\n // Bind: start id (anchor), start id (path seed), max depth, relation×2 (nullable filter).\n const rows = db\n .prepare(sql)\n .all(start, start, depth, relation, relation) as Array<{\n ref_id: string;\n }>;\n\n const seen = new Set<string>();\n const out: MemoryRecord[] = [];\n for (const row of rows) {\n if (row.ref_id === memoryId || seen.has(row.ref_id)) continue;\n seen.add(row.ref_id);\n out.push(stubMemoryRecord(row.ref_id));\n }\n return out;\n }\n\n async upsertEntity(entity: GraphEntityInput): Promise<string> {\n const id = entityIdFrom(entity.name, entity.type);\n const db = this.requireDb();\n const meta = serializeMetadata({\n ...(entity.metadata ?? {}),\n entityType: entity.type,\n });\n await this.withTx(() => {\n const existing = db\n .prepare(\n `SELECT id FROM graph_nodes WHERE type = 'entity' AND ref_id = ?`,\n )\n .get(id) as { id: string } | undefined;\n if (existing) {\n db.prepare(\n `UPDATE graph_nodes SET name = ?, metadata = ? WHERE id = ?`,\n ).run(entity.name, meta, existing.id);\n } else {\n db.prepare(\n `INSERT INTO graph_nodes (id, type, ref_id, name, metadata, created_at)\n VALUES (?, 'entity', ?, ?, ?, ?)`,\n ).run(id, id, entity.name, meta, nowIso());\n }\n });\n return id;\n }\n\n async linkEntityToMemory(\n entityId: string,\n memoryId: string,\n role?: string,\n ): Promise<void> {\n const db = this.requireDb();\n await this.withTx(() => {\n const entity = db\n .prepare(\n `SELECT id FROM graph_nodes WHERE type = 'entity' AND ref_id = ?`,\n )\n .get(entityId) as { id: string } | undefined;\n if (!entity) {\n throw new DatabaseError(`Entity not found: ${entityId}`, {\n operation: \"linkEntityToMemory\",\n });\n }\n const memoryNode = this.ensureMemoryNodeSync(db, memoryId);\n db.prepare(\n `DELETE FROM graph_edges\n WHERE from_node_id = ? AND to_node_id = ? AND relation = ?`,\n ).run(entity.id, memoryNode, ENTITY_MENTIONS_RELATION);\n db.prepare(\n `INSERT INTO graph_edges (id, from_node_id, to_node_id, relation, metadata, created_at)\n VALUES (?, ?, ?, ?, ?, ?)`,\n ).run(\n crypto.randomUUID(),\n entity.id,\n memoryNode,\n ENTITY_MENTIONS_RELATION,\n serializeMetadata({ role: role ?? \"\" }),\n nowIso(),\n );\n });\n }\n\n async deleteMemory(memoryId: string): Promise<void> {\n const db = this.requireDb();\n await this.withTx(() => {\n cascadeDeleteMemoryNode(db, memoryId);\n });\n }\n\n /**\n * Raw Cypher escape hatch — **not supported** on the SQLite graph provider.\n * Use the typed methods, or open the underlying SQLite file yourself for raw SQL.\n */\n async query(_cypher: string, _params?: Record<string, unknown>): Promise<unknown> {\n throw new DatabaseError(\n \"raw Cypher queries are not supported by the SQLite graph provider — use the typed methods, or query the underlying SQLite tables directly via your own connection if you need raw access\",\n {\n operation: \"query\",\n suggestion:\n \"Use linkMemories / getRelated / upsertEntity / linkEntityToMemory, or open the graph .db file with node:sqlite for ad-hoc SQL\",\n },\n );\n }\n\n async health(): Promise<GraphHealthResult> {\n try {\n if (!this.opened || !this.db) {\n return { ok: false, backend: \"sqlite\", details: { reason: \"not open\" } };\n }\n const nodeCount = Number(\n (this.db.prepare(`SELECT COUNT(*) AS c FROM graph_nodes`).get() as { c: number | bigint })\n .c,\n );\n const edgeCount = Number(\n (this.db.prepare(`SELECT COUNT(*) AS c FROM graph_edges`).get() as { c: number | bigint })\n .c,\n );\n return {\n ok: true,\n backend: \"sqlite\",\n details: {\n path: this.dbPath,\n embedded: true,\n nodeCount,\n edgeCount,\n exists: this.dbPath === \":memory:\" || fs.existsSync(this.dbPath),\n },\n };\n } catch (error) {\n return {\n ok: false,\n backend: \"sqlite\",\n details: {\n path: this.dbPath,\n error: error instanceof Error ? error.message : String(error),\n },\n };\n }\n }\n\n private async withTx<T>(fn: () => T): Promise<T> {\n const db = this.requireDb();\n return withImmediateTransaction(db, this.concurrency, fn);\n }\n\n private requireDb(): DatabaseSync {\n if (!this.db || !this.opened) {\n throw new DatabaseError(\"SQLite graph is not open\", {\n operation: \"graph\",\n suggestion: \"Call ready() / open() before graph operations\",\n });\n }\n return this.db;\n }\n\n private findMemoryNodeId(db: DatabaseSync, memoryId: string): string | null {\n const row = db\n .prepare(\n `SELECT id FROM graph_nodes WHERE type = 'memory' AND ref_id = ?`,\n )\n .get(memoryId) as { id: string } | undefined;\n return row?.id ?? null;\n }\n\n private ensureMemoryNodeSync(db: DatabaseSync, memoryId: string): string {\n const existing = this.findMemoryNodeId(db, memoryId);\n if (existing) return existing;\n db.prepare(\n `INSERT INTO graph_nodes (id, type, ref_id, name, metadata, created_at)\n VALUES (?, 'memory', ?, NULL, '{}', ?)`,\n ).run(memoryId, memoryId, nowIso());\n return memoryId;\n }\n}\n\n/**\n * Build a recursive CTE for getRelated.\n * Bind order: startId, startId, maxDepth, relation, relation.\n * Path membership (`instr`) terminates cycles.\n */\nfunction buildGetRelatedSql(direction: \"in\" | \"out\" | \"both\"): string {\n const mentions = ENTITY_MENTIONS_RELATION;\n\n if (direction === \"out\") {\n return `\n WITH RECURSIVE walk(node_id, depth, path) AS (\n SELECT ? AS node_id, 0, '/' || ? || '/'\n UNION ALL\n SELECT e.to_node_id, w.depth + 1, w.path || e.to_node_id || '/'\n FROM walk w\n JOIN graph_edges e ON e.from_node_id = w.node_id\n JOIN graph_nodes dest ON dest.id = e.to_node_id AND dest.type = 'memory'\n WHERE w.depth < ?\n AND instr(w.path, '/' || e.to_node_id || '/') = 0\n AND (? IS NULL OR e.relation = ?)\n AND e.relation != '${mentions}'\n )\n SELECT DISTINCT n.ref_id AS ref_id\n FROM walk w\n JOIN graph_nodes n ON n.id = w.node_id\n WHERE w.depth > 0 AND n.type = 'memory'\n `;\n }\n\n if (direction === \"in\") {\n return `\n WITH RECURSIVE walk(node_id, depth, path) AS (\n SELECT ? AS node_id, 0, '/' || ? || '/'\n UNION ALL\n SELECT e.from_node_id, w.depth + 1, w.path || e.from_node_id || '/'\n FROM walk w\n JOIN graph_edges e ON e.to_node_id = w.node_id\n JOIN graph_nodes src ON src.id = e.from_node_id AND src.type = 'memory'\n WHERE w.depth < ?\n AND instr(w.path, '/' || e.from_node_id || '/') = 0\n AND (? IS NULL OR e.relation = ?)\n AND e.relation != '${mentions}'\n )\n SELECT DISTINCT n.ref_id AS ref_id\n FROM walk w\n JOIN graph_nodes n ON n.id = w.node_id\n WHERE w.depth > 0 AND n.type = 'memory'\n `;\n }\n\n return `\n WITH RECURSIVE walk(node_id, depth, path) AS (\n SELECT ? AS node_id, 0, '/' || ? || '/'\n UNION ALL\n SELECT neighbor.id, w.depth + 1, w.path || neighbor.id || '/'\n FROM walk w\n JOIN graph_edges e\n ON e.from_node_id = w.node_id OR e.to_node_id = w.node_id\n JOIN graph_nodes neighbor\n ON neighbor.id = CASE\n WHEN e.from_node_id = w.node_id THEN e.to_node_id\n ELSE e.from_node_id\n END\n AND neighbor.type = 'memory'\n WHERE w.depth < ?\n AND instr(w.path, '/' || neighbor.id || '/') = 0\n AND (? IS NULL OR e.relation = ?)\n AND e.relation != '${mentions}'\n )\n SELECT DISTINCT n.ref_id AS ref_id\n FROM walk w\n JOIN graph_nodes n ON n.id = w.node_id\n WHERE w.depth > 0 AND n.type = 'memory'\n `;\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction describe(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","/**\n * Neo4j graph provider (networked, production).\n *\n * Uses neo4j-driver session.run with parameterized Cypher for typed methods —\n * NOT GraphProvider.query(). Schema-flexible: nodes/relationships are created\n * freely without DDL.\n *\n * Install as optional peer: `npm install neo4j-driver`.\n */\n\nimport { ConfigurationError, DatabaseError } from \"../../errors/index.js\";\nimport type { MemoryRecord } from \"../../types/index.js\";\nimport {\n entityIdFrom,\n rowToMemoryRecord,\n serializeMetadata,\n} from \"../memory-node.js\";\nimport type {\n GetRelatedOptions,\n GraphEntityInput,\n GraphHealthResult,\n GraphProvider,\n} from \"../types.js\";\n\ntype Neo4jRecord = {\n get: (key: string) => unknown;\n keys: string[];\n toObject: () => Record<string, unknown>;\n};\n\ntype Neo4jResult = {\n records: Neo4jRecord[];\n};\n\ntype Neo4jSession = {\n run: (\n cypher: string,\n params?: Record<string, unknown>,\n ) => Promise<Neo4jResult>;\n close: () => Promise<void>;\n};\n\ntype Neo4jDriver = {\n session: (options?: { database?: string }) => Neo4jSession;\n verifyConnectivity: () => Promise<void>;\n close: () => Promise<void>;\n getServerInfo?: () => Promise<unknown>;\n};\n\ntype Neo4jModule = {\n driver: (\n url: string,\n auth: { username: string; password: string } | unknown,\n options?: Record<string, unknown>,\n ) => Neo4jDriver;\n auth: {\n basic: (username: string, password: string) => unknown;\n };\n};\n\nexport interface Neo4jGraphProviderOptions {\n url: string;\n username: string;\n password: string;\n database?: string;\n}\n\nexport class Neo4jGraphProvider implements GraphProvider {\n readonly name = \"neo4j\";\n private readonly url: string;\n private readonly username: string;\n private readonly password: string;\n private readonly database: string | undefined;\n private driver: Neo4jDriver | null = null;\n private opened = false;\n\n constructor(options: Neo4jGraphProviderOptions) {\n if (!options?.url?.trim()) {\n throw new ConfigurationError(\"neo4j graph requires a non-empty url\");\n }\n if (!options?.username?.trim()) {\n throw new ConfigurationError(\"neo4j graph requires a non-empty username\");\n }\n if (typeof options.password !== \"string\") {\n throw new ConfigurationError(\"neo4j graph requires a password string\");\n }\n this.url = options.url.trim();\n this.username = options.username.trim();\n this.password = options.password;\n this.database = options.database?.trim() || undefined;\n }\n\n supportsFileSnapshot(): boolean {\n return false;\n }\n\n getDataPath(): string | null {\n return null;\n }\n\n async open(): Promise<void> {\n if (this.opened) return;\n\n let mod: Neo4jModule;\n try {\n mod = (await import(\"neo4j-driver\")) as unknown as Neo4jModule;\n } catch {\n throw new ConfigurationError(\n 'Neo4j graph requires the optional \"neo4j-driver\" package. Install it with: npm install neo4j-driver',\n );\n }\n\n this.driver = mod.driver(\n this.url,\n mod.auth.basic(this.username, this.password),\n );\n await this.driver.verifyConnectivity();\n this.opened = true;\n // Ensure uniqueness constraints (best-effort; Neo4j is schema-flexible).\n await this.withSession(async (session) => {\n try {\n await session.run(\n `CREATE CONSTRAINT memory_id IF NOT EXISTS FOR (m:Memory) REQUIRE m.id IS UNIQUE`,\n );\n } catch {\n /* older Neo4j / community editions may lack IF NOT EXISTS */\n }\n try {\n await session.run(\n `CREATE CONSTRAINT entity_id IF NOT EXISTS FOR (e:Entity) REQUIRE e.id IS UNIQUE`,\n );\n } catch {\n /* ignore */\n }\n });\n }\n\n async close(): Promise<void> {\n if (this.driver) {\n await this.driver.close();\n }\n this.driver = null;\n this.opened = false;\n }\n\n private requireDriver(): Neo4jDriver {\n if (!this.driver || !this.opened) {\n throw new DatabaseError(\"Neo4j graph is not open\", {\n operation: \"graph\",\n suggestion: \"Call ready() / open() before graph operations\",\n });\n }\n return this.driver;\n }\n\n private async withSession<T>(fn: (session: Neo4jSession) => Promise<T>): Promise<T> {\n const driver = this.requireDriver();\n const session = this.database\n ? driver.session({ database: this.database })\n : driver.session();\n try {\n return await fn(session);\n } finally {\n await session.close();\n }\n }\n\n private async run(\n cypher: string,\n params: Record<string, unknown> = {},\n ): Promise<Record<string, unknown>[]> {\n return this.withSession(async (session) => {\n const result = await session.run(cypher, params);\n return result.records.map((rec) => {\n try {\n return rec.toObject();\n } catch {\n const obj: Record<string, unknown> = {};\n for (const key of rec.keys) {\n obj[key] = unwrapNeo4jValue(rec.get(key));\n }\n return obj;\n }\n });\n });\n }\n\n private async ensureMemoryNode(id: string): Promise<void> {\n await this.run(\n `MERGE (m:Memory { id: $id })\n ON CREATE SET\n m.organization = '',\n m.agent = '',\n m.content_text = '',\n m.metadata_json = '{}',\n m.archived = false,\n m.compressed_into = '',\n m.created_at = '',\n m.updated_at = ''`,\n { id },\n );\n }\n\n async linkMemories(\n fromId: string,\n toId: string,\n relation: string,\n metadata?: Record<string, unknown>,\n ): Promise<void> {\n await this.ensureMemoryNode(fromId);\n await this.ensureMemoryNode(toId);\n await this.run(\n `MATCH (a:Memory { id: $fromId }), (b:Memory { id: $toId })\n MERGE (a)-[r:RELATED { relation: $relation }]->(b)\n SET r.metadata_json = $metadata`,\n {\n fromId,\n toId,\n relation,\n metadata: serializeMetadata(metadata),\n },\n );\n }\n\n async unlinkMemories(\n fromId: string,\n toId: string,\n relation?: string,\n ): Promise<void> {\n if (relation !== undefined) {\n await this.run(\n `MATCH (a:Memory { id: $fromId })-[r:RELATED { relation: $relation }]->(b:Memory { id: $toId })\n DELETE r`,\n { fromId, toId, relation },\n );\n return;\n }\n await this.run(\n `MATCH (a:Memory { id: $fromId })-[r:RELATED]->(b:Memory { id: $toId })\n DELETE r`,\n { fromId, toId },\n );\n }\n\n /**\n * Native Neo4j variable-length path traversal.\n * Relationship filter uses RELATED.relation property for parity with Kuzu.\n */\n async getRelated(\n memoryId: string,\n options?: GetRelatedOptions,\n ): Promise<MemoryRecord[]> {\n const depth = Math.max(1, Math.min(options?.depth ?? 1, 16));\n const direction = options?.direction ?? \"both\";\n const relation = options?.relation;\n\n // Build direction-specific pattern. Depth is inlined (integer) — Neo4j\n // does not allow parameters inside [*1..n] in all versions.\n const pathPattern =\n direction === \"out\"\n ? `(start)-[:RELATED*1..${depth}]->(n:Memory)`\n : direction === \"in\"\n ? `(start)<-[:RELATED*1..${depth}]-(n:Memory)`\n : `(start)-[:RELATED*1..${depth}]-(n:Memory)`;\n\n const cypher = relation\n ? `MATCH (start:Memory { id: $id }), p = ${pathPattern}\n WHERE ALL(r IN relationships(p) WHERE r.relation = $relation)\n AND n.id <> $id\n RETURN DISTINCT\n n.id AS id, n.organization AS organization, n.agent AS agent,\n n.content_text AS content_text, n.metadata_json AS metadata_json,\n n.archived AS archived, n.compressed_into AS compressed_into,\n n.created_at AS created_at, n.updated_at AS updated_at`\n : `MATCH (start:Memory { id: $id }), p = ${pathPattern}\n WHERE n.id <> $id\n RETURN DISTINCT\n n.id AS id, n.organization AS organization, n.agent AS agent,\n n.content_text AS content_text, n.metadata_json AS metadata_json,\n n.archived AS archived, n.compressed_into AS compressed_into,\n n.created_at AS created_at, n.updated_at AS updated_at`;\n\n const params: Record<string, unknown> = { id: memoryId };\n if (relation !== undefined) params.relation = relation;\n\n const rows = await this.run(cypher, params);\n return rows.map((row) =>\n rowToMemoryRecord(unwrapRow(row)),\n );\n }\n\n async upsertEntity(entity: GraphEntityInput): Promise<string> {\n const id = entityIdFrom(entity.name, entity.type);\n await this.run(\n `MERGE (e:Entity { id: $id })\n SET e.name = $name, e.type = $type, e.metadata_json = $metadata`,\n {\n id,\n name: entity.name,\n type: entity.type,\n metadata: serializeMetadata(entity.metadata),\n },\n );\n return id;\n }\n\n async linkEntityToMemory(\n entityId: string,\n memoryId: string,\n role?: string,\n ): Promise<void> {\n await this.ensureMemoryNode(memoryId);\n const found = await this.run(\n `MATCH (e:Entity { id: $id }) RETURN e.id AS id`,\n { id: entityId },\n );\n if (found.length === 0) {\n throw new DatabaseError(`Entity not found: ${entityId}`, {\n operation: \"linkEntityToMemory\",\n });\n }\n await this.run(\n `MATCH (e:Entity { id: $entityId }), (m:Memory { id: $memoryId })\n MERGE (e)-[r:MENTIONS]->(m)\n SET r.role = $role`,\n { entityId, memoryId, role: role ?? \"\" },\n );\n }\n\n async deleteMemory(memoryId: string): Promise<void> {\n await this.run(\n `MATCH (m:Memory { id: $id })\n DETACH DELETE m`,\n { id: memoryId },\n );\n }\n\n async query(\n cypher: string,\n params?: Record<string, unknown>,\n ): Promise<unknown> {\n return this.run(cypher, params ?? {});\n }\n\n async health(): Promise<GraphHealthResult> {\n try {\n if (!this.opened || !this.driver) {\n return { ok: false, backend: \"neo4j\", details: { reason: \"not open\" } };\n }\n await this.driver.verifyConnectivity();\n let serverInfo: unknown = undefined;\n if (typeof this.driver.getServerInfo === \"function\") {\n serverInfo = await this.driver.getServerInfo();\n }\n return {\n ok: true,\n backend: \"neo4j\",\n details: {\n url: this.url,\n database: this.database ?? \"default\",\n networked: true,\n serverInfo,\n },\n };\n } catch (error) {\n return {\n ok: false,\n backend: \"neo4j\",\n details: {\n url: this.url,\n error: error instanceof Error ? error.message : String(error),\n },\n };\n }\n }\n}\n\nfunction unwrapNeo4jValue(value: unknown): unknown {\n if (value == null) return value;\n if (typeof value === \"object\" && value !== null && \"toNumber\" in value) {\n try {\n return (value as { toNumber: () => number }).toNumber();\n } catch {\n /* Integer overflow — keep as-is */\n }\n }\n if (typeof value === \"object\" && value !== null && \"properties\" in value) {\n return unwrapRow(\n (value as { properties: Record<string, unknown> }).properties,\n );\n }\n return value;\n}\n\nfunction unwrapRow(row: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(row)) {\n out[k] = unwrapNeo4jValue(v);\n }\n return out;\n}\n","/**\n * Configuration validation for SDK initialization and constructor options.\n */\n\nimport type {\n WolbargOptions,\n StorageInput,\n GraphInput,\n} from \"./options.js\";\nimport {\n isEmbeddingProvider,\n isGraphProvider,\n isLlmProvider,\n isStorageProvider,\n isTelemetryProvider,\n resolveDatabaseUrl,\n} from \"./options.js\";\nimport type {\n DatabaseConfig,\n EmbeddingConfig,\n InitOptions,\n LlmConfig,\n StorageConfig,\n TelemetryConfig,\n} from \"../types/index.js\";\nimport { ConfigurationError } from \"../errors/index.js\";\nimport { SqliteGraphProvider } from \"../graph/providers/sqlite-graph.js\";\nimport { Neo4jGraphProvider } from \"../graph/providers/neo4j.js\";\nimport type { GraphConfig, GraphProvider } from \"../graph/types.js\";\n\nfunction assertNonEmpty(value: unknown, fieldName: string): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new ConfigurationError(`${fieldName} must be a non-empty string`);\n }\n}\n\nfunction assertUrl(value: string, fieldName: string): void {\n assertNonEmpty(value, fieldName);\n try {\n // eslint-disable-next-line no-new\n new URL(value);\n } catch {\n throw new ConfigurationError(\n `${fieldName} must be a valid absolute URL (got \"${value}\")`,\n );\n }\n}\n\nexport function validateEmbeddingConfig(config: EmbeddingConfig): EmbeddingConfig {\n assertUrl(config.baseUrl, \"embedding.baseUrl\");\n assertNonEmpty(config.apiKey, \"embedding.apiKey\");\n assertNonEmpty(config.model, \"embedding.model\");\n if (\n config.timeoutMs !== undefined &&\n (!Number.isFinite(config.timeoutMs) || config.timeoutMs <= 0)\n ) {\n throw new ConfigurationError(\"embedding.timeoutMs must be a positive number\");\n }\n return {\n baseUrl: config.baseUrl.trim().replace(/\\/+$/, \"\"),\n apiKey: config.apiKey,\n model: config.model.trim(),\n ...(config.timeoutMs !== undefined ? { timeoutMs: config.timeoutMs } : {}),\n };\n}\n\nexport function validateLlmConfig(config: LlmConfig): LlmConfig {\n assertUrl(config.baseUrl, \"llm.baseUrl\");\n assertNonEmpty(config.apiKey, \"llm.apiKey\");\n assertNonEmpty(config.model, \"llm.model\");\n if (\n config.temperature !== undefined &&\n (!Number.isFinite(config.temperature) ||\n config.temperature < 0 ||\n config.temperature > 2)\n ) {\n throw new ConfigurationError(\"llm.temperature must be between 0 and 2\");\n }\n if (\n config.maxTokens !== undefined &&\n (!Number.isFinite(config.maxTokens) || config.maxTokens <= 0)\n ) {\n throw new ConfigurationError(\"llm.maxTokens must be a positive number\");\n }\n if (\n config.timeoutMs !== undefined &&\n (!Number.isFinite(config.timeoutMs) || config.timeoutMs <= 0)\n ) {\n throw new ConfigurationError(\"llm.timeoutMs must be a positive number\");\n }\n return {\n baseUrl: config.baseUrl.trim().replace(/\\/+$/, \"\"),\n apiKey: config.apiKey,\n model: config.model.trim(),\n ...(config.temperature !== undefined ? { temperature: config.temperature } : {}),\n ...(config.maxTokens !== undefined ? { maxTokens: config.maxTokens } : {}),\n ...(config.timeoutMs !== undefined ? { timeoutMs: config.timeoutMs } : {}),\n };\n}\n\nexport function normalizeDatabaseConfig(\n config: DatabaseConfig | StorageConfig,\n): DatabaseConfig {\n const provider = config.provider;\n if (provider !== \"sqlite\" && provider !== \"postgres\") {\n throw new ConfigurationError(\n `Unsupported database provider \"${String((config as { provider?: string }).provider)}\". Supported: \"sqlite\", \"postgres\".`,\n );\n }\n const connectionString = resolveDatabaseUrl(config).trim();\n assertNonEmpty(connectionString, \"database.url / database.connectionString\");\n\n if (provider === \"postgres\") {\n return {\n provider: \"postgres\",\n connectionString,\n url: connectionString,\n ...(\"maxPoolSize\" in config && config.maxPoolSize !== undefined\n ? { maxPoolSize: config.maxPoolSize }\n : {}),\n ...(\"durableWrites\" in config && config.durableWrites !== undefined\n ? { durableWrites: config.durableWrites }\n : {}),\n };\n }\n return {\n provider: \"sqlite\",\n connectionString,\n url: connectionString,\n };\n}\n\nexport function validateTelemetryConfig(config: TelemetryConfig): TelemetryConfig {\n if (!config.database || typeof config.database !== \"object\") {\n throw new ConfigurationError(\"telemetry.database is required when telemetry is enabled\");\n }\n const providerName = String(\n (config.database as { provider?: string }).provider ?? \"\",\n );\n if (providerName === \"kuzu\" || providerName === \"neo4j\") {\n throw new ConfigurationError(\n `telemetry supports sqlite or postgres only (got \"${providerName}\")`,\n {\n reason: `provider=${providerName}`,\n suggestion:\n 'Use telemetry: { database: { provider: \"sqlite\", url: \"./telemetry.db\" } }. Graph backends (kuzu/neo4j) are not valid telemetry stores.',\n },\n );\n }\n if (config.database.provider !== \"sqlite\") {\n throw new ConfigurationError(\n `Unsupported telemetry provider \"${config.database.provider}\". Only \"sqlite\" is implemented; PostgreSQL typed but not implemented. Telemetry supports sqlite or postgres only — not kuzu/neo4j.`,\n {\n reason: `provider=${config.database.provider}`,\n suggestion: 'Use telemetry: { database: { provider: \"sqlite\", url: \"./telemetry.db\" } }',\n },\n );\n }\n const url =\n config.database.url?.trim() ||\n config.database.connectionString?.trim() ||\n \"\";\n assertNonEmpty(url, \"telemetry.database.url\");\n\n const level = config.level ?? \"info\";\n const allowed = new Set([\"off\", \"error\", \"warn\", \"info\", \"debug\", \"trace\"]);\n if (!allowed.has(level)) {\n throw new ConfigurationError(`Invalid telemetry.level \"${level}\"`);\n }\n\n return {\n enabled: config.enabled ?? true,\n database: {\n provider: \"sqlite\",\n url,\n connectionString: url,\n },\n level,\n captureQueries: config.captureQueries ?? true,\n captureLatency: config.captureLatency ?? true,\n captureErrors: config.captureErrors ?? true,\n captureSimilarity: config.captureSimilarity ?? true,\n captureEmbeddings: config.captureEmbeddings ?? false,\n };\n}\n\n/**\n * Validate and normalize init options (v0.1 compat).\n */\nexport function validateInitOptions(options: InitOptions): InitOptions {\n if (options === null || typeof options !== \"object\") {\n throw new ConfigurationError(\"init options must be an object\");\n }\n\n assertNonEmpty(options.organization, \"organization\");\n\n if (!options.database || typeof options.database !== \"object\") {\n throw new ConfigurationError(\"database configuration is required\");\n }\n\n const database = normalizeDatabaseConfig(options.database);\n\n if (!options.embedding || typeof options.embedding !== \"object\") {\n throw new ConfigurationError(\"embedding configuration is required\");\n }\n\n const embedding = validateEmbeddingConfig(options.embedding);\n const llm = options.llm ? validateLlmConfig(options.llm) : undefined;\n\n return {\n organization: options.organization.trim(),\n database,\n embedding,\n ...(llm ? { llm } : {}),\n };\n}\n\nfunction resolveStorageInput(options: WolbargOptions): StorageInput {\n if (options.storage && options.database) {\n throw new ConfigurationError(\n \"Pass either storage or database, not both\",\n );\n }\n const input = options.storage ?? options.database;\n if (!input) {\n throw new ConfigurationError(\"storage or database is required\");\n }\n return input;\n}\n\nexport function validateWolbargOptions(options: WolbargOptions): WolbargOptions {\n if (options === null || typeof options !== \"object\") {\n throw new ConfigurationError(\"Wolbarg options must be an object\");\n }\n assertNonEmpty(options.organization, \"organization\");\n\n const storageInput = resolveStorageInput(options);\n let storage: StorageInput = storageInput;\n if (!isStorageProvider(storageInput)) {\n storage = normalizeDatabaseConfig(storageInput);\n }\n\n if (!options.embedding) {\n throw new ConfigurationError(\"embedding is required\");\n }\n if (!isEmbeddingProvider(options.embedding)) {\n validateEmbeddingConfig(options.embedding);\n }\n\n if (options.llm !== undefined && !isLlmProvider(options.llm)) {\n validateLlmConfig(options.llm);\n }\n\n let telemetry = options.telemetry;\n if (telemetry && !isTelemetryProvider(telemetry)) {\n telemetry = validateTelemetryConfig(telemetry);\n }\n\n let graph = options.graph;\n if (graph !== undefined) {\n graph = resolveGraphInput(graph);\n }\n\n return {\n ...options,\n organization: options.organization.trim(),\n storage,\n database: undefined,\n ...(telemetry ? { telemetry } : {}),\n ...(graph !== undefined ? { graph } : {}),\n };\n}\n\n/**\n * Accept a GraphProvider instance or `{ provider: \"sqlite\" | \"neo4j\", … }` config.\n * Throws ConfigurationError on garbage input.\n */\nexport function resolveGraphInput(input: GraphInput): GraphProvider {\n if (input == null || typeof input !== \"object\") {\n throw new ConfigurationError(\n \"graph must be a GraphProvider instance or a config object\",\n {\n suggestion:\n \"Use graph: sqliteGraph({ path }) or graph: neo4jGraph({ url, username, password })\",\n },\n );\n }\n if (Array.isArray(input)) {\n throw new ConfigurationError(\n \"graph must be a GraphProvider instance or a config object\",\n {\n suggestion:\n \"Use graph: sqliteGraph({ path }) or graph: neo4jGraph({ url, username, password })\",\n },\n );\n }\n if (isGraphProvider(input)) {\n return input;\n }\n const config = input as GraphConfig;\n if (config.provider === \"sqlite\") {\n if (typeof config.path !== \"string\" || !config.path.trim()) {\n throw new ConfigurationError(\n 'graph sqlite config requires a non-empty \"path\"',\n );\n }\n return new SqliteGraphProvider({ path: config.path });\n }\n if (config.provider === \"neo4j\") {\n if (typeof config.url !== \"string\" || !config.url.trim()) {\n throw new ConfigurationError('graph neo4j config requires a non-empty \"url\"');\n }\n if (typeof config.username !== \"string\" || !config.username.trim()) {\n throw new ConfigurationError(\n 'graph neo4j config requires a non-empty \"username\"',\n );\n }\n if (typeof config.password !== \"string\") {\n throw new ConfigurationError('graph neo4j config requires a \"password\" string');\n }\n return new Neo4jGraphProvider({\n url: config.url,\n username: config.username,\n password: config.password,\n database: config.database,\n });\n }\n throw new ConfigurationError(\n `Unsupported graph provider \"${String((config as { provider?: string }).provider)}\". Supported: \"sqlite\", \"neo4j\", or a GraphProvider instance.`,\n {\n suggestion:\n 'Use graph: sqliteGraph({ path: \"./local-graph.db\" }) or graph: neo4jGraph({ url, username, password })',\n },\n );\n}\n","/**\n * Cross-platform structured logger gated by TelemetryLogLevel.\n */\n\nimport type { TelemetryLogLevel } from \"./types.js\";\n\nconst LEVEL_ORDER: Record<TelemetryLogLevel, number> = {\n off: 100,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10,\n};\n\nexport class WolbargLogger {\n constructor(private level: TelemetryLogLevel = \"info\") {}\n\n setLevel(level: TelemetryLogLevel): void {\n this.level = level;\n }\n\n getLevel(): TelemetryLogLevel {\n return this.level;\n }\n\n error(message: string, extra?: unknown): void {\n this.write(\"error\", message, extra);\n }\n\n warn(message: string, extra?: unknown): void {\n this.write(\"warn\", message, extra);\n }\n\n info(message: string, extra?: unknown): void {\n this.write(\"info\", message, extra);\n }\n\n debug(message: string, extra?: unknown): void {\n this.write(\"debug\", message, extra);\n }\n\n trace(message: string, extra?: unknown): void {\n this.write(\"trace\", message, extra);\n }\n\n private write(level: TelemetryLogLevel, message: string, extra?: unknown): void {\n if (LEVEL_ORDER[level] < LEVEL_ORDER[this.level]) {\n return;\n }\n if (this.level === \"off\") {\n return;\n }\n const line = `[wolbarg:${level}] ${message}`;\n if (level === \"error\") {\n console.error(line, extra ?? \"\");\n } else if (level === \"warn\") {\n console.warn(line, extra ?? \"\");\n } else {\n console.log(line, extra ?? \"\");\n }\n }\n}\n","/**\n * Trace context helpers — session_id, trace_id, parent_trace_id.\n */\n\nimport { createId } from \"../utils/index.js\";\n\nexport interface TraceContext {\n sessionId: string;\n traceId: string;\n parentTraceId: string | null;\n}\n\nexport function createSessionId(): string {\n return createId();\n}\n\nexport function createTraceId(): string {\n return createId();\n}\n\nexport function createRootTrace(sessionId: string): TraceContext {\n return {\n sessionId,\n traceId: createTraceId(),\n parentTraceId: null,\n };\n}\n\nexport function createChildTrace(parent: TraceContext): TraceContext {\n return {\n sessionId: parent.sessionId,\n traceId: createTraceId(),\n parentTraceId: parent.traceId,\n };\n}\n","/**\n * Async telemetry emitter that never blocks memory operations.\n */\n\nimport type { TelemetryProvider } from \"../providers/interfaces/TelemetryProvider.js\";\nimport type {\n LatencyBreakdown,\n StageSpan,\n TelemetryConfig,\n TelemetryEventInput,\n TelemetryOperation,\n TelemetryStatus,\n} from \"./types.js\";\nimport { WolbargLogger } from \"./logger.js\";\nimport {\n createChildTrace,\n createRootTrace,\n createSessionId,\n type TraceContext,\n} from \"./trace.js\";\nimport { createId, nowIso } from \"../utils/index.js\";\n\nexport class NoopTelemetryProvider implements TelemetryProvider {\n readonly name = \"noop\";\n\n async open(): Promise<void> {}\n async close(): Promise<void> {}\n emit(_event: TelemetryEventInput): void {}\n async flush(): Promise<void> {}\n}\n\nexport interface OperationTraceHandle {\n context: TraceContext;\n startedAt: number;\n latency: Partial<LatencyBreakdown>;\n child(operation: TelemetryOperation): OperationTraceHandle;\n mark(stage: keyof Omit<LatencyBreakdown, \"totalMs\">, ms: number): void;\n success(fields?: Partial<TelemetryEventInput>): void;\n failure(error: unknown, fields?: Partial<TelemetryEventInput>): void;\n}\n\nexport interface TelemetryEmitterContext {\n organization?: string | null;\n}\n\nexport class TelemetryEmitter {\n readonly sessionId: string;\n readonly logger: WolbargLogger;\n private provider: TelemetryProvider;\n private readonly config: Required<\n Pick<\n TelemetryConfig,\n | \"enabled\"\n | \"level\"\n | \"captureQueries\"\n | \"captureLatency\"\n | \"captureErrors\"\n | \"captureSimilarity\"\n | \"captureEmbeddings\"\n >\n >;\n private readonly context: TelemetryEmitterContext;\n\n constructor(\n provider: TelemetryProvider | null,\n config?: Partial<TelemetryConfig>,\n context: TelemetryEmitterContext = {},\n ) {\n this.sessionId = createSessionId();\n this.provider = provider ?? new NoopTelemetryProvider();\n this.config = {\n enabled: config?.enabled ?? Boolean(provider),\n level: config?.level ?? \"info\",\n captureQueries: config?.captureQueries ?? true,\n captureLatency: config?.captureLatency ?? true,\n captureErrors: config?.captureErrors ?? true,\n captureSimilarity: config?.captureSimilarity ?? true,\n captureEmbeddings: config?.captureEmbeddings ?? false,\n };\n this.context = context;\n this.logger = new WolbargLogger(this.config.level);\n }\n\n get enabled(): boolean {\n return this.config.enabled && this.provider.name !== \"noop\";\n }\n\n setProvider(provider: TelemetryProvider): void {\n this.provider = provider;\n }\n\n async open(): Promise<void> {\n if (!this.config.enabled) {\n return;\n }\n await this.provider.open();\n }\n\n async close(): Promise<void> {\n await this.provider.flush();\n await this.provider.close();\n }\n\n async flush(): Promise<void> {\n await this.provider.flush();\n }\n\n start(operation: TelemetryOperation, parent?: TraceContext): OperationTraceHandle {\n const context = parent\n ? createChildTrace(parent)\n : createRootTrace(this.sessionId);\n const startedAt = performance.now();\n const latency: Partial<LatencyBreakdown> = {};\n const spans: StageSpan[] = [];\n const self = this;\n\n const finish = (\n status: TelemetryStatus,\n fields?: Partial<TelemetryEventInput>,\n error?: unknown,\n ): void => {\n const totalMs = performance.now() - startedAt;\n const errMessage =\n error instanceof Error\n ? error.message\n : error\n ? String(error)\n : fields?.error ?? null;\n const errStack =\n error instanceof Error ? error.stack ?? null : fields?.errorStack ?? null;\n\n if (status === \"error\") {\n self.logger.error(`${operation} failed: ${errMessage ?? \"unknown\"}`);\n } else {\n self.logger.debug(`${operation} completed in ${totalMs.toFixed(2)}ms`);\n }\n\n if (!self.config.enabled) {\n return;\n }\n\n const event: TelemetryEventInput = {\n id: createId(),\n timestamp: nowIso(),\n operation,\n status,\n sessionId: context.sessionId,\n traceId: context.traceId,\n parentTraceId: context.parentTraceId,\n organization: fields?.organization ?? self.context.organization ?? null,\n agentId: fields?.agentId ?? null,\n tags: fields?.tags ?? null,\n checkpointId: fields?.checkpointId ?? null,\n durationMs: totalMs,\n provider: fields?.provider ?? null,\n query: self.config.captureQueries ? (fields?.query ?? null) : null,\n filters: fields?.filters ?? null,\n returnedCount: fields?.returnedCount ?? null,\n memoryIds: fields?.memoryIds ?? null,\n similarityScores: self.config.captureSimilarity\n ? (fields?.similarityScores ?? null)\n : null,\n metadata: fields?.metadata ?? null,\n embeddingProvider: fields?.embeddingProvider ?? null,\n model: fields?.model ?? null,\n error: self.config.captureErrors ? errMessage : null,\n errorStack: self.config.captureErrors ? errStack : null,\n userMetadata: fields?.userMetadata ?? null,\n extra: fields?.extra ?? null,\n latency: self.config.captureLatency\n ? { ...latency, totalMs, ...(fields?.latency ?? {}) }\n : { totalMs },\n explain: fields?.explain ?? null,\n spans: self.config.captureLatency\n ? [...spans, ...(fields?.spans ?? [])]\n : null,\n };\n\n // Never await — memory path must stay non-blocking.\n self.provider.emit(event);\n };\n\n return {\n context,\n startedAt,\n latency,\n child(childOp: TelemetryOperation): OperationTraceHandle {\n return self.start(childOp, context);\n },\n mark(stage, ms) {\n latency[stage] = ms;\n const elapsed = performance.now() - startedAt;\n spans.push({\n name: stage,\n startMs: Math.max(0, elapsed - ms),\n durationMs: ms,\n });\n },\n success(fields) {\n finish(\"ok\", fields);\n },\n failure(error, fields) {\n finish(\"error\", fields, error);\n },\n };\n }\n\n emitStartup(provider: string): void {\n const trace = this.start(\"startup\");\n trace.success({ provider });\n }\n\n emitShutdown(provider: string): void {\n const trace = this.start(\"shutdown\");\n trace.success({ provider });\n }\n}\n","/**\n * SQLite EventDatabase — completely separate from the memory database.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DatabaseSync, type StatementSync } from \"node:sqlite\";\n\nimport { DatabaseError, InitializationError } from \"../../errors/index.js\";\nimport type { EventDatabase } from \"../interfaces/EventDatabase.js\";\nimport type {\n LatencyBreakdown,\n PersistedRecallExplainPayload,\n StageSpan,\n TelemetryEvent,\n TelemetryEventInput,\n TelemetryQuery,\n TelemetryQueryResult,\n} from \"../../telemetry/types.js\";\nimport { createId, nowIso } from \"../../utils/index.js\";\n\nconst SCHEMA_SQL = `\nCREATE TABLE IF NOT EXISTS telemetry_events (\n id TEXT PRIMARY KEY,\n timestamp TEXT NOT NULL,\n operation TEXT NOT NULL,\n provider TEXT,\n duration_ms REAL,\n status TEXT NOT NULL,\n query TEXT,\n filters_json TEXT,\n returned_count INTEGER,\n memory_ids_json TEXT,\n similarity_scores_json TEXT,\n metadata_json TEXT,\n embedding_provider TEXT,\n model TEXT,\n error TEXT,\n error_stack TEXT,\n session_id TEXT NOT NULL,\n trace_id TEXT NOT NULL,\n parent_trace_id TEXT,\n user_metadata_json TEXT,\n extra_json TEXT,\n latency_json TEXT,\n organization TEXT,\n agent_id TEXT,\n tags_json TEXT,\n checkpoint_id TEXT,\n explain_json TEXT,\n spans_json TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_telemetry_timestamp ON telemetry_events(timestamp);\nCREATE INDEX IF NOT EXISTS idx_telemetry_operation ON telemetry_events(operation);\nCREATE INDEX IF NOT EXISTS idx_telemetry_trace ON telemetry_events(trace_id);\nCREATE INDEX IF NOT EXISTS idx_telemetry_session ON telemetry_events(session_id);\nCREATE INDEX IF NOT EXISTS idx_telemetry_status ON telemetry_events(status);\n`;\n\nconst V2_COLUMNS = {\n organization: \"TEXT\",\n agent_id: \"TEXT\",\n tags_json: \"TEXT\",\n checkpoint_id: \"TEXT\",\n explain_json: \"TEXT\",\n spans_json: \"TEXT\",\n} as const;\n\nconst V2_INDEXES_SQL = `\nCREATE INDEX IF NOT EXISTS idx_telemetry_agent ON telemetry_events(agent_id);\nCREATE INDEX IF NOT EXISTS idx_telemetry_org ON telemetry_events(organization);\nCREATE INDEX IF NOT EXISTS idx_telemetry_checkpoint ON telemetry_events(checkpoint_id);\nCREATE INDEX IF NOT EXISTS idx_telemetry_operation_time ON telemetry_events(operation, timestamp);\nCREATE INDEX IF NOT EXISTS idx_telemetry_status_time ON telemetry_events(status, timestamp);\n`;\n\nexport interface SqliteEventDatabaseOptions {\n url: string;\n /** When true, open read-only (Studio). */\n readonly?: boolean;\n}\n\nexport class SqliteEventDatabase implements EventDatabase {\n readonly name = \"sqlite\";\n private readonly url: string;\n private readonly readonly: boolean;\n private db: DatabaseSync | null = null;\n private insertStmt: StatementSync | null = null;\n private columns = new Set<string>();\n\n constructor(options: SqliteEventDatabaseOptions) {\n this.url = options.url;\n this.readonly = options.readonly ?? false;\n }\n\n async open(): Promise<void> {\n try {\n const dbPath = this.resolvePath(this.url);\n if (dbPath !== \":memory:\" && !this.readonly) {\n fs.mkdirSync(path.dirname(dbPath), { recursive: true });\n }\n\n const db = new DatabaseSync(dbPath, {\n allowExtension: false,\n readOnly: this.readonly,\n });\n this.db = db;\n\n if (!this.readonly) {\n db.exec(\"PRAGMA journal_mode = WAL;\");\n db.exec(`\n PRAGMA synchronous = NORMAL;\n PRAGMA busy_timeout = 5000;\n PRAGMA temp_store = MEMORY;\n `);\n db.exec(SCHEMA_SQL);\n this.migrateToV2(db);\n }\n this.columns = readColumns(db);\n if (!this.readonly) {\n this.insertStmt = db.prepare(`\n INSERT INTO telemetry_events (\n id, timestamp, operation, provider, duration_ms, status,\n query, filters_json, returned_count, memory_ids_json,\n similarity_scores_json, metadata_json, embedding_provider, model,\n error, error_stack, session_id, trace_id, parent_trace_id,\n user_metadata_json, extra_json, latency_json, organization,\n agent_id, tags_json, checkpoint_id, explain_json, spans_json\n ) VALUES (\n ?, ?, ?, ?, ?, ?,\n ?, ?, ?, ?,\n ?, ?, ?, ?,\n ?, ?, ?, ?, ?,\n ?, ?, ?, ?,\n ?, ?, ?, ?, ?\n )\n `);\n }\n } catch (error) {\n try {\n this.db?.close();\n } catch {\n // ignore\n }\n this.db = null;\n this.columns.clear();\n throw new InitializationError(\n `Failed to open telemetry EventDatabase: ${describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async close(): Promise<void> {\n if (!this.db) return;\n try {\n this.db.close();\n } finally {\n this.db = null;\n this.insertStmt = null;\n this.columns.clear();\n }\n }\n\n async insertEvent(input: TelemetryEventInput): Promise<TelemetryEvent> {\n const event = normalizeEvent(input);\n const stmt = this.insertStmt;\n if (!stmt) {\n throw new DatabaseError(\"Telemetry EventDatabase is not open for writes\");\n }\n try {\n stmt.run(\n event.id,\n event.timestamp,\n event.operation,\n event.provider,\n event.durationMs,\n event.status,\n event.query,\n jsonOrNull(event.filters),\n event.returnedCount,\n jsonOrNull(event.memoryIds),\n jsonOrNull(event.similarityScores),\n jsonOrNull(event.metadata),\n event.embeddingProvider,\n event.model,\n event.error,\n event.errorStack,\n event.sessionId,\n event.traceId,\n event.parentTraceId,\n jsonOrNull(event.userMetadata),\n jsonOrNull(event.extra),\n jsonOrNull(event.latency),\n event.organization,\n event.agentId,\n jsonOrNull(event.tags),\n event.checkpointId,\n jsonOrNull(event.explain),\n jsonOrNull(event.spans),\n );\n return event;\n } catch (error) {\n throw new DatabaseError(\n `Failed to write telemetry event: ${describe(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n async insertEvents(inputs: TelemetryEventInput[]): Promise<TelemetryEvent[]> {\n const db = this.requireDb();\n const out: TelemetryEvent[] = [];\n db.exec(\"BEGIN\");\n try {\n for (const input of inputs) {\n out.push(await this.insertEvent(input));\n }\n db.exec(\"COMMIT\");\n return out;\n } catch (error) {\n try {\n db.exec(\"ROLLBACK\");\n } catch {\n // ignore\n }\n throw error;\n }\n }\n\n async query(options: TelemetryQuery): Promise<TelemetryQueryResult> {\n const db = this.requireDb();\n const clauses: string[] = [];\n const params: Array<string | number> = [];\n\n if (options.operation) {\n const ops = Array.isArray(options.operation)\n ? options.operation\n : [options.operation];\n clauses.push(`operation IN (${ops.map(() => \"?\").join(\",\")})`);\n params.push(...ops);\n }\n if (options.status) {\n clauses.push(`status = ?`);\n params.push(options.status);\n }\n if (options.traceId) {\n clauses.push(`(trace_id = ? OR parent_trace_id = ?)`);\n params.push(options.traceId, options.traceId);\n }\n if (options.sessionId) {\n clauses.push(`session_id = ?`);\n params.push(options.sessionId);\n }\n this.addOptionalColumnFilter(\n clauses,\n params,\n \"organization\",\n options.organization,\n );\n this.addOptionalColumnFilter(clauses, params, \"agent_id\", options.agentId);\n this.addOptionalColumnFilter(\n clauses,\n params,\n \"checkpoint_id\",\n options.checkpointId,\n );\n if (options.tag) {\n if (this.columns.has(\"tags_json\")) {\n clauses.push(\n `EXISTS (SELECT 1 FROM json_each(tags_json) WHERE json_each.value = ?)`,\n );\n params.push(options.tag);\n } else {\n clauses.push(\"0 = 1\");\n }\n }\n if (options.memoryId) {\n clauses.push(`memory_ids_json LIKE ?`);\n params.push(`%${options.memoryId}%`);\n }\n if (options.queryText) {\n clauses.push(`query LIKE ?`);\n params.push(`%${options.queryText}%`);\n }\n if (options.since) {\n clauses.push(`timestamp >= ?`);\n params.push(options.since);\n }\n if (options.until) {\n clauses.push(`timestamp <= ?`);\n params.push(options.until);\n }\n\n const where = clauses.length > 0 ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n const sortCol =\n options.sortBy === \"duration_ms\" ? \"duration_ms\" : \"timestamp\";\n const sortDir = options.sortDir === \"asc\" ? \"ASC\" : \"DESC\";\n const limit = options.limit ?? 50;\n const offset = options.offset ?? 0;\n\n const totalRow = db\n .prepare(`SELECT COUNT(*) AS c FROM telemetry_events ${where}`)\n .get(...params) as { c: number | bigint };\n const rows = db\n .prepare(\n `SELECT * FROM telemetry_events ${where}\n ORDER BY ${sortCol} ${sortDir}\n LIMIT ? OFFSET ?`,\n )\n .all(...params, limit, offset) as unknown as Row[];\n\n return {\n events: rows.map(rowToEvent),\n total: Number(totalRow.c),\n limit,\n offset,\n };\n }\n\n async getEvent(id: string): Promise<TelemetryEvent | null> {\n const db = this.requireDb();\n const row = db\n .prepare(`SELECT * FROM telemetry_events WHERE id = ?`)\n .get(id) as Row | undefined;\n return row ? rowToEvent(row) : null;\n }\n\n async countEvents(filter?: {\n since?: string;\n operation?: string;\n }): Promise<number> {\n const db = this.requireDb();\n const clauses: string[] = [];\n const params: string[] = [];\n if (filter?.since) {\n clauses.push(`timestamp >= ?`);\n params.push(filter.since);\n }\n if (filter?.operation) {\n clauses.push(`operation = ?`);\n params.push(filter.operation);\n }\n const where = clauses.length ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n const row = db\n .prepare(`SELECT COUNT(*) AS c FROM telemetry_events ${where}`)\n .get(...params) as { c: number | bigint };\n return Number(row.c);\n }\n\n private requireDb(): DatabaseSync {\n if (!this.db) {\n throw new DatabaseError(\"Telemetry EventDatabase is not open\");\n }\n return this.db;\n }\n\n private migrateToV2(db: DatabaseSync): void {\n const columns = readColumns(db);\n for (const [name, type] of Object.entries(V2_COLUMNS)) {\n if (!columns.has(name)) {\n db.exec(`ALTER TABLE telemetry_events ADD COLUMN ${name} ${type};`);\n }\n }\n db.exec(`\n CREATE TABLE IF NOT EXISTS telemetry_meta (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n INSERT INTO telemetry_meta(key, value) VALUES ('schema_version', '2')\n ON CONFLICT(key) DO UPDATE SET value = excluded.value;\n ${V2_INDEXES_SQL}\n `);\n }\n\n private addOptionalColumnFilter(\n clauses: string[],\n params: Array<string | number>,\n column: string,\n value: string | undefined,\n ): void {\n if (!value) return;\n if (!this.columns.has(column)) {\n clauses.push(\"0 = 1\");\n return;\n }\n clauses.push(`${column} = ?`);\n params.push(value);\n }\n\n private resolvePath(url: string): string {\n if (url === \":memory:\") return \":memory:\";\n return path.isAbsolute(url) ? url : path.resolve(process.cwd(), url);\n }\n}\n\ninterface Row {\n id: string;\n timestamp: string;\n operation: string;\n provider: string | null;\n duration_ms: number | null;\n status: string;\n query: string | null;\n filters_json: string | null;\n returned_count: number | null;\n memory_ids_json: string | null;\n similarity_scores_json: string | null;\n metadata_json: string | null;\n embedding_provider: string | null;\n model: string | null;\n error: string | null;\n error_stack: string | null;\n session_id: string;\n trace_id: string;\n parent_trace_id: string | null;\n user_metadata_json: string | null;\n extra_json: string | null;\n latency_json: string | null;\n organization?: string | null;\n agent_id?: string | null;\n tags_json?: string | null;\n checkpoint_id?: string | null;\n explain_json?: string | null;\n spans_json?: string | null;\n}\n\nfunction normalizeEvent(input: TelemetryEventInput): TelemetryEvent {\n return {\n id: input.id ?? createId(),\n timestamp: input.timestamp ?? nowIso(),\n operation: input.operation,\n provider: input.provider ?? null,\n durationMs: input.durationMs ?? null,\n status: input.status,\n query: input.query ?? null,\n filters: input.filters ?? null,\n returnedCount: input.returnedCount ?? null,\n memoryIds: input.memoryIds ?? null,\n similarityScores: input.similarityScores ?? null,\n metadata: input.metadata ?? null,\n embeddingProvider: input.embeddingProvider ?? null,\n model: input.model ?? null,\n error: input.error ?? null,\n errorStack: input.errorStack ?? null,\n sessionId: input.sessionId,\n traceId: input.traceId,\n parentTraceId: input.parentTraceId ?? null,\n organization: input.organization ?? null,\n agentId: input.agentId ?? null,\n tags: input.tags ?? null,\n checkpointId: input.checkpointId ?? null,\n userMetadata: input.userMetadata ?? null,\n extra: input.extra ?? null,\n latency: input.latency ?? null,\n explain: input.explain ?? null,\n spans: input.spans ?? null,\n };\n}\n\nfunction rowToEvent(row: Row): TelemetryEvent {\n return {\n id: row.id,\n timestamp: row.timestamp,\n operation: row.operation as TelemetryEvent[\"operation\"],\n provider: row.provider,\n durationMs: row.duration_ms,\n status: row.status as TelemetryEvent[\"status\"],\n query: row.query,\n filters: parseJson(row.filters_json),\n returnedCount: row.returned_count,\n memoryIds: parseJson(row.memory_ids_json) as string[] | null,\n similarityScores: parseJson(row.similarity_scores_json) as number[] | null,\n metadata: parseJson(row.metadata_json) as Record<string, unknown> | null,\n embeddingProvider: row.embedding_provider,\n model: row.model,\n error: row.error,\n errorStack: row.error_stack,\n sessionId: row.session_id,\n traceId: row.trace_id,\n parentTraceId: row.parent_trace_id,\n organization: row.organization ?? null,\n agentId: row.agent_id ?? null,\n tags: parseJson(row.tags_json ?? null) as string[] | null,\n checkpointId: row.checkpoint_id ?? null,\n userMetadata: parseJson(row.user_metadata_json) as Record<\n string,\n unknown\n > | null,\n extra: parseJson(row.extra_json) as Record<string, unknown> | null,\n latency: parseJson(row.latency_json) as LatencyBreakdown | null,\n explain: parseJson(\n row.explain_json ?? null,\n ) as PersistedRecallExplainPayload | null,\n spans: parseJson(row.spans_json ?? null) as StageSpan[] | null,\n };\n}\n\nfunction readColumns(db: DatabaseSync): Set<string> {\n const rows = db.prepare(\"PRAGMA table_info(telemetry_events)\").all() as Array<{\n name: string;\n }>;\n return new Set(rows.map((row) => row.name));\n}\n\nfunction jsonOrNull(value: unknown): string | null {\n if (value === undefined || value === null) return null;\n return JSON.stringify(value);\n}\n\nfunction parseJson(value: string | null): unknown {\n if (!value) return null;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n\nfunction describe(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","/**\n * SQLite TelemetryProvider backed by an independent EventDatabase.\n * Writes are queued and flushed asynchronously so memory ops stay fast.\n */\n\nimport type { TelemetryProvider } from \"../interfaces/TelemetryProvider.js\";\nimport type {\n TelemetryEvent,\n TelemetryEventInput,\n TelemetryQuery,\n TelemetryQueryResult,\n} from \"../../telemetry/types.js\";\nimport { SqliteEventDatabase } from \"./sqliteEventDatabase.js\";\n\nexport interface SqliteTelemetryProviderOptions {\n url: string;\n}\n\nexport class SqliteTelemetryProvider implements TelemetryProvider {\n readonly name = \"sqlite\";\n private readonly db: SqliteEventDatabase;\n private queue: TelemetryEventInput[] = [];\n private flushing: Promise<void> | null = null;\n private closed = false;\n private openPromise: Promise<void> | null = null;\n\n constructor(options: SqliteTelemetryProviderOptions) {\n this.db = new SqliteEventDatabase({ url: options.url });\n }\n\n async open(): Promise<void> {\n if (!this.openPromise) {\n this.openPromise = this.db.open();\n }\n await this.openPromise;\n this.closed = false;\n }\n\n async close(): Promise<void> {\n this.closed = true;\n await this.flush();\n await this.db.close();\n this.openPromise = null;\n }\n\n emit(event: TelemetryEventInput): void {\n if (this.closed) {\n return;\n }\n this.queue.push(event);\n void this.scheduleFlush();\n }\n\n async flush(): Promise<void> {\n while (this.queue.length > 0 || this.flushing) {\n await this.scheduleFlush();\n if (this.flushing) {\n await this.flushing;\n }\n }\n }\n\n async query(options: TelemetryQuery): Promise<TelemetryQueryResult> {\n await this.open();\n return this.db.query(options);\n }\n\n async getEvent(id: string): Promise<TelemetryEvent | null> {\n await this.open();\n return this.db.getEvent(id);\n }\n\n private scheduleFlush(): Promise<void> {\n if (this.flushing) {\n return this.flushing;\n }\n this.flushing = this.runFlush().finally(() => {\n this.flushing = null;\n });\n return this.flushing;\n }\n\n private async runFlush(): Promise<void> {\n if (this.queue.length === 0) {\n return;\n }\n await this.open();\n const batch = this.queue.splice(0, this.queue.length);\n try {\n if (typeof this.db.insertEvents === \"function\") {\n await this.db.insertEvents(batch);\n } else {\n for (const event of batch) {\n await this.db.insertEvent(event);\n }\n }\n } catch {\n // Telemetry must never crash the host application.\n // Drop failed batch rather than re-queue forever.\n }\n }\n}\n","/**\n * First-party SQLite checkpoint provider.\n * Creates immutable named snapshots of the memory database.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DatabaseSync } from \"node:sqlite\";\n\nimport {\n ConfigurationError,\n DatabaseError,\n ValidationError,\n} from \"../../errors/index.js\";\nimport type {\n CheckpointMeta,\n CheckpointProvider,\n CreateCheckpointOptions,\n} from \"../interfaces/CheckpointProvider.js\";\nimport { nowIso } from \"../../utils/index.js\";\nimport { SDK_VERSION } from \"../../version.js\";\n\nexport interface SqliteCheckpointProviderOptions {\n /** Directory that stores checkpoint snapshots + metadata. */\n directory?: string;\n}\n\ninterface CheckpointRecord extends CheckpointMeta {\n // marker for JSON shape\n}\n\nexport class SqliteCheckpointProvider implements CheckpointProvider {\n readonly name = \"sqlite\";\n private readonly directory: string;\n private ready = false;\n\n constructor(options?: SqliteCheckpointProviderOptions) {\n this.directory =\n options?.directory ??\n path.resolve(process.cwd(), \".wolbarg\", \"checkpoints\");\n }\n\n async open(): Promise<void> {\n fs.mkdirSync(this.directory, { recursive: true });\n this.ready = true;\n }\n\n async close(): Promise<void> {\n this.ready = false;\n }\n\n async checkpoint(\n name: string,\n sourcePath: string,\n options?: CreateCheckpointOptions,\n ): Promise<CheckpointMeta> {\n this.requireReady();\n assertCheckpointName(name);\n\n const metaPath = this.metaPath(name);\n if (fs.existsSync(metaPath)) {\n throw new ValidationError(\n `Checkpoint \"${name}\" already exists. Choose a different name — checkpoints are never overwritten.`,\n );\n }\n\n const resolvedSource = resolveDbPath(sourcePath);\n if (resolvedSource === \":memory:\") {\n throw new ConfigurationError(\n \"Cannot checkpoint an in-memory database. Use a file-backed SQLite database.\",\n );\n }\n if (!fs.existsSync(resolvedSource)) {\n throw new DatabaseError(\n `Failed to execute checkpoint()\\nReason:\\nMemory database not found at ${resolvedSource}\\nSuggestion:\\nEnsure Wolbarg has been initialized and the database path is correct.`,\n );\n }\n\n const snapshotPath = this.snapshotPath(name);\n await safeSqliteBackup(resolvedSource, snapshotPath);\n\n const stats = fs.statSync(snapshotPath);\n const meta: CheckpointRecord = {\n name,\n description: options?.description ?? null,\n createdAt: nowIso(),\n sdkVersion: SDK_VERSION,\n provider: this.name,\n snapshotPath,\n sourcePath: resolvedSource,\n sizeBytes: stats.size,\n };\n fs.writeFileSync(metaPath, JSON.stringify(meta, null, 2), \"utf8\");\n return meta;\n }\n\n async rollback(name: string, targetPath: string): Promise<CheckpointMeta> {\n this.requireReady();\n const meta = await this.getCheckpoint(name);\n if (!meta) {\n throw new ValidationError(`Checkpoint \"${name}\" was not found`);\n }\n const resolvedTarget = resolveDbPath(targetPath);\n if (resolvedTarget === \":memory:\") {\n throw new ConfigurationError(\n \"Cannot rollback into an in-memory database.\",\n );\n }\n\n fs.mkdirSync(path.dirname(resolvedTarget), { recursive: true });\n // Remove WAL/SHM so the restored main file is authoritative.\n for (const suffix of [\"\", \"-wal\", \"-shm\"]) {\n const side = `${resolvedTarget}${suffix}`;\n if (fs.existsSync(side)) {\n fs.rmSync(side, { force: true });\n }\n }\n await safeSqliteBackup(meta.snapshotPath, resolvedTarget);\n return meta;\n }\n\n async deleteCheckpoint(name: string): Promise<boolean> {\n this.requireReady();\n const metaPath = this.metaPath(name);\n const snapshotPath = this.snapshotPath(name);\n let removed = false;\n if (fs.existsSync(metaPath)) {\n fs.rmSync(metaPath, { force: true });\n removed = true;\n }\n if (fs.existsSync(snapshotPath)) {\n fs.rmSync(snapshotPath, { force: true });\n removed = true;\n }\n return removed;\n }\n\n async listCheckpoints(): Promise<CheckpointMeta[]> {\n this.requireReady();\n if (!fs.existsSync(this.directory)) {\n return [];\n }\n const files = fs\n .readdirSync(this.directory)\n .filter((f) => f.endsWith(\".json\"));\n const out: CheckpointMeta[] = [];\n for (const file of files) {\n try {\n const raw = fs.readFileSync(path.join(this.directory, file), \"utf8\");\n out.push(JSON.parse(raw) as CheckpointMeta);\n } catch {\n // skip corrupt metadata\n }\n }\n return out.sort((a, b) => a.createdAt.localeCompare(b.createdAt));\n }\n\n async getCheckpoint(name: string): Promise<CheckpointMeta | null> {\n this.requireReady();\n const metaPath = this.metaPath(name);\n if (!fs.existsSync(metaPath)) {\n return null;\n }\n try {\n return JSON.parse(fs.readFileSync(metaPath, \"utf8\")) as CheckpointMeta;\n } catch {\n return null;\n }\n }\n\n /**\n * Consistent SQLite file backup (WAL checkpoint + backup API / copy).\n * Used for memory snapshots and for secondary files such as the graph DB.\n */\n async backupSqliteFile(sourcePath: string, destPath: string): Promise<void> {\n this.requireReady();\n const resolved = resolveDbPath(sourcePath);\n if (resolved === \":memory:\") {\n throw new ConfigurationError(\n \"Cannot backup an in-memory database. Use a file-backed SQLite database.\",\n );\n }\n if (!fs.existsSync(resolved)) {\n throw new DatabaseError(\n `SQLite file not found at ${resolved}`,\n {\n suggestion: \"Ensure the source database exists before backing up.\",\n },\n );\n }\n await safeSqliteBackup(resolved, destPath);\n }\n\n /**\n * Snapshot a secondary SQLite file (typically the graph DB) next to a named\n * memory checkpoint as `{name}.graph.db`.\n */\n async checkpointGraph(\n name: string,\n graphSourcePath: string,\n ): Promise<string> {\n this.requireReady();\n assertCheckpointName(name);\n const dest = this.graphSnapshotPath(name);\n await this.backupSqliteFile(graphSourcePath, dest);\n return dest;\n }\n\n /**\n * Restore a previously snapshotted graph SQLite file into `targetPath`.\n */\n async rollbackGraph(name: string, targetPath: string): Promise<void> {\n this.requireReady();\n const snapshot = this.graphSnapshotPath(name);\n if (!fs.existsSync(snapshot)) {\n return;\n }\n const resolvedTarget = resolveDbPath(targetPath);\n if (resolvedTarget === \":memory:\") {\n throw new ConfigurationError(\n \"Cannot rollback graph into an in-memory database.\",\n );\n }\n fs.mkdirSync(path.dirname(resolvedTarget), { recursive: true });\n for (const suffix of [\"\", \"-wal\", \"-shm\"]) {\n const side = `${resolvedTarget}${suffix}`;\n if (fs.existsSync(side)) {\n fs.rmSync(side, { force: true });\n }\n }\n await safeSqliteBackup(snapshot, resolvedTarget);\n }\n\n /** Absolute path of the graph snapshot for a named checkpoint, if present. */\n graphSnapshotPath(name: string): string {\n return path.join(this.directory, `${sanitize(name)}.graph.db`);\n }\n\n private metaPath(name: string): string {\n return path.join(this.directory, `${sanitize(name)}.json`);\n }\n\n private snapshotPath(name: string): string {\n return path.join(this.directory, `${sanitize(name)}.db`);\n }\n\n private requireReady(): void {\n if (!this.ready) {\n throw new DatabaseError(\n \"Checkpoint provider is not open. Call ready() / open first.\",\n );\n }\n }\n}\n\nfunction sanitize(name: string): string {\n return name.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n}\n\nfunction assertCheckpointName(name: string): void {\n if (typeof name !== \"string\" || name.trim().length === 0) {\n throw new ValidationError(\"checkpoint name must be a non-empty string\");\n }\n if (name.length > 128) {\n throw new ValidationError(\"checkpoint name must be <= 128 characters\");\n }\n}\n\nfunction resolveDbPath(connectionString: string): string {\n if (connectionString === \":memory:\") return \":memory:\";\n return path.isAbsolute(connectionString)\n ? connectionString\n : path.resolve(process.cwd(), connectionString);\n}\n\n/**\n * Consistent snapshot using SQLite backup API when available,\n * falling back to WAL checkpoint + file copy.\n */\nasync function safeSqliteBackup(\n sourcePath: string,\n destPath: string,\n): Promise<void> {\n fs.mkdirSync(path.dirname(destPath), { recursive: true });\n if (fs.existsSync(destPath)) {\n fs.rmSync(destPath, { force: true });\n }\n\n let source: DatabaseSync | null = null;\n let dest: DatabaseSync | null = null;\n try {\n source = new DatabaseSync(sourcePath);\n try {\n source.exec(\"PRAGMA wal_checkpoint(TRUNCATE);\");\n } catch {\n // ignore checkpoint failures on read-only / busy DBs\n }\n dest = new DatabaseSync(destPath);\n\n const backupFn = (\n source as unknown as {\n backup?: (target: DatabaseSync) => void | Promise<void>;\n }\n ).backup;\n\n if (typeof backupFn === \"function\") {\n await backupFn.call(source, dest);\n } else {\n // Fallback: close and copy main db (+ wal if present after checkpoint)\n source.close();\n source = null;\n dest.close();\n dest = null;\n fs.copyFileSync(sourcePath, destPath);\n }\n } catch (error) {\n throw new DatabaseError(\n `Failed to execute checkpoint()\\nReason:\\n${error instanceof Error ? error.message : String(error)}\\nSuggestion:\\nEnsure no exclusive lock is held and the destination directory is writable.`,\n { cause: error instanceof Error ? error : undefined },\n );\n } finally {\n try {\n source?.close();\n } catch {\n // ignore\n }\n try {\n dest?.close();\n } catch {\n // ignore\n }\n }\n}\n","/**\n * In-process EventEmitter backend for SQLite subscribe().\n *\n * Limitation: only delivers events within the same Node.js process.\n */\n\nimport { EventEmitter } from \"node:events\";\nimport type {\n MemoryChangeCallback,\n MemoryChangeEvent,\n SubscribeBackend,\n SubscribeFilter,\n SubscribableEvent,\n Unsubscribe,\n} from \"./types.js\";\n\ninterface Subscription {\n filter: SubscribeFilter;\n callback: MemoryChangeCallback;\n}\n\nfunction matchesFilter(\n filter: SubscribeFilter,\n event: MemoryChangeEvent,\n): boolean {\n if (filter.organization !== event.organization) {\n return false;\n }\n if (filter.agent !== undefined && filter.agent !== event.agent) {\n return false;\n }\n if (filter.event === undefined) {\n return true;\n }\n const events = Array.isArray(filter.event) ? filter.event : [filter.event];\n return events.some(\n (e: SubscribableEvent) => e === \"*\" || e === event.event,\n );\n}\n\nexport class SqliteSubscribeEmitter implements SubscribeBackend {\n private readonly emitter = new EventEmitter();\n private readonly subscriptions = new Map<number, Subscription>();\n private nextId = 1;\n private closed = false;\n\n constructor() {\n this.emitter.setMaxListeners(0);\n this.emitter.on(\"change\", (event: MemoryChangeEvent) => {\n for (const sub of this.subscriptions.values()) {\n if (!matchesFilter(sub.filter, event)) {\n continue;\n }\n try {\n sub.callback(event);\n } catch (error) {\n // Never crash the write path.\n console.error(\n \"[wolbarg] subscribe callback error:\",\n error instanceof Error ? error.message : error,\n );\n }\n }\n });\n }\n\n subscribe(\n filter: SubscribeFilter,\n callback: MemoryChangeCallback,\n ): Unsubscribe {\n if (this.closed) {\n throw new Error(\"Subscribe backend is closed\");\n }\n const id = this.nextId++;\n this.subscriptions.set(id, { filter, callback });\n return () => {\n this.subscriptions.delete(id);\n };\n }\n\n emit(event: MemoryChangeEvent): void {\n if (this.closed) {\n return;\n }\n this.emitter.emit(\"change\", event);\n }\n\n async close(): Promise<void> {\n this.closed = true;\n this.subscriptions.clear();\n this.emitter.removeAllListeners();\n }\n}\n","/**\n * Wolbarg — modular semantic memory SDK for AI agents (v0.3).\n *\n * @example\n * ```ts\n * import { wolbarg, openaiEmbedding, openaiLlm } from \"wolbarg\";\n *\n * const ctx = wolbarg({\n * organization: \"my-org\",\n * database: { provider: \"sqlite\", url: \"./memory.db\" },\n * embedding: openaiEmbedding({\n * apiKey: process.env.OPENAI_API_KEY!,\n * model: \"text-embedding-3-small\",\n * }),\n * telemetry: {\n * enabled: true,\n * database: { provider: \"sqlite\", url: \"./telemetry.db\" },\n * level: \"debug\",\n * },\n * });\n *\n * await ctx.ready();\n * await ctx.remember({ agent: \"research\", content: { text: \"…\" } });\n * const hits = await ctx.recall({ query: \"…\", topK: 5 });\n * ```\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n createCompressionProvider,\n type CompressionProvider,\n} from \"../compression/index.js\";\nimport {\n createChunkingStrategy,\n inferChunkingStrategy,\n type ChunkingStrategy,\n} from \"../chunking/index.js\";\nimport {\n createEmbeddingProvider,\n embedMany,\n type EmbeddingProvider,\n} from \"../embedding/index.js\";\nimport {\n resolveEmbeddingCacheConfig,\n withEmbeddingCache,\n type ResolvedEmbeddingCacheConfig,\n} from \"../embedding/cache.js\";\nimport {\n MemoryEmbeddingCacheStore,\n PostgresEmbeddingCacheStore,\n SqliteEmbeddingCacheStore,\n} from \"../embedding/cache-store.js\";\nimport { createLlmProvider, type LlmProvider } from \"../llm/index.js\";\nimport { loadIngestSource, resolveParser } from \"../ingest/index.js\";\nimport type { KeywordSearchProvider } from \"../keyword/index.js\";\nimport type { OCRProvider } from \"../ocr/index.js\";\nimport type { RerankerProvider } from \"../rerank/index.js\";\nimport type { VisionProvider } from \"../vision/index.js\";\nimport { createStorageProvider } from \"../storage/index.js\";\nimport type { StorageProvider } from \"../storage/types.js\";\nimport type { MemoryRow } from \"../storage/types.js\";\nimport { matchesMetadata } from \"../filters/match.js\";\nimport {\n toHistoryEvent,\n toMemoryRecord,\n toRecallResult,\n} from \"../memory/index.js\";\nimport {\n hashMemoryContent,\n mergeMemoryMetadata,\n resolveMemoryDedupeConfig,\n type ResolvedMemoryDedupeConfig,\n} from \"../memory/dedupe.js\";\nimport {\n SqliteMemoryTransferProvider,\n type MemoryExportResult,\n type MemoryImportResult,\n} from \"../memory/transfer.js\";\nimport {\n adaptiveFetchK,\n applyMmr,\n fuseScores,\n resolveHybridWeights,\n resolveMmr,\n} from \"../retrieval/index.js\";\nimport {\n ConfigurationError,\n GraphCheckpointNotSupportedError,\n InitializationError,\n MemoryNotFoundError,\n ProviderNotConfiguredError,\n ValidationError,\n wrapOperationError,\n} from \"../errors/index.js\";\nimport type {\n CheckpointInfo,\n CheckpointOptions,\n ClearOptions,\n CompressOptions,\n CompressResult,\n ExportResult,\n ForgetOptions,\n HistoryOptions,\n HistoryResult,\n ImportResult,\n IngestOptions,\n IngestResult,\n InitOptions,\n MemoryMetadata,\n MemoryRecord,\n RecallExplainResponse,\n RecallExplanationHit,\n RecallOptions,\n RecallResult,\n RememberOptions,\n RememberResult,\n RetrievalConfig,\n StatsResult,\n} from \"../types/index.js\";\nimport type { GraphProvider, GetRelatedOptions } from \"../graph/types.js\";\nimport {\n AsyncMutex,\n assertFiniteNumber,\n assertNonEmptyString,\n createId,\n deserializeMetadata,\n distanceToSimilarity,\n nowIso,\n} from \"../utils/index.js\";\nimport type {\n WolbargOptions,\n WolbargOptionsWithLlm,\n WolbargOptionsWithoutLlm,\n} from \"./options.js\";\nimport {\n isEmbeddingProvider,\n isLlmProvider,\n isStorageProvider,\n isTelemetryProvider,\n resolveDatabaseUrl,\n} from \"./options.js\";\nimport { validateWolbargOptions, validateInitOptions } from \"./validate.js\";\nimport {\n TelemetryEmitter,\n} from \"../telemetry/index.js\";\nimport type { PersistedRecallExplainPayload } from \"../telemetry/index.js\";\nimport type { OperationTraceHandle } from \"../telemetry/emitter.js\";\nimport type { CheckpointProvider } from \"../providers/interfaces/CheckpointProvider.js\";\nimport { SqliteTelemetryProvider } from \"../providers/sqlite/sqliteTelemetryProvider.js\";\nimport { SqliteCheckpointProvider } from \"../providers/sqlite/sqliteCheckpointProvider.js\";\nimport { SqliteStorageProvider } from \"../storage/providers/sqlite.js\";\nimport { PostgresStorageProvider } from \"../storage/providers/postgres.js\";\nimport {\n SqliteSubscribeEmitter,\n createPostgresListenerFromPool,\n type MemoryChangeEvent,\n type SubscribeBackend,\n type SubscribeFilter,\n type Unsubscribe,\n} from \"../subscribe/index.js\";\n\ntype ReadyState = {\n storage: StorageProvider;\n embedding: EmbeddingProvider;\n organization: string;\n};\n\nexport class Wolbarg<HasLlm extends boolean = false> {\n declare readonly __hasLlm: HasLlm;\n\n private initialized = false;\n private booting: Promise<void> | null = null;\n private organization: string | null = null;\n private storage: StorageProvider | null = null;\n private embedding: EmbeddingProvider | null = null;\n private llm: LlmProvider | null = null;\n private compression: CompressionProvider | null = null;\n private reranker: RerankerProvider | null = null;\n private keywordSearch: KeywordSearchProvider | null = null;\n private ocr: OCRProvider | null = null;\n private vision: VisionProvider | null = null;\n private graph: GraphProvider | null = null;\n private chunking: ChunkingStrategy | null = null;\n private retrievalConfig: RetrievalConfig = {};\n private embeddingDimensions: number | null = null;\n private readonly writeMutex = new AsyncMutex();\n private telemetry: TelemetryEmitter;\n private checkpointProvider: CheckpointProvider | null = null;\n private memoryDbPath: string | null = null;\n private readonly transfer = new SqliteMemoryTransferProvider();\n private subscribeBackend: SubscribeBackend | null = null;\n private pgListenBackend: SubscribeBackend | null = null;\n private memoryDedupe: ResolvedMemoryDedupeConfig = resolveMemoryDedupeConfig();\n private embeddingCacheConfig: ResolvedEmbeddingCacheConfig =\n resolveEmbeddingCacheConfig();\n private rawEmbedding: EmbeddingProvider | null = null;\n\n constructor(options: WolbargOptionsWithLlm);\n constructor(options: WolbargOptionsWithoutLlm);\n constructor();\n constructor(options?: WolbargOptions) {\n this.telemetry = new TelemetryEmitter(null, { enabled: false, level: \"off\" });\n\n if (!options) {\n return;\n }\n\n const validated = validateWolbargOptions(options);\n this.organization = validated.organization;\n this.memoryDedupe = resolveMemoryDedupeConfig(validated.memory?.dedupe);\n this.embeddingCacheConfig = resolveEmbeddingCacheConfig(\n validated.embeddingCache,\n );\n\n const storageInput = validated.storage!;\n this.storage = isStorageProvider(storageInput)\n ? storageInput\n : createStorageProvider(storageInput, {\n concurrency: validated.concurrency,\n });\n\n if (!isStorageProvider(storageInput)) {\n this.memoryDbPath = resolveDatabaseUrl(storageInput);\n } else if (storageInput instanceof SqliteStorageProvider) {\n this.memoryDbPath = storageInput.path;\n }\n\n const embedding = isEmbeddingProvider(validated.embedding)\n ? validated.embedding\n : createEmbeddingProvider(validated.embedding);\n this.rawEmbedding = embedding;\n this.embedding = embedding;\n\n if (validated.llm) {\n this.llm = isLlmProvider(validated.llm)\n ? validated.llm\n : createLlmProvider(validated.llm);\n this.compression =\n validated.compression ?? createCompressionProvider(this.llm);\n } else {\n this.compression = validated.compression ?? null;\n }\n\n this.reranker = validated.reranker ?? null;\n this.keywordSearch = validated.keywordSearch ?? null;\n this.ocr = validated.ocr ?? null;\n this.vision = validated.vision ?? null;\n if (validated.graph) {\n this.graph = validated.graph as GraphProvider;\n }\n this.chunking = validated.chunking ?? null;\n this.retrievalConfig = validated.retrieval ?? {};\n\n // In-process subscribe backend (SQLite limitation: same process only).\n this.subscribeBackend = new SqliteSubscribeEmitter();\n\n if (validated.telemetry) {\n if (isTelemetryProvider(validated.telemetry)) {\n this.telemetry = new TelemetryEmitter(validated.telemetry, {\n enabled: true,\n }, { organization: validated.organization });\n } else {\n const url =\n validated.telemetry.database.url ??\n validated.telemetry.database.connectionString ??\n \"\";\n const provider = new SqliteTelemetryProvider({ url });\n this.telemetry = new TelemetryEmitter(provider, validated.telemetry, {\n organization: validated.organization,\n });\n }\n }\n\n this.checkpointProvider =\n validated.checkpoint ??\n new SqliteCheckpointProvider({\n directory: validated.checkpointDirectory,\n });\n }\n\n /**\n * Backwards-compatible initialization (v0.1 API).\n */\n async init(options: InitOptions): Promise<void> {\n if (this.initialized || this.storage) {\n throw new InitializationError(\"Wolbarg is already initialized\");\n }\n\n let validated: InitOptions;\n try {\n validated = validateInitOptions(options);\n } catch (error) {\n if (error instanceof ConfigurationError || error instanceof ValidationError) {\n throw error;\n }\n throw new ConfigurationError(\n `Invalid configuration: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n\n this.organization = validated.organization;\n this.storage = createStorageProvider(validated.database);\n this.memoryDbPath = resolveDatabaseUrl(validated.database);\n this.embedding = createEmbeddingProvider(validated.embedding);\n if (validated.llm) {\n this.llm = createLlmProvider(validated.llm);\n this.compression = createCompressionProvider(this.llm);\n }\n if (!this.checkpointProvider) {\n this.checkpointProvider = new SqliteCheckpointProvider();\n }\n\n await this.ready();\n }\n\n /** Ensure storage (and optional telemetry) are open. */\n async ready(): Promise<void> {\n if (this.initialized) {\n return;\n }\n if (this.booting) {\n await this.booting;\n return;\n }\n this.booting = this.boot();\n try {\n await this.booting;\n } finally {\n this.booting = null;\n }\n }\n\n private async boot(): Promise<void> {\n if (!this.storage || !this.embedding || !this.organization) {\n throw new InitializationError(\n \"Wolbarg is not configured. Pass options to the constructor or call init().\",\n );\n }\n\n try {\n await this.storage.open();\n await this.telemetry.open();\n await this.checkpointProvider?.open();\n await this.graph?.open();\n\n // Wrap embedding with transparent cache after storage is open.\n if (this.rawEmbedding && this.embeddingCacheConfig.enabled) {\n if (this.storage instanceof SqliteStorageProvider) {\n const sqlite = this.storage;\n const store = new SqliteEmbeddingCacheStore(() => sqlite.getDatabase(), {\n ttlMs: this.embeddingCacheConfig.ttlMs,\n });\n this.embedding = withEmbeddingCache(\n this.rawEmbedding,\n store,\n this.embeddingCacheConfig,\n );\n } else if (this.storage instanceof PostgresStorageProvider) {\n // L1-only by default — durable cache must not share the insert pool\n // (that caused cache speedup <1x under concurrent unique writes).\n this.embedding = withEmbeddingCache(\n this.rawEmbedding,\n new PostgresEmbeddingCacheStore(() => null, {\n ttlMs: this.embeddingCacheConfig.ttlMs,\n durable: false,\n }),\n this.embeddingCacheConfig,\n );\n } else {\n this.embedding = withEmbeddingCache(\n this.rawEmbedding,\n new MemoryEmbeddingCacheStore({\n ttlMs: this.embeddingCacheConfig.ttlMs,\n }),\n this.embeddingCacheConfig,\n );\n }\n }\n\n // Postgres LISTEN is deferred until the first subscribe() — opening a\n // dedicated connection on every ready() dominated cold start (~50-100ms).\n if (this.storage instanceof PostgresStorageProvider) {\n // Listener is created lazily in subscribe().\n }\n\n if (this.storage instanceof SqliteStorageProvider) {\n this.storage.setRetryLogger((msg) => {\n // debug-level retry visibility\n if (typeof console !== \"undefined\" && console.debug) {\n console.debug(`[wolbarg] ${msg}`);\n }\n });\n }\n\n // Prefer stored dimensions — skip embedding round-trip on warm reopen.\n const storedDims = await this.storage.getEmbeddingDimensions();\n if (storedDims !== null && storedDims > 0) {\n await this.storage.ensureVectorSchema(storedDims);\n this.embeddingDimensions = storedDims;\n } else {\n const probe = await this.embedding.validate();\n await this.storage.ensureVectorSchema(probe.dimensions);\n this.embeddingDimensions = probe.dimensions;\n }\n this.initialized = true;\n this.telemetry.emitStartup(this.storage.name);\n } catch (error) {\n await this.graph?.close().catch(() => undefined);\n await this.storage.close().catch(() => undefined);\n await this.telemetry.close().catch(() => undefined);\n this.initialized = false;\n if (\n error instanceof ConfigurationError ||\n error instanceof InitializationError ||\n error instanceof ValidationError\n ) {\n throw error;\n }\n throw new InitializationError(\n `Initialization failed: ${error instanceof Error ? error.message : String(error)}`,\n { cause: error instanceof Error ? error : undefined },\n );\n }\n }\n\n /** Store a semantic memory for an agent (may upsert when dedupe is enabled). */\n async remember(options: RememberOptions): Promise<RememberResult> {\n const trace = this.telemetry.start(\"remember\");\n try {\n const result = await this.rememberOne(options, trace);\n trace.success({\n provider: this.storage?.name,\n memoryIds: [result.id],\n returnedCount: 1,\n embeddingProvider: this.embedding?.model,\n model: this.embedding?.model,\n metadata: result.metadata,\n agentId: result.agent,\n tags: telemetryTags(result.metadata),\n extra: { upsertAction: result.action, action: result.action },\n });\n return result;\n } catch (error) {\n trace.failure(error, { agentId: options.agent });\n throw wrapOperationError(\"remember\", error);\n }\n }\n\n /** Batch remember — sequential when dedupe enabled; otherwise one TX batch. */\n async rememberBatch(items: RememberOptions[]): Promise<RememberResult[]> {\n const parent = this.telemetry.start(\"rememberBatch\");\n try {\n if (!Array.isArray(items) || items.length === 0) {\n throw new ValidationError(\"rememberBatch requires a non-empty array\");\n }\n\n const anyDedupe = items.some((item) => {\n const cfg = resolveMemoryDedupeConfig(\n item.dedupe ?? this.memoryDedupe,\n );\n return cfg.enabled;\n }) || this.memoryDedupe.enabled;\n\n if (anyDedupe) {\n const out: RememberResult[] = [];\n for (const item of items) {\n const child = parent.child(\"remember\");\n const result = await this.rememberOne(item, child);\n child.success({\n provider: this.storage?.name,\n memoryIds: [result.id],\n returnedCount: 1,\n metadata: result.metadata,\n agentId: result.agent,\n tags: telemetryTags(result.metadata),\n extra: { upsertAction: result.action },\n });\n out.push(result);\n }\n parent.success({\n provider: this.storage?.name,\n memoryIds: out.map((r) => r.id),\n returnedCount: out.length,\n embeddingProvider: this.embedding?.model,\n model: this.embedding?.model,\n agentId: commonAgent(items.map((item) => item.agent.trim())),\n });\n this.emitChange({\n event: \"remember\",\n organization: this.organization!,\n agent: commonAgent(items.map((i) => i.agent.trim())) ?? items[0]!.agent,\n memoryId: out.map((r) => r.id),\n timestamp: nowIso(),\n traceId: parent.context.traceId,\n sessionId: this.telemetry.sessionId,\n });\n return out;\n }\n\n const { storage, embedding, organization } = await this.requireReady();\n\n const tEmbed = performance.now();\n const texts = items.map((item, i) => {\n assertNonEmptyString(item.agent, `items[${i}].agent`);\n if (!item.content || typeof item.content.text !== \"string\") {\n throw new ValidationError(`items[${i}].content.text must be a string`);\n }\n assertNonEmptyString(item.content.text, `items[${i}].content.text`);\n return item.content.text;\n });\n const vectors = await embedMany(embedding, texts);\n parent.mark(\"embeddingMs\", performance.now() - tEmbed);\n for (const vector of vectors) {\n this.assertEmbeddingDimensions(vector.length);\n }\n\n const timestamp = nowIso();\n const inputs = items.map((item, i) => ({\n id: createId(),\n organization,\n agent: item.agent.trim(),\n contentText: item.content.text,\n metadata: item.metadata ?? {},\n embedding: vectors[i]!,\n createdAt: timestamp,\n updatedAt: timestamp,\n contentHash: null, // batch path is append-only; dedupe uses sequential rememberOne\n }));\n\n for (let i = 0; i < inputs.length; i += 1) {\n const child = parent.child(\"remember\");\n child.success({\n provider: storage.name,\n memoryIds: [inputs[i]!.id],\n returnedCount: 1,\n metadata: inputs[i]!.metadata,\n agentId: inputs[i]!.agent,\n tags: telemetryTags(inputs[i]!.metadata),\n });\n }\n\n const rows = await this.withWriteLock(async () => {\n const tStore = performance.now();\n const result = await storage.insertMemoriesBatch(inputs);\n parent.mark(\"databaseWriteMs\", performance.now() - tStore);\n return result;\n });\n\n const records: RememberResult[] = rows.map((row) => ({\n ...toMemoryRecord(row),\n action: \"created\" as const,\n }));\n parent.success({\n provider: storage.name,\n memoryIds: records.map((r) => r.id),\n returnedCount: records.length,\n embeddingProvider: embedding.model,\n model: embedding.model,\n agentId: commonAgent(items.map((item) => item.agent.trim())),\n });\n this.emitChange({\n event: \"remember\",\n organization,\n agent: commonAgent(items.map((i) => i.agent.trim())) ?? items[0]!.agent,\n memoryId: records.map((r) => r.id),\n timestamp,\n traceId: parent.context.traceId,\n sessionId: this.telemetry.sessionId,\n });\n return records;\n } catch (error) {\n parent.failure(error);\n throw wrapOperationError(\"rememberBatch\", error);\n }\n }\n\n /**\n * Update an existing memory by id (re-embeds when content changes).\n */\n async update(options: {\n id: string;\n content?: { text: string };\n metadata?: MemoryMetadata;\n }): Promise<RememberResult> {\n const trace = this.telemetry.start(\"remember\");\n try {\n const { storage, embedding, organization } = await this.requireReady();\n assertNonEmptyString(options.id, \"id\");\n const existing = await storage.getMemoryById(options.id.trim(), organization);\n if (!existing) {\n throw new MemoryNotFoundError(`Memory not found: ${options.id}`);\n }\n\n const contentText = options.content?.text ?? existing.content_text;\n if (options.content) {\n assertNonEmptyString(options.content.text, \"content.text\");\n }\n const existingMeta = deserializeMetadata(existing.metadata_json);\n const metadata =\n options.metadata !== undefined\n ? mergeMemoryMetadata(existingMeta, options.metadata)\n : existingMeta;\n\n let vector: Float32Array | undefined;\n if (options.content !== undefined) {\n const tEmbed = performance.now();\n vector = await embedding.embed(contentText);\n trace.mark(\"embeddingMs\", performance.now() - tEmbed);\n this.assertEmbeddingDimensions(vector.length);\n }\n\n const timestamp = nowIso();\n const row = await this.withWriteLock(async () => {\n const tStore = performance.now();\n const updated = await storage.updateMemory({\n id: existing.id,\n organization,\n contentText: options.content !== undefined ? contentText : undefined,\n metadata,\n embedding: vector,\n updatedAt: timestamp,\n contentHash:\n options.content !== undefined\n ? hashMemoryContent(contentText)\n : undefined,\n });\n trace.mark(\"databaseWriteMs\", performance.now() - tStore);\n return updated;\n });\n if (!row) {\n throw new MemoryNotFoundError(`Memory not found: ${options.id}`);\n }\n const result: RememberResult = {\n ...toMemoryRecord(row),\n action: \"updated\",\n };\n this.emitChange({\n event: \"update\",\n organization,\n agent: result.agent,\n memoryId: result.id,\n timestamp,\n traceId: trace.context.traceId,\n sessionId: this.telemetry.sessionId,\n upsertAction: \"updated\",\n });\n trace.success({\n provider: storage.name,\n memoryIds: [result.id],\n returnedCount: 1,\n agentId: result.agent,\n extra: { upsertAction: \"updated\" },\n });\n return result;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"update\", error);\n }\n }\n\n /**\n * Subscribe to memory change events.\n *\n * **SQLite:** delivers events only within this Node.js process.\n * A second process writing the same `memory.db` will not notify subscribers here.\n */\n subscribe(\n filter: SubscribeFilter,\n callback: (event: MemoryChangeEvent) => void,\n ): Unsubscribe {\n const org = filter.organization || this.organization;\n if (!org) {\n throw new ValidationError(\n \"subscribe requires organization (set on Wolbarg or in filter)\",\n );\n }\n const normalized: SubscribeFilter = {\n ...filter,\n organization: org,\n };\n\n // Postgres: lazy LISTEN — only open the dedicated connection on first subscribe.\n if (this.storage instanceof PostgresStorageProvider) {\n if (!this.pgListenBackend) {\n const pool = this.storage.getPool?.();\n if (pool) {\n this.pgListenBackend = createPostgresListenerFromPool(pool as never);\n }\n }\n if (this.pgListenBackend) {\n // subscribe() itself kicks ensureListening — do not also void start()\n // (that raced and leaked a second LISTEN client → duplicate events).\n return this.pgListenBackend.subscribe(normalized, callback);\n }\n }\n\n if (!this.subscribeBackend) {\n this.subscribeBackend = new SqliteSubscribeEmitter();\n }\n return this.subscribeBackend.subscribe(normalized, callback);\n }\n\n private emitChange(event: MemoryChangeEvent): void {\n try {\n if (this.storage instanceof PostgresStorageProvider) {\n // Avoid an extra pool round-trip when nobody is listening.\n const listener = this.pgListenBackend as\n | { hasSubscribers?: () => boolean }\n | null;\n if (listener?.hasSubscribers?.()) {\n void this.storage.notifyChange(event).catch((error) => {\n console.error(\n \"[wolbarg] NOTIFY failed:\",\n error instanceof Error ? error.message : error,\n );\n });\n }\n return;\n }\n this.subscribeBackend?.emit(event);\n } catch (error) {\n console.error(\n \"[wolbarg] emitChange error:\",\n error instanceof Error ? error.message : error,\n );\n }\n }\n\n /** Internal remember with optional upsert/dedupe. */\n private async rememberOne(\n options: RememberOptions,\n trace: OperationTraceHandle,\n ): Promise<RememberResult> {\n const { storage, embedding, organization } = await this.requireReady();\n assertNonEmptyString(options.agent, \"agent\");\n if (!options.content || typeof options.content.text !== \"string\") {\n throw new ValidationError(\"content.text must be a string\");\n }\n assertNonEmptyString(options.content.text, \"content.text\");\n\n const metadata = options.metadata ?? {};\n if (metadata === null || typeof metadata !== \"object\" || Array.isArray(metadata)) {\n throw new ValidationError(\"metadata must be a plain object when provided\");\n }\n\n const agent = options.agent.trim();\n const text = options.content.text;\n const dedupe = resolveMemoryDedupeConfig(\n options.dedupe !== undefined ? options.dedupe : this.memoryDedupe,\n );\n\n const tEmbed = performance.now();\n const vector = await embedding.embed(text);\n trace.mark(\"embeddingMs\", performance.now() - tEmbed);\n this.assertEmbeddingDimensions(vector.length);\n\n const timestamp = nowIso();\n const contentHash = hashMemoryContent(text);\n\n if (!dedupe.enabled) {\n const id = createId();\n const record = await this.withWriteLock(async () => {\n const tStore = performance.now();\n const row = await storage.insertMemory({\n id,\n organization,\n agent,\n contentText: text,\n metadata,\n embedding: vector,\n createdAt: timestamp,\n updatedAt: timestamp,\n // Null hash when dedupe is off — unique index allows duplicate text.\n contentHash: null,\n });\n trace.mark(\"databaseWriteMs\", performance.now() - tStore);\n return toMemoryRecord(row);\n });\n this.emitChange({\n event: \"remember\",\n organization,\n agent,\n memoryId: record.id,\n timestamp,\n traceId: trace.context.traceId,\n sessionId: this.telemetry.sessionId,\n upsertAction: \"created\",\n });\n return { ...record, action: \"created\" };\n }\n\n // Exact match\n let existing: MemoryRow | null = null;\n if (\n dedupe.strategy === \"exact\" ||\n dedupe.strategy === \"exact-or-near\"\n ) {\n if (typeof storage.findActiveByContentHash === \"function\") {\n existing = await storage.findActiveByContentHash(\n organization,\n agent,\n contentHash,\n );\n }\n }\n\n if (existing) {\n const merged = mergeMemoryMetadata(\n deserializeMetadata(existing.metadata_json),\n metadata,\n );\n const row = await this.withWriteLock(async () => {\n const tStore = performance.now();\n const updated = await storage.updateMemory({\n id: existing!.id,\n organization,\n metadata: merged,\n updatedAt: timestamp,\n contentHash,\n });\n trace.mark(\"databaseWriteMs\", performance.now() - tStore);\n return updated;\n }, { exclusive: true });\n const record = toMemoryRecord(row!);\n this.emitChange({\n event: \"update\",\n organization,\n agent,\n memoryId: record.id,\n timestamp,\n traceId: trace.context.traceId,\n sessionId: this.telemetry.sessionId,\n upsertAction: \"updated\",\n });\n return { ...record, action: \"updated\" };\n }\n\n // Near-dup\n if (\n dedupe.strategy === \"near\" ||\n dedupe.strategy === \"exact-or-near\"\n ) {\n const near = await this.findNearDuplicate(\n storage,\n organization,\n agent,\n vector,\n dedupe.nearThreshold,\n dedupe.nearCandidateLimit,\n );\n if (near) {\n const merged = mergeMemoryMetadata(\n deserializeMetadata(near.metadata_json),\n metadata,\n );\n const row = await this.withWriteLock(async () => {\n const tStore = performance.now();\n const updated = await storage.updateMemory({\n id: near.id,\n organization,\n contentText: text,\n metadata: merged,\n embedding: vector,\n updatedAt: timestamp,\n contentHash,\n });\n trace.mark(\"databaseWriteMs\", performance.now() - tStore);\n return updated;\n }, { exclusive: true });\n const record = toMemoryRecord(row!);\n this.emitChange({\n event: \"update\",\n organization,\n agent,\n memoryId: record.id,\n timestamp,\n traceId: trace.context.traceId,\n sessionId: this.telemetry.sessionId,\n upsertAction: \"updated\",\n });\n return { ...record, action: \"updated\" };\n }\n }\n\n // Insert new\n const id = createId();\n try {\n const record = await this.withWriteLock(async () => {\n const tStore = performance.now();\n const row = await storage.insertMemory({\n id,\n organization,\n agent,\n contentText: text,\n metadata,\n embedding: vector,\n createdAt: timestamp,\n updatedAt: timestamp,\n contentHash,\n });\n trace.mark(\"databaseWriteMs\", performance.now() - tStore);\n return toMemoryRecord(row);\n }, { exclusive: true });\n this.emitChange({\n event: \"remember\",\n organization,\n agent,\n memoryId: record.id,\n timestamp,\n traceId: trace.context.traceId,\n sessionId: this.telemetry.sessionId,\n upsertAction: \"created\",\n });\n return { ...record, action: \"created\" };\n } catch (error) {\n // Unique hash race: retry as update\n const msg = error instanceof Error ? error.message : String(error);\n if (\n msg.toLowerCase().includes(\"unique\") &&\n typeof storage.findActiveByContentHash === \"function\"\n ) {\n const raced = await storage.findActiveByContentHash(\n organization,\n agent,\n contentHash,\n );\n if (raced) {\n const merged = mergeMemoryMetadata(\n deserializeMetadata(raced.metadata_json),\n metadata,\n );\n const row = await this.withWriteLock(\n async () =>\n storage.updateMemory({\n id: raced.id,\n organization,\n metadata: merged,\n updatedAt: nowIso(),\n contentHash,\n }),\n { exclusive: true },\n );\n const record = toMemoryRecord(row!);\n this.emitChange({\n event: \"update\",\n organization,\n agent,\n memoryId: record.id,\n timestamp: nowIso(),\n upsertAction: \"updated\",\n });\n return { ...record, action: \"updated\" };\n }\n }\n throw error;\n }\n }\n\n private async findNearDuplicate(\n storage: StorageProvider,\n organization: string,\n agent: string,\n vector: Float32Array,\n threshold: number,\n limit: number,\n ): Promise<MemoryRow | null> {\n if (typeof storage.searchVectorsWithMemories === \"function\") {\n const hits = await storage.searchVectorsWithMemories(\n vector,\n limit,\n organization,\n { agent, includeArchived: false },\n );\n let best: { row: MemoryRow; sim: number } | null = null;\n for (const { row, distance } of hits) {\n if (row.archived === 1) continue;\n const sim = distanceToSimilarity(distance);\n if (sim >= threshold && (!best || sim > best.sim)) {\n best = { row, sim };\n }\n }\n return best?.row ?? null;\n }\n\n const hits = await storage.searchVectors(vector, limit);\n let best: { row: MemoryRow; sim: number } | null = null;\n for (const hit of hits) {\n const row = await storage.getMemoryByRowid(hit.memoryRowid, organization);\n if (!row || row.archived === 1 || row.agent !== agent) continue;\n const sim = distanceToSimilarity(hit.distance);\n if (sim >= threshold && (!best || sim > best.sim)) {\n best = { row, sim };\n }\n }\n return best?.row ?? null;\n }\n\n /**\n * Semantic / hybrid search over stored memories.\n * Pass `{ explain: true }` for enriched ranking diagnostics.\n */\n async recall(options: RecallOptions & { explain: true }): Promise<RecallExplainResponse>;\n async recall(options: RecallOptions & { explain?: false }): Promise<RecallResult[]>;\n async recall(options: RecallOptions): Promise<RecallResult[] | RecallExplainResponse>;\n async recall(options: RecallOptions): Promise<RecallResult[] | RecallExplainResponse> {\n const trace = this.telemetry.start(\"recall\");\n const explain = options.explain === true;\n try {\n const { storage, embedding, organization } = await this.requireReady();\n assertNonEmptyString(options.query, \"query\");\n\n const topK = options.topK ?? 5;\n const threshold = options.threshold ?? 0;\n assertFiniteNumber(topK, \"topK\", { min: 1, max: 1000 });\n assertFiniteNumber(threshold, \"threshold\", { min: 0, max: 1 });\n\n const query = options.query.trim();\n const tEmbed = performance.now();\n const vector = await embedding.embed(query);\n trace.mark(\"embeddingMs\", performance.now() - tEmbed);\n this.assertEmbeddingDimensions(vector.length);\n\n const hasFilters = Boolean(\n options.filter?.agent || options.filter?.metadata,\n );\n const overFetch =\n this.retrievalConfig.overFetchFactor ?? (hasFilters ? 4 : 2);\n const fetchK = adaptiveFetchK(topK, overFetch, hasFilters);\n\n const semanticScores = new Map<string, number>();\n const distances = new Map<string, number>();\n const byId = new Map<string, RecallResult>();\n const metadataMatched = new Map<string, boolean>();\n\n const tSearch = performance.now();\n const joined = storage.searchVectorsWithMemories;\n if (typeof joined === \"function\") {\n const joinedHits = await joined.call(\n storage,\n vector,\n fetchK,\n organization,\n {\n agent: options.filter?.agent,\n includeArchived: options.filter?.includeArchived,\n },\n );\n const tFilter = performance.now();\n for (const { row, distance } of joinedHits) {\n let metaOk = true;\n if (\n options.filter?.metadata &&\n !matchesMetadata(\n deserializeMetadata(row.metadata_json),\n options.filter.metadata,\n )\n ) {\n metaOk = false;\n continue;\n }\n const similarity = distanceToSimilarity(distance);\n if (similarity < threshold) {\n continue;\n }\n const result = toRecallResult(row, similarity);\n semanticScores.set(result.id, similarity);\n distances.set(result.id, distance);\n metadataMatched.set(result.id, metaOk);\n byId.set(result.id, result);\n }\n trace.mark(\"metadataFilteringMs\", performance.now() - tFilter);\n } else {\n const hits = await storage.searchVectors(vector, fetchK);\n const rowids = hits.map((h) => h.memoryRowid);\n let rowMap: Map<number, MemoryRow>;\n if (typeof storage.getMemoriesByRowids === \"function\") {\n rowMap = await storage.getMemoriesByRowids(rowids, organization);\n } else {\n rowMap = new Map();\n const looked = await Promise.all(\n hits.map(async (hit) => ({\n hit,\n row: await storage.getMemoryByRowid(hit.memoryRowid, organization),\n })),\n );\n for (const { hit, row } of looked) {\n if (row) rowMap.set(hit.memoryRowid, row);\n }\n }\n\n const tFilter = performance.now();\n for (const hit of hits) {\n const row = rowMap.get(hit.memoryRowid);\n if (!row) continue;\n if (options.filter?.agent && row.agent !== options.filter.agent) continue;\n if (!options.filter?.includeArchived && row.archived === 1) continue;\n const metadata = deserializeMetadata(row.metadata_json);\n if (\n options.filter?.metadata &&\n !matchesMetadata(metadata, options.filter.metadata)\n ) {\n continue;\n }\n const similarity = distanceToSimilarity(hit.distance);\n if (similarity < threshold) continue;\n const result = toRecallResult(row, similarity);\n semanticScores.set(result.id, similarity);\n distances.set(result.id, hit.distance);\n metadataMatched.set(result.id, true);\n byId.set(result.id, result);\n }\n trace.mark(\"metadataFilteringMs\", performance.now() - tFilter);\n }\n const searchTime = performance.now() - tSearch;\n trace.mark(\"vectorSearchMs\", searchTime);\n trace.mark(\"databaseReadMs\", searchTime);\n\n const hybridWeights =\n resolveHybridWeights(options.hybrid) ??\n (options.hybrid === undefined\n ? resolveHybridWeights(this.retrievalConfig.hybrid)\n : null);\n let keywordSignal: \"enabled\" | \"disabled\" | \"unknown\" = \"disabled\";\n\n if (hybridWeights) {\n let keywordScores = new Map<string, number>();\n\n if (typeof storage.searchKeyword === \"function\") {\n keywordSignal = \"enabled\";\n const ftsHits = await storage.searchKeyword(\n query,\n organization,\n fetchK,\n );\n keywordScores = new Map(ftsHits.map((h) => [h.memoryId, h.score]));\n const missingIds: string[] = [];\n for (const id of keywordScores.keys()) {\n if (!byId.has(id)) missingIds.push(id);\n }\n if (missingIds.length > 0) {\n const fetched = await Promise.all(\n missingIds.map((id) => storage.getMemoryById(id, organization)),\n );\n for (const row of fetched) {\n if (!row) continue;\n if (options.filter?.agent && row.agent !== options.filter.agent) {\n continue;\n }\n if (!options.filter?.includeArchived && row.archived === 1) {\n continue;\n }\n if (\n options.filter?.metadata &&\n !matchesMetadata(\n deserializeMetadata(row.metadata_json),\n options.filter.metadata,\n )\n ) {\n continue;\n }\n byId.set(row.id, toRecallResult(row, 0));\n metadataMatched.set(row.id, true);\n }\n }\n } else if (this.keywordSearch) {\n keywordSignal = \"enabled\";\n const corpus = await storage.listMemories(\n {\n organization,\n agent: options.filter?.agent,\n includeArchived: options.filter?.includeArchived,\n metadata: options.filter?.metadata,\n },\n Math.min(fetchK * 2, 2000),\n );\n const keywordHits = await this.keywordSearch.search(\n query,\n corpus.map((row) => ({ id: row.id, text: row.content_text })),\n fetchK,\n );\n keywordScores = new Map(\n keywordHits.map((h) => [h.memoryId, h.score]),\n );\n for (const row of corpus) {\n if (byId.has(row.id) || !keywordScores.has(row.id)) continue;\n byId.set(row.id, toRecallResult(row, 0));\n metadataMatched.set(row.id, true);\n }\n }\n\n if (keywordScores.size > 0) {\n const fused = fuseScores(semanticScores, keywordScores, hybridWeights);\n for (const [id, score] of fused) {\n const existing = byId.get(id);\n if (existing) {\n byId.set(id, { ...existing, similarity: score });\n }\n }\n }\n }\n\n const tRank = performance.now();\n let results = [...byId.values()].sort(\n (a, b) => b.similarity - a.similarity,\n );\n\n const mmrLambda =\n resolveMmr(options.mmr) ??\n resolveMmr(\n this.retrievalConfig.mmr\n ? { lambda: this.retrievalConfig.mmr.lambda }\n : undefined,\n );\n let rankingReason = \"cosine similarity\";\n if (mmrLambda !== null) {\n results = applyMmr(results, Math.max(topK * 2, topK), mmrLambda);\n rankingReason = `MMR(lambda=${mmrLambda})`;\n }\n\n if (options.rerank && this.reranker) {\n const reranked = await this.reranker.rerank(\n query,\n results.map((r) => ({ id: r.id, text: r.content.text })),\n topK,\n );\n const order = new Map(\n reranked.map((r, i) => [r.id, { score: r.score, i }]),\n );\n results = results\n .filter((r) => order.has(r.id))\n .sort((a, b) => order.get(a.id)!.i - order.get(b.id)!.i)\n .map((r) => ({\n ...r,\n similarity: order.get(r.id)?.score ?? r.similarity,\n }));\n rankingReason = `reranker:${(this.reranker as { name?: string }).name ?? \"custom\"}`;\n }\n\n const rankingTime = performance.now() - tRank;\n trace.mark(\"rankingMs\", rankingTime);\n results = results.slice(0, topK);\n\n const tSer = performance.now();\n // Materialize final payload (serialization stage).\n const serialized = results.map((r) => ({ ...r }));\n trace.mark(\"serializationMs\", performance.now() - tSer);\n\n const telemetryFields = {\n provider: storage.name,\n query,\n filters: options.filter ?? null,\n returnedCount: serialized.length,\n memoryIds: serialized.map((r) => r.id),\n similarityScores: serialized.map((r) => r.similarity),\n embeddingProvider: embedding.model,\n model: embedding.model,\n agentId:\n options.filter?.agent ??\n commonAgent(serialized.map((result) => result.agent)),\n tags: commonTags(serialized.map((result) => result.metadata)),\n };\n\n if (!explain) {\n if (options.includeGraph === true && this.graph) {\n const tGraph = performance.now();\n for (const hit of serialized) {\n hit.related = await this.hydrateRelated(hit.id);\n }\n trace.mark(\"databaseReadMs\", performance.now() - tGraph);\n }\n trace.success(telemetryFields);\n return serialized;\n }\n\n const explanations: RecallExplanationHit[] = serialized.map((memory) => {\n const matchedFields: string[] = [\"content\"];\n if (options.filter?.agent) matchedFields.push(\"agent\");\n if (options.filter?.metadata) matchedFields.push(\"metadata\");\n return {\n memory,\n score: memory.similarity,\n distance: distances.get(memory.id) ?? 1 - memory.similarity,\n rankingReason,\n matchedFields,\n metadataMatch: metadataMatched.get(memory.id) ?? true,\n providerUsed: storage.name,\n searchTime,\n rankingTime,\n };\n });\n\n const totalTime = performance.now() - trace.startedAt;\n const persistedExplain: PersistedRecallExplainPayload = {\n enabled: true,\n providerUsed: storage.name,\n rankingStrategy: rankingReason,\n signals: {\n semantic: \"enabled\",\n keyword: keywordSignal,\n reranker:\n options.rerank === true && this.reranker ? \"enabled\" : \"disabled\",\n mmr: mmrLambda === null ? \"disabled\" : \"enabled\",\n recency: \"disabled\",\n },\n results: explanations.map((hit) => ({\n memoryId: hit.memory.id,\n score: hit.score,\n distance: hit.distance,\n rankingReason: hit.rankingReason,\n matchedFields: hit.matchedFields,\n metadataMatch: hit.metadataMatch,\n })),\n searchTimeMs: searchTime,\n rankingTimeMs: rankingTime,\n totalTimeMs: totalTime,\n };\n trace.success({ ...telemetryFields, explain: persistedExplain });\n\n return {\n results: explanations,\n providerUsed: storage.name,\n searchTime,\n rankingTime,\n totalTime,\n traceId: trace.context.traceId,\n };\n } catch (error) {\n trace.failure(error, {\n query: options.query,\n agentId: options.filter?.agent ?? null,\n });\n throw wrapOperationError(\"recall\", error);\n }\n }\n\n /** Batch recall — parent event + child traces. */\n async recallBatch(\n queries: Array<Omit<RecallOptions, \"explain\">>,\n ): Promise<RecallResult[][]> {\n const parent = this.telemetry.start(\"recallBatch\");\n try {\n if (!Array.isArray(queries) || queries.length === 0) {\n throw new ValidationError(\"recallBatch requires a non-empty array\");\n }\n const out: RecallResult[][] = [];\n for (const q of queries) {\n const child = parent.child(\"recall\");\n try {\n const hits = await this.recall({ ...q, explain: false });\n child.success({\n query: q.query,\n returnedCount: hits.length,\n memoryIds: hits.map((h) => h.id),\n similarityScores: hits.map((h) => h.similarity),\n });\n out.push(hits);\n } catch (error) {\n child.failure(error, { query: q.query });\n throw error;\n }\n }\n parent.success({\n returnedCount: out.reduce((n, r) => n + r.length, 0),\n extra: { queryCount: queries.length },\n });\n return out;\n } catch (error) {\n parent.failure(error);\n throw wrapOperationError(\"recallBatch\", error);\n }\n }\n\n async compress(\n this: Wolbarg<true>,\n options: CompressOptions,\n ): Promise<CompressResult> {\n return this.runCompress(options);\n }\n\n /** @internal */\n private async runCompress(options: CompressOptions): Promise<CompressResult> {\n const trace = this.telemetry.start(\"compress\");\n try {\n const { storage, embedding, organization } = await this.requireReady();\n if (!this.compression) {\n throw new ProviderNotConfiguredError(\n \"llm\",\n \"compress\",\n \"pass llm: openaiLlm(...) (or compression) in the constructor\",\n );\n }\n assertNonEmptyString(options.agent, \"agent\");\n const limit = options.limit ?? 50;\n assertFiniteNumber(limit, \"limit\", { min: 2, max: 500 });\n\n const tRead = performance.now();\n const rows = await storage.listMemories(\n {\n organization,\n agent: options.agent.trim(),\n includeArchived: false,\n },\n limit,\n );\n trace.mark(\"databaseReadMs\", performance.now() - tRead);\n\n if (rows.length < 2) {\n throw new ValidationError(\n \"compress requires at least 2 active memories for the given agent\",\n );\n }\n\n const records = rows.map(toMemoryRecord);\n const summaryText = await this.compression.compress(records);\n const tEmbed = performance.now();\n const vector = await embedding.embed(summaryText);\n trace.mark(\"embeddingMs\", performance.now() - tEmbed);\n this.assertEmbeddingDimensions(vector.length);\n\n const summaryId = createId();\n const timestamp = nowIso();\n\n const result = await this.withWriteLock(async () => {\n const tWrite = performance.now();\n const summaryRow = await storage.insertMemory({\n id: summaryId,\n organization,\n agent: options.agent.trim(),\n contentText: summaryText,\n metadata: {\n compressed: true,\n sourceCount: records.length,\n sourceIds: records.map((r) => r.id),\n },\n embedding: vector,\n createdAt: timestamp,\n updatedAt: timestamp,\n });\n\n const archivedIds = await storage.archiveMemories(\n records.map((r) => r.id),\n organization,\n summaryId,\n timestamp,\n );\n trace.mark(\"databaseWriteMs\", performance.now() - tWrite);\n\n return {\n summary: toMemoryRecord(summaryRow),\n archivedIds,\n };\n });\n\n trace.success({\n provider: storage.name,\n memoryIds: [result.summary.id, ...result.archivedIds],\n returnedCount: 1,\n agentId: options.agent.trim(),\n });\n this.emitChange({\n event: \"compress\",\n organization,\n agent: options.agent.trim(),\n memoryId: [result.summary.id, ...result.archivedIds],\n timestamp,\n sessionId: this.telemetry.sessionId,\n });\n return result;\n } catch (error) {\n trace.failure(error, { agentId: options.agent });\n throw wrapOperationError(\"compress\", error);\n }\n }\n\n async ingest(options: IngestOptions): Promise<IngestResult> {\n const trace = this.telemetry.start(\"ingest\");\n try {\n const { storage, embedding, organization } = await this.requireReady();\n assertNonEmptyString(options.agent, \"agent\");\n\n const loaded = await loadIngestSource(options.source);\n let usedOcr = false;\n let usedVision = false;\n let text = loaded.rawText ?? \"\";\n\n if (!loaded.rawText) {\n const parser = resolveParser(loaded.filename, loaded.mimeType);\n const parsed = await parser.parse({\n buffer: loaded.buffer,\n filename: loaded.filename,\n mimeType: loaded.mimeType,\n });\n text = parsed.text;\n\n if (parsed.isImage && parsed.imageBuffer) {\n const parts: string[] = [];\n if (this.ocr) {\n const ocrResult = await this.ocr.recognize(\n parsed.imageBuffer,\n parsed.mimeType,\n );\n if (ocrResult.text) {\n parts.push(ocrResult.text);\n usedOcr = true;\n }\n }\n if (this.vision) {\n const visionResult = await this.vision.analyze(\n parsed.imageBuffer,\n parsed.mimeType,\n );\n if (visionResult.caption) {\n parts.push(`Caption: ${visionResult.caption}`);\n }\n if (visionResult.description) {\n parts.push(visionResult.description);\n }\n if (visionResult.entities.length > 0) {\n parts.push(`Entities: ${visionResult.entities.join(\", \")}`);\n }\n if (parts.length > 0) {\n usedVision = true;\n }\n }\n text = parts.join(\"\\n\\n\").trim();\n }\n }\n\n if (!text) {\n throw new ValidationError(\n \"ingest could not extract text from the document (configure ocr/vision for images, or provide text)\",\n );\n }\n\n const strategy =\n this.chunking ??\n (options.chunking?.strategy\n ? createChunkingStrategy(options.chunking.strategy)\n : inferChunkingStrategy(text));\n\n const chunks = strategy.chunk(text, {\n chunkSize: options.chunking?.chunkSize,\n overlap: options.chunking?.overlap,\n });\n\n if (chunks.length === 0) {\n throw new ValidationError(\"ingest produced zero chunks\");\n }\n\n const tEmbed = performance.now();\n const vectors = await embedMany(\n embedding,\n chunks.map((c) => c.text),\n );\n trace.mark(\"embeddingMs\", performance.now() - tEmbed);\n for (const vector of vectors) {\n this.assertEmbeddingDimensions(vector.length);\n }\n\n const baseMeta = options.metadata ?? {};\n const timestamp = nowIso();\n const inputs = chunks.map((chunk, i) => ({\n id: createId(),\n organization,\n agent: options.agent.trim(),\n contentText: chunk.text,\n metadata: {\n ...baseMeta,\n ingest: true,\n chunkIndex: chunk.index,\n chunkCount: chunks.length,\n sourceFilename: loaded.filename ?? null,\n },\n embedding: vectors[i]!,\n createdAt: timestamp,\n updatedAt: timestamp,\n contentHash: this.memoryDedupe.enabled\n ? hashMemoryContent(chunk.text)\n : null,\n }));\n\n let rows;\n if (this.memoryDedupe.enabled) {\n const memories: RememberResult[] = [];\n for (let i = 0; i < chunks.length; i += 1) {\n const result = await this.rememberOne(\n {\n agent: options.agent.trim(),\n content: { text: chunks[i]!.text },\n metadata: {\n ...baseMeta,\n ingest: true,\n chunkIndex: chunks[i]!.index,\n chunkCount: chunks.length,\n sourceFilename: loaded.filename ?? null,\n },\n },\n trace,\n );\n memories.push(result);\n }\n const result = {\n memories,\n extractedChars: text.length,\n chunkCount: chunks.length,\n usedOcr,\n usedVision,\n };\n trace.success({\n provider: storage.name,\n memoryIds: result.memories.map((m) => m.id),\n returnedCount: result.memories.length,\n agentId: options.agent.trim(),\n tags: telemetryTags(baseMeta),\n });\n this.emitChange({\n event: \"ingest\",\n organization,\n agent: options.agent.trim(),\n memoryId: result.memories.map((m) => m.id),\n timestamp,\n sessionId: this.telemetry.sessionId,\n });\n return result;\n }\n\n rows = await this.withWriteLock(async () => {\n const tWrite = performance.now();\n const result = await storage.insertMemoriesBatch(inputs);\n trace.mark(\"databaseWriteMs\", performance.now() - tWrite);\n return result;\n });\n\n const result = {\n memories: rows.map(toMemoryRecord),\n extractedChars: text.length,\n chunkCount: chunks.length,\n usedOcr,\n usedVision,\n };\n trace.success({\n provider: storage.name,\n memoryIds: result.memories.map((m) => m.id),\n returnedCount: result.memories.length,\n agentId: options.agent.trim(),\n tags: telemetryTags(baseMeta),\n });\n this.emitChange({\n event: \"ingest\",\n organization,\n agent: options.agent.trim(),\n memoryId: result.memories.map((m) => m.id),\n timestamp,\n sessionId: this.telemetry.sessionId,\n });\n return result;\n } catch (error) {\n trace.failure(error, { agentId: options.agent });\n throw wrapOperationError(\"ingest\", error);\n }\n }\n\n /**\n * Link two memories in the optional graph layer.\n * Throws {@link ProviderNotConfiguredError} when no graph provider is set.\n */\n async linkMemories(\n fromId: string,\n toId: string,\n relation: string,\n metadata?: Record<string, unknown>,\n ): Promise<void> {\n const trace = this.telemetry.start(\"linkMemories\");\n try {\n await this.requireReady();\n const graph = this.requireGraph(\"linkMemories\");\n assertNonEmptyString(fromId, \"fromId\");\n assertNonEmptyString(toId, \"toId\");\n assertNonEmptyString(relation, \"relation\");\n const tGraph = performance.now();\n await graph.linkMemories(\n fromId.trim(),\n toId.trim(),\n relation.trim(),\n metadata,\n );\n trace.mark(\"databaseWriteMs\", performance.now() - tGraph);\n trace.success({\n provider: graph.name,\n memoryIds: [fromId.trim(), toId.trim()],\n extra: { relation: relation.trim() },\n });\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"linkMemories\", error);\n }\n }\n\n /**\n * Traverse related memories via the optional graph layer.\n * Throws {@link ProviderNotConfiguredError} when no graph provider is set.\n * Results are re-hydrated from SQL storage when available.\n */\n async getRelated(\n memoryId: string,\n options?: GetRelatedOptions,\n ): Promise<MemoryRecord[]> {\n const trace = this.telemetry.start(\"getRelated\");\n try {\n await this.requireReady();\n const graph = this.requireGraph(\"getRelated\");\n assertNonEmptyString(memoryId, \"memoryId\");\n const tGraph = performance.now();\n const related = await this.hydrateRelated(memoryId.trim(), options);\n trace.mark(\"databaseReadMs\", performance.now() - tGraph);\n trace.success({\n provider: graph.name,\n memoryIds: [memoryId.trim(), ...related.map((r) => r.id)],\n returnedCount: related.length,\n });\n return related;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"getRelated\", error);\n }\n }\n\n async forget(options: ForgetOptions): Promise<number> {\n const trace = this.telemetry.start(\"forget\");\n try {\n const { storage, organization } = await this.requireReady();\n\n const deletedIds: string[] = [];\n const deleted = await this.withWriteLock(async () => {\n if (\"id\" in options && options.id !== undefined) {\n assertNonEmptyString(options.id, \"id\");\n const id = options.id.trim();\n const ok = await storage.deleteMemoryById(id, organization);\n if (ok) deletedIds.push(id);\n return ok ? 1 : 0;\n }\n\n if (\"filter\" in options && options.filter?.agent) {\n assertNonEmptyString(options.filter.agent, \"filter.agent\");\n const rows = await storage.listMemories({\n organization,\n agent: options.filter.agent.trim(),\n includeArchived: true,\n });\n for (const row of rows) deletedIds.push(row.id);\n return storage.deleteMemoriesByFilter({\n organization,\n agent: options.filter.agent.trim(),\n includeArchived: true,\n });\n }\n\n throw new ValidationError(\n \"forget requires either { id } or { filter: { agent } }\",\n );\n });\n\n if (deleted > 0 && this.graph && deletedIds.length > 0) {\n const tGraph = performance.now();\n for (const id of deletedIds) {\n await this.graph.deleteMemory(id);\n }\n trace.mark(\"databaseWriteMs\", performance.now() - tGraph);\n }\n\n trace.success({\n provider: storage.name,\n returnedCount: deleted,\n memoryIds: deletedIds.length > 0 ? deletedIds : null,\n filters: \"filter\" in options ? options.filter : null,\n agentId:\n \"filter\" in options ? options.filter?.agent?.trim() ?? null : null,\n extra: this.graph\n ? { graphCascade: deletedIds.length }\n : undefined,\n });\n if (deleted > 0) {\n this.emitChange({\n event: \"forget\",\n organization,\n agent:\n (\"filter\" in options && options.filter?.agent?.trim()) ||\n (\"id\" in options ? \"*\" : \"*\"),\n memoryId:\n \"id\" in options && options.id ? options.id.trim() : [],\n timestamp: nowIso(),\n sessionId: this.telemetry.sessionId,\n });\n }\n return deleted;\n } catch (error) {\n trace.failure(error, {\n agentId: \"filter\" in options ? options.filter?.agent ?? null : null,\n });\n throw wrapOperationError(\"forget\", error);\n }\n }\n\n async history(options: HistoryOptions): Promise<HistoryResult> {\n const trace = this.telemetry.start(\"history\");\n try {\n const { storage, organization } = await this.requireReady();\n assertNonEmptyString(options.id, \"id\");\n\n const row = await storage.getMemoryById(options.id.trim(), organization);\n if (!row) {\n throw new MemoryNotFoundError(`Memory not found: ${options.id}`);\n }\n\n const events = await storage.getHistory(row.id);\n const result = {\n memory: toMemoryRecord(row),\n events: events.map(toHistoryEvent),\n };\n trace.success({\n provider: storage.name,\n memoryIds: [row.id],\n returnedCount: events.length,\n agentId: row.agent,\n tags: telemetryTags(deserializeMetadata(row.metadata_json)),\n });\n return result;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"history\", error);\n }\n }\n\n async stats(): Promise<StatsResult> {\n const trace = this.telemetry.start(\"stats\");\n try {\n const { storage, embedding, organization } = await this.requireReady();\n const counts = await storage.getStats(organization);\n const databaseSizeBytes = await storage.getDatabaseSizeBytes();\n\n const result = {\n totalMemories: counts.totalMemories,\n activeMemories: counts.activeMemories,\n archivedMemories: counts.archivedMemories,\n totalAgents: counts.totalAgents,\n databaseSizeBytes,\n embeddingModel: embedding.model,\n llmModel: this.llm?.model ?? null,\n organization,\n embeddingDimensions: this.embeddingDimensions ?? 0,\n };\n trace.success({\n provider: storage.name,\n returnedCount: result.totalMemories,\n });\n return result;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"stats\", error);\n }\n }\n\n async clear(options: ClearOptions): Promise<number> {\n const trace = this.telemetry.start(\"clear\");\n try {\n const { storage, organization } = await this.requireReady();\n\n if (!options || options.confirm !== true) {\n throw new ValidationError(\n \"clear requires { confirm: true } to permanently delete all memories\",\n );\n }\n\n const deleted = await this.withWriteLock(async () => {\n if (this.graph) {\n const rows = await storage.listMemories({\n organization,\n includeArchived: true,\n });\n for (const row of rows) {\n await this.graph.deleteMemory(row.id);\n }\n }\n return storage.clearOrganization(organization);\n });\n trace.success({ provider: storage.name, returnedCount: deleted });\n return deleted;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"clear\", error);\n }\n }\n\n /** Create an immutable named checkpoint of the memory database. */\n async checkpoint(\n name: string,\n options?: CheckpointOptions,\n ): Promise<CheckpointInfo> {\n const trace = this.telemetry.start(\"checkpoint\");\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const source = this.requireMemoryDbPath();\n this.assertGraphCheckpointSupported(\"checkpoint\");\n const tCheckpoint = performance.now();\n const meta = await provider.checkpoint(name, source, options);\n await this.snapshotGraphAlongside(meta.snapshotPath, \"checkpoint\");\n trace.mark(\"databaseWriteMs\", performance.now() - tCheckpoint);\n trace.success({\n provider: provider.name,\n checkpointId: meta.name,\n extra: { checkpoint: meta.name },\n });\n return meta;\n } catch (error) {\n trace.failure(error, { checkpointId: name });\n throw wrapOperationError(\"checkpoint\", error);\n }\n }\n\n /** Restore the memory database from a named checkpoint. */\n async rollback(name: string): Promise<CheckpointInfo> {\n const trace = this.telemetry.start(\"rollback\");\n let storageClosed = false;\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const target = this.requireMemoryDbPath();\n\n // Validate before closing — a missing checkpoint must not leave storage shut.\n const existing = await provider.getCheckpoint(name);\n if (!existing) {\n throw new ValidationError(`Checkpoint \"${name}\" was not found`);\n }\n\n // Close storage before replacing the file.\n if (this.storage) {\n await this.storage.close();\n storageClosed = true;\n }\n const graphClosed = await this.closeGraphForSnapshot();\n const tRollback = performance.now();\n const meta = await provider.rollback(name, target);\n await this.restoreGraphAlongside(meta.snapshotPath, \"rollback\");\n if (graphClosed) {\n await this.graph?.open();\n }\n trace.mark(\"databaseWriteMs\", performance.now() - tRollback);\n await this.storage?.open();\n storageClosed = false;\n if (this.embeddingDimensions !== null) {\n await this.storage?.ensureVectorSchema(this.embeddingDimensions);\n }\n\n trace.success({\n provider: provider.name,\n checkpointId: meta.name,\n extra: { checkpoint: meta.name },\n });\n return meta;\n } catch (error) {\n if (storageClosed && this.storage) {\n await this.storage.open().catch(() => undefined);\n if (this.embeddingDimensions !== null) {\n await this.storage\n .ensureVectorSchema(this.embeddingDimensions)\n .catch(() => undefined);\n }\n }\n trace.failure(error, { checkpointId: name });\n throw wrapOperationError(\"rollback\", error);\n }\n }\n\n async deleteCheckpoint(name: string): Promise<boolean> {\n const trace = this.telemetry.start(\"deleteCheckpoint\");\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const tDelete = performance.now();\n const removed = await provider.deleteCheckpoint(name);\n trace.mark(\"databaseWriteMs\", performance.now() - tDelete);\n trace.success({\n provider: provider.name,\n checkpointId: name,\n returnedCount: removed ? 1 : 0,\n });\n return removed;\n } catch (error) {\n trace.failure(error, { checkpointId: name });\n throw wrapOperationError(\"deleteCheckpoint\", error);\n }\n }\n\n async listCheckpoints(): Promise<CheckpointInfo[]> {\n const trace = this.telemetry.start(\"listCheckpoints\");\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const tList = performance.now();\n const list = await provider.listCheckpoints();\n trace.mark(\"databaseReadMs\", performance.now() - tList);\n trace.success({\n provider: provider.name,\n returnedCount: list.length,\n });\n return list;\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"listCheckpoints\", error);\n }\n }\n\n async getCheckpoint(name: string): Promise<CheckpointInfo | null> {\n const trace = this.telemetry.start(\"getCheckpoint\");\n try {\n await this.requireReady();\n const provider = this.requireCheckpointProvider();\n const tGet = performance.now();\n const meta = await provider.getCheckpoint(name);\n trace.mark(\"databaseReadMs\", performance.now() - tGet);\n trace.success({\n provider: provider.name,\n checkpointId: name,\n returnedCount: meta ? 1 : 0,\n });\n return meta;\n } catch (error) {\n trace.failure(error, { checkpointId: name });\n throw wrapOperationError(\"getCheckpoint\", error);\n }\n }\n\n /** Export the memory database to a portable SQLite + manifest bundle. */\n async export(exportPath: string): Promise<ExportResult> {\n const trace = this.telemetry.start(\"export\");\n try {\n await this.requireReady();\n const source = this.requireMemoryDbPath();\n this.assertGraphCheckpointSupported(\"export\");\n // Checkpoint WAL so export sees a consistent file.\n if (this.storage?.name === \"sqlite\") {\n // best-effort consistency via transfer helper\n }\n const result: MemoryExportResult = await this.transfer.exportTo(\n exportPath,\n source,\n this.organization ?? undefined,\n );\n await this.snapshotGraphAlongside(result.path, \"export\");\n trace.success({\n provider: \"sqlite\",\n extra: { path: result.path, sizeBytes: result.sizeBytes },\n });\n return {\n path: result.path,\n sizeBytes: result.sizeBytes,\n exportedAt: result.manifest.exportedAt,\n };\n } catch (error) {\n trace.failure(error);\n throw wrapOperationError(\"export\", error);\n }\n }\n\n /** Import a previously exported memory database, replacing the current file. */\n async import(exportPath: string): Promise<ImportResult> {\n const trace = this.telemetry.start(\"import\");\n let storageClosed = false;\n try {\n await this.requireReady();\n const target = this.requireMemoryDbPath();\n if (this.storage) {\n await this.storage.close();\n storageClosed = true;\n }\n const graphClosed = await this.closeGraphForSnapshot();\n this.assertGraphCheckpointSupported(\"import\");\n const result: MemoryImportResult = await this.transfer.importFrom(\n exportPath,\n target,\n );\n await this.restoreGraphAlongside(result.path, \"import\");\n if (graphClosed) {\n await this.graph?.open();\n }\n await this.storage?.open();\n storageClosed = false;\n if (this.embeddingDimensions !== null) {\n await this.storage?.ensureVectorSchema(this.embeddingDimensions);\n }\n trace.success({\n provider: \"sqlite\",\n extra: { path: result.path },\n });\n return {\n path: result.path,\n importedAt: nowIso(),\n };\n } catch (error) {\n if (storageClosed && this.storage) {\n await this.storage.open().catch(() => undefined);\n if (this.embeddingDimensions !== null) {\n await this.storage\n .ensureVectorSchema(this.embeddingDimensions)\n .catch(() => undefined);\n }\n }\n trace.failure(error);\n throw wrapOperationError(\"import\", error);\n }\n }\n\n /** Flush pending telemetry (useful in tests). */\n async flushTelemetry(): Promise<void> {\n await this.telemetry.flush();\n }\n\n /** Session id for this SDK instance (telemetry traces). */\n get sessionId(): string {\n return this.telemetry.sessionId;\n }\n\n /**\n * Optional process-wide lock for SQLite read-modify-write (dedupe upsert).\n * Plain inserts must NOT take this lock — the provider coalesces concurrent\n * insertMemory calls under a single BEGIN IMMEDIATE for multi-writer throughput.\n */\n private withWriteLock<T>(\n fn: () => Promise<T>,\n options?: { exclusive?: boolean },\n ): Promise<T> {\n if (\n options?.exclusive &&\n this.storage?.name === \"sqlite\"\n ) {\n return this.writeMutex.runExclusive(fn);\n }\n return fn();\n }\n\n async close(): Promise<void> {\n if (this.storage) {\n this.telemetry.emitShutdown(this.storage.name);\n }\n await this.subscribeBackend?.close().catch(() => undefined);\n await this.pgListenBackend?.close().catch(() => undefined);\n this.subscribeBackend = null;\n this.pgListenBackend = null;\n await this.telemetry.close().catch(() => undefined);\n await this.checkpointProvider?.close().catch(() => undefined);\n await this.graph?.close().catch(() => undefined);\n this.graph = null;\n if (this.storage) {\n await this.storage.close();\n }\n this.storage = null;\n this.embedding = null;\n this.rawEmbedding = null;\n this.llm = null;\n this.compression = null;\n this.organization = null;\n this.embeddingDimensions = null;\n this.initialized = false;\n }\n\n get isInitialized(): boolean {\n return this.initialized;\n }\n\n private async requireReady(): Promise<ReadyState> {\n await this.ready();\n if (\n !this.initialized ||\n !this.storage ||\n !this.embedding ||\n !this.organization\n ) {\n throw new InitializationError(\n \"Wolbarg is not initialized. Pass options to the constructor or call init().\",\n );\n }\n return {\n storage: this.storage,\n embedding: this.embedding,\n organization: this.organization,\n };\n }\n\n private assertEmbeddingDimensions(dimensions: number): void {\n if (\n this.embeddingDimensions !== null &&\n dimensions !== this.embeddingDimensions\n ) {\n throw new ValidationError(\n `Embedding dimension mismatch: expected ${this.embeddingDimensions}, got ${dimensions}`,\n );\n }\n }\n\n private requireCheckpointProvider(): CheckpointProvider {\n if (!this.checkpointProvider) {\n throw new ProviderNotConfiguredError(\n \"checkpoint\",\n \"checkpoint\",\n \"construct Wolbarg with a file-backed database\",\n );\n }\n return this.checkpointProvider;\n }\n\n private requireGraph(method: string): GraphProvider {\n if (!this.graph) {\n throw new ProviderNotConfiguredError(\n \"graph\",\n method,\n \"pass graph: sqliteGraph({ path }) or graph: neo4jGraph({ url, username, password })\",\n );\n }\n return this.graph;\n }\n\n private assertGraphCheckpointSupported(operation: string): void {\n if (!this.graph) return;\n if (!this.graph.supportsFileSnapshot()) {\n throw new GraphCheckpointNotSupportedError(this.graph.name, operation);\n }\n }\n\n private graphSnapshotDir(alongsidePath: string): string {\n return `${alongsidePath}.graph`;\n }\n\n private async closeGraphForSnapshot(): Promise<boolean> {\n if (!this.graph || !this.graph.supportsFileSnapshot()) return false;\n await this.graph.close();\n return true;\n }\n\n private async snapshotGraphAlongside(\n alongsidePath: string,\n operation: string,\n ): Promise<void> {\n if (!this.graph) return;\n if (!this.graph.supportsFileSnapshot()) {\n throw new GraphCheckpointNotSupportedError(this.graph.name, operation);\n }\n const dataPath = this.graph.getDataPath();\n if (!dataPath) return;\n const dest = this.graphSnapshotDir(alongsidePath);\n // Close briefly so files are consistent on Windows.\n await this.graph.close();\n try {\n if (fs.existsSync(dest)) {\n fs.rmSync(dest, { recursive: true, force: true });\n }\n if (fs.existsSync(dataPath)) {\n const stat = fs.statSync(dataPath);\n if (stat.isDirectory()) {\n fs.cpSync(dataPath, dest, { recursive: true });\n } else {\n fs.mkdirSync(dest, { recursive: true });\n fs.cpSync(dataPath, path.join(dest, path.basename(dataPath)));\n // Copy sibling WAL/SHM files if present (SQLite graph file).\n const parent = path.dirname(dataPath);\n const base = path.basename(dataPath);\n for (const entry of fs.readdirSync(parent)) {\n if (entry === base) continue;\n if (entry.startsWith(base)) {\n fs.cpSync(\n path.join(parent, entry),\n path.join(dest, entry),\n { recursive: true },\n );\n }\n }\n }\n }\n } finally {\n await this.graph.open();\n }\n }\n\n private async restoreGraphAlongside(\n alongsidePath: string,\n operation: string,\n ): Promise<void> {\n if (!this.graph) return;\n if (!this.graph.supportsFileSnapshot()) {\n throw new GraphCheckpointNotSupportedError(this.graph.name, operation);\n }\n const dataPath = this.graph.getDataPath();\n if (!dataPath) return;\n const src = this.graphSnapshotDir(alongsidePath);\n if (!fs.existsSync(src)) {\n // Older checkpoints without graph snapshot — leave graph empty/as-is.\n return;\n }\n if (fs.existsSync(dataPath)) {\n fs.rmSync(dataPath, { recursive: true, force: true });\n }\n const entries = fs.readdirSync(src);\n if (entries.length === 1 && entries[0] === path.basename(dataPath)) {\n fs.mkdirSync(path.dirname(dataPath), { recursive: true });\n fs.cpSync(path.join(src, entries[0]!), dataPath, { recursive: true });\n } else {\n fs.mkdirSync(path.dirname(dataPath), { recursive: true });\n fs.cpSync(src, dataPath, { recursive: true });\n }\n }\n\n private async hydrateRelated(\n memoryId: string,\n options?: GetRelatedOptions,\n ): Promise<MemoryRecord[]> {\n const graph = this.requireGraph(\"getRelated\");\n const related = await graph.getRelated(memoryId, options);\n const { storage, organization } = await this.requireReady();\n const out: MemoryRecord[] = [];\n for (const stub of related) {\n const row = await storage.getMemoryById(stub.id, organization);\n if (row) {\n out.push(toMemoryRecord(row));\n } else {\n out.push(stub);\n }\n }\n return out;\n }\n\n private requireMemoryDbPath(): string {\n if (!this.memoryDbPath || this.memoryDbPath === \":memory:\") {\n throw new ConfigurationError(\n \"This operation requires a file-backed SQLite memory database (not :memory:).\",\n {\n suggestion:\n 'Use database: { provider: \"sqlite\", url: \"./memory.db\" }',\n },\n );\n }\n return path.isAbsolute(this.memoryDbPath)\n ? this.memoryDbPath\n : path.resolve(process.cwd(), this.memoryDbPath);\n }\n}\n\n/** Preferred v0.3 entry — re-exported from factories as well. */\nexport function wolbarg(options: WolbargOptions): Wolbarg {\n return new Wolbarg(options as never);\n}\n\nfunction telemetryTags(metadata: Record<string, unknown>): string[] | null {\n const value = metadata.tags;\n if (typeof value === \"string\") {\n const tag = value.trim();\n return tag ? [tag] : null;\n }\n if (Array.isArray(value)) {\n const tags = value.filter(\n (tag): tag is string => typeof tag === \"string\" && tag.trim().length > 0,\n );\n return tags.length > 0 ? tags.map((tag) => tag.trim()) : null;\n }\n return null;\n}\n\nfunction commonAgent(agents: string[]): string | null {\n const first = agents[0];\n return first && agents.every((agent) => agent === first) ? first : null;\n}\n\nfunction commonTags(metadata: Array<Record<string, unknown>>): string[] | null {\n const tags = new Set<string>();\n for (const item of metadata) {\n for (const tag of telemetryTags(item) ?? []) tags.add(tag);\n }\n return tags.size > 0 ? [...tags] : null;\n}\n","/**\n * Metadata filter AST for advanced recall filtering.\n */\n\n/** Comparison operators on a single metadata field. */\nexport type MetadataComparison =\n | { eq: unknown }\n | { contains: string }\n | { gt: number | string }\n | { gte: number | string }\n | { lt: number | string }\n | { lte: number | string }\n | { between: [number | string, number | string] };\n\n/** Recursive metadata filter supporting boolean combinators. */\nexport type MetadataFilter =\n | { field: string; op: MetadataComparison }\n | { and: MetadataFilter[] }\n | { or: MetadataFilter[] }\n | { not: MetadataFilter };\n\n/** Helpers for building filters fluently. */\nexport const meta = {\n eq: (field: string, value: unknown): MetadataFilter => ({\n field,\n op: { eq: value },\n }),\n contains: (field: string, value: string): MetadataFilter => ({\n field,\n op: { contains: value },\n }),\n gt: (field: string, value: number | string): MetadataFilter => ({\n field,\n op: { gt: value },\n }),\n gte: (field: string, value: number | string): MetadataFilter => ({\n field,\n op: { gte: value },\n }),\n lt: (field: string, value: number | string): MetadataFilter => ({\n field,\n op: { lt: value },\n }),\n lte: (field: string, value: number | string): MetadataFilter => ({\n field,\n op: { lte: value },\n }),\n between: (\n field: string,\n lo: number | string,\n hi: number | string,\n ): MetadataFilter => ({\n field,\n op: { between: [lo, hi] },\n }),\n and: (...filters: MetadataFilter[]): MetadataFilter => ({ and: filters }),\n or: (...filters: MetadataFilter[]): MetadataFilter => ({ or: filters }),\n not: (filter: MetadataFilter): MetadataFilter => ({ not: filter }),\n};\n","/**\n * Public factory helpers for storage / providers.\n */\n\nimport type {\n PostgresDatabaseConfig,\n SqliteDatabaseConfig,\n TelemetryConfig,\n} from \"../types/index.js\";\nimport { SqliteStorageProvider } from \"../storage/providers/sqlite.js\";\nimport { PostgresStorageProvider } from \"../storage/providers/postgres.js\";\nimport type { StorageProvider } from \"../storage/types.js\";\nimport { SqliteTelemetryProvider } from \"../providers/sqlite/sqliteTelemetryProvider.js\";\nimport { SqliteCheckpointProvider } from \"../providers/sqlite/sqliteCheckpointProvider.js\";\nimport type { TelemetryProvider } from \"../providers/interfaces/TelemetryProvider.js\";\nimport type { CheckpointProvider } from \"../providers/interfaces/CheckpointProvider.js\";\nimport { SqliteGraphProvider } from \"../graph/providers/sqlite-graph.js\";\nimport { Neo4jGraphProvider } from \"../graph/providers/neo4j.js\";\nimport type { GraphProvider } from \"../graph/types.js\";\nimport { ConfigurationError } from \"../errors/index.js\";\nimport type { WolbargOptions } from \"../core/options.js\";\nimport { Wolbarg } from \"../core/wolbarg.js\";\n\n/** Create a SQLite storage provider from a path or `:memory:`. */\nexport function sqlite(connectionString: string): StorageProvider {\n return new SqliteStorageProvider({ connectionString });\n}\n\n/** Create a SQLite storage config object (for init / options). */\nexport function sqliteConfig(\n connectionString: string,\n): SqliteDatabaseConfig {\n return {\n provider: \"sqlite\",\n connectionString,\n url: connectionString,\n };\n}\n\n/** Create a PostgreSQL storage provider. Requires optional peer dependency `pg`. */\nexport function postgres(\n options:\n | string\n | {\n connectionString: string;\n maxPoolSize?: number;\n /** Default true. Set false for higher write throughput (async commit). */\n durableWrites?: boolean;\n },\n): StorageProvider {\n const opts =\n typeof options === \"string\"\n ? { connectionString: options }\n : options;\n return new PostgresStorageProvider(opts);\n}\n\n/** Create a PostgreSQL storage config object. */\nexport function postgresConfig(\n connectionString: string,\n options?: { maxPoolSize?: number; durableWrites?: boolean },\n): PostgresDatabaseConfig {\n return {\n provider: \"postgres\",\n connectionString,\n url: connectionString,\n ...options,\n };\n}\n\n/** Create a SQLite telemetry provider for an independent event database. */\nexport function sqliteTelemetry(url: string): TelemetryProvider {\n return new SqliteTelemetryProvider({ url });\n}\n\n/** Create a SQLite checkpoint provider. */\nexport function sqliteCheckpoint(directory?: string): CheckpointProvider {\n return new SqliteCheckpointProvider({ directory });\n}\n\n/** Create an embedded SQLite graph provider (file-backed, local/dev). */\nexport function sqliteGraph(options: { path: string }): GraphProvider {\n return new SqliteGraphProvider(options);\n}\n\n/** Create a Neo4j graph provider (networked). Requires optional peer `neo4j-driver`. */\nexport function neo4jGraph(options: {\n url: string;\n username: string;\n password: string;\n database?: string;\n}): GraphProvider {\n return new Neo4jGraphProvider(options);\n}\n\n/** Create a telemetry provider from config (SQLite only in v0.3). */\nexport function createTelemetryProvider(\n config: TelemetryConfig,\n): TelemetryProvider {\n if (config.database.provider !== \"sqlite\") {\n throw new ConfigurationError(\n `Unsupported telemetry provider \"${config.database.provider}\". Only \"sqlite\" is implemented. Telemetry supports sqlite or postgres only — not kuzu/neo4j.`,\n );\n }\n const url =\n config.database.url ?? config.database.connectionString ?? \"\";\n if (!url) {\n throw new ConfigurationError(\"telemetry.database.url is required\");\n }\n return new SqliteTelemetryProvider({ url });\n}\n\n/**\n * Preferred v0.3 factory. Equivalent to `new Wolbarg(options)`.\n */\nexport function wolbarg(options: WolbargOptions): Wolbarg {\n return new Wolbarg(options as never);\n}\n","/**\n * Keyword / BM25 search providers.\n */\n\nexport interface KeywordSearchHit {\n memoryId: string;\n score: number;\n}\n\nexport interface KeywordDocument {\n id: string;\n text: string;\n}\n\n/** Contract for keyword / lexical search. */\nexport interface KeywordSearchProvider {\n readonly name: string;\n search(\n query: string,\n documents: KeywordDocument[],\n topK: number,\n ): Promise<KeywordSearchHit[]>;\n}\n\n/** Simple in-memory BM25 (Okapi). */\nexport class Bm25KeywordSearchProvider implements KeywordSearchProvider {\n readonly name = \"bm25\";\n private readonly k1: number;\n private readonly b: number;\n\n constructor(options?: { k1?: number; b?: number }) {\n this.k1 = options?.k1 ?? 1.2;\n this.b = options?.b ?? 0.75;\n }\n\n async search(\n query: string,\n documents: KeywordDocument[],\n topK: number,\n ): Promise<KeywordSearchHit[]> {\n if (documents.length === 0 || topK <= 0) {\n return [];\n }\n\n const docs = documents.map((doc) => ({\n id: doc.id,\n tokens: tokenize(doc.text),\n }));\n const queryTokens = tokenize(query);\n if (queryTokens.length === 0) {\n return [];\n }\n\n const N = docs.length;\n const avgdl =\n docs.reduce((sum, d) => sum + d.tokens.length, 0) / Math.max(N, 1);\n\n const df = new Map<string, number>();\n for (const term of new Set(queryTokens)) {\n let count = 0;\n for (const doc of docs) {\n if (doc.tokens.includes(term)) {\n count += 1;\n }\n }\n df.set(term, count);\n }\n\n const scored = docs.map((doc) => {\n const tfMap = new Map<string, number>();\n for (const token of doc.tokens) {\n tfMap.set(token, (tfMap.get(token) ?? 0) + 1);\n }\n let score = 0;\n for (const term of queryTokens) {\n const tf = tfMap.get(term) ?? 0;\n if (tf === 0) {\n continue;\n }\n const n = df.get(term) ?? 0;\n const idf = Math.log(1 + (N - n + 0.5) / (n + 0.5));\n const denom =\n tf + this.k1 * (1 - this.b + this.b * (doc.tokens.length / avgdl));\n score += idf * ((tf * (this.k1 + 1)) / denom);\n }\n return { memoryId: doc.id, score };\n });\n\n scored.sort((a, b) => b.score - a.score);\n return scored.filter((s) => s.score > 0).slice(0, topK);\n }\n}\n\nfunction tokenize(text: string): string[] {\n return text\n .toLowerCase()\n .split(/[^\\p{L}\\p{N}]+/u)\n .filter((t) => t.length > 1);\n}\n\n/** Factory for in-memory BM25 keyword search. */\nexport function bm25(options?: { k1?: number; b?: number }): KeywordSearchProvider {\n return new Bm25KeywordSearchProvider(options);\n}\n","/**\n * Reranker provider abstractions.\n */\n\nexport interface RerankDocument {\n id: string;\n text: string;\n}\n\nexport interface RerankHit {\n id: string;\n score: number;\n}\n\n/** Contract for cross-encoder / API rerankers. */\nexport interface RerankerProvider {\n readonly name: string;\n rerank(\n query: string,\n documents: RerankDocument[],\n topK: number,\n ): Promise<RerankHit[]>;\n}\n\ninterface HttpRerankerOptions {\n name: string;\n url: string;\n apiKey: string;\n model?: string;\n timeoutMs?: number;\n /** Build request body for the provider. */\n buildBody: (\n query: string,\n documents: RerankDocument[],\n topK: number,\n model?: string,\n ) => unknown;\n /** Parse ranked results from JSON response. */\n parseResults: (body: unknown, documents: RerankDocument[]) => RerankHit[];\n}\n\nclass HttpRerankerProvider implements RerankerProvider {\n readonly name: string;\n private readonly options: HttpRerankerOptions;\n\n constructor(options: HttpRerankerOptions) {\n this.name = options.name;\n this.options = options;\n }\n\n async rerank(\n query: string,\n documents: RerankDocument[],\n topK: number,\n ): Promise<RerankHit[]> {\n if (documents.length === 0) {\n return [];\n }\n const controller = new AbortController();\n const timeoutMs = this.options.timeoutMs ?? 30_000;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const res = await fetch(this.options.url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.options.apiKey}`,\n },\n body: JSON.stringify(\n this.options.buildBody(\n query,\n documents,\n topK,\n this.options.model,\n ),\n ),\n signal: controller.signal,\n });\n const body: unknown = await res.json().catch(() => ({}));\n if (!res.ok) {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n }\n const parsed = this.options.parseResults(body, documents);\n return parsed.slice(0, topK);\n } catch {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\n/** Lightweight local cross-encoder proxy (OpenAI-compatible score endpoint fallback = identity order). */\nexport function crossEncoder(options: {\n baseUrl: string;\n apiKey: string;\n model?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n const base = options.baseUrl.replace(/\\/+$/, \"\");\n return new HttpRerankerProvider({\n name: \"cross-encoder\",\n url: `${base}/rerank`,\n apiKey: options.apiKey,\n model: options.model,\n timeoutMs: options.timeoutMs,\n buildBody: (query, documents, topK, model) => ({\n model,\n query,\n documents: documents.map((d) => d.text),\n top_n: topK,\n }),\n parseResults: (body, documents) => {\n const results =\n (body as { results?: Array<{ index: number; relevance_score: number }> })\n .results ?? [];\n return results.map((r) => ({\n id: documents[r.index]?.id ?? String(r.index),\n score: r.relevance_score,\n }));\n },\n });\n}\n\nexport function jinaReranker(options: {\n apiKey: string;\n model?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n return new HttpRerankerProvider({\n name: \"jina\",\n url: \"https://api.jina.ai/v1/rerank\",\n apiKey: options.apiKey,\n model: options.model ?? \"jina-reranker-v2-base-multilingual\",\n timeoutMs: options.timeoutMs,\n buildBody: (query, documents, topK, model) => ({\n model,\n query,\n documents: documents.map((d) => d.text),\n top_n: topK,\n }),\n parseResults: (body, documents) => {\n const results =\n (body as { results?: Array<{ index: number; relevance_score: number }> })\n .results ?? [];\n return results.map((r) => ({\n id: documents[r.index]?.id ?? String(r.index),\n score: r.relevance_score,\n }));\n },\n });\n}\n\nexport function cohereReranker(options: {\n apiKey: string;\n model?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n return new HttpRerankerProvider({\n name: \"cohere\",\n url: \"https://api.cohere.com/v2/rerank\",\n apiKey: options.apiKey,\n model: options.model ?? \"rerank-v3.5\",\n timeoutMs: options.timeoutMs,\n buildBody: (query, documents, topK, model) => ({\n model,\n query,\n documents: documents.map((d) => d.text),\n top_n: topK,\n }),\n parseResults: (body, documents) => {\n const results =\n (body as { results?: Array<{ index: number; relevance_score: number }> })\n .results ?? [];\n return results.map((r) => ({\n id: documents[r.index]?.id ?? String(r.index),\n score: r.relevance_score,\n }));\n },\n });\n}\n\n/** Alias for BGE-style remote rerank endpoints that speak the Jina/Cohere shape. */\nexport function bgeReranker(options: {\n apiKey: string;\n baseUrl: string;\n model?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n const base = options.baseUrl.replace(/\\/+$/, \"\");\n return new HttpRerankerProvider({\n name: \"bge\",\n url: `${base}/rerank`,\n apiKey: options.apiKey,\n model: options.model,\n timeoutMs: options.timeoutMs,\n buildBody: (query, documents, topK, model) => ({\n model,\n query,\n documents: documents.map((d) => d.text),\n top_n: topK,\n }),\n parseResults: (body, documents) => {\n const results =\n (body as { results?: Array<{ index: number; relevance_score: number }> })\n .results ?? [];\n return results.map((r) => ({\n id: documents[r.index]?.id ?? String(r.index),\n score: r.relevance_score,\n }));\n },\n });\n}\n\n/**\n * OpenAI chat-based reranker (no Cohere/Jina key required).\n * Scores query–document relevance via chat completions and reorders hits.\n */\nexport function openaiReranker(options: {\n apiKey: string;\n model?: string;\n baseUrl?: string;\n timeoutMs?: number;\n}): RerankerProvider {\n const base = (options.baseUrl ?? \"https://api.openai.com/v1\").replace(\n /\\/+$/,\n \"\",\n );\n const model = options.model ?? \"gpt-4.1-mini\";\n const timeoutMs = options.timeoutMs ?? 60_000;\n\n return {\n name: \"openai\",\n async rerank(query, documents, topK) {\n if (documents.length === 0) {\n return [];\n }\n const listed = documents\n .map((d, i) => `[${i}] ${d.text.slice(0, 800)}`)\n .join(\"\\n\\n\");\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const res = await fetch(`${base}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${options.apiKey}`,\n },\n body: JSON.stringify({\n model,\n temperature: 0,\n response_format: { type: \"json_object\" },\n messages: [\n {\n role: \"system\",\n content:\n 'You rerank documents for a retrieval system. Reply ONLY with JSON: {\"results\":[{\"index\":0,\"score\":0.0}]} where score is 0-1 relevance.',\n },\n {\n role: \"user\",\n content: `Query: ${query}\\n\\nDocuments:\\n${listed}\\n\\nReturn the top ${topK} indices sorted by score descending.`,\n },\n ],\n }),\n signal: controller.signal,\n });\n const body = (await res.json()) as {\n choices?: Array<{ message?: { content?: string } }>;\n };\n const content = body.choices?.[0]?.message?.content ?? \"{}\";\n let parsed: { results?: Array<{ index: number; score: number }> };\n try {\n parsed = JSON.parse(content) as typeof parsed;\n } catch {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n }\n const results = parsed.results ?? [];\n if (results.length === 0) {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n }\n return results\n .filter((r) => documents[r.index])\n .slice(0, topK)\n .map((r) => ({\n id: documents[r.index]!.id,\n score: Number(r.score) || 0,\n }));\n } catch {\n return documents.slice(0, topK).map((d, i) => ({\n id: d.id,\n score: 1 - i / Math.max(documents.length, 1),\n }));\n } finally {\n clearTimeout(timer);\n }\n },\n };\n}\n\n","/**\n * Optional OCR provider — extract text from images.\n */\n\nexport interface OcrResult {\n text: string;\n}\n\nexport interface OCRProvider {\n readonly name: string;\n recognize(image: Buffer, mimeType?: string): Promise<OcrResult>;\n}\n\n/**\n * Placeholder Tesseract adapter.\n * Requires optional peer packages (`tesseract.js`) when used.\n */\nexport function tesseract(): OCRProvider {\n return {\n name: \"tesseract\",\n async recognize(image: Buffer): Promise<OcrResult> {\n try {\n const mod = await import(\"tesseract.js\" as string);\n const createWorker =\n (mod as { createWorker?: (lang: string) => Promise<{\n recognize: (img: Buffer) => Promise<{ data: { text: string } }>;\n terminate: () => Promise<void>;\n }> }).createWorker ??\n (mod as { default?: { createWorker: (lang: string) => Promise<{\n recognize: (img: Buffer) => Promise<{ data: { text: string } }>;\n terminate: () => Promise<void>;\n }> } }).default?.createWorker;\n if (!createWorker) {\n return { text: \"\" };\n }\n const worker = await createWorker(\"eng\");\n try {\n const result = await worker.recognize(image);\n return { text: result.data.text.trim() };\n } finally {\n await worker.terminate();\n }\n } catch {\n return { text: \"\" };\n }\n },\n };\n}\n","/**\n * Optional vision provider — captions / descriptions / entities from images.\n */\n\nexport interface VisionResult {\n caption: string;\n description: string;\n entities: string[];\n}\n\nexport interface VisionProvider {\n readonly name: string;\n analyze(image: Buffer, mimeType?: string): Promise<VisionResult>;\n}\n\ninterface VisionHttpOptions {\n name: string;\n baseUrl: string;\n apiKey: string;\n model: string;\n timeoutMs?: number;\n}\n\nclass OpenAICompatibleVisionProvider implements VisionProvider {\n readonly name: string;\n private readonly options: VisionHttpOptions;\n\n constructor(options: VisionHttpOptions) {\n this.name = options.name;\n this.options = options;\n }\n\n async analyze(image: Buffer, mimeType = \"image/png\"): Promise<VisionResult> {\n const base = this.options.baseUrl.replace(/\\/+$/, \"\");\n const url = `${base}/chat/completions`;\n const dataUrl = `data:${mimeType};base64,${image.toString(\"base64\")}`;\n const controller = new AbortController();\n const timer = setTimeout(\n () => controller.abort(),\n this.options.timeoutMs ?? 60_000,\n );\n try {\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.options.apiKey}`,\n },\n body: JSON.stringify({\n model: this.options.model,\n messages: [\n {\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: 'Describe this image. Reply as JSON: {\"caption\":\"...\",\"description\":\"...\",\"entities\":[\"...\"]}',\n },\n { type: \"image_url\", image_url: { url: dataUrl } },\n ],\n },\n ],\n max_tokens: 512,\n }),\n signal: controller.signal,\n });\n const body = (await res.json()) as {\n choices?: Array<{ message?: { content?: string } }>;\n };\n const content = body.choices?.[0]?.message?.content ?? \"\";\n return parseVisionJson(content);\n } catch {\n return { caption: \"\", description: \"\", entities: [] };\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\nfunction parseVisionJson(content: string): VisionResult {\n try {\n const match = content.match(/\\{[\\s\\S]*\\}/);\n if (!match) {\n return { caption: content.trim(), description: content.trim(), entities: [] };\n }\n const parsed = JSON.parse(match[0]) as Partial<VisionResult>;\n return {\n caption: String(parsed.caption ?? \"\"),\n description: String(parsed.description ?? \"\"),\n entities: Array.isArray(parsed.entities)\n ? parsed.entities.map(String)\n : [],\n };\n } catch {\n return { caption: content.trim(), description: content.trim(), entities: [] };\n }\n}\n\nexport function geminiVision(options: {\n apiKey: string;\n model?: string;\n baseUrl?: string;\n timeoutMs?: number;\n}): VisionProvider {\n return new OpenAICompatibleVisionProvider({\n name: \"gemini\",\n baseUrl:\n options.baseUrl ??\n \"https://generativelanguage.googleapis.com/v1beta/openai\",\n apiKey: options.apiKey,\n model: options.model ?? \"gemini-2.0-flash\",\n timeoutMs: options.timeoutMs,\n });\n}\n\nexport function openaiVision(options: {\n apiKey: string;\n model?: string;\n baseUrl?: string;\n timeoutMs?: number;\n}): VisionProvider {\n return new OpenAICompatibleVisionProvider({\n name: \"openai-vision\",\n baseUrl: options.baseUrl ?? \"https://api.openai.com/v1\",\n apiKey: options.apiKey,\n model: options.model ?? \"gpt-4o-mini\",\n timeoutMs: options.timeoutMs,\n });\n}\n","/**\n * Internal benchmark helpers for CLI / Studio later.\n * @internal\n */\n\nexport interface BenchmarkSample {\n name: string;\n durationMs: number;\n ok: boolean;\n error?: string;\n}\n\nexport interface BenchmarkReport {\n startedAt: string;\n finishedAt: string;\n samples: BenchmarkSample[];\n summary: {\n count: number;\n ok: number;\n failed: number;\n avgMs: number;\n p50Ms: number;\n p95Ms: number;\n p99Ms: number;\n };\n}\n\nexport async function runBenchmark(\n name: string,\n iterations: number,\n fn: () => Promise<void> | void,\n): Promise<BenchmarkSample[]> {\n const samples: BenchmarkSample[] = [];\n for (let i = 0; i < iterations; i += 1) {\n const t0 = performance.now();\n try {\n await fn();\n samples.push({\n name,\n durationMs: performance.now() - t0,\n ok: true,\n });\n } catch (error) {\n samples.push({\n name,\n durationMs: performance.now() - t0,\n ok: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return samples;\n}\n\nexport function summarizeBenchmark(\n samples: BenchmarkSample[],\n startedAt: string,\n finishedAt: string,\n): BenchmarkReport {\n const durations = samples\n .filter((s) => s.ok)\n .map((s) => s.durationMs)\n .sort((a, b) => a - b);\n const avg =\n durations.length === 0\n ? 0\n : durations.reduce((a, b) => a + b, 0) / durations.length;\n\n return {\n startedAt,\n finishedAt,\n samples,\n summary: {\n count: samples.length,\n ok: samples.filter((s) => s.ok).length,\n failed: samples.filter((s) => !s.ok).length,\n avgMs: avg,\n p50Ms: percentile(durations, 0.5),\n p95Ms: percentile(durations, 0.95),\n p99Ms: percentile(durations, 0.99),\n },\n };\n}\n\nfunction percentile(sorted: number[], p: number): number {\n if (sorted.length === 0) return 0;\n const idx = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil(p * sorted.length) - 1),\n );\n return sorted[idx]!;\n}\n"]}