{"version":3,"sources":["../src/index.ts","../src/cache-differential-tck.ts","../src/fixtures/helpers.ts","../src/cache-tck.ts","../src/fixtures/events.ts","../src/logger-differential-tck.ts","../src/logger-tck.ts","../src/stability-tck.ts","../src/store-differential-tck.ts","../src/store-property-tck.ts","../src/store-tck.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * @module @rotorsoft/act-tck\n *\n * Test Compatibility Kit for {@link Store}, {@link Cache}, and {@link Logger}\n * ports of `@rotorsoft/act`.\n *\n * A TCK turns each port from \"interface plus tribal knowledge\" into an\n * executable contract a third-party adapter can validate itself against.\n * Drop one or more `run*Tck` invocations into your adapter's test suite,\n * point them at your factory, and the TCK exercises every method on the\n * corresponding interface.\n *\n * The in-tree adapters (`InMemoryStore`, `InMemoryCache`, `ConsoleLogger`,\n * `PostgresStore`, `SqliteStore`, and `@rotorsoft/act-pino`) are the first\n * customers of this package — if any of them stop honoring the contract,\n * the TCK fails first.\n *\n * @example Store adapter\n * ```ts\n * import { runStoreTck } from \"@rotorsoft/act-tck\";\n * import { MyStore } from \"../src/MyStore.js\";\n *\n * runStoreTck({\n *   name: \"MyStore\",\n *   factory: () => new MyStore({ ... }),\n *   capabilities: { notify: true },\n * });\n * ```\n *\n * @example Cache adapter\n * ```ts\n * import { runCacheTck } from \"@rotorsoft/act-tck\";\n * import { RedisCache } from \"../src/RedisCache.js\";\n *\n * runCacheTck({\n *   name: \"RedisCache\",\n *   factory: () => new RedisCache({ url: process.env.REDIS_URL }),\n * });\n * ```\n *\n * @example Logger adapter\n * ```ts\n * import { runLoggerTck } from \"@rotorsoft/act-tck\";\n * import { MyLogger } from \"../src/MyLogger.js\";\n *\n * runLoggerTck({\n *   name: \"MyLogger\",\n *   factory: () => new MyLogger({ level: \"trace\" }),\n * });\n * ```\n *\n * ## Port evolution\n *\n * When a port interface in `libs/act/src/types/ports.ts` changes — a new\n * method, a tightened contract, a new optional flag — extend the matching\n * `run*Tck` here so every adapter is forced to keep up. Gate new optional\n * methods behind a flag in the relevant `Capabilities` type so existing\n * adapters keep passing until they explicitly opt in.\n */\n\n// Re-export the port contracts so adapter authors only need a single\n// import line in their test files (`@rotorsoft/act-tck`) rather than\n// reaching into `@rotorsoft/act/types` for the interfaces and the TCK\n// for the run* functions. Same types — keeps the two paths from\n// drifting in adapter-author code.\nexport type {\n  Cache,\n  CacheEntry,\n  Logger,\n  Store,\n  StoreNotification,\n} from \"@rotorsoft/act/types\";\nexport type {\n  CacheDifferentialTckOptions,\n  DifferentialCache,\n} from \"./cache-differential-tck.js\";\nexport { runCacheDifferentialTck } from \"./cache-differential-tck.js\";\nexport type { CacheTckOptions } from \"./cache-tck.js\";\nexport { runCacheTck } from \"./cache-tck.js\";\nexport type { CounterEvents } from \"./fixtures/events.js\";\nexport {\n  COUNTER_EVENT_NAMES,\n  CounterSchemas,\n  Decremented,\n  Incremented,\n  Reset,\n} from \"./fixtures/events.js\";\nexport type {\n  CommittedCounterEvent,\n  CounterMessage,\n} from \"./fixtures/helpers.js\";\nexport {\n  actor,\n  collect,\n  dec,\n  inc,\n  reset,\n  uid,\n} from \"./fixtures/helpers.js\";\nexport type {\n  DifferentialLogger,\n  LoggerDifferentialTckOptions,\n} from \"./logger-differential-tck.js\";\nexport { runLoggerDifferentialTck } from \"./logger-differential-tck.js\";\nexport type { LoggerTckOptions } from \"./logger-tck.js\";\nexport { runLoggerTck } from \"./logger-tck.js\";\nexport type { StabilityTckOptions } from \"./stability-tck.js\";\nexport { runStabilityTck } from \"./stability-tck.js\";\nexport type {\n  DifferentialStore,\n  StoreDifferentialTckOptions,\n} from \"./store-differential-tck.js\";\nexport { runStoreDifferentialTck } from \"./store-differential-tck.js\";\nexport type { StorePropertyTckOptions } from \"./store-property-tck.js\";\nexport { runStorePropertyTck } from \"./store-property-tck.js\";\nexport type { StoreCapabilities, StoreTckOptions } from \"./store-tck.js\";\nexport { runStoreTck } from \"./store-tck.js\";\n","import type { Cache, CacheEntry } from \"@rotorsoft/act/types\";\nimport { afterAll, beforeAll, describe, expect, it } from \"vitest\";\nimport { uid } from \"./fixtures/helpers.js\";\n\n/**\n * One {@link Cache} implementation to feed into\n * {@link runCacheDifferentialTck}. The harness drives the identical\n * generated workload against all of them, then compares the observable\n * `get()` snapshot after every operation.\n */\nexport type DifferentialCache = {\n  /** Display name used in assertion messages and the describe block. */\n  readonly name: string;\n  /**\n   * Produces the cache under test. Called once in `beforeAll`; the\n   * harness owns its lifecycle (`dispose`). Must return an empty cache\n   * with capacity for at least {@link CacheDifferentialTckOptions.streams}\n   * entries so nothing is evicted mid-comparison.\n   */\n  readonly factory: () => Cache | Promise<Cache>;\n};\n\n/**\n * Options for {@link runCacheDifferentialTck}.\n */\nexport type CacheDifferentialTckOptions = {\n  /** Display name for the differential suite. */\n  readonly name: string;\n  /**\n   * Two or more caches to drive in lockstep and compare. The first entry\n   * is the reference; every other cache's observable `get()` snapshot\n   * must match it exactly after every operation.\n   */\n  readonly caches: ReadonlyArray<DifferentialCache>;\n  /**\n   * Base PRNG seed. Workload `r` of {@link CacheDifferentialTckOptions.runs}\n   * is built from `seed + r`, so the campaign is reproducible. Default\n   * `0xcac`.\n   */\n  readonly seed?: number;\n  /**\n   * Number of distinct streams (cache keys) per workload. Kept small so a\n   * bounded cache never evicts during the comparison. Default `6`.\n   */\n  readonly streams?: number;\n  /**\n   * How many independent randomized workloads to generate and compare,\n   * each from a distinct seed. Default `8`.\n   */\n  readonly runs?: number;\n};\n\n/**\n * Deterministic 32-bit PRNG (mulberry32). Seeded, so the entire workload\n * is reproducible across runs and across the caches under comparison.\n */\nconst mulberry32 = (seed: number): (() => number) => {\n  let a = seed >>> 0;\n  return () => {\n    a = (a + 0x6d2b79f5) | 0;\n    let t = Math.imul(a ^ (a >>> 15), 1 | a);\n    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n  };\n};\n\ntype Entry = CacheEntry<Record<string, unknown>>;\n\n/** An operation in the generated, replayable cache workload. */\ntype CacheOp =\n  | { readonly t: \"set\"; readonly stream: string; readonly entry: Entry }\n  | { readonly t: \"invalidate\"; readonly stream: string }\n  | { readonly t: \"clear\" };\n\n/** The full generated workload, built once and replayed per cache. */\ntype CachePlan = {\n  readonly streams: string[];\n  readonly ops: CacheOp[];\n};\n\n/**\n * Build a deterministic, seeded cache workload with a randomized operation\n * sequence. Opens by `set`-ting every stream (so `get()` snapshots start\n * populated), then a seeded shuffle of `set` / `invalidate` / `clear`\n * across random streams. The same seed reproduces the same sequence.\n */\nconst build_cache_plan = (seed: number, stream_count: number): CachePlan => {\n  const rng = mulberry32(seed);\n  const prefix = `cdiff-${uid()}-`;\n  const streams = Array.from(\n    { length: stream_count },\n    (_, i) => `${prefix}${i}`\n  );\n\n  const make_entry = (): Entry => {\n    const v = Math.floor(rng() * 1000);\n    return {\n      stream: `e-${v}`,\n      state: { count: v, label: `k${v % 7}` },\n      version: v,\n      event_id: v,\n      patches: 1 + Math.floor(rng() * 5),\n      snaps: Math.floor(rng() * 3),\n    };\n  };\n  const pick_stream = (): string => streams[Math.floor(rng() * streams.length)];\n\n  const ops: CacheOp[] = [];\n  // Opening: populate every stream so the first snapshots aren't all-empty.\n  for (const stream of streams)\n    ops.push({ t: \"set\", stream, entry: make_entry() });\n\n  // Randomized middle: seeded set / invalidate / clear. Length varies by\n  // seed so the operation count is part of the explored input space.\n  const middle = 6 + Math.floor(rng() * 14);\n  for (let i = 0; i < middle; i++) {\n    const kind = Math.floor(rng() * 3);\n    if (kind === 0)\n      ops.push({ t: \"set\", stream: pick_stream(), entry: make_entry() });\n    else if (kind === 1) ops.push({ t: \"invalidate\", stream: pick_stream() });\n    else ops.push({ t: \"clear\" });\n  }\n\n  return { streams, ops };\n};\n\n/** Apply one operation to a single cache. */\nconst apply_op = async (cache: Cache, op: CacheOp): Promise<void> => {\n  if (op.t === \"set\") await cache.set(op.stream, op.entry);\n  else if (op.t === \"invalidate\") await cache.invalidate(op.stream);\n  else await cache.clear();\n};\n\n/** The observable state of a cache reduced to a stream→entry map. */\nconst snapshot = async (\n  cache: Cache,\n  streams: string[]\n): Promise<Record<string, Entry | undefined>> => {\n  const out: Record<string, Entry | undefined> = {};\n  for (const stream of streams)\n    out[stream] = await cache.get<Record<string, unknown>>(stream);\n  return out;\n};\n\n/**\n * Cross-implementation differential contract for the {@link Cache} port\n * (#1057).\n *\n * Where {@link runCacheTck} pins each method's contract against a single\n * implementation, this harness drives a **family of randomized, seeded\n * workloads** (`set` / `invalidate` / `clear`) against two or more caches\n * in lockstep and asserts their observable `get()` snapshot is identical\n * after **every** operation. A cache that mishandles overwrite ordering,\n * leaks an invalidated key, or clears partially diverges from the\n * reference on the exact operation that broke it — with the seed in the\n * describe block for replay.\n *\n * Streams stay within the cache's capacity, so eviction (an adapter\n * policy, not a contract guarantee) never enters the comparison.\n *\n * @example\n * ```ts\n * import { runCacheDifferentialTck } from \"@rotorsoft/act-tck\";\n * import { InMemoryCache } from \"@rotorsoft/act\";\n * import { RedisCache } from \"../src/index.js\";\n *\n * runCacheDifferentialTck({\n *   name: \"InMemory vs Redis\",\n *   caches: [\n *     { name: \"InMemoryCache\", factory: () => new InMemoryCache({ maxSize: 1000 }) },\n *     { name: \"RedisCache\", factory: () => new RedisCache({ url: process.env.REDIS_URL }) },\n *   ],\n * });\n * ```\n */\nexport const runCacheDifferentialTck = (\n  options: CacheDifferentialTckOptions\n): void => {\n  describe(`TCK / Cache differential / ${options.name}`, () => {\n    const base_seed = options.seed ?? 0xcac;\n    const stream_count = options.streams ?? 6;\n    const plans = Array.from({ length: options.runs ?? 8 }, (_, r) =>\n      build_cache_plan(base_seed + r, stream_count)\n    );\n    const live: Array<{ name: string; cache: Cache }> = [];\n\n    beforeAll(async () => {\n      for (const spec of options.caches) {\n        live.push({ name: spec.name, cache: await spec.factory() });\n      }\n    });\n\n    afterAll(async () => {\n      for (const { cache } of live) await cache.dispose();\n    });\n\n    plans.forEach((plan, run) => {\n      const seed_hex = `0x${(base_seed + run).toString(16)}`;\n      it(`agrees on get() after every op (workload ${run}, seed ${seed_hex})`, async () => {\n        for (const op of plan.ops) {\n          // Apply the same op to every cache, then compare snapshots — so a\n          // divergence is pinned to the exact operation that introduced it.\n          for (const { cache } of live) await apply_op(cache, op);\n          const reference = await snapshot(live[0].cache, plan.streams);\n          for (let i = 1; i < live.length; i++) {\n            const actual = await snapshot(live[i].cache, plan.streams);\n            expect(\n              actual,\n              `${live[i].name} diverged from ${live[0].name} after ${op.t}`\n            ).toEqual(reference);\n          }\n        }\n      });\n    });\n  });\n};\n","import { randomUUID } from \"node:crypto\";\nimport type {\n  Committed,\n  EventMeta,\n  Message,\n  Store,\n} from \"@rotorsoft/act/types\";\nimport type { CounterEvents } from \"./events.js\";\n\nexport type CounterMessage = Message<CounterEvents, keyof CounterEvents>;\nexport type CommittedCounterEvent = Committed<\n  CounterEvents,\n  keyof CounterEvents\n>;\n\n/**\n * Per-test unique identifier suffix. Use to namespace streams so tests\n * running in parallel against the same shared store (e.g., a real Postgres\n * instance) don't collide on stream names.\n */\nexport const uid = (): string => randomUUID().slice(0, 8);\n\nexport const actor = (name = \"tester\") => ({ id: randomUUID(), name });\n\n/** Build an EventMeta with a correlation id and optional action causation. */\nexport const make_meta = (\n  opts: { correlation?: string; stream?: string; action?: string } = {}\n): EventMeta => ({\n  correlation: opts.correlation ?? randomUUID(),\n  causation: opts.stream\n    ? {\n        action: {\n          name: opts.action ?? \"Test\",\n          stream: opts.stream,\n          actor: actor(),\n        },\n      }\n    : {},\n});\n\nexport const inc = (amount = 1): CounterMessage => ({\n  name: \"Incremented\",\n  data: { amount },\n});\n\nexport const dec = (amount = 1): CounterMessage => ({\n  name: \"Decremented\",\n  data: { amount },\n});\n\nexport const reset = (): CounterMessage => ({ name: \"Reset\", data: {} });\n\n/**\n * Commit `count` Incremented events to `stream` on the given store, each\n * within its own commit transaction (so they receive distinct event ids).\n */\nexport const seed_stream = async (\n  store: Store,\n  stream: string,\n  count: number,\n  correlation?: string\n): Promise<CommittedCounterEvent[]> => {\n  const out: CommittedCounterEvent[] = [];\n  for (let i = 0; i < count; i++) {\n    const committed = await store.commit<CounterEvents>(\n      stream,\n      [inc(1)],\n      make_meta({ correlation, stream })\n    );\n    out.push(...(committed as CommittedCounterEvent[]));\n  }\n  return out;\n};\n\n/**\n * Drain a `query` call into an array. Convenience wrapper for assertions.\n */\nexport const collect = async (\n  store: Store,\n  query: Parameters<Store[\"query\"]>[1]\n): Promise<CommittedCounterEvent[]> => {\n  const out: CommittedCounterEvent[] = [];\n  await store.query<CounterEvents>((e) => {\n    out.push(e as CommittedCounterEvent);\n  }, query);\n  return out;\n};\n","import type { Cache, CacheEntry } from \"@rotorsoft/act/types\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\n\n/**\n * Options for {@link runCacheTck}.\n */\nexport type CacheTckOptions = {\n  /**\n   * Display name for the implementation under test. Becomes the\n   * top-level `describe` block in the vitest run.\n   */\n  readonly name: string;\n  /**\n   * Factory invoked before each test. Must return a fresh, empty cache\n   * — tests assume zero starting entries. Any per-implementation tuning\n   * (max size, TTL, etc.) is the factory's responsibility, but the TCK\n   * itself sets ≤ 8 entries in any single test, so a default max of\n   * `≥ 8` is safe.\n   */\n  readonly factory: () => Cache;\n};\n\nconst entry = (\n  event_id: number,\n  state: Record<string, unknown> = {},\n  stream = `s-${event_id}`\n): CacheEntry<Record<string, unknown>> => ({\n  stream,\n  state,\n  version: event_id,\n  event_id,\n  patches: 1,\n  snaps: 0,\n});\n\n/**\n * Runs the Cache contract test compatibility kit against the\n * implementation produced by `options.factory`.\n *\n * Covers the full {@link Cache} surface defined in\n * `libs/act/src/types/ports.ts`:\n * - get/set round-trip\n * - get on a missing key returns undefined\n * - invalidate removes a single stream without affecting others\n * - clear wipes all entries\n * - dispose is idempotent and awaitable\n * - cross-stream isolation\n *\n * Adapter-specific behavior (LRU ordering, TTL, size limits, …) stays\n * in the adapter's own test suite — the TCK only asserts the contract\n * every Cache must honor.\n *\n * @example\n * ```ts\n * import { runCacheTck } from \"@rotorsoft/act-tck\";\n * import { InMemoryCache } from \"@rotorsoft/act\";\n *\n * runCacheTck({\n *   name: \"InMemoryCache\",\n *   factory: () => new InMemoryCache({ maxSize: 1000 }),\n * });\n * ```\n */\nexport const runCacheTck = (options: CacheTckOptions): void => {\n  describe(`TCK / Cache / ${options.name}`, () => {\n    let cache: Cache;\n\n    beforeEach(() => {\n      cache = options.factory();\n    });\n\n    afterEach(async () => {\n      await cache.dispose();\n    });\n\n    it(\"returns undefined for an unset stream\", async () => {\n      expect(await cache.get(\"missing\")).toBeUndefined();\n    });\n\n    it(\"set then get round-trips an entry\", async () => {\n      const e = entry(1, { count: 7 });\n      await cache.set(\"s1\", e);\n      expect(await cache.get(\"s1\")).toEqual(e);\n    });\n\n    it(\"set overwrites a prior entry on the same stream\", async () => {\n      await cache.set(\"s1\", entry(1, { count: 1 }));\n      await cache.set(\"s1\", entry(2, { count: 2 }));\n      const got = await cache.get<Record<string, unknown>>(\"s1\");\n      expect(got?.event_id).toBe(2);\n      expect(got?.state).toEqual({ count: 2 });\n    });\n\n    it(\"invalidate removes one stream and leaves others\", async () => {\n      await cache.set(\"a\", entry(1));\n      await cache.set(\"b\", entry(2));\n      await cache.invalidate(\"a\");\n      expect(await cache.get(\"a\")).toBeUndefined();\n      expect(await cache.get(\"b\")).toBeDefined();\n    });\n\n    it(\"invalidate on an unknown stream is a no-op\", async () => {\n      await expect(cache.invalidate(\"never-set\")).resolves.toBeUndefined();\n    });\n\n    it(\"clear empties every stream\", async () => {\n      await cache.set(\"a\", entry(1));\n      await cache.set(\"b\", entry(2));\n      await cache.set(\"c\", entry(3));\n      await cache.clear();\n      expect(await cache.get(\"a\")).toBeUndefined();\n      expect(await cache.get(\"b\")).toBeUndefined();\n      expect(await cache.get(\"c\")).toBeUndefined();\n    });\n\n    it(\"clear on an empty cache is a no-op\", async () => {\n      await expect(cache.clear()).resolves.toBeUndefined();\n    });\n\n    it(\"entries are isolated per stream\", async () => {\n      const ea = entry(1, { id: \"a\" });\n      const eb = entry(2, { id: \"b\" });\n      await cache.set(\"a\", ea);\n      await cache.set(\"b\", eb);\n      expect(await cache.get(\"a\")).toEqual(ea);\n      expect(await cache.get(\"b\")).toEqual(eb);\n    });\n\n    it(\"dispose is idempotent\", async () => {\n      await cache.set(\"a\", entry(1));\n      await cache.dispose();\n      await expect(cache.dispose()).resolves.toBeUndefined();\n    });\n  });\n};\n","import { z } from \"zod\";\n\nexport const Incremented = z.object({ amount: z.number().int() });\nexport const Decremented = z.object({ amount: z.number().int() });\nexport const Reset = z.object({});\n\nexport const CounterSchemas = {\n  Incremented,\n  Decremented,\n  Reset,\n} as const;\n\nexport type CounterEvents = {\n  Incremented: z.infer<typeof Incremented>;\n  Decremented: z.infer<typeof Decremented>;\n  Reset: z.infer<typeof Reset>;\n};\n\nexport const COUNTER_EVENT_NAMES = [\n  \"Incremented\",\n  \"Decremented\",\n  \"Reset\",\n] as const;\n","import type { Logger } from \"@rotorsoft/act/types\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\n\n/**\n * One {@link Logger} implementation to feed into\n * {@link runLoggerDifferentialTck}. The harness drives the identical call\n * sequence against all of them and compares the **portable** observable\n * contract — robustness (does a call throw?) and structural conformance\n * (is `level` a non-empty string, does `child()` satisfy the contract).\n */\nexport type DifferentialLogger = {\n  /** Display name used in assertion messages and the describe block. */\n  readonly name: string;\n  /**\n   * Produces the logger under test. Called before each test; the harness\n   * owns its lifecycle (`dispose`).\n   */\n  readonly factory: () => Logger;\n};\n\n/**\n * Options for {@link runLoggerDifferentialTck}.\n */\nexport type LoggerDifferentialTckOptions = {\n  /** Display name for the differential suite. */\n  readonly name: string;\n  /**\n   * Two or more loggers to drive in lockstep and compare. The first entry\n   * is the reference; every other logger must uphold the same portable\n   * observable contract under the identical call sequence.\n   */\n  readonly loggers: ReadonlyArray<DifferentialLogger>;\n};\n\nconst LEVELS = [\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\"] as const;\n\n/**\n * Drive a logger through the full call surface and return a vector of\n * **observable, portable** outcomes. A logger's formatted output is\n * adapter-specific by design (pino JSON vs console text vs a file sink),\n * so the only thing two implementations can be held to byte-for-byte is:\n *\n *   - whether each call **throws** (robustness parity — a logger that\n *     blows up on a cyclic or null payload the reference tolerates is a\n *     real divergence);\n *   - whether `level` is a non-empty string;\n *   - whether `child()` returns something that itself satisfies the\n *     contract (and can spawn a further child).\n *\n * The vector is order-stable, so a single `toEqual` pins any divergence to\n * the exact call that broke parity.\n */\nconst drive = (logger: Logger): boolean[] => {\n  const out: boolean[] = [];\n  const ok = (fn: () => void): void => {\n    try {\n      fn();\n      out.push(true);\n    } catch {\n      out.push(false);\n    }\n  };\n\n  out.push(typeof logger.level === \"string\" && logger.level.length > 0);\n  for (const level of LEVELS) {\n    ok(() => logger[level](\"message\"));\n    ok(() => logger[level]({ k: \"v\", n: 1 }));\n    ok(() => logger[level]({ k: \"v\" }, \"context\"));\n  }\n  ok(() => logger.info(null, \"null payload\"));\n  ok(() => {\n    const cyclic: Record<string, unknown> = { name: \"loop\" };\n    cyclic.self = cyclic;\n    logger.info(cyclic, \"cycle\");\n  });\n\n  // Child conformance: a child must satisfy the same contract and be able\n  // to spawn its own child — recorded as observable booleans, not asserted\n  // here, so a non-conforming child surfaces as a vector divergence.\n  const child = logger.child({ request_id: \"abc\" });\n  out.push(typeof child.level === \"string\" && child.level.length > 0);\n  out.push(LEVELS.every((level) => typeof child[level] === \"function\"));\n  out.push(typeof child.child === \"function\");\n  ok(() => child.child({ nested: true }).info(\"nested\"));\n\n  return out;\n};\n\n/**\n * Cross-implementation differential contract for the {@link Logger} port\n * (#1057).\n *\n * A logger has no portable return value to byte-compare — its output\n * format is adapter-specific by design, which is exactly why\n * {@link runLoggerTck} checks shape rather than bytes. The meaningful\n * differential is therefore **robustness and structural parity**: driven\n * through the identical call sequence (every level, both overloads, null\n * and cyclic payloads, child spawning), do two implementations agree on\n * what throws and what conforms? They must. A logger that throws on a\n * cyclic payload the reference tolerates, or returns a non-conforming\n * child, diverges from the reference vector.\n *\n * @example\n * ```ts\n * import { runLoggerDifferentialTck } from \"@rotorsoft/act-tck\";\n * import { ConsoleLogger } from \"@rotorsoft/act\";\n * import { PinoLogger } from \"../src/index.js\";\n *\n * runLoggerDifferentialTck({\n *   name: \"Console vs Pino\",\n *   loggers: [\n *     { name: \"ConsoleLogger\", factory: () => new ConsoleLogger({ level: \"trace\" }) },\n *     { name: \"PinoLogger\", factory: () => new PinoLogger({ level: \"trace\" }) },\n *   ],\n * });\n * ```\n */\nexport const runLoggerDifferentialTck = (\n  options: LoggerDifferentialTckOptions\n): void => {\n  describe(`TCK / Logger differential / ${options.name}`, () => {\n    let live: Array<{ name: string; logger: Logger }> = [];\n    let original_stdout: typeof process.stdout.write;\n\n    // Silence stdout while driving the loggers — we compare observable\n    // outcomes, not formatted output, and chatty sinks would spam the run.\n    beforeEach(() => {\n      live = options.loggers.map((spec) => ({\n        name: spec.name,\n        logger: spec.factory(),\n      }));\n      original_stdout = process.stdout.write.bind(process.stdout);\n      process.stdout.write = (() => true) as typeof process.stdout.write;\n    });\n\n    afterEach(async () => {\n      process.stdout.write = original_stdout;\n      for (const { logger } of live) await logger.dispose();\n    });\n\n    it(\"agrees on robustness and structural parity across the call surface\", () => {\n      const reference = drive(live[0].logger);\n      for (let i = 1; i < live.length; i++) {\n        const actual = drive(live[i].logger);\n        expect(actual, `${live[i].name} diverged from ${live[0].name}`).toEqual(\n          reference\n        );\n      }\n    });\n  });\n};\n","import type { Logger } from \"@rotorsoft/act/types\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\n\n/**\n * Options for {@link runLoggerTck}.\n */\nexport type LoggerTckOptions = {\n  /**\n   * Display name for the implementation under test.\n   */\n  readonly name: string;\n  /**\n   * Factory invoked before each test. Must return a fresh logger\n   * instance — tests do not assume any starting state.\n   */\n  readonly factory: () => Logger;\n};\n\nconst LEVELS = [\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\"] as const;\n\n/**\n * Runs the Logger contract test compatibility kit against the\n * implementation produced by `options.factory`.\n *\n * The {@link Logger} contract is intentionally narrow: implementations\n * are pluggable wrappers around pino, winston, bunyan, console, etc.\n * The TCK verifies the **shape** of the contract, not the format of\n * the output (which is adapter-specific by design):\n * - every level method exists and is callable in both overload forms\n *   `(msg)` and `(obj, msg?)`\n * - `child(bindings)` returns something that satisfies the same\n *   contract and can itself spawn children\n * - `level` is a non-empty string\n * - `dispose` is awaitable and idempotent\n * - cyclic payloads must not throw (sinks may choose any fallback)\n *\n * Anything more (output format, level gating, color, file routing) is\n * adapter-specific and stays in the adapter's own test suite.\n *\n * @example\n * ```ts\n * import { runLoggerTck } from \"@rotorsoft/act-tck\";\n * import { ConsoleLogger } from \"@rotorsoft/act\";\n *\n * runLoggerTck({\n *   name: \"ConsoleLogger\",\n *   factory: () => new ConsoleLogger({ level: \"trace\" }),\n * });\n * ```\n */\nexport const runLoggerTck = (options: LoggerTckOptions): void => {\n  describe(`TCK / Logger / ${options.name}`, () => {\n    let logger: Logger;\n    let original_stdout: typeof process.stdout.write;\n\n    // Silence stdout during the TCK — we don't assert on output, and\n    // chatty implementations would otherwise spam test runs. Loggers\n    // that route elsewhere (stderr, files) won't appear in the test\n    // report; checking their formatted output is the adapter's own\n    // responsibility.\n    beforeEach(() => {\n      logger = options.factory();\n      original_stdout = process.stdout.write.bind(process.stdout);\n      process.stdout.write = (() => true) as typeof process.stdout.write;\n    });\n\n    afterEach(async () => {\n      process.stdout.write = original_stdout;\n      await logger.dispose();\n    });\n\n    it(\"exposes a non-empty `level` string\", () => {\n      expect(typeof logger.level).toBe(\"string\");\n      expect(logger.level.length).toBeGreaterThan(0);\n    });\n\n    for (const level of LEVELS) {\n      it(`${level}(msg) does not throw`, () => {\n        expect(() => logger[level](\"hello\")).not.toThrow();\n      });\n\n      it(`${level}(obj) does not throw`, () => {\n        expect(() => logger[level]({ k: \"v\" })).not.toThrow();\n      });\n\n      it(`${level}(obj, msg) does not throw`, () => {\n        expect(() => logger[level]({ k: \"v\" }, \"context\")).not.toThrow();\n      });\n    }\n\n    it(\"accepts a null payload\", () => {\n      expect(() => logger.info(null, \"null payload\")).not.toThrow();\n    });\n\n    it(\"accepts a cyclic payload without throwing\", () => {\n      const cyclic: Record<string, unknown> = { name: \"loop\" };\n      cyclic.self = cyclic;\n      expect(() => logger.info(cyclic, \"cycle\")).not.toThrow();\n    });\n\n    it(\"child(bindings) returns a Logger satisfying the same contract\", () => {\n      const child = logger.child({ request_id: \"abc\" });\n      expect(typeof child.level).toBe(\"string\");\n      for (const level of LEVELS) {\n        expect(typeof child[level]).toBe(\"function\");\n      }\n      expect(typeof child.child).toBe(\"function\");\n      expect(typeof child.dispose).toBe(\"function\");\n    });\n\n    it(\"child loggers can themselves spawn children\", () => {\n      const c1 = logger.child({ a: 1 });\n      const c2 = c1.child({ b: 2 });\n      expect(() => c2.info(\"nested\")).not.toThrow();\n    });\n\n    it(\"dispose is idempotent and awaitable\", async () => {\n      await expect(logger.dispose()).resolves.toBeUndefined();\n      await expect(logger.dispose()).resolves.toBeUndefined();\n    });\n  });\n};\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { describe, expect, it } from \"vitest\";\n\n/**\n * Options for {@link runStabilityTck}.\n *\n * @property name - Display name for the snapshot suite (e.g., the package\n *   name). Used as the `describe` block label so failing snapshots are\n *   attributable at a glance.\n * @property entryPoints - Map of subpath → entry source file. The TCK\n *   reads each entry, follows its relative re-exports recursively, and\n *   snapshots the resulting surface text. Empty-string subpaths label\n *   the root entry; everything else is rendered with its key (e.g.\n *   `\"/receiver\"`).\n */\nexport type StabilityTckOptions = {\n  readonly name: string;\n  readonly entryPoints: Readonly<Record<string, string>>;\n};\n\n/**\n * Snapshot-based public-API stability check. Walks each entry's source\n * file plus everything it re-exports through relative imports, and\n * compares the concatenated text against a committed Vitest snapshot.\n *\n * Catches accidental rename / removal / signature drift on the public\n * surface before a build merges. Any change that affects re-exports\n * shows up as a snapshot diff in the PR; reviewers either accept the\n * change (update the snapshot deliberately) or push back.\n *\n * The TCK reads source (`.ts`) rather than built declarations so it\n * doesn't need a prior `pnpm build`. It follows `from \"./relative.js\"`\n * re-exports transitively; non-relative paths (other packages, `node:`)\n * stop the walk — drift in another package's surface is that package's\n * stability TCK to catch.\n *\n * @example\n * ```ts\n * import path from \"node:path\";\n * import { runStabilityTck } from \"@rotorsoft/act-tck\";\n *\n * runStabilityTck({\n *   name: \"@rotorsoft/act-http\",\n *   entryPoints: {\n *     \"/api\": path.resolve(\"src/api/index.ts\"),\n *     \"/webhook\": path.resolve(\"src/webhook/index.ts\"),\n *     \"/sse\": path.resolve(\"src/sse/index.ts\"),\n *     \"/receiver\": path.resolve(\"src/receiver/index.ts\"),\n *   },\n * });\n * ```\n *\n * @param options - See {@link StabilityTckOptions}.\n */\nexport function runStabilityTck(options: StabilityTckOptions): void {\n  describe(`${options.name} — public API stability`, () => {\n    for (const [subpath, entry] of Object.entries(options.entryPoints)) {\n      const label = subpath || \"(root)\";\n      it(`stable public surface for ${label}`, async () => {\n        const surface = await load_surface(entry);\n        expect(surface).toMatchSnapshot();\n      });\n    }\n  });\n}\n\n/**\n * Load and concatenate the public surface of an entry source file.\n * Recursively walks relative re-exports, deduplicating visited files\n * and sorting visited paths so cosmetic file-order changes don't shift\n * the snapshot.\n */\nasync function load_surface(entry: string): Promise<string> {\n  const visited = new Map<string, string>();\n\n  async function walk(file: string): Promise<void> {\n    const abs = path.resolve(file);\n    if (visited.has(abs)) return;\n\n    const content = await fs.readFile(abs, \"utf8\");\n    visited.set(abs, content);\n\n    // Match top-of-line `import`/`export ... from \"./relative.js\"` statements\n    // only, so JSDoc strings and example code in comments don't get walked.\n    const re_export =\n      /^\\s*(?:import|export)\\b[^\"';]*\\bfrom\\s+[\"'](\\.[^\"']+)[\"']/gm;\n    for (const m of content.matchAll(re_export)) {\n      const rel = m[1].replace(/\\.js$/, \".ts\");\n      const target = path.resolve(path.dirname(abs), rel);\n      await walk(target);\n    }\n  }\n\n  await walk(entry);\n\n  // Sort by basename for stable ordering across machines.\n  const sorted = [...visited.entries()].sort(([a], [b]) =>\n    path.basename(a).localeCompare(path.basename(b))\n  );\n  return sorted\n    .map(([abs, content]) => {\n      const rel = path.basename(abs);\n      return `// === ${rel} ===\\n${content}`;\n    })\n    .join(\"\\n\");\n}\n","import { SNAP_EVENT } from \"@rotorsoft/act\";\nimport type {\n  BlockedLease,\n  Committed,\n  Lease,\n  Schemas,\n  Store,\n} from \"@rotorsoft/act/types\";\nimport { afterAll, beforeAll, describe, expect, it } from \"vitest\";\nimport type { CounterEvents } from \"./fixtures/events.js\";\nimport {\n  type CounterMessage,\n  dec,\n  inc,\n  make_meta,\n  reset as reset_event,\n  uid,\n} from \"./fixtures/helpers.js\";\n\n/**\n * Correlate's job, done by hand (#1488). `claim` follows the work mark, so a\n * generated plan that commits events has to mark what they resolve to before\n * a worker can see them. Marking every subscription to the log head is the\n * right shape here: these suites drive both adapters through the *same* plan,\n * and what they compare is claim/ack/block/defer behavior, not discovery.\n */\nconst mark_all = async (store: Store) => {\n  const rows: {\n    stream: string;\n    at: number;\n    priority: number;\n    lane?: string;\n  }[] = [];\n  const { maxEventId } = await store.query_streams((p) =>\n    rows.push({\n      stream: p.stream,\n      at: p.at,\n      priority: p.priority,\n      lane: p.lane,\n    })\n  );\n  const marks = rows\n    .filter((r) => r.at < maxEventId)\n    .map((r) => ({\n      stream: r.stream,\n      priority: r.priority,\n      lane: r.lane,\n      correlated_at: maxEventId,\n    }));\n  // Unconditional: `subscribe([])` is a no-op, and a guard here would be a\n  // branch no generated plan exercises.\n  await store.subscribe(marks);\n};\n\n/**\n * One {@link Store} implementation to feed into\n * {@link runStoreDifferentialTck}. The harness drops + seeds each store,\n * replays the identical generated workload against all of them, then\n * compares their normalized outputs.\n */\nexport type DifferentialStore = {\n  /** Display name used in assertion messages and the describe block. */\n  readonly name: string;\n  /**\n   * Produces the store under test. Called once in `beforeAll`; the\n   * harness owns its lifecycle (`drop` + `seed`, then `dispose`).\n   */\n  readonly factory: () => Store | Promise<Store>;\n};\n\n/**\n * Known cross-adapter divergences the caller wants the differential to\n * skip until the backing fix lands. Each flag suppresses exactly the\n * assertions that a currently-filed bug makes red, so the differential\n * stays green on master and the gate un-gates itself (delete the flag)\n * when the fix merges. Every flag names its issue so the reason is\n * auditable at the call site.\n */\nexport type DifferentialSkips = {\n  /**\n   * #1197 — SQLite `LIKE` is ASCII-case-insensitive, so a **mixed-case\n   * regex pattern** filter overmatches vs PG (`~`) / InMemory (`RegExp`),\n   * which are case-sensitive. Skips only the pattern-driven mixed-case\n   * assertions; exact-match (`stream_exact`) mixed-case still runs, since\n   * that path is case-exact on every adapter. Un-gate when #1197 lands.\n   */\n  readonly caseInsensitivePatterns?: boolean;\n  /**\n   * #1199 — `names: []` and falsy-zero `before`/`after: 0` guards differ\n   * across adapters (`names: []` → PG returns all, InMemory/SQLite return\n   * none; `before: 0` / `after: 0` are dropped by some adapters' truthy\n   * guards). Skips only those specific edge-input query assertions.\n   * Un-gate when #1199 lands.\n   */\n  readonly queryEdgeInputs?: boolean;\n};\n\n/**\n * Options for {@link runStoreDifferentialTck}.\n */\nexport type StoreDifferentialTckOptions = {\n  /** Display name for the differential suite. */\n  readonly name: string;\n  /**\n   * Two or more stores to drive in lockstep and compare. The first\n   * entry is the reference; every other store's normalized output must\n   * match it exactly. Pass `InMemoryStore` as the reference and the\n   * durable adapter(s) as the comparands.\n   */\n  readonly stores: ReadonlyArray<DifferentialStore>;\n  /**\n   * Base PRNG seed. Workload `r` of {@link StoreDifferentialTckOptions.runs}\n   * is built from `seed + r`, so the whole fuzz campaign is reproducible:\n   * the same `seed` ⇒ the same family of workloads ⇒ any divergence is\n   * deterministically replayable. Default `0xac7`.\n   */\n  readonly seed?: number;\n  /**\n   * Number of distinct event-bearing streams per workload.\n   * Default `4`.\n   */\n  readonly streams?: number;\n  /**\n   * How many independent randomized workloads to generate and compare,\n   * each from a distinct seed (`seed`, `seed + 1`, …, `seed + runs - 1`).\n   * More runs widen the slice of the input space the differential\n   * explores; fewer keep durable-adapter suites fast. Default `8`.\n   */\n  readonly runs?: number;\n  /**\n   * Whether the comparand adapters support the optional {@link Store.forget_pii}\n   * surface (and the `pii` field on commit). When `true`, the workload\n   * commits PII-bearing events and the differential asserts that\n   * `forget_pii` wipes them identically across adapters. All in-tree\n   * adapters implement it, so it defaults to `true`; a third-party store\n   * that opts out sets it `false`. Default `true`.\n   */\n  readonly piiIsolation?: boolean;\n  /**\n   * Known-divergence gates — see {@link DifferentialSkips}. Each flag\n   * suppresses the assertions a currently-filed bug makes red so the\n   * differential stays green until the fix merges. Default: nothing\n   * skipped.\n   */\n  readonly skip?: DifferentialSkips;\n};\n\n/**\n * Deterministic 32-bit PRNG (mulberry32). Seeded, so the entire workload\n * is reproducible across runs and across the stores under comparison.\n */\nconst mulberry32 = (seed: number): (() => number) => {\n  let a = seed >>> 0;\n  return () => {\n    a = (a + 0x6d2b79f5) | 0;\n    let t = Math.imul(a ^ (a >>> 15), 1 | a);\n    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n  };\n};\n\n/** A single committed event reduced to its store-independent identity. */\ntype NormalizedEvent = {\n  readonly stream: string;\n  readonly version: number;\n  readonly name: string;\n  readonly data: unknown;\n  /** `true` when the event carried PII on load, `false`/absent otherwise. */\n  readonly pii?: boolean;\n};\n\n/**\n * Strip the fields that legitimately differ between adapters — absolute\n * event `id`, `created` timestamp, and `meta` (correlation/causation\n * uuids) — leaving only what defines \"the right events in the right\n * order\": stream, version, name, data, and whether PII was present. Event\n * ordering is preserved by the position of each normalized event in the\n * collected array.\n *\n * PII is normalized to a boolean presence flag rather than its plaintext:\n * the differential's job is \"did `forget_pii` erase the same rows on every\n * adapter\", not \"does every adapter round-trip the same ciphertext\" (which\n * the per-adapter `pii_isolation` suite already pins).\n */\nconst normalize_event = (\n  e: Committed<Schemas, keyof Schemas>\n): NormalizedEvent => ({\n  stream: e.stream,\n  version: e.version,\n  name: e.name,\n  data: e.data,\n  pii: e.pii != null,\n});\n\n/**\n * Identity-only view (no PII flag). `query_stats` head/tail is a\n * stream-shape summary — whether an adapter hydrates the isolated PII\n * column on the head/tail rows it returns is not part of that contract\n * (the per-adapter `pii_isolation` suite pins hydration on `query` /\n * `commit`, not on `query_stats`). Comparing PII presence here would\n * over-specify and flag a legitimate adapter freedom as a divergence.\n */\nconst normalize_identity = (\n  e: Committed<Schemas, keyof Schemas>\n): Omit<NormalizedEvent, \"pii\"> => ({\n  stream: e.stream,\n  version: e.version,\n  name: e.name,\n  data: e.data,\n});\n\n/** An operation in the generated, replayable workload. */\ntype PlanOp =\n  | {\n      readonly t: \"commit\";\n      readonly stream: string;\n      readonly msgs: CounterMessage[];\n      /** When set, the batch's first message carries this PII payload. */\n      readonly pii?: Record<string, unknown>;\n    }\n  | { readonly t: \"snapshot\"; readonly stream: string; readonly count: number }\n  | { readonly t: \"truncate\"; readonly stream: string; readonly count: number }\n  // Windowed truncate: prefix-delete below the closest safe boundary\n  // snapshot with `created < before` (and `id <= max_id` when set). The\n  // op writes a snapshot first (in `apply_plan`) so a boundary always\n  // exists, making the prune deterministic across adapters.\n  | {\n      readonly t: \"truncate_windowed\";\n      readonly stream: string;\n      readonly max_id: boolean;\n    }\n  // Lease lifecycle against a subscription stream (indexed into\n  // `plan.subs`). `claim` leases every claimable stream under a fresh\n  // holder; `apply_plan` records which holder now owns each stream so the\n  // finalize verbs (`ack` / `defer` / `block`) target the *real* current\n  // holder on each adapter. That makes the durable outcome (watermark,\n  // retry, blocked, error, deferred) a deterministic function of the op\n  // sequence — independent of the exact holder UUID (normalized away) and\n  // of any adapter's claim-frontier tie-break. A verb whose target stream\n  // is not currently held is a no-op on every adapter, identically.\n  | { readonly t: \"claim\"; readonly millis: number }\n  | { readonly t: \"ack\"; readonly sub: number }\n  | { readonly t: \"defer\"; readonly sub: number; readonly due: number }\n  | { readonly t: \"block\"; readonly sub: number; readonly error: string }\n  | { readonly t: \"unblock\"; readonly sub: number }\n  | { readonly t: \"reset_sub\"; readonly sub: number }\n  | {\n      readonly t: \"prioritize\";\n      readonly sub: number;\n      readonly priority: number;\n    };\n\n/** A subscription registered for the `query_streams` comparison. */\ntype SubSpec = {\n  readonly stream: string;\n  readonly source: string;\n  readonly lane: string;\n  readonly priority: number;\n};\n\n/** A query-option matrix entry compared under a global forward scan. */\ntype QueryCase = {\n  readonly label: string;\n  readonly query: Record<string, unknown>;\n  /**\n   * When set, this case is only well-defined once the named fix lands;\n   * the harness skips it while the matching {@link DifferentialSkips}\n   * flag is on.\n   */\n  readonly gated?: keyof DifferentialSkips;\n};\n\n/** The full generated workload, built once and replayed per store. */\ntype Plan = {\n  readonly event_prefix: string;\n  readonly event_streams: string[];\n  readonly sub_prefix: string;\n  readonly ops: PlanOp[];\n  readonly subs: SubSpec[];\n  readonly correlation: string;\n  readonly pii_stream: string;\n  readonly query_cases: QueryCase[];\n  /** The single event name guaranteed to appear (for `names` filters). */\n  readonly filter_name: string;\n};\n\n/**\n * Build a deterministic, seeded workload with a **randomized** operation\n * sequence. Unlike a fixed script, the middle of each plan is a seeded\n * shuffle of `commit` / `snapshot` / `truncate` (full + windowed) plus the\n * **lease lifecycle** (`claim` / `ack` / `defer` / `block` / `unblock` /\n * `reset` / `prioritize`) across random streams, so different seeds probe\n * different interleavings — pre/post-snapshot commits, a claim landing\n * between two truncates, a block-then-unblock, and so on. The same seed\n * always reproduces the same sequence, so any divergence the fuzz finds is\n * replayable.\n *\n * Stream names carry **mixed case** so a case-sensitivity divergence in a\n * pattern filter surfaces as a diff (the whole point of #1197's coverage).\n *\n * Two invariants are pinned regardless of seed so the comparison stays\n * well-defined across adapters:\n *\n *   - an **opening** commit per stream — every stream is non-empty before\n *     a snapshot or truncate can reference it;\n *   - a **closing** commit per stream — every stream ends with real\n *     (non-snapshot) events, so `query_stats` head/tail are defined even\n *     when a truncate was the last randomized touch.\n *\n * Event types cycle inc → dec → reset via a shared cursor, so all three\n * payload shapes appear in every plan.\n */\nconst build_plan = (\n  seed: number,\n  stream_count: number,\n  pii_isolation: boolean\n): Plan => {\n  const rng = mulberry32(seed);\n  const tag = uid();\n  // Mixed-case prefixes: an upper-cased segment lands inside every stream\n  // and subscription name, so a case-insensitive pattern filter (SQLite\n  // LIKE, #1197) overmatches and diverges from the case-sensitive\n  // reference. A lower-only corpus can never surface that class of bug.\n  const event_prefix = `Diff-${tag}-Evt-`;\n  const sub_prefix = `Diff-${tag}-Sub-`;\n  const event_streams = Array.from(\n    { length: stream_count },\n    (_, i) => `${event_prefix}S${i}`\n  );\n  const correlation = `corr-${tag}`;\n\n  let type_cursor = 0;\n  const next_msg = (): CounterMessage => {\n    const kind = type_cursor++ % 3;\n    const amount = 1 + Math.floor(rng() * 9);\n    return kind === 0 ? inc(amount) : kind === 1 ? dec(amount) : reset_event();\n  };\n  const batch = (): CounterMessage[] =>\n    Array.from({ length: 1 + Math.floor(rng() * 3) }, next_msg);\n  const pick_stream = (): string =>\n    event_streams[Math.floor(rng() * event_streams.length)];\n  // Each subscription consumes from its **own dedicated source stream**\n  // that only ever receives a single opening commit and is never truncated.\n  // Decoupling the lease sources from the truncate-churned `event_streams`\n  // is what makes `claim` eligibility identical across adapters: every\n  // subscription has exactly one unit of work at watermark -1, so a wide-\n  // budget claim leases the same set on every store — the lease-lifecycle\n  // diff then reflects only the ack/block/unblock/reset ops, not adapter\n  // differences in \"does this source still have events after a truncate\".\n  const lanes = [\"default\", \"slow\", \"fast\"];\n  const lease_prefix = `Diff-${tag}-Src-`;\n  const lease_sources = event_streams.map((_, i) => `${lease_prefix}S${i}`);\n  const subs: SubSpec[] = lease_sources.map((source, i) => ({\n    stream: `${sub_prefix}S${i}`,\n    source,\n    lane: lanes[i % lanes.length],\n    priority: i % 4,\n  }));\n  const pick_sub = (): number => Math.floor(rng() * subs.length);\n\n  const ops: PlanOp[] = [];\n  // Opening: every stream commits a batch so it exists before any\n  // snapshot/truncate references it. The first stream's opening batch\n  // carries PII (when the adapter supports it) so `forget_pii` has\n  // something to erase.\n  const pii_stream = event_streams[0];\n  event_streams.forEach((stream, i) => {\n    ops.push({\n      t: \"commit\",\n      stream,\n      msgs: batch(),\n      pii:\n        pii_isolation && i === 0\n          ? { email: `u-${tag}@example.com`, name: \"Ursula\" }\n          : undefined,\n    });\n  });\n  // One commit per lease source so every subscription starts with exactly\n  // one unit of work at watermark -1. These streams are never truncated.\n  for (const src of lease_sources)\n    ops.push({ t: \"commit\", stream: src, msgs: [inc(1)] });\n\n  // Register every subscription up front so the lease-lifecycle ops in the\n  // middle have claimable streams. A fresh subscription's watermark is -1.\n  // (Applied via `subscribe` before the ops loop in `apply_plan`.)\n\n  // Randomized middle: a seeded sequence over the full op vocabulary.\n  const middle = 12 + Math.floor(rng() * 20);\n  for (let i = 0; i < middle; i++) {\n    const kind = Math.floor(rng() * 10);\n    if (kind === 0) {\n      ops.push({ t: \"commit\", stream: pick_stream(), msgs: batch() });\n    } else if (kind === 1) {\n      ops.push({\n        t: \"snapshot\",\n        stream: pick_stream(),\n        count: Math.floor(rng() * 1000),\n      });\n    } else if (kind === 2) {\n      ops.push({\n        t: \"truncate\",\n        stream: pick_stream(),\n        count: Math.floor(rng() * 1000),\n      });\n    } else if (kind === 3) {\n      ops.push({\n        t: \"truncate_windowed\",\n        stream: pick_stream(),\n        max_id: rng() < 0.5,\n      });\n    } else if (kind === 4) {\n      // Large lease window so the claim holds; retry counters advance\n      // deterministically (claim increments, ack resets).\n      ops.push({ t: \"claim\", millis: 100_000 });\n    } else if (kind === 5) {\n      ops.push({ t: \"ack\", sub: pick_sub() });\n    } else if (kind === 6) {\n      // Deterministic due-time relative to a fixed epoch so `deferred_at`\n      // is identical on every adapter. Far in the future so the deferred\n      // stream stays held-out.\n      ops.push({\n        t: \"defer\",\n        sub: pick_sub(),\n        due: 4_102_444_800_000 + Math.floor(rng() * 1000),\n      });\n    } else if (kind === 7) {\n      ops.push({\n        t: \"block\",\n        sub: pick_sub(),\n        error: `boom-${Math.floor(rng() * 100)}`,\n      });\n    } else if (kind === 8) {\n      ops.push({ t: \"unblock\", sub: pick_sub() });\n    } else {\n      // reset / prioritize share the last bucket via a sub-toss.\n      if (rng() < 0.5) ops.push({ t: \"reset_sub\", sub: pick_sub() });\n      else\n        ops.push({\n          t: \"prioritize\",\n          sub: pick_sub(),\n          priority: Math.floor(rng() * 10),\n        });\n    }\n  }\n\n  // Closing: every stream commits a final batch so it ends with real\n  // events — keeps query_stats head/tail well-defined after any truncate.\n  const filter_name = \"Incremented\";\n  for (const stream of event_streams)\n    ops.push({ t: \"commit\", stream, msgs: [inc(1)] });\n\n  // Query-option matrix compared under a global forward/backward scan.\n  // Each case exercises a distinct filter dimension; the normalized event\n  // list must match across adapters. Edge-input cases (`names: []`,\n  // falsy-zero bounds) are gated behind #1199 until the guards converge.\n  const query_cases: QueryCase[] = [\n    {\n      label: \"names filter (single event name)\",\n      query: { stream: `^${event_prefix}`, names: [filter_name] },\n    },\n    {\n      label: \"correlation filter\",\n      query: { stream: `^${event_prefix}`, correlation },\n    },\n    {\n      label: \"limit bound\",\n      query: { stream: `^${event_prefix}`, limit: 3 },\n    },\n    {\n      label: \"backward + limit\",\n      query: { stream: `^${event_prefix}`, backward: true, limit: 4 },\n    },\n    // Absolute `id` bounds (`after`/`before` with positive ids) are\n    // deliberately absent: event ids are the canonical \"legitimately\n    // differs between adapters\" field (see `normalize_event`), and full\n    // truncates renumber them differently per store, so a positive id\n    // bound selects a different absolute window on each adapter. The\n    // gated falsy-zero cases below compare only the *guard* behavior\n    // (filter applied → subset, vs filter dropped → all), which stays a\n    // well-defined divergence regardless of the concrete id values.\n    // #1199 edge inputs — opposite semantics across adapters today.\n    {\n      label: \"empty names filter\",\n      query: { stream: `^${event_prefix}`, names: [] as string[] },\n      gated: \"queryEdgeInputs\",\n    },\n    {\n      label: \"before: 0 (falsy-zero guard)\",\n      query: { stream: `^${event_prefix}`, before: 0 },\n      gated: \"queryEdgeInputs\",\n    },\n    {\n      label: \"backward + after: 0 (falsy-zero guard)\",\n      query: { stream: `^${event_prefix}`, backward: true, after: 0 },\n      gated: \"queryEdgeInputs\",\n    },\n  ];\n\n  return {\n    event_prefix,\n    event_streams,\n    sub_prefix,\n    ops,\n    subs,\n    correlation,\n    pii_stream,\n    query_cases,\n    filter_name,\n  };\n};\n\n/** Replay the generated workload against a single store. */\nconst apply_plan = async (\n  store: Store,\n  plan: Plan,\n  pii_isolation: boolean\n): Promise<void> => {\n  // Register subscriptions first so the lease-lifecycle ops have targets.\n  await store.subscribe(\n    plan.subs.map((s) => ({\n      stream: s.stream,\n      source: s.source,\n      lane: s.lane,\n      priority: s.priority,\n    }))\n  );\n\n  // Adapter-local map of the lease holder currently owning each of *this\n  // plan's* subscription streams, kept in sync from `claim` results. The\n  // finalize verbs read the real current holder so their durable effect is\n  // a deterministic function of the op sequence — the holder UUID itself is\n  // an adapter detail (normalized away in the assertions). A verb whose\n  // target isn't held is skipped, exactly as an unheld `ack`/`block` would\n  // no-op inside the adapter.\n  const held = new Map<string, string>();\n  const owned = new Set(plan.subs.map((s) => s.stream));\n\n  for (const op of plan.ops) {\n    if (op.t === \"commit\") {\n      const msgs =\n        op.pii && pii_isolation\n          ? op.msgs.map((m, i) => (i === 0 ? { ...m, pii: op.pii } : m))\n          : op.msgs;\n      await store.commit<CounterEvents>(\n        op.stream,\n        msgs as CounterMessage[],\n        make_meta({ stream: op.stream, correlation: plan.correlation })\n      );\n    } else if (op.t === \"snapshot\") {\n      await store.commit(\n        op.stream,\n        [{ name: SNAP_EVENT, data: { count: op.count } }],\n        make_meta({ stream: op.stream, correlation: plan.correlation })\n      );\n    } else if (op.t === \"truncate\") {\n      await store.truncate([\n        { stream: op.stream, snapshot: { count: op.count } },\n      ]);\n    } else if (op.t === \"truncate_windowed\") {\n      // Write a boundary snapshot, then prefix-delete below it. `before`\n      // sits just after the snapshot's commit time; `max_id` (when set) is\n      // wide so it never excludes the boundary. Deterministic across\n      // adapters: the boundary is a real event the workload wrote.\n      await store.commit(\n        op.stream,\n        [{ name: SNAP_EVENT, data: { count: 1 } }],\n        make_meta({ stream: op.stream, correlation: plan.correlation })\n      );\n      await store.truncate([\n        {\n          stream: op.stream,\n          before: new Date(Date.now() + 60_000),\n          // A wide cap that still fits a 32-bit event-id column, so it\n          // never excludes the boundary snapshot on any adapter.\n          ...(op.max_id ? { max_id: 2_147_483_647 } : {}),\n        },\n      ]);\n    } else if (op.t === \"claim\") {\n      // Budget wide enough to lease every claimable stream in one call, so\n      // *which* streams get leased never depends on an adapter's frontier\n      // tie-break order — every unleased, unblocked, non-deferred stream is\n      // claimed under a fresh holder. Record the new holder for this plan's\n      // streams; the finalize verbs read it back.\n      const by = uid();\n      await mark_all(store);\n      const leased = await store.claim(100_000, 100_000, by, op.millis);\n      for (const l of leased) if (owned.has(l.stream)) held.set(l.stream, by);\n    } else if (op.t === \"ack\") {\n      const stream = plan.subs[op.sub].stream;\n      const by = held.get(stream);\n      if (by) {\n        // Advance the watermark to 0 (the opening event) and release.\n        await store.ack([{ stream, at: 0, by, retry: 0, lagging: true }]);\n        held.delete(stream);\n      }\n    } else if (op.t === \"defer\") {\n      const stream = plan.subs[op.sub].stream;\n      const by = held.get(stream);\n      if (by) {\n        const lease: Lease = {\n          stream,\n          at: 0,\n          by,\n          retry: 0,\n          lagging: true,\n          due: op.due,\n        };\n        await store.ack([lease]);\n        held.delete(stream);\n      }\n    } else if (op.t === \"block\") {\n      const stream = plan.subs[op.sub].stream;\n      const by = held.get(stream);\n      if (by) {\n        const lease: BlockedLease = {\n          stream,\n          at: 0,\n          by,\n          retry: 0,\n          lagging: true,\n          error: op.error,\n        };\n        await store.block([lease]);\n        held.delete(stream);\n      }\n    } else if (op.t === \"unblock\") {\n      const stream = plan.subs[op.sub].stream;\n      await store.unblock([stream]);\n      held.delete(stream);\n    } else if (op.t === \"reset_sub\") {\n      const stream = plan.subs[op.sub].stream;\n      await store.reset([stream]);\n      held.delete(stream);\n    } else {\n      await store.prioritize(\n        { stream: plan.subs[op.sub].stream, stream_exact: true },\n        op.priority\n      );\n    }\n  }\n};\n\n/**\n * Cross-adapter differential contract (#1030, fuzz workloads #1057,\n * lease/truncate/pii/query fuzz #1200).\n *\n * Adapters can drift in ways per-adapter cases don't catch — event\n * ordering, the `with_snaps` snapshot floor, the exact shape of\n * `query_stats` / `query_streams` output, the lease lifecycle's effect on\n * a stream's `retry`/`blocked`/`error`, windowed-truncate boundaries,\n * `forget_pii` erasure, and query-option edge cases. This harness drives a\n * **family of randomized, seeded workloads** — commits (some PII-bearing),\n * inline + windowed truncates, subscriptions, and the full lease lifecycle\n * (`claim` / `ack` / `defer` / `block` / `unblock` / `reset` /\n * `prioritize`) — against every store in `options.stores`, then asserts\n * their **normalized** outputs are byte-for-byte identical for every\n * workload.\n *\n * Each workload is its own seeded plan (`seed`, `seed + 1`, …): the\n * operation sequence — and even its length — varies by seed, so divergence\n * is hunted across a slice of the input space rather than one fixed script.\n * The seeds are deterministic, so a failing workload is always replayable.\n *\n * Normalization drops only the fields that legitimately differ between\n * stores (absolute event ids, `created` timestamps, correlation/causation\n * uuids, lease holder UUIDs, and wall-clock lease expiries) and keeps\n * everything that defines correctness (stream, version, name, data,\n * emission order, and the durable subscription state a lease op leaves\n * behind: watermark, retry, blocked, error, priority, lane). Stream names\n * carry mixed case so a case-insensitive pattern filter (#1197) surfaces as\n * a diff.\n *\n * Wire it with the in-memory store as the reference and one or more\n * durable adapters as comparands:\n *\n * @example\n * ```ts\n * import { runStoreDifferentialTck } from \"@rotorsoft/act-tck\";\n * import { InMemoryStore } from \"@rotorsoft/act\";\n * import { PostgresStore } from \"../src/index.js\";\n *\n * runStoreDifferentialTck({\n *   name: \"InMemory vs Postgres\",\n *   runs: 6, // durable adapter: fewer workloads keep the suite fast\n *   stores: [\n *     { name: \"InMemoryStore\", factory: () => new InMemoryStore() },\n *     { name: \"PostgresStore\", factory: () => new PostgresStore({ ... }) },\n *   ],\n * });\n * ```\n */\nexport const runStoreDifferentialTck = (\n  options: StoreDifferentialTckOptions\n): void => {\n  describe(`TCK / Store differential / ${options.name}`, () => {\n    const base_seed = options.seed ?? 0xac7;\n    const stream_count = options.streams ?? 4;\n    const pii_isolation = options.piiIsolation ?? true;\n    // Spread-merge (not `?? {}`) so an absent `skip` carries no branch: the\n    // spread of `undefined` yields `{}` with nothing for coverage to owe —\n    // mirrors `store-tck.ts`'s `{ ...options.capabilities }`.\n    const skip: DifferentialSkips = { ...options.skip };\n    const plans = Array.from({ length: options.runs ?? 8 }, (_, r) =>\n      build_plan(base_seed + r, stream_count, pii_isolation)\n    );\n    const live: Array<{ name: string; store: Store }> = [];\n\n    beforeAll(async () => {\n      for (const spec of options.stores) {\n        const store = await spec.factory();\n        await store.drop();\n        await store.seed();\n        // Each plan namespaces its streams with a unique tag, so every\n        // workload coexists in one store — a single drop+seed per store\n        // keeps the durable-adapter cost flat regardless of `runs`.\n        for (const plan of plans) await apply_plan(store, plan, pii_isolation);\n        live.push({ name: spec.name, store });\n      }\n    });\n\n    afterAll(async () => {\n      for (const { store } of live) await store.dispose();\n    });\n\n    /**\n     * Run `produce` against every store and assert each comparand's\n     * result deep-equals the reference (the first store). The store name\n     * rides along in the assertion message so a divergence names the\n     * culprit.\n     */\n    const assert_identical = async <T>(\n      label: string,\n      produce: (store: Store) => Promise<T>\n    ): Promise<void> => {\n      const reference = await produce(live[0].store);\n      for (let i = 1; i < live.length; i++) {\n        const actual = await produce(live[i].store);\n        expect(\n          actual,\n          `${live[i].name} diverged from ${live[0].name} on \"${label}\"`\n        ).toEqual(reference);\n      }\n    };\n\n    plans.forEach((plan, run) => {\n      const seed_hex = `0x${(base_seed + run).toString(16)}`;\n      describe(`workload ${run} (seed ${seed_hex})`, () => {\n        it(\"yields identical event order under a global forward query\", async () => {\n          await assert_identical(\"forward query\", async (store) => {\n            const out: NormalizedEvent[] = [];\n            await store.query<Schemas>(\n              (e) => {\n                out.push(normalize_event(e));\n              },\n              { stream: `^${plan.event_prefix}` }\n            );\n            return out;\n          });\n        });\n\n        it(\"yields identical snapshot floors under with_snaps\", async () => {\n          await assert_identical(\"with_snaps floor\", async (store) => {\n            const by_stream: Record<string, NormalizedEvent[]> = {};\n            for (const stream of plan.event_streams) {\n              const out: NormalizedEvent[] = [];\n              await store.query<Schemas>(\n                (e) => {\n                  out.push(normalize_event(e));\n                },\n                { stream, stream_exact: true, with_snaps: true }\n              );\n              by_stream[stream] = out;\n            }\n            return by_stream;\n          });\n        });\n\n        it(\"yields identical order under backward traversal\", async () => {\n          await assert_identical(\"backward query\", async (store) => {\n            const by_stream: Record<string, NormalizedEvent[]> = {};\n            for (const stream of plan.event_streams) {\n              const out: NormalizedEvent[] = [];\n              await store.query<Schemas>(\n                (e) => {\n                  out.push(normalize_event(e));\n                },\n                { stream, stream_exact: true, backward: true }\n              );\n              by_stream[stream] = out;\n            }\n            return by_stream;\n          });\n        });\n\n        // Query-option matrix (#1200): each filter dimension must select\n        // the same normalized events on every adapter. Gated edge-input\n        // cases (#1199) are skipped while the matching flag is on.\n        plan.query_cases.forEach((qc) => {\n          const gated = qc.gated && skip[qc.gated];\n          it.skipIf(gated)(\n            `yields identical events under ${qc.label}`,\n            async () => {\n              await assert_identical(`query / ${qc.label}`, async (store) => {\n                const out: NormalizedEvent[] = [];\n                await store.query<Schemas>((e) => {\n                  out.push(normalize_event(e));\n                }, qc.query);\n                return out;\n              });\n            }\n          );\n        });\n\n        it(\"yields identical query_stats output (head/tail/count/names)\", async () => {\n          await assert_identical(\"query_stats\", async (store) => {\n            const stats = await store.query_stats<Schemas>(\n              { stream: `^${plan.event_prefix}` },\n              { tail: true, count: true, names: true }\n            );\n            // Capture key order (query_stats filter form orders by stream\n            // name — a contract) alongside normalized per-stream content.\n            const keys = [...stats.keys()];\n            const content: Record<\n              string,\n              {\n                head: Omit<NormalizedEvent, \"pii\">;\n                tail: Omit<NormalizedEvent, \"pii\">;\n                count: number | undefined;\n                names: Readonly<Record<string, number>> | undefined;\n              }\n            > = {};\n            for (const [stream, s] of stats) {\n              // `tail: true` is requested, so every returned stream carries\n              // a tail. A store that omits it is itself a divergence — let\n              // the non-null access surface it loudly rather than masking it\n              // with a fallback the workload can never otherwise reach.\n              content[stream] = {\n                head: normalize_identity(s.head),\n                tail: normalize_identity(\n                  s.tail as Committed<Schemas, keyof Schemas>\n                ),\n                count: s.count,\n                names: s.names as Record<string, number> | undefined,\n              };\n            }\n            return { keys, content };\n          });\n        });\n\n        it(\"yields identical query_streams output (incl. lease-lifecycle state)\", async () => {\n          await assert_identical(\"query_streams\", async (store) => {\n            const rows: Array<{\n              stream: string;\n              source: string | undefined;\n              at: number;\n              blocked: boolean;\n              priority: number;\n              lane: string | undefined;\n              retry: number;\n              error: string;\n              // Lease holder UUID + expiry are non-portable; normalize to\n              // a presence flag so \"is this stream currently leased\" is\n              // compared without depending on the exact holder/clock.\n              leased: boolean;\n            }> = [];\n            const { count } = await store.query_streams(\n              (p) => {\n                rows.push({\n                  stream: p.stream,\n                  source: p.source,\n                  at: p.at,\n                  blocked: p.blocked,\n                  priority: p.priority,\n                  lane: p.lane,\n                  retry: p.retry,\n                  error: p.error,\n                  leased: p.leased_by != null,\n                });\n              },\n              { stream: `^${plan.sub_prefix}`, limit: 1000 }\n            );\n            // Branchless, locale-stable ordering so the comparison is\n            // independent of whatever order each adapter streams rows in.\n            rows.sort((a, b) => a.stream.localeCompare(b.stream));\n            return { count, rows };\n          });\n        });\n\n        // Case-sensitivity of the pattern filter (#1197): the subscription\n        // streams are mixed-case (`Diff-…-Sub-S{i}`); filtering with the\n        // **lower-cased** form of the same pattern must select the *same*\n        // set on every adapter. On case-sensitive engines (PG `~`, InMemory\n        // `RegExp`) that set is empty — the case doesn't match. SQLite's\n        // ASCII-case-insensitive `LIKE` overmatches and returns the whole\n        // family, so the differential goes red until #1197 flips it to a\n        // case-sensitive matcher. Gated behind `caseInsensitivePatterns`.\n        it.skipIf(skip.caseInsensitivePatterns)(\n          \"matches case-sensitively under a lower-cased pattern filter\",\n          async () => {\n            await assert_identical(\n              \"query_streams lower-cased pattern\",\n              async (store) => {\n                const collect_streams = async (\n                  pattern: string\n                ): Promise<string[]> => {\n                  const streams: string[] = [];\n                  await store.query_streams(\n                    (p) => {\n                      streams.push(p.stream);\n                    },\n                    { stream: pattern, limit: 1000 }\n                  );\n                  streams.sort((a, b) => a.localeCompare(b));\n                  return streams;\n                };\n                // Correctly-cased control: returns the whole sub family on\n                // every adapter (exercises the match path). Lower-cased\n                // discriminator: empty on a case-sensitive matcher,\n                // overmatched to the full family on SQLite's LIKE. Both\n                // ride in the compared payload so the control proves the\n                // corpus is matchable while the discriminator surfaces\n                // #1197.\n                const matched = await collect_streams(`^${plan.sub_prefix}S`);\n                const lowered = await collect_streams(\n                  `^${plan.sub_prefix.toLowerCase()}s`\n                );\n                return { matched, lowered };\n              }\n            );\n          }\n        );\n\n        // Exact-match mixed-case: case-exact on every adapter, so it runs\n        // unconditionally — the control that proves the mixed-case corpus\n        // itself round-trips even where the pattern path is gated.\n        it(\"yields identical events under an exact mixed-case stream lookup\", async () => {\n          await assert_identical(\"query exact mixed-case\", async (store) => {\n            const out: NormalizedEvent[] = [];\n            await store.query<Schemas>(\n              (e) => {\n                out.push(normalize_event(e));\n              },\n              { stream: plan.event_streams[0], stream_exact: true }\n            );\n            return out;\n          });\n        });\n\n        // forget_pii erasure (#1200): wipe PII on the seeded stream and\n        // assert every adapter reports the same erased-count and that the\n        // reload shows PII gone identically. Only runs when the adapters\n        // implement the optional surface.\n        it.skipIf(!pii_isolation)(\n          \"erases pii identically via forget_pii\",\n          async () => {\n            await assert_identical(\"forget_pii erase\", async (store) => {\n              // forget_pii is capability-gated on the port; the caller\n              // declared support via `piiIsolation`, so it is present.\n              // Call it as a method (not a detached reference) so adapters\n              // that read `this` keep their binding.\n              const erased = await store.forget_pii!(plan.pii_stream);\n              const after: NormalizedEvent[] = [];\n              await store.query<Schemas>(\n                (e) => {\n                  after.push(normalize_event(e));\n                },\n                { stream: plan.pii_stream, stream_exact: true }\n              );\n              return { erased, after };\n            });\n          }\n        );\n      });\n    });\n  });\n};\n","import { fc, test } from \"@fast-check/vitest\";\nimport type { Store } from \"@rotorsoft/act/types\";\nimport { afterAll, beforeAll, describe, expect } from \"vitest\";\nimport type { CounterEvents } from \"./fixtures/events.js\";\nimport { collect, inc, make_meta } from \"./fixtures/helpers.js\";\n\n/**\n * Correlate's job, done by hand (#1488). `claim` follows the work mark, so a\n * generated plan that commits events has to mark what they resolve to before\n * a worker can see them. Marking every subscription to the log head is the\n * right shape here: these suites drive both adapters through the *same* plan,\n * and what they compare is claim/ack/block/defer behavior, not discovery.\n */\nconst mark_all = async (store: Store) => {\n  const rows: {\n    stream: string;\n    at: number;\n    priority: number;\n    lane?: string;\n  }[] = [];\n  const { maxEventId } = await store.query_streams((p) =>\n    rows.push({\n      stream: p.stream,\n      at: p.at,\n      priority: p.priority,\n      lane: p.lane,\n    })\n  );\n  const marks = rows\n    .filter((r) => r.at < maxEventId)\n    .map((r) => ({\n      stream: r.stream,\n      priority: r.priority,\n      lane: r.lane,\n      correlated_at: maxEventId,\n    }));\n  // Unconditional: `subscribe([])` is a no-op, and a guard here would be a\n  // branch no generated plan exercises.\n  await store.subscribe(marks);\n};\n\n/**\n * Property-based contract for the store-level invariants the drain pipeline\n * depends on — commit version monotonicity, claim/lease no-leak, watermark\n * monotonicity, and block exclusion. These ran only against `InMemoryStore`\n * before ACT-982; running them against the durable adapters too is the only\n * way to catch a divergence the example-based TCK cases miss.\n *\n * Each predicate resets the store (`drop` + `seed`) so randomized runs are\n * isolated. Durable adapters should pass a reduced `numRuns` and their own\n * dedicated schema/file so a parallel test worker can't clobber the table.\n */\nexport type StorePropertyTckOptions = {\n  /** Adapter name for the describe block. */\n  name: string;\n  /** Produces the store under test (created once, reset between runs). */\n  factory: () => Store | Promise<Store>;\n  /** fast-check runs per property. Default 100; lower for durable adapters. */\n  numRuns?: number;\n  /**\n   * Per-property timeout in milliseconds. Default 5000, matching vitest.\n   *\n   * Every run of a property is a full reset plus a dozen or more round\n   * trips, so against a real database the wall time is dominated by I/O and\n   * by whatever else the machine is doing. Vitest's default is comfortable\n   * in isolation and not under a parallel suite sharing one server, which\n   * showed up as this file intermittently timing out rather than failing an\n   * assertion. Durable adapters should raise it; the in-memory store has no\n   * reason to.\n   */\n  timeoutMs?: number;\n};\n\nconst streamArb = fc.constantFrom(\"s1\", \"s2\", \"s3\");\nconst commitArb = fc.record({\n  stream: streamArb,\n  count: fc.integer({ min: 1, max: 3 }),\n});\n\nconst claimStreamArb = fc.constantFrom(\"a\", \"b\", \"c\");\nconst opArb = fc.oneof(\n  fc.record({ kind: fc.constant(\"commit\" as const), stream: claimStreamArb }),\n  fc.record({ kind: fc.constant(\"claim\" as const) }),\n  fc.record({ kind: fc.constant(\"ack-all\" as const) }),\n  fc.record({ kind: fc.constant(\"block-all\" as const) })\n);\n\nconst events = (count: number) => Array.from({ length: count }, () => inc(1));\n\nexport const runStorePropertyTck = (options: StorePropertyTckOptions): void => {\n  const numRuns = options.numRuns ?? 100;\n  const timeout = options.timeoutMs ?? 5_000;\n\n  describe(`TCK / Store properties / ${options.name}`, () => {\n    let store: Store;\n\n    beforeAll(async () => {\n      store = await options.factory();\n      await store.seed();\n    });\n    afterAll(async () => {\n      await store.dispose();\n    });\n\n    // Clean slate per randomized run. claim() spans every claimable stream\n    // in the table, so namespacing alone can't isolate the claim properties;\n    // a full reset is the only safe option.\n    const reset = async () => {\n      await store.drop();\n      await store.seed();\n    };\n\n    describe(\"commit version invariants\", () => {\n      test.prop([fc.array(commitArb, { minLength: 0, maxLength: 30 })], {\n        numRuns,\n      })(\n        \"per-stream versions are 0..N-1 in commit order, regardless of interleaving\",\n        async (commits) => {\n          await reset();\n          const expected = new Map<string, number>();\n          for (const { stream, count } of commits) {\n            const before = expected.get(stream) ?? -1;\n            const committed = await store.commit<CounterEvents>(\n              stream,\n              events(count),\n              make_meta({ stream })\n            );\n            committed.forEach((e, i) => {\n              expect(e.version).toBe(before + 1 + i);\n            });\n            expected.set(stream, before + count);\n          }\n          for (const stream of new Set(commits.map((c) => c.stream))) {\n            const seen = await collect(store, { stream, stream_exact: true });\n            seen.forEach((e, i) => {\n              expect(e.version).toBe(i);\n            });\n          }\n        },\n        timeout\n      );\n\n      test.prop([fc.array(commitArb, { minLength: 1, maxLength: 20 })], {\n        numRuns,\n      })(\n        \"bad expectedVersion throws and commits no events\",\n        async (commits) => {\n          await reset();\n          for (const { stream, count } of commits) {\n            await store.commit<CounterEvents>(\n              stream,\n              events(count),\n              make_meta({ stream })\n            );\n          }\n          const stream = commits[0].stream;\n          const before = await collect(store, { stream, stream_exact: true });\n          // Actual head is before.length - 1, so before.length is wrong.\n          await expect(\n            store.commit<CounterEvents>(\n              stream,\n              [inc(1)],\n              make_meta({ stream }),\n              before.length\n            )\n          ).rejects.toThrow();\n          const after = await collect(store, { stream, stream_exact: true });\n          expect(after.length).toBe(before.length);\n        },\n        timeout\n      );\n    });\n\n    describe(\"claim/lease lifecycle invariants\", () => {\n      test.prop([fc.array(opArb, { minLength: 1, maxLength: 30 })], {\n        numRuns,\n      })(\n        \"no leaks: claims are always acked or blocked, never lost\",\n        async (ops) => {\n          await reset();\n          await store.subscribe([\n            { stream: \"a\" },\n            { stream: \"b\" },\n            { stream: \"c\" },\n          ]);\n          let totalClaims = 0;\n          let totalResolved = 0;\n          let pending: Awaited<ReturnType<Store[\"claim\"]>> = [];\n          for (const op of ops) {\n            if (op.kind === \"commit\") {\n              await store.commit<CounterEvents>(\n                op.stream,\n                [inc(1)],\n                make_meta({ stream: op.stream })\n              );\n            } else if (op.kind === \"claim\") {\n              await mark_all(store);\n              const claimed = await store.claim(5, 5, \"worker\", 60_000);\n              totalClaims += claimed.length;\n              pending = [...pending, ...claimed];\n            } else if (op.kind === \"ack-all\") {\n              const acked = await store.ack(pending);\n              totalResolved += acked.length;\n              pending = pending.filter(\n                (p) => !acked.find((a) => a.stream === p.stream)\n              );\n            } else {\n              const blocked = await store.block(\n                pending.map((p) => ({ ...p, error: \"test\" }))\n              );\n              totalResolved += blocked.length;\n              pending = pending.filter(\n                (p) => !blocked.find((b) => b.stream === p.stream)\n              );\n            }\n          }\n          expect(totalResolved + pending.length).toBe(totalClaims);\n        },\n        timeout\n      );\n\n      test.prop(\n        [\n          fc.array(claimStreamArb, { minLength: 1, maxLength: 5 }),\n          fc.array(claimStreamArb, { minLength: 0, maxLength: 5 }),\n        ],\n        { numRuns }\n      )(\n        \"ack advances the watermark monotonically per stream\",\n        async (commitsA, commitsB) => {\n          await reset();\n          const all = [...new Set([...commitsA, ...commitsB, \"a\", \"b\", \"c\"])];\n          await store.subscribe(all.map((stream) => ({ stream })));\n          for (const stream of commitsA) {\n            await store.commit<CounterEvents>(\n              stream,\n              [inc(1)],\n              make_meta({ stream })\n            );\n          }\n          await mark_all(store);\n          const acked1 = await store.ack(\n            await store.claim(10, 10, \"worker\", 60_000)\n          );\n          // Seed every subscribed stream at -1 so the comparison below is\n          // unconditional — streams not acked in batch 1 just compare\n          // against -1, keeping the property branch-free for coverage.\n          const watermark1 = new Map(all.map((stream) => [stream, -1]));\n          for (const l of acked1) watermark1.set(l.stream, l.at);\n          for (const stream of commitsB) {\n            await store.commit<CounterEvents>(\n              stream,\n              [inc(1)],\n              make_meta({ stream })\n            );\n          }\n          await mark_all(store);\n          const acked2 = await store.ack(\n            await store.claim(10, 10, \"worker\", 60_000)\n          );\n          for (const lease of acked2) {\n            expect(lease.at).toBeGreaterThanOrEqual(\n              watermark1.get(lease.stream) as number\n            );\n          }\n        },\n        timeout\n      );\n\n      test.prop([fc.array(claimStreamArb, { minLength: 1, maxLength: 5 })], {\n        numRuns,\n      })(\n        \"blocked streams cannot be claimed again\",\n        async (commits) => {\n          await reset();\n          const streams = [...new Set(commits)];\n          await store.subscribe(streams.map((stream) => ({ stream })));\n          for (const stream of commits) {\n            await store.commit<CounterEvents>(\n              stream,\n              [inc(1)],\n              make_meta({ stream })\n            );\n          }\n          await mark_all(store);\n          const claimed = await store.claim(10, 10, \"worker\", 60_000);\n          await store.block(claimed.map((l) => ({ ...l, error: \"test\" })));\n          const blockedSet = new Set(claimed.map((l) => l.stream));\n          // A control stream committed *after* the first claim is guaranteed\n          // claimable, so the re-claim is non-empty and the exclusion check\n          // below actually runs — while still proving no blocked stream\n          // reappears.\n          await store.subscribe([{ stream: \"ctrl\" }]);\n          await store.commit<CounterEvents>(\n            \"ctrl\",\n            [inc(1)],\n            make_meta({ stream: \"ctrl\" })\n          );\n          await mark_all(store);\n          const reclaim = await store.claim(10, 10, \"worker2\", 60_000);\n          for (const l of reclaim) expect(blockedSet.has(l.stream)).toBe(false);\n        },\n        timeout\n      );\n    });\n  });\n};\n","import {\n  act,\n  ConcurrencyError,\n  InMemoryCache,\n  SNAP_EVENT,\n  TOMBSTONE_EVENT,\n  ValidationError,\n} from \"@rotorsoft/act\";\nimport type {\n  BlockedLease,\n  Committed,\n  EventSource,\n  Lease,\n  ScanOptions,\n  ScanResult,\n  Schemas,\n  Store,\n  StoreNotification,\n  StreamPosition,\n  SubscribeInput,\n} from \"@rotorsoft/act/types\";\nimport { afterAll, beforeAll, describe, expect, it } from \"vitest\";\nimport type { CounterEvents } from \"./fixtures/events.js\";\nimport {\n  type CommittedCounterEvent,\n  collect,\n  dec,\n  inc,\n  make_meta,\n  reset as reset_event,\n  seed_stream,\n  uid,\n} from \"./fixtures/helpers.js\";\n\n/**\n * Optional features a {@link Store} implementation may or may not\n * support. Default to `false` — only enable a flag when the adapter\n * exposes the corresponding surface and you want the TCK to cover it.\n */\nexport type StoreCapabilities = {\n  /**\n   * Adapter implements {@link Store.notify}. When `true`, the TCK runs\n   * the cross-instance conformance cases: a listener receives commits\n   * from a *sibling* instance produced by the same `factory`, never its\n   * own commits (the port's self-filtering MUST), and exactly one\n   * notification per commit transaction carrying the full event batch.\n   * Requires the `factory` to produce instances sharing one backing\n   * store — e.g. two PostgresStores on the same schema/table, or two\n   * `withBroker` decorators on one broker. True cross-*process*\n   * LISTEN/NOTIFY plumbing needs two processes and stays in the\n   * adapter's own suite.\n   */\n  readonly notify?: boolean;\n  /**\n   * Adapter implements {@link Store.restore}. When `true`, the TCK\n   * runs the full restore suite — empty-source / single-stream /\n   * multi-stream happy paths, ISO-string `created`, pre-existing\n   * wipe, subscription clearing, causation remap, and atomic\n   * rollback on mid-iteration throw.\n   */\n  readonly restore?: boolean;\n  /**\n   * Adapter honours `subscribe`'s optional `correlator` argument and answers\n   * `correlating` (#1532). When `true`, the TCK runs the correlation-lease\n   * suite — exclusive acquisition, renewal by the same holder, re-acquisition\n   * after expiry, per-key independence, and the keyed checkpoint.\n   *\n   * Optional because a store that ignores the argument simply lets every\n   * worker scan, which is the pre-#1532 behaviour and remains correct: the\n   * marks are idempotent, so the duplication is waste rather than error.\n   */\n  readonly lease_correlation?: boolean;\n  /**\n   * Adapter supports sensitive-data isolation (#566): accepts the\n   * optional `pii` field on commit messages, returns it on load\n   * outputs, and implements {@link Store.forget_pii}. When `true`,\n   * the TCK runs the PII isolation suite — commit-with-pii\n   * round-trip, commit-without-pii passthrough, `forget_pii` happy\n   * path, idempotency, and isolation across streams.\n   */\n  readonly pii_isolation?: boolean;\n  /**\n   * Adapter supports competing consumers — two workers may call\n   * `claim()` concurrently and the store hands each stream to at most\n   * one of them (PostgreSQL via `FOR UPDATE SKIP LOCKED`; the in-memory\n   * store via single-threaded atomic claim). When `true`, the TCK runs\n   * the concurrency suite. Single-writer embedded stores (e.g. SQLite,\n   * where concurrent write transactions raise `SQLITE_BUSY` rather than\n   * serializing) leave this `false`: their deployment model is a single\n   * drain worker per database file.\n   */\n  readonly concurrent_claim?: boolean;\n  /**\n   * Adapter implements the {@link QueryStreams.source_matches} reverse-\n   * match filter — \"subscriptions whose stored `source` pattern matches\n   * at least one of these names\" (`name ~ source`). When `true`, the TCK\n   * runs the `source_matches` suite. Stores that can't express reverse-\n   * regex (e.g. an anchor-aware `LIKE` approximation) leave it `false`;\n   * the close-cycle safety probe then falls back to an unfiltered scan,\n   * so correctness never depends on this flag — only probe cost.\n   */\n  readonly source_matches?: boolean;\n  /**\n   * Adapter matches a **pattern** reaction `source` (one carrying regex\n   * metacharacters, e.g. the calculator's `^(A|B)$`) as a full RegExp in\n   * claim()'s has-work probe, so a stream whose max event id exceeds the\n   * subscription watermark is claimed when its name matches the pattern.\n   * When `true`, the TCK runs the pattern-source claim suite. Literal\n   * sources stay exact everywhere regardless of this flag — the fast,\n   * index-friendly path.\n   *\n   * Stores that cannot run an arbitrary regex against candidate streams\n   * (e.g. SQLite, whose libsql build has no `REGEXP` and whose portable\n   * `LIKE` grammar cannot express alternation/grouping) leave this\n   * `false` and instead reject a non-portable claim source at\n   * {@link subscribe} time — see {@link rejects_nonportable_claim_source}.\n   */\n  readonly pattern_claim_source?: boolean;\n  /**\n   * Adapter cannot faithfully match every regex claim `source`, so it\n   * fails loud at registration: {@link subscribe} throws\n   * {@link ValidationError} for a source outside its portable subset\n   * (alternation/grouping like `^(A|B)$`), rather than silently never\n   * claiming the stream. When `true`, the TCK runs the reject-at-subscribe\n   * case. Currently only SQLite sets this — its message points operators\n   * to InMemory/PG for full regex claim sources.\n   */\n  readonly rejects_nonportable_claim_source?: boolean;\n  /**\n   * Adapter honors the {@link SubscribeInput.correlated_at} **work mark**\n   * (#1485): `subscribe` applies it as `GREATEST(correlated_at, N)` and\n   * `claim` serves a marked stream from the subscription row alone\n   * (`at < correlated_at`) instead of probing the event log. When `true`,\n   * the TCK runs the work-set suite — mark-then-claim, monotonicity\n   * across positive/zero/negative values, `ack` retiring a stream from\n   * the claimable set and a later mark re-adding it, and the operator\n   * surfaces (`reset`, `unblock`, `defer`, `prioritize`) leaving the mark\n   * intact.\n   *\n   * @deprecated Ignored since #1488 — the mark is the only eligibility\n   * rule, so this suite always runs. The field is kept so an adapter that\n   * still passes `work_set: true` keeps compiling.\n   */\n  readonly work_set?: boolean;\n};\n\n/**\n * Options for {@link runStoreTck}.\n */\nexport type StoreTckOptions = {\n  /**\n   * Display name for the implementation under test.\n   */\n  readonly name: string;\n  /**\n   * Returns the {@link Store} instance under test. Called once during\n   * `beforeAll`. The TCK does not assume a fresh store per test — each\n   * test namespaces its streams via {@link uid} so they don't collide.\n   * The TCK calls `store.seed()` once before any test runs and\n   * `store.dispose()` after all tests, with `store.drop()` in between\n   * if any test needs it.\n   */\n  readonly factory: () => Store | Promise<Store>;\n  /**\n   * Constructs the adapter the way a first-time user does: with its own\n   * documented defaults and nothing else — `() => new MyStore()`.\n   *\n   * Supplying it opts into the default-configuration suite, which\n   * allows exactly two outcomes and outlaws the third:\n   *\n   * 1. **Construction throws.** The adapter has no safe default and\n   *    says so — an operator sees the error immediately.\n   * 2. **Construction succeeds and the store round-trips**, including a\n   *    second commit that advances the version.\n   * 3. ~~Construction succeeds, `commit` reports success, and the data\n   *    is not there.~~ This is the shape the suite exists to catch\n   *    (#1443: a zero-config SQLite store defaulted to a per-connection\n   *    private in-memory database, so `seed`'s DDL landed where later\n   *    statements could not see it — every write was accepted and lost).\n   *\n   * The suite never calls `drop()`, so it is safe to point at a default\n   * that resolves to a real shared database; it namespaces its stream\n   * with {@link uid} like every other case.\n   */\n  readonly default_factory?: () => Store | Promise<Store>;\n  /**\n   * Optional capabilities flags — see {@link StoreCapabilities}.\n   */\n  readonly capabilities?: StoreCapabilities;\n};\n\n/**\n * Runs the Store contract test compatibility kit against the\n * implementation produced by `options.factory`.\n *\n * The TCK is the executable definition of the {@link Store} contract.\n * Every method on the interface in `libs/act/src/types/ports.ts` has\n * matching cases here:\n *\n * - `commit` — single + multi-event commits, optimistic concurrency\n * - `query` — stream, names, correlation, before, after, created_after,\n *   created_before, limit, with_snaps, stream_exact, backward traversal\n * - stream filter grammar — the portable regex subset (`^`, `$`, `.`,\n *   `.*`, literal characters) matches identically everywhere; richer\n *   patterns either match with full regex semantics or throw\n *   `ValidationError` — never a silent approximation\n * - `subscribe` — idempotent re-subscribe, watermark return value\n * - `claim` / `ack` — lease lifecycle, dual frontiers, leased streams\n *   not double-claimed, exact-source has-work matching, timed-out-lease\n *   retry accounting\n * - `block` — blocked streams hidden from claim, only same-drainer can block\n * - `reset` — restart watermarks (including blocked), no-op for missing\n * - `prioritize` — bulk priority updates by filter\n * - `truncate` — snapshot vs tombstone seeding, empty inputs, missing\n *   streams; windowed boundaries (`before`/`max_id`) — prefix deleted\n *   behind the closest safe snapshot, tail + subscriptions kept,\n *   no-snapshot no-op, mixed full + windowed targets\n * - `query_streams` — filters, exact-match, pagination, blocked\n * - `notify` (capability-gated) — cross-instance delivery, self-filtering\n *   (an instance never receives its own commits), one notification per\n *   commit transaction with the full event batch\n *\n * Tests namespace their streams with a per-test {@link uid} so the\n * suite is parallel-safe against a shared backing store (e.g., a real\n * Postgres instance running tests for the whole monorepo concurrently).\n *\n * @example\n * ```ts\n * import { runStoreTck } from \"@rotorsoft/act-tck\";\n * import { InMemoryStore } from \"@rotorsoft/act\";\n *\n * runStoreTck({\n *   name: \"InMemoryStore\",\n *   factory: () => new InMemoryStore(),\n * });\n * ```\n */\nexport const runStoreTck = (options: StoreTckOptions): void => {\n  describe(`TCK / Store / ${options.name}`, () => {\n    let store: Store;\n    // Spread (rather than `?? {}`) so the default-empty path doesn't\n    // create a branch every adapter has to disprove. `{ ...undefined }`\n    // is a runtime no-op that yields `{}`.\n    const caps: StoreCapabilities = { ...options.capabilities };\n\n    const is_literal = (source: string) => !/[\\]^$.*+?()[{}|\\\\]/.test(source);\n\n    // Stand in for `correlate`, which a store test has no orchestrator to\n    // run. `claim` follows marks since #1488 — committing an event is not\n    // enough to make a stream claimable — so a test that expects work to be\n    // claimed has to mark it, and mark it *honestly*: the highest event id\n    // inside the subscription's own fetch window, which is what correlate\n    // records. A source-less row sees every stream, a literal source only\n    // its own, a pattern source the streams it matches.\n    const correlate = async (target: Store = store) => {\n      const rows: {\n        stream: string;\n        source?: string;\n        at: number;\n        priority: number;\n        lane?: string;\n      }[] = [];\n      await target.query_streams(\n        (p) =>\n          rows.push({\n            stream: p.stream,\n            source: p.source,\n            at: p.at,\n            priority: p.priority,\n            lane: p.lane,\n          }),\n        { limit: 1000 }\n      );\n      // Carry the row's own priority and lane back with the mark, the way\n      // correlate does: the mark rides `subscribe`, and a subscribe that\n      // outranks the row writes its lane — the trap #1487 hit in the\n      // orchestrator.\n      const marks: SubscribeInput[] = [];\n      for (const row of rows) {\n        let mark = -1;\n        await target.query(\n          (e) => {\n            mark = Math.max(mark, e.id);\n          },\n          row.source !== undefined\n            ? { stream: row.source, stream_exact: is_literal(row.source) }\n            : {}\n        );\n        if (mark > row.at)\n          marks.push({\n            stream: row.stream,\n            priority: row.priority,\n            lane: row.lane,\n            correlated_at: mark,\n          });\n      }\n      if (marks.length) await target.subscribe(marks);\n    };\n\n    beforeAll(async () => {\n      store = await options.factory();\n      await store.drop();\n      await store.seed();\n    });\n\n    afterAll(async () => {\n      await store.dispose();\n    });\n\n    // The one suite that does not use the shared `store`: it exercises\n    // whatever the adapter's own defaults produce (#1443).\n    const default_factory = options.default_factory;\n    if (default_factory) {\n      describe(\"default configuration\", () => {\n        it(\"either refuses to construct or round-trips a commit\", async () => {\n          let zero_config: Store;\n          try {\n            zero_config = await default_factory();\n          } catch (error) {\n            // Refusing is a valid answer — an adapter with no safe\n            // default must say so out loud, at construction, before any\n            // caller can hand it data to lose.\n            expect(error).toBeInstanceOf(Error);\n            expect((error as Error).message).not.toBe(\"\");\n            return;\n          }\n          try {\n            await zero_config.seed();\n            const s = `default-config-${uid()}`;\n            const first = await zero_config.commit<CounterEvents>(\n              s,\n              [inc(1)],\n              make_meta({ stream: s })\n            );\n            expect(first[0].version).toBe(0);\n            // A second commit catches the subtler half of the failure:\n            // a store that loses the first write restarts versioning\n            // here instead of advancing.\n            const second = await zero_config.commit<CounterEvents>(\n              s,\n              [inc(2)],\n              make_meta({ stream: s })\n            );\n            expect(second[0].version).toBe(1);\n            const read: Committed<CounterEvents, keyof CounterEvents>[] = [];\n            await zero_config.query<CounterEvents>((e) => read.push(e), {\n              stream: s,\n            });\n            expect(read).toHaveLength(2);\n            expect(read.map((e) => e.data.amount)).toEqual([1, 2]);\n          } finally {\n            await zero_config.dispose();\n          }\n        });\n      });\n    }\n\n    describe(\"commit\", () => {\n      it(\"returns committed events with sequenced ids and versions\", async () => {\n        const s = `commit-seq-${uid()}`;\n        const committed = await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2), dec(3)],\n          make_meta({ stream: s })\n        );\n        expect(committed).toHaveLength(3);\n        expect(committed[0].version).toBe(0);\n        expect(committed[1].version).toBe(1);\n        expect(committed[2].version).toBe(2);\n        expect(committed[0].name).toBe(\"Incremented\");\n        expect(committed[2].data).toEqual({ amount: 3 });\n        for (let i = 1; i < committed.length; i++) {\n          expect(committed[i].id).toBeGreaterThan(committed[i - 1].id);\n        }\n      });\n\n      it(\"attaches correlation and stream metadata\", async () => {\n        const s = `commit-meta-${uid()}`;\n        const correlation = `cor-${uid()}`;\n        const committed = await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s, correlation })\n        );\n        expect(committed[0].stream).toBe(s);\n        expect(committed[0].meta.correlation).toBe(correlation);\n      });\n\n      it(\"throws ConcurrencyError when expectedVersion is wrong\", async () => {\n        const s = `commit-cc-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s }),\n          0\n        );\n        await expect(\n          store.commit<CounterEvents>(s, [inc(1)], make_meta({ stream: s }), 0)\n        ).rejects.toBeInstanceOf(ConcurrencyError);\n      });\n\n      it(\"preserves prior events when a concurrent commit is rejected\", async () => {\n        const s = `commit-cc-preserve-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2)],\n          make_meta({ stream: s })\n        );\n        await expect(\n          store.commit<CounterEvents>(s, [inc(3)], make_meta({ stream: s }), 0)\n        ).rejects.toBeInstanceOf(ConcurrencyError);\n        const found = await collect(store, { stream: s, stream_exact: true });\n        expect(found).toHaveLength(2);\n      });\n    });\n\n    describe(\"query\", () => {\n      it(\"filters by stream, names, correlation, limit, with_snaps\", async () => {\n        const s1 = `q-s1-${uid()}`;\n        const s2 = `q-s2-${uid()}`;\n        const cor = `q-cor-${uid()}`;\n        await store.commit<CounterEvents>(\n          s1,\n          [inc(1), dec(1)],\n          make_meta({ stream: s1, correlation: cor })\n        );\n        await store.commit<CounterEvents>(\n          s2,\n          [inc(2), dec(2), reset_event()],\n          make_meta({ stream: s2, correlation: cor })\n        );\n\n        const by_stream = await collect(store, {\n          stream: s1,\n          stream_exact: true,\n        });\n        expect(by_stream).toHaveLength(2);\n\n        const by_name = await collect(store, {\n          stream: s2,\n          stream_exact: true,\n          names: [\"Reset\"],\n        });\n        expect(by_name).toHaveLength(1);\n        expect(by_name[0].name).toBe(\"Reset\");\n\n        const by_correlation = await collect(store, { correlation: cor });\n        expect(by_correlation).toHaveLength(5);\n\n        const limited = await collect(store, {\n          correlation: cor,\n          limit: 2,\n        });\n        expect(limited).toHaveLength(2);\n      });\n\n      it(\"with_snaps resumes from the latest snapshot per stream\", async () => {\n        const s = `q-snap-${uid()}`;\n        // 2 pre-snapshot domain events ...\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(1)],\n          make_meta({ stream: s })\n        );\n        // ... a snapshot ...\n        const [snap] = await store.commit(\n          s,\n          [{ name: SNAP_EVENT, data: { count: 2 } }],\n          make_meta({ stream: s })\n        );\n        // ... and 3 events after it.\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(1), inc(1)],\n          make_meta({ stream: s })\n        );\n\n        // with_snaps resumes AT the latest snapshot: snapshot + the 3 after\n        // it, never the 2 pre-snapshot events.\n        const from_snap = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          with_snaps: true,\n        });\n        expect(from_snap).toHaveLength(4);\n        expect(from_snap[0].name).toBe(SNAP_EVENT);\n\n        // Without with_snaps: the 5 domain events, snapshot excluded.\n        const domain = await collect(store, { stream: s, stream_exact: true });\n        expect(domain).toHaveLength(5);\n\n        // An explicit `after` overrides the snapshot floor.\n        const after_snap = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          with_snaps: true,\n          after: snap.id,\n        });\n        expect(after_snap).toHaveLength(3);\n\n        // A stream with no snapshot returns its full history under with_snaps.\n        const s2 = `q-nosnap-${uid()}`;\n        await store.commit<CounterEvents>(\n          s2,\n          [inc(1), inc(1)],\n          make_meta({ stream: s2 })\n        );\n        const full = await collect(store, {\n          stream: s2,\n          stream_exact: true,\n          with_snaps: true,\n        });\n        expect(full).toHaveLength(2);\n      });\n\n      it(\"with_snaps applies the resume floor on a backward scan too\", async () => {\n        const s = `q-snap-back-${uid()}`;\n        // 2 pre-snapshot events, a snapshot, then 3 after it.\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(1)],\n          make_meta({ stream: s })\n        );\n        const [snap] = await store.commit(\n          s,\n          [{ name: SNAP_EVENT, data: { count: 2 } }],\n          make_meta({ stream: s })\n        );\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(1), inc(1)],\n          make_meta({ stream: s })\n        );\n\n        // The floor is direction-agnostic: forward resumes AT the snapshot,\n        // backward stops AT it. Either way, only the snapshot + the 3 events\n        // after it — never the 2 pre-snapshot events.\n        const backward = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          with_snaps: true,\n          backward: true,\n        });\n        expect(backward).toHaveLength(4);\n        // DESC → the snapshot (lowest id in the floored set) comes last.\n        expect(backward[backward.length - 1].name).toBe(SNAP_EVENT);\n        expect(backward.every((e) => e.id >= snap.id)).toBe(true);\n\n        // No snapshot → full history under with_snaps + backward.\n        const s2 = `q-nosnap-back-${uid()}`;\n        await store.commit<CounterEvents>(\n          s2,\n          [inc(1), inc(1)],\n          make_meta({ stream: s2 })\n        );\n        const full = await collect(store, {\n          stream: s2,\n          stream_exact: true,\n          with_snaps: true,\n          backward: true,\n        });\n        expect(full).toHaveLength(2);\n      });\n\n      it(\"supports backward traversal\", async () => {\n        const s = `q-back-${uid()}`;\n        const committed = await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2), inc(3)],\n          make_meta({ stream: s })\n        );\n        const forward = await collect(store, { stream: s, stream_exact: true });\n        const backward = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          backward: true,\n        });\n        expect(forward.map((e) => e.id)).toEqual(committed.map((c) => c.id));\n        expect(backward.map((e) => e.id)).toEqual(\n          [...committed].reverse().map((c) => c.id)\n        );\n\n        // Backward + limit — exercises the limit-break branch in the\n        // backward-traversal path. Latest event only.\n        const latest = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          backward: true,\n          limit: 1,\n        });\n        expect(latest).toHaveLength(1);\n        expect(latest[0].id).toBe(committed.at(-1)!.id);\n      });\n\n      it(\"after/before bound the id range\", async () => {\n        const s = `q-bounds-${uid()}`;\n        const committed = await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2), inc(3), inc(4)],\n          make_meta({ stream: s })\n        );\n        const after_first = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          after: committed[0].id,\n        });\n        expect(after_first.map((e) => e.id)).toEqual(\n          committed.slice(1).map((c) => c.id)\n        );\n        const before_last = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          before: committed[committed.length - 1].id,\n        });\n        expect(before_last.map((e) => e.id)).toEqual(\n          committed.slice(0, -1).map((c) => c.id)\n        );\n      });\n\n      // #1199: `names: []` means \"match no event names\" on every adapter.\n      // An empty allow-list is an explicit \"nothing passes\" — the opposite\n      // of an omitted `names` (which matches all). PG historically dropped\n      // the empty filter (returned ALL); this pins the sane semantics.\n      it(\"names:[] matches no events\", async () => {\n        const s = `q-names-empty-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), dec(1)],\n          make_meta({ stream: s })\n        );\n        const none = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          names: [],\n        });\n        expect(none).toHaveLength(0);\n        // Omitting `names` still returns everything — the contrast case.\n        const all = await collect(store, { stream: s, stream_exact: true });\n        expect(all).toHaveLength(2);\n      });\n\n      // #1199: falsy-zero `after`/`before` are honored, not dropped by a\n      // truthy guard. `after: 0` means strictly \"id > 0\"; `before: 0`\n      // means strictly \"id < 0\" (matches nothing). InMemory ids start at\n      // 0, so a truthy `if (after)` guard would leak id 0 on the backward\n      // path — this pins `!== undefined` semantics across adapters.\n      it(\"after:0 and before:0 are honored as id bounds\", async () => {\n        const s = `q-zero-bound-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2), inc(3)],\n          make_meta({ stream: s })\n        );\n        // before:0 → nothing has an id below 0.\n        expect(\n          await collect(store, { stream: s, stream_exact: true, before: 0 })\n        ).toHaveLength(0);\n        // before:0 on the backward path is equally empty.\n        expect(\n          await collect(store, {\n            stream: s,\n            stream_exact: true,\n            before: 0,\n            backward: true,\n          })\n        ).toHaveLength(0);\n        // after:0 → strictly id > 0. On adapters whose ids start at 0 the\n        // first event (id 0) is excluded; on 1-based adapters every event\n        // survives. Either way no event with id <= 0 is returned.\n        const forward = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          after: 0,\n        });\n        expect(forward.every((e) => e.id > 0)).toBe(true);\n        // Backward path with after:0 must apply the same exclusive bound —\n        // never leak an id-0 event.\n        const backward = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          after: 0,\n          backward: true,\n        });\n        expect(backward.every((e) => e.id > 0)).toBe(true);\n      });\n\n      it(\"created_after/created_before filter by timestamp\", async () => {\n        const s = `q-ts-${uid()}`;\n        const committed = await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        // Build the window from the event's OWN `created` (whatever clock\n        // the store stamped it with) so the assertion can't flake on a\n        // skew between the store's clock and the test runner's clock.\n        const ts = committed[0].created.getTime();\n        const before = new Date(ts - 60_000);\n        const future = new Date(ts + 60_000);\n        const in_window = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          created_after: before,\n          created_before: future,\n        });\n        expect(in_window.length).toBe(1);\n        const out_of_window = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          created_after: future,\n        });\n        expect(out_of_window.length).toBe(0);\n      });\n\n      it(\"created bounds exclude the event they are pinned to\", async () => {\n        // The window case above is built as `ts ± 60_000`, so no bound ever\n        // lands ON an event's own timestamp — which is where the two\n        // directions can disagree. A store may hold `created` at a finer\n        // resolution than the `Date` it hands back (Postgres keeps\n        // microseconds), and then a row compares as strictly-after its own\n        // truncated timestamp and returns itself (#1595). Millisecond is the\n        // resolution the contract is expressed in, since that is all a `Date`\n        // carries, so both bounds must exclude the event they name.\n        const s = `q-ts-self-${uid()}`;\n        const committed = await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        const own = committed[0].created;\n        const after_own = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          created_after: own,\n        });\n        expect(after_own).toEqual([]);\n        // The mirror direction, already strict everywhere — the control that\n        // isolates a failure to the `created_after` side.\n        const before_own = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          created_before: own,\n        });\n        expect(before_own).toEqual([]);\n      });\n\n      it(\"backward traversal short-circuits at `after` id boundary\", async () => {\n        const s = `q-back-after-${uid()}`;\n        const committed = await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2), inc(3)],\n          make_meta({ stream: s })\n        );\n        // Backward from the end, but only events newer than committed[0].id.\n        const got = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          backward: true,\n          after: committed[0].id,\n        });\n        expect(got.map((e) => e.id)).toEqual([\n          committed[2].id,\n          committed[1].id,\n        ]);\n      });\n\n      it(\"backward traversal short-circuits at `created_after` boundary\", async () => {\n        const s = `q-back-cafter-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        // Asking backward with created_after = now+1m should short-circuit\n        // immediately because the only event was created before that bound.\n        const future = new Date(Date.now() + 60_000);\n        const got = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          backward: true,\n          created_after: future,\n        });\n        expect(got).toHaveLength(0);\n      });\n\n      it(\"backward traversal honors created_before by skipping newer events\", async () => {\n        const s = `q-back-ts-${uid()}`;\n        // `make_meta()` with no stream — exercises the meta builder's\n        // no-causation branch alongside the backward + created_before\n        // path inside the adapter.\n        const committed = await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta()\n        );\n        // `created_before` strictly before the event's own timestamp, so\n        // it must be skipped — relative to the store's clock, not the\n        // host's, to avoid clock-skew flakiness.\n        const past = new Date(committed[0].created.getTime() - 60_000);\n        const got = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          backward: true,\n          created_before: past,\n        });\n        expect(got).toHaveLength(0);\n      });\n\n      it(\"stream_exact disables regex matching\", async () => {\n        const tag = uid();\n        const a = `q-exact-${tag}`;\n        const b = `q-exact-${tag}-extra`;\n        await store.commit<CounterEvents>(\n          a,\n          [inc(1)],\n          make_meta({ stream: a })\n        );\n        await store.commit<CounterEvents>(\n          b,\n          [inc(2)],\n          make_meta({ stream: b })\n        );\n        const exact = await collect(store, { stream: a, stream_exact: true });\n        expect(exact).toHaveLength(1);\n        expect(exact[0].data).toEqual({ amount: 1 });\n      });\n\n      // Regex anchor contract — same across every Store. Caller controls\n      // anchors. `^foo` for prefix, `foo$` for suffix, `^foo$` for whole-\n      // string. A plain `foo` is a substring match. Auto-anchoring by the\n      // adapter is a contract violation.\n      it(\"plain regex without anchors is a substring match\", async () => {\n        const tag = uid();\n        const inner = `qr-${tag}-inner`;\n        const longer = `qr-${tag}-inner-extra`;\n        await store.commit<CounterEvents>(\n          inner,\n          [inc(1)],\n          make_meta({ stream: inner })\n        );\n        await store.commit<CounterEvents>(\n          longer,\n          [inc(2)],\n          make_meta({ stream: longer })\n        );\n        const got = await collect(store, { stream: `qr-${tag}-inner` });\n        expect(got.map((e) => e.stream).sort()).toEqual([inner, longer].sort());\n      });\n\n      it(\"caller-anchored `^name$` matches only the whole string\", async () => {\n        const tag = uid();\n        const inner = `qr-${tag}-anchor`;\n        const longer = `qr-${tag}-anchor-extra`;\n        await store.commit<CounterEvents>(\n          inner,\n          [inc(1)],\n          make_meta({ stream: inner })\n        );\n        await store.commit<CounterEvents>(\n          longer,\n          [inc(2)],\n          make_meta({ stream: longer })\n        );\n        const got = await collect(store, { stream: `^qr-${tag}-anchor$` });\n        expect(got).toHaveLength(1);\n        expect(got[0].stream).toBe(inner);\n      });\n\n      it(\"caller-anchored `^prefix` matches by prefix\", async () => {\n        const tag = uid();\n        const a = `qr-${tag}-pfx-a`;\n        const b = `qr-${tag}-pfx-b`;\n        const other = `zz-${tag}-other`;\n        await store.commit<CounterEvents>(\n          a,\n          [inc(1)],\n          make_meta({ stream: a })\n        );\n        await store.commit<CounterEvents>(\n          b,\n          [inc(2)],\n          make_meta({ stream: b })\n        );\n        await store.commit<CounterEvents>(\n          other,\n          [inc(3)],\n          make_meta({ stream: other })\n        );\n        const got = await collect(store, { stream: `^qr-${tag}-pfx-` });\n        expect(got.map((e) => e.stream).sort()).toEqual([a, b].sort());\n      });\n    });\n\n    // Stream-filter grammar conformance. The portable subset — `^` / `$`\n    // anchors, `.` (any single character), `.*` (any run), and literal\n    // characters — must produce identical matches on every adapter\n    // (PG POSIX `~`, InMemory `RegExp`, SQLite anchor-aware `LIKE`).\n    // Richer regex is adapter-optional: an adapter either matches it\n    // with full regex semantics or throws `ValidationError`. Silently\n    // returning wrong rows (e.g. from a lossy LIKE approximation) is a\n    // contract violation — and the worst one available when the filter\n    // drives `reset` / `unblock`.\n    describe(\"stream filter grammar\", () => {\n      const seed_streams = async (streams: string[]) => {\n        for (const s of streams)\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n      };\n\n      const streams_matching = async (pattern: string) =>\n        (await collect(store, { stream: pattern })).map((e) => e.stream).sort();\n\n      // A non-portable pattern must never silently mis-match: the store\n      // either returns exactly the full-regex-semantics result set or\n      // throws ValidationError at the call site.\n      const match_exactly_or_throw = async (\n        pattern: string,\n        expected: string[]\n      ) => {\n        let matched: string[] | undefined;\n        let error: unknown;\n        try {\n          matched = await streams_matching(pattern);\n        } catch (e) {\n          error = e;\n        }\n        if (error !== undefined) expect(error).toBeInstanceOf(ValidationError);\n        else expect(matched).toEqual(expected.sort());\n      };\n\n      it(\"portable subset: anchors, `.`, and `.*` match identically\", async () => {\n        const tag = uid();\n        const plain = `g-${tag}-plain`;\n        const dotted = `g-${tag}.dot`;\n        const scored = `g-${tag}_us`;\n        const pct = `g-${tag}%pc`;\n        await seed_streams([plain, dotted, scored, pct]);\n\n        // ^prefix — all four, regex-significant literals included\n        expect(await streams_matching(`^g-${tag}`)).toEqual(\n          [plain, dotted, scored, pct].sort()\n        );\n        // suffix$ — one\n        expect(await streams_matching(`${tag}-plain$`)).toEqual([plain]);\n        // ^exact$ — one\n        expect(await streams_matching(`^g-${tag}-plain$`)).toEqual([plain]);\n        // single `.` is a one-character wildcard: matches the literal\n        // dot in `dotted` and the `-` in `plain`\n        expect(await streams_matching(`^g-${tag}.dot$`)).toEqual([dotted]);\n        expect(await streams_matching(`^g-${tag}.plain$`)).toEqual([plain]);\n        // `.*` — any run\n        expect(await streams_matching(`^g-${tag}.*dot$`)).toEqual([dotted]);\n      });\n\n      it(\"literal `_` and `%` in patterns are not wildcards\", async () => {\n        const tag = uid();\n        const scored = `u-${tag}_x`;\n        const scored_decoy = `u-${tag}Zx`;\n        const pct = `p-${tag}%y`;\n        const pct_decoy = `p-${tag}ZZy`;\n        await seed_streams([scored, scored_decoy, pct, pct_decoy]);\n\n        // `_` is a literal in the regex grammar — a store translating to\n        // LIKE must escape it or it single-char-wildcards into the decoy\n        expect(await streams_matching(`^u-${tag}_x$`)).toEqual([scored]);\n        // `%` is a literal in the regex grammar — unescaped LIKE would\n        // any-run-wildcard into the decoy\n        expect(await streams_matching(`^p-${tag}%y$`)).toEqual([pct]);\n      });\n\n      it(\"portable subset applies to stream-position filters\", async () => {\n        const tag = uid();\n        const scored = `sf-${tag}_a`;\n        const decoy = `sf-${tag}Za`;\n        await store.subscribe([{ stream: scored }, { stream: decoy }]);\n\n        const got: string[] = [];\n        await store.query_streams((p) => got.push(p.stream), {\n          stream: `^sf-${tag}_a$`,\n        });\n        expect(got).toEqual([scored]);\n      });\n\n      it(\"non-portable patterns match with full regex semantics or throw\", async () => {\n        const tag = uid();\n        const a = `np-${tag}-a`;\n        const b = `np-${tag}-b`;\n        const c = `np-${tag}-c`;\n        const one = `np-${tag}-1`;\n        const aaa = `np-${tag}-aaa`;\n        const dot = `e-${tag}.d`;\n        const dot_decoy = `e-${tag}xd`;\n        await seed_streams([a, b, c, one, aaa, dot, dot_decoy]);\n\n        // alternation\n        await match_exactly_or_throw(`^np-${tag}-(a|b)$`, [a, b]);\n        // character class\n        await match_exactly_or_throw(`^np-${tag}-[0-9]$`, [one]);\n        // quantifier\n        await match_exactly_or_throw(`^np-${tag}-a+$`, [a, aaa]);\n        // escaped dot — a literal-dot match, not a one-char wildcard\n        await match_exactly_or_throw(`^e-${tag}\\\\.d$`, [dot]);\n      });\n\n      it(\"bulk stream ops reject non-portable filters instead of mis-matching\", async () => {\n        const tag = uid();\n        const s = `bo-${tag}-a`;\n        await store.subscribe([{ stream: s }]);\n\n        let count: number | undefined;\n        let error: unknown;\n        try {\n          count = await store.reset({ stream: `^bo-${tag}-(a|b)$` });\n        } catch (e) {\n          error = e;\n        }\n        if (error !== undefined) expect(error).toBeInstanceOf(ValidationError);\n        else expect(count).toBe(1);\n      });\n\n      // #1197: stream filters are case-SENSITIVE across every adapter.\n      // PG (`~`) and InMemory (RegExp) are case-sensitive; a store that\n      // translates to `LIKE` must not let SQLite's ASCII-insensitive LIKE\n      // overmatch a differently-cased sibling. A `^order-` prefix must\n      // match `order-x` but never `Order-x`.\n      it(\"stream filters match case-sensitively (query)\", async () => {\n        const tag = uid();\n        const lower = `order-${tag}`;\n        const upper = `Order-${tag}`;\n        await seed_streams([lower, upper]);\n\n        // ^prefix — only the lower-cased stream, never the capitalized one\n        expect(await streams_matching(`^order-${tag}`)).toEqual([lower]);\n        // ^exact$ — the capitalized name never matches a lower-cased pattern\n        expect(await streams_matching(`^Order-${tag}$`)).toEqual([upper]);\n        // contains — case-sensitive substring\n        expect(await streams_matching(`order-${tag}`)).toEqual([lower]);\n      });\n\n      it(\"stream filters match case-sensitively (position filters)\", async () => {\n        const tag = uid();\n        const lower = `csp-order-${tag}`;\n        const upper = `csp-Order-${tag}`;\n        await store.subscribe([{ stream: lower }, { stream: upper }]);\n\n        const got: string[] = [];\n        await store.query_streams((p) => got.push(p.stream), {\n          stream: `^csp-order-${tag}`,\n        });\n        expect(got).toEqual([lower]);\n      });\n\n      it(\"bulk stream ops match case-sensitively\", async () => {\n        const tag = uid();\n        const lower = `bcs-order-${tag}`;\n        const upper = `bcs-Order-${tag}`;\n        await store.subscribe([{ stream: lower }, { stream: upper }]);\n\n        // reset by pattern touches only the exactly-cased stream\n        const count = await store.reset({ stream: `^bcs-order-${tag}` });\n        expect(count).toBe(1);\n      });\n    });\n\n    describe(\"subscribe + claim + ack\", () => {\n      it(\"subscribes new streams and is idempotent on repeat\", async () => {\n        const s = `sub-${uid()}`;\n        const first = await store.subscribe([{ stream: s }]);\n        expect(first.subscribed).toBe(1);\n        const second = await store.subscribe([{ stream: s }]);\n        expect(second.subscribed).toBe(0);\n      });\n\n      // Backs the port-doc contract on `subscribe`'s `priority` param:\n      // \"When the same stream is subscribed by multiple reactions with\n      // different priorities, implementations must keep the maximum so\n      // the highest-priority reaction wins.\" Without this test the merge\n      // could silently regress to last-write-wins on any adapter.\n      it(\"keeps the maximum priority when a stream is re-subscribed\", async () => {\n        const s = `sub-pri-${uid()}`;\n        const read = async () => {\n          const got: { priority?: number } = {};\n          await store.query_streams(\n            (p) => {\n              got.priority = p.priority;\n            },\n            { stream: s, stream_exact: true }\n          );\n          return got.priority;\n        };\n\n        await store.subscribe([{ stream: s, priority: 3 }]);\n        expect(await read()).toBe(3);\n\n        // Higher priority wins.\n        await store.subscribe([{ stream: s, priority: 10 }]);\n        expect(await read()).toBe(10);\n\n        // Lower priority must NOT lower the stored value.\n        await store.subscribe([{ stream: s, priority: 1 }]);\n        expect(await read()).toBe(10);\n\n        // Default priority (0, omitted) must NOT lower it either.\n        await store.subscribe([{ stream: s }]);\n        expect(await read()).toBe(10);\n      });\n\n      // Claim eligibility for a fresh subscription (#1446). The adapters\n      // disagreed here — two short-circuited `at < 0` into \"claimable\",\n      // SQLite did not — and the TCK pinned nothing, so a third-party\n      // adapter was free to pick either. The contract is that a claim\n      // follows work, not registration: an empty lease costs a cycle, and\n      // its no-op ack can advance the watermark past an event committed\n      // mid-cycle.\n      it(\"does not claim a fresh subscription with no matching events\", async () => {\n        const s = `fresh-empty-${uid()}`;\n        const src = `fresh-src-${uid()}`;\n        await store.subscribe([{ stream: s, source: src }]);\n        await correlate();\n        const leases = await store.claim(5, 5, `w-${uid()}`, 5_000);\n        expect(leases.filter((l) => l.stream === s)).toHaveLength(0);\n      });\n\n      it(\"claims a fresh subscription as soon as its first event is marked\", async () => {\n        const s = `fresh-first-${uid()}`;\n        const src = `fresh-first-src-${uid()}`;\n        await store.subscribe([{ stream: s, source: src }]);\n        const [first] = await store.commit<CounterEvents>(\n          src,\n          [inc(1)],\n          make_meta({ stream: src })\n        );\n        // Committing is not enough since #1488: `claim` follows marks, and\n        // only `correlate` raises one. This is that call.\n        await store.subscribe([{ stream: s, correlated_at: first.id }]);\n        await correlate();\n        const leases = await store.claim(5, 5, `w-${uid()}`, 5_000);\n        const mine = leases.filter((l) => l.stream === s);\n        expect(mine).toHaveLength(1);\n        // The watermark is still the fresh `-1`, so the first event is\n        // inside the fetch window rather than behind it. This is what makes\n        // a zero-based event id survivable — a store whose first id is 0\n        // loses that event if anything acked a fresh stream to 0 first.\n        expect(mine[0].at).toBe(-1);\n        const in_window: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>((e) => in_window.push(e), {\n          stream: src,\n          stream_exact: true,\n          after: mine[0].at,\n        });\n        expect(in_window).toHaveLength(1);\n      });\n\n      // The max rule holds across the whole number line, not just above\n      // zero (#1445). Every case above uses positive priorities, which is\n      // precisely why SQLite's `priority > 0` gate around its merge went\n      // unnoticed: with positive values the gate is a no-op.\n      it(\"keeps the maximum for negative and zero priorities too\", async () => {\n        const s = `sub-pri-neg-${uid()}`;\n        const read = async () => {\n          const got: { priority?: number } = {};\n          await store.query_streams(\n            (p) => {\n              got.priority = p.priority;\n            },\n            { stream: s, stream_exact: true }\n          );\n          return got.priority;\n        };\n\n        await store.subscribe([{ stream: s, priority: -5 }]);\n        expect(await read()).toBe(-5);\n\n        // A less-negative priority is still higher — it must win.\n        await store.subscribe([{ stream: s, priority: -1 }]);\n        expect(await read()).toBe(-1);\n\n        // More negative must not lower it.\n        await store.subscribe([{ stream: s, priority: -9 }]);\n        expect(await read()).toBe(-1);\n\n        // Zero outranks every negative, including via the omitted default.\n        await store.subscribe([{ stream: s }]);\n        expect(await read()).toBe(0);\n      });\n\n      // `prioritize` is the documented operator override and the one call\n      // that may *lower* priority. Because `subscribe` is restart-driven and\n      // re-runs for every reaction target on every boot, the declared\n      // priority must come back — otherwise an operator's temporary\n      // de-prioritization is sticky forever (#1445).\n      it(\"restores the declared priority on the next subscribe after a prioritize() downgrade\", async () => {\n        const s = `sub-pri-restore-${uid()}`;\n        const read = async () => {\n          const got: { priority?: number } = {};\n          await store.query_streams(\n            (p) => {\n              got.priority = p.priority;\n            },\n            { stream: s, stream_exact: true }\n          );\n          return got.priority;\n        };\n\n        await store.subscribe([{ stream: s }]);\n        expect(await read()).toBe(0);\n\n        // Operator drops it below the declared default.\n        await store.prioritize({ stream: s, stream_exact: true }, -5);\n        expect(await read()).toBe(-5);\n\n        // The next boot re-subscribes at the declared priority and restores it.\n        await store.subscribe([{ stream: s }]);\n        expect(await read()).toBe(0);\n      });\n\n      // The correlate checkpoint (#1484): how far the log has been READ, as\n      // opposed to how far a target has been processed (`at`). Read AND\n      // written by `subscribe`, which correlate already calls with the\n      // targets each scan discovers — so it costs no round trip of its own,\n      // and its only writer is the component that knows the value.\n      //\n      // A singleton cannot be namespaced with `uid()` like every other case\n      // here, so these read the current value and assert RELATIVE to it.\n      describe(\"correlate checkpoint\", () => {\n        const peek = async () => (await store.subscribe([])).correlated_at;\n\n        it(\"round-trips an advance through subscribe\", async () => {\n          const base = await peek();\n          expect((await store.subscribe([], base + 10)).correlated_at).toBe(\n            base + 10\n          );\n          expect(await peek()).toBe(base + 10);\n        });\n\n        it(\"persists only when greater than the stored value\", async () => {\n          const base = await peek();\n          // Lower — ignored, not written. A worker whose cursor lags must\n          // not be able to rewind the checkpoint.\n          await store.subscribe([], base - 5);\n          expect(await peek()).toBe(base);\n          // Equal — a no-op, so re-sending the same value is safe.\n          await store.subscribe([], base);\n          expect(await peek()).toBe(base);\n          // Greater — advances.\n          await store.subscribe([], base + 3);\n          expect(await peek()).toBe(base + 3);\n        });\n\n        it(\"is left untouched when subscribe omits it\", async () => {\n          const base = await peek();\n          await store.subscribe([]);\n          expect(await peek()).toBe(base);\n        });\n\n        it(\"advances in the same call that registers discovered targets\", async () => {\n          // The shape correlate actually issues: here are the targets I\n          // found, and here is how far I read to find them.\n          const base = await peek();\n          const s = `cp-sub-${uid()}`;\n          const { subscribed, correlated_at } = await store.subscribe(\n            [{ stream: s }],\n            base + 7\n          );\n          expect(subscribed).toBe(1);\n          expect(correlated_at).toBe(base + 7);\n        });\n\n        it(\"is invisible to every stream-scoped surface\", async () => {\n          const seen: string[] = [];\n          await store.query_streams((p) => seen.push(p.stream), {});\n          expect(seen.some((n) => n.startsWith(\"__correlate\"))).toBe(false);\n          expect(seen).not.toContain(\"correlated\");\n        });\n      });\n\n      // The subscription work set (#1485). `correlate` records the highest\n      // event id that resolved to a target as that row's `correlated_at` mark,\n      // and `claim` serves a marked stream from the subscription row alone —\n      // `at < correlated_at` — instead of probing the event log per row. The\n      // probe is what makes claim cost O(subscribed streams); the mark makes\n      // it O(lease budget).\n      //\n      // `NULL` means UNKNOWN, not \"no work\": an unmarked row falls back to\n      // the legacy probe, which is how an install that predates the column\n      // keeps working. That arm is deleted once correlate marks universally.\n      describe(\"subscription work set\", () => {\n        /** Claim just this stream, and say whether it came back. */\n        const claimable = async (stream: string) => {\n          const leased = await store.claim(100, 0, `w-${uid()}`, 1);\n          const mine = leased.find((l) => l.stream === stream);\n          // Release immediately so the next assertion is not fighting a\n          // lease this helper took.\n          if (mine) await store.ack([{ ...mine, at: mine.at }]);\n          return mine !== undefined;\n        };\n\n        it(\"claims a marked stream without probing the event log\", async () => {\n          // The source has no events at all, so the legacy probe would say\n          // \"no work\" — only the mark can make this claimable. That is the\n          // whole point: eligibility comes from the subscription row.\n          const s = `ws-mark-${uid()}`;\n          await store.subscribe([{ stream: s, source: `ws-src-${uid()}` }]);\n          expect(await claimable(s)).toBe(false);\n          await store.subscribe([{ stream: s, correlated_at: 7 }]);\n          expect(await claimable(s)).toBe(true);\n          // A source-less subscription carries a mark the same way — the\n          // mark is a property of the target, not of how it was sourced.\n          const s2 = `ws-mark-nosrc-${uid()}`;\n          await store.subscribe([{ stream: s2, correlated_at: 7 }]);\n          expect(await claimable(s2)).toBe(true);\n        });\n\n        it(\"never regresses the mark, for every value on the number line\", async () => {\n          const s = `ws-mono-${uid()}`;\n          await store.subscribe([\n            { stream: s, source: `ws-none-${uid()}`, correlated_at: 10 },\n          ]);\n          // Park the watermark BETWEEN the stored mark and the lower values\n          // below. Without this the row stays claimable whatever the mark\n          // regressed to, and the assertions would prove nothing.\n          const leased = await store.claim(100, 0, `w-${uid()}`, 10_000);\n          await store.ack([\n            { ...(leased.find((l) => l.stream === s) as Lease), at: 5 },\n          ]);\n          expect(await claimable(s)).toBe(true);\n          // Lower, equal, and negative all leave the stored mark alone — the\n          // shape the #1445 priority bug was on. Any of them landing would\n          // drop `at = 5` out of the claimable set.\n          await store.subscribe([{ stream: s, correlated_at: 4 }]);\n          expect(await claimable(s)).toBe(true);\n          await store.subscribe([{ stream: s, correlated_at: 5 }]);\n          expect(await claimable(s)).toBe(true);\n          await store.subscribe([{ stream: s, correlated_at: -3 }]);\n          expect(await claimable(s)).toBe(true);\n          await store.subscribe([{ stream: s, correlated_at: 0 }]);\n          expect(await claimable(s)).toBe(true);\n          // A higher one does advance it: catch the watermark up to the old\n          // mark, and only the new one can put the stream back in the set.\n          const leased2 = await store.claim(100, 0, `w-${uid()}`, 10_000);\n          await store.ack([\n            { ...(leased2.find((l) => l.stream === s) as Lease), at: 10 },\n          ]);\n          expect(await claimable(s)).toBe(false);\n          await store.subscribe([{ stream: s, correlated_at: 11 }]);\n          expect(await claimable(s)).toBe(true);\n        });\n\n        it(\"retires a stream when ack catches the watermark up to the mark\", async () => {\n          const s = `ws-retire-${uid()}`;\n          await store.subscribe([\n            { stream: s, source: `ws-none-${uid()}`, correlated_at: 5 },\n          ]);\n          const leased = await store.claim(100, 0, `w-${uid()}`, 10_000);\n          const mine = leased.find((l) => l.stream === s);\n          expect(mine).toBeDefined();\n          // Watermark now equals the mark: nothing left that correlate\n          // has seen, so the stream drops out of the claimable set.\n          await store.ack([{ ...(mine as Lease), at: 5 }]);\n          expect(await claimable(s)).toBe(false);\n          // A later mark re-admits it — the set is not one-shot.\n          await store.subscribe([{ stream: s, correlated_at: 6 }]);\n          expect(await claimable(s)).toBe(true);\n        });\n\n        it(\"keeps the mark across reset, so a rebuild is claimable\", async () => {\n          const s = `ws-reset-${uid()}`;\n          await store.subscribe([\n            { stream: s, source: `ws-none-${uid()}`, correlated_at: 3 },\n          ]);\n          const leased = await store.claim(100, 0, `w-${uid()}`, 10_000);\n          await store.ack([\n            { ...(leased.find((l) => l.stream === s) as Lease), at: 3 },\n          ]);\n          expect(await claimable(s)).toBe(false);\n          // reset rewinds the watermark to -1 and leaves the mark alone, so\n          // `at < correlated_at` is true again and the replay can be claimed.\n          await store.reset([s]);\n          expect(await claimable(s)).toBe(true);\n        });\n\n        it(\"keeps the mark across unblock, defer, and prioritize\", async () => {\n          const s = `ws-ops-${uid()}`;\n          await store.subscribe([\n            { stream: s, source: `ws-none-${uid()}`, correlated_at: 9 },\n          ]);\n          const leased = await store.claim(100, 0, `w-${uid()}`, 10_000);\n          const mine = leased.find((l) => l.stream === s) as Lease;\n          await store.block([{ ...mine, error: \"poison\" }]);\n          expect(await claimable(s)).toBe(false);\n          expect(await store.unblock([s])).toBe(1);\n          expect(await claimable(s)).toBe(true);\n          // Deferred to the future: held out of claim, mark untouched.\n          await store.defer([s], Date.now() + 60_000);\n          expect(await claimable(s)).toBe(false);\n          await store.defer([s], Date.now() - 1);\n          expect(await claimable(s)).toBe(true);\n          // Operator priority override does not disturb eligibility.\n          await store.prioritize({ stream: s, stream_exact: true }, 5);\n          expect(await claimable(s)).toBe(true);\n        });\n\n        it(\"never claims an unmarked stream, however much work the log holds\", async () => {\n          // NULL is not \"no work\" and no longer \"unknown, go and look\" — it\n          // is \"correlate has not spoken for this row\", and `claim` has\n          // nothing else to consult since #1488. The events below are real\n          // work for this subscription; only the mark makes them claimable.\n          const s = `ws-unmarked-${uid()}`;\n          const src = `ws-unmarked-src-${uid()}`;\n          await store.subscribe([{ stream: s, source: src }]);\n          const [event] = await store.commit<CounterEvents>(\n            src,\n            [inc(1)],\n            make_meta({ stream: src })\n          );\n          expect(await claimable(s)).toBe(false);\n          await store.subscribe([{ stream: s, correlated_at: event.id }]);\n          expect(await claimable(s)).toBe(true);\n        });\n\n        it(\"surfaces the mark on query_streams positions\", async () => {\n          // Readers other than `claim` need the same distinction it makes:\n          // a watermark below an event id says nothing about pending work,\n          // the mark does. The close-cycle safety guard is the first caller\n          // to ask (#1487), and an unmarked row must read as UNKNOWN there\n          // too — `undefined`, never 0.\n          const marked = `ws-pos-${uid()}`;\n          const unmarked = `ws-pos-none-${uid()}`;\n          await store.subscribe([\n            { stream: marked, source: `ws-none-${uid()}`, correlated_at: 12 },\n            { stream: unmarked, source: `ws-none-${uid()}` },\n          ]);\n          const position = async (stream: string) => {\n            let row: StreamPosition | undefined;\n            await store.query_streams(\n              (p) => {\n                row = p;\n              },\n              { stream, stream_exact: true }\n            );\n            return row;\n          };\n          expect((await position(marked))?.correlated_at).toBe(12);\n          expect((await position(unmarked))?.correlated_at).toBeUndefined();\n        });\n      });\n\n      it(\"claims a subscribed stream and ack releases the lease\", async () => {\n        const s = `claim-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        const by = `worker-${uid()}`;\n        await correlate();\n        const leased = await store.claim(100, 0, by, 10_000);\n        const mine = leased.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        expect(mine!.by).toBe(by);\n        // claim bumped retry from -1 to 0; a non-due ack clears it back to -1.\n        expect(mine!.retry).toBe(0);\n        const acked = await store.ack([\n          { ...(mine as Lease), at: mine!.at + 1 },\n        ]);\n        // The returned lease reflects the post-ack row, not the caller's\n        // pre-ack echo — `retry` is the authoritative -1 on every adapter\n        // (#1347), and stream/source/lane carry through from the row.\n        const ackedMine = acked.find((l) => l.stream === s);\n        expect(ackedMine).toBeDefined();\n        expect(ackedMine!.retry).toBe(-1);\n        expect(ackedMine!.lane).toBe(mine!.lane);\n      });\n\n      it(\"does not double-claim a held lease\", async () => {\n        const s = `claim-held-${uid()}`;\n        const other = `claim-other-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leasedA = await store.claim(100, 0, `wA-${uid()}`, 100_000);\n        const targetA = leasedA.find((l) => l.stream === s);\n        expect(targetA).toBeDefined();\n        // Subscribe + commit `other` only AFTER A's claim — fresh\n        // subscriptions report `at=-1` which adapters treat as\n        // claimable. We want `other` to be visible only to B so the\n        // negative assertion below runs through a populated array.\n        await store.subscribe([{ stream: other }]);\n        await store.commit<CounterEvents>(\n          other,\n          [inc(2)],\n          make_meta({ stream: other })\n        );\n        await correlate();\n        const leasedB = await store.claim(100, 0, `wB-${uid()}`, 100_000);\n        expect(leasedB.length).toBeGreaterThan(0);\n        expect(leasedB.find((l) => l.stream === s)).toBeUndefined();\n        expect(leasedB.find((l) => l.stream === other)).toBeDefined();\n      });\n\n      // The two halves of what happens when a holder overruns its lease\n      // (#1418). Both are load-bearing for the drain: the first is why a\n      // slow worker's round of work is discarded, the second is why the\n      // budget still accrues so a later holder can act on it.\n      it(\"drops the ack of a holder whose lease was taken, and accrues retry per claim\", async () => {\n        const s = `claim-stolen-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2)],\n          make_meta({ stream: s })\n        );\n\n        // A takes a lease it will overrun.\n        await correlate();\n        const leasedA = await store.claim(100, 0, `wA-${uid()}`, 1);\n        const a = leasedA.find((l) => l.stream === s) as Lease;\n        expect(a).toBeDefined();\n        expect(a.retry).toBe(0);\n\n        // The lease lapses while A is still \"working\".\n        await new Promise((r) => setTimeout(r, 50));\n\n        // B steals it, and the claim advances the budget again.\n        await correlate();\n        const leasedB = await store.claim(100, 0, `wB-${uid()}`, 100_000);\n        const b = leasedB.find((l) => l.stream === s) as Lease;\n        expect(b).toBeDefined();\n        expect(b.retry).toBe(1);\n\n        // A finishes and acks — too late. A short return, not an error:\n        // the ownership guard is what stops A regressing a watermark B is\n        // about to advance.\n        const late = await store.ack([{ ...a, at: a.at + 1 }]);\n        expect(late).toEqual([]);\n\n        // A's watermark never landed, and the budget B will see keeps the\n        // count of claims that produced no acknowledged progress.\n        const rows: StreamPosition[] = [];\n        await store.query_streams((r) => rows.push(r), { stream: s });\n        expect(rows[0]?.at).toBe(a.at);\n        expect(rows[0]?.retry).toBe(1);\n        expect(rows[0]?.blocked).toBe(false);\n      });\n\n      it(\"supports dual frontiers (lagging + leading)\", async () => {\n        const s = `claim-dual-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const first = await store.claim(100, 0, `w-${uid()}`, 1);\n        const mine = first.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        await store.ack([{ ...(mine as Lease), at: (mine as Lease).at + 1 }]);\n        await correlate();\n        const second = await store.claim(0, 100, `w-${uid()}`, 1);\n        expect(second.find((l) => l.stream === s)).toBeDefined();\n      });\n\n      it(\"does not starve a default-priority lagging stream under sustained high-priority load (ACT-1223)\", async () => {\n        // A fresh adapter so only these streams compete for the frontier.\n        // Six priority-100 streams that always have fresh work plus one\n        // never-processed priority-0 stream. The lagging selection orders\n        // by priority DESC, at ASC, so without a fairness reserve the four\n        // lagging slots are forever taken by the high-priority streams and\n        // the low one starves. The reserve (ACT-1223) carves one slot for\n        // pure watermark order, so the most-behind stream is claimed within\n        // a bounded window regardless of priority.\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const suffix = uid();\n          const highs = Array.from(\n            { length: 6 },\n            (_, i) => `hi-${i}-${suffix}`\n          );\n          const low = `lo-${suffix}`;\n          await fresh.subscribe([\n            ...highs.map((stream) => ({ stream, priority: 100 })),\n            { stream: low, priority: 0 },\n          ]);\n          for (const stream of highs)\n            await fresh.commit<CounterEvents>(\n              stream,\n              [inc(1)],\n              make_meta({ stream })\n            );\n          await fresh.commit<CounterEvents>(\n            low,\n            [inc(1)],\n            make_meta({ stream: low })\n          );\n\n          const by = `w-${uid()}`;\n          let low_claimed = false;\n          const MAX_CYCLES = 20;\n          for (let cycle = 0; cycle < MAX_CYCLES && !low_claimed; cycle++) {\n            await correlate(fresh);\n            const leases = await fresh.claim(4, 0, by, 1000);\n            if (leases.some((l) => l.stream === low)) {\n              low_claimed = true;\n              break;\n            }\n            // Ack each high stream forward, then commit a fresh event so it\n            // is lagging again next cycle — sustained high-priority load.\n            for (const l of leases) {\n              await fresh.ack([{ ...l, at: l.at + 1 }]);\n              await fresh.commit<CounterEvents>(\n                l.stream,\n                [inc(1)],\n                make_meta({ stream: l.stream })\n              );\n            }\n          }\n\n          expect(low_claimed).toBe(true);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n\n      it(\"dedupes when both frontiers would return the same stream\", async () => {\n        const s = `claim-dedup-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        // Asking for both frontiers with overlapping budgets must not\n        // return the same stream twice.\n        await correlate();\n        const claimed = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const matches = claimed.filter((l) => l.stream === s);\n        expect(matches).toHaveLength(1);\n      });\n\n      it(\"silently ignores ack from the wrong holder\", async () => {\n        const s = `ack-wrong-${uid()}`;\n        const sibling = `ack-sibling-${uid()}`;\n        await store.subscribe([{ stream: s }, { stream: sibling }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await store.commit<CounterEvents>(\n          sibling,\n          [inc(2)],\n          make_meta({ stream: sibling })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `right-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        const sibling_lease = leased.find((l) => l.stream === sibling);\n        expect(mine).toBeDefined();\n        expect(sibling_lease).toBeDefined();\n        // Mix a correctly-held lease with an imposter ack so `acked`\n        // ends up with one entry (the sibling) and the predicate runs.\n        const acked = await store.ack([\n          { ...(mine as Lease), by: \"imposter\" },\n          sibling_lease as Lease,\n        ]);\n        expect(acked.length).toBeGreaterThan(0);\n        expect(acked.find((l) => l.stream === s)).toBeUndefined();\n      });\n\n      it(\"ack with a stale (lower) watermark does not throw\", async () => {\n        const s = `ack-stale-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        const by = `w-${uid()}`;\n        await correlate();\n        const leased = await store.claim(100, 0, by, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        await expect(\n          store.ack([{ ...(mine as Lease), at: -5 }])\n        ).resolves.toBeDefined();\n      });\n\n      it(\"claim with no subscribed streams returns an empty array\", async () => {\n        // Use a fresh adapter instance — the parent store is shared across\n        // the suite and has subscribed streams already.\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          await correlate(fresh);\n          const claimed = await fresh.claim(1, 1, `w-${uid()}`, 1000);\n          expect(claimed).toEqual([]);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n    });\n\n    // ACT-980: the TCK previously asserted only the *shape* of claim()\n    // results, letting adapters diverge on `Lease.retry` and `Lease.lagging`\n    // — the two signals the drain controller reads to time `blockOnError`\n    // and to balance frontiers. These cases pin the *semantics* so every\n    // adapter is interchangeable, not merely structurally conformant.\n    describe(\"lease semantics\", () => {\n      // Frontier budgets (`lagging`/`leading`) apply across every claimable\n      // stream in the store, so these cases run against a fresh, isolated\n      // instance with exactly one subscribed stream — that makes the\n      // budgets deterministic regardless of what the shared suite left\n      // behind.\n      it(\"returns retry=0 on first claim and increments on re-claim without ack\", async () => {\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const s = `lease-retry-${uid()}`;\n          await fresh.subscribe([{ stream: s }]);\n          await fresh.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n          // First claim = first attempt. A 0ms lease is released\n          // immediately, so the re-claim below sees a claimable stream\n          // deterministically (no wall-clock race on lease expiry).\n          await correlate(fresh);\n          const first = await fresh.claim(1, 0, `w-${uid()}`, 0);\n          const f = first.find((l) => l.stream === s);\n          expect(f).toBeDefined();\n          expect(f!.retry).toBe(0);\n          // Re-claim without an intervening ack = the first retry.\n          await correlate(fresh);\n          const second = await fresh.claim(1, 0, `w-${uid()}`, 100_000);\n          const sec = second.find((l) => l.stream === s);\n          expect(sec).toBeDefined();\n          expect(sec!.retry).toBe(1);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n\n      it(\"records the lease holder for a zero-length lease, so its ack lands\", async () => {\n        // `millis` bounds how long a lease stands, not whether it was\n        // granted. A store that skips recording the holder for a\n        // zero-length lease hands out a lease whose every `ack` is dropped\n        // — the watermark never advances and every event is redelivered on\n        // every drain, silently and forever. `leaseMillis: 0` is legal\n        // config, so this is reachable from type-checked source.\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const s = `lease-zero-${uid()}`;\n          await fresh.subscribe([{ stream: s }]);\n          const [committed] = await fresh.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n          await correlate(fresh);\n          const leased = await fresh.claim(1, 0, `w-${uid()}`, 0);\n          const mine = leased.find((l) => l.stream === s);\n          expect(mine).toBeDefined();\n\n          const acked = await fresh.ack([{ ...mine!, at: committed.id }]);\n          expect(acked).toHaveLength(1);\n\n          let at = -1;\n          await fresh.query_streams(\n            (p) => {\n              at = p.at;\n            },\n            { stream: s, stream_exact: true }\n          );\n          expect(at).toBe(committed.id);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n\n      it(\"reports lagging=true from the lagging frontier and false from the leading frontier\", async () => {\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const s = `lease-lag-${uid()}`;\n          await fresh.subscribe([{ stream: s }]);\n          await fresh.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n          // Lagging-only budget: the stream is claimed from the lagging\n          // frontier → lagging must be true.\n          await correlate(fresh);\n          const lag = await fresh.claim(1, 0, `w-${uid()}`, 0);\n          expect(lag.find((l) => l.stream === s)?.lagging).toBe(true);\n          // Leading-only budget on the released lease: claimed from the\n          // leading frontier → lagging must be false. `lagging` is\n          // frontier membership, not a function of the stream's watermark.\n          await correlate(fresh);\n          const lead = await fresh.claim(0, 1, `w-${uid()}`, 100_000);\n          expect(lead.find((l) => l.stream === s)?.lagging).toBe(false);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n\n      // ACT-1183: a lease timeout is not a free pass. Every claim()\n      // increments the stream's retry counter and only ack resets it, so\n      // a stream whose workers keep dying marches toward `blockOnError`\n      // exactly like one whose handlers keep throwing — repeated worker\n      // deaths on one stream are poison-adjacent, and quarantining beats\n      // an infinite crash loop. The 0ms lease is the deterministic\n      // stand-in for \"worker died mid-lease\" (no wall-clock race).\n      it(\"counts a timed-out lease reclaimed by another worker against the retry budget; ack resets it\", async () => {\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const s = `lease-timeout-${uid()}`;\n          await fresh.subscribe([{ stream: s }]);\n          const [e1] = await seed_stream(fresh, s, 1);\n          // Worker A claims and \"dies\" — its 0ms lease is already expired.\n          await correlate(fresh);\n          const a = await fresh.claim(1, 0, `wA-${uid()}`, 0);\n          expect(a.find((l) => l.stream === s)?.retry).toBe(0);\n          // Worker B reclaims after the timeout: the budget marches.\n          await correlate(fresh);\n          const b = await fresh.claim(1, 0, `wB-${uid()}`, 30_000);\n          const b_lease = b.find((l) => l.stream === s);\n          expect(b_lease).toBeDefined();\n          expect(b_lease!.retry).toBe(1);\n          // Ack resets the budget: the next claim is a first attempt again.\n          await fresh.ack([{ ...(b_lease as Lease), at: e1.id }]);\n          await seed_stream(fresh, s, 1);\n          await correlate(fresh);\n          const c = await fresh.claim(1, 0, `wC-${uid()}`, 30_000);\n          expect(c.find((l) => l.stream === s)?.retry).toBe(0);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n    });\n\n    // A subscription's `source` is the window its FETCH reads — a literal\n    // stream name matched by equality, or a portable pattern. It is no\n    // longer anything to `claim`, which since #1488 answers eligibility\n    // from the row's mark alone and never reads the event log.\n    //\n    // The matching itself did not disappear, it moved up a layer: correlate\n    // applies it when deciding which events may raise a target's mark\n    // (`_in_fetch_window`, #1487), and the cases that used to live here —\n    // exact names never overmatching a sibling prefix (ACT-1182), pattern\n    // sources claiming only on a real match (ACT-1220) — are now in\n    // `libs/act/test/correlate-work-mark.spec.ts`. What remains here is\n    // what the store still owns: the fetch window, source portability, and\n    // lease exclusivity.\n    describe(\"source windows and lease exclusivity\", () => {\n      it(\"receives exactly its source stream's events\", async () => {\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const base = `src-${uid()}`;\n          const target = `agg-${uid()}`;\n          await fresh.subscribe([{ stream: target, source: base }]);\n          const [e1] = await seed_stream(fresh, base, 1);\n          await correlate(fresh);\n          const first = await fresh.claim(100, 0, `w-${uid()}`, 30_000);\n          const f = first.find((l) => l.stream === target);\n          expect(f).toBeDefined();\n          expect(f!.source).toBe(base);\n          await fresh.ack([{ ...(f as Lease), at: e1.id }]);\n          // A fresh commit on the exact source makes the stream claimable\n          // again, and the fetch window (source + after watermark) yields\n          // exactly the new event.\n          const [e2] = await seed_stream(fresh, base, 1);\n          await correlate(fresh);\n          const second = await fresh.claim(100, 0, `w-${uid()}`, 30_000);\n          const sec = second.find((l) => l.stream === target);\n          expect(sec).toBeDefined();\n          expect(sec!.at).toBe(e1.id);\n          const events = await collect(fresh, {\n            stream: sec!.source,\n            after: sec!.at,\n          });\n          expect(events.map((e) => e.id)).toEqual([e2.id]);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n\n      // ACT-1220: an exact (literal) source must never fetch events from a\n      // sibling stream sharing its prefix. Guards the drain fetch path: an\n      // exact source `s1` claimed as work must, when queried, receive only\n      // `s1`'s events — not `s12`'s. Pre-#1215 fetch treated `source` as an\n      // unanchored regex, so `s1` would have pulled `s12`'s events into the\n      // handler.\n      it(\"fetches only the exact source stream's events, never a sibling prefix\", async () => {\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const base = `fx-${uid()}`;\n          const sibling = `${base}2`;\n          const target = `agg-${uid()}`;\n          await fresh.subscribe([{ stream: target, source: base }]);\n          const [b1] = await seed_stream(fresh, base, 1);\n          await seed_stream(fresh, sibling, 1);\n          await correlate(fresh);\n          const claimed = await fresh.claim(100, 0, `w-${uid()}`, 30_000);\n          const lease = claimed.find((l) => l.stream === target);\n          expect(lease).toBeDefined();\n          const events = await collect(fresh, {\n            stream: lease!.source,\n            stream_exact: true,\n            after: -1,\n          });\n          expect(events.map((e) => e.stream)).toEqual([base]);\n          expect(events.map((e) => e.id)).toEqual([b1.id]);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n    });\n\n    // ACT-1220's pattern-source claim cases are gone with the probe (#1488).\n    // A pattern source (one carrying regex metacharacters, like the\n    // calculator's `^(A|B)$`) is still matched as a full RegExp — but by\n    // correlate, when it decides which events may raise a target's mark,\n    // not by `claim`, which no longer reads the event log. The cases now\n    // live in `libs/act/test/correlate-work-mark.spec.ts`.\n\n    // ACT-1220: adapters that cannot faithfully run an arbitrary regex in\n    // claim reject a non-portable claim source loudly at subscribe() —\n    // failing at registration, not silently never claiming the stream.\n    describe.skipIf(!caps.rejects_nonportable_claim_source)(\n      \"claim source registration (capability)\",\n      () => {\n        it(\"throws at subscribe for a non-portable (alternation) claim source\", async () => {\n          const fresh = await options.factory();\n          try {\n            await fresh.drop();\n            await fresh.seed();\n            await expect(\n              fresh.subscribe([\n                { stream: `board-${uid()}`, source: `^(${uid()}|${uid()})$` },\n              ])\n            ).rejects.toThrow(ValidationError);\n          } finally {\n            await fresh.dispose();\n          }\n        });\n      }\n    );\n\n    // ACT-982: competing-consumer correctness was previously proven only by\n    // the PG-specific multi-process stress harness. This makes it a portable\n    // contract for adapters that support concurrent claimers (gated by\n    // `concurrent_claim`): two distinct workers claiming the same candidate\n    // set concurrently must never both lease the same stream within the\n    // lease window. Single-writer stores (SQLite) opt out — see the\n    // capability docs.\n    describe.skipIf(!caps.concurrent_claim)(\"concurrency (capability)\", () => {\n      it(\"never double-leases a stream across concurrent claimers\", async () => {\n        // Fresh isolated instance: the two workers below claim with large\n        // budgets across every claimable stream, so a shared store would\n        // both perturb this test and leave 60s leases that pollute later\n        // suites. Mirrors the lease-semantics cases.\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const streams = Array.from(\n            { length: 8 },\n            () => `concurrent-${uid()}`\n          );\n          await fresh.subscribe(streams.map((stream) => ({ stream })));\n          for (const stream of streams) {\n            await fresh.commit<CounterEvents>(\n              stream,\n              [inc(1)],\n              make_meta({ stream })\n            );\n          }\n          const owned = new Set(streams);\n          // Overlapping budgets so both workers target the same set;\n          // SKIP LOCKED (pg) / atomic lease (in-memory) must hand each\n          // stream to at most one worker.\n          await correlate(fresh);\n          const [a, b] = await Promise.all([\n            fresh.claim(100, 100, `wA-${uid()}`, 60_000),\n            fresh.claim(100, 100, `wB-${uid()}`, 60_000),\n          ]);\n          // Combine both workers' leases. Operating on the union (rather\n          // than per-worker sets) keeps the callbacks covered even when one\n          // worker wins every stream and the other comes back empty.\n          const claimed = [...a, ...b]\n            .map((l) => l.stream)\n            .filter((stream) => owned.has(stream));\n          // No stream leased twice (no double-lease across workers)...\n          expect(new Set(claimed).size).toBe(claimed.length);\n          // ...and every stream leased exactly once (none lost).\n          expect(claimed.length).toBe(owned.size);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n\n      // ACT-1184: lease expiry under competing claimers. An unexpired\n      // lease is invisible to every other worker; an expired one is\n      // handed to exactly one of them.\n      it(\"does not hand an unexpired lease to a competing claimer\", async () => {\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const s = `unexpired-${uid()}`;\n          const other = `unexpired-other-${uid()}`;\n          await fresh.subscribe([{ stream: s }]);\n          await seed_stream(fresh, s, 1);\n          await correlate(fresh);\n          const a = await fresh.claim(100, 100, `wA-${uid()}`, 60_000);\n          expect(a.find((l) => l.stream === s)).toBeDefined();\n          // Subscribe `other` only AFTER A's claim so B's claim comes back\n          // populated and the negative assertion runs through a non-empty\n          // array (mirrors \"does not double-claim a held lease\").\n          await fresh.subscribe([{ stream: other }]);\n          await seed_stream(fresh, other, 1);\n          await correlate(fresh);\n          const b = await fresh.claim(100, 100, `wB-${uid()}`, 60_000);\n          expect(b.find((l) => l.stream === other)).toBeDefined();\n          expect(b.find((l) => l.stream === s)).toBeUndefined();\n        } finally {\n          await fresh.dispose();\n        }\n      });\n\n      it(\"hands an expired lease to exactly one competing claimer, with retry accounting shared across workers\", async () => {\n        const fresh = await options.factory();\n        try {\n          await fresh.drop();\n          await fresh.seed();\n          const s = `expired-${uid()}`;\n          await fresh.subscribe([{ stream: s }]);\n          const [e1] = await seed_stream(fresh, s, 1);\n          // The original holder \"dies\": a 0ms lease is expired on arrival.\n          await correlate(fresh);\n          const dead = await fresh.claim(100, 0, `wDead-${uid()}`, 0);\n          expect(dead.find((l) => l.stream === s)?.retry).toBe(0);\n          // Two workers race for the expired lease — exactly one wins,\n          // and the shared retry counter (ACT-1183) reflects the reclaim\n          // regardless of which worker performs it.\n          const [b, c] = await Promise.all([\n            fresh.claim(100, 100, `wB-${uid()}`, 60_000),\n            fresh.claim(100, 100, `wC-${uid()}`, 60_000),\n          ]);\n          const winners = [...b, ...c].filter((l) => l.stream === s);\n          expect(winners).toHaveLength(1);\n          expect(winners[0].retry).toBe(1);\n          // Ack by the winning worker resets the shared budget.\n          await fresh.ack([{ ...winners[0], at: e1.id }]);\n          await seed_stream(fresh, s, 1);\n          await correlate(fresh);\n          const again = await fresh.claim(100, 0, `wNext-${uid()}`, 60_000);\n          expect(again.find((l) => l.stream === s)?.retry).toBe(0);\n        } finally {\n          await fresh.dispose();\n        }\n      });\n    });\n\n    describe(\"block\", () => {\n      it(\"hides blocked streams from claim\", async () => {\n        const s = `block-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        const others = leased.filter((l) => l.stream !== s);\n        await store.ack(others);\n        const blocked = await store.block([\n          { ...(mine as Lease), error: \"boom\" },\n        ]);\n        expect(blocked).toHaveLength(1);\n        expect(blocked[0].error).toBe(\"boom\");\n        await correlate();\n        const again = await store.claim(100, 100, `w2-${uid()}`, 100_000);\n        expect(again.find((l) => l.stream === s)).toBeUndefined();\n      });\n\n      it(\"returns the post-block row, not the caller's lease (#1382)\", async () => {\n        // `run_drain_cycle` hands `block()` a lease whose `at` has been\n        // fast-forwarded to the fetch ceiling, but a block deliberately\n        // leaves the watermark alone — the failing event must be retried,\n        // not skipped. So the returned lease must carry the DURABLE `at`.\n        // Re-reading via query_streams isn't enough: it reflects the\n        // correct durable value either way, which is how #1347 and #1382\n        // both slipped past this suite.\n        const s = `block-returns-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        await store.ack(leased.filter((l) => l.stream !== s));\n\n        // Block with an `at` the row does NOT hold.\n        const blocked = await store.block([\n          { ...(mine as Lease), at: 999_999, error: \"boom\" },\n        ]);\n        expect(blocked).toHaveLength(1);\n\n        let durable_at: number | undefined;\n        await store.query_streams(\n          (p) => {\n            durable_at = p.at;\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(blocked[0].at).toBe(durable_at);\n      });\n\n      it(\"rejects block calls from a different holder\", async () => {\n        const s = `block-wrong-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `right-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        const others = leased.filter((l) => l.stream !== s);\n        await store.ack(others);\n        const blocked = await store.block([\n          { ...(mine as Lease), by: \"imposter\", error: \"no\" },\n        ]);\n        expect(blocked).toHaveLength(0);\n      });\n\n      it(\"re-blocking an already-blocked stream is a no-op (#1263)\", async () => {\n        const s = `block-twice-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        await store.ack(leased.filter((l) => l.stream !== s));\n        const first = await store.block([\n          { ...(mine as Lease), error: \"boom\" },\n        ]);\n        expect(first).toHaveLength(1);\n        // Second block of the same already-blocked lease affects nothing —\n        // no spurious duplicate `blocked` event.\n        const second = await store.block([\n          { ...(mine as Lease), error: \"boom\" },\n        ]);\n        expect(second).toHaveLength(0);\n      });\n    });\n\n    describe(\"defer\", () => {\n      it(\"hides a stream from claim until its deferred_at passes\", async () => {\n        const s = `defer-${uid()}`;\n        // A claimable control stream guarantees the claim result is non-empty,\n        // so the membership checks below actually run (and prove `s` is the one\n        // being skipped, not that nothing was claimable).\n        const ctl = `defer-ctl-${uid()}`;\n        await store.subscribe([{ stream: s }, { stream: ctl }]);\n        for (const st of [s, ctl])\n          await store.commit<CounterEvents>(\n            st,\n            [inc(1)],\n            make_meta({ stream: st })\n          );\n        // Defer far into the future — claim must skip it.\n        expect(await store.defer([s], Date.now() + 3_600_000)).toBe(1);\n        await correlate();\n        const leased = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        expect(leased.find((l) => l.stream === ctl)).toBeDefined();\n        expect(leased.find((l) => l.stream === s)).toBeUndefined();\n      });\n\n      it(\"makes a stream claimable once the deferred_at is in the past\", async () => {\n        const s = `defer-past-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        // A due-time already in the past is not a constraint.\n        expect(await store.defer([s], Date.now() - 1_000)).toBe(1);\n        await correlate();\n        const leased = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        // ack clears the schedule and does not bump retry past the claim.\n        await store.ack(\n          leased.filter((l) => l.stream !== s).concat(mine as Lease)\n        );\n      });\n\n      it(\"does not bump retry while a stream is deferred\", async () => {\n        const s = `defer-retry-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await store.defer([s], Date.now() + 3_600_000);\n        // Several claim attempts while deferred — none should touch the row.\n        await correlate();\n        await store.claim(100, 100, `w1-${uid()}`, 100_000);\n        await correlate();\n        await store.claim(100, 100, `w2-${uid()}`, 100_000);\n        // Re-defer into the past so it becomes claimable, then observe retry.\n        await store.defer([s], Date.now() - 1_000);\n        await correlate();\n        const leased = await store.claim(100, 100, `w3-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        // First real claim → retry 0, proving the deferred claims didn't bump it.\n        expect(mine!.retry).toBe(0);\n        await store.ack(\n          leased.filter((l) => l.stream !== s).concat(mine as Lease)\n        );\n      });\n\n      it(\"reset clears a pending defer\", async () => {\n        const s = `defer-reset-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await store.defer([s], Date.now() + 3_600_000);\n        expect(await store.reset([s])).toBe(1);\n        await correlate();\n        const leased = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        expect(leased.find((l) => l.stream === s)).toBeDefined();\n      });\n\n      it(\"exposes a future deferred_at via query_streams (#1221)\", async () => {\n        // The cold-start defer re-seed reads the persisted schedule back\n        // through query_streams: a stream with a future deferred_at must\n        // surface the ms-since-epoch value so the orchestrator can re-arm\n        // the drain at the due-time. A stream with no active defer omits it.\n        const deferred = `defer-qs-${uid()}`;\n        const plain = `defer-qs-plain-${uid()}`;\n        await store.subscribe([{ stream: deferred }, { stream: plain }]);\n        for (const s of [deferred, plain])\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n        const due = Date.now() + 3_600_000;\n        await store.defer([deferred], due);\n\n        const seen = new Map<string, number | undefined>();\n        await store.query_streams((p) => {\n          if (p.stream === deferred || p.stream === plain)\n            seen.set(p.stream, p.deferred_at);\n        });\n        // The deferred stream reports its schedule; adapters persist at\n        // second/ms precision, so allow a small rounding tolerance.\n        const got = seen.get(deferred);\n        expect(got).toBeDefined();\n        expect(Math.abs((got as number) - due)).toBeLessThan(2_000);\n        // The undeferred stream omits the field.\n        expect(seen.get(plain)).toBeUndefined();\n      });\n\n      it(\"defers streams matching a filter and counts matches\", async () => {\n        const tag = uid();\n        const a = `deferfilter-${tag}-a`;\n        const b = `deferfilter-${tag}-b`;\n        await store.subscribe([{ stream: a }, { stream: b }]);\n        for (const s of [a, b])\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n        // A claimable control stream outside the filter keeps the claim result\n        // non-empty, so the membership checks below run against real rows.\n        const ctl = `defer-filterctl-${tag}`;\n        await store.subscribe([{ stream: ctl }]);\n        await store.commit<CounterEvents>(\n          ctl,\n          [inc(1)],\n          make_meta({ stream: ctl })\n        );\n        const n = await store.defer(\n          { stream: `^deferfilter-${tag}-`, stream_exact: false },\n          Date.now() + 3_600_000\n        );\n        expect(n).toBe(2);\n        await correlate();\n        const leased = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        expect(leased.find((l) => l.stream === ctl)).toBeDefined();\n        expect(leased.find((l) => l.stream === a)).toBeUndefined();\n        expect(leased.find((l) => l.stream === b)).toBeUndefined();\n      });\n\n      it(\"returns 0 for unknown streams and empty input\", async () => {\n        expect(await store.defer([`missing-${uid()}`], Date.now())).toBe(0);\n        expect(await store.defer([], Date.now())).toBe(0);\n      });\n\n      it(\"counts a duplicated stream name once (#1360)\", async () => {\n        const s = `defer-dup-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        // A repeated name matches one stream — the count is distinct streams,\n        // matching PG's set-based `WHERE stream = ANY(...)`.\n        expect(await store.defer([s, s], Date.now() + 3_600_000)).toBe(1);\n      });\n    });\n\n    describe(\"ack finalize (due-marked leases)\", () => {\n      it(\"defers a due-marked lease instead of acking it\", async () => {\n        // One finalize call carries both outcomes: the control stream acks\n        // (watermark advances), the due-marked stream defers (schedule set,\n        // watermark held). Deferred entries are not part of the return value.\n        const s = `ackdefer-${uid()}`;\n        const ctl = `ackdefer-ctl-${uid()}`;\n        await store.subscribe([{ stream: s }, { stream: ctl }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        const [ctl_head] = await store.commit<CounterEvents>(\n          ctl,\n          [inc(1)],\n          make_meta({ stream: ctl })\n        );\n        await correlate();\n        const leased = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const s_lease = leased.find((l) => l.stream === s)!;\n        const ctl_lease = leased.find((l) => l.stream === ctl)!;\n        const acked = await store.ack([\n          { ...ctl_lease, at: ctl_head.id },\n          { ...s_lease, due: Date.now() + 3_600_000 },\n        ]);\n        expect(acked.find((l) => l.stream === ctl)).toBeDefined();\n        expect(acked.find((l) => l.stream === s)).toBeUndefined();\n        // The schedule holds: claim skips the deferred stream. A fresh\n        // commit on the control keeps the claim result non-empty, so the\n        // membership check proves the deferred stream is the one skipped.\n        await store.commit<CounterEvents>(\n          ctl,\n          [inc(2)],\n          make_meta({ stream: ctl })\n        );\n        await correlate();\n        const again = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        expect(again.find((l) => l.stream === ctl)).toBeDefined();\n        expect(again.find((l) => l.stream === s)).toBeUndefined();\n      });\n\n      it(\"holds the watermark and resets retry on an explicit-defer due lease (retry: -1)\", async () => {\n        // A due-time already in the past makes the stream immediately\n        // re-claimable — proving the finalize released the lease. The lease\n        // carries `at` = the claim watermark (no events handled), so the\n        // advance is a no-op and the watermark holds. An explicit defer passes\n        // `retry: -1` (a defer is not a failure), so the persisted retry resets\n        // and the next claim bumps it to 0.\n        const s = `ackdefer-past-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s)!;\n        await store.ack([{ ...mine, due: Date.now() - 1_000, retry: -1 }]);\n        await correlate();\n        const again = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const re = again.find((l) => l.stream === s);\n        expect(re).toBeDefined();\n        expect(re!.at).toBe(mine.at); // watermark held — events still pending\n        expect(re!.retry).toBe(0); // reset by the defer, bumped by claim\n        await store.ack([{ ...re!, at: 1_000_000 }]);\n      });\n\n      it(\"persists the lease's retry on a backoff-style due lease (#1262)\", async () => {\n        // A retry-with-backoff passes the climbing counter (not -1) on the\n        // due-marked lease, so the retry budget survives the defer window —\n        // the persisted value plus the next claim's bump keep it accruing\n        // toward the block threshold across windows.\n        const s = `ackdefer-retry-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s)!;\n        // Persist retry 3 with a past due-time so it's immediately re-claimable.\n        // `at` = the claim watermark (no progress), so the advance is a no-op.\n        await store.ack([{ ...mine, due: Date.now() - 1_000, retry: 3 }]);\n        await correlate();\n        const again = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const re = again.find((l) => l.stream === s);\n        expect(re).toBeDefined();\n        expect(re!.at).toBe(mine.at); // watermark unchanged — no-op advance\n        expect(re!.retry).toBe(4); // persisted 3, bumped to 4 by claim\n        await store.ack([{ ...re!, at: 1_000_000 }]);\n      });\n\n      it(\"advances the watermark to `at` while persisting the schedule on a partial-progress due lease (#1278)\", async () => {\n        // Advance and defer are independent ack legs: a partial-progress\n        // backoff/defer moves the watermark past the events handled this cycle\n        // (`at`) AND persists the window in one call, so the handled prefix\n        // never re-runs. Distinct from the hold cases above, which pass\n        // `at` = the claim watermark (a no-op advance).\n        const s = `ackadvance-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        // e1 is the \"handled prefix\"; a second event keeps the stream pending.\n        const [e1] = await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s)!;\n        expect(mine.at).toBeLessThan(e1.id); // fresh stream — floor below e1\n        // Advance to e1 (last succeeded) AND defer with a past due-time (so it's\n        // immediately re-claimable) carrying the climbing retry.\n        await store.ack([\n          { ...mine, at: e1.id, due: Date.now() - 1_000, retry: 2 },\n        ]);\n        await correlate();\n        const again = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const re = again.find((l) => l.stream === s);\n        expect(re).toBeDefined();\n        expect(re!.at).toBe(e1.id); // advanced past the succeeded event, NOT held\n        expect(re!.retry).toBe(3); // persisted 2, bumped by claim\n        await store.ack([{ ...re!, at: 1_000_000 }]);\n      });\n\n      it(\"ignores due-marked entries from a non-holder\", async () => {\n        // Same ownership rule as plain acks: only the lease holder can\n        // finalize, so a stale worker cannot overwrite a live schedule.\n        const s = `ackdefer-owner-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 100, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s)!;\n        await store.ack([\n          { ...mine, by: `stale-${uid()}`, due: Date.now() + 3_600_000 },\n        ]);\n        // No schedule was written: the holder can still finalize normally.\n        const acked = await store.ack([{ ...mine, at: 1_000_000 }]);\n        expect(acked.find((l) => l.stream === s)).toBeDefined();\n      });\n    });\n\n    describe(\"reset\", () => {\n      it(\"rewinds a stream watermark to -1\", async () => {\n        const s = `reset-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        expect(mine).toBeDefined();\n        await store.ack([{ ...(mine as Lease), at: 99 }]);\n        expect(await store.reset([s])).toBe(1);\n        await correlate();\n        const after = await store.claim(100, 0, `w2-${uid()}`, 100_000);\n        const back = after.find((l) => l.stream === s);\n        expect(back).toBeDefined();\n        expect(back!.at).toBe(-1);\n      });\n\n      it(\"clears blocked status when resetting\", async () => {\n        const s = `reset-blk-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        const others = leased.filter((l) => l.stream !== s);\n        await store.ack(others);\n        await store.block([{ ...(mine as Lease), error: \"boom\" }]);\n        expect(await store.reset([s])).toBe(1);\n        await correlate();\n        const after = await store.claim(100, 0, `w2-${uid()}`, 100_000);\n        expect(after.find((l) => l.stream === s)).toBeDefined();\n      });\n\n      it(\"returns 0 for unknown streams and empty input\", async () => {\n        expect(await store.reset([`missing-${uid()}`])).toBe(0);\n        expect(await store.reset([])).toBe(0);\n      });\n\n      it(\"counts a duplicated stream name once (#1360)\", async () => {\n        const s = `reset-dup-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        // A repeated name matches one stream — the count is distinct streams,\n        // matching PG's set-based `WHERE stream = ANY(...)`.\n        expect(await store.reset([s, s])).toBe(1);\n      });\n    });\n\n    describe(\"unblock\", () => {\n      it(\"clears blocked flag and preserves the watermark\", async () => {\n        const s = `unblock-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        // Two events so the watermark advances past 0 before block.\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await store.commit<CounterEvents>(\n          s,\n          [inc(2)],\n          make_meta({ stream: s })\n        );\n\n        // First lease + ack first event → watermark advances.\n        await correlate();\n        const first = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const m1 = first.find((l) => l.stream === s);\n        await store.ack([{ ...(m1 as Lease), at: m1!.at }]);\n\n        // Capture watermark before block.\n        await correlate();\n        const before_block = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const m2 = before_block.find((l) => l.stream === s);\n        expect(m2).toBeDefined();\n        const watermark_before = m2!.at;\n        await store.block([{ ...(m2 as Lease), error: \"permanent\" }]);\n\n        // Stream is now blocked — query_streams must report it as such.\n        // (Asserting on `claim()` would be flaky: an empty result is the\n        // same as \"s not in the result,\" which short-circuits a find()\n        // callback and leaves it uncovered when no other streams happen\n        // to be claimable in the fixture.)\n        let blocked_flag: boolean | undefined;\n        await store.query_streams(\n          (p) => {\n            blocked_flag = p.blocked;\n          },\n          { stream: s, stream_exact: true, limit: 1 }\n        );\n        expect(blocked_flag).toBe(true);\n\n        // Unblock — claim picks it back up at the same watermark.\n        expect(await store.unblock([s])).toBe(1);\n        await correlate();\n        const after = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const back = after.find((l) => l.stream === s);\n        expect(back).toBeDefined();\n        expect(back!.at).toBe(watermark_before);\n        expect(back!.retry).toBe(0);\n      });\n\n      it(\"returns 0 when the stream is not blocked\", async () => {\n        const s = `unblock-noop-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        // Stream exists but isn't blocked.\n        expect(await store.unblock([s])).toBe(0);\n      });\n\n      it(\"returns 0 for unknown streams and empty input\", async () => {\n        expect(await store.unblock([`missing-${uid()}`])).toBe(0);\n        expect(await store.unblock([])).toBe(0);\n      });\n\n      it(\"only counts streams that were actually blocked\", async () => {\n        const s1 = `unblock-mix-a-${uid()}`;\n        const s2 = `unblock-mix-b-${uid()}`;\n        await store.subscribe([{ stream: s1 }, { stream: s2 }]);\n        await store.commit<CounterEvents>(\n          s1,\n          [inc(1)],\n          make_meta({ stream: s1 })\n        );\n        await store.commit<CounterEvents>(\n          s2,\n          [inc(1)],\n          make_meta({ stream: s2 })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const m1 = leased.find((l) => l.stream === s1);\n        const others = leased.filter((l) => l.stream !== s1);\n        await store.ack(others);\n        // Block only s1.\n        await store.block([{ ...(m1 as Lease), error: \"boom\" }]);\n        expect(await store.unblock([s1, s2])).toBe(1);\n      });\n\n      it(\"filter form: unblocks by stream pattern\", async () => {\n        const tag = uid();\n        const s1 = `unblock-filter-${tag}-a`;\n        const s2 = `unblock-filter-${tag}-b`;\n        const s3 = `other-${tag}`;\n        await store.subscribe([{ stream: s1 }, { stream: s2 }, { stream: s3 }]);\n        await store.commit<CounterEvents>(\n          s1,\n          [inc(1)],\n          make_meta({ stream: s1 })\n        );\n        await store.commit<CounterEvents>(\n          s2,\n          [inc(1)],\n          make_meta({ stream: s2 })\n        );\n        await store.commit<CounterEvents>(\n          s3,\n          [inc(1)],\n          make_meta({ stream: s3 })\n        );\n        // Block all three.\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const blockable: BlockedLease[] = leased\n          .filter((l) => l.stream === s1 || l.stream === s2 || l.stream === s3)\n          .map((l) => ({ ...(l as Lease), error: \"boom\" }));\n        // Ack any other leases the test fixture's shared store left\n        // outstanding so they don't pollute counts below.\n        await store.ack(\n          leased.filter(\n            (l) => !(l.stream === s1 || l.stream === s2 || l.stream === s3)\n          )\n        );\n        await store.block(blockable);\n\n        // Filter targets only `unblock-filter-${tag}-` prefix → 2 of 3.\n        const count = await store.unblock({\n          stream: `^unblock-filter-${tag}-`,\n        });\n        expect(count).toBe(2);\n\n        // s3 is still blocked.\n        await correlate();\n        const after = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        expect(after.find((l) => l.stream === s3)).toBeUndefined();\n        // s1 and s2 are unblocked and claimable.\n        expect(after.find((l) => l.stream === s1)).toBeDefined();\n        expect(after.find((l) => l.stream === s2)).toBeDefined();\n      });\n\n      it(\"filter form: empty filter unblocks every blocked stream\", async () => {\n        // Set up an isolated set of blocked streams using a unique tag,\n        // then assert the filter unblocks every one. We can't use the\n        // truly empty filter `{}` across the shared TCK fixture because\n        // other tests may leave blocked rows behind; use the tag as a\n        // narrow proxy for \"everything in my scope.\"\n        const tag = uid();\n        const s1 = `unblock-empty-${tag}-a`;\n        const s2 = `unblock-empty-${tag}-b`;\n        await store.subscribe([{ stream: s1 }, { stream: s2 }]);\n        await store.commit<CounterEvents>(\n          s1,\n          [inc(1)],\n          make_meta({ stream: s1 })\n        );\n        await store.commit<CounterEvents>(\n          s2,\n          [inc(1)],\n          make_meta({ stream: s2 })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const mine = leased.filter((l) => l.stream === s1 || l.stream === s2);\n        await store.ack(leased.filter((l) => !mine.includes(l)));\n        await store.block(\n          mine.map((l) => ({ ...(l as Lease), error: \"boom\" }))\n        );\n        const count = await store.unblock({\n          stream: `^unblock-empty-${tag}-`,\n        });\n        expect(count).toBe(2);\n      });\n\n      it(\"filter form: explicit blocked:false matches nothing\", async () => {\n        // The implementation forces `blocked = true` regardless of what\n        // the caller passed — operators can't accidentally \"unblock\"\n        // already-unblocked streams.\n        const tag = uid();\n        const s = `unblock-blocked-false-${tag}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        // Stream is registered but not blocked.\n        expect(\n          await store.unblock({\n            stream: `^unblock-blocked-false-${tag}`,\n            blocked: false,\n          })\n        ).toBe(0);\n      });\n    });\n\n    describe(\"reset filter form\", () => {\n      it(\"resets streams matching a stream pattern\", async () => {\n        const tag = uid();\n        const s1 = `reset-filter-${tag}-a`;\n        const s2 = `reset-filter-${tag}-b`;\n        const other = `other-reset-${tag}`;\n        await store.subscribe([\n          { stream: s1 },\n          { stream: s2 },\n          { stream: other },\n        ]);\n        await store.commit<CounterEvents>(\n          s1,\n          [inc(1)],\n          make_meta({ stream: s1 })\n        );\n        await store.commit<CounterEvents>(\n          s2,\n          [inc(1)],\n          make_meta({ stream: s2 })\n        );\n        await store.commit<CounterEvents>(\n          other,\n          [inc(1)],\n          make_meta({ stream: other })\n        );\n        // Advance watermarks for all three so the reset is observable.\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const mine = leased.filter(\n          (l) => l.stream === s1 || l.stream === s2 || l.stream === other\n        );\n        await store.ack(mine.map((l) => ({ ...(l as Lease), at: l.at + 100 })));\n\n        // Filter targets only `reset-filter-${tag}-` prefix → 2 of 3.\n        const count = await store.reset({ stream: `^reset-filter-${tag}-` });\n        expect(count).toBe(2);\n\n        // Inspect via query_streams (doesn't lease, no regex alternation\n        // assumptions on SQLite's LIKE-pattern path) — fetch each name\n        // by exact match and check the watermark independently.\n        const position_for = async (name: string): Promise<number | null> => {\n          let at: number | null = null;\n          await store.query_streams(\n            (p) => {\n              at = p.at;\n            },\n            { stream: name, stream_exact: true, limit: 1 }\n          );\n          return at;\n        };\n        expect(await position_for(s1)).toBe(-1);\n        expect(await position_for(s2)).toBe(-1);\n        expect(await position_for(other)).toBeGreaterThan(-1);\n      });\n\n      it(\"filter form: resets only blocked streams when blocked:true\", async () => {\n        const tag = uid();\n        const s1 = `reset-blocked-${tag}-blocked`;\n        const s2 = `reset-blocked-${tag}-fine`;\n        await store.subscribe([{ stream: s1 }, { stream: s2 }]);\n        await store.commit<CounterEvents>(\n          s1,\n          [inc(1)],\n          make_meta({ stream: s1 })\n        );\n        await store.commit<CounterEvents>(\n          s2,\n          [inc(1)],\n          make_meta({ stream: s2 })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const m1 = leased.find((l) => l.stream === s1);\n        await store.ack(leased.filter((l) => l.stream !== s1));\n        await store.block([{ ...(m1 as Lease), error: \"boom\" }]);\n\n        const count = await store.reset({\n          stream: `^reset-blocked-${tag}-`,\n          blocked: true,\n        });\n        expect(count).toBe(1);\n      });\n    });\n\n    describe(\"prioritize\", () => {\n      it(\"sets priority directly, overriding subscribe's max() rule\", async () => {\n        const tag = uid();\n        const s1 = `pri-${tag}-a`;\n        const s2 = `pri-${tag}-b`;\n        await store.subscribe([\n          { stream: s1, priority: 5 },\n          { stream: s2, priority: 5 },\n        ]);\n        const updated = await store.prioritize(\n          { stream: s1, stream_exact: true },\n          3\n        );\n        expect(updated).toBe(1);\n        const got1: { priority?: number } = {};\n        const got2: { priority?: number } = {};\n        await store.query_streams(\n          (p) => {\n            if (p.stream === s1) got1.priority = p.priority;\n            if (p.stream === s2) got2.priority = p.priority;\n          },\n          { stream: `pri-${tag}-.*`, limit: 100 }\n        );\n        expect(got1.priority).toBe(3);\n        expect(got2.priority).toBe(5);\n      });\n    });\n\n    // ACT-1103: drain lanes. The Store contract now carries lane on\n    // every persisted-and-returned stream surface. Adapters that\n    // haven't migrated will fail these cases — the signal is\n    // intentional (\"the contract changed, your adapter needs to\n    // surface lane\"). Lane mutability across subscribe calls is the\n    // load-bearing case: the builder config wins on every restart, so\n    // operators can move a stream by editing config and restarting\n    // without a manual data migration.\n    describe(\"lanes\", () => {\n      it(\"subscribe defaults lane to 'default' when omitted\", async () => {\n        const s = `lane-default-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        const seen: string[] = [];\n        await store.query_streams((p) => seen.push(p.lane as string), {\n          stream: s,\n          stream_exact: true,\n        });\n        expect(seen).toEqual([\"default\"]);\n      });\n\n      it(\"subscribe records the lane passed in\", async () => {\n        const s = `lane-set-${uid()}`;\n        await store.subscribe([{ stream: s, lane: \"slow\" }]);\n        const seen: string[] = [];\n        await store.query_streams((p) => seen.push(p.lane as string), {\n          stream: s,\n          stream_exact: true,\n        });\n        expect(seen).toEqual([\"slow\"]);\n      });\n\n      it(\"subscribe re-lanes existing streams on subsequent calls\", async () => {\n        const s = `lane-upsert-${uid()}`;\n        await store.subscribe([{ stream: s, lane: \"slow\" }]);\n        await store.subscribe([{ stream: s, lane: \"fast\" }]);\n        const seen: string[] = [];\n        await store.query_streams((p) => seen.push(p.lane as string), {\n          stream: s,\n          stream_exact: true,\n        });\n        expect(seen).toEqual([\"fast\"]);\n      });\n\n      it(\"keeps the lane when a lower-priority subscribe re-registers\", async () => {\n        // The lane rides the priority max (#1599). Without this, a caller\n        // that has forgotten what a stream carries — an evicted LRU\n        // record, a fresh process — re-lanes it by resolving to it at a\n        // lower priority, and a worker sharded on the declared lane never\n        // drains it again.\n        const s = `lane-rank-${uid()}`;\n        await store.subscribe([{ stream: s, lane: \"fast\", priority: 10 }]);\n        await store.subscribe([{ stream: s, lane: \"slow\", priority: 0 }]);\n        const seen: { lane?: string; priority: number }[] = [];\n        await store.query_streams(\n          (p) => seen.push({ lane: p.lane, priority: p.priority }),\n          { stream: s, stream_exact: true }\n        );\n        expect(seen).toEqual([{ lane: \"fast\", priority: 10 }]);\n      });\n\n      it(\"keeps the lane when a mark-only subscribe re-registers\", async () => {\n        // An omitted lane is the default lane, and an omitted priority is\n        // 0 — so a bare mark carries a losing lane by construction. It\n        // must leave the stored lane alone rather than pulling the stream\n        // back to \"default\".\n        const s = `lane-mark-${uid()}`;\n        await store.subscribe([{ stream: s, lane: \"fast\", priority: 10 }]);\n        await store.subscribe([{ stream: s, correlated_at: 7 }]);\n        const seen: { lane?: string; correlated_at?: number }[] = [];\n        await store.query_streams(\n          (p) => seen.push({ lane: p.lane, correlated_at: p.correlated_at }),\n          { stream: s, stream_exact: true }\n        );\n        expect(seen).toEqual([{ lane: \"fast\", correlated_at: 7 }]);\n      });\n\n      it(\"re-lanes when the subscribe outranks the stored priority\", async () => {\n        const s = `lane-outrank-${uid()}`;\n        await store.subscribe([{ stream: s, lane: \"fast\", priority: 0 }]);\n        await store.subscribe([{ stream: s, lane: \"slow\", priority: 5 }]);\n        const seen: { lane?: string; priority: number }[] = [];\n        await store.query_streams(\n          (p) => seen.push({ lane: p.lane, priority: p.priority }),\n          { stream: s, stream_exact: true }\n        );\n        expect(seen).toEqual([{ lane: \"slow\", priority: 5 }]);\n      });\n\n      it(\"re-lanes at equal priority, which is what keeps re-laning restart-driven\", async () => {\n        // A restart re-subscribes every declared target at its declared\n        // priority, so equal priority has to write the lane — otherwise\n        // editing a lane in the builder would need a data migration.\n        const s = `lane-equal-${uid()}`;\n        await store.subscribe([{ stream: s, lane: \"fast\", priority: 7 }]);\n        await store.subscribe([{ stream: s, lane: \"slow\", priority: 7 }]);\n        const seen: string[] = [];\n        await store.query_streams((p) => seen.push(p.lane as string), {\n          stream: s,\n          stream_exact: true,\n        });\n        expect(seen).toEqual([\"slow\"]);\n      });\n\n      it(\"claim() filters by lane when supplied and returns lane on the Lease\", async () => {\n        const tag = uid();\n        const src1 = `lane-claim-src1-${tag}`;\n        const src2 = `lane-claim-src2-${tag}`;\n        const sub_default = `lane-claim-def-${tag}`;\n        const sub_slow = `lane-claim-slow-${tag}`;\n        await store.commit<CounterEvents>(\n          src1,\n          [inc(1)],\n          make_meta({ stream: src1 })\n        );\n        await store.commit<CounterEvents>(\n          src2,\n          [inc(1)],\n          make_meta({ stream: src2 })\n        );\n        await store.subscribe([\n          { stream: sub_default, source: src1 },\n          { stream: sub_slow, source: src2, lane: \"slow\" },\n        ]);\n\n        await correlate();\n        const slow = await store.claim(50, 0, `w-slow-${tag}`, 1_000, \"slow\");\n        const slow_mine = slow.filter(\n          (l) => l.stream === sub_default || l.stream === sub_slow\n        );\n        expect(slow_mine.map((l) => l.stream)).toEqual([sub_slow]);\n        expect(slow_mine[0]?.lane).toBe(\"slow\");\n        await store.ack(slow_mine.map((l) => ({ ...l, at: l.at + 1 })));\n\n        await correlate();\n        const all = await store.claim(50, 0, `w-all-${tag}`, 1_000);\n        const all_mine = all\n          .filter((l) => l.stream === sub_default || l.stream === sub_slow)\n          .map((l) => ({ stream: l.stream, lane: l.lane }));\n        expect(all_mine).toEqual(\n          expect.arrayContaining([\n            { stream: sub_default, lane: \"default\" },\n            { stream: sub_slow, lane: \"slow\" },\n          ])\n        );\n      });\n\n      it(\"query_streams filters by lane\", async () => {\n        const tag = uid();\n        const a = `lane-q-a-${tag}`;\n        const b = `lane-q-b-${tag}`;\n        const c = `lane-q-c-${tag}`;\n        await store.subscribe([\n          { stream: a, lane: \"qslow\" },\n          { stream: b, lane: \"qfast\" },\n          { stream: c, lane: \"qslow\" },\n        ]);\n        const seen: string[] = [];\n        await store.query_streams((p) => seen.push(p.stream), {\n          lane: \"qslow\",\n          stream: `lane-q-.*-${tag}`,\n          limit: 100,\n        });\n        expect(seen.sort()).toEqual([a, c]);\n      });\n\n      it(\"prioritize filters by lane\", async () => {\n        const tag = uid();\n        const a = `lane-pri-a-${tag}`;\n        const b = `lane-pri-b-${tag}`;\n        await store.subscribe([\n          { stream: a, lane: `pslow-${tag}` },\n          { stream: b, lane: `pfast-${tag}` },\n        ]);\n        const updated = await store.prioritize({ lane: `pslow-${tag}` }, 7);\n        expect(updated).toBe(1);\n        const seen = new Map<string, number>();\n        await store.query_streams((p) => seen.set(p.stream, p.priority), {\n          stream: `lane-pri-.*-${tag}`,\n          limit: 100,\n        });\n        expect(seen.get(a)).toBe(7);\n        expect(seen.get(b)).toBe(0);\n      });\n\n      it(\"reset filters by lane\", async () => {\n        const tag = uid();\n        const src = `lane-reset-src-${tag}`;\n        const a = `lane-reset-a-${tag}`;\n        const b = `lane-reset-b-${tag}`;\n        await store.commit<CounterEvents>(\n          src,\n          [inc(1)],\n          make_meta({ stream: src })\n        );\n        await store.subscribe([\n          { stream: a, source: src, lane: `rslow-${tag}` },\n          { stream: b, source: src, lane: `rfast-${tag}` },\n        ]);\n        await correlate();\n        const leases = await store.claim(50, 0, `w-${tag}`, 5_000);\n        const mine = leases.filter((l) => l.stream === a || l.stream === b);\n        await store.ack(mine.map((l) => ({ ...l, at: l.at + 1 })));\n\n        const count = await store.reset({ lane: `rslow-${tag}` });\n        expect(count).toBe(1);\n        // Fetch each stream by exact match — keeps the contract test\n        // adapter-agnostic (PG `~` and SQLite anchor-aware LIKE both\n        // honor `stream_exact: true` identically).\n        const ats = new Map<string, number>();\n        for (const name of [a, b]) {\n          await store.query_streams((p) => ats.set(p.stream, p.at), {\n            stream: name,\n            stream_exact: true,\n          });\n        }\n        expect(ats.get(a)).toBe(-1);\n        expect(ats.get(b)).toBeGreaterThanOrEqual(0);\n      });\n\n      it(\"unblock filters by lane\", async () => {\n        const tag = uid();\n        const src = `lane-ub-src-${tag}`;\n        const a = `lane-ub-a-${tag}`;\n        const b = `lane-ub-b-${tag}`;\n        await store.commit<CounterEvents>(\n          src,\n          [inc(1)],\n          make_meta({ stream: src })\n        );\n        await store.subscribe([\n          { stream: a, source: src, lane: `uslow-${tag}` },\n          { stream: b, source: src, lane: `ufast-${tag}` },\n        ]);\n        await correlate();\n        const leases = await store.claim(50, 0, `w-${tag}`, 5_000);\n        const mine = leases.filter((l) => l.stream === a || l.stream === b);\n        await store.block(mine.map((l) => ({ ...l, error: \"boom\" })));\n\n        const count = await store.unblock({ lane: `uslow-${tag}` });\n        expect(count).toBe(1);\n        const blocked = new Map<string, boolean>();\n        for (const name of [a, b]) {\n          await store.query_streams((p) => blocked.set(p.stream, p.blocked), {\n            stream: name,\n            stream_exact: true,\n          });\n        }\n        expect(blocked.get(a)).toBe(false);\n        expect(blocked.get(b)).toBe(true);\n      });\n    });\n\n    describe(\"long identifiers\", () => {\n      it(\"accepts a stream name well past 100 characters (#1420)\", async () => {\n        // The framework DERIVES identifiers from stream names — `.autocloses`\n        // synthesizes `\"__autoclose__:\" + stream` — so a cap here is not a\n        // user-input limit, it silently breaks framework-generated targets.\n        const tag = uid();\n        const long = `${tag}-${\"x\".repeat(140)}`;\n        await store.commit<CounterEvents>(\n          long,\n          [inc(1)],\n          make_meta({ stream: long })\n        );\n        await store.subscribe([\n          { stream: `__autoclose__:${long}`, source: long },\n        ]);\n\n        const seen: string[] = [];\n        await store.query<CounterEvents>((e) => seen.push(e.stream), {\n          stream: long,\n          stream_exact: true,\n        });\n        expect(seen).toEqual([long]);\n\n        const subs: string[] = [];\n        await store.query_streams((p) => subs.push(p.stream), { limit: 500 });\n        expect(subs).toContain(`__autoclose__:${long}`);\n      });\n    });\n\n    describe(\"truncate\", () => {\n      it(\"leaves subscriptions untouched for restart and retire alike (#1527)\", async () => {\n        // `truncate` is purely event-log work. It used to remove the\n        // subscription row for a retire, and that single step was the only\n        // one spanning both the event log and the subscription table — which\n        // forced a store whose halves live on different systems into a\n        // distributed transaction it could not have.\n        //\n        // Leaving the row costs nothing. A tombstoned stream refuses new\n        // commits, so no scan can raise its work mark and `claim` never\n        // returns it again (pinned by the next case). What the row keeps is\n        // the consumer's final watermark — a record of how far it got, which\n        // outlives the events. Operators reclaim the space on their own\n        // schedule; see the production checklist.\n        const tag = uid();\n        const restarted = `trunc-restart-${tag}`;\n        const retired = `trunc-retire-${tag}`;\n        for (const s of [restarted, retired]) {\n          await store.subscribe([{ stream: s }]);\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n        }\n\n        await store.truncate([\n          {\n            stream: restarted,\n            snapshot: { count: 1 },\n            meta: make_meta({ stream: restarted }),\n          },\n          { stream: retired, meta: make_meta({ stream: retired }) },\n        ]);\n\n        const rows: string[] = [];\n        await store.query_streams((p) => rows.push(p.stream), {\n          stream: `trunc-.*-${tag}`,\n          limit: 100,\n        });\n        expect(rows).toContain(restarted);\n        expect(rows).toContain(retired);\n      });\n\n      it(\"leaves a retired stream's surviving subscription unclaimable (#1527)\", async () => {\n        // The property that makes leaving the row safe, and the reason the\n        // framework can stop removing it. If this ever fails, retired streams\n        // start handing work back to the drain.\n        //\n        // The subscription gets its own lane so both claims below can only\n        // ever return this stream — which lets the assertion be \"nothing came\n        // back\" rather than a search through whatever else the shared store\n        // has pending.\n        const lane = `inert-lane-${uid()}`;\n        const s = `trunc-inert-${uid()}`;\n        const [e] = await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await store.subscribe([{ stream: s, correlated_at: e.id, lane }]);\n\n        // Catch the subscription up, which is the state `close` requires\n        // before it will retire a stream at all — a stream with pending\n        // reactions is skipped, never truncated.\n        const leased = await store.claim(100, 0, `w-${uid()}`, 10_000, lane);\n        expect(leased).toHaveLength(1);\n        await store.ack([{ ...leased[0], at: e.id }]);\n\n        await store.truncate([{ stream: s, meta: make_meta({ stream: s }) }]);\n\n        expect(\n          await store.claim(100, 0, `w-${uid()}`, 10_000, lane)\n        ).toHaveLength(0);\n      });\n\n      it(\"seeds a tombstone when no snapshot is provided\", async () => {\n        const s = `trunc-tomb-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2)],\n          make_meta({ stream: s })\n        );\n        const result = await store.truncate([{ stream: s }]);\n        expect(result.get(s)?.deleted).toBe(2);\n        const remaining: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            remaining.push(e);\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(remaining).toHaveLength(1);\n        expect((remaining[0] as unknown as { name: string }).name).toBe(\n          \"__tombstone__\"\n        );\n      });\n\n      it(\"seeds a snapshot when one is provided\", async () => {\n        const s = `trunc-snap-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        const result = await store.truncate([\n          { stream: s, snapshot: { count: 7 } },\n        ]);\n        expect(result.get(s)?.deleted).toBe(1);\n        const remaining: CommittedCounterEvent[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            remaining.push(e as CommittedCounterEvent);\n          },\n          { stream: s, stream_exact: true, with_snaps: true }\n        );\n        expect(remaining).toHaveLength(1);\n        expect((remaining[0] as unknown as { name: string }).name).toBe(\n          \"__snapshot__\"\n        );\n        expect(remaining[0].data).toEqual({ count: 7 });\n      });\n\n      it(\"returns an empty map for empty input\", async () => {\n        const result = await store.truncate([]);\n        expect(result.size).toBe(0);\n      });\n\n      it(\"returns 0 deleted for streams that don't exist\", async () => {\n        const s = `trunc-missing-${uid()}`;\n        const result = await store.truncate([{ stream: s }]);\n        expect(result.get(s)?.deleted).toBe(0);\n      });\n\n      // Windowed truncation (#1011): a `before` boundary prunes the\n      // prefix below the closest safe `__snapshot__` — a pure prefix\n      // delete behind a real snapshot; no seed, no tombstone.\n      describe(\"windowed (before boundary)\", () => {\n        // Layout: inc, inc, snapA{2}, inc, snapB{3}, inc — returns the\n        // stream name plus the two snapshot events for boundary asserts.\n        async function seed_windowed(s: string) {\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1), inc(1)],\n            make_meta({ stream: s })\n          );\n          const [snap_a] = await store.commit(\n            s,\n            [{ name: SNAP_EVENT, data: { count: 2 } }],\n            make_meta({ stream: s })\n          );\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n          const [snap_b] = await store.commit(\n            s,\n            [{ name: SNAP_EVENT, data: { count: 3 } }],\n            make_meta({ stream: s })\n          );\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n          return { snap_a, snap_b };\n        }\n\n        it(\"deletes the prefix below the closest safe snapshot and keeps the snapshot + tail\", async () => {\n          const s = `trunc-win-${uid()}`;\n          const { snap_b } = await seed_windowed(s);\n          const before = new Date(Date.now() + 60_000);\n          const result = await store.truncate([{ stream: s, before }]);\n          const entry = result.get(s);\n          // 4 events below snapB: inc, inc, snapA, inc\n          expect(entry?.deleted).toBe(4);\n          // committed is the SURVIVING boundary snapshot, not a new seed\n          expect(entry?.committed.id).toBe(snap_b.id);\n          expect(entry?.committed.name).toBe(SNAP_EVENT);\n          expect(entry?.committed.data).toEqual({ count: 3 });\n          // windowed entries echo the boundary\n          expect(entry?.before).toEqual(before);\n          const remaining = await collect(store, {\n            stream: s,\n            stream_exact: true,\n            with_snaps: true,\n            after: -1,\n          });\n          expect(remaining.map((e) => e.name)).toEqual([\n            SNAP_EVENT,\n            \"Incremented\",\n          ]);\n          expect(remaining[0].id).toBe(snap_b.id);\n        });\n\n        it(\"honors the max_id cap — boundary never rises past a lagging consumer\", async () => {\n          const s = `trunc-win-cap-${uid()}`;\n          const { snap_a, snap_b } = await seed_windowed(s);\n          const before = new Date(Date.now() + 60_000);\n          const result = await store.truncate([\n            { stream: s, before, max_id: snap_a.id },\n          ]);\n          const entry = result.get(s);\n          // snapB is newer but above the cap — snapA is the closest safe\n          expect(entry?.committed.id).toBe(snap_a.id);\n          expect(entry?.deleted).toBe(2);\n          const remaining = await collect(store, {\n            stream: s,\n            stream_exact: true,\n            with_snaps: true,\n            after: -1,\n          });\n          expect(remaining.map((e) => e.id)).toContain(snap_b.id);\n          expect(remaining[0].id).toBe(snap_a.id);\n          expect(remaining).toHaveLength(4);\n        });\n\n        it(\"no-ops when no snapshot qualifies — stream absent from the result, events untouched\", async () => {\n          const s = `trunc-win-noop-${uid()}`;\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1), inc(1)],\n            make_meta({ stream: s })\n          );\n          // no snapshot at all\n          const none = await store.truncate([\n            { stream: s, before: new Date(Date.now() + 60_000) },\n          ]);\n          expect(none.has(s)).toBe(false);\n          // snapshot exists but the cutoff predates it\n          await store.commit(\n            s,\n            [{ name: SNAP_EVENT, data: { count: 2 } }],\n            make_meta({ stream: s })\n          );\n          const too_early = await store.truncate([\n            { stream: s, before: new Date(0) },\n          ]);\n          expect(too_early.has(s)).toBe(false);\n          // missing stream no-ops too\n          const missing = await store.truncate([\n            { stream: `trunc-win-missing-${uid()}`, before: new Date() },\n          ]);\n          expect(missing.size).toBe(0);\n          const remaining = await collect(store, {\n            stream: s,\n            stream_exact: true,\n            with_snaps: true,\n            after: -1,\n          });\n          expect(remaining).toHaveLength(3);\n        });\n\n        it(\"leaves subscriptions untouched, unlike a full truncate\", async () => {\n          const s = `trunc-win-subs-${uid()}`;\n          await seed_windowed(s);\n          await store.subscribe([{ stream: s }]);\n          await store.truncate([\n            { stream: s, before: new Date(Date.now() + 60_000) },\n          ]);\n          const positions: string[] = [];\n          await store.query_streams((p) => positions.push(p.stream), {\n            stream: s,\n            stream_exact: true,\n          });\n          expect(positions).toEqual([s]);\n        });\n\n        it(\"mixes full and windowed targets in one call\", async () => {\n          const w = `trunc-win-mix-w-${uid()}`;\n          const f = `trunc-win-mix-f-${uid()}`;\n          const { snap_b } = await seed_windowed(w);\n          await store.commit<CounterEvents>(\n            f,\n            [inc(1)],\n            make_meta({ stream: f })\n          );\n          const result = await store.truncate([\n            { stream: w, before: new Date(Date.now() + 60_000) },\n            { stream: f },\n          ]);\n          expect(result.get(w)?.committed.id).toBe(snap_b.id);\n          expect(result.get(w)?.before).toBeInstanceOf(Date);\n          expect(result.get(f)?.deleted).toBe(1);\n          expect(result.get(f)?.committed.name).toBe(\"__tombstone__\");\n          expect(result.get(f)?.before).toBeUndefined();\n        });\n\n        it(\"keeps the stream writable and readable after a prune\", async () => {\n          const s = `trunc-win-cont-${uid()}`;\n          const { snap_b } = await seed_windowed(s);\n          await store.truncate([\n            { stream: s, before: new Date(Date.now() + 60_000) },\n          ]);\n          // versions continue from the surviving tail; ids never reuse\n          // a pruned id\n          const [next] = await store.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n          expect(next.version).toBe(6);\n          expect(next.id).toBeGreaterThan(snap_b.id);\n          // with_snaps replay anchors on the surviving boundary snapshot\n          const replay = await collect(store, {\n            stream: s,\n            stream_exact: true,\n            with_snaps: true,\n          });\n          expect(replay[0].id).toBe(snap_b.id);\n          expect(replay).toHaveLength(3);\n        });\n      });\n    });\n\n    describe(\"query_streams\", () => {\n      it(\"keyset pagination visits every stream regardless of name case (#1375)\", async () => {\n        // The `query_streams` twin of #1357. Mixed-case suffixes so the\n        // sort comparator and the `after` cursor must agree: code-unit\n        // order is B,C,a,d; a locale sort (a,B,C,d) paired with a\n        // code-unit `<=` cursor silently skips Bravo/Charlie.\n        const tag = uid();\n        const names = [\n          `${tag}-Bravo`,\n          `${tag}-alpha`,\n          `${tag}-Charlie`,\n          `${tag}-delta`,\n        ];\n        await store.subscribe(names.map((stream) => ({ stream })));\n\n        const visited: string[] = [];\n        let after: string | undefined;\n        for (;;) {\n          const page: string[] = [];\n          await store.query_streams((p) => page.push(p.stream), {\n            stream: `${tag}-.*`,\n            after,\n            limit: 1,\n          });\n          if (page.length === 0) break;\n          visited.push(...page);\n          after = page.at(-1);\n        }\n        expect([...visited].sort()).toEqual([...names].sort());\n      });\n\n      it(\"limit: 0 returns no rows\", async () => {\n        // The bound is applied before a row is emitted, not after it — an\n        // after-the-fact check lets exactly one row through.\n        const s = `qs-zero-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        const seen: string[] = [];\n        const push = (p: { stream: string }) => {\n          seen.push(p.stream);\n        };\n        const filter = { stream: s, stream_exact: true };\n\n        // CONTROL — the same query under the default bound sees the row.\n        const control = await store.query_streams(push, filter);\n        expect(control.count).toBe(1);\n        expect(seen).toEqual([s]);\n\n        seen.length = 0;\n        const { count } = await store.query_streams(push, {\n          ...filter,\n          limit: 0,\n        });\n        expect(seen).toEqual([]);\n        expect(count).toBe(0);\n      });\n\n      it(\"returns positions filtered by stream regex, exact, source, and source_exact\", async () => {\n        const tag = uid();\n        const proj1 = `qs-${tag}-projection-tickets`;\n        const proj2 = `qs-${tag}-projection-users`;\n        const dyn1 = `qs-${tag}-stats-1`;\n        const dyn2 = `qs-${tag}-stats-2`;\n        const src1 = `qs-${tag}-src-1`;\n        const src2 = `qs-${tag}-src-2`;\n        await store.subscribe([\n          { stream: proj1 },\n          { stream: proj2 },\n          { stream: dyn1, source: src1 },\n          { stream: dyn2, source: src2 },\n        ]);\n\n        const all: Array<{ stream: string; source?: string }> = [];\n        const all_result = await store.query_streams(\n          (p) => all.push({ stream: p.stream, source: p.source }),\n          { stream: `qs-${tag}-.*` }\n        );\n        expect(all_result.count).toBe(4);\n        expect(all_result.maxEventId).toBeGreaterThanOrEqual(-1);\n        expect(all.map((p) => p.stream).sort()).toEqual(\n          [proj1, proj2, dyn1, dyn2].sort()\n        );\n\n        const projections: string[] = [];\n        await store.query_streams((p) => projections.push(p.stream), {\n          stream: `qs-${tag}-projection-.*`,\n        });\n        expect(projections.sort()).toEqual([proj1, proj2].sort());\n\n        const exact: string[] = [];\n        await store.query_streams((p) => exact.push(p.stream), {\n          stream: dyn1,\n          stream_exact: true,\n        });\n        expect(exact).toEqual([dyn1]);\n\n        const by_source: string[] = [];\n        await store.query_streams((p) => by_source.push(p.stream), {\n          stream: `qs-${tag}-.*`,\n          source: `qs-${tag}-src-.*`,\n        });\n        expect(by_source.sort()).toEqual([dyn1, dyn2].sort());\n\n        const exact_source: string[] = [];\n        await store.query_streams((p) => exact_source.push(p.stream), {\n          stream: `qs-${tag}-.*`,\n          source: src2,\n          source_exact: true,\n        });\n        expect(exact_source).toEqual([dyn2]);\n      });\n\n      it(\"paginates with limit + after (keyset)\", async () => {\n        const tag = uid();\n        const streams = [\n          `qp-${tag}-a`,\n          `qp-${tag}-b`,\n          `qp-${tag}-c`,\n          `qp-${tag}-d`,\n        ];\n        await store.subscribe(streams.map((stream) => ({ stream })));\n        const page1: string[] = [];\n        await store.query_streams((p) => page1.push(p.stream), {\n          stream: `qp-${tag}-.*`,\n          limit: 2,\n        });\n        expect(page1).toHaveLength(2);\n        const page2: string[] = [];\n        await store.query_streams((p) => page2.push(p.stream), {\n          stream: `qp-${tag}-.*`,\n          limit: 2,\n          after: page1.at(-1),\n        });\n        expect(page2).toHaveLength(2);\n        expect([...page1, ...page2].sort()).toEqual([...streams].sort());\n      });\n\n      it(\"filters by blocked status\", async () => {\n        const tag = uid();\n        const s = `qb-${tag}`;\n        const sibling = `qb-${tag}-other`;\n        await store.subscribe([{ stream: s }, { stream: sibling }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === s);\n        const others = leased.filter((l) => l.stream !== s);\n        await store.ack(others);\n        await store.block([{ ...(mine as Lease), error: \"boom\" }]);\n\n        const blocked: Array<{ stream: string; error: string }> = [];\n        await store.query_streams(\n          (p) => blocked.push({ stream: p.stream, error: p.error }),\n          { stream: `qb-${tag}.*`, blocked: true }\n        );\n        expect(blocked).toHaveLength(1);\n        expect(blocked[0].error).toBe(\"boom\");\n\n        // blocked: false — must exclude the blocked one but include\n        // the sibling, exercising the other arm of the conditional.\n        const unblocked: string[] = [];\n        await store.query_streams((p) => unblocked.push(p.stream), {\n          stream: `qb-${tag}.*`,\n          blocked: false,\n        });\n        expect(unblocked).toEqual([sibling]);\n      });\n    });\n\n    describe(\"query_stats\", () => {\n      it(\"array input — returns head per stream, absent when not in input\", async () => {\n        const tag = uid();\n        const sA = `qst-${tag}-a`;\n        const sB = `qst-${tag}-b`;\n        const sUnasked = `qst-${tag}-unasked`;\n        await store.commit<CounterEvents>(\n          sA,\n          [inc(1), inc(2)],\n          make_meta({ stream: sA })\n        );\n        await store.commit<CounterEvents>(\n          sB,\n          [dec(5)],\n          make_meta({ stream: sB })\n        );\n        await store.commit<CounterEvents>(\n          sUnasked,\n          [inc(99)],\n          make_meta({ stream: sUnasked })\n        );\n\n        const stats = await store.query_stats<CounterEvents>([sA, sB]);\n        expect(stats.size).toBe(2);\n        expect(stats.get(sA)?.head.name).toBe(\"Incremented\");\n        expect((stats.get(sA)!.head.data as { amount: number }).amount).toBe(2);\n        expect(stats.get(sB)?.head.name).toBe(\"Decremented\");\n        expect((stats.get(sB)!.head.data as { amount: number }).amount).toBe(5);\n        expect(stats.has(sUnasked)).toBe(false);\n\n        // Empty input — empty result.\n        const empty = await store.query_stats([]);\n        expect(empty.size).toBe(0);\n\n        // Unknown stream name — absent, not an error.\n        const unknown = await store.query_stats([`qst-${tag}-missing`]);\n        expect(unknown.size).toBe(0);\n      });\n\n      it(\"limit: 0 returns no rows\", async () => {\n        const s = `qst-zero-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        const filter = { stream: s, stream_exact: true };\n\n        // CONTROL — unbounded, the stream is there to be counted.\n        const control = await store.query_stats<CounterEvents>(filter);\n        expect(control.size).toBe(1);\n\n        const stats = await store.query_stats<CounterEvents>(filter, {\n          limit: 0,\n        });\n        expect(stats.size).toBe(0);\n      });\n\n      it(\"keyset pagination visits every stream regardless of name case (#1357)\", async () => {\n        // Mixed-case suffixes so the sort comparator and the `after` cursor\n        // must agree: code-unit order is B,C,a,d; a locale sort (a,B,C,d)\n        // paired with a code-unit `<=` cursor silently skips Bravo/Charlie.\n        const tag = uid();\n        const names = [\n          `${tag}-Bravo`,\n          `${tag}-alpha`,\n          `${tag}-Charlie`,\n          `${tag}-delta`,\n        ];\n        for (const s of names)\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n\n        const visited: string[] = [];\n        let after: string | undefined;\n        // Terminates on the first empty page — a correct adapter yields one\n        // stream per page then an empty page; a comparator mismatch would drop\n        // rows but still exhaust the cursor and terminate.\n        let page = await store.query_stats<CounterEvents>(\n          { stream: tag },\n          { after, limit: 1 }\n        );\n        while (page.size > 0) {\n          for (const k of page.keys()) visited.push(k);\n          after = [...page.keys()].at(-1);\n          page = await store.query_stats<CounterEvents>(\n            { stream: tag },\n            { after, limit: 1 }\n          );\n        }\n        expect([...visited].sort()).toEqual([...names].sort());\n      });\n\n      it(\"tail returns the earliest event per stream\", async () => {\n        const tag = uid();\n        const s = `qst-tail-${tag}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await store.commit<CounterEvents>(\n          s,\n          [inc(2)],\n          make_meta({ stream: s })\n        );\n        await store.commit<CounterEvents>(\n          s,\n          [inc(3)],\n          make_meta({ stream: s })\n        );\n\n        const stats = await store.query_stats<CounterEvents>([s], {\n          tail: true,\n        });\n        const r = stats.get(s);\n        expect(r?.head.name).toBe(\"Incremented\");\n        expect((r!.head.data as { amount: number }).amount).toBe(3);\n        expect(r?.tail?.name).toBe(\"Incremented\");\n        expect((r!.tail!.data as { amount: number }).amount).toBe(1);\n      });\n\n      it(\"count + names — full aggregates including framework markers\", async () => {\n        const tag = uid();\n        const s = `qst-cn-${tag}`;\n        // 1 inc, then truncate (wipes + seeds snap), then 2 more incs + 1 dec\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        await store.truncate([{ stream: s, snapshot: { count: 99 } }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(2), inc(3), dec(1)],\n          make_meta({ stream: s })\n        );\n\n        const stats = await store.query_stats<CounterEvents>([s], {\n          count: true,\n          names: true,\n        });\n        const r = stats.get(s);\n        // Post-truncate live events: snap + inc + inc + dec = 4\n        expect(r?.count).toBe(4);\n        expect(r?.names?.[SNAP_EVENT]).toBe(1);\n        expect(r?.names?.Incremented).toBe(2);\n        expect(r?.names?.Decremented).toBe(1);\n        // Snapshot count is derivable from the names map — no separate field needed.\n        expect(r?.names?.[SNAP_EVENT]).toBe(1);\n      });\n\n      it(\"exclude shifts head past filtered events; stream absent when all filtered\", async () => {\n        const tag = uid();\n        const s = `qst-excl-${tag}`;\n        const sAllOut = `qst-allout-${tag}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), dec(2), inc(3)],\n          make_meta({ stream: s })\n        );\n        await store.commit<CounterEvents>(\n          sAllOut,\n          [inc(7)],\n          make_meta({ stream: sAllOut })\n        );\n\n        // Without exclude — head is the latest Incremented.\n        const all = await store.query_stats<CounterEvents>([s]);\n        expect(all.get(s)?.head.name).toBe(\"Incremented\");\n        expect((all.get(s)!.head.data as { amount: number }).amount).toBe(3);\n\n        // Exclude Incremented — head is now Decremented (the next-latest).\n        const excl = await store.query_stats<CounterEvents>([s], {\n          exclude: [\"Incremented\"],\n        });\n        expect(excl.get(s)?.head.name).toBe(\"Decremented\");\n        expect((excl.get(s)!.head.data as { amount: number }).amount).toBe(2);\n\n        // Exclude every name on a stream — that stream is absent from result.\n        const wipe = await store.query_stats<CounterEvents>([sAllOut], {\n          exclude: [\"Incremented\", \"Decremented\", \"Reset\"],\n        });\n        expect(wipe.has(sAllOut)).toBe(false);\n\n        // Framework markers are typed in EventName<E> too — close-cycle pattern.\n        const no_tomb = await store.query_stats<CounterEvents>([s], {\n          exclude: [TOMBSTONE_EVENT],\n        });\n        expect(no_tomb.get(s)?.head.name).toBe(\"Incremented\");\n      });\n\n      it(\"before — time travel narrows head/tail/count\", async () => {\n        const tag = uid();\n        const s = `qst-tt-${tag}`;\n        const c1 = await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        const c2 = await store.commit<CounterEvents>(\n          s,\n          [inc(2)],\n          make_meta({ stream: s })\n        );\n        await store.commit<CounterEvents>(\n          s,\n          [inc(3)],\n          make_meta({ stream: s })\n        );\n\n        // Cutoff at id of c2's event — only c1's event is < cutoff\n        const before = c2[0].id;\n        const stats = await store.query_stats<CounterEvents>([s], {\n          tail: true,\n          count: true,\n          before,\n        });\n        const r = stats.get(s);\n        expect(r?.count).toBe(1);\n        expect(r?.head.id).toBe(c1[0].id);\n        expect(r?.tail?.id).toBe(c1[0].id);\n\n        // Cutoff before any event — stream absent\n        const empty = await store.query_stats<CounterEvents>([s], {\n          before: 0,\n        });\n        expect(empty.has(s)).toBe(false);\n      });\n\n      it(\"filter form — stream regex, stream_exact, empty {} match\", async () => {\n        const tag = uid();\n        const sA = `qsf-${tag}-orders-1`;\n        const sB = `qsf-${tag}-orders-2`;\n        const sOther = `qsf-${tag}-users-1`;\n        await store.commit<CounterEvents>(\n          sA,\n          [inc(1)],\n          make_meta({ stream: sA })\n        );\n        await store.commit<CounterEvents>(\n          sB,\n          [inc(2)],\n          make_meta({ stream: sB })\n        );\n        await store.commit<CounterEvents>(\n          sOther,\n          [inc(3)],\n          make_meta({ stream: sOther })\n        );\n\n        // Regex match — restrict to this tag's orders.\n        const orders = await store.query_stats<CounterEvents>({\n          stream: `^qsf-${tag}-orders-`,\n        });\n        expect([...orders.keys()].sort()).toEqual([sA, sB].sort());\n\n        // Exact match — single stream.\n        const exact = await store.query_stats<CounterEvents>({\n          stream: sA,\n          stream_exact: true,\n        });\n        expect([...exact.keys()]).toEqual([sA]);\n\n        // Empty filter — matches every event-bearing stream visible to\n        // this test's tag (filtered down to avoid sibling-test pollution).\n        const all = await store.query_stats<CounterEvents>({\n          stream: `^qsf-${tag}-`,\n        });\n        expect([...all.keys()].sort()).toEqual([sA, sB, sOther].sort());\n      });\n\n      it(\"compose with query_streams for subscription-level filters\", async () => {\n        // `query_stats` only accepts event-stream selection. For\n        // \"stats for blocked subscriptions\" etc., compose with\n        // `query_streams` and pipe the names through. This test asserts\n        // that two-call pattern works end-to-end.\n        const tag = uid();\n        const a = `qsc-${tag}-a`;\n        const b = `qsc-${tag}-b`;\n        await store.subscribe([{ stream: a }, { stream: b }]);\n        await store.commit<CounterEvents>(\n          a,\n          [inc(1)],\n          make_meta({ stream: a })\n        );\n        await store.commit<CounterEvents>(\n          b,\n          [inc(2)],\n          make_meta({ stream: b })\n        );\n\n        // Block stream `a` via the standard claim → block path.\n        await correlate();\n        const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n        const mine = leased.find((l) => l.stream === a);\n        expect(mine).toBeDefined();\n        const others = leased.filter((l) => l.stream !== a);\n        await store.ack(others);\n        await store.block([{ ...(mine as Lease), error: \"boom\" }]);\n\n        // Step 1: subscription-level filter via query_streams.\n        const blocked_names: string[] = [];\n        await store.query_streams((p) => blocked_names.push(p.stream), {\n          stream: `^qsc-${tag}-`,\n          blocked: true,\n        });\n        expect(blocked_names).toEqual([a]);\n\n        // Step 2: event-level stats for those streams.\n        const stats = await store.query_stats<CounterEvents>(blocked_names);\n        expect(stats.get(a)?.head.name).toBe(\"Incremented\");\n        expect(stats.has(b)).toBe(false);\n      });\n\n      it(\"empty filter {} — matches every event-bearing stream\", async () => {\n        const tag = uid();\n        const a = `qse-${tag}-a`;\n        const b = `qse-${tag}-b`;\n        await store.commit<CounterEvents>(\n          a,\n          [inc(1)],\n          make_meta({ stream: a })\n        );\n        await store.commit<CounterEvents>(\n          b,\n          [dec(2)],\n          make_meta({ stream: b })\n        );\n\n        // {} matches all event-bearing streams globally — the TCK runs\n        // against a shared store, so we only assert that this tag's\n        // streams are present (other tests' streams may also appear).\n        const all = await store.query_stats<CounterEvents>({});\n        expect(all.has(a)).toBe(true);\n        expect(all.has(b)).toBe(true);\n      });\n\n      it(\"stat-flag combinations — count-only, names-only, tail-only\", async () => {\n        const tag = uid();\n        const s = `qsfl-${tag}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1), inc(2), dec(3)],\n          make_meta({ stream: s })\n        );\n\n        // count only → no names, no tail in result.\n        const c = await store.query_stats<CounterEvents>([s], {\n          count: true,\n        });\n        expect(c.get(s)?.count).toBe(3);\n        expect(c.get(s)?.names).toBeUndefined();\n        expect(c.get(s)?.tail).toBeUndefined();\n\n        // names only → no count, no tail.\n        const n = await store.query_stats<CounterEvents>([s], {\n          names: true,\n        });\n        expect(n.get(s)?.names).toEqual({ Incremented: 2, Decremented: 1 });\n        expect(n.get(s)?.count).toBeUndefined();\n        expect(n.get(s)?.tail).toBeUndefined();\n\n        // tail only → no count, no names. Cheap path (no full scan).\n        const t = await store.query_stats<CounterEvents>([s], { tail: true });\n        expect(t.get(s)?.tail?.name).toBe(\"Incremented\");\n        expect((t.get(s)!.tail!.data as { amount: number }).amount).toBe(1);\n        expect(t.get(s)?.count).toBeUndefined();\n        expect(t.get(s)?.names).toBeUndefined();\n      });\n\n      it(\"paginates with limit + after (keyset), ordered by stream name\", async () => {\n        const tag = uid();\n        const streams = [\n          `qsp-${tag}-a`,\n          `qsp-${tag}-b`,\n          `qsp-${tag}-c`,\n          `qsp-${tag}-d`,\n        ];\n        for (const s of streams) {\n          await store.commit<CounterEvents>(\n            s,\n            [inc(1)],\n            make_meta({ stream: s })\n          );\n        }\n\n        const page1 = await store.query_stats<CounterEvents>(\n          { stream: `qsp-${tag}-.*` },\n          { limit: 2 }\n        );\n        const k1 = [...page1.keys()];\n        expect(k1).toEqual([`qsp-${tag}-a`, `qsp-${tag}-b`]);\n\n        const page2 = await store.query_stats<CounterEvents>(\n          { stream: `qsp-${tag}-.*` },\n          { limit: 2, after: k1.at(-1) }\n        );\n        const k2 = [...page2.keys()];\n        expect(k2).toEqual([`qsp-${tag}-c`, `qsp-${tag}-d`]);\n\n        // Final short page signals the end.\n        const page3 = await store.query_stats<CounterEvents>(\n          { stream: `qsp-${tag}-.*` },\n          { limit: 2, after: k2.at(-1) }\n        );\n        expect(page3.size).toBe(0);\n\n        // Unbounded (no limit) returns every matching stream in one call.\n        const all = await store.query_stats<CounterEvents>({\n          stream: `qsp-${tag}-.*`,\n        });\n        expect([...all.keys()].sort()).toEqual([...streams].sort());\n      });\n    });\n\n    // Reverse-match probe filter (#1010): restrict to subscriptions whose\n    // stored `source` pattern matches at least one of the supplied names.\n    // Gated — stores that can't express reverse-regex omit it and callers\n    // fall back to an unfiltered scan.\n    describe.skipIf(!caps.source_matches)(\n      \"query_streams source_matches (capability)\",\n      () => {\n        it(\"returns only subscriptions whose source pattern matches a name\", async () => {\n          const tag = uid();\n          // Two dynamic subscriptions with concrete sources, one with a\n          // regex source matching a family of streams.\n          const subConcreteA = `sm-${tag}-sub-a`;\n          const subConcreteB = `sm-${tag}-sub-b`;\n          const subRegex = `sm-${tag}-sub-regex`;\n          const subNoSource = `sm-${tag}-sub-nosource`;\n          const srcA = `sm-${tag}-order-1`;\n          const srcB = `sm-${tag}-order-2`;\n          const srcRegex = `^sm-${tag}-order-`;\n          await store.subscribe([\n            { stream: subConcreteA, source: srcA },\n            { stream: subConcreteB, source: srcB },\n            { stream: subRegex, source: srcRegex },\n            // No source = no source constraint = matches every name.\n            { stream: subNoSource },\n          ]);\n\n          // Closing srcA: the concrete-A sub (source === srcA), the regex\n          // sub (source matches srcA), and the no-source sub (always)\n          // qualify; concrete-B does not.\n          const matched: string[] = [];\n          await store.query_streams((p) => matched.push(p.stream), {\n            stream: `sm-${tag}-sub-.*`,\n            source_matches: [srcA],\n          });\n          expect(matched.sort()).toEqual(\n            [subConcreteA, subRegex, subNoSource].sort()\n          );\n\n          // A name no concrete/regex source matches → only the\n          // no-source sub (which always qualifies) comes back.\n          const none: string[] = [];\n          await store.query_streams((p) => none.push(p.stream), {\n            stream: `sm-${tag}-sub-.*`,\n            source_matches: [`sm-${tag}-unrelated`],\n          });\n          expect(none).toEqual([subNoSource]);\n\n          // Multiple names → union of matching subscriptions, plus the\n          // always-matching no-source sub.\n          const both: string[] = [];\n          await store.query_streams((p) => both.push(p.stream), {\n            stream: `sm-${tag}-sub-.*`,\n            source_matches: [srcA, srcB],\n          });\n          expect(both.sort()).toEqual(\n            [subConcreteA, subConcreteB, subRegex, subNoSource].sort()\n          );\n        });\n      }\n    );\n\n    describe(\"query_streams anchor contract\", () => {\n      // Same regex-anchor rules as `query`. Auto-anchoring by an adapter\n      // is a contract violation — every store must honor caller-supplied\n      // anchors identically.\n      it(\"plain regex without anchors is a substring match\", async () => {\n        const tag = uid();\n        const inner = `qsr-${tag}-inner`;\n        const longer = `qsr-${tag}-inner-extra`;\n        const other = `zz-${tag}-other`;\n        await store.subscribe([\n          { stream: inner },\n          { stream: longer },\n          { stream: other },\n        ]);\n        const seen: string[] = [];\n        await store.query_streams((p) => seen.push(p.stream), {\n          stream: `qsr-${tag}-inner`,\n        });\n        expect(seen.sort()).toEqual([inner, longer].sort());\n      });\n\n      it(\"caller-anchored `^name$` matches only the whole string\", async () => {\n        const tag = uid();\n        const inner = `qsr-${tag}-anchor`;\n        const longer = `qsr-${tag}-anchor-extra`;\n        await store.subscribe([{ stream: inner }, { stream: longer }]);\n        const seen: string[] = [];\n        await store.query_streams((p) => seen.push(p.stream), {\n          stream: `^qsr-${tag}-anchor$`,\n        });\n        expect(seen).toEqual([inner]);\n      });\n\n      it(\"caller-anchored `^prefix` matches by prefix\", async () => {\n        const tag = uid();\n        const a = `qsr-${tag}-pfx-a`;\n        const b = `qsr-${tag}-pfx-b`;\n        const other = `zz-${tag}-pfx-c`;\n        await store.subscribe([\n          { stream: a },\n          { stream: b },\n          { stream: other },\n        ]);\n        const seen: string[] = [];\n        await store.query_streams((p) => seen.push(p.stream), {\n          stream: `^qsr-${tag}-pfx-`,\n        });\n        expect(seen.sort()).toEqual([a, b].sort());\n      });\n    });\n\n    describe(\"prioritize anchor contract\", () => {\n      it(\"caller-anchored `^name$` filter matches only the whole string\", async () => {\n        const tag = uid();\n        const inner = `pr-${tag}-anchor`;\n        const longer = `pr-${tag}-anchor-extra`;\n        await store.subscribe([\n          { stream: inner, priority: 0 },\n          { stream: longer, priority: 0 },\n        ]);\n        const updated = await store.prioritize(\n          { stream: `^pr-${tag}-anchor$` },\n          7\n        );\n        expect(updated).toBe(1);\n        const seen = new Map<string, number>();\n        await store.query_streams((p) => seen.set(p.stream, p.priority), {\n          stream: `pr-${tag}-anchor`,\n        });\n        expect(seen.get(inner)).toBe(7);\n        expect(seen.get(longer)).toBe(0);\n      });\n    });\n\n    describe(\"query_streams head\", () => {\n      it(\"maxEventId tracks the highest committed id\", async () => {\n        const s = `head-${uid()}`;\n        await store.subscribe([{ stream: s }]);\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        const positions: string[] = [];\n        const { maxEventId } = await store.query_streams(\n          (p) => positions.push(p.stream),\n          { stream: s, stream_exact: true, limit: 1 }\n        );\n        expect(maxEventId).toBeGreaterThanOrEqual(0);\n        expect(positions).toEqual([s]);\n      });\n    });\n\n    describe(\"seed_stream helper coverage\", () => {\n      it(\"commits N events with monotonically increasing ids\", async () => {\n        const s = `seed-${uid()}`;\n        const committed = await seed_stream(store, s, 3);\n        expect(committed).toHaveLength(3);\n        for (let i = 1; i < committed.length; i++) {\n          expect(committed[i].id).toBeGreaterThan(committed[i - 1].id);\n        }\n      });\n    });\n\n    // Use `describe.skipIf` rather than `if (caps.restore) { describe(...) }`\n    // so the gating lives inside vitest's skip mechanism instead of an\n    // `if` branch every consumer would have to disprove (all three\n    // in-tree adapters opt in to restore).\n    describe.skipIf(!caps.lease_correlation)(\n      \"correlation lease via subscribe (capability)\",\n      () => {\n        const by = () => `corr-${uid()}`;\n        const key = () => `key-${uid()}`;\n        const take = (k: string, who: string, millis = 10_000) =>\n          store.subscribe([], undefined, { key: k, by: who, millis });\n\n        /**\n         * Hand a lease back early.\n         *\n         * There is no release verb — expiry is the only path, deliberately,\n         * so a crash and a clean stop behave identically. A holder can still\n         * shorten its own lease, because re-acquiring as the same holder\n         * renews and renewing to 1ms releases in all but name.\n         */\n        const release = async (k: string, who: string) => {\n          await take(k, who, 1);\n          await new Promise((r) => setTimeout(r, 20));\n        };\n\n        it(\"grants the lease to the first caller\", async () => {\n          const k = key();\n          const who = by();\n          expect((await take(k, who)).correlating).toBe(true);\n          await release(k, who);\n        });\n\n        it(\"answers undefined when no correlator is supplied\", async () => {\n          // No lease was asked for, so there is no answer — and the caller\n          // scans exactly as every pre-#1532 caller does.\n          expect(await store.subscribe([])).not.toHaveProperty(\"correlating\");\n        });\n\n        it(\"refuses a second holder while the lease is live\", async () => {\n          const k = key();\n          const who = by();\n          expect((await take(k, who)).correlating).toBe(true);\n          // The whole point: two workers must not scan the same range.\n          expect((await take(k, by())).correlating).toBe(false);\n          await release(k, who);\n        });\n\n        it(\"lets the same holder renew rather than failing\", async () => {\n          const k = key();\n          const who = by();\n          expect((await take(k, who)).correlating).toBe(true);\n          // Acquiring and extending are one call by design, so a holder keeps\n          // its lease while it works without needing a second verb.\n          expect((await take(k, who)).correlating).toBe(true);\n          await release(k, who);\n        });\n\n        it(\"becomes available again once the lease expires\", async () => {\n          const k = key();\n          expect((await take(k, by(), 1)).correlating).toBe(true);\n          await new Promise((r) => setTimeout(r, 30));\n          // Expiry is also the crash-recovery path: a dead holder must not\n          // stall discovery forever.\n          const next = by();\n          expect((await take(k, next)).correlating).toBe(true);\n          await release(k, next);\n        });\n\n        it(\"keys leases independently, so one correlator cannot starve another\", async () => {\n          // Correlators that look for different things are not\n          // interchangeable. A worker running a subset of the reactions must\n          // scan for itself, or its targets are never marked and its\n          // reactions silently never run.\n          const a = key();\n          const b = key();\n          const holder_a = by();\n          const holder_b = by();\n          expect((await take(a, holder_a)).correlating).toBe(true);\n          expect((await take(b, holder_b)).correlating).toBe(true);\n          await release(a, holder_a);\n          await release(b, holder_b);\n        });\n\n        it(\"still advances the checkpoint for a caller that loses the lease\", async () => {\n          // A worker denied the lease may already have scanned and be\n          // reporting how far it read. Dropping that would leave its marks\n          // ahead of its recorded position, so the next pass would re-scan a\n          // range it had already covered.\n          const k = key();\n          const holder = by();\n          expect((await take(k, holder)).correlating).toBe(true);\n\n          const loser = await store.subscribe([], 7_777, {\n            key: k,\n            by: by(),\n            millis: 10_000,\n          });\n          expect(loser.correlating).toBe(false);\n          expect(loser.correlated_at).toBeGreaterThanOrEqual(7_777);\n\n          await release(k, holder);\n        });\n\n        it(\"seeds a new key from the shared floor, then lets it diverge\", async () => {\n          const a = key();\n          const holder_a = by();\n          const first = await store.subscribe([], 4_100, {\n            key: a,\n            by: holder_a,\n            millis: 10_000,\n          });\n          expect(first.correlated_at).toBeGreaterThanOrEqual(4_100);\n\n          // A key with no row yet inherits how far any correlator has read.\n          // That is the pre-#1532 behaviour — one shared checkpoint, a fresh\n          // worker resuming from it behind the cold-start back-scan — so an\n          // upgrade does not re-read history.\n          const b = key();\n          const holder_b = by();\n          const second = await store.subscribe([], undefined, {\n            key: b,\n            by: holder_b,\n            millis: 10_000,\n          });\n          expect(second.correlated_at).toBeGreaterThanOrEqual(4_100);\n\n          // After that they are independent: one correlator reading further\n          // must not drag another's position forward, or the second would\n          // skip events it never scanned.\n          await store.subscribe([], 9_000, {\n            key: a,\n            by: holder_a,\n            millis: 10_000,\n          });\n          const b_again = await store.subscribe([], undefined, {\n            key: b,\n            by: holder_b,\n            millis: 10_000,\n          });\n          expect(b_again.correlated_at).toBe(second.correlated_at);\n\n          await release(a, holder_a);\n          await release(b, holder_b);\n        });\n      }\n    );\n\n    describe.skipIf(!caps.restore)(\"restore (capability)\", () => {\n      // Restore wipes the whole store — every test starts from a\n      // freshly-dropped + seeded baseline so no test inherits\n      // another's post-restore state and so subsequent TCK blocks\n      // (notify) get a predictable empty store.\n      beforeEach(async () => {\n        await store.drop();\n        await store.seed();\n      });\n\n      /**\n       * Adapt an event array into the {@link EventSource} contract.\n       * The test source's `query` walks the array and calls the\n       * callback per event, exactly like a real `Store.query`. The\n       * `await Promise.resolve(callback(...))` mirrors the adapter\n       * pattern so async-callback backpressure stays exercised\n       * even from this synthetic source.\n       */\n      const as_source = (\n        events: Committed<Schemas, keyof Schemas>[]\n      ): EventSource => ({\n        async query(callback) {\n          // The cast widens our concrete schema-erased event back\n          // into the generic `E` slot the EventSource.query contract\n          // is parametrized over. Safe — the synthetic test source\n          // is intentionally schema-agnostic.\n          for (const e of events)\n            await Promise.resolve(\n              (callback as (event: Committed<Schemas, keyof Schemas>) => void)(\n                e\n              )\n            );\n          return events.length;\n        },\n        async dispose() {\n          // no-op — synthetic in-memory source\n        },\n      });\n\n      /**\n       * Build a {@link Committed} event with stub meta + the given\n       * created date. `original_id` populates `id` — used by the\n       * orchestrator's scan to key the causation remap. Tests pass\n       * arbitrary values (often a counter) since they're only\n       * consumed by the map.\n       */\n      const event = (\n        original_id: number,\n        stream: string,\n        version: number,\n        name: string,\n        created: Date,\n        data: Record<string, unknown> = {}\n      ): Committed<Schemas, keyof Schemas> => ({\n        id: original_id,\n        name,\n        data,\n        stream,\n        version,\n        created,\n        meta: { correlation: \"restore-tck\", causation: {} },\n      });\n\n      /**\n       * Test-side helper that routes through the public `Act.restore`\n       * orchestrator path bound to the store-under-test via the\n       * scoped-ports bag. Validates that the adapter's `restore` HOF\n       * integrates correctly with the framework's scan loop without\n       * importing the framework's internal scan symbol directly.\n       */\n      const restore = async (\n        source: EventSource,\n        opts: ScanOptions = {}\n      ): Promise<ScanResult> => {\n        const cache = new InMemoryCache();\n        const app = act().build({ scoped: { store, cache } });\n        try {\n          return await app.restore(source, opts);\n        } finally {\n          // Dispose the source first, then the cache — mirrors how\n          // a production caller would tear down ephemeral resources.\n          // Also keeps the synthetic-source `dispose` no-op\n          // exercised by every test that runs `restore`.\n          await source.dispose();\n          await cache.dispose();\n        }\n      };\n\n      it(\"returns kept=0 on an empty source\", async () => {\n        const result = await restore(as_source([]));\n        expect(result.kept).toBe(0);\n        expect(result.duration_ms).toBeGreaterThanOrEqual(0);\n        expect(result.dropped).toEqual({\n          closed_streams: 0,\n          snapshots: 0,\n        });\n        // Store ends empty.\n        const events = await collect(store, { limit: 10 });\n        expect(events).toHaveLength(0);\n      });\n\n      it(\"rebuilds a single stream and preserves `created` verbatim\", async () => {\n        const s = `restore-single-${uid()}`;\n        const t0 = new Date(\"2020-01-01T00:00:00.000Z\");\n        const t1 = new Date(\"2020-01-02T00:00:00.000Z\");\n        const t2 = new Date(\"2020-01-03T00:00:00.000Z\");\n        const events = [\n          event(1, s, 0, \"Incremented\", t0, { amount: 1 }),\n          event(2, s, 1, \"Incremented\", t1, { amount: 2 }),\n          event(3, s, 2, \"Decremented\", t2, { amount: 1 }),\n        ];\n        const result = await restore(as_source(events));\n        expect(result.kept).toBe(3);\n        const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            back.push(e);\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(back).toHaveLength(3);\n        expect(\n          back.map((e) => ({\n            stream: e.stream,\n            version: e.version,\n            name: e.name,\n            created: e.created.toISOString(),\n            data: e.data,\n          }))\n        ).toEqual([\n          {\n            stream: s,\n            version: 0,\n            name: \"Incremented\",\n            created: t0.toISOString(),\n            data: { amount: 1 },\n          },\n          {\n            stream: s,\n            version: 1,\n            name: \"Incremented\",\n            created: t1.toISOString(),\n            data: { amount: 2 },\n          },\n          {\n            stream: s,\n            version: 2,\n            name: \"Decremented\",\n            created: t2.toISOString(),\n            data: { amount: 1 },\n          },\n        ]);\n      });\n\n      it(\"rebuilds multiple streams interleaved\", async () => {\n        const a = `restore-multi-a-${uid()}`;\n        const b = `restore-multi-b-${uid()}`;\n        const t = new Date(\"2020-06-01T00:00:00.000Z\");\n        const events = [\n          event(1, a, 0, \"Incremented\", t, { amount: 10 }),\n          event(2, b, 0, \"Incremented\", t, { amount: 20 }),\n          event(3, a, 1, \"Decremented\", t, { amount: 5 }),\n          event(4, b, 1, \"Incremented\", t, { amount: 30 }),\n        ];\n        const result = await restore(as_source(events));\n        expect(result.kept).toBe(4);\n        const aBack: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        const bBack: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            aBack.push(e);\n          },\n          { stream: a, stream_exact: true }\n        );\n        await store.query<CounterEvents>(\n          (e) => {\n            bBack.push(e);\n          },\n          { stream: b, stream_exact: true }\n        );\n        expect(aBack.map((e) => e.version)).toEqual([0, 1]);\n        expect(bBack.map((e) => e.version)).toEqual([0, 1]);\n      });\n\n      it(\"preserves Date `created` verbatim\", async () => {\n        const s = `restore-isoc-${uid()}`;\n        const iso = \"2021-07-15T12:34:56.789Z\";\n        await restore(\n          as_source([\n            {\n              id: 1,\n              stream: s,\n              version: 0,\n              name: \"Incremented\",\n              data: { amount: 1 },\n              created: new Date(iso),\n              meta: { correlation: \"restore-tck\", causation: {} },\n            },\n          ])\n        );\n        const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            back.push(e);\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(back).toHaveLength(1);\n        expect(back[0].created.toISOString()).toBe(iso);\n      });\n\n      it(\"wipes pre-existing events before inserting\", async () => {\n        const old = `restore-old-${uid()}`;\n        await store.commit<CounterEvents>(\n          old,\n          [inc(1), inc(2)],\n          make_meta({ stream: old })\n        );\n        const fresh = `restore-fresh-${uid()}`;\n        const t = new Date(\"2020-01-01T00:00:00.000Z\");\n        await restore(\n          as_source([event(1, fresh, 0, \"Incremented\", t, { amount: 99 })])\n        );\n        // The old stream is gone.\n        const old_back = await collect(store, {\n          stream: old,\n          stream_exact: true,\n        });\n        expect(old_back).toHaveLength(0);\n        // Only the fresh stream remains.\n        const fresh_back = await collect(store, {\n          stream: fresh,\n          stream_exact: true,\n        });\n        expect(fresh_back).toHaveLength(1);\n      });\n\n      it(\"clears subscription/stream-position metadata\", async () => {\n        const sub = `restore-sub-${uid()}`;\n        await store.subscribe([{ stream: sub, source: \"anything\" }]);\n        const collect_streams = async () => {\n          const out: string[] = [];\n          await store.query_streams((p) => {\n            out.push(p.stream);\n          });\n          return out;\n        };\n        const before = await collect_streams();\n        expect(before.includes(sub)).toBe(true);\n        await restore(as_source([]));\n        const after = await collect_streams();\n        expect(after.includes(sub)).toBe(false);\n      });\n\n      it(\"preserves snapshot events through restore\", async () => {\n        // SNAP_EVENT is a framework marker — restore writes it\n        // through but skips updating the max-non-snap-id indexes.\n        // Covers the `event.name !== SNAP_EVENT` false branch.\n        const s = `restore-snap-${uid()}`;\n        const t = new Date(\"2020-04-01T00:00:00.000Z\");\n        await restore(\n          as_source([\n            {\n              id: 1,\n              stream: s,\n              version: 0,\n              name: SNAP_EVENT,\n              data: { count: 42 },\n              created: t,\n              meta: { correlation: \"snap\", causation: {} },\n            },\n          ])\n        );\n        const back = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          with_snaps: true,\n        });\n        expect(back).toHaveLength(1);\n        expect((back[0] as { name: string }).name).toBe(SNAP_EVENT);\n      });\n\n      it(\"rewrites causation refs through the old→new id map\", async () => {\n        // Sparse source ids (5, 7, 9) — adapter renumbers densely;\n        // the event whose causation pointed at original id 5 must end\n        // up pointing at the new id assigned to that same row.\n        const s = `restore-caus-${uid()}`;\n        const t = new Date(\"2020-08-01T00:00:00.000Z\");\n        const events: Committed<Schemas, keyof Schemas>[] = [\n          {\n            id: 5,\n            stream: s,\n            version: 0,\n            name: \"Incremented\",\n            data: { amount: 1 },\n            created: t,\n            meta: { correlation: \"c\", causation: {} },\n          },\n          {\n            id: 7,\n            stream: s,\n            version: 1,\n            name: \"Incremented\",\n            data: { amount: 2 },\n            created: t,\n            meta: {\n              correlation: \"c\",\n              causation: {\n                event: { id: 5, name: \"Incremented\", stream: s },\n              },\n            },\n          },\n          {\n            id: 9,\n            stream: s,\n            version: 2,\n            name: \"Decremented\",\n            data: { amount: 1 },\n            created: t,\n            meta: {\n              correlation: \"c\",\n              causation: {\n                event: { id: 7, name: \"Incremented\", stream: s },\n              },\n            },\n          },\n        ];\n        await restore(as_source(events));\n        const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            back.push(e);\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(back).toHaveLength(3);\n        // First row's causation is empty.\n        expect(back[0].meta.causation.event).toBeUndefined();\n        // Second row's causation pointed at original id 5 → new id of row 0.\n        expect(back[1].meta.causation.event?.id).toBe(back[0].id);\n        // Third row's causation pointed at original id 7 → new id of row 1.\n        expect(back[2].meta.causation.event?.id).toBe(back[1].id);\n      });\n\n      it(\"leaves causation refs unmapped when the target isn't in the source\", async () => {\n        const s = `restore-orphan-${uid()}`;\n        const t = new Date(\"2020-09-01T00:00:00.000Z\");\n        await restore(\n          as_source([\n            {\n              id: 1,\n              stream: s,\n              version: 0,\n              name: \"Incremented\",\n              data: { amount: 1 },\n              created: t,\n              meta: {\n                correlation: \"c\",\n                causation: {\n                  event: { id: 999, name: \"Phantom\", stream: \"ghost\" },\n                },\n              },\n            },\n          ])\n        );\n        const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            back.push(e);\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(back[0].meta.causation.event?.id).toBe(999);\n      });\n\n      it(\"rolls back atomically when the source throws mid-iteration\", async () => {\n        // Pre-seed some events the rollback must restore.\n        const original = `restore-pre-${uid()}`;\n        const committed = await store.commit<CounterEvents>(\n          original,\n          [inc(1), inc(2), inc(3)],\n          make_meta({ stream: original })\n        );\n        // EventSource that fires one event then throws — exercises\n        // the rollback path on the destination store. Implemented as\n        // a query method (not an iterable) since EventSource is the\n        // shape Act.restore takes.\n        const explosive: EventSource = {\n          async query(callback) {\n            await Promise.resolve(\n              (callback as (event: Committed<Schemas, keyof Schemas>) => void)(\n                event(\n                  1,\n                  `restore-explode-${uid()}`,\n                  0,\n                  \"Incremented\",\n                  new Date(),\n                  { amount: 1 }\n                )\n              )\n            );\n            throw new Error(\"boom\");\n          },\n          async dispose() {\n            // no-op\n          },\n        };\n        await expect(restore(explosive)).rejects.toThrow(\"boom\");\n        // Pre-call events still there.\n        const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            back.push(e);\n          },\n          { stream: original, stream_exact: true }\n        );\n        expect(back).toHaveLength(3);\n        expect(back.map((e) => e.id)).toEqual(committed.map((c) => c.id));\n      });\n\n      // ACT-1125 — compaction toggles + dry-run blocker scan + progress.\n\n      it(\"drop_snapshots: skips SNAP_EVENT rows and counts them\", async () => {\n        const s = `restore-drop-snap-${uid()}`;\n        const t = new Date(\"2020-10-01T00:00:00.000Z\");\n        const result = await restore(\n          as_source([\n            event(1, s, 0, \"Incremented\", t, { amount: 1 }),\n            {\n              id: 2,\n              stream: s,\n              version: 1,\n              name: SNAP_EVENT,\n              data: { count: 1 },\n              created: t,\n              meta: { correlation: \"snap\", causation: {} },\n            },\n            event(3, s, 2, \"Incremented\", t, { amount: 2 }),\n          ]),\n          { drop_snapshots: true }\n        );\n        expect(result.kept).toBe(2);\n        expect(result.dropped.snapshots).toBe(1);\n        // Verify the snapshot is gone from the rebuilt store.\n        const back = await collect(store, {\n          stream: s,\n          stream_exact: true,\n          with_snaps: true,\n        });\n        expect(back).toHaveLength(2);\n        expect(\n          back.every((e) => (e as { name: string }).name !== SNAP_EVENT)\n        ).toBe(true);\n      });\n\n      it(\"on_progress fires once per event (caller throttles)\", async () => {\n        const calls: number[] = [];\n        const s = `restore-progress-${uid()}`;\n        const t = new Date(\"2021-02-01T00:00:00.000Z\");\n        await restore(\n          as_source([\n            event(1, s, 0, \"Incremented\", t, { amount: 1 }),\n            event(2, s, 1, \"Incremented\", t, { amount: 2 }),\n          ]),\n          { on_progress: (p) => calls.push(p.processed) }\n        );\n        // One callback per event; values monotonic.\n        expect(calls).toEqual([1, 2]);\n      });\n\n      // #1258: `created` bounds are pure WHERE filters, never early-breaks.\n      // Restore preserves the source `created` verbatim, so a restored\n      // dataset whose timestamp order diverges from id order proves the\n      // scan must not short-circuit on the first out-of-order event.\n      it(\"query created bounds are filters, not id-ordered breaks\", async () => {\n        const s = `restore-created-order-${uid()}`;\n        // id 0 = newest, id 1 = oldest → created order ≠ id order.\n        const newest = new Date(\"2020-06-01T00:00:00.000Z\");\n        const oldest = new Date(\"2020-01-01T00:00:00.000Z\");\n        await restore(\n          as_source([\n            event(1, s, 0, \"Incremented\", newest, { amount: 10 }),\n            event(2, s, 1, \"Incremented\", oldest, { amount: 20 }),\n          ])\n        );\n        const cutoff = new Date(\"2020-03-01T00:00:00.000Z\");\n        // Forward: the newest event (id 0) is scanned first and fails\n        // `created_before`; the older event (id 1) must still be found.\n        const fwd: number[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            fwd.push((e.data as { amount: number }).amount);\n          },\n          { stream: s, stream_exact: true, created_before: cutoff }\n        );\n        expect(fwd).toEqual([20]);\n        // Backward: the oldest event (id 1) is scanned first and fails\n        // `created_after`; the newer event (id 0) must still be found.\n        const bwd: number[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            bwd.push((e.data as { amount: number }).amount);\n          },\n          {\n            stream: s,\n            stream_exact: true,\n            created_after: cutoff,\n            backward: true,\n          }\n        );\n        expect(bwd).toEqual([10]);\n      });\n\n      // Note (RFC 1274): floor-vs-time-bound suppression is no longer a\n      // store-level concern. The store applies the resume floor whenever\n      // `with_snaps` is set; the orchestrator is the single owner of floor\n      // eligibility and never combines `with_snaps` with an `asOf` bound. The\n      // suppression contract (#1261 `created_*`, #1267 `before`, #1274 `limit`)\n      // is now enforced at the orchestrator level in\n      // `libs/act/test/time-travel.spec.ts`.\n\n      // #1257: restore must split `pii` into the isolated store so\n      // `forget_pii` erases it — otherwise restored PII stays inline and\n      // erasure silently no-ops. Only meaningful when the adapter also\n      // isolates PII, so gate the assertion on that capability.\n      it.skipIf(!caps.pii_isolation)(\n        \"isolates restored pii so forget_pii erases it\",\n        async () => {\n          const s = `restore-pii-${uid()}`;\n          const t = new Date(\"2020-05-01T00:00:00.000Z\");\n          // Two PII events on the same stream so isolation must survive\n          // across events, not just the first.\n          const result = await restore(\n            as_source([\n              {\n                id: 1,\n                stream: s,\n                version: 0,\n                name: \"Incremented\",\n                data: { amount: 1 },\n                pii: { email: \"first@example.com\" },\n                created: t,\n                meta: { correlation: \"restore-tck\", causation: {} },\n              },\n              {\n                id: 2,\n                stream: s,\n                version: 1,\n                name: \"Incremented\",\n                data: { amount: 2 },\n                pii: { email: \"second@example.com\" },\n                created: t,\n                meta: { correlation: \"restore-tck\", causation: {} },\n              },\n            ])\n          );\n          expect(result.kept).toBe(2);\n          // PII round-trips on read after restore.\n          const before: Committed<CounterEvents, keyof CounterEvents>[] = [];\n          await store.query<CounterEvents>(\n            (e) => {\n              before.push(e);\n            },\n            { stream: s, stream_exact: true }\n          );\n          expect(before.map((e) => e.pii)).toEqual([\n            { email: \"first@example.com\" },\n            { email: \"second@example.com\" },\n          ]);\n          // forget_pii sees the restored PII and wipes every event's copy.\n          const wiped = await store.forget_pii!.call(store, s);\n          expect(wiped).toBe(2);\n          const after: Committed<CounterEvents, keyof CounterEvents>[] = [];\n          await store.query<CounterEvents>(\n            (e) => {\n              after.push(e);\n            },\n            { stream: s, stream_exact: true }\n          );\n          expect(after).toHaveLength(2);\n          for (const e of after) expect(e.pii == null).toBe(true);\n          expect(after.map((e) => e.data)).toEqual([\n            { amount: 1 },\n            { amount: 2 },\n          ]);\n        }\n      );\n    });\n\n    // PII isolation — sensitive-data epic (#566). Same `skipIf` pattern as\n    // restore: gated on `caps.pii_isolation`, exercises commit-with-pii\n    // round-trip, the no-pii passthrough, `forget_pii` happy path +\n    // idempotency, and isolation across streams.\n    describe.skipIf(!caps.pii_isolation)(\"pii_isolation (capability)\", () => {\n      it(\"commits and loads pii alongside data\", async () => {\n        const s = `pii-roundtrip-${uid()}`;\n        const committed = await store.commit<CounterEvents>(\n          s,\n          [\n            {\n              name: \"Incremented\",\n              data: { amount: 1 },\n              pii: { email: \"u@example.com\", name: \"Ursula\" },\n            },\n          ],\n          make_meta({ stream: s })\n        );\n        expect(committed).toHaveLength(1);\n        expect(committed[0].pii).toEqual({\n          email: \"u@example.com\",\n          name: \"Ursula\",\n        });\n\n        // Re-read via query to confirm the adapter persists pii.\n        const seen: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            seen.push(e);\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(seen).toHaveLength(1);\n        expect(seen[0].pii).toEqual({ email: \"u@example.com\", name: \"Ursula\" });\n        // Non-pii fields untouched.\n        expect(seen[0].data).toEqual({ amount: 1 });\n      });\n\n      it(\"round-trips a Date losslessly in pii, like data/meta (#1365/#1370/#1556)\", async () => {\n        // A store persists bytes; it does not type them. JSON has no date\n        // type, so a `Date` is stored as its ISO form and read back as that\n        // same string — identically in `data` and `pii`, and whether or not\n        // the adapter encrypts the pii column, since encryption is an\n        // at-rest concern and not a payload-type change.\n        //\n        // Turning that string back into a `Date` is the framework's job,\n        // driven by the `z.date()` the schema declares (#1556): an adapter\n        // cannot know which strings were dates, and guessing from shape\n        // revived any ISO-looking string — including fields declared\n        // `z.string()`. The same Date in `data` is the in-row control.\n        const s = `pii-date-${uid()}`;\n        const when = new Date(\"2024-03-01T10:20:30.000Z\");\n        await store.commit<CounterEvents>(\n          s,\n          [\n            {\n              name: \"Incremented\",\n              data: { amount: 1, at: when } as never,\n              pii: { born: when },\n            },\n          ],\n          make_meta({ stream: s })\n        );\n\n        const seen: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            seen.push(e);\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(seen).toHaveLength(1);\n        const at = (seen[0].data as unknown as { at: unknown }).at;\n        const born = (seen[0].pii as { born: unknown }).born;\n        // The contract is LOSSLESS RECOVERY, not a particular runtime type.\n        // A store that serializes (Postgres, SQLite) hands back the ISO form;\n        // one that holds references (InMemory) hands back the `Date` itself.\n        // Both are correct at this layer — an adapter cannot know which\n        // strings were dates, so typing them is the framework's job, driven\n        // by the declared `z.date()` (#1556). What every adapter owes is that\n        // no precision is lost, identically in `data` and `pii`.\n        const recovered = (v: unknown) =>\n          v instanceof Date ? v.getTime() : new Date(v as string).getTime();\n        expect(recovered(at)).toBe(when.getTime());\n        expect(recovered(born)).toBe(when.getTime());\n        // ...and that both columns are treated the same way, whichever it is.\n        expect(typeof at).toBe(typeof born);\n      });\n\n      it(\"query_stats head/tail never carry pii — introspection surface is pii-safe (#1294)\", async () => {\n        const s = `pii-stats-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [\n            {\n              name: \"Incremented\",\n              data: { amount: 1 },\n              pii: { email: \"head@example.com\" },\n            },\n            {\n              name: \"Incremented\",\n              data: { amount: 2 },\n              pii: { email: \"tail@example.com\" },\n            },\n          ],\n          make_meta({ stream: s })\n        );\n\n        // `query_stats` has no actor context and no disclosure gate, so it\n        // must not surface pii — regardless of adapter or at-rest encryption.\n        // Both code paths: heads-only (no count/names) and full-scan.\n        const heads = await store.query_stats<CounterEvents>([s], {\n          tail: true,\n        });\n        const h = heads.get(s);\n        expect(h?.head?.pii == null).toBe(true);\n        expect(h?.tail?.pii == null).toBe(true);\n\n        const full = await store.query_stats<CounterEvents>([s], {\n          tail: true,\n          count: true,\n          names: true,\n        });\n        const f = full.get(s);\n        expect(f?.head?.pii == null).toBe(true);\n        expect(f?.tail?.pii == null).toBe(true);\n        expect(f?.count).toBe(2);\n      });\n\n      it(\"passes through events without pii (pii is null or undefined on load)\", async () => {\n        const s = `pii-none-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        const seen: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            seen.push(e);\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(seen).toHaveLength(1);\n        // Either undefined or null is acceptable — adapters that store\n        // `pii TEXT NULL` round-trip as null; in-memory may return\n        // undefined for the missing key. Both forms mean \"no PII.\"\n        expect(seen[0].pii == null).toBe(true);\n      });\n\n      it(\"wipes pii for every event on the stream via forget_pii\", async () => {\n        const s = `pii-forget-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [\n            {\n              name: \"Incremented\",\n              data: { amount: 1 },\n              pii: { email: \"a@example.com\" },\n            },\n            {\n              name: \"Incremented\",\n              data: { amount: 2 },\n              pii: { email: \"b@example.com\" },\n            },\n          ],\n          make_meta({ stream: s })\n        );\n\n        const forget = store.forget_pii;\n        expect(forget).toBeDefined();\n        const wiped = await forget!.call(store, s);\n        expect(wiped).toBe(2);\n\n        const seen: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            seen.push(e);\n          },\n          { stream: s, stream_exact: true }\n        );\n        expect(seen).toHaveLength(2);\n        // PII is gone — adapters return null. Data is intact.\n        for (const e of seen) {\n          expect(e.pii == null).toBe(true);\n          expect(e.data).toBeDefined();\n        }\n      });\n\n      it(\"is idempotent — second forget_pii returns 0, no error\", async () => {\n        const s = `pii-forget-idem-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [\n            {\n              name: \"Incremented\",\n              data: { amount: 1 },\n              pii: { email: \"u@example.com\" },\n            },\n          ],\n          make_meta({ stream: s })\n        );\n        const forget = store.forget_pii!;\n        const first = await forget.call(store, s);\n        expect(first).toBe(1);\n        const second = await forget.call(store, s);\n        expect(second).toBe(0);\n      });\n\n      it(\"only wipes the targeted stream — siblings untouched\", async () => {\n        const sA = `pii-iso-a-${uid()}`;\n        const sB = `pii-iso-b-${uid()}`;\n        await store.commit<CounterEvents>(\n          sA,\n          [\n            {\n              name: \"Incremented\",\n              data: { amount: 1 },\n              pii: { email: \"alice@example.com\" },\n            },\n          ],\n          make_meta({ stream: sA })\n        );\n        await store.commit<CounterEvents>(\n          sB,\n          [\n            {\n              name: \"Incremented\",\n              data: { amount: 1 },\n              pii: { email: \"bob@example.com\" },\n            },\n          ],\n          make_meta({ stream: sB })\n        );\n        await store.forget_pii!.call(store, sA);\n\n        const a: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            a.push(e);\n          },\n          { stream: sA, stream_exact: true }\n        );\n        expect(a[0].pii == null).toBe(true);\n\n        const b: Committed<CounterEvents, keyof CounterEvents>[] = [];\n        await store.query<CounterEvents>(\n          (e) => {\n            b.push(e);\n          },\n          { stream: sB, stream_exact: true }\n        );\n        expect(b[0].pii).toEqual({ email: \"bob@example.com\" });\n      });\n\n      it(\"forget_pii on a stream with no pii events returns 0\", async () => {\n        const s = `pii-forget-empty-${uid()}`;\n        await store.commit<CounterEvents>(\n          s,\n          [inc(1)],\n          make_meta({ stream: s })\n        );\n        const wiped = await store.forget_pii!.call(store, s);\n        expect(wiped).toBe(0);\n      });\n    });\n\n    if (caps.notify) {\n      // ACT-1184: the notify conformance suite. `factory` must produce\n      // sibling instances that share one backing store — the TCK's\n      // standing pattern (two PostgresStores on the same schema/table,\n      // two withBroker decorators on one broker). These cases enforce\n      // the port's MUSTs: cross-instance delivery, self-filtering\n      // (\"implementations must skip their own commits\"), and one\n      // notification per commit transaction carrying the full batch.\n      describe(\"notify (capability)\", () => {\n        it(\"delivers a notification when a different instance commits\", async () => {\n          // Self-filtering contract: an instance does not see its own\n          // commits. So we listen on `store` and write through a fresh\n          // sibling instance pointing at the same backend.\n          const notify = store.notify;\n          expect(notify).toBeDefined();\n          const received: StoreNotification[] = [];\n          let resolve_arrived!: () => void;\n          const arrived = new Promise<void>((res) => {\n            resolve_arrived = res;\n          });\n          const disposer = await notify!.call(store, (n) => {\n            received.push(n);\n            resolve_arrived();\n          });\n          const writer = await options.factory();\n          try {\n            const stream = `notify-${uid()}`;\n            await writer.commit<CounterEvents>(\n              stream,\n              [inc(1)],\n              make_meta({ stream })\n            );\n            // No explicit timeout — vitest's default test timeout\n            // bounds the wait. If notify silently fails to deliver,\n            // the test will surface that as a clear timeout failure.\n            await arrived;\n            expect(received.length).toBeGreaterThanOrEqual(1);\n            expect(received[0].stream).toBe(stream);\n            expect(received[0].events.length).toBeGreaterThanOrEqual(1);\n          } finally {\n            await writer.dispose();\n            await Promise.resolve(disposer());\n          }\n        });\n\n        it(\"does not deliver an instance's own commits (self-filtering)\", async () => {\n          const received: StoreNotification[] = [];\n          let resolve_sentinel!: () => void;\n          const sentinel_arrived = new Promise<void>((res) => {\n            resolve_sentinel = res;\n          });\n          const own = `notify-self-${uid()}`;\n          const remote = `notify-remote-${uid()}`;\n          const sentinel = `notify-sentinel-${uid()}`;\n          const disposer = await store.notify!.call(store, (n) => {\n            received.push(n);\n            if (n.stream === sentinel) resolve_sentinel();\n          });\n          const writer = await options.factory();\n          try {\n            // Commit through the *listening* instance first, then through\n            // a sibling (a plain remote commit, then the sentinel).\n            // Notifications are delivered in commit order, so once the\n            // sentinel arrives the own-commit notification would already\n            // have been delivered were it not filtered.\n            await store.commit<CounterEvents>(\n              own,\n              [inc(1)],\n              make_meta({ stream: own })\n            );\n            await writer.commit<CounterEvents>(\n              remote,\n              [inc(1)],\n              make_meta({ stream: remote })\n            );\n            await writer.commit<CounterEvents>(\n              sentinel,\n              [inc(1)],\n              make_meta({ stream: sentinel })\n            );\n            await sentinel_arrived;\n            expect(received.find((n) => n.stream === own)).toBeUndefined();\n            expect(received.find((n) => n.stream === remote)).toBeDefined();\n            expect(received.find((n) => n.stream === sentinel)).toBeDefined();\n          } finally {\n            await writer.dispose();\n            await Promise.resolve(disposer());\n          }\n        });\n\n        it(\"delivers one notification per commit transaction carrying the full event batch\", async () => {\n          const received: StoreNotification[] = [];\n          let resolve_sentinel!: () => void;\n          const sentinel_arrived = new Promise<void>((res) => {\n            resolve_sentinel = res;\n          });\n          const batch = `notify-batch-${uid()}`;\n          const sentinel = `notify-batch-sentinel-${uid()}`;\n          const disposer = await store.notify!.call(store, (n) => {\n            received.push(n);\n            if (n.stream === sentinel) resolve_sentinel();\n          });\n          const writer = await options.factory();\n          try {\n            // One commit transaction, three events. The sentinel commit\n            // bounds the wait: delivered in commit order, its arrival\n            // proves any duplicate batch notification would already be in\n            // `received`.\n            await writer.commit<CounterEvents>(\n              batch,\n              [inc(1), inc(2), inc(3)],\n              make_meta({ stream: batch })\n            );\n            await writer.commit<CounterEvents>(\n              sentinel,\n              [inc(1)],\n              make_meta({ stream: sentinel })\n            );\n            await sentinel_arrived;\n            const batch_notifications = received.filter(\n              (n) => n.stream === batch\n            );\n            expect(batch_notifications).toHaveLength(1);\n            const events = batch_notifications[0].events;\n            expect(events).toHaveLength(3);\n            // The batch arrives ordered with id + name per entry.\n            expect(events.map((e) => e.name)).toEqual([\n              \"Incremented\",\n              \"Incremented\",\n              \"Incremented\",\n            ]);\n            expect([...events.map((e) => e.id)].sort((a, b) => a - b)).toEqual(\n              events.map((e) => e.id)\n            );\n          } finally {\n            await writer.dispose();\n            await Promise.resolve(disposer());\n          }\n        });\n      });\n    }\n  });\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,oBAA0D;;;ACD1D,yBAA2B;AAoBpB,IAAM,MAAM,UAAc,+BAAW,EAAE,MAAM,GAAG,CAAC;AAEjD,IAAM,QAAQ,CAAC,OAAO,cAAc,EAAE,QAAI,+BAAW,GAAG,KAAK;AAG7D,IAAM,YAAY,CACvB,OAAmE,CAAC,OACrD;AAAA,EACf,aAAa,KAAK,mBAAe,+BAAW;AAAA,EAC5C,WAAW,KAAK,SACZ;AAAA,IACE,QAAQ;AAAA,MACN,MAAM,KAAK,UAAU;AAAA,MACrB,QAAQ,KAAK;AAAA,MACb,OAAO,MAAM;AAAA,IACf;AAAA,EACF,IACA,CAAC;AACP;AAEO,IAAM,MAAM,CAAC,SAAS,OAAuB;AAAA,EAClD,MAAM;AAAA,EACN,MAAM,EAAE,OAAO;AACjB;AAEO,IAAM,MAAM,CAAC,SAAS,OAAuB;AAAA,EAClD,MAAM;AAAA,EACN,MAAM,EAAE,OAAO;AACjB;AAEO,IAAM,QAAQ,OAAuB,EAAE,MAAM,SAAS,MAAM,CAAC,EAAE;AAM/D,IAAM,cAAc,OACzB,OACA,QACA,OACA,gBACqC;AACrC,QAAM,MAA+B,CAAC;AACtC,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,UAAM,YAAY,MAAM,MAAM;AAAA,MAC5B;AAAA,MACA,CAAC,IAAI,CAAC,CAAC;AAAA,MACP,UAAU,EAAE,aAAa,OAAO,CAAC;AAAA,IACnC;AACA,QAAI,KAAK,GAAI,SAAqC;AAAA,EACpD;AACA,SAAO;AACT;AAKO,IAAM,UAAU,OACrB,OACA,UACqC;AACrC,QAAM,MAA+B,CAAC;AACtC,QAAM,MAAM,MAAqB,CAAC,MAAM;AACtC,QAAI,KAAK,CAA0B;AAAA,EACrC,GAAG,KAAK;AACR,SAAO;AACT;;;AD9BA,IAAM,aAAa,CAAC,SAAiC;AACnD,MAAI,IAAI,SAAS;AACjB,SAAO,MAAM;AACX,QAAK,IAAI,aAAc;AACvB,QAAI,IAAI,KAAK,KAAK,IAAK,MAAM,IAAK,IAAI,CAAC;AACvC,QAAK,IAAI,KAAK,KAAK,IAAK,MAAM,GAAI,KAAK,CAAC,IAAK;AAC7C,aAAS,IAAK,MAAM,QAAS,KAAK;AAAA,EACpC;AACF;AAsBA,IAAM,mBAAmB,CAAC,MAAc,iBAAoC;AAC1E,QAAM,MAAM,WAAW,IAAI;AAC3B,QAAM,SAAS,SAAS,IAAI,CAAC;AAC7B,QAAM,UAAU,MAAM;AAAA,IACpB,EAAE,QAAQ,aAAa;AAAA,IACvB,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC;AAAA,EACzB;AAEA,QAAM,aAAa,MAAa;AAC9B,UAAM,IAAI,KAAK,MAAM,IAAI,IAAI,GAAI;AACjC,WAAO;AAAA,MACL,QAAQ,KAAK,CAAC;AAAA,MACd,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG;AAAA,MACtC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC;AAAA,MACjC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC;AAAA,IAC7B;AAAA,EACF;AACA,QAAM,cAAc,MAAc,QAAQ,KAAK,MAAM,IAAI,IAAI,QAAQ,MAAM,CAAC;AAE5E,QAAM,MAAiB,CAAC;AAExB,aAAW,UAAU;AACnB,QAAI,KAAK,EAAE,GAAG,OAAO,QAAQ,OAAO,WAAW,EAAE,CAAC;AAIpD,QAAM,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,EAAE;AACxC,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,UAAM,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC;AACjC,QAAI,SAAS;AACX,UAAI,KAAK,EAAE,GAAG,OAAO,QAAQ,YAAY,GAAG,OAAO,WAAW,EAAE,CAAC;AAAA,aAC1D,SAAS,EAAG,KAAI,KAAK,EAAE,GAAG,cAAc,QAAQ,YAAY,EAAE,CAAC;AAAA,QACnE,KAAI,KAAK,EAAE,GAAG,QAAQ,CAAC;AAAA,EAC9B;AAEA,SAAO,EAAE,SAAS,IAAI;AACxB;AAGA,IAAM,WAAW,OAAO,OAAc,OAA+B;AACnE,MAAI,GAAG,MAAM,MAAO,OAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,KAAK;AAAA,WAC9C,GAAG,MAAM,aAAc,OAAM,MAAM,WAAW,GAAG,MAAM;AAAA,MAC3D,OAAM,MAAM,MAAM;AACzB;AAGA,IAAM,WAAW,OACf,OACA,YAC+C;AAC/C,QAAM,MAAyC,CAAC;AAChD,aAAW,UAAU;AACnB,QAAI,MAAM,IAAI,MAAM,MAAM,IAA6B,MAAM;AAC/D,SAAO;AACT;AAiCO,IAAM,0BAA0B,CACrC,YACS;AACT,8BAAS,8BAA8B,QAAQ,IAAI,IAAI,MAAM;AAC3D,UAAM,YAAY,QAAQ,QAAQ;AAClC,UAAM,eAAe,QAAQ,WAAW;AACxC,UAAM,QAAQ,MAAM;AAAA,MAAK,EAAE,QAAQ,QAAQ,QAAQ,EAAE;AAAA,MAAG,CAAC,GAAG,MAC1D,iBAAiB,YAAY,GAAG,YAAY;AAAA,IAC9C;AACA,UAAM,OAA8C,CAAC;AAErD,iCAAU,YAAY;AACpB,iBAAW,QAAQ,QAAQ,QAAQ;AACjC,aAAK,KAAK,EAAE,MAAM,KAAK,MAAM,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;AAAA,MAC5D;AAAA,IACF,CAAC;AAED,gCAAS,YAAY;AACnB,iBAAW,EAAE,MAAM,KAAK,KAAM,OAAM,MAAM,QAAQ;AAAA,IACpD,CAAC;AAED,UAAM,QAAQ,CAAC,MAAM,QAAQ;AAC3B,YAAM,WAAW,MAAM,YAAY,KAAK,SAAS,EAAE,CAAC;AACpD,4BAAG,4CAA4C,GAAG,UAAU,QAAQ,KAAK,YAAY;AACnF,mBAAW,MAAM,KAAK,KAAK;AAGzB,qBAAW,EAAE,MAAM,KAAK,KAAM,OAAM,SAAS,OAAO,EAAE;AACtD,gBAAM,YAAY,MAAM,SAAS,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO;AAC5D,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,kBAAM,SAAS,MAAM,SAAS,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO;AACzD;AAAA,cACE;AAAA,cACA,GAAG,KAAK,CAAC,EAAE,IAAI,kBAAkB,KAAK,CAAC,EAAE,IAAI,UAAU,GAAG,CAAC;AAAA,YAC7D,EAAE,QAAQ,SAAS;AAAA,UACrB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;;;AEtNA,IAAAA,iBAA4D;AAqB5D,IAAM,QAAQ,CACZ,UACA,QAAiC,CAAC,GAClC,SAAS,KAAK,QAAQ,QACmB;AAAA,EACzC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,SAAS;AAAA,EACT,OAAO;AACT;AA8BO,IAAM,cAAc,CAAC,YAAmC;AAC7D,+BAAS,iBAAiB,QAAQ,IAAI,IAAI,MAAM;AAC9C,QAAI;AAEJ,mCAAW,MAAM;AACf,cAAQ,QAAQ,QAAQ;AAAA,IAC1B,CAAC;AAED,kCAAU,YAAY;AACpB,YAAM,MAAM,QAAQ;AAAA,IACtB,CAAC;AAED,2BAAG,yCAAyC,YAAY;AACtD,iCAAO,MAAM,MAAM,IAAI,SAAS,CAAC,EAAE,cAAc;AAAA,IACnD,CAAC;AAED,2BAAG,qCAAqC,YAAY;AAClD,YAAM,IAAI,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC;AAC/B,YAAM,MAAM,IAAI,MAAM,CAAC;AACvB,iCAAO,MAAM,MAAM,IAAI,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,IACzC,CAAC;AAED,2BAAG,mDAAmD,YAAY;AAChE,YAAM,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,YAAM,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,YAAM,MAAM,MAAM,MAAM,IAA6B,IAAI;AACzD,iCAAO,KAAK,QAAQ,EAAE,KAAK,CAAC;AAC5B,iCAAO,KAAK,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAAA,IACzC,CAAC;AAED,2BAAG,mDAAmD,YAAY;AAChE,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,WAAW,GAAG;AAC1B,iCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,cAAc;AAC3C,iCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,YAAY;AAAA,IAC3C,CAAC;AAED,2BAAG,8CAA8C,YAAY;AAC3D,gBAAM,uBAAO,MAAM,WAAW,WAAW,CAAC,EAAE,SAAS,cAAc;AAAA,IACrE,CAAC;AAED,2BAAG,8BAA8B,YAAY;AAC3C,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,MAAM;AAClB,iCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,cAAc;AAC3C,iCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,cAAc;AAC3C,iCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,cAAc;AAAA,IAC7C,CAAC;AAED,2BAAG,sCAAsC,YAAY;AACnD,gBAAM,uBAAO,MAAM,MAAM,CAAC,EAAE,SAAS,cAAc;AAAA,IACrD,CAAC;AAED,2BAAG,mCAAmC,YAAY;AAChD,YAAM,KAAK,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC;AAC/B,YAAM,KAAK,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC;AAC/B,YAAM,MAAM,IAAI,KAAK,EAAE;AACvB,YAAM,MAAM,IAAI,KAAK,EAAE;AACvB,iCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE;AACvC,iCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE;AAAA,IACzC,CAAC;AAED,2BAAG,yBAAyB,YAAY;AACtC,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,QAAQ;AACpB,gBAAM,uBAAO,MAAM,QAAQ,CAAC,EAAE,SAAS,cAAc;AAAA,IACvD,CAAC;AAAA,EACH,CAAC;AACH;;;ACtIA,iBAAkB;AAEX,IAAM,cAAc,aAAE,OAAO,EAAE,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,IAAM,cAAc,aAAE,OAAO,EAAE,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,IAAM,QAAQ,aAAE,OAAO,CAAC,CAAC;AAEzB,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF;AAQO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF;;;ACrBA,IAAAC,iBAA4D;AAiC5D,IAAM,SAAS,CAAC,SAAS,SAAS,QAAQ,QAAQ,SAAS,OAAO;AAkBlE,IAAM,QAAQ,CAAC,WAA8B;AAC3C,QAAM,MAAiB,CAAC;AACxB,QAAM,KAAK,CAAC,OAAyB;AACnC,QAAI;AACF,SAAG;AACH,UAAI,KAAK,IAAI;AAAA,IACf,QAAQ;AACN,UAAI,KAAK,KAAK;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,KAAK,OAAO,OAAO,UAAU,YAAY,OAAO,MAAM,SAAS,CAAC;AACpE,aAAW,SAAS,QAAQ;AAC1B,OAAG,MAAM,OAAO,KAAK,EAAE,SAAS,CAAC;AACjC,OAAG,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;AACxC,OAAG,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAAA,EAC/C;AACA,KAAG,MAAM,OAAO,KAAK,MAAM,cAAc,CAAC;AAC1C,KAAG,MAAM;AACP,UAAM,SAAkC,EAAE,MAAM,OAAO;AACvD,WAAO,OAAO;AACd,WAAO,KAAK,QAAQ,OAAO;AAAA,EAC7B,CAAC;AAKD,QAAM,QAAQ,OAAO,MAAM,EAAE,YAAY,MAAM,CAAC;AAChD,MAAI,KAAK,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,SAAS,CAAC;AAClE,MAAI,KAAK,OAAO,MAAM,CAAC,UAAU,OAAO,MAAM,KAAK,MAAM,UAAU,CAAC;AACpE,MAAI,KAAK,OAAO,MAAM,UAAU,UAAU;AAC1C,KAAG,MAAM,MAAM,MAAM,EAAE,QAAQ,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC;AAErD,SAAO;AACT;AA+BO,IAAM,2BAA2B,CACtC,YACS;AACT,+BAAS,+BAA+B,QAAQ,IAAI,IAAI,MAAM;AAC5D,QAAI,OAAgD,CAAC;AACrD,QAAI;AAIJ,mCAAW,MAAM;AACf,aAAO,QAAQ,QAAQ,IAAI,CAAC,UAAU;AAAA,QACpC,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK,QAAQ;AAAA,MACvB,EAAE;AACF,wBAAkB,QAAQ,OAAO,MAAM,KAAK,QAAQ,MAAM;AAC1D,cAAQ,OAAO,SAAS,MAAM;AAAA,IAChC,CAAC;AAED,kCAAU,YAAY;AACpB,cAAQ,OAAO,QAAQ;AACvB,iBAAW,EAAE,OAAO,KAAK,KAAM,OAAM,OAAO,QAAQ;AAAA,IACtD,CAAC;AAED,2BAAG,sEAAsE,MAAM;AAC7E,YAAM,YAAY,MAAM,KAAK,CAAC,EAAE,MAAM;AACtC,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAM,SAAS,MAAM,KAAK,CAAC,EAAE,MAAM;AACnC,mCAAO,QAAQ,GAAG,KAAK,CAAC,EAAE,IAAI,kBAAkB,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE;AAAA,UAC9D;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;ACrJA,IAAAC,iBAA4D;AAiB5D,IAAMC,UAAS,CAAC,SAAS,SAAS,QAAQ,QAAQ,SAAS,OAAO;AAgC3D,IAAM,eAAe,CAAC,YAAoC;AAC/D,+BAAS,kBAAkB,QAAQ,IAAI,IAAI,MAAM;AAC/C,QAAI;AACJ,QAAI;AAOJ,mCAAW,MAAM;AACf,eAAS,QAAQ,QAAQ;AACzB,wBAAkB,QAAQ,OAAO,MAAM,KAAK,QAAQ,MAAM;AAC1D,cAAQ,OAAO,SAAS,MAAM;AAAA,IAChC,CAAC;AAED,kCAAU,YAAY;AACpB,cAAQ,OAAO,QAAQ;AACvB,YAAM,OAAO,QAAQ;AAAA,IACvB,CAAC;AAED,2BAAG,sCAAsC,MAAM;AAC7C,iCAAO,OAAO,OAAO,KAAK,EAAE,KAAK,QAAQ;AACzC,iCAAO,OAAO,MAAM,MAAM,EAAE,gBAAgB,CAAC;AAAA,IAC/C,CAAC;AAED,eAAW,SAASA,SAAQ;AAC1B,6BAAG,GAAG,KAAK,wBAAwB,MAAM;AACvC,mCAAO,MAAM,OAAO,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,QAAQ;AAAA,MACnD,CAAC;AAED,6BAAG,GAAG,KAAK,wBAAwB,MAAM;AACvC,mCAAO,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,QAAQ;AAAA,MACtD,CAAC;AAED,6BAAG,GAAG,KAAK,6BAA6B,MAAM;AAC5C,mCAAO,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,IAAI,QAAQ;AAAA,MACjE,CAAC;AAAA,IACH;AAEA,2BAAG,0BAA0B,MAAM;AACjC,iCAAO,MAAM,OAAO,KAAK,MAAM,cAAc,CAAC,EAAE,IAAI,QAAQ;AAAA,IAC9D,CAAC;AAED,2BAAG,6CAA6C,MAAM;AACpD,YAAM,SAAkC,EAAE,MAAM,OAAO;AACvD,aAAO,OAAO;AACd,iCAAO,MAAM,OAAO,KAAK,QAAQ,OAAO,CAAC,EAAE,IAAI,QAAQ;AAAA,IACzD,CAAC;AAED,2BAAG,iEAAiE,MAAM;AACxE,YAAM,QAAQ,OAAO,MAAM,EAAE,YAAY,MAAM,CAAC;AAChD,iCAAO,OAAO,MAAM,KAAK,EAAE,KAAK,QAAQ;AACxC,iBAAW,SAASA,SAAQ;AAC1B,mCAAO,OAAO,MAAM,KAAK,CAAC,EAAE,KAAK,UAAU;AAAA,MAC7C;AACA,iCAAO,OAAO,MAAM,KAAK,EAAE,KAAK,UAAU;AAC1C,iCAAO,OAAO,MAAM,OAAO,EAAE,KAAK,UAAU;AAAA,IAC9C,CAAC;AAED,2BAAG,+CAA+C,MAAM;AACtD,YAAM,KAAK,OAAO,MAAM,EAAE,GAAG,EAAE,CAAC;AAChC,YAAM,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,CAAC;AAC5B,iCAAO,MAAM,GAAG,KAAK,QAAQ,CAAC,EAAE,IAAI,QAAQ;AAAA,IAC9C,CAAC;AAED,2BAAG,uCAAuC,YAAY;AACpD,gBAAM,uBAAO,OAAO,QAAQ,CAAC,EAAE,SAAS,cAAc;AACtD,gBAAM,uBAAO,OAAO,QAAQ,CAAC,EAAE,SAAS,cAAc;AAAA,IACxD,CAAC;AAAA,EACH,CAAC;AACH;;;ACzHA,qBAA+B;AAC/B,uBAAiB;AACjB,IAAAC,iBAAqC;AAqD9B,SAAS,gBAAgB,SAAoC;AAClE,+BAAS,GAAG,QAAQ,IAAI,gCAA2B,MAAM;AACvD,eAAW,CAAC,SAASC,MAAK,KAAK,OAAO,QAAQ,QAAQ,WAAW,GAAG;AAClE,YAAM,QAAQ,WAAW;AACzB,6BAAG,6BAA6B,KAAK,IAAI,YAAY;AACnD,cAAM,UAAU,MAAM,aAAaA,MAAK;AACxC,mCAAO,OAAO,EAAE,gBAAgB;AAAA,MAClC,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAQA,eAAe,aAAaA,QAAgC;AAC1D,QAAM,UAAU,oBAAI,IAAoB;AAExC,iBAAe,KAAK,MAA6B;AAC/C,UAAM,MAAM,iBAAAC,QAAK,QAAQ,IAAI;AAC7B,QAAI,QAAQ,IAAI,GAAG,EAAG;AAEtB,UAAM,UAAU,MAAM,eAAAC,SAAG,SAAS,KAAK,MAAM;AAC7C,YAAQ,IAAI,KAAK,OAAO;AAIxB,UAAM,YACJ;AACF,eAAW,KAAK,QAAQ,SAAS,SAAS,GAAG;AAC3C,YAAM,MAAM,EAAE,CAAC,EAAE,QAAQ,SAAS,KAAK;AACvC,YAAM,SAAS,iBAAAD,QAAK,QAAQ,iBAAAA,QAAK,QAAQ,GAAG,GAAG,GAAG;AAClD,YAAM,KAAK,MAAM;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,KAAKD,MAAK;AAGhB,QAAM,SAAS,CAAC,GAAG,QAAQ,QAAQ,CAAC,EAAE;AAAA,IAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MACjD,iBAAAC,QAAK,SAAS,CAAC,EAAE,cAAc,iBAAAA,QAAK,SAAS,CAAC,CAAC;AAAA,EACjD;AACA,SAAO,OACJ,IAAI,CAAC,CAAC,KAAK,OAAO,MAAM;AACvB,UAAM,MAAM,iBAAAA,QAAK,SAAS,GAAG;AAC7B,WAAO,UAAU,GAAG;AAAA,EAAS,OAAO;AAAA,EACtC,CAAC,EACA,KAAK,IAAI;AACd;;;AC1GA,iBAA2B;AAQ3B,IAAAE,iBAA0D;AAkB1D,IAAM,WAAW,OAAO,UAAiB;AACvC,QAAM,OAKA,CAAC;AACP,QAAM,EAAE,WAAW,IAAI,MAAM,MAAM;AAAA,IAAc,CAAC,MAChD,KAAK,KAAK;AAAA,MACR,QAAQ,EAAE;AAAA,MACV,IAAI,EAAE;AAAA,MACN,UAAU,EAAE;AAAA,MACZ,MAAM,EAAE;AAAA,IACV,CAAC;AAAA,EACH;AACA,QAAM,QAAQ,KACX,OAAO,CAAC,MAAM,EAAE,KAAK,UAAU,EAC/B,IAAI,CAAC,OAAO;AAAA,IACX,QAAQ,EAAE;AAAA,IACV,UAAU,EAAE;AAAA,IACZ,MAAM,EAAE;AAAA,IACR,eAAe;AAAA,EACjB,EAAE;AAGJ,QAAM,MAAM,UAAU,KAAK;AAC7B;AAmGA,IAAMC,cAAa,CAAC,SAAiC;AACnD,MAAI,IAAI,SAAS;AACjB,SAAO,MAAM;AACX,QAAK,IAAI,aAAc;AACvB,QAAI,IAAI,KAAK,KAAK,IAAK,MAAM,IAAK,IAAI,CAAC;AACvC,QAAK,IAAI,KAAK,KAAK,IAAK,MAAM,GAAI,KAAK,CAAC,IAAK;AAC7C,aAAS,IAAK,MAAM,QAAS,KAAK;AAAA,EACpC;AACF;AAyBA,IAAM,kBAAkB,CACtB,OACqB;AAAA,EACrB,QAAQ,EAAE;AAAA,EACV,SAAS,EAAE;AAAA,EACX,MAAM,EAAE;AAAA,EACR,MAAM,EAAE;AAAA,EACR,KAAK,EAAE,OAAO;AAChB;AAUA,IAAM,qBAAqB,CACzB,OACkC;AAAA,EAClC,QAAQ,EAAE;AAAA,EACV,SAAS,EAAE;AAAA,EACX,MAAM,EAAE;AAAA,EACR,MAAM,EAAE;AACV;AAuGA,IAAM,aAAa,CACjB,MACA,cACA,kBACS;AACT,QAAM,MAAMA,YAAW,IAAI;AAC3B,QAAM,MAAM,IAAI;AAKhB,QAAM,eAAe,QAAQ,GAAG;AAChC,QAAM,aAAa,QAAQ,GAAG;AAC9B,QAAM,gBAAgB,MAAM;AAAA,IAC1B,EAAE,QAAQ,aAAa;AAAA,IACvB,CAAC,GAAG,MAAM,GAAG,YAAY,IAAI,CAAC;AAAA,EAChC;AACA,QAAM,cAAc,QAAQ,GAAG;AAE/B,MAAI,cAAc;AAClB,QAAM,WAAW,MAAsB;AACrC,UAAM,OAAO,gBAAgB;AAC7B,UAAM,SAAS,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC;AACvC,WAAO,SAAS,IAAI,IAAI,MAAM,IAAI,SAAS,IAAI,IAAI,MAAM,IAAI,MAAY;AAAA,EAC3E;AACA,QAAM,QAAQ,MACZ,MAAM,KAAK,EAAE,QAAQ,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,GAAG,QAAQ;AAC5D,QAAM,cAAc,MAClB,cAAc,KAAK,MAAM,IAAI,IAAI,cAAc,MAAM,CAAC;AASxD,QAAM,QAAQ,CAAC,WAAW,QAAQ,MAAM;AACxC,QAAM,eAAe,QAAQ,GAAG;AAChC,QAAM,gBAAgB,cAAc,IAAI,CAAC,GAAG,MAAM,GAAG,YAAY,IAAI,CAAC,EAAE;AACxE,QAAM,OAAkB,cAAc,IAAI,CAAC,QAAQ,OAAO;AAAA,IACxD,QAAQ,GAAG,UAAU,IAAI,CAAC;AAAA,IAC1B;AAAA,IACA,MAAM,MAAM,IAAI,MAAM,MAAM;AAAA,IAC5B,UAAU,IAAI;AAAA,EAChB,EAAE;AACF,QAAM,WAAW,MAAc,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;AAE7D,QAAM,MAAgB,CAAC;AAKvB,QAAM,aAAa,cAAc,CAAC;AAClC,gBAAc,QAAQ,CAAC,QAAQ,MAAM;AACnC,QAAI,KAAK;AAAA,MACP,GAAG;AAAA,MACH;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,KACE,iBAAiB,MAAM,IACnB,EAAE,OAAO,KAAK,GAAG,gBAAgB,MAAM,SAAS,IAChD;AAAA,IACR,CAAC;AAAA,EACH,CAAC;AAGD,aAAW,OAAO;AAChB,QAAI,KAAK,EAAE,GAAG,UAAU,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAOvD,QAAM,SAAS,KAAK,KAAK,MAAM,IAAI,IAAI,EAAE;AACzC,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,UAAM,OAAO,KAAK,MAAM,IAAI,IAAI,EAAE;AAClC,QAAI,SAAS,GAAG;AACd,UAAI,KAAK,EAAE,GAAG,UAAU,QAAQ,YAAY,GAAG,MAAM,MAAM,EAAE,CAAC;AAAA,IAChE,WAAW,SAAS,GAAG;AACrB,UAAI,KAAK;AAAA,QACP,GAAG;AAAA,QACH,QAAQ,YAAY;AAAA,QACpB,OAAO,KAAK,MAAM,IAAI,IAAI,GAAI;AAAA,MAChC,CAAC;AAAA,IACH,WAAW,SAAS,GAAG;AACrB,UAAI,KAAK;AAAA,QACP,GAAG;AAAA,QACH,QAAQ,YAAY;AAAA,QACpB,OAAO,KAAK,MAAM,IAAI,IAAI,GAAI;AAAA,MAChC,CAAC;AAAA,IACH,WAAW,SAAS,GAAG;AACrB,UAAI,KAAK;AAAA,QACP,GAAG;AAAA,QACH,QAAQ,YAAY;AAAA,QACpB,QAAQ,IAAI,IAAI;AAAA,MAClB,CAAC;AAAA,IACH,WAAW,SAAS,GAAG;AAGrB,UAAI,KAAK,EAAE,GAAG,SAAS,QAAQ,IAAQ,CAAC;AAAA,IAC1C,WAAW,SAAS,GAAG;AACrB,UAAI,KAAK,EAAE,GAAG,OAAO,KAAK,SAAS,EAAE,CAAC;AAAA,IACxC,WAAW,SAAS,GAAG;AAIrB,UAAI,KAAK;AAAA,QACP,GAAG;AAAA,QACH,KAAK,SAAS;AAAA,QACd,KAAK,aAAoB,KAAK,MAAM,IAAI,IAAI,GAAI;AAAA,MAClD,CAAC;AAAA,IACH,WAAW,SAAS,GAAG;AACrB,UAAI,KAAK;AAAA,QACP,GAAG;AAAA,QACH,KAAK,SAAS;AAAA,QACd,OAAO,QAAQ,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC;AAAA,MACxC,CAAC;AAAA,IACH,WAAW,SAAS,GAAG;AACrB,UAAI,KAAK,EAAE,GAAG,WAAW,KAAK,SAAS,EAAE,CAAC;AAAA,IAC5C,OAAO;AAEL,UAAI,IAAI,IAAI,IAAK,KAAI,KAAK,EAAE,GAAG,aAAa,KAAK,SAAS,EAAE,CAAC;AAAA;AAE3D,YAAI,KAAK;AAAA,UACP,GAAG;AAAA,UACH,KAAK,SAAS;AAAA,UACd,UAAU,KAAK,MAAM,IAAI,IAAI,EAAE;AAAA,QACjC,CAAC;AAAA,IACL;AAAA,EACF;AAIA,QAAM,cAAc;AACpB,aAAW,UAAU;AACnB,QAAI,KAAK,EAAE,GAAG,UAAU,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAMlD,QAAM,cAA2B;AAAA,IAC/B;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,QAAQ,IAAI,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE;AAAA,IAC5D;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,QAAQ,IAAI,YAAY,IAAI,YAAY;AAAA,IACnD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,QAAQ,IAAI,YAAY,IAAI,OAAO,EAAE;AAAA,IAChD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,QAAQ,IAAI,YAAY,IAAI,UAAU,MAAM,OAAO,EAAE;AAAA,IAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,QAAQ,IAAI,YAAY,IAAI,OAAO,CAAC,EAAc;AAAA,MAC3D,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,QAAQ,IAAI,YAAY,IAAI,QAAQ,EAAE;AAAA,MAC/C,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,QAAQ,IAAI,YAAY,IAAI,UAAU,MAAM,OAAO,EAAE;AAAA,MAC9D,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAGA,IAAM,aAAa,OACjB,OACA,MACA,kBACkB;AAElB,QAAM,MAAM;AAAA,IACV,KAAK,KAAK,IAAI,CAAC,OAAO;AAAA,MACpB,QAAQ,EAAE;AAAA,MACV,QAAQ,EAAE;AAAA,MACV,MAAM,EAAE;AAAA,MACR,UAAU,EAAE;AAAA,IACd,EAAE;AAAA,EACJ;AASA,QAAM,OAAO,oBAAI,IAAoB;AACrC,QAAM,QAAQ,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAEpD,aAAW,MAAM,KAAK,KAAK;AACzB,QAAI,GAAG,MAAM,UAAU;AACrB,YAAM,OACJ,GAAG,OAAO,gBACN,GAAG,KAAK,IAAI,CAAC,GAAG,MAAO,MAAM,IAAI,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,CAAE,IAC3D,GAAG;AACT,YAAM,MAAM;AAAA,QACV,GAAG;AAAA,QACH;AAAA,QACA,UAAU,EAAE,QAAQ,GAAG,QAAQ,aAAa,KAAK,YAAY,CAAC;AAAA,MAChE;AAAA,IACF,WAAW,GAAG,MAAM,YAAY;AAC9B,YAAM,MAAM;AAAA,QACV,GAAG;AAAA,QACH,CAAC,EAAE,MAAM,uBAAY,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;AAAA,QAChD,UAAU,EAAE,QAAQ,GAAG,QAAQ,aAAa,KAAK,YAAY,CAAC;AAAA,MAChE;AAAA,IACF,WAAW,GAAG,MAAM,YAAY;AAC9B,YAAM,MAAM,SAAS;AAAA,QACnB,EAAE,QAAQ,GAAG,QAAQ,UAAU,EAAE,OAAO,GAAG,MAAM,EAAE;AAAA,MACrD,CAAC;AAAA,IACH,WAAW,GAAG,MAAM,qBAAqB;AAKvC,YAAM,MAAM;AAAA,QACV,GAAG;AAAA,QACH,CAAC,EAAE,MAAM,uBAAY,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAAA,QACzC,UAAU,EAAE,QAAQ,GAAG,QAAQ,aAAa,KAAK,YAAY,CAAC;AAAA,MAChE;AACA,YAAM,MAAM,SAAS;AAAA,QACnB;AAAA,UACE,QAAQ,GAAG;AAAA,UACX,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM;AAAA;AAAA;AAAA,UAGpC,GAAI,GAAG,SAAS,EAAE,QAAQ,WAAc,IAAI,CAAC;AAAA,QAC/C;AAAA,MACF,CAAC;AAAA,IACH,WAAW,GAAG,MAAM,SAAS;AAM3B,YAAM,KAAK,IAAI;AACf,YAAM,SAAS,KAAK;AACpB,YAAM,SAAS,MAAM,MAAM,MAAM,KAAS,KAAS,IAAI,GAAG,MAAM;AAChE,iBAAW,KAAK,OAAQ,KAAI,MAAM,IAAI,EAAE,MAAM,EAAG,MAAK,IAAI,EAAE,QAAQ,EAAE;AAAA,IACxE,WAAW,GAAG,MAAM,OAAO;AACzB,YAAM,SAAS,KAAK,KAAK,GAAG,GAAG,EAAE;AACjC,YAAM,KAAK,KAAK,IAAI,MAAM;AAC1B,UAAI,IAAI;AAEN,cAAM,MAAM,IAAI,CAAC,EAAE,QAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC;AAChE,aAAK,OAAO,MAAM;AAAA,MACpB;AAAA,IACF,WAAW,GAAG,MAAM,SAAS;AAC3B,YAAM,SAAS,KAAK,KAAK,GAAG,GAAG,EAAE;AACjC,YAAM,KAAK,KAAK,IAAI,MAAM;AAC1B,UAAI,IAAI;AACN,cAAM,QAAe;AAAA,UACnB;AAAA,UACA,IAAI;AAAA,UACJ;AAAA,UACA,OAAO;AAAA,UACP,SAAS;AAAA,UACT,KAAK,GAAG;AAAA,QACV;AACA,cAAM,MAAM,IAAI,CAAC,KAAK,CAAC;AACvB,aAAK,OAAO,MAAM;AAAA,MACpB;AAAA,IACF,WAAW,GAAG,MAAM,SAAS;AAC3B,YAAM,SAAS,KAAK,KAAK,GAAG,GAAG,EAAE;AACjC,YAAM,KAAK,KAAK,IAAI,MAAM;AAC1B,UAAI,IAAI;AACN,cAAM,QAAsB;AAAA,UAC1B;AAAA,UACA,IAAI;AAAA,UACJ;AAAA,UACA,OAAO;AAAA,UACP,SAAS;AAAA,UACT,OAAO,GAAG;AAAA,QACZ;AACA,cAAM,MAAM,MAAM,CAAC,KAAK,CAAC;AACzB,aAAK,OAAO,MAAM;AAAA,MACpB;AAAA,IACF,WAAW,GAAG,MAAM,WAAW;AAC7B,YAAM,SAAS,KAAK,KAAK,GAAG,GAAG,EAAE;AACjC,YAAM,MAAM,QAAQ,CAAC,MAAM,CAAC;AAC5B,WAAK,OAAO,MAAM;AAAA,IACpB,WAAW,GAAG,MAAM,aAAa;AAC/B,YAAM,SAAS,KAAK,KAAK,GAAG,GAAG,EAAE;AACjC,YAAM,MAAM,MAAM,CAAC,MAAM,CAAC;AAC1B,WAAK,OAAO,MAAM;AAAA,IACpB,OAAO;AACL,YAAM,MAAM;AAAA,QACV,EAAE,QAAQ,KAAK,KAAK,GAAG,GAAG,EAAE,QAAQ,cAAc,KAAK;AAAA,QACvD,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF;AAmDO,IAAM,0BAA0B,CACrC,YACS;AACT,+BAAS,8BAA8B,QAAQ,IAAI,IAAI,MAAM;AAC3D,UAAM,YAAY,QAAQ,QAAQ;AAClC,UAAM,eAAe,QAAQ,WAAW;AACxC,UAAM,gBAAgB,QAAQ,gBAAgB;AAI9C,UAAM,OAA0B,EAAE,GAAG,QAAQ,KAAK;AAClD,UAAM,QAAQ,MAAM;AAAA,MAAK,EAAE,QAAQ,QAAQ,QAAQ,EAAE;AAAA,MAAG,CAAC,GAAG,MAC1D,WAAW,YAAY,GAAG,cAAc,aAAa;AAAA,IACvD;AACA,UAAM,OAA8C,CAAC;AAErD,kCAAU,YAAY;AACpB,iBAAW,QAAQ,QAAQ,QAAQ;AACjC,cAAM,QAAQ,MAAM,KAAK,QAAQ;AACjC,cAAM,MAAM,KAAK;AACjB,cAAM,MAAM,KAAK;AAIjB,mBAAW,QAAQ,MAAO,OAAM,WAAW,OAAO,MAAM,aAAa;AACrE,aAAK,KAAK,EAAE,MAAM,KAAK,MAAM,MAAM,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,iCAAS,YAAY;AACnB,iBAAW,EAAE,MAAM,KAAK,KAAM,OAAM,MAAM,QAAQ;AAAA,IACpD,CAAC;AAQD,UAAM,mBAAmB,OACvB,OACA,YACkB;AAClB,YAAM,YAAY,MAAM,QAAQ,KAAK,CAAC,EAAE,KAAK;AAC7C,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAM,SAAS,MAAM,QAAQ,KAAK,CAAC,EAAE,KAAK;AAC1C;AAAA,UACE;AAAA,UACA,GAAG,KAAK,CAAC,EAAE,IAAI,kBAAkB,KAAK,CAAC,EAAE,IAAI,QAAQ,KAAK;AAAA,QAC5D,EAAE,QAAQ,SAAS;AAAA,MACrB;AAAA,IACF;AAEA,UAAM,QAAQ,CAAC,MAAM,QAAQ;AAC3B,YAAM,WAAW,MAAM,YAAY,KAAK,SAAS,EAAE,CAAC;AACpD,mCAAS,YAAY,GAAG,UAAU,QAAQ,KAAK,MAAM;AACnD,+BAAG,6DAA6D,YAAY;AAC1E,gBAAM,iBAAiB,iBAAiB,OAAO,UAAU;AACvD,kBAAM,MAAyB,CAAC;AAChC,kBAAM,MAAM;AAAA,cACV,CAAC,MAAM;AACL,oBAAI,KAAK,gBAAgB,CAAC,CAAC;AAAA,cAC7B;AAAA,cACA,EAAE,QAAQ,IAAI,KAAK,YAAY,GAAG;AAAA,YACpC;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH,CAAC;AAED,+BAAG,qDAAqD,YAAY;AAClE,gBAAM,iBAAiB,oBAAoB,OAAO,UAAU;AAC1D,kBAAM,YAA+C,CAAC;AACtD,uBAAW,UAAU,KAAK,eAAe;AACvC,oBAAM,MAAyB,CAAC;AAChC,oBAAM,MAAM;AAAA,gBACV,CAAC,MAAM;AACL,sBAAI,KAAK,gBAAgB,CAAC,CAAC;AAAA,gBAC7B;AAAA,gBACA,EAAE,QAAQ,cAAc,MAAM,YAAY,KAAK;AAAA,cACjD;AACA,wBAAU,MAAM,IAAI;AAAA,YACtB;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH,CAAC;AAED,+BAAG,mDAAmD,YAAY;AAChE,gBAAM,iBAAiB,kBAAkB,OAAO,UAAU;AACxD,kBAAM,YAA+C,CAAC;AACtD,uBAAW,UAAU,KAAK,eAAe;AACvC,oBAAM,MAAyB,CAAC;AAChC,oBAAM,MAAM;AAAA,gBACV,CAAC,MAAM;AACL,sBAAI,KAAK,gBAAgB,CAAC,CAAC;AAAA,gBAC7B;AAAA,gBACA,EAAE,QAAQ,cAAc,MAAM,UAAU,KAAK;AAAA,cAC/C;AACA,wBAAU,MAAM,IAAI;AAAA,YACtB;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH,CAAC;AAKD,aAAK,YAAY,QAAQ,CAAC,OAAO;AAC/B,gBAAM,QAAQ,GAAG,SAAS,KAAK,GAAG,KAAK;AACvC,4BAAG,OAAO,KAAK;AAAA,YACb,iCAAiC,GAAG,KAAK;AAAA,YACzC,YAAY;AACV,oBAAM,iBAAiB,WAAW,GAAG,KAAK,IAAI,OAAO,UAAU;AAC7D,sBAAM,MAAyB,CAAC;AAChC,sBAAM,MAAM,MAAe,CAAC,MAAM;AAChC,sBAAI,KAAK,gBAAgB,CAAC,CAAC;AAAA,gBAC7B,GAAG,GAAG,KAAK;AACX,uBAAO;AAAA,cACT,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAC;AAED,+BAAG,+DAA+D,YAAY;AAC5E,gBAAM,iBAAiB,eAAe,OAAO,UAAU;AACrD,kBAAM,QAAQ,MAAM,MAAM;AAAA,cACxB,EAAE,QAAQ,IAAI,KAAK,YAAY,GAAG;AAAA,cAClC,EAAE,MAAM,MAAM,OAAO,MAAM,OAAO,KAAK;AAAA,YACzC;AAGA,kBAAM,OAAO,CAAC,GAAG,MAAM,KAAK,CAAC;AAC7B,kBAAM,UAQF,CAAC;AACL,uBAAW,CAAC,QAAQ,CAAC,KAAK,OAAO;AAK/B,sBAAQ,MAAM,IAAI;AAAA,gBAChB,MAAM,mBAAmB,EAAE,IAAI;AAAA,gBAC/B,MAAM;AAAA,kBACJ,EAAE;AAAA,gBACJ;AAAA,gBACA,OAAO,EAAE;AAAA,gBACT,OAAO,EAAE;AAAA,cACX;AAAA,YACF;AACA,mBAAO,EAAE,MAAM,QAAQ;AAAA,UACzB,CAAC;AAAA,QACH,CAAC;AAED,+BAAG,uEAAuE,YAAY;AACpF,gBAAM,iBAAiB,iBAAiB,OAAO,UAAU;AACvD,kBAAM,OAaD,CAAC;AACN,kBAAM,EAAE,MAAM,IAAI,MAAM,MAAM;AAAA,cAC5B,CAAC,MAAM;AACL,qBAAK,KAAK;AAAA,kBACR,QAAQ,EAAE;AAAA,kBACV,QAAQ,EAAE;AAAA,kBACV,IAAI,EAAE;AAAA,kBACN,SAAS,EAAE;AAAA,kBACX,UAAU,EAAE;AAAA,kBACZ,MAAM,EAAE;AAAA,kBACR,OAAO,EAAE;AAAA,kBACT,OAAO,EAAE;AAAA,kBACT,QAAQ,EAAE,aAAa;AAAA,gBACzB,CAAC;AAAA,cACH;AAAA,cACA,EAAE,QAAQ,IAAI,KAAK,UAAU,IAAI,OAAO,IAAK;AAAA,YAC/C;AAGA,iBAAK,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,cAAc,EAAE,MAAM,CAAC;AACpD,mBAAO,EAAE,OAAO,KAAK;AAAA,UACvB,CAAC;AAAA,QACH,CAAC;AAUD,0BAAG,OAAO,KAAK,uBAAuB;AAAA,UACpC;AAAA,UACA,YAAY;AACV,kBAAM;AAAA,cACJ;AAAA,cACA,OAAO,UAAU;AACf,sBAAM,kBAAkB,OACtB,YACsB;AACtB,wBAAM,UAAoB,CAAC;AAC3B,wBAAM,MAAM;AAAA,oBACV,CAAC,MAAM;AACL,8BAAQ,KAAK,EAAE,MAAM;AAAA,oBACvB;AAAA,oBACA,EAAE,QAAQ,SAAS,OAAO,IAAK;AAAA,kBACjC;AACA,0BAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AACzC,yBAAO;AAAA,gBACT;AAQA,sBAAM,UAAU,MAAM,gBAAgB,IAAI,KAAK,UAAU,GAAG;AAC5D,sBAAM,UAAU,MAAM;AAAA,kBACpB,IAAI,KAAK,WAAW,YAAY,CAAC;AAAA,gBACnC;AACA,uBAAO,EAAE,SAAS,QAAQ;AAAA,cAC5B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAKA,+BAAG,mEAAmE,YAAY;AAChF,gBAAM,iBAAiB,0BAA0B,OAAO,UAAU;AAChE,kBAAM,MAAyB,CAAC;AAChC,kBAAM,MAAM;AAAA,cACV,CAAC,MAAM;AACL,oBAAI,KAAK,gBAAgB,CAAC,CAAC;AAAA,cAC7B;AAAA,cACA,EAAE,QAAQ,KAAK,cAAc,CAAC,GAAG,cAAc,KAAK;AAAA,YACtD;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH,CAAC;AAMD,0BAAG,OAAO,CAAC,aAAa;AAAA,UACtB;AAAA,UACA,YAAY;AACV,kBAAM,iBAAiB,oBAAoB,OAAO,UAAU;AAK1D,oBAAM,SAAS,MAAM,MAAM,WAAY,KAAK,UAAU;AACtD,oBAAM,QAA2B,CAAC;AAClC,oBAAM,MAAM;AAAA,gBACV,CAAC,MAAM;AACL,wBAAM,KAAK,gBAAgB,CAAC,CAAC;AAAA,gBAC/B;AAAA,gBACA,EAAE,QAAQ,KAAK,YAAY,cAAc,KAAK;AAAA,cAChD;AACA,qBAAO,EAAE,QAAQ,MAAM;AAAA,YACzB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;;;AC/8BA,IAAAC,iBAAyB;AAEzB,IAAAA,iBAAsD;AAWtD,IAAMC,YAAW,OAAO,UAAiB;AACvC,QAAM,OAKA,CAAC;AACP,QAAM,EAAE,WAAW,IAAI,MAAM,MAAM;AAAA,IAAc,CAAC,MAChD,KAAK,KAAK;AAAA,MACR,QAAQ,EAAE;AAAA,MACV,IAAI,EAAE;AAAA,MACN,UAAU,EAAE;AAAA,MACZ,MAAM,EAAE;AAAA,IACV,CAAC;AAAA,EACH;AACA,QAAM,QAAQ,KACX,OAAO,CAAC,MAAM,EAAE,KAAK,UAAU,EAC/B,IAAI,CAAC,OAAO;AAAA,IACX,QAAQ,EAAE;AAAA,IACV,UAAU,EAAE;AAAA,IACZ,MAAM,EAAE;AAAA,IACR,eAAe;AAAA,EACjB,EAAE;AAGJ,QAAM,MAAM,UAAU,KAAK;AAC7B;AAkCA,IAAM,YAAY,kBAAG,aAAa,MAAM,MAAM,IAAI;AAClD,IAAM,YAAY,kBAAG,OAAO;AAAA,EAC1B,QAAQ;AAAA,EACR,OAAO,kBAAG,QAAQ,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;AACtC,CAAC;AAED,IAAM,iBAAiB,kBAAG,aAAa,KAAK,KAAK,GAAG;AACpD,IAAM,QAAQ,kBAAG;AAAA,EACf,kBAAG,OAAO,EAAE,MAAM,kBAAG,SAAS,QAAiB,GAAG,QAAQ,eAAe,CAAC;AAAA,EAC1E,kBAAG,OAAO,EAAE,MAAM,kBAAG,SAAS,OAAgB,EAAE,CAAC;AAAA,EACjD,kBAAG,OAAO,EAAE,MAAM,kBAAG,SAAS,SAAkB,EAAE,CAAC;AAAA,EACnD,kBAAG,OAAO,EAAE,MAAM,kBAAG,SAAS,WAAoB,EAAE,CAAC;AACvD;AAEA,IAAM,SAAS,CAAC,UAAkB,MAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC;AAErE,IAAM,sBAAsB,CAAC,YAA2C;AAC7E,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,UAAU,QAAQ,aAAa;AAErC,+BAAS,4BAA4B,QAAQ,IAAI,IAAI,MAAM;AACzD,QAAI;AAEJ,kCAAU,YAAY;AACpB,cAAQ,MAAM,QAAQ,QAAQ;AAC9B,YAAM,MAAM,KAAK;AAAA,IACnB,CAAC;AACD,iCAAS,YAAY;AACnB,YAAM,MAAM,QAAQ;AAAA,IACtB,CAAC;AAKD,UAAMC,SAAQ,YAAY;AACxB,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK;AAAA,IACnB;AAEA,iCAAS,6BAA6B,MAAM;AAC1C,0BAAK,KAAK,CAAC,kBAAG,MAAM,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG;AAAA,QAChE;AAAA,MACF,CAAC;AAAA,QACC;AAAA,QACA,OAAO,YAAY;AACjB,gBAAMA,OAAM;AACZ,gBAAM,WAAW,oBAAI,IAAoB;AACzC,qBAAW,EAAE,QAAQ,MAAM,KAAK,SAAS;AACvC,kBAAM,SAAS,SAAS,IAAI,MAAM,KAAK;AACvC,kBAAM,YAAY,MAAM,MAAM;AAAA,cAC5B;AAAA,cACA,OAAO,KAAK;AAAA,cACZ,UAAU,EAAE,OAAO,CAAC;AAAA,YACtB;AACA,sBAAU,QAAQ,CAAC,GAAG,MAAM;AAC1B,yCAAO,EAAE,OAAO,EAAE,KAAK,SAAS,IAAI,CAAC;AAAA,YACvC,CAAC;AACD,qBAAS,IAAI,QAAQ,SAAS,KAAK;AAAA,UACrC;AACA,qBAAW,UAAU,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;AAC1D,kBAAM,OAAO,MAAM,QAAQ,OAAO,EAAE,QAAQ,cAAc,KAAK,CAAC;AAChE,iBAAK,QAAQ,CAAC,GAAG,MAAM;AACrB,yCAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAAA,YAC1B,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAEA,0BAAK,KAAK,CAAC,kBAAG,MAAM,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG;AAAA,QAChE;AAAA,MACF,CAAC;AAAA,QACC;AAAA,QACA,OAAO,YAAY;AACjB,gBAAMA,OAAM;AACZ,qBAAW,EAAE,QAAAC,SAAQ,MAAM,KAAK,SAAS;AACvC,kBAAM,MAAM;AAAA,cACVA;AAAA,cACA,OAAO,KAAK;AAAA,cACZ,UAAU,EAAE,QAAAA,QAAO,CAAC;AAAA,YACtB;AAAA,UACF;AACA,gBAAM,SAAS,QAAQ,CAAC,EAAE;AAC1B,gBAAM,SAAS,MAAM,QAAQ,OAAO,EAAE,QAAQ,cAAc,KAAK,CAAC;AAElE,oBAAM;AAAA,YACJ,MAAM;AAAA,cACJ;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,OAAO,CAAC;AAAA,cACpB,OAAO;AAAA,YACT;AAAA,UACF,EAAE,QAAQ,QAAQ;AAClB,gBAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,QAAQ,cAAc,KAAK,CAAC;AACjE,qCAAO,MAAM,MAAM,EAAE,KAAK,OAAO,MAAM;AAAA,QACzC;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,iCAAS,oCAAoC,MAAM;AACjD,0BAAK,KAAK,CAAC,kBAAG,MAAM,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG;AAAA,QAC5D;AAAA,MACF,CAAC;AAAA,QACC;AAAA,QACA,OAAO,QAAQ;AACb,gBAAMD,OAAM;AACZ,gBAAM,MAAM,UAAU;AAAA,YACpB,EAAE,QAAQ,IAAI;AAAA,YACd,EAAE,QAAQ,IAAI;AAAA,YACd,EAAE,QAAQ,IAAI;AAAA,UAChB,CAAC;AACD,cAAI,cAAc;AAClB,cAAI,gBAAgB;AACpB,cAAI,UAA+C,CAAC;AACpD,qBAAW,MAAM,KAAK;AACpB,gBAAI,GAAG,SAAS,UAAU;AACxB,oBAAM,MAAM;AAAA,gBACV,GAAG;AAAA,gBACH,CAAC,IAAI,CAAC,CAAC;AAAA,gBACP,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;AAAA,cACjC;AAAA,YACF,WAAW,GAAG,SAAS,SAAS;AAC9B,oBAAMD,UAAS,KAAK;AACpB,oBAAM,UAAU,MAAM,MAAM,MAAM,GAAG,GAAG,UAAU,GAAM;AACxD,6BAAe,QAAQ;AACvB,wBAAU,CAAC,GAAG,SAAS,GAAG,OAAO;AAAA,YACnC,WAAW,GAAG,SAAS,WAAW;AAChC,oBAAM,QAAQ,MAAM,MAAM,IAAI,OAAO;AACrC,+BAAiB,MAAM;AACvB,wBAAU,QAAQ;AAAA,gBAChB,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM;AAAA,cACjD;AAAA,YACF,OAAO;AACL,oBAAM,UAAU,MAAM,MAAM;AAAA,gBAC1B,QAAQ,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,OAAO,EAAE;AAAA,cAC9C;AACA,+BAAiB,QAAQ;AACzB,wBAAU,QAAQ;AAAA,gBAChB,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM;AAAA,cACnD;AAAA,YACF;AAAA,UACF;AACA,qCAAO,gBAAgB,QAAQ,MAAM,EAAE,KAAK,WAAW;AAAA,QACzD;AAAA,QACA;AAAA,MACF;AAEA,0BAAK;AAAA,QACH;AAAA,UACE,kBAAG,MAAM,gBAAgB,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;AAAA,UACvD,kBAAG,MAAM,gBAAgB,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;AAAA,QACzD;AAAA,QACA,EAAE,QAAQ;AAAA,MACZ;AAAA,QACE;AAAA,QACA,OAAO,UAAU,aAAa;AAC5B,gBAAMC,OAAM;AACZ,gBAAM,MAAM,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,UAAU,GAAG,UAAU,KAAK,KAAK,GAAG,CAAC,CAAC;AAClE,gBAAM,MAAM,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;AACvD,qBAAW,UAAU,UAAU;AAC7B,kBAAM,MAAM;AAAA,cACV;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,OAAO,CAAC;AAAA,YACtB;AAAA,UACF;AACA,gBAAMD,UAAS,KAAK;AACpB,gBAAM,SAAS,MAAM,MAAM;AAAA,YACzB,MAAM,MAAM,MAAM,IAAI,IAAI,UAAU,GAAM;AAAA,UAC5C;AAIA,gBAAM,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC5D,qBAAW,KAAK,OAAQ,YAAW,IAAI,EAAE,QAAQ,EAAE,EAAE;AACrD,qBAAW,UAAU,UAAU;AAC7B,kBAAM,MAAM;AAAA,cACV;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,OAAO,CAAC;AAAA,YACtB;AAAA,UACF;AACA,gBAAMA,UAAS,KAAK;AACpB,gBAAM,SAAS,MAAM,MAAM;AAAA,YACzB,MAAM,MAAM,MAAM,IAAI,IAAI,UAAU,GAAM;AAAA,UAC5C;AACA,qBAAW,SAAS,QAAQ;AAC1B,uCAAO,MAAM,EAAE,EAAE;AAAA,cACf,WAAW,IAAI,MAAM,MAAM;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAEA,0BAAK,KAAK,CAAC,kBAAG,MAAM,gBAAgB,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC,CAAC,GAAG;AAAA,QACpE;AAAA,MACF,CAAC;AAAA,QACC;AAAA,QACA,OAAO,YAAY;AACjB,gBAAMC,OAAM;AACZ,gBAAM,UAAU,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC;AACpC,gBAAM,MAAM,UAAU,QAAQ,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;AAC3D,qBAAW,UAAU,SAAS;AAC5B,kBAAM,MAAM;AAAA,cACV;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,OAAO,CAAC;AAAA,YACtB;AAAA,UACF;AACA,gBAAMD,UAAS,KAAK;AACpB,gBAAM,UAAU,MAAM,MAAM,MAAM,IAAI,IAAI,UAAU,GAAM;AAC1D,gBAAM,MAAM,MAAM,QAAQ,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,OAAO,EAAE,CAAC;AAC/D,gBAAM,aAAa,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAKvD,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,OAAO,CAAC,CAAC;AAC1C,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,OAAO,CAAC;AAAA,UAC9B;AACA,gBAAMA,UAAS,KAAK;AACpB,gBAAM,UAAU,MAAM,MAAM,MAAM,IAAI,IAAI,WAAW,GAAM;AAC3D,qBAAW,KAAK,QAAS,4BAAO,WAAW,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,KAAK;AAAA,QACtE;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;AClTA,IAAAG,cAOO;AAcP,IAAAC,iBAA0D;AAwNnD,IAAM,cAAc,CAAC,YAAmC;AAC7D,+BAAS,iBAAiB,QAAQ,IAAI,IAAI,MAAM;AAC9C,QAAI;AAIJ,UAAM,OAA0B,EAAE,GAAG,QAAQ,aAAa;AAE1D,UAAM,aAAa,CAAC,WAAmB,CAAC,qBAAqB,KAAK,MAAM;AASxE,UAAM,YAAY,OAAO,SAAgB,UAAU;AACjD,YAAM,OAMA,CAAC;AACP,YAAM,OAAO;AAAA,QACX,CAAC,MACC,KAAK,KAAK;AAAA,UACR,QAAQ,EAAE;AAAA,UACV,QAAQ,EAAE;AAAA,UACV,IAAI,EAAE;AAAA,UACN,UAAU,EAAE;AAAA,UACZ,MAAM,EAAE;AAAA,QACV,CAAC;AAAA,QACH,EAAE,OAAO,IAAK;AAAA,MAChB;AAKA,YAAM,QAA0B,CAAC;AACjC,iBAAW,OAAO,MAAM;AACtB,YAAI,OAAO;AACX,cAAM,OAAO;AAAA,UACX,CAAC,MAAM;AACL,mBAAO,KAAK,IAAI,MAAM,EAAE,EAAE;AAAA,UAC5B;AAAA,UACA,IAAI,WAAW,SACX,EAAE,QAAQ,IAAI,QAAQ,cAAc,WAAW,IAAI,MAAM,EAAE,IAC3D,CAAC;AAAA,QACP;AACA,YAAI,OAAO,IAAI;AACb,gBAAM,KAAK;AAAA,YACT,QAAQ,IAAI;AAAA,YACZ,UAAU,IAAI;AAAA,YACd,MAAM,IAAI;AAAA,YACV,eAAe;AAAA,UACjB,CAAC;AAAA,MACL;AACA,UAAI,MAAM,OAAQ,OAAM,OAAO,UAAU,KAAK;AAAA,IAChD;AAEA,kCAAU,YAAY;AACpB,cAAQ,MAAM,QAAQ,QAAQ;AAC9B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK;AAAA,IACnB,CAAC;AAED,iCAAS,YAAY;AACnB,YAAM,MAAM,QAAQ;AAAA,IACtB,CAAC;AAID,UAAM,kBAAkB,QAAQ;AAChC,QAAI,iBAAiB;AACnB,mCAAS,yBAAyB,MAAM;AACtC,+BAAG,uDAAuD,YAAY;AACpE,cAAI;AACJ,cAAI;AACF,0BAAc,MAAM,gBAAgB;AAAA,UACtC,SAAS,OAAO;AAId,uCAAO,KAAK,EAAE,eAAe,KAAK;AAClC,uCAAQ,MAAgB,OAAO,EAAE,IAAI,KAAK,EAAE;AAC5C;AAAA,UACF;AACA,cAAI;AACF,kBAAM,YAAY,KAAK;AACvB,kBAAM,IAAI,kBAAkB,IAAI,CAAC;AACjC,kBAAM,QAAQ,MAAM,YAAY;AAAA,cAC9B;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,YACzB;AACA,uCAAO,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AAI/B,kBAAM,SAAS,MAAM,YAAY;AAAA,cAC/B;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,YACzB;AACA,uCAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AAChC,kBAAM,OAAwD,CAAC;AAC/D,kBAAM,YAAY,MAAqB,CAAC,MAAM,KAAK,KAAK,CAAC,GAAG;AAAA,cAC1D,QAAQ;AAAA,YACV,CAAC;AACD,uCAAO,IAAI,EAAE,aAAa,CAAC;AAC3B,uCAAO,KAAK,IAAI,CAAC,MAAM,EAAE,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAAA,UACvD,UAAE;AACA,kBAAM,YAAY,QAAQ;AAAA,UAC5B;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,iCAAS,UAAU,MAAM;AACvB,6BAAG,4DAA4D,YAAY;AACzE,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,mCAAO,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AACnC,mCAAO,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AACnC,mCAAO,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AACnC,mCAAO,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,aAAa;AAC5C,mCAAO,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC/C,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,qCAAO,UAAU,CAAC,EAAE,EAAE,EAAE,gBAAgB,UAAU,IAAI,CAAC,EAAE,EAAE;AAAA,QAC7D;AAAA,MACF,CAAC;AAED,6BAAG,4CAA4C,YAAY;AACzD,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,cAAc,OAAO,IAAI,CAAC;AAChC,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,YAAY,CAAC;AAAA,QACtC;AACA,mCAAO,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AAClC,mCAAO,UAAU,CAAC,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW;AAAA,MACxD,CAAC;AAED,6BAAG,yDAAyD,YAAY;AACtE,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACvB;AAAA,QACF;AACA,kBAAM;AAAA,UACJ,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;AAAA,QACtE,EAAE,QAAQ,eAAe,4BAAgB;AAAA,MAC3C,CAAC;AAED,6BAAG,+DAA+D,YAAY;AAC5E,cAAM,IAAI,sBAAsB,IAAI,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,kBAAM;AAAA,UACJ,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;AAAA,QACtE,EAAE,QAAQ,eAAe,4BAAgB;AACzC,cAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,QAAQ,GAAG,cAAc,KAAK,CAAC;AACpE,mCAAO,KAAK,EAAE,aAAa,CAAC;AAAA,MAC9B,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,SAAS,MAAM;AACtB,6BAAG,4DAA4D,YAAY;AACzE,cAAM,KAAK,QAAQ,IAAI,CAAC;AACxB,cAAM,KAAK,QAAQ,IAAI,CAAC;AACxB,cAAM,MAAM,SAAS,IAAI,CAAC;AAC1B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,QAC5C;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,MAAY,CAAC;AAAA,UAC9B,UAAU,EAAE,QAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,QAC5C;AAEA,cAAM,YAAY,MAAM,QAAQ,OAAO;AAAA,UACrC,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,SAAS,EAAE,aAAa,CAAC;AAEhC,cAAM,UAAU,MAAM,QAAQ,OAAO;AAAA,UACnC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO,CAAC,OAAO;AAAA,QACjB,CAAC;AACD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,mCAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,OAAO;AAEpC,cAAM,iBAAiB,MAAM,QAAQ,OAAO,EAAE,aAAa,IAAI,CAAC;AAChE,mCAAO,cAAc,EAAE,aAAa,CAAC;AAErC,cAAM,UAAU,MAAM,QAAQ,OAAO;AAAA,UACnC,aAAa;AAAA,UACb,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAAA,MAChC,CAAC;AAED,6BAAG,0DAA0D,YAAY;AACvE,cAAM,IAAI,UAAU,IAAI,CAAC;AAEzB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA,cAAM,CAAC,IAAI,IAAI,MAAM,MAAM;AAAA,UACzB;AAAA,UACA,CAAC,EAAE,MAAM,wBAAY,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAAA,UACzC,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAIA,cAAM,YAAY,MAAM,QAAQ,OAAO;AAAA,UACrC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAY;AAAA,QACd,CAAC;AACD,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,mCAAO,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,sBAAU;AAGzC,cAAM,SAAS,MAAM,QAAQ,OAAO,EAAE,QAAQ,GAAG,cAAc,KAAK,CAAC;AACrE,mCAAO,MAAM,EAAE,aAAa,CAAC;AAG7B,cAAM,aAAa,MAAM,QAAQ,OAAO;AAAA,UACtC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,OAAO,KAAK;AAAA,QACd,CAAC;AACD,mCAAO,UAAU,EAAE,aAAa,CAAC;AAGjC,cAAM,KAAK,YAAY,IAAI,CAAC;AAC5B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,OAAO,MAAM,QAAQ,OAAO;AAAA,UAChC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAY;AAAA,QACd,CAAC;AACD,mCAAO,IAAI,EAAE,aAAa,CAAC;AAAA,MAC7B,CAAC;AAED,6BAAG,8DAA8D,YAAY;AAC3E,cAAM,IAAI,eAAe,IAAI,CAAC;AAE9B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,CAAC,IAAI,IAAI,MAAM,MAAM;AAAA,UACzB;AAAA,UACA,CAAC,EAAE,MAAM,wBAAY,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAAA,UACzC,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAKA,cAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,UACpC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ,CAAC;AACD,mCAAO,QAAQ,EAAE,aAAa,CAAC;AAE/B,mCAAO,SAAS,SAAS,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,sBAAU;AAC1D,mCAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI;AAGxD,cAAM,KAAK,iBAAiB,IAAI,CAAC;AACjC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,OAAO,MAAM,QAAQ,OAAO;AAAA,UAChC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ,CAAC;AACD,mCAAO,IAAI,EAAE,aAAa,CAAC;AAAA,MAC7B,CAAC;AAED,6BAAG,+BAA+B,YAAY;AAC5C,cAAM,IAAI,UAAU,IAAI,CAAC;AACzB,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU,MAAM,QAAQ,OAAO,EAAE,QAAQ,GAAG,cAAc,KAAK,CAAC;AACtE,cAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,UACpC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,QACZ,CAAC;AACD,mCAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACnE,mCAAO,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAAA,UAChC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,QAC1C;AAIA,cAAM,SAAS,MAAM,QAAQ,OAAO;AAAA,UAClC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,mCAAO,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,UAAU,GAAG,EAAE,EAAG,EAAE;AAAA,MAChD,CAAC;AAED,6BAAG,mCAAmC,YAAY;AAChD,cAAM,IAAI,YAAY,IAAI,CAAC;AAC3B,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UAC/B,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,cAAc,MAAM,QAAQ,OAAO;AAAA,UACvC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO,UAAU,CAAC,EAAE;AAAA,QACtB,CAAC;AACD,mCAAO,YAAY,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAAA,UACnC,UAAU,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,QACpC;AACA,cAAM,cAAc,MAAM,QAAQ,OAAO;AAAA,UACvC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,QAAQ,UAAU,UAAU,SAAS,CAAC,EAAE;AAAA,QAC1C,CAAC;AACD,mCAAO,YAAY,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAAA,UACnC,UAAU,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,QACxC;AAAA,MACF,CAAC;AAMD,6BAAG,8BAA8B,YAAY;AAC3C,cAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,OAAO,MAAM,QAAQ,OAAO;AAAA,UAChC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO,CAAC;AAAA,QACV,CAAC;AACD,mCAAO,IAAI,EAAE,aAAa,CAAC;AAE3B,cAAM,MAAM,MAAM,QAAQ,OAAO,EAAE,QAAQ,GAAG,cAAc,KAAK,CAAC;AAClE,mCAAO,GAAG,EAAE,aAAa,CAAC;AAAA,MAC5B,CAAC;AAOD,6BAAG,iDAAiD,YAAY;AAC9D,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA;AAAA,UACE,MAAM,QAAQ,OAAO,EAAE,QAAQ,GAAG,cAAc,MAAM,QAAQ,EAAE,CAAC;AAAA,QACnE,EAAE,aAAa,CAAC;AAEhB;AAAA,UACE,MAAM,QAAQ,OAAO;AAAA,YACnB,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,QAAQ;AAAA,YACR,UAAU;AAAA,UACZ,CAAC;AAAA,QACH,EAAE,aAAa,CAAC;AAIhB,cAAM,UAAU,MAAM,QAAQ,OAAO;AAAA,UACnC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,QAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAGhD,cAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,UACpC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO;AAAA,UACP,UAAU;AAAA,QACZ,CAAC;AACD,mCAAO,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,MACnD,CAAC;AAED,6BAAG,oDAAoD,YAAY;AACjE,cAAM,IAAI,QAAQ,IAAI,CAAC;AACvB,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAIA,cAAM,KAAK,UAAU,CAAC,EAAE,QAAQ,QAAQ;AACxC,cAAM,SAAS,IAAI,KAAK,KAAK,GAAM;AACnC,cAAM,SAAS,IAAI,KAAK,KAAK,GAAM;AACnC,cAAM,YAAY,MAAM,QAAQ,OAAO;AAAA,UACrC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,eAAe;AAAA,UACf,gBAAgB;AAAA,QAClB,CAAC;AACD,mCAAO,UAAU,MAAM,EAAE,KAAK,CAAC;AAC/B,cAAM,gBAAgB,MAAM,QAAQ,OAAO;AAAA,UACzC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,eAAe;AAAA,QACjB,CAAC;AACD,mCAAO,cAAc,MAAM,EAAE,KAAK,CAAC;AAAA,MACrC,CAAC;AAED,6BAAG,uDAAuD,YAAY;AASpE,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM,UAAU,CAAC,EAAE;AACzB,cAAM,YAAY,MAAM,QAAQ,OAAO;AAAA,UACrC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,eAAe;AAAA,QACjB,CAAC;AACD,mCAAO,SAAS,EAAE,QAAQ,CAAC,CAAC;AAG5B,cAAM,aAAa,MAAM,QAAQ,OAAO;AAAA,UACtC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,gBAAgB;AAAA,QAClB,CAAC;AACD,mCAAO,UAAU,EAAE,QAAQ,CAAC,CAAC;AAAA,MAC/B,CAAC;AAED,6BAAG,4DAA4D,YAAY;AACzE,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA,cAAM,MAAM,MAAM,QAAQ,OAAO;AAAA,UAC/B,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,OAAO,UAAU,CAAC,EAAE;AAAA,QACtB,CAAC;AACD,mCAAO,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ;AAAA,UACnC,UAAU,CAAC,EAAE;AAAA,UACb,UAAU,CAAC,EAAE;AAAA,QACf,CAAC;AAAA,MACH,CAAC;AAED,6BAAG,iEAAiE,YAAY;AAC9E,cAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAGA,cAAM,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM;AAC3C,cAAM,MAAM,MAAM,QAAQ,OAAO;AAAA,UAC/B,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,eAAe;AAAA,QACjB,CAAC;AACD,mCAAO,GAAG,EAAE,aAAa,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,qEAAqE,YAAY;AAClF,cAAM,IAAI,aAAa,IAAI,CAAC;AAI5B,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU;AAAA,QACZ;AAIA,cAAM,OAAO,IAAI,KAAK,UAAU,CAAC,EAAE,QAAQ,QAAQ,IAAI,GAAM;AAC7D,cAAM,MAAM,MAAM,QAAQ,OAAO;AAAA,UAC/B,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,gBAAgB;AAAA,QAClB,CAAC;AACD,mCAAO,GAAG,EAAE,aAAa,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,wCAAwC,YAAY;AACrD,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,WAAW,GAAG;AACxB,cAAM,IAAI,WAAW,GAAG;AACxB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,QAAQ,GAAG,cAAc,KAAK,CAAC;AACpE,mCAAO,KAAK,EAAE,aAAa,CAAC;AAC5B,mCAAO,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAAA,MAC7C,CAAC;AAMD,6BAAG,oDAAoD,YAAY;AACjE,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,SAAS,MAAM,GAAG;AACxB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC7B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,OAAO,CAAC;AAAA,QAC9B;AACA,cAAM,MAAM,MAAM,QAAQ,OAAO,EAAE,QAAQ,MAAM,GAAG,SAAS,CAAC;AAC9D,mCAAO,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,MAAM,EAAE,KAAK,CAAC;AAAA,MACxE,CAAC;AAED,6BAAG,0DAA0D,YAAY;AACvE,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,SAAS,MAAM,GAAG;AACxB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC7B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,OAAO,CAAC;AAAA,QAC9B;AACA,cAAM,MAAM,MAAM,QAAQ,OAAO,EAAE,QAAQ,OAAO,GAAG,WAAW,CAAC;AACjE,mCAAO,GAAG,EAAE,aAAa,CAAC;AAC1B,mCAAO,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,KAAK;AAAA,MAClC,CAAC;AAED,6BAAG,+CAA+C,YAAY;AAC5D,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC7B;AACA,cAAM,MAAM,MAAM,QAAQ,OAAO,EAAE,QAAQ,OAAO,GAAG,QAAQ,CAAC;AAC9D,mCAAO,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAWD,iCAAS,yBAAyB,MAAM;AACtC,YAAM,eAAe,OAAO,YAAsB;AAChD,mBAAW,KAAK;AACd,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AAAA,MACJ;AAEA,YAAM,mBAAmB,OAAO,aAC7B,MAAM,QAAQ,OAAO,EAAE,QAAQ,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK;AAKxE,YAAM,yBAAyB,OAC7B,SACA,aACG;AACH,YAAI;AACJ,YAAI;AACJ,YAAI;AACF,oBAAU,MAAM,iBAAiB,OAAO;AAAA,QAC1C,SAAS,GAAG;AACV,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,OAAW,4BAAO,KAAK,EAAE,eAAe,2BAAe;AAAA,YAChE,4BAAO,OAAO,EAAE,QAAQ,SAAS,KAAK,CAAC;AAAA,MAC9C;AAEA,6BAAG,6DAA6D,YAAY;AAC1E,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,KAAK,GAAG;AACtB,cAAM,SAAS,KAAK,GAAG;AACvB,cAAM,SAAS,KAAK,GAAG;AACvB,cAAM,MAAM,KAAK,GAAG;AACpB,cAAM,aAAa,CAAC,OAAO,QAAQ,QAAQ,GAAG,CAAC;AAG/C,mCAAO,MAAM,iBAAiB,MAAM,GAAG,EAAE,CAAC,EAAE;AAAA,UAC1C,CAAC,OAAO,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAAA,QACpC;AAEA,mCAAO,MAAM,iBAAiB,GAAG,GAAG,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;AAE/D,mCAAO,MAAM,iBAAiB,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;AAGlE,mCAAO,MAAM,iBAAiB,MAAM,GAAG,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;AACjE,mCAAO,MAAM,iBAAiB,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;AAElE,mCAAO,MAAM,iBAAiB,MAAM,GAAG,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;AAAA,MACpE,CAAC;AAED,6BAAG,qDAAqD,YAAY;AAClE,cAAM,MAAM,IAAI;AAChB,cAAM,SAAS,KAAK,GAAG;AACvB,cAAM,eAAe,KAAK,GAAG;AAC7B,cAAM,MAAM,KAAK,GAAG;AACpB,cAAM,YAAY,KAAK,GAAG;AAC1B,cAAM,aAAa,CAAC,QAAQ,cAAc,KAAK,SAAS,CAAC;AAIzD,mCAAO,MAAM,iBAAiB,MAAM,GAAG,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;AAG/D,mCAAO,MAAM,iBAAiB,MAAM,GAAG,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;AAAA,MAC9D,CAAC;AAED,6BAAG,sDAAsD,YAAY;AACnE,cAAM,MAAM,IAAI;AAChB,cAAM,SAAS,MAAM,GAAG;AACxB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC;AAE7D,cAAM,MAAgB,CAAC;AACvB,cAAM,MAAM,cAAc,CAAC,MAAM,IAAI,KAAK,EAAE,MAAM,GAAG;AAAA,UACnD,QAAQ,OAAO,GAAG;AAAA,QACpB,CAAC;AACD,mCAAO,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;AAAA,MAC9B,CAAC;AAED,6BAAG,kEAAkE,YAAY;AAC/E,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,MAAM,MAAM,GAAG;AACrB,cAAM,MAAM,MAAM,GAAG;AACrB,cAAM,MAAM,KAAK,GAAG;AACpB,cAAM,YAAY,KAAK,GAAG;AAC1B,cAAM,aAAa,CAAC,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,SAAS,CAAC;AAGtD,cAAM,uBAAuB,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;AAExD,cAAM,uBAAuB,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC;AAEvD,cAAM,uBAAuB,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;AAEvD,cAAM,uBAAuB,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;AAAA,MACtD,CAAC;AAED,6BAAG,uEAAuE,YAAY;AACpF,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAErC,YAAI;AACJ,YAAI;AACJ,YAAI;AACF,kBAAQ,MAAM,MAAM,MAAM,EAAE,QAAQ,OAAO,GAAG,UAAU,CAAC;AAAA,QAC3D,SAAS,GAAG;AACV,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,OAAW,4BAAO,KAAK,EAAE,eAAe,2BAAe;AAAA,YAChE,4BAAO,KAAK,EAAE,KAAK,CAAC;AAAA,MAC3B,CAAC;AAOD,6BAAG,iDAAiD,YAAY;AAC9D,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,SAAS,GAAG;AAC1B,cAAM,QAAQ,SAAS,GAAG;AAC1B,cAAM,aAAa,CAAC,OAAO,KAAK,CAAC;AAGjC,mCAAO,MAAM,iBAAiB,UAAU,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;AAE/D,mCAAO,MAAM,iBAAiB,UAAU,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;AAEhE,mCAAO,MAAM,iBAAiB,SAAS,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;AAAA,MAChE,CAAC;AAED,6BAAG,4DAA4D,YAAY;AACzE,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,aAAa,GAAG;AAC9B,cAAM,QAAQ,aAAa,GAAG;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC;AAE5D,cAAM,MAAgB,CAAC;AACvB,cAAM,MAAM,cAAc,CAAC,MAAM,IAAI,KAAK,EAAE,MAAM,GAAG;AAAA,UACnD,QAAQ,cAAc,GAAG;AAAA,QAC3B,CAAC;AACD,mCAAO,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;AAAA,MAC7B,CAAC;AAED,6BAAG,0CAA0C,YAAY;AACvD,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,aAAa,GAAG;AAC9B,cAAM,QAAQ,aAAa,GAAG;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC;AAG5D,cAAM,QAAQ,MAAM,MAAM,MAAM,EAAE,QAAQ,cAAc,GAAG,GAAG,CAAC;AAC/D,mCAAO,KAAK,EAAE,KAAK,CAAC;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,2BAA2B,MAAM;AACxC,6BAAG,sDAAsD,YAAY;AACnE,cAAM,IAAI,OAAO,IAAI,CAAC;AACtB,cAAM,QAAQ,MAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,mCAAO,MAAM,UAAU,EAAE,KAAK,CAAC;AAC/B,cAAM,SAAS,MAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpD,mCAAO,OAAO,UAAU,EAAE,KAAK,CAAC;AAAA,MAClC,CAAC;AAOD,6BAAG,6DAA6D,YAAY;AAC1E,cAAM,IAAI,WAAW,IAAI,CAAC;AAC1B,cAAM,OAAO,YAAY;AACvB,gBAAM,MAA6B,CAAC;AACpC,gBAAM,MAAM;AAAA,YACV,CAAC,MAAM;AACL,kBAAI,WAAW,EAAE;AAAA,YACnB;AAAA,YACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,UAClC;AACA,iBAAO,IAAI;AAAA,QACb;AAEA,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,EAAE,CAAC,CAAC;AAClD,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,CAAC;AAG3B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;AACnD,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE;AAG5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,EAAE,CAAC,CAAC;AAClD,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE;AAG5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE;AAAA,MAC9B,CAAC;AASD,6BAAG,+DAA+D,YAAY;AAC5E,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,aAAa,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;AAClD,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,GAAK;AAC1D,mCAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC;AAAA,MAC7D,CAAC;AAED,6BAAG,oEAAoE,YAAY;AACjF,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,mBAAmB,IAAI,CAAC;AACpC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;AAClD,cAAM,CAAC,KAAK,IAAI,MAAM,MAAM;AAAA,UAC1B;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC3B;AAGA,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,MAAM,GAAG,CAAC,CAAC;AAC9D,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,GAAK;AAC1D,cAAM,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAChD,mCAAO,IAAI,EAAE,aAAa,CAAC;AAK3B,mCAAO,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE;AAC1B,cAAM,YAA6D,CAAC;AACpE,cAAM,MAAM,MAAqB,CAAC,MAAM,UAAU,KAAK,CAAC,GAAG;AAAA,UACzD,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO,KAAK,CAAC,EAAE;AAAA,QACjB,CAAC;AACD,mCAAO,SAAS,EAAE,aAAa,CAAC;AAAA,MAClC,CAAC;AAMD,6BAAG,0DAA0D,YAAY;AACvE,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,OAAO,YAAY;AACvB,gBAAM,MAA6B,CAAC;AACpC,gBAAM,MAAM;AAAA,YACV,CAAC,MAAM;AACL,kBAAI,WAAW,EAAE;AAAA,YACnB;AAAA,YACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,UAClC;AACA,iBAAO,IAAI;AAAA,QACb;AAEA,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;AACnD,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE;AAG5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;AACnD,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE;AAG5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;AACnD,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE;AAG5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,CAAC;AAAA,MAC7B,CAAC;AAOD,6BAAG,uFAAuF,YAAY;AACpG,cAAM,IAAI,mBAAmB,IAAI,CAAC;AAClC,cAAM,OAAO,YAAY;AACvB,gBAAM,MAA6B,CAAC;AACpC,gBAAM,MAAM;AAAA,YACV,CAAC,MAAM;AACL,kBAAI,WAAW,EAAE;AAAA,YACnB;AAAA,YACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,UAClC;AACA,iBAAO,IAAI;AAAA,QACb;AAEA,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,CAAC;AAG3B,cAAM,MAAM,WAAW,EAAE,QAAQ,GAAG,cAAc,KAAK,GAAG,EAAE;AAC5D,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE;AAG5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,mCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,CAAC;AAAA,MAC7B,CAAC;AAUD,mCAAS,wBAAwB,MAAM;AACrC,cAAM,OAAO,aAAa,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG;AAErD,+BAAG,4CAA4C,YAAY;AACzD,gBAAM,OAAO,MAAM,KAAK;AACxB,sCAAQ,MAAM,MAAM,UAAU,CAAC,GAAG,OAAO,EAAE,GAAG,aAAa,EAAE;AAAA,YAC3D,OAAO;AAAA,UACT;AACA,qCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,OAAO,EAAE;AAAA,QACrC,CAAC;AAED,+BAAG,oDAAoD,YAAY;AACjE,gBAAM,OAAO,MAAM,KAAK;AAGxB,gBAAM,MAAM,UAAU,CAAC,GAAG,OAAO,CAAC;AAClC,qCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,IAAI;AAE9B,gBAAM,MAAM,UAAU,CAAC,GAAG,IAAI;AAC9B,qCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,IAAI;AAE9B,gBAAM,MAAM,UAAU,CAAC,GAAG,OAAO,CAAC;AAClC,qCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;AAAA,QACpC,CAAC;AAED,+BAAG,6CAA6C,YAAY;AAC1D,gBAAM,OAAO,MAAM,KAAK;AACxB,gBAAM,MAAM,UAAU,CAAC,CAAC;AACxB,qCAAO,MAAM,KAAK,CAAC,EAAE,KAAK,IAAI;AAAA,QAChC,CAAC;AAED,+BAAG,+DAA+D,YAAY;AAG5E,gBAAM,OAAO,MAAM,KAAK;AACxB,gBAAM,IAAI,UAAU,IAAI,CAAC;AACzB,gBAAM,EAAE,YAAY,cAAc,IAAI,MAAM,MAAM;AAAA,YAChD,CAAC,EAAE,QAAQ,EAAE,CAAC;AAAA,YACd,OAAO;AAAA,UACT;AACA,qCAAO,UAAU,EAAE,KAAK,CAAC;AACzB,qCAAO,aAAa,EAAE,KAAK,OAAO,CAAC;AAAA,QACrC,CAAC;AAED,+BAAG,+CAA+C,YAAY;AAC5D,gBAAM,OAAiB,CAAC;AACxB,gBAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;AACxD,qCAAO,KAAK,KAAK,CAAC,MAAM,EAAE,WAAW,aAAa,CAAC,CAAC,EAAE,KAAK,KAAK;AAChE,qCAAO,IAAI,EAAE,IAAI,UAAU,YAAY;AAAA,QACzC,CAAC;AAAA,MACH,CAAC;AAYD,mCAAS,yBAAyB,MAAM;AAEtC,cAAM,YAAY,OAAO,WAAmB;AAC1C,gBAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC;AACxD,gBAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM;AAGnD,cAAI,KAAM,OAAM,MAAM,IAAI,CAAC,EAAE,GAAG,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC;AACpD,iBAAO,SAAS;AAAA,QAClB;AAEA,+BAAG,wDAAwD,YAAY;AAIrE,gBAAM,IAAI,WAAW,IAAI,CAAC;AAC1B,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC;AAChE,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,KAAK;AACrC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,EAAE,CAAC,CAAC;AACvD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAGpC,gBAAM,KAAK,iBAAiB,IAAI,CAAC;AACjC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,IAAI,eAAe,EAAE,CAAC,CAAC;AACxD,qCAAO,MAAM,UAAU,EAAE,CAAC,EAAE,KAAK,IAAI;AAAA,QACvC,CAAC;AAED,+BAAG,gEAAgE,YAAY;AAC7E,gBAAM,IAAI,WAAW,IAAI,CAAC;AAC1B,gBAAM,MAAM,UAAU;AAAA,YACpB,EAAE,QAAQ,GAAG,QAAQ,WAAW,IAAI,CAAC,IAAI,eAAe,GAAG;AAAA,UAC7D,CAAC;AAID,gBAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAM;AAC7D,gBAAM,MAAM,IAAI;AAAA,YACd,EAAE,GAAI,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAa,IAAI,EAAE;AAAA,UAC5D,CAAC;AACD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAIpC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,EAAE,CAAC,CAAC;AACvD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AACpC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,EAAE,CAAC,CAAC;AACvD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AACpC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,GAAG,CAAC,CAAC;AACxD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AACpC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,EAAE,CAAC,CAAC;AACvD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAGpC,gBAAM,UAAU,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAM;AAC9D,gBAAM,MAAM,IAAI;AAAA,YACd,EAAE,GAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAa,IAAI,GAAG;AAAA,UAC9D,CAAC;AACD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,KAAK;AACrC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,GAAG,CAAC,CAAC;AACxD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,QACtC,CAAC;AAED,+BAAG,kEAAkE,YAAY;AAC/E,gBAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,gBAAM,MAAM,UAAU;AAAA,YACpB,EAAE,QAAQ,GAAG,QAAQ,WAAW,IAAI,CAAC,IAAI,eAAe,EAAE;AAAA,UAC5D,CAAC;AACD,gBAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAM;AAC7D,gBAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,qCAAO,IAAI,EAAE,YAAY;AAGzB,gBAAM,MAAM,IAAI,CAAC,EAAE,GAAI,MAAgB,IAAI,EAAE,CAAC,CAAC;AAC/C,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,KAAK;AAErC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,EAAE,CAAC,CAAC;AACvD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,QACtC,CAAC;AAED,+BAAG,0DAA0D,YAAY;AACvE,gBAAM,IAAI,YAAY,IAAI,CAAC;AAC3B,gBAAM,MAAM,UAAU;AAAA,YACpB,EAAE,QAAQ,GAAG,QAAQ,WAAW,IAAI,CAAC,IAAI,eAAe,EAAE;AAAA,UAC5D,CAAC;AACD,gBAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAM;AAC7D,gBAAM,MAAM,IAAI;AAAA,YACd,EAAE,GAAI,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAa,IAAI,EAAE;AAAA,UAC5D,CAAC;AACD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,KAAK;AAGrC,gBAAM,MAAM,MAAM,CAAC,CAAC,CAAC;AACrB,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,QACtC,CAAC;AAED,+BAAG,wDAAwD,YAAY;AACrE,gBAAM,IAAI,UAAU,IAAI,CAAC;AACzB,gBAAM,MAAM,UAAU;AAAA,YACpB,EAAE,QAAQ,GAAG,QAAQ,WAAW,IAAI,CAAC,IAAI,eAAe,EAAE;AAAA,UAC5D,CAAC;AACD,gBAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAM;AAC7D,gBAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,gBAAM,MAAM,MAAM,CAAC,EAAE,GAAG,MAAM,OAAO,SAAS,CAAC,CAAC;AAChD,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,KAAK;AACrC,qCAAO,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACvC,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAEpC,gBAAM,MAAM,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,GAAM;AAC1C,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,KAAK;AACrC,gBAAM,MAAM,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC;AACrC,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAEpC,gBAAM,MAAM,WAAW,EAAE,QAAQ,GAAG,cAAc,KAAK,GAAG,CAAC;AAC3D,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,QACtC,CAAC;AAED,+BAAG,oEAAoE,YAAY;AAKjF,gBAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,gBAAM,MAAM,mBAAmB,IAAI,CAAC;AACpC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;AAClD,gBAAM,CAAC,KAAK,IAAI,MAAM,MAAM;AAAA,YAC1B;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,UAC3B;AACA,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,KAAK;AACrC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,MAAM,GAAG,CAAC,CAAC;AAC9D,qCAAO,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,QACtC,CAAC;AAED,+BAAG,gDAAgD,YAAY;AAM7D,gBAAM,SAAS,UAAU,IAAI,CAAC;AAC9B,gBAAM,WAAW,eAAe,IAAI,CAAC;AACrC,gBAAM,MAAM,UAAU;AAAA,YACpB,EAAE,QAAQ,QAAQ,QAAQ,WAAW,IAAI,CAAC,IAAI,eAAe,GAAG;AAAA,YAChE,EAAE,QAAQ,UAAU,QAAQ,WAAW,IAAI,CAAC,GAAG;AAAA,UACjD,CAAC;AACD,gBAAM,WAAW,OAAO,WAAmB;AACzC,gBAAI;AACJ,kBAAM,MAAM;AAAA,cACV,CAAC,MAAM;AACL,sBAAM;AAAA,cACR;AAAA,cACA,EAAE,QAAQ,cAAc,KAAK;AAAA,YAC/B;AACA,mBAAO;AAAA,UACT;AACA,sCAAQ,MAAM,SAAS,MAAM,IAAI,aAAa,EAAE,KAAK,EAAE;AACvD,sCAAQ,MAAM,SAAS,QAAQ,IAAI,aAAa,EAAE,cAAc;AAAA,QAClE,CAAC;AAAA,MACH,CAAC;AAED,6BAAG,yDAAyD,YAAY;AACtE,cAAM,IAAI,SAAS,IAAI,CAAC;AACxB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,KAAK,UAAU,IAAI,CAAC;AAC1B,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,IAAI,GAAM;AACnD,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,mCAAO,KAAM,EAAE,EAAE,KAAK,EAAE;AAExB,mCAAO,KAAM,KAAK,EAAE,KAAK,CAAC;AAC1B,cAAM,QAAQ,MAAM,MAAM,IAAI;AAAA,UAC5B,EAAE,GAAI,MAAgB,IAAI,KAAM,KAAK,EAAE;AAAA,QACzC,CAAC;AAID,cAAM,YAAY,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,mCAAO,SAAS,EAAE,YAAY;AAC9B,mCAAO,UAAW,KAAK,EAAE,KAAK,EAAE;AAChC,mCAAO,UAAW,IAAI,EAAE,KAAK,KAAM,IAAI;AAAA,MACzC,CAAC;AAED,6BAAG,sCAAsC,YAAY;AACnD,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,QAAQ,eAAe,IAAI,CAAC;AAClC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,UAAU,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,GAAO;AAChE,cAAM,UAAU,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,mCAAO,OAAO,EAAE,YAAY;AAK5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AACzC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC7B;AACA,cAAM,UAAU;AAChB,cAAM,UAAU,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,GAAO;AAChE,mCAAO,QAAQ,MAAM,EAAE,gBAAgB,CAAC;AACxC,mCAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAC1D,mCAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC,EAAE,YAAY;AAAA,MAC9D,CAAC;AAMD,6BAAG,gFAAgF,YAAY;AAC7F,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAGA,cAAM,UAAU;AAChB,cAAM,UAAU,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;AAC1D,cAAM,IAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC5C,mCAAO,CAAC,EAAE,YAAY;AACtB,mCAAO,EAAE,KAAK,EAAE,KAAK,CAAC;AAGtB,cAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAG1C,cAAM,UAAU;AAChB,cAAM,UAAU,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,GAAO;AAChE,cAAM,IAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC5C,mCAAO,CAAC,EAAE,YAAY;AACtB,mCAAO,EAAE,KAAK,EAAE,KAAK,CAAC;AAKtB,cAAM,OAAO,MAAM,MAAM,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACrD,mCAAO,IAAI,EAAE,QAAQ,CAAC,CAAC;AAIvB,cAAM,OAAyB,CAAC;AAChC,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5D,mCAAO,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE;AAC7B,mCAAO,KAAK,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AAC7B,mCAAO,KAAK,CAAC,GAAG,OAAO,EAAE,KAAK,KAAK;AAAA,MACrC,CAAC;AAED,6BAAG,+CAA+C,YAAY;AAC5D,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC;AACvD,cAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,MAAM,IAAI,CAAC,EAAE,GAAI,MAAgB,IAAK,KAAe,KAAK,EAAE,CAAC,CAAC;AACpE,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC;AACxD,mCAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,YAAY;AAAA,MACzD,CAAC;AAED,6BAAG,mGAAmG,YAAY;AAShH,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,SAAS,IAAI;AACnB,gBAAM,QAAQ,MAAM;AAAA,YAClB,EAAE,QAAQ,EAAE;AAAA,YACZ,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,MAAM;AAAA,UAC7B;AACA,gBAAM,MAAM,MAAM,MAAM;AACxB,gBAAM,MAAM,UAAU;AAAA,YACpB,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,QAAQ,UAAU,IAAI,EAAE;AAAA,YACpD,EAAE,QAAQ,KAAK,UAAU,EAAE;AAAA,UAC7B,CAAC;AACD,qBAAW,UAAU;AACnB,kBAAM,MAAM;AAAA,cACV;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,OAAO,CAAC;AAAA,YACtB;AACF,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,UAC3B;AAEA,gBAAM,KAAK,KAAK,IAAI,CAAC;AACrB,cAAI,cAAc;AAClB,gBAAM,aAAa;AACnB,mBAAS,QAAQ,GAAG,QAAQ,cAAc,CAAC,aAAa,SAAS;AAC/D,kBAAM,UAAU,KAAK;AACrB,kBAAM,SAAS,MAAM,MAAM,MAAM,GAAG,GAAG,IAAI,GAAI;AAC/C,gBAAI,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG;AACxC,4BAAc;AACd;AAAA,YACF;AAGA,uBAAW,KAAK,QAAQ;AACtB,oBAAM,MAAM,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACxC,oBAAM,MAAM;AAAA,gBACV,EAAE;AAAA,gBACF,CAAC,IAAI,CAAC,CAAC;AAAA,gBACP,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;AAAA,cAChC;AAAA,YACF;AAAA,UACF;AAEA,qCAAO,WAAW,EAAE,KAAK,IAAI;AAAA,QAC/B,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAED,6BAAG,4DAA4D,YAAY;AACzE,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAGA,cAAM,UAAU;AAChB,cAAM,UAAU,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AACjE,cAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AACpD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAAA,MAChC,CAAC;AAED,6BAAG,8CAA8C,YAAY;AAC3D,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,UAAU,eAAe,IAAI,CAAC;AACpC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,QAAQ,CAAC,CAAC;AAC1D,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,QAAQ,CAAC;AAAA,QAC/B;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,IAAI,GAAO;AAClE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,cAAM,gBAAgB,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,OAAO;AAC7D,mCAAO,IAAI,EAAE,YAAY;AACzB,mCAAO,aAAa,EAAE,YAAY;AAGlC,cAAM,QAAQ,MAAM,MAAM,IAAI;AAAA,UAC5B,EAAE,GAAI,MAAgB,IAAI,WAAW;AAAA,UACrC;AAAA,QACF,CAAC;AACD,mCAAO,MAAM,MAAM,EAAE,gBAAgB,CAAC;AACtC,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAAA,MAC1D,CAAC;AAED,6BAAG,qDAAqD,YAAY;AAClE,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,KAAK,KAAK,IAAI,CAAC;AACrB,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,IAAI,GAAO;AACpD,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,kBAAM;AAAA,UACJ,MAAM,IAAI,CAAC,EAAE,GAAI,MAAgB,IAAI,GAAG,CAAC,CAAC;AAAA,QAC5C,EAAE,SAAS,YAAY;AAAA,MACzB,CAAC;AAED,6BAAG,2DAA2D,YAAY;AAGxE,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,UAAU,KAAK;AACrB,gBAAM,UAAU,MAAM,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,GAAI;AAC1D,qCAAO,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAA,QAC5B,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAOD,iCAAS,mBAAmB,MAAM;AAMhC,6BAAG,yEAAyE,YAAY;AACtF,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AAIA,gBAAM,UAAU,KAAK;AACrB,gBAAM,QAAQ,MAAM,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC;AACrD,gBAAM,IAAI,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC1C,qCAAO,CAAC,EAAE,YAAY;AACtB,qCAAO,EAAG,KAAK,EAAE,KAAK,CAAC;AAEvB,gBAAM,UAAU,KAAK;AACrB,gBAAM,SAAS,MAAM,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC5D,gBAAM,MAAM,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,qCAAO,GAAG,EAAE,YAAY;AACxB,qCAAO,IAAK,KAAK,EAAE,KAAK,CAAC;AAAA,QAC3B,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAED,6BAAG,sEAAsE,YAAY;AAOnF,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,gBAAM,CAAC,SAAS,IAAI,MAAM,MAAM;AAAA,YAC9B;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACA,gBAAM,UAAU,KAAK;AACrB,gBAAM,SAAS,MAAM,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC;AACtD,gBAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,qCAAO,IAAI,EAAE,YAAY;AAEzB,gBAAM,QAAQ,MAAM,MAAM,IAAI,CAAC,EAAE,GAAG,MAAO,IAAI,UAAU,GAAG,CAAC,CAAC;AAC9D,qCAAO,KAAK,EAAE,aAAa,CAAC;AAE5B,cAAI,KAAK;AACT,gBAAM,MAAM;AAAA,YACV,CAAC,MAAM;AACL,mBAAK,EAAE;AAAA,YACT;AAAA,YACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,UAClC;AACA,qCAAO,EAAE,EAAE,KAAK,UAAU,EAAE;AAAA,QAC9B,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAED,6BAAG,sFAAsF,YAAY;AACnG,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AAGA,gBAAM,UAAU,KAAK;AACrB,gBAAM,MAAM,MAAM,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC;AACnD,qCAAO,IAAI,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,OAAO,EAAE,KAAK,IAAI;AAI1D,gBAAM,UAAU,KAAK;AACrB,gBAAM,OAAO,MAAM,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC1D,qCAAO,KAAK,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,OAAO,EAAE,KAAK,KAAK;AAAA,QAC9D,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AASD,6BAAG,gGAAgG,YAAY;AAC7G,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,gBAAM,CAAC,EAAE,IAAI,MAAM,YAAY,OAAO,GAAG,CAAC;AAE1C,gBAAM,UAAU,KAAK;AACrB,gBAAM,IAAI,MAAM,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;AAClD,qCAAO,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AAEnD,gBAAM,UAAU,KAAK;AACrB,gBAAM,IAAI,MAAM,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,GAAM;AACvD,gBAAM,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC5C,qCAAO,OAAO,EAAE,YAAY;AAC5B,qCAAO,QAAS,KAAK,EAAE,KAAK,CAAC;AAE7B,gBAAM,MAAM,IAAI,CAAC,EAAE,GAAI,SAAmB,IAAI,GAAG,GAAG,CAAC,CAAC;AACtD,gBAAM,YAAY,OAAO,GAAG,CAAC;AAC7B,gBAAM,UAAU,KAAK;AACrB,gBAAM,IAAI,MAAM,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,GAAM;AACvD,qCAAO,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AAAA,QACrD,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAeD,iCAAS,wCAAwC,MAAM;AACrD,6BAAG,+CAA+C,YAAY;AAC5D,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,OAAO,OAAO,IAAI,CAAC;AACzB,gBAAM,SAAS,OAAO,IAAI,CAAC;AAC3B,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,QAAQ,QAAQ,KAAK,CAAC,CAAC;AACxD,gBAAM,CAAC,EAAE,IAAI,MAAM,YAAY,OAAO,MAAM,CAAC;AAC7C,gBAAM,UAAU,KAAK;AACrB,gBAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAM;AAC5D,gBAAM,IAAI,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM;AAC/C,qCAAO,CAAC,EAAE,YAAY;AACtB,qCAAO,EAAG,MAAM,EAAE,KAAK,IAAI;AAC3B,gBAAM,MAAM,IAAI,CAAC,EAAE,GAAI,GAAa,IAAI,GAAG,GAAG,CAAC,CAAC;AAIhD,gBAAM,CAAC,EAAE,IAAI,MAAM,YAAY,OAAO,MAAM,CAAC;AAC7C,gBAAM,UAAU,KAAK;AACrB,gBAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAM;AAC7D,gBAAM,MAAM,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM;AAClD,qCAAO,GAAG,EAAE,YAAY;AACxB,qCAAO,IAAK,EAAE,EAAE,KAAK,GAAG,EAAE;AAC1B,gBAAMC,UAAS,MAAM,QAAQ,OAAO;AAAA,YAClC,QAAQ,IAAK;AAAA,YACb,OAAO,IAAK;AAAA,UACd,CAAC;AACD,qCAAOA,QAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;AAAA,QACjD,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAQD,6BAAG,yEAAyE,YAAY;AACtF,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,OAAO,MAAM,IAAI,CAAC;AACxB,gBAAM,UAAU,GAAG,IAAI;AACvB,gBAAM,SAAS,OAAO,IAAI,CAAC;AAC3B,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,QAAQ,QAAQ,KAAK,CAAC,CAAC;AACxD,gBAAM,CAAC,EAAE,IAAI,MAAM,YAAY,OAAO,MAAM,CAAC;AAC7C,gBAAM,YAAY,OAAO,SAAS,CAAC;AACnC,gBAAM,UAAU,KAAK;AACrB,gBAAM,UAAU,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAM;AAC9D,gBAAM,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM;AACrD,qCAAO,KAAK,EAAE,YAAY;AAC1B,gBAAMA,UAAS,MAAM,QAAQ,OAAO;AAAA,YAClC,QAAQ,MAAO;AAAA,YACf,cAAc;AAAA,YACd,OAAO;AAAA,UACT,CAAC;AACD,qCAAOA,QAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;AAClD,qCAAOA,QAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;AAAA,QACjD,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAYD,4BAAS,OAAO,CAAC,KAAK,gCAAgC;AAAA,MACpD;AAAA,MACA,MAAM;AACJ,+BAAG,qEAAqE,YAAY;AAClF,gBAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,cAAI;AACF,kBAAM,MAAM,KAAK;AACjB,kBAAM,MAAM,KAAK;AACjB,sBAAM;AAAA,cACJ,MAAM,UAAU;AAAA,gBACd,EAAE,QAAQ,SAAS,IAAI,CAAC,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;AAAA,cAC9D,CAAC;AAAA,YACH,EAAE,QAAQ,QAAQ,2BAAe;AAAA,UACnC,UAAE;AACA,kBAAM,MAAM,QAAQ;AAAA,UACtB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AASA,4BAAS,OAAO,CAAC,KAAK,gBAAgB,EAAE,4BAA4B,MAAM;AACxE,6BAAG,2DAA2D,YAAY;AAKxE,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,UAAU,MAAM;AAAA,YACpB,EAAE,QAAQ,EAAE;AAAA,YACZ,MAAM,cAAc,IAAI,CAAC;AAAA,UAC3B;AACA,gBAAM,MAAM,UAAU,QAAQ,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;AAC3D,qBAAW,UAAU,SAAS;AAC5B,kBAAM,MAAM;AAAA,cACV;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,OAAO,CAAC;AAAA,YACtB;AAAA,UACF;AACA,gBAAM,QAAQ,IAAI,IAAI,OAAO;AAI7B,gBAAM,UAAU,KAAK;AACrB,gBAAM,CAAC,GAAG,CAAC,IAAI,MAAM,QAAQ,IAAI;AAAA,YAC/B,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAM;AAAA,YAC3C,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAM;AAAA,UAC7C,CAAC;AAID,gBAAM,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EACxB,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,OAAO,CAAC,WAAW,MAAM,IAAI,MAAM,CAAC;AAEvC,qCAAO,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,MAAM;AAEjD,qCAAO,QAAQ,MAAM,EAAE,KAAK,MAAM,IAAI;AAAA,QACxC,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAKD,6BAAG,2DAA2D,YAAY;AACxE,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,gBAAM,QAAQ,mBAAmB,IAAI,CAAC;AACtC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,gBAAM,YAAY,OAAO,GAAG,CAAC;AAC7B,gBAAM,UAAU,KAAK;AACrB,gBAAM,IAAI,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAM;AAC3D,qCAAO,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,YAAY;AAIlD,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AACzC,gBAAM,YAAY,OAAO,OAAO,CAAC;AACjC,gBAAM,UAAU,KAAK;AACrB,gBAAM,IAAI,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAM;AAC3D,qCAAO,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC,EAAE,YAAY;AACtD,qCAAO,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAAA,QACtD,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAED,6BAAG,wGAAwG,YAAY;AACrH,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,IAAI,WAAW,IAAI,CAAC;AAC1B,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,gBAAM,CAAC,EAAE,IAAI,MAAM,YAAY,OAAO,GAAG,CAAC;AAE1C,gBAAM,UAAU,KAAK;AACrB,gBAAM,OAAO,MAAM,MAAM,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,IAAI,CAAC;AAC1D,qCAAO,KAAK,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AAItD,gBAAM,CAAC,GAAG,CAAC,IAAI,MAAM,QAAQ,IAAI;AAAA,YAC/B,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAM;AAAA,YAC3C,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAM;AAAA,UAC7C,CAAC;AACD,gBAAM,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AACzD,qCAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,qCAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;AAE/B,gBAAM,MAAM,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AAC9C,gBAAM,YAAY,OAAO,GAAG,CAAC;AAC7B,gBAAM,UAAU,KAAK;AACrB,gBAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,IAAI,GAAM;AAChE,qCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AAAA,QACzD,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,SAAS,MAAM;AACtB,6BAAG,oCAAoC,YAAY;AACjD,cAAM,IAAI,SAAS,IAAI,CAAC;AACxB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,UAAU,MAAM,MAAM,MAAM;AAAA,UAChC,EAAE,GAAI,MAAgB,OAAO,OAAO;AAAA,QACtC,CAAC;AACD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,mCAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM;AACpC,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAO;AAChE,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAAA,MAC1D,CAAC;AAED,6BAAG,8DAA8D,YAAY;AAQ3E,cAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAGpD,cAAM,UAAU,MAAM,MAAM,MAAM;AAAA,UAChC,EAAE,GAAI,MAAgB,IAAI,QAAS,OAAO,OAAO;AAAA,QACnD,CAAC;AACD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAE9B,YAAI;AACJ,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,yBAAa,EAAE;AAAA,UACjB;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,UAAU;AAAA,MACvC,CAAC;AAED,6BAAG,+CAA+C,YAAY;AAC5D,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,IAAI,GAAO;AAClE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,UAAU,MAAM,MAAM,MAAM;AAAA,UAChC,EAAE,GAAI,MAAgB,IAAI,YAAY,OAAO,KAAK;AAAA,QACpD,CAAC;AACD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAAA,MAChC,CAAC;AAED,6BAAG,4DAA4D,YAAY;AACzE,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACpD,cAAM,QAAQ,MAAM,MAAM,MAAM;AAAA,UAC9B,EAAE,GAAI,MAAgB,OAAO,OAAO;AAAA,QACtC,CAAC;AACD,mCAAO,KAAK,EAAE,aAAa,CAAC;AAG5B,cAAM,SAAS,MAAM,MAAM,MAAM;AAAA,UAC/B,EAAE,GAAI,MAAgB,OAAO,OAAO;AAAA,QACtC,CAAC;AACD,mCAAO,MAAM,EAAE,aAAa,CAAC;AAAA,MAC/B,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,SAAS,MAAM;AACtB,6BAAG,0DAA0D,YAAY;AACvE,cAAM,IAAI,SAAS,IAAI,CAAC;AAIxB,cAAM,MAAM,aAAa,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,CAAC,CAAC;AACtD,mBAAW,MAAM,CAAC,GAAG,GAAG;AACtB,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,UAC1B;AAEF,mCAAO,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,IAAS,CAAC,EAAE,KAAK,CAAC;AAC7D,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAChE,mCAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,YAAY;AACzD,mCAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAAA,MAC3D,CAAC;AAED,6BAAG,gEAAgE,YAAY;AAC7E,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA,mCAAO,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,GAAK,CAAC,EAAE,KAAK,CAAC;AACzD,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAChE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AAEzB,cAAM,MAAM;AAAA,UACV,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,IAAa;AAAA,QAC3D;AAAA,MACF,CAAC;AAED,6BAAG,kDAAkD,YAAY;AAC/D,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,IAAS;AAE7C,cAAM,UAAU;AAChB,cAAM,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAO;AAClD,cAAM,UAAU;AAChB,cAAM,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAO;AAElD,cAAM,MAAM,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,GAAK;AACzC,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAO;AACjE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AAEzB,mCAAO,KAAM,KAAK,EAAE,KAAK,CAAC;AAC1B,cAAM,MAAM;AAAA,UACV,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,IAAa;AAAA,QAC3D;AAAA,MACF,CAAC;AAED,6BAAG,gCAAgC,YAAY;AAC7C,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,IAAS;AAC7C,mCAAO,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACrC,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAChE,mCAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,YAAY;AAAA,MACzD,CAAC;AAED,6BAAG,0DAA0D,YAAY;AAKvE,cAAM,WAAW,YAAY,IAAI,CAAC;AAClC,cAAM,QAAQ,kBAAkB,IAAI,CAAC;AACrC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,SAAS,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC;AAC/D,mBAAW,KAAK,CAAC,UAAU,KAAK;AAC9B,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACF,cAAM,MAAM,KAAK,IAAI,IAAI;AACzB,cAAM,MAAM,MAAM,CAAC,QAAQ,GAAG,GAAG;AAEjC,cAAM,OAAO,oBAAI,IAAgC;AACjD,cAAM,MAAM,cAAc,CAAC,MAAM;AAC/B,cAAI,EAAE,WAAW,YAAY,EAAE,WAAW;AACxC,iBAAK,IAAI,EAAE,QAAQ,EAAE,WAAW;AAAA,QACpC,CAAC;AAGD,cAAM,MAAM,KAAK,IAAI,QAAQ;AAC7B,mCAAO,GAAG,EAAE,YAAY;AACxB,mCAAO,KAAK,IAAK,MAAiB,GAAG,CAAC,EAAE,aAAa,GAAK;AAE1D,mCAAO,KAAK,IAAI,KAAK,CAAC,EAAE,cAAc;AAAA,MACxC,CAAC;AAED,6BAAG,uDAAuD,YAAY;AACpE,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,eAAe,GAAG;AAC5B,cAAM,IAAI,eAAe,GAAG;AAC5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpD,mBAAW,KAAK,CAAC,GAAG,CAAC;AACnB,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AAGF,cAAM,MAAM,mBAAmB,GAAG;AAClC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC;AACvC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC3B;AACA,cAAM,IAAI,MAAM,MAAM;AAAA,UACpB,EAAE,QAAQ,gBAAgB,GAAG,KAAK,cAAc,MAAM;AAAA,UACtD,KAAK,IAAI,IAAI;AAAA,QACf;AACA,mCAAO,CAAC,EAAE,KAAK,CAAC;AAChB,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAChE,mCAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,YAAY;AACzD,mCAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AACzD,mCAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAAA,MAC3D,CAAC;AAED,6BAAG,iDAAiD,YAAY;AAC9D,mCAAO,MAAM,MAAM,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AAClE,mCAAO,MAAM,MAAM,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MAClD,CAAC;AAED,6BAAG,gDAAgD,YAAY;AAC7D,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAGA,mCAAO,MAAM,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,IAAS,CAAC,EAAE,KAAK,CAAC;AAAA,MAClE,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,oCAAoC,MAAM;AACjD,6BAAG,kDAAkD,YAAY;AAI/D,cAAM,IAAI,YAAY,IAAI,CAAC;AAC3B,cAAM,MAAM,gBAAgB,IAAI,CAAC;AACjC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,CAAC,CAAC;AACtD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,CAAC,QAAQ,IAAI,MAAM,MAAM;AAAA,UAC7B;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC3B;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAChE,cAAM,UAAU,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AACjD,cAAM,YAAY,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG;AACrD,cAAM,QAAQ,MAAM,MAAM,IAAI;AAAA,UAC5B,EAAE,GAAG,WAAW,IAAI,SAAS,GAAG;AAAA,UAChC,EAAE,GAAG,SAAS,KAAK,KAAK,IAAI,IAAI,KAAU;AAAA,QAC5C,CAAC;AACD,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,YAAY;AACxD,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAIxD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC3B;AACA,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAC/D,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,YAAY;AACxD,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAAA,MAC1D,CAAC;AAED,6BAAG,mFAAmF,YAAY;AAOhG,cAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAChE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,cAAM,MAAM,IAAI,CAAC,EAAE,GAAG,MAAM,KAAK,KAAK,IAAI,IAAI,KAAO,OAAO,GAAG,CAAC,CAAC;AACjE,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAC/D,cAAM,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC3C,mCAAO,EAAE,EAAE,YAAY;AACvB,mCAAO,GAAI,EAAE,EAAE,KAAK,KAAK,EAAE;AAC3B,mCAAO,GAAI,KAAK,EAAE,KAAK,CAAC;AACxB,cAAM,MAAM,IAAI,CAAC,EAAE,GAAG,IAAK,IAAI,IAAU,CAAC,CAAC;AAAA,MAC7C,CAAC;AAED,6BAAG,mEAAmE,YAAY;AAKhF,cAAM,IAAI,kBAAkB,IAAI,CAAC;AACjC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAChE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAG9C,cAAM,MAAM,IAAI,CAAC,EAAE,GAAG,MAAM,KAAK,KAAK,IAAI,IAAI,KAAO,OAAO,EAAE,CAAC,CAAC;AAChE,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAC/D,cAAM,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC3C,mCAAO,EAAE,EAAE,YAAY;AACvB,mCAAO,GAAI,EAAE,EAAE,KAAK,KAAK,EAAE;AAC3B,mCAAO,GAAI,KAAK,EAAE,KAAK,CAAC;AACxB,cAAM,MAAM,IAAI,CAAC,EAAE,GAAG,IAAK,IAAI,IAAU,CAAC,CAAC;AAAA,MAC7C,CAAC;AAED,6BAAG,wGAAwG,YAAY;AAMrH,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAErC,cAAM,CAAC,EAAE,IAAI,MAAM,MAAM;AAAA,UACvB;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAChE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,KAAK,EAAE,EAAE,aAAa,GAAG,EAAE;AAGlC,cAAM,MAAM,IAAI;AAAA,UACd,EAAE,GAAG,MAAM,IAAI,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,KAAO,OAAO,EAAE;AAAA,QAC1D,CAAC;AACD,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAC/D,cAAM,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC3C,mCAAO,EAAE,EAAE,YAAY;AACvB,mCAAO,GAAI,EAAE,EAAE,KAAK,GAAG,EAAE;AACzB,mCAAO,GAAI,KAAK,EAAE,KAAK,CAAC;AACxB,cAAM,MAAM,IAAI,CAAC,EAAE,GAAG,IAAK,IAAI,IAAU,CAAC,CAAC;AAAA,MAC7C,CAAC;AAED,6BAAG,gDAAgD,YAAY;AAG7D,cAAM,IAAI,kBAAkB,IAAI,CAAC;AACjC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AAChE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,cAAM,MAAM,IAAI;AAAA,UACd,EAAE,GAAG,MAAM,IAAI,SAAS,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAU;AAAA,QAC/D,CAAC;AAED,cAAM,QAAQ,MAAM,MAAM,IAAI,CAAC,EAAE,GAAG,MAAM,IAAI,IAAU,CAAC,CAAC;AAC1D,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,YAAY;AAAA,MACxD,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,SAAS,MAAM;AACtB,6BAAG,oCAAoC,YAAY;AACjD,cAAM,IAAI,SAAS,IAAI,CAAC;AACxB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,MAAM,IAAI,CAAC,EAAE,GAAI,MAAgB,IAAI,GAAG,CAAC,CAAC;AAChD,mCAAO,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACrC,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,mCAAO,IAAI,EAAE,YAAY;AACzB,mCAAO,KAAM,EAAE,EAAE,KAAK,EAAE;AAAA,MAC1B,CAAC;AAED,6BAAG,wCAAwC,YAAY;AACrD,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,MAAgB,OAAO,OAAO,CAAC,CAAC;AACzD,mCAAO,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACrC,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,GAAO;AAC9D,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,YAAY;AAAA,MACxD,CAAC;AAED,6BAAG,iDAAiD,YAAY;AAC9D,mCAAO,MAAM,MAAM,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;AACtD,mCAAO,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MACtC,CAAC;AAED,6BAAG,gDAAgD,YAAY;AAC7D,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAGA,mCAAO,MAAM,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MAC1C,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,WAAW,MAAM;AACxB,6BAAG,mDAAmD,YAAY;AAChE,cAAM,IAAI,WAAW,IAAI,CAAC;AAC1B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAErC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAGA,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC7D,cAAM,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC3C,cAAM,MAAM,IAAI,CAAC,EAAE,GAAI,IAAc,IAAI,GAAI,GAAG,CAAC,CAAC;AAGlD,cAAM,UAAU;AAChB,cAAM,eAAe,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AACpE,cAAM,KAAK,aAAa,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,mCAAO,EAAE,EAAE,YAAY;AACvB,cAAM,mBAAmB,GAAI;AAC7B,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,IAAc,OAAO,YAAY,CAAC,CAAC;AAO5D,YAAI;AACJ,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,2BAAe,EAAE;AAAA,UACnB;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,MAAM,OAAO,EAAE;AAAA,QAC5C;AACA,mCAAO,YAAY,EAAE,KAAK,IAAI;AAG9B,mCAAO,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACvC,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC7D,cAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,mCAAO,IAAI,EAAE,YAAY;AACzB,mCAAO,KAAM,EAAE,EAAE,KAAK,gBAAgB;AACtC,mCAAO,KAAM,KAAK,EAAE,KAAK,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,4CAA4C,YAAY;AACzD,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA,mCAAO,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MACzC,CAAC;AAED,6BAAG,iDAAiD,YAAY;AAC9D,mCAAO,MAAM,MAAM,QAAQ,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;AACxD,mCAAO,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MACxC,CAAC;AAED,6BAAG,kDAAkD,YAAY;AAC/D,cAAM,KAAK,iBAAiB,IAAI,CAAC;AACjC,cAAM,KAAK,iBAAiB,IAAI,CAAC;AACjC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC;AACtD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,KAAK,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE;AAC7C,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE;AACnD,cAAM,MAAM,IAAI,MAAM;AAEtB,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,IAAc,OAAO,OAAO,CAAC,CAAC;AACvD,mCAAO,MAAM,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MAC9C,CAAC;AAED,6BAAG,2CAA2C,YAAY;AACxD,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,kBAAkB,GAAG;AAChC,cAAM,KAAK,kBAAkB,GAAG;AAChC,cAAM,KAAK,SAAS,GAAG;AACvB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC;AACtE,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AAEA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,YAA4B,OAC/B,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,EAAE,EACnE,IAAI,CAAC,OAAO,EAAE,GAAI,GAAa,OAAO,OAAO,EAAE;AAGlD,cAAM,MAAM;AAAA,UACV,OAAO;AAAA,YACL,CAAC,MAAM,EAAE,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW;AAAA,UAC9D;AAAA,QACF;AACA,cAAM,MAAM,MAAM,SAAS;AAG3B,cAAM,QAAQ,MAAM,MAAM,QAAQ;AAAA,UAChC,QAAQ,mBAAmB,GAAG;AAAA,QAChC,CAAC;AACD,mCAAO,KAAK,EAAE,KAAK,CAAC;AAGpB,cAAM,UAAU;AAChB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC7D,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc;AAEzD,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY;AACvD,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY;AAAA,MACzD,CAAC;AAED,6BAAG,2DAA2D,YAAY;AAMxE,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,iBAAiB,GAAG;AAC/B,cAAM,KAAK,iBAAiB,GAAG;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC;AACtD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,EAAE;AACpE,cAAM,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;AACvD,cAAM,MAAM;AAAA,UACV,KAAK,IAAI,CAAC,OAAO,EAAE,GAAI,GAAa,OAAO,OAAO,EAAE;AAAA,QACtD;AACA,cAAM,QAAQ,MAAM,MAAM,QAAQ;AAAA,UAChC,QAAQ,kBAAkB,GAAG;AAAA,QAC/B,CAAC;AACD,mCAAO,KAAK,EAAE,KAAK,CAAC;AAAA,MACtB,CAAC;AAED,6BAAG,uDAAuD,YAAY;AAIpE,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,yBAAyB,GAAG;AACtC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA;AAAA,UACE,MAAM,MAAM,QAAQ;AAAA,YAClB,QAAQ,0BAA0B,GAAG;AAAA,YACrC,SAAS;AAAA,UACX,CAAC;AAAA,QACH,EAAE,KAAK,CAAC;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,qBAAqB,MAAM;AAClC,6BAAG,4CAA4C,YAAY;AACzD,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,gBAAgB,GAAG;AAC9B,cAAM,KAAK,gBAAgB,GAAG;AAC9B,cAAM,QAAQ,eAAe,GAAG;AAChC,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG;AAAA,UACb,EAAE,QAAQ,GAAG;AAAA,UACb,EAAE,QAAQ,MAAM;AAAA,QAClB,CAAC;AACD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC7B;AAEA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO;AAAA,UAClB,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW;AAAA,QAC5D;AACA,cAAM,MAAM,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,GAAI,GAAa,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;AAGtE,cAAM,QAAQ,MAAM,MAAM,MAAM,EAAE,QAAQ,iBAAiB,GAAG,IAAI,CAAC;AACnE,mCAAO,KAAK,EAAE,KAAK,CAAC;AAKpB,cAAM,eAAe,OAAO,SAAyC;AACnE,cAAI,KAAoB;AACxB,gBAAM,MAAM;AAAA,YACV,CAAC,MAAM;AACL,mBAAK,EAAE;AAAA,YACT;AAAA,YACA,EAAE,QAAQ,MAAM,cAAc,MAAM,OAAO,EAAE;AAAA,UAC/C;AACA,iBAAO;AAAA,QACT;AACA,mCAAO,MAAM,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE;AACtC,mCAAO,MAAM,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE;AACtC,mCAAO,MAAM,aAAa,KAAK,CAAC,EAAE,gBAAgB,EAAE;AAAA,MACtD,CAAC;AAED,6BAAG,8DAA8D,YAAY;AAC3E,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,iBAAiB,GAAG;AAC/B,cAAM,KAAK,iBAAiB,GAAG;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC;AACtD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,KAAK,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE;AAC7C,cAAM,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;AACrD,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,IAAc,OAAO,OAAO,CAAC,CAAC;AAEvD,cAAM,QAAQ,MAAM,MAAM,MAAM;AAAA,UAC9B,QAAQ,kBAAkB,GAAG;AAAA,UAC7B,SAAS;AAAA,QACX,CAAC;AACD,mCAAO,KAAK,EAAE,KAAK,CAAC;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,cAAc,MAAM;AAC3B,6BAAG,6DAA6D,YAAY;AAC1E,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,IAAI,UAAU,EAAE;AAAA,UAC1B,EAAE,QAAQ,IAAI,UAAU,EAAE;AAAA,QAC5B,CAAC;AACD,cAAM,UAAU,MAAM,MAAM;AAAA,UAC1B,EAAE,QAAQ,IAAI,cAAc,KAAK;AAAA,UACjC;AAAA,QACF;AACA,mCAAO,OAAO,EAAE,KAAK,CAAC;AACtB,cAAM,OAA8B,CAAC;AACrC,cAAM,OAA8B,CAAC;AACrC,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,gBAAI,EAAE,WAAW,GAAI,MAAK,WAAW,EAAE;AACvC,gBAAI,EAAE,WAAW,GAAI,MAAK,WAAW,EAAE;AAAA,UACzC;AAAA,UACA,EAAE,QAAQ,OAAO,GAAG,OAAO,OAAO,IAAI;AAAA,QACxC;AACA,mCAAO,KAAK,QAAQ,EAAE,KAAK,CAAC;AAC5B,mCAAO,KAAK,QAAQ,EAAE,KAAK,CAAC;AAAA,MAC9B,CAAC;AAAA,IACH,CAAC;AAUD,iCAAS,SAAS,MAAM;AACtB,6BAAG,qDAAqD,YAAY;AAClE,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,IAAc,GAAG;AAAA,UAC5D,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;AAAA,MAClC,CAAC;AAED,6BAAG,wCAAwC,YAAY;AACrD,cAAM,IAAI,YAAY,IAAI,CAAC;AAC3B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC;AACnD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,IAAc,GAAG;AAAA,UAC5D,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;AAAA,MAC/B,CAAC;AAED,6BAAG,2DAA2D,YAAY;AACxE,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC;AACnD,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC;AACnD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,IAAc,GAAG;AAAA,UAC5D,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;AAAA,MAC/B,CAAC;AAED,6BAAG,+DAA+D,YAAY;AAM5E,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,QAAQ,UAAU,GAAG,CAAC,CAAC;AACjE,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,QAAQ,UAAU,EAAE,CAAC,CAAC;AAChE,cAAM,OAA8C,CAAC;AACrD,cAAM,MAAM;AAAA,UACV,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,EAAE,SAAS,CAAC;AAAA,UACvD,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,QAAQ,UAAU,GAAG,CAAC,CAAC;AAAA,MACvD,CAAC;AAED,6BAAG,0DAA0D,YAAY;AAKvE,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,QAAQ,UAAU,GAAG,CAAC,CAAC;AACjE,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,EAAE,CAAC,CAAC;AACvD,cAAM,OAAoD,CAAC;AAC3D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,EAAE,cAAc,CAAC;AAAA,UACjE,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,QAAQ,eAAe,EAAE,CAAC,CAAC;AAAA,MAC3D,CAAC;AAED,6BAAG,4DAA4D,YAAY;AACzE,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,QAAQ,UAAU,EAAE,CAAC,CAAC;AAChE,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,QAAQ,UAAU,EAAE,CAAC,CAAC;AAChE,cAAM,OAA8C,CAAC;AACrD,cAAM,MAAM;AAAA,UACV,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,EAAE,SAAS,CAAC;AAAA,UACvD,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,QAAQ,UAAU,EAAE,CAAC,CAAC;AAAA,MACtD,CAAC;AAED,6BAAG,4EAA4E,YAAY;AAIzF,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,QAAQ,UAAU,EAAE,CAAC,CAAC;AAChE,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,QAAQ,UAAU,EAAE,CAAC,CAAC;AAChE,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,IAAc,GAAG;AAAA,UAC5D,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;AAAA,MAC/B,CAAC;AAED,6BAAG,uEAAuE,YAAY;AACpF,cAAM,MAAM,IAAI;AAChB,cAAM,OAAO,mBAAmB,GAAG;AACnC,cAAM,OAAO,mBAAmB,GAAG;AACnC,cAAM,cAAc,kBAAkB,GAAG;AACzC,cAAM,WAAW,mBAAmB,GAAG;AACvC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,KAAK,CAAC;AAAA,QAC5B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,KAAK,CAAC;AAAA,QAC5B;AACA,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,aAAa,QAAQ,KAAK;AAAA,UACpC,EAAE,QAAQ,UAAU,QAAQ,MAAM,MAAM,OAAO;AAAA,QACjD,CAAC;AAED,cAAM,UAAU;AAChB,cAAM,OAAO,MAAM,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,KAAO,MAAM;AACpE,cAAM,YAAY,KAAK;AAAA,UACrB,CAAC,MAAM,EAAE,WAAW,eAAe,EAAE,WAAW;AAAA,QAClD;AACA,mCAAO,UAAU,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;AACzD,mCAAO,UAAU,CAAC,GAAG,IAAI,EAAE,KAAK,MAAM;AACtC,cAAM,MAAM,IAAI,UAAU,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;AAE9D,cAAM,UAAU;AAChB,cAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,IAAI,GAAK;AAC1D,cAAM,WAAW,IACd,OAAO,CAAC,MAAM,EAAE,WAAW,eAAe,EAAE,WAAW,QAAQ,EAC/D,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,MAAM,EAAE,KAAK,EAAE;AAClD,mCAAO,QAAQ,EAAE;AAAA,UACf,sBAAO,gBAAgB;AAAA,YACrB,EAAE,QAAQ,aAAa,MAAM,UAAU;AAAA,YACvC,EAAE,QAAQ,UAAU,MAAM,OAAO;AAAA,UACnC,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAED,6BAAG,iCAAiC,YAAY;AAC9C,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG,MAAM,QAAQ;AAAA,UAC3B,EAAE,QAAQ,GAAG,MAAM,QAAQ;AAAA,UAC3B,EAAE,QAAQ,GAAG,MAAM,QAAQ;AAAA,QAC7B,CAAC;AACD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UACpD,MAAM;AAAA,UACN,QAAQ,aAAa,GAAG;AAAA,UACxB,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,KAAK,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAAA,MACpC,CAAC;AAED,6BAAG,8BAA8B,YAAY;AAC3C,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,cAAc,GAAG;AAC3B,cAAM,IAAI,cAAc,GAAG;AAC3B,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG,MAAM,SAAS,GAAG,GAAG;AAAA,UAClC,EAAE,QAAQ,GAAG,MAAM,SAAS,GAAG,GAAG;AAAA,QACpC,CAAC;AACD,cAAM,UAAU,MAAM,MAAM,WAAW,EAAE,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC;AAClE,mCAAO,OAAO,EAAE,KAAK,CAAC;AACtB,cAAM,OAAO,oBAAI,IAAoB;AACrC,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA,UAC/D,QAAQ,eAAe,GAAG;AAAA,UAC1B,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AAC1B,mCAAO,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,yBAAyB,YAAY;AACtC,cAAM,MAAM,IAAI;AAChB,cAAM,MAAM,kBAAkB,GAAG;AACjC,cAAM,IAAI,gBAAgB,GAAG;AAC7B,cAAM,IAAI,gBAAgB,GAAG;AAC7B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC3B;AACA,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG,QAAQ,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,UAC/C,EAAE,QAAQ,GAAG,QAAQ,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,QACjD,CAAC;AACD,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAK;AACzD,cAAM,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,KAAK,EAAE,WAAW,CAAC;AAClE,cAAM,MAAM,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;AAEzD,cAAM,QAAQ,MAAM,MAAM,MAAM,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC;AACxD,mCAAO,KAAK,EAAE,KAAK,CAAC;AAIpB,cAAM,MAAM,oBAAI,IAAoB;AACpC,mBAAW,QAAQ,CAAC,GAAG,CAAC,GAAG;AACzB,gBAAM,MAAM,cAAc,CAAC,MAAM,IAAI,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG;AAAA,YACxD,QAAQ;AAAA,YACR,cAAc;AAAA,UAChB,CAAC;AAAA,QACH;AACA,mCAAO,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;AAC1B,mCAAO,IAAI,IAAI,CAAC,CAAC,EAAE,uBAAuB,CAAC;AAAA,MAC7C,CAAC;AAED,6BAAG,2BAA2B,YAAY;AACxC,cAAM,MAAM,IAAI;AAChB,cAAM,MAAM,eAAe,GAAG;AAC9B,cAAM,IAAI,aAAa,GAAG;AAC1B,cAAM,IAAI,aAAa,GAAG;AAC1B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC3B;AACA,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG,QAAQ,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,UAC/C,EAAE,QAAQ,GAAG,QAAQ,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,QACjD,CAAC;AACD,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAK;AACzD,cAAM,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,KAAK,EAAE,WAAW,CAAC;AAClE,cAAM,MAAM,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,OAAO,EAAE,CAAC;AAE5D,cAAM,QAAQ,MAAM,MAAM,QAAQ,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC;AAC1D,mCAAO,KAAK,EAAE,KAAK,CAAC;AACpB,cAAM,UAAU,oBAAI,IAAqB;AACzC,mBAAW,QAAQ,CAAC,GAAG,CAAC,GAAG;AACzB,gBAAM,MAAM,cAAc,CAAC,MAAM,QAAQ,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG;AAAA,YACjE,QAAQ;AAAA,YACR,cAAc;AAAA,UAChB,CAAC;AAAA,QACH;AACA,mCAAO,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK;AACjC,mCAAO,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,MAClC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,oBAAoB,MAAM;AACjC,6BAAG,0DAA0D,YAAY;AAIvE,cAAM,MAAM,IAAI;AAChB,cAAM,OAAO,GAAG,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC;AACtC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,KAAK,CAAC;AAAA,QAC5B;AACA,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,iBAAiB,IAAI,IAAI,QAAQ,KAAK;AAAA,QAClD,CAAC;AAED,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,MAAqB,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UAC3D,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;AAE3B,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,OAAO,IAAI,CAAC;AACpE,mCAAO,IAAI,EAAE,UAAU,iBAAiB,IAAI,EAAE;AAAA,MAChD,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,YAAY,MAAM;AACzB,6BAAG,uEAAuE,YAAY;AAapF,cAAM,MAAM,IAAI;AAChB,cAAM,YAAY,iBAAiB,GAAG;AACtC,cAAM,UAAU,gBAAgB,GAAG;AACnC,mBAAW,KAAK,CAAC,WAAW,OAAO,GAAG;AACpC,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AAAA,QACF;AAEA,cAAM,MAAM,SAAS;AAAA,UACnB;AAAA,YACE,QAAQ;AAAA,YACR,UAAU,EAAE,OAAO,EAAE;AAAA,YACrB,MAAM,UAAU,EAAE,QAAQ,UAAU,CAAC;AAAA,UACvC;AAAA,UACA,EAAE,QAAQ,SAAS,MAAM,UAAU,EAAE,QAAQ,QAAQ,CAAC,EAAE;AAAA,QAC1D,CAAC;AAED,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UACpD,QAAQ,YAAY,GAAG;AAAA,UACvB,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,IAAI,EAAE,UAAU,SAAS;AAChC,mCAAO,IAAI,EAAE,UAAU,OAAO;AAAA,MAChC,CAAC;AAED,6BAAG,wEAAwE,YAAY;AASrF,cAAM,OAAO,cAAc,IAAI,CAAC;AAChC,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,CAAC,CAAC,IAAI,MAAM,MAAM;AAAA,UACtB;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,eAAe,EAAE,IAAI,KAAK,CAAC,CAAC;AAKhE,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,KAAQ,IAAI;AACnE,mCAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,cAAM,MAAM,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;AAE5C,cAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AAEpE;AAAA,UACE,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,KAAQ,IAAI;AAAA,QACtD,EAAE,aAAa,CAAC;AAAA,MAClB,CAAC;AAED,6BAAG,kDAAkD,YAAY;AAC/D,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,SAAS,MAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,mCAAO,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AACrC,cAAM,YAA6D,CAAC;AACpE,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,sBAAU,KAAK,CAAC;AAAA,UAClB;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,mCAAQ,UAAU,CAAC,EAAkC,IAAI,EAAE;AAAA,UACzD;AAAA,QACF;AAAA,MACF,CAAC;AAED,6BAAG,yCAAyC,YAAY;AACtD,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,SAAS,MAAM,MAAM,SAAS;AAAA,UAClC,EAAE,QAAQ,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE;AAAA,QACtC,CAAC;AACD,mCAAO,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AACrC,cAAM,YAAqC,CAAC;AAC5C,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,sBAAU,KAAK,CAA0B;AAAA,UAC3C;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,MAAM,YAAY,KAAK;AAAA,QACpD;AACA,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,mCAAQ,UAAU,CAAC,EAAkC,IAAI,EAAE;AAAA,UACzD;AAAA,QACF;AACA,mCAAO,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAAA,MAChD,CAAC;AAED,6BAAG,wCAAwC,YAAY;AACrD,cAAM,SAAS,MAAM,MAAM,SAAS,CAAC,CAAC;AACtC,mCAAO,OAAO,IAAI,EAAE,KAAK,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,kDAAkD,YAAY;AAC/D,cAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,cAAM,SAAS,MAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,mCAAO,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AAAA,MACvC,CAAC;AAKD,mCAAS,8BAA8B,MAAM;AAG3C,uBAAe,cAAc,GAAW;AACtC,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,YACf,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACA,gBAAM,CAAC,MAAM,IAAI,MAAM,MAAM;AAAA,YAC3B;AAAA,YACA,CAAC,EAAE,MAAM,wBAAY,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAAA,YACzC,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACA,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACA,gBAAM,CAAC,MAAM,IAAI,MAAM,MAAM;AAAA,YAC3B;AAAA,YACA,CAAC,EAAE,MAAM,wBAAY,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAAA,YACzC,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACA,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACA,iBAAO,EAAE,QAAQ,OAAO;AAAA,QAC1B;AAEA,+BAAG,oFAAoF,YAAY;AACjG,gBAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,gBAAM,EAAE,OAAO,IAAI,MAAM,cAAc,CAAC;AACxC,gBAAM,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM;AAC3C,gBAAM,SAAS,MAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;AAC3D,gBAAMC,SAAQ,OAAO,IAAI,CAAC;AAE1B,qCAAOA,QAAO,OAAO,EAAE,KAAK,CAAC;AAE7B,qCAAOA,QAAO,UAAU,EAAE,EAAE,KAAK,OAAO,EAAE;AAC1C,qCAAOA,QAAO,UAAU,IAAI,EAAE,KAAK,sBAAU;AAC7C,qCAAOA,QAAO,UAAU,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAElD,qCAAOA,QAAO,MAAM,EAAE,QAAQ,MAAM;AACpC,gBAAM,YAAY,MAAM,QAAQ,OAAO;AAAA,YACrC,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,OAAO;AAAA,UACT,CAAC;AACD,qCAAO,UAAU,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ;AAAA,YAC3C;AAAA,YACA;AAAA,UACF,CAAC;AACD,qCAAO,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,EAAE;AAAA,QACxC,CAAC;AAED,+BAAG,6EAAwE,YAAY;AACrF,gBAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,gBAAM,EAAE,QAAQ,OAAO,IAAI,MAAM,cAAc,CAAC;AAChD,gBAAM,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM;AAC3C,gBAAM,SAAS,MAAM,MAAM,SAAS;AAAA,YAClC,EAAE,QAAQ,GAAG,QAAQ,QAAQ,OAAO,GAAG;AAAA,UACzC,CAAC;AACD,gBAAMA,SAAQ,OAAO,IAAI,CAAC;AAE1B,qCAAOA,QAAO,UAAU,EAAE,EAAE,KAAK,OAAO,EAAE;AAC1C,qCAAOA,QAAO,OAAO,EAAE,KAAK,CAAC;AAC7B,gBAAM,YAAY,MAAM,QAAQ,OAAO;AAAA,YACrC,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,OAAO;AAAA,UACT,CAAC;AACD,qCAAO,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,UAAU,OAAO,EAAE;AACtD,qCAAO,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,EAAE;AACtC,qCAAO,SAAS,EAAE,aAAa,CAAC;AAAA,QAClC,CAAC;AAED,+BAAG,4FAAuF,YAAY;AACpG,gBAAM,IAAI,kBAAkB,IAAI,CAAC;AACjC,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,YACf,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AAEA,gBAAM,OAAO,MAAM,MAAM,SAAS;AAAA,YAChC,EAAE,QAAQ,GAAG,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM,EAAE;AAAA,UACrD,CAAC;AACD,qCAAO,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK;AAE9B,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,EAAE,MAAM,wBAAY,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;AAAA,YACzC,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACA,gBAAM,YAAY,MAAM,MAAM,SAAS;AAAA,YACrC,EAAE,QAAQ,GAAG,QAAQ,oBAAI,KAAK,CAAC,EAAE;AAAA,UACnC,CAAC;AACD,qCAAO,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK;AAEnC,gBAAM,UAAU,MAAM,MAAM,SAAS;AAAA,YACnC,EAAE,QAAQ,qBAAqB,IAAI,CAAC,IAAI,QAAQ,oBAAI,KAAK,EAAE;AAAA,UAC7D,CAAC;AACD,qCAAO,QAAQ,IAAI,EAAE,KAAK,CAAC;AAC3B,gBAAM,YAAY,MAAM,QAAQ,OAAO;AAAA,YACrC,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,OAAO;AAAA,UACT,CAAC;AACD,qCAAO,SAAS,EAAE,aAAa,CAAC;AAAA,QAClC,CAAC;AAED,+BAAG,0DAA0D,YAAY;AACvE,gBAAM,IAAI,kBAAkB,IAAI,CAAC;AACjC,gBAAM,cAAc,CAAC;AACrB,gBAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,gBAAM,MAAM,SAAS;AAAA,YACnB,EAAE,QAAQ,GAAG,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM,EAAE;AAAA,UACrD,CAAC;AACD,gBAAM,YAAsB,CAAC;AAC7B,gBAAM,MAAM,cAAc,CAAC,MAAM,UAAU,KAAK,EAAE,MAAM,GAAG;AAAA,YACzD,QAAQ;AAAA,YACR,cAAc;AAAA,UAChB,CAAC;AACD,qCAAO,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAAA,QAC/B,CAAC;AAED,+BAAG,+CAA+C,YAAY;AAC5D,gBAAM,IAAI,mBAAmB,IAAI,CAAC;AAClC,gBAAM,IAAI,mBAAmB,IAAI,CAAC;AAClC,gBAAM,EAAE,OAAO,IAAI,MAAM,cAAc,CAAC;AACxC,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACA,gBAAM,SAAS,MAAM,MAAM,SAAS;AAAA,YAClC,EAAE,QAAQ,GAAG,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM,EAAE;AAAA,YACnD,EAAE,QAAQ,EAAE;AAAA,UACd,CAAC;AACD,qCAAO,OAAO,IAAI,CAAC,GAAG,UAAU,EAAE,EAAE,KAAK,OAAO,EAAE;AAClD,qCAAO,OAAO,IAAI,CAAC,GAAG,MAAM,EAAE,eAAe,IAAI;AACjD,qCAAO,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AACrC,qCAAO,OAAO,IAAI,CAAC,GAAG,UAAU,IAAI,EAAE,KAAK,eAAe;AAC1D,qCAAO,OAAO,IAAI,CAAC,GAAG,MAAM,EAAE,cAAc;AAAA,QAC9C,CAAC;AAED,+BAAG,wDAAwD,YAAY;AACrE,gBAAM,IAAI,kBAAkB,IAAI,CAAC;AACjC,gBAAM,EAAE,OAAO,IAAI,MAAM,cAAc,CAAC;AACxC,gBAAM,MAAM,SAAS;AAAA,YACnB,EAAE,QAAQ,GAAG,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM,EAAE;AAAA,UACrD,CAAC;AAGD,gBAAM,CAAC,IAAI,IAAI,MAAM,MAAM;AAAA,YACzB;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AACA,qCAAO,KAAK,OAAO,EAAE,KAAK,CAAC;AAC3B,qCAAO,KAAK,EAAE,EAAE,gBAAgB,OAAO,EAAE;AAEzC,gBAAM,SAAS,MAAM,QAAQ,OAAO;AAAA,YAClC,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,YAAY;AAAA,UACd,CAAC;AACD,qCAAO,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,EAAE;AACnC,qCAAO,MAAM,EAAE,aAAa,CAAC;AAAA,QAC/B,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,iBAAiB,MAAM;AAC9B,6BAAG,yEAAyE,YAAY;AAKtF,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ;AAAA,UACZ,GAAG,GAAG;AAAA,UACN,GAAG,GAAG;AAAA,UACN,GAAG,GAAG;AAAA,UACN,GAAG,GAAG;AAAA,QACR;AACA,cAAM,MAAM,UAAU,MAAM,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;AAEzD,cAAM,UAAoB,CAAC;AAC3B,YAAI;AACJ,mBAAS;AACP,gBAAM,OAAiB,CAAC;AACxB,gBAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,YACpD,QAAQ,GAAG,GAAG;AAAA,YACd;AAAA,YACA,OAAO;AAAA,UACT,CAAC;AACD,cAAI,KAAK,WAAW,EAAG;AACvB,kBAAQ,KAAK,GAAG,IAAI;AACpB,kBAAQ,KAAK,GAAG,EAAE;AAAA,QACpB;AACA,mCAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AAAA,MACvD,CAAC;AAED,6BAAG,4BAA4B,YAAY;AAGzC,cAAM,IAAI,WAAW,IAAI,CAAC;AAC1B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,OAAiB,CAAC;AACxB,cAAM,OAAO,CAAC,MAA0B;AACtC,eAAK,KAAK,EAAE,MAAM;AAAA,QACpB;AACA,cAAM,SAAS,EAAE,QAAQ,GAAG,cAAc,KAAK;AAG/C,cAAM,UAAU,MAAM,MAAM,cAAc,MAAM,MAAM;AACtD,mCAAO,QAAQ,KAAK,EAAE,KAAK,CAAC;AAC5B,mCAAO,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAExB,aAAK,SAAS;AACd,cAAM,EAAE,MAAM,IAAI,MAAM,MAAM,cAAc,MAAM;AAAA,UAChD,GAAG;AAAA,UACH,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvB,mCAAO,KAAK,EAAE,KAAK,CAAC;AAAA,MACtB,CAAC;AAED,6BAAG,+EAA+E,YAAY;AAC5F,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,OAAO,MAAM,GAAG;AACtB,cAAM,OAAO,MAAM,GAAG;AACtB,cAAM,OAAO,MAAM,GAAG;AACtB,cAAM,OAAO,MAAM,GAAG;AACtB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,MAAM;AAAA,UAChB,EAAE,QAAQ,MAAM;AAAA,UAChB,EAAE,QAAQ,MAAM,QAAQ,KAAK;AAAA,UAC7B,EAAE,QAAQ,MAAM,QAAQ,KAAK;AAAA,QAC/B,CAAC;AAED,cAAM,MAAkD,CAAC;AACzD,cAAM,aAAa,MAAM,MAAM;AAAA,UAC7B,CAAC,MAAM,IAAI,KAAK,EAAE,QAAQ,EAAE,QAAQ,QAAQ,EAAE,OAAO,CAAC;AAAA,UACtD,EAAE,QAAQ,MAAM,GAAG,MAAM;AAAA,QAC3B;AACA,mCAAO,WAAW,KAAK,EAAE,KAAK,CAAC;AAC/B,mCAAO,WAAW,UAAU,EAAE,uBAAuB,EAAE;AACvD,mCAAO,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;AAAA,UACtC,CAAC,OAAO,OAAO,MAAM,IAAI,EAAE,KAAK;AAAA,QAClC;AAEA,cAAM,cAAwB,CAAC;AAC/B,cAAM,MAAM,cAAc,CAAC,MAAM,YAAY,KAAK,EAAE,MAAM,GAAG;AAAA,UAC3D,QAAQ,MAAM,GAAG;AAAA,QACnB,CAAC;AACD,mCAAO,YAAY,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,KAAK,EAAE,KAAK,CAAC;AAExD,cAAM,QAAkB,CAAC;AACzB,cAAM,MAAM,cAAc,CAAC,MAAM,MAAM,KAAK,EAAE,MAAM,GAAG;AAAA,UACrD,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;AAE5B,cAAM,YAAsB,CAAC;AAC7B,cAAM,MAAM,cAAc,CAAC,MAAM,UAAU,KAAK,EAAE,MAAM,GAAG;AAAA,UACzD,QAAQ,MAAM,GAAG;AAAA,UACjB,QAAQ,MAAM,GAAG;AAAA,QACnB,CAAC;AACD,mCAAO,UAAU,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE,KAAK,CAAC;AAEpD,cAAM,eAAyB,CAAC;AAChC,cAAM,MAAM,cAAc,CAAC,MAAM,aAAa,KAAK,EAAE,MAAM,GAAG;AAAA,UAC5D,QAAQ,MAAM,GAAG;AAAA,UACjB,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC;AAAA,MACrC,CAAC;AAED,6BAAG,yCAAyC,YAAY;AACtD,cAAM,MAAM,IAAI;AAChB,cAAM,UAAU;AAAA,UACd,MAAM,GAAG;AAAA,UACT,MAAM,GAAG;AAAA,UACT,MAAM,GAAG;AAAA,UACT,MAAM,GAAG;AAAA,QACX;AACA,cAAM,MAAM,UAAU,QAAQ,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;AAC3D,cAAM,QAAkB,CAAC;AACzB,cAAM,MAAM,cAAc,CAAC,MAAM,MAAM,KAAK,EAAE,MAAM,GAAG;AAAA,UACrD,QAAQ,MAAM,GAAG;AAAA,UACjB,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,KAAK,EAAE,aAAa,CAAC;AAC5B,cAAM,QAAkB,CAAC;AACzB,cAAM,MAAM,cAAc,CAAC,MAAM,MAAM,KAAK,EAAE,MAAM,GAAG;AAAA,UACrD,QAAQ,MAAM,GAAG;AAAA,UACjB,OAAO;AAAA,UACP,OAAO,MAAM,GAAG,EAAE;AAAA,QACpB,CAAC;AACD,mCAAO,KAAK,EAAE,aAAa,CAAC;AAC5B,mCAAO,CAAC,GAAG,OAAO,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AAAA,MACjE,CAAC;AAED,6BAAG,6BAA6B,YAAY;AAC1C,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,UAAU,MAAM,GAAG;AACzB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,QAAQ,CAAC,CAAC;AAC1D,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,MAAgB,OAAO,OAAO,CAAC,CAAC;AAEzD,cAAM,UAAoD,CAAC;AAC3D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM,QAAQ,KAAK,EAAE,QAAQ,EAAE,QAAQ,OAAO,EAAE,MAAM,CAAC;AAAA,UACxD,EAAE,QAAQ,MAAM,GAAG,MAAM,SAAS,KAAK;AAAA,QACzC;AACA,mCAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,mCAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM;AAIpC,cAAM,YAAsB,CAAC;AAC7B,cAAM,MAAM,cAAc,CAAC,MAAM,UAAU,KAAK,EAAE,MAAM,GAAG;AAAA,UACzD,QAAQ,MAAM,GAAG;AAAA,UACjB,SAAS;AAAA,QACX,CAAC;AACD,mCAAO,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;AAAA,MACrC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,eAAe,MAAM;AAC5B,6BAAG,wEAAmE,YAAY;AAChF,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,WAAW,OAAO,GAAG;AAC3B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,EAAE,CAAC;AAAA,UACR,UAAU,EAAE,QAAQ,SAAS,CAAC;AAAA,QAChC;AAEA,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,IAAI,EAAE,CAAC;AAC7D,mCAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AACzB,mCAAO,MAAM,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AACnD,mCAAQ,MAAM,IAAI,EAAE,EAAG,KAAK,KAA4B,MAAM,EAAE,KAAK,CAAC;AACtE,mCAAO,MAAM,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AACnD,mCAAQ,MAAM,IAAI,EAAE,EAAG,KAAK,KAA4B,MAAM,EAAE,KAAK,CAAC;AACtE,mCAAO,MAAM,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK;AAGtC,cAAM,QAAQ,MAAM,MAAM,YAAY,CAAC,CAAC;AACxC,mCAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AAGzB,cAAM,UAAU,MAAM,MAAM,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC;AAC9D,mCAAO,QAAQ,IAAI,EAAE,KAAK,CAAC;AAAA,MAC7B,CAAC;AAED,6BAAG,4BAA4B,YAAY;AACzC,cAAM,IAAI,YAAY,IAAI,CAAC;AAC3B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,SAAS,EAAE,QAAQ,GAAG,cAAc,KAAK;AAG/C,cAAM,UAAU,MAAM,MAAM,YAA2B,MAAM;AAC7D,mCAAO,QAAQ,IAAI,EAAE,KAAK,CAAC;AAE3B,cAAM,QAAQ,MAAM,MAAM,YAA2B,QAAQ;AAAA,UAC3D,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AAAA,MAC3B,CAAC;AAED,6BAAG,yEAAyE,YAAY;AAItF,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ;AAAA,UACZ,GAAG,GAAG;AAAA,UACN,GAAG,GAAG;AAAA,UACN,GAAG,GAAG;AAAA,UACN,GAAG,GAAG;AAAA,QACR;AACA,mBAAW,KAAK;AACd,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AAEF,cAAM,UAAoB,CAAC;AAC3B,YAAI;AAIJ,YAAI,OAAO,MAAM,MAAM;AAAA,UACrB,EAAE,QAAQ,IAAI;AAAA,UACd,EAAE,OAAO,OAAO,EAAE;AAAA,QACpB;AACA,eAAO,KAAK,OAAO,GAAG;AACpB,qBAAW,KAAK,KAAK,KAAK,EAAG,SAAQ,KAAK,CAAC;AAC3C,kBAAQ,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,EAAE;AAC9B,iBAAO,MAAM,MAAM;AAAA,YACjB,EAAE,QAAQ,IAAI;AAAA,YACd,EAAE,OAAO,OAAO,EAAE;AAAA,UACpB;AAAA,QACF;AACA,mCAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AAAA,MACvD,CAAC;AAED,6BAAG,8CAA8C,YAAY;AAC3D,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACxD,MAAM;AAAA,QACR,CAAC;AACD,cAAM,IAAI,MAAM,IAAI,CAAC;AACrB,mCAAO,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AACvC,mCAAQ,EAAG,KAAK,KAA4B,MAAM,EAAE,KAAK,CAAC;AAC1D,mCAAO,GAAG,MAAM,IAAI,EAAE,KAAK,aAAa;AACxC,mCAAQ,EAAG,KAAM,KAA4B,MAAM,EAAE,KAAK,CAAC;AAAA,MAC7D,CAAC;AAED,6BAAG,oEAA+D,YAAY;AAC5E,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,UAAU,GAAG;AAEvB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,GAAG,UAAU,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;AAC7D,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACxD,OAAO;AAAA,UACP,OAAO;AAAA,QACT,CAAC;AACD,cAAM,IAAI,MAAM,IAAI,CAAC;AAErB,mCAAO,GAAG,KAAK,EAAE,KAAK,CAAC;AACvB,mCAAO,GAAG,QAAQ,sBAAU,CAAC,EAAE,KAAK,CAAC;AACrC,mCAAO,GAAG,OAAO,WAAW,EAAE,KAAK,CAAC;AACpC,mCAAO,GAAG,OAAO,WAAW,EAAE,KAAK,CAAC;AAEpC,mCAAO,GAAG,QAAQ,sBAAU,CAAC,EAAE,KAAK,CAAC;AAAA,MACvC,CAAC;AAED,6BAAG,6EAA6E,YAAY;AAC1F,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,UAAU,cAAc,GAAG;AACjC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,QAAQ,CAAC;AAAA,QAC/B;AAGA,cAAM,MAAM,MAAM,MAAM,YAA2B,CAAC,CAAC,CAAC;AACtD,mCAAO,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AAChD,mCAAQ,IAAI,IAAI,CAAC,EAAG,KAAK,KAA4B,MAAM,EAAE,KAAK,CAAC;AAGnE,cAAM,OAAO,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACvD,SAAS,CAAC,aAAa;AAAA,QACzB,CAAC;AACD,mCAAO,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AACjD,mCAAQ,KAAK,IAAI,CAAC,EAAG,KAAK,KAA4B,MAAM,EAAE,KAAK,CAAC;AAGpE,cAAM,OAAO,MAAM,MAAM,YAA2B,CAAC,OAAO,GAAG;AAAA,UAC7D,SAAS,CAAC,eAAe,eAAe,OAAO;AAAA,QACjD,CAAC;AACD,mCAAO,KAAK,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK;AAGpC,cAAM,UAAU,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UAC1D,SAAS,CAAC,2BAAe;AAAA,QAC3B,CAAC;AACD,mCAAO,QAAQ,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AAAA,MACtD,CAAC;AAED,6BAAG,qDAAgD,YAAY;AAC7D,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,UAAU,GAAG;AACvB,cAAM,KAAK,MAAM,MAAM;AAAA,UACrB;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,KAAK,MAAM,MAAM;AAAA,UACrB;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAGA,cAAM,SAAS,GAAG,CAAC,EAAE;AACrB,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACxD,MAAM;AAAA,UACN,OAAO;AAAA,UACP;AAAA,QACF,CAAC;AACD,cAAM,IAAI,MAAM,IAAI,CAAC;AACrB,mCAAO,GAAG,KAAK,EAAE,KAAK,CAAC;AACvB,mCAAO,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;AAChC,mCAAO,GAAG,MAAM,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;AAGjC,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACxD,QAAQ;AAAA,QACV,CAAC;AACD,mCAAO,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK;AAAA,MACjC,CAAC;AAED,6BAAG,iEAA4D,YAAY;AACzE,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,SAAS,OAAO,GAAG;AACzB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,OAAO,CAAC;AAAA,QAC9B;AAGA,cAAM,SAAS,MAAM,MAAM,YAA2B;AAAA,UACpD,QAAQ,QAAQ,GAAG;AAAA,QACrB,CAAC;AACD,mCAAO,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;AAGzD,cAAM,QAAQ,MAAM,MAAM,YAA2B;AAAA,UACnD,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AAItC,cAAM,MAAM,MAAM,MAAM,YAA2B;AAAA,UACjD,QAAQ,QAAQ,GAAG;AAAA,QACrB,CAAC;AACD,mCAAO,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE,KAAK,CAAC;AAAA,MAChE,CAAC;AAED,6BAAG,6DAA6D,YAAY;AAK1E,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAGA,cAAM,UAAU;AAChB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,MAAgB,OAAO,OAAO,CAAC,CAAC;AAGzD,cAAM,gBAA0B,CAAC;AACjC,cAAM,MAAM,cAAc,CAAC,MAAM,cAAc,KAAK,EAAE,MAAM,GAAG;AAAA,UAC7D,QAAQ,QAAQ,GAAG;AAAA,UACnB,SAAS;AAAA,QACX,CAAC;AACD,mCAAO,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGjC,cAAM,QAAQ,MAAM,MAAM,YAA2B,aAAa;AAClE,mCAAO,MAAM,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AAClD,mCAAO,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK;AAAA,MACjC,CAAC;AAED,6BAAG,6DAAwD,YAAY;AACrE,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAKA,cAAM,MAAM,MAAM,MAAM,YAA2B,CAAC,CAAC;AACrD,mCAAO,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI;AAC5B,mCAAO,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,MAC9B,CAAC;AAED,6BAAG,mEAA8D,YAAY;AAC3E,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,QAAQ,GAAG;AACrB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAGA,cAAM,IAAI,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACpD,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AAC9B,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,cAAc;AACtC,mCAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,cAAc;AAGrC,cAAM,IAAI,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACpD,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;AAClE,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,cAAc;AACtC,mCAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,cAAc;AAGrC,cAAM,IAAI,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC;AACpE,mCAAO,EAAE,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,KAAK,aAAa;AAC/C,mCAAQ,EAAE,IAAI,CAAC,EAAG,KAAM,KAA4B,MAAM,EAAE,KAAK,CAAC;AAClE,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,cAAc;AACtC,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,cAAc;AAAA,MACxC,CAAC;AAED,6BAAG,iEAAiE,YAAY;AAC9E,cAAM,MAAM,IAAI;AAChB,cAAM,UAAU;AAAA,UACd,OAAO,GAAG;AAAA,UACV,OAAO,GAAG;AAAA,UACV,OAAO,GAAG;AAAA,UACV,OAAO,GAAG;AAAA,QACZ;AACA,mBAAW,KAAK,SAAS;AACvB,gBAAM,MAAM;AAAA,YACV;AAAA,YACA,CAAC,IAAI,CAAC,CAAC;AAAA,YACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzB;AAAA,QACF;AAEA,cAAM,QAAQ,MAAM,MAAM;AAAA,UACxB,EAAE,QAAQ,OAAO,GAAG,MAAM;AAAA,UAC1B,EAAE,OAAO,EAAE;AAAA,QACb;AACA,cAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC;AAC3B,mCAAO,EAAE,EAAE,QAAQ,CAAC,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AAEnD,cAAM,QAAQ,MAAM,MAAM;AAAA,UACxB,EAAE,QAAQ,OAAO,GAAG,MAAM;AAAA,UAC1B,EAAE,OAAO,GAAG,OAAO,GAAG,GAAG,EAAE,EAAE;AAAA,QAC/B;AACA,cAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC;AAC3B,mCAAO,EAAE,EAAE,QAAQ,CAAC,OAAO,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AAGnD,cAAM,QAAQ,MAAM,MAAM;AAAA,UACxB,EAAE,QAAQ,OAAO,GAAG,MAAM;AAAA,UAC1B,EAAE,OAAO,GAAG,OAAO,GAAG,GAAG,EAAE,EAAE;AAAA,QAC/B;AACA,mCAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AAGzB,cAAM,MAAM,MAAM,MAAM,YAA2B;AAAA,UACjD,QAAQ,OAAO,GAAG;AAAA,QACpB,CAAC;AACD,mCAAO,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AAAA,MAC5D,CAAC;AAAA,IACH,CAAC;AAMD,4BAAS,OAAO,CAAC,KAAK,cAAc;AAAA,MAClC;AAAA,MACA,MAAM;AACJ,+BAAG,kEAAkE,YAAY;AAC/E,gBAAM,MAAM,IAAI;AAGhB,gBAAM,eAAe,MAAM,GAAG;AAC9B,gBAAM,eAAe,MAAM,GAAG;AAC9B,gBAAM,WAAW,MAAM,GAAG;AAC1B,gBAAM,cAAc,MAAM,GAAG;AAC7B,gBAAM,OAAO,MAAM,GAAG;AACtB,gBAAM,OAAO,MAAM,GAAG;AACtB,gBAAM,WAAW,OAAO,GAAG;AAC3B,gBAAM,MAAM,UAAU;AAAA,YACpB,EAAE,QAAQ,cAAc,QAAQ,KAAK;AAAA,YACrC,EAAE,QAAQ,cAAc,QAAQ,KAAK;AAAA,YACrC,EAAE,QAAQ,UAAU,QAAQ,SAAS;AAAA;AAAA,YAErC,EAAE,QAAQ,YAAY;AAAA,UACxB,CAAC;AAKD,gBAAM,UAAoB,CAAC;AAC3B,gBAAM,MAAM,cAAc,CAAC,MAAM,QAAQ,KAAK,EAAE,MAAM,GAAG;AAAA,YACvD,QAAQ,MAAM,GAAG;AAAA,YACjB,gBAAgB,CAAC,IAAI;AAAA,UACvB,CAAC;AACD,qCAAO,QAAQ,KAAK,CAAC,EAAE;AAAA,YACrB,CAAC,cAAc,UAAU,WAAW,EAAE,KAAK;AAAA,UAC7C;AAIA,gBAAM,OAAiB,CAAC;AACxB,gBAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,YACpD,QAAQ,MAAM,GAAG;AAAA,YACjB,gBAAgB,CAAC,MAAM,GAAG,YAAY;AAAA,UACxC,CAAC;AACD,qCAAO,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC;AAIlC,gBAAM,OAAiB,CAAC;AACxB,gBAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,YACpD,QAAQ,MAAM,GAAG;AAAA,YACjB,gBAAgB,CAAC,MAAM,IAAI;AAAA,UAC7B,CAAC;AACD,qCAAO,KAAK,KAAK,CAAC,EAAE;AAAA,YAClB,CAAC,cAAc,cAAc,UAAU,WAAW,EAAE,KAAK;AAAA,UAC3D;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,iCAAS,iCAAiC,MAAM;AAI9C,6BAAG,oDAAoD,YAAY;AACjE,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,OAAO,GAAG;AACxB,cAAM,SAAS,OAAO,GAAG;AACzB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,MAAM;AAAA,UAChB,EAAE,QAAQ,OAAO;AAAA,UACjB,EAAE,QAAQ,MAAM;AAAA,QAClB,CAAC;AACD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UACpD,QAAQ,OAAO,GAAG;AAAA,QACpB,CAAC;AACD,mCAAO,KAAK,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,MAAM,EAAE,KAAK,CAAC;AAAA,MACpD,CAAC;AAED,6BAAG,0DAA0D,YAAY;AACvE,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,OAAO,GAAG;AACxB,cAAM,SAAS,OAAO,GAAG;AACzB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,OAAO,CAAC,CAAC;AAC7D,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UACpD,QAAQ,QAAQ,GAAG;AAAA,QACrB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;AAAA,MAC9B,CAAC;AAED,6BAAG,+CAA+C,YAAY;AAC5D,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,EAAE;AAAA,UACZ,EAAE,QAAQ,EAAE;AAAA,UACZ,EAAE,QAAQ,MAAM;AAAA,QAClB,CAAC;AACD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UACpD,QAAQ,QAAQ,GAAG;AAAA,QACrB,CAAC;AACD,mCAAO,KAAK,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;AAAA,MAC3C,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,8BAA8B,MAAM;AAC3C,6BAAG,iEAAiE,YAAY;AAC9E,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,SAAS,MAAM,GAAG;AACxB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,OAAO,UAAU,EAAE;AAAA,UAC7B,EAAE,QAAQ,QAAQ,UAAU,EAAE;AAAA,QAChC,CAAC;AACD,cAAM,UAAU,MAAM,MAAM;AAAA,UAC1B,EAAE,QAAQ,OAAO,GAAG,WAAW;AAAA,UAC/B;AAAA,QACF;AACA,mCAAO,OAAO,EAAE,KAAK,CAAC;AACtB,cAAM,OAAO,oBAAI,IAAoB;AACrC,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA,UAC/D,QAAQ,MAAM,GAAG;AAAA,QACnB,CAAC;AACD,mCAAO,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC;AAC9B,mCAAO,KAAK,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC;AAAA,MACjC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,sBAAsB,MAAM;AACnC,6BAAG,8CAA8C,YAAY;AAC3D,cAAM,IAAI,QAAQ,IAAI,CAAC;AACvB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,YAAsB,CAAC;AAC7B,cAAM,EAAE,WAAW,IAAI,MAAM,MAAM;AAAA,UACjC,CAAC,MAAM,UAAU,KAAK,EAAE,MAAM;AAAA,UAC9B,EAAE,QAAQ,GAAG,cAAc,MAAM,OAAO,EAAE;AAAA,QAC5C;AACA,mCAAO,UAAU,EAAE,uBAAuB,CAAC;AAC3C,mCAAO,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAAA,MAC/B,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,+BAA+B,MAAM;AAC5C,6BAAG,sDAAsD,YAAY;AACnE,cAAM,IAAI,QAAQ,IAAI,CAAC;AACvB,cAAM,YAAY,MAAM,YAAY,OAAO,GAAG,CAAC;AAC/C,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,qCAAO,UAAU,CAAC,EAAE,EAAE,EAAE,gBAAgB,UAAU,IAAI,CAAC,EAAE,EAAE;AAAA,QAC7D;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAMD,4BAAS,OAAO,CAAC,KAAK,iBAAiB;AAAA,MACrC;AAAA,MACA,MAAM;AACJ,cAAM,KAAK,MAAM,QAAQ,IAAI,CAAC;AAC9B,cAAM,MAAM,MAAM,OAAO,IAAI,CAAC;AAC9B,cAAM,OAAO,CAAC,GAAW,KAAa,SAAS,QAC7C,MAAM,UAAU,CAAC,GAAG,QAAW,EAAE,KAAK,GAAG,IAAI,KAAK,OAAO,CAAC;AAU5D,cAAM,UAAU,OAAO,GAAW,QAAgB;AAChD,gBAAM,KAAK,GAAG,KAAK,CAAC;AACpB,gBAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAAA,QAC5C;AAEA,+BAAG,wCAAwC,YAAY;AACrD,gBAAM,IAAI,IAAI;AACd,gBAAM,MAAM,GAAG;AACf,sCAAQ,MAAM,KAAK,GAAG,GAAG,GAAG,WAAW,EAAE,KAAK,IAAI;AAClD,gBAAM,QAAQ,GAAG,GAAG;AAAA,QACtB,CAAC;AAED,+BAAG,oDAAoD,YAAY;AAGjE,qCAAO,MAAM,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,eAAe,aAAa;AAAA,QACpE,CAAC;AAED,+BAAG,mDAAmD,YAAY;AAChE,gBAAM,IAAI,IAAI;AACd,gBAAM,MAAM,GAAG;AACf,sCAAQ,MAAM,KAAK,GAAG,GAAG,GAAG,WAAW,EAAE,KAAK,IAAI;AAElD,sCAAQ,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,WAAW,EAAE,KAAK,KAAK;AACpD,gBAAM,QAAQ,GAAG,GAAG;AAAA,QACtB,CAAC;AAED,+BAAG,kDAAkD,YAAY;AAC/D,gBAAM,IAAI,IAAI;AACd,gBAAM,MAAM,GAAG;AACf,sCAAQ,MAAM,KAAK,GAAG,GAAG,GAAG,WAAW,EAAE,KAAK,IAAI;AAGlD,sCAAQ,MAAM,KAAK,GAAG,GAAG,GAAG,WAAW,EAAE,KAAK,IAAI;AAClD,gBAAM,QAAQ,GAAG,GAAG;AAAA,QACtB,CAAC;AAED,+BAAG,kDAAkD,YAAY;AAC/D,gBAAM,IAAI,IAAI;AACd,sCAAQ,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,WAAW,EAAE,KAAK,IAAI;AACtD,gBAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAG1C,gBAAM,OAAO,GAAG;AAChB,sCAAQ,MAAM,KAAK,GAAG,IAAI,GAAG,WAAW,EAAE,KAAK,IAAI;AACnD,gBAAM,QAAQ,GAAG,IAAI;AAAA,QACvB,CAAC;AAED,+BAAG,sEAAsE,YAAY;AAKnF,gBAAM,IAAI,IAAI;AACd,gBAAM,IAAI,IAAI;AACd,gBAAM,WAAW,GAAG;AACpB,gBAAM,WAAW,GAAG;AACpB,sCAAQ,MAAM,KAAK,GAAG,QAAQ,GAAG,WAAW,EAAE,KAAK,IAAI;AACvD,sCAAQ,MAAM,KAAK,GAAG,QAAQ,GAAG,WAAW,EAAE,KAAK,IAAI;AACvD,gBAAM,QAAQ,GAAG,QAAQ;AACzB,gBAAM,QAAQ,GAAG,QAAQ;AAAA,QAC3B,CAAC;AAED,+BAAG,mEAAmE,YAAY;AAKhF,gBAAM,IAAI,IAAI;AACd,gBAAM,SAAS,GAAG;AAClB,sCAAQ,MAAM,KAAK,GAAG,MAAM,GAAG,WAAW,EAAE,KAAK,IAAI;AAErD,gBAAM,QAAQ,MAAM,MAAM,UAAU,CAAC,GAAG,MAAO;AAAA,YAC7C,KAAK;AAAA,YACL,IAAI,GAAG;AAAA,YACP,QAAQ;AAAA,UACV,CAAC;AACD,qCAAO,MAAM,WAAW,EAAE,KAAK,KAAK;AACpC,qCAAO,MAAM,aAAa,EAAE,uBAAuB,IAAK;AAExD,gBAAM,QAAQ,GAAG,MAAM;AAAA,QACzB,CAAC;AAED,+BAAG,+DAA+D,YAAY;AAC5E,gBAAM,IAAI,IAAI;AACd,gBAAM,WAAW,GAAG;AACpB,gBAAM,QAAQ,MAAM,MAAM,UAAU,CAAC,GAAG,MAAO;AAAA,YAC7C,KAAK;AAAA,YACL,IAAI;AAAA,YACJ,QAAQ;AAAA,UACV,CAAC;AACD,qCAAO,MAAM,aAAa,EAAE,uBAAuB,IAAK;AAMxD,gBAAM,IAAI,IAAI;AACd,gBAAM,WAAW,GAAG;AACpB,gBAAM,SAAS,MAAM,MAAM,UAAU,CAAC,GAAG,QAAW;AAAA,YAClD,KAAK;AAAA,YACL,IAAI;AAAA,YACJ,QAAQ;AAAA,UACV,CAAC;AACD,qCAAO,OAAO,aAAa,EAAE,uBAAuB,IAAK;AAKzD,gBAAM,MAAM,UAAU,CAAC,GAAG,KAAO;AAAA,YAC/B,KAAK;AAAA,YACL,IAAI;AAAA,YACJ,QAAQ;AAAA,UACV,CAAC;AACD,gBAAM,UAAU,MAAM,MAAM,UAAU,CAAC,GAAG,QAAW;AAAA,YACnD,KAAK;AAAA,YACL,IAAI;AAAA,YACJ,QAAQ;AAAA,UACV,CAAC;AACD,qCAAO,QAAQ,aAAa,EAAE,KAAK,OAAO,aAAa;AAEvD,gBAAM,QAAQ,GAAG,QAAQ;AACzB,gBAAM,QAAQ,GAAG,QAAQ;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF;AAEA,4BAAS,OAAO,CAAC,KAAK,OAAO,EAAE,wBAAwB,MAAM;AAK3D,iBAAW,YAAY;AACrB,cAAM,MAAM,KAAK;AACjB,cAAM,MAAM,KAAK;AAAA,MACnB,CAAC;AAUD,YAAM,YAAY,CAChBD,aACiB;AAAA,QACjB,MAAM,MAAM,UAAU;AAKpB,qBAAW,KAAKA;AACd,kBAAM,QAAQ;AAAA,cACX;AAAA,gBACC;AAAA,cACF;AAAA,YACF;AACF,iBAAOA,QAAO;AAAA,QAChB;AAAA,QACA,MAAM,UAAU;AAAA,QAEhB;AAAA,MACF;AASA,YAAM,QAAQ,CACZ,aACA,QACA,SACA,MACA,SACA,OAAgC,CAAC,OACM;AAAA,QACvC,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,EAAE,aAAa,eAAe,WAAW,CAAC,EAAE;AAAA,MACpD;AASA,YAAM,UAAU,OACd,QACA,OAAoB,CAAC,MACG;AACxB,cAAM,QAAQ,IAAI,0BAAc;AAChC,cAAM,UAAM,iBAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,MAAM,EAAE,CAAC;AACpD,YAAI;AACF,iBAAO,MAAM,IAAI,QAAQ,QAAQ,IAAI;AAAA,QACvC,UAAE;AAKA,gBAAM,OAAO,QAAQ;AACrB,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF;AAEA,6BAAG,qCAAqC,YAAY;AAClD,cAAM,SAAS,MAAM,QAAQ,UAAU,CAAC,CAAC,CAAC;AAC1C,mCAAO,OAAO,IAAI,EAAE,KAAK,CAAC;AAC1B,mCAAO,OAAO,WAAW,EAAE,uBAAuB,CAAC;AACnD,mCAAO,OAAO,OAAO,EAAE,QAAQ;AAAA,UAC7B,gBAAgB;AAAA,UAChB,WAAW;AAAA,QACb,CAAC;AAED,cAAMA,UAAS,MAAM,QAAQ,OAAO,EAAE,OAAO,GAAG,CAAC;AACjD,mCAAOA,OAAM,EAAE,aAAa,CAAC;AAAA,MAC/B,CAAC;AAED,6BAAG,6DAA6D,YAAY;AAC1E,cAAM,IAAI,kBAAkB,IAAI,CAAC;AACjC,cAAM,KAAK,oBAAI,KAAK,0BAA0B;AAC9C,cAAM,KAAK,oBAAI,KAAK,0BAA0B;AAC9C,cAAM,KAAK,oBAAI,KAAK,0BAA0B;AAC9C,cAAMA,UAAS;AAAA,UACb,MAAM,GAAG,GAAG,GAAG,eAAe,IAAI,EAAE,QAAQ,EAAE,CAAC;AAAA,UAC/C,MAAM,GAAG,GAAG,GAAG,eAAe,IAAI,EAAE,QAAQ,EAAE,CAAC;AAAA,UAC/C,MAAM,GAAG,GAAG,GAAG,eAAe,IAAI,EAAE,QAAQ,EAAE,CAAC;AAAA,QACjD;AACA,cAAM,SAAS,MAAM,QAAQ,UAAUA,OAAM,CAAC;AAC9C,mCAAO,OAAO,IAAI,EAAE,KAAK,CAAC;AAC1B,cAAM,OAAwD,CAAC;AAC/D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,aAAa,CAAC;AAC3B;AAAA,UACE,KAAK,IAAI,CAAC,OAAO;AAAA,YACf,QAAQ,EAAE;AAAA,YACV,SAAS,EAAE;AAAA,YACX,MAAM,EAAE;AAAA,YACR,SAAS,EAAE,QAAQ,YAAY;AAAA,YAC/B,MAAM,EAAE;AAAA,UACV,EAAE;AAAA,QACJ,EAAE,QAAQ;AAAA,UACR;AAAA,YACE,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,MAAM;AAAA,YACN,SAAS,GAAG,YAAY;AAAA,YACxB,MAAM,EAAE,QAAQ,EAAE;AAAA,UACpB;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,MAAM;AAAA,YACN,SAAS,GAAG,YAAY;AAAA,YACxB,MAAM,EAAE,QAAQ,EAAE;AAAA,UACpB;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,MAAM;AAAA,YACN,SAAS,GAAG,YAAY;AAAA,YACxB,MAAM,EAAE,QAAQ,EAAE;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAED,6BAAG,yCAAyC,YAAY;AACtD,cAAM,IAAI,mBAAmB,IAAI,CAAC;AAClC,cAAM,IAAI,mBAAmB,IAAI,CAAC;AAClC,cAAM,IAAI,oBAAI,KAAK,0BAA0B;AAC7C,cAAMA,UAAS;AAAA,UACb,MAAM,GAAG,GAAG,GAAG,eAAe,GAAG,EAAE,QAAQ,GAAG,CAAC;AAAA,UAC/C,MAAM,GAAG,GAAG,GAAG,eAAe,GAAG,EAAE,QAAQ,GAAG,CAAC;AAAA,UAC/C,MAAM,GAAG,GAAG,GAAG,eAAe,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,UAC9C,MAAM,GAAG,GAAG,GAAG,eAAe,GAAG,EAAE,QAAQ,GAAG,CAAC;AAAA,QACjD;AACA,cAAM,SAAS,MAAM,QAAQ,UAAUA,OAAM,CAAC;AAC9C,mCAAO,OAAO,IAAI,EAAE,KAAK,CAAC;AAC1B,cAAM,QAAyD,CAAC;AAChE,cAAM,QAAyD,CAAC;AAChE,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,kBAAM,KAAK,CAAC;AAAA,UACd;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,kBAAM,KAAK,CAAC;AAAA,UACd;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClD,mCAAO,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAAA,MACpD,CAAC;AAED,6BAAG,qCAAqC,YAAY;AAClD,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,MAAM;AACZ,cAAM;AAAA,UACJ,UAAU;AAAA,YACR;AAAA,cACE,IAAI;AAAA,cACJ,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,SAAS,IAAI,KAAK,GAAG;AAAA,cACrB,MAAM,EAAE,aAAa,eAAe,WAAW,CAAC,EAAE;AAAA,YACpD;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,OAAwD,CAAC;AAC/D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,aAAa,CAAC;AAC3B,mCAAO,KAAK,CAAC,EAAE,QAAQ,YAAY,CAAC,EAAE,KAAK,GAAG;AAAA,MAChD,CAAC;AAED,6BAAG,8CAA8C,YAAY;AAC3D,cAAM,MAAM,eAAe,IAAI,CAAC;AAChC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC3B;AACA,cAAM,QAAQ,iBAAiB,IAAI,CAAC;AACpC,cAAM,IAAI,oBAAI,KAAK,0BAA0B;AAC7C,cAAM;AAAA,UACJ,UAAU,CAAC,MAAM,GAAG,OAAO,GAAG,eAAe,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAAA,QAClE;AAEA,cAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,UACpC,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,QAAQ,EAAE,aAAa,CAAC;AAE/B,cAAM,aAAa,MAAM,QAAQ,OAAO;AAAA,UACtC,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,UAAU,EAAE,aAAa,CAAC;AAAA,MACnC,CAAC;AAED,6BAAG,gDAAgD,YAAY;AAC7D,cAAM,MAAM,eAAe,IAAI,CAAC;AAChC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,KAAK,QAAQ,WAAW,CAAC,CAAC;AAC3D,cAAM,kBAAkB,YAAY;AAClC,gBAAM,MAAgB,CAAC;AACvB,gBAAM,MAAM,cAAc,CAAC,MAAM;AAC/B,gBAAI,KAAK,EAAE,MAAM;AAAA,UACnB,CAAC;AACD,iBAAO;AAAA,QACT;AACA,cAAM,SAAS,MAAM,gBAAgB;AACrC,mCAAO,OAAO,SAAS,GAAG,CAAC,EAAE,KAAK,IAAI;AACtC,cAAM,QAAQ,UAAU,CAAC,CAAC,CAAC;AAC3B,cAAM,QAAQ,MAAM,gBAAgB;AACpC,mCAAO,MAAM,SAAS,GAAG,CAAC,EAAE,KAAK,KAAK;AAAA,MACxC,CAAC;AAED,6BAAG,6CAA6C,YAAY;AAI1D,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,IAAI,oBAAI,KAAK,0BAA0B;AAC7C,cAAM;AAAA,UACJ,UAAU;AAAA,YACR;AAAA,cACE,IAAI;AAAA,cACJ,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,MAAM;AAAA,cACN,MAAM,EAAE,OAAO,GAAG;AAAA,cAClB,SAAS;AAAA,cACT,MAAM,EAAE,aAAa,QAAQ,WAAW,CAAC,EAAE;AAAA,YAC7C;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,OAAO,MAAM,QAAQ,OAAO;AAAA,UAChC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAY;AAAA,QACd,CAAC;AACD,mCAAO,IAAI,EAAE,aAAa,CAAC;AAC3B,mCAAQ,KAAK,CAAC,EAAuB,IAAI,EAAE,KAAK,sBAAU;AAAA,MAC5D,CAAC;AAED,6BAAG,2DAAsD,YAAY;AAInE,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,IAAI,oBAAI,KAAK,0BAA0B;AAC7C,cAAMA,UAA8C;AAAA,UAClD;AAAA,YACE,IAAI;AAAA,YACJ,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,MAAM;AAAA,YACN,MAAM,EAAE,QAAQ,EAAE;AAAA,YAClB,SAAS;AAAA,YACT,MAAM,EAAE,aAAa,KAAK,WAAW,CAAC,EAAE;AAAA,UAC1C;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,MAAM;AAAA,YACN,MAAM,EAAE,QAAQ,EAAE;AAAA,YAClB,SAAS;AAAA,YACT,MAAM;AAAA,cACJ,aAAa;AAAA,cACb,WAAW;AAAA,gBACT,OAAO,EAAE,IAAI,GAAG,MAAM,eAAe,QAAQ,EAAE;AAAA,cACjD;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,MAAM;AAAA,YACN,MAAM,EAAE,QAAQ,EAAE;AAAA,YAClB,SAAS;AAAA,YACT,MAAM;AAAA,cACJ,aAAa;AAAA,cACb,WAAW;AAAA,gBACT,OAAO,EAAE,IAAI,GAAG,MAAM,eAAe,QAAQ,EAAE;AAAA,cACjD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,cAAM,QAAQ,UAAUA,OAAM,CAAC;AAC/B,cAAM,OAAwD,CAAC;AAC/D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,aAAa,CAAC;AAE3B,mCAAO,KAAK,CAAC,EAAE,KAAK,UAAU,KAAK,EAAE,cAAc;AAEnD,mCAAO,KAAK,CAAC,EAAE,KAAK,UAAU,OAAO,EAAE,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE;AAExD,mCAAO,KAAK,CAAC,EAAE,KAAK,UAAU,OAAO,EAAE,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE;AAAA,MAC1D,CAAC;AAED,6BAAG,sEAAsE,YAAY;AACnF,cAAM,IAAI,kBAAkB,IAAI,CAAC;AACjC,cAAM,IAAI,oBAAI,KAAK,0BAA0B;AAC7C,cAAM;AAAA,UACJ,UAAU;AAAA,YACR;AAAA,cACE,IAAI;AAAA,cACJ,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,SAAS;AAAA,cACT,MAAM;AAAA,gBACJ,aAAa;AAAA,gBACb,WAAW;AAAA,kBACT,OAAO,EAAE,IAAI,KAAK,MAAM,WAAW,QAAQ,QAAQ;AAAA,gBACrD;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,OAAwD,CAAC;AAC/D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,KAAK,CAAC,EAAE,KAAK,UAAU,OAAO,EAAE,EAAE,KAAK,GAAG;AAAA,MACnD,CAAC;AAED,6BAAG,8DAA8D,YAAY;AAE3E,cAAM,WAAW,eAAe,IAAI,CAAC;AACrC,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,UAAU,EAAE,QAAQ,SAAS,CAAC;AAAA,QAChC;AAKA,cAAM,YAAyB;AAAA,UAC7B,MAAM,MAAM,UAAU;AACpB,kBAAM,QAAQ;AAAA,cACX;AAAA,gBACC;AAAA,kBACE;AAAA,kBACA,mBAAmB,IAAI,CAAC;AAAA,kBACxB;AAAA,kBACA;AAAA,kBACA,oBAAI,KAAK;AAAA,kBACT,EAAE,QAAQ,EAAE;AAAA,gBACd;AAAA,cACF;AAAA,YACF;AACA,kBAAM,IAAI,MAAM,MAAM;AAAA,UACxB;AAAA,UACA,MAAM,UAAU;AAAA,UAEhB;AAAA,QACF;AACA,kBAAM,uBAAO,QAAQ,SAAS,CAAC,EAAE,QAAQ,QAAQ,MAAM;AAEvD,cAAM,OAAwD,CAAC;AAC/D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA,UACA,EAAE,QAAQ,UAAU,cAAc,KAAK;AAAA,QACzC;AACA,mCAAO,IAAI,EAAE,aAAa,CAAC;AAC3B,mCAAO,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAAA,MAClE,CAAC;AAID,6BAAG,yDAAyD,YAAY;AACtE,cAAM,IAAI,qBAAqB,IAAI,CAAC;AACpC,cAAM,IAAI,oBAAI,KAAK,0BAA0B;AAC7C,cAAM,SAAS,MAAM;AAAA,UACnB,UAAU;AAAA,YACR,MAAM,GAAG,GAAG,GAAG,eAAe,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,YAC9C;AAAA,cACE,IAAI;AAAA,cACJ,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,MAAM;AAAA,cACN,MAAM,EAAE,OAAO,EAAE;AAAA,cACjB,SAAS;AAAA,cACT,MAAM,EAAE,aAAa,QAAQ,WAAW,CAAC,EAAE;AAAA,YAC7C;AAAA,YACA,MAAM,GAAG,GAAG,GAAG,eAAe,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,UAChD,CAAC;AAAA,UACD,EAAE,gBAAgB,KAAK;AAAA,QACzB;AACA,mCAAO,OAAO,IAAI,EAAE,KAAK,CAAC;AAC1B,mCAAO,OAAO,QAAQ,SAAS,EAAE,KAAK,CAAC;AAEvC,cAAM,OAAO,MAAM,QAAQ,OAAO;AAAA,UAChC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAY;AAAA,QACd,CAAC;AACD,mCAAO,IAAI,EAAE,aAAa,CAAC;AAC3B;AAAA,UACE,KAAK,MAAM,CAAC,MAAO,EAAuB,SAAS,sBAAU;AAAA,QAC/D,EAAE,KAAK,IAAI;AAAA,MACb,CAAC;AAED,6BAAG,uDAAuD,YAAY;AACpE,cAAM,QAAkB,CAAC;AACzB,cAAM,IAAI,oBAAoB,IAAI,CAAC;AACnC,cAAM,IAAI,oBAAI,KAAK,0BAA0B;AAC7C,cAAM;AAAA,UACJ,UAAU;AAAA,YACR,MAAM,GAAG,GAAG,GAAG,eAAe,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,YAC9C,MAAM,GAAG,GAAG,GAAG,eAAe,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,UAChD,CAAC;AAAA,UACD,EAAE,aAAa,CAAC,MAAM,MAAM,KAAK,EAAE,SAAS,EAAE;AAAA,QAChD;AAEA,mCAAO,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAAA,MAC9B,CAAC;AAMD,6BAAG,2DAA2D,YAAY;AACxE,cAAM,IAAI,yBAAyB,IAAI,CAAC;AAExC,cAAM,SAAS,oBAAI,KAAK,0BAA0B;AAClD,cAAM,SAAS,oBAAI,KAAK,0BAA0B;AAClD,cAAM;AAAA,UACJ,UAAU;AAAA,YACR,MAAM,GAAG,GAAG,GAAG,eAAe,QAAQ,EAAE,QAAQ,GAAG,CAAC;AAAA,YACpD,MAAM,GAAG,GAAG,GAAG,eAAe,QAAQ,EAAE,QAAQ,GAAG,CAAC;AAAA,UACtD,CAAC;AAAA,QACH;AACA,cAAM,SAAS,oBAAI,KAAK,0BAA0B;AAGlD,cAAM,MAAgB,CAAC;AACvB,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,gBAAI,KAAM,EAAE,KAA4B,MAAM;AAAA,UAChD;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,MAAM,gBAAgB,OAAO;AAAA,QAC1D;AACA,mCAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;AAGxB,cAAM,MAAgB,CAAC;AACvB,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,gBAAI,KAAM,EAAE,KAA4B,MAAM;AAAA,UAChD;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,eAAe;AAAA,YACf,UAAU;AAAA,UACZ;AAAA,QACF;AACA,mCAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;AAAA,MAC1B,CAAC;AAcD,wBAAG,OAAO,CAAC,KAAK,aAAa;AAAA,QAC3B;AAAA,QACA,YAAY;AACV,gBAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,gBAAM,IAAI,oBAAI,KAAK,0BAA0B;AAG7C,gBAAM,SAAS,MAAM;AAAA,YACnB,UAAU;AAAA,cACR;AAAA,gBACE,IAAI;AAAA,gBACJ,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,MAAM;AAAA,gBACN,MAAM,EAAE,QAAQ,EAAE;AAAA,gBAClB,KAAK,EAAE,OAAO,oBAAoB;AAAA,gBAClC,SAAS;AAAA,gBACT,MAAM,EAAE,aAAa,eAAe,WAAW,CAAC,EAAE;AAAA,cACpD;AAAA,cACA;AAAA,gBACE,IAAI;AAAA,gBACJ,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,MAAM;AAAA,gBACN,MAAM,EAAE,QAAQ,EAAE;AAAA,gBAClB,KAAK,EAAE,OAAO,qBAAqB;AAAA,gBACnC,SAAS;AAAA,gBACT,MAAM,EAAE,aAAa,eAAe,WAAW,CAAC,EAAE;AAAA,cACpD;AAAA,YACF,CAAC;AAAA,UACH;AACA,qCAAO,OAAO,IAAI,EAAE,KAAK,CAAC;AAE1B,gBAAM,SAA0D,CAAC;AACjE,gBAAM,MAAM;AAAA,YACV,CAAC,MAAM;AACL,qBAAO,KAAK,CAAC;AAAA,YACf;AAAA,YACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,UAClC;AACA,qCAAO,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ;AAAA,YACvC,EAAE,OAAO,oBAAoB;AAAA,YAC7B,EAAE,OAAO,qBAAqB;AAAA,UAChC,CAAC;AAED,gBAAM,QAAQ,MAAM,MAAM,WAAY,KAAK,OAAO,CAAC;AACnD,qCAAO,KAAK,EAAE,KAAK,CAAC;AACpB,gBAAM,QAAyD,CAAC;AAChE,gBAAM,MAAM;AAAA,YACV,CAAC,MAAM;AACL,oBAAM,KAAK,CAAC;AAAA,YACd;AAAA,YACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,UAClC;AACA,qCAAO,KAAK,EAAE,aAAa,CAAC;AAC5B,qBAAW,KAAK,MAAO,4BAAO,EAAE,OAAO,IAAI,EAAE,KAAK,IAAI;AACtD,qCAAO,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ;AAAA,YACvC,EAAE,QAAQ,EAAE;AAAA,YACZ,EAAE,QAAQ,EAAE;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAMD,4BAAS,OAAO,CAAC,KAAK,aAAa,EAAE,8BAA8B,MAAM;AACvE,6BAAG,wCAAwC,YAAY;AACrD,cAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,KAAK,EAAE,OAAO,iBAAiB,MAAM,SAAS;AAAA,YAChD;AAAA,UACF;AAAA,UACA,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,mCAAO,UAAU,CAAC,EAAE,GAAG,EAAE,QAAQ;AAAA,UAC/B,OAAO;AAAA,UACP,MAAM;AAAA,QACR,CAAC;AAGD,cAAM,OAAwD,CAAC;AAC/D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,aAAa,CAAC;AAC3B,mCAAO,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,iBAAiB,MAAM,SAAS,CAAC;AAEtE,mCAAO,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAAA,MAC5C,CAAC;AAED,6BAAG,4EAA4E,YAAY;AAYzF,cAAM,IAAI,YAAY,IAAI,CAAC;AAC3B,cAAM,OAAO,oBAAI,KAAK,0BAA0B;AAChD,cAAM,MAAM;AAAA,UACV;AAAA,UACA;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,GAAG,IAAI,KAAK;AAAA,cAC5B,KAAK,EAAE,MAAM,KAAK;AAAA,YACpB;AAAA,UACF;AAAA,UACA,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA,cAAM,OAAwD,CAAC;AAC/D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,aAAa,CAAC;AAC3B,cAAM,KAAM,KAAK,CAAC,EAAE,KAAoC;AACxD,cAAM,OAAQ,KAAK,CAAC,EAAE,IAA0B;AAQhD,cAAM,YAAY,CAAC,MACjB,aAAa,OAAO,EAAE,QAAQ,IAAI,IAAI,KAAK,CAAW,EAAE,QAAQ;AAClE,mCAAO,UAAU,EAAE,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC;AACzC,mCAAO,UAAU,IAAI,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC;AAE3C,mCAAO,OAAO,EAAE,EAAE,KAAK,OAAO,IAAI;AAAA,MACpC,CAAC;AAED,6BAAG,0FAAqF,YAAY;AAClG,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM;AAAA,UACV;AAAA,UACA;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,KAAK,EAAE,OAAO,mBAAmB;AAAA,YACnC;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,KAAK,EAAE,OAAO,mBAAmB;AAAA,YACnC;AAAA,UACF;AAAA,UACA,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAKA,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACxD,MAAM;AAAA,QACR,CAAC;AACD,cAAM,IAAI,MAAM,IAAI,CAAC;AACrB,mCAAO,GAAG,MAAM,OAAO,IAAI,EAAE,KAAK,IAAI;AACtC,mCAAO,GAAG,MAAM,OAAO,IAAI,EAAE,KAAK,IAAI;AAEtC,cAAM,OAAO,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACvD,MAAM;AAAA,UACN,OAAO;AAAA,UACP,OAAO;AAAA,QACT,CAAC;AACD,cAAM,IAAI,KAAK,IAAI,CAAC;AACpB,mCAAO,GAAG,MAAM,OAAO,IAAI,EAAE,KAAK,IAAI;AACtC,mCAAO,GAAG,MAAM,OAAO,IAAI,EAAE,KAAK,IAAI;AACtC,mCAAO,GAAG,KAAK,EAAE,KAAK,CAAC;AAAA,MACzB,CAAC;AAED,6BAAG,wEAAwE,YAAY;AACrF,cAAM,IAAI,YAAY,IAAI,CAAC;AAC3B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,OAAwD,CAAC;AAC/D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,aAAa,CAAC;AAI3B,mCAAO,KAAK,CAAC,EAAE,OAAO,IAAI,EAAE,KAAK,IAAI;AAAA,MACvC,CAAC;AAED,6BAAG,0DAA0D,YAAY;AACvE,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM;AAAA,UACV;AAAA,UACA;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,KAAK,EAAE,OAAO,gBAAgB;AAAA,YAChC;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,KAAK,EAAE,OAAO,gBAAgB;AAAA,YAChC;AAAA,UACF;AAAA,UACA,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AAEA,cAAM,SAAS,MAAM;AACrB,mCAAO,MAAM,EAAE,YAAY;AAC3B,cAAM,QAAQ,MAAM,OAAQ,KAAK,OAAO,CAAC;AACzC,mCAAO,KAAK,EAAE,KAAK,CAAC;AAEpB,cAAM,OAAwD,CAAC;AAC/D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,iBAAK,KAAK,CAAC;AAAA,UACb;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,IAAI,EAAE,aAAa,CAAC;AAE3B,mBAAW,KAAK,MAAM;AACpB,qCAAO,EAAE,OAAO,IAAI,EAAE,KAAK,IAAI;AAC/B,qCAAO,EAAE,IAAI,EAAE,YAAY;AAAA,QAC7B;AAAA,MACF,CAAC;AAED,6BAAG,8DAAyD,YAAY;AACtE,cAAM,IAAI,mBAAmB,IAAI,CAAC;AAClC,cAAM,MAAM;AAAA,UACV;AAAA,UACA;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,KAAK,EAAE,OAAO,gBAAgB;AAAA,YAChC;AAAA,UACF;AAAA,UACA,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,SAAS,MAAM;AACrB,cAAM,QAAQ,MAAM,OAAO,KAAK,OAAO,CAAC;AACxC,mCAAO,KAAK,EAAE,KAAK,CAAC;AACpB,cAAM,SAAS,MAAM,OAAO,KAAK,OAAO,CAAC;AACzC,mCAAO,MAAM,EAAE,KAAK,CAAC;AAAA,MACvB,CAAC;AAED,6BAAG,4DAAuD,YAAY;AACpE,cAAM,KAAK,aAAa,IAAI,CAAC;AAC7B,cAAM,KAAK,aAAa,IAAI,CAAC;AAC7B,cAAM,MAAM;AAAA,UACV;AAAA,UACA;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,KAAK,EAAE,OAAO,oBAAoB;AAAA,YACpC;AAAA,UACF;AAAA,UACA,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM,EAAE,QAAQ,EAAE;AAAA,cAClB,KAAK,EAAE,OAAO,kBAAkB;AAAA,YAClC;AAAA,UACF;AAAA,UACA,UAAU,EAAE,QAAQ,GAAG,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM,WAAY,KAAK,OAAO,EAAE;AAEtC,cAAM,IAAqD,CAAC;AAC5D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,cAAE,KAAK,CAAC;AAAA,UACV;AAAA,UACA,EAAE,QAAQ,IAAI,cAAc,KAAK;AAAA,QACnC;AACA,mCAAO,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE,KAAK,IAAI;AAElC,cAAM,IAAqD,CAAC;AAC5D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,cAAE,KAAK,CAAC;AAAA,UACV;AAAA,UACA,EAAE,QAAQ,IAAI,cAAc,KAAK;AAAA,QACnC;AACA,mCAAO,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,kBAAkB,CAAC;AAAA,MACvD,CAAC;AAED,6BAAG,uDAAuD,YAAY;AACpE,cAAM,IAAI,oBAAoB,IAAI,CAAC;AACnC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,UAAU,EAAE,QAAQ,EAAE,CAAC;AAAA,QACzB;AACA,cAAM,QAAQ,MAAM,MAAM,WAAY,KAAK,OAAO,CAAC;AACnD,mCAAO,KAAK,EAAE,KAAK,CAAC;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAED,QAAI,KAAK,QAAQ;AAQf,mCAAS,uBAAuB,MAAM;AACpC,+BAAG,6DAA6D,YAAY;AAI1E,gBAAM,SAAS,MAAM;AACrB,qCAAO,MAAM,EAAE,YAAY;AAC3B,gBAAM,WAAgC,CAAC;AACvC,cAAI;AACJ,gBAAM,UAAU,IAAI,QAAc,CAAC,QAAQ;AACzC,8BAAkB;AAAA,UACpB,CAAC;AACD,gBAAM,WAAW,MAAM,OAAQ,KAAK,OAAO,CAAC,MAAM;AAChD,qBAAS,KAAK,CAAC;AACf,4BAAgB;AAAA,UAClB,CAAC;AACD,gBAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,cAAI;AACF,kBAAM,SAAS,UAAU,IAAI,CAAC;AAC9B,kBAAM,OAAO;AAAA,cACX;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,OAAO,CAAC;AAAA,YACtB;AAIA,kBAAM;AACN,uCAAO,SAAS,MAAM,EAAE,uBAAuB,CAAC;AAChD,uCAAO,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM;AACtC,uCAAO,SAAS,CAAC,EAAE,OAAO,MAAM,EAAE,uBAAuB,CAAC;AAAA,UAC5D,UAAE;AACA,kBAAM,OAAO,QAAQ;AACrB,kBAAM,QAAQ,QAAQ,SAAS,CAAC;AAAA,UAClC;AAAA,QACF,CAAC;AAED,+BAAG,+DAA+D,YAAY;AAC5E,gBAAM,WAAgC,CAAC;AACvC,cAAI;AACJ,gBAAM,mBAAmB,IAAI,QAAc,CAAC,QAAQ;AAClD,+BAAmB;AAAA,UACrB,CAAC;AACD,gBAAM,MAAM,eAAe,IAAI,CAAC;AAChC,gBAAM,SAAS,iBAAiB,IAAI,CAAC;AACrC,gBAAM,WAAW,mBAAmB,IAAI,CAAC;AACzC,gBAAM,WAAW,MAAM,MAAM,OAAQ,KAAK,OAAO,CAAC,MAAM;AACtD,qBAAS,KAAK,CAAC;AACf,gBAAI,EAAE,WAAW,SAAU,kBAAiB;AAAA,UAC9C,CAAC;AACD,gBAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,cAAI;AAMF,kBAAM,MAAM;AAAA,cACV;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,YAC3B;AACA,kBAAM,OAAO;AAAA,cACX;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,QAAQ,OAAO,CAAC;AAAA,YAC9B;AACA,kBAAM,OAAO;AAAA,cACX;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,QAAQ,SAAS,CAAC;AAAA,YAChC;AACA,kBAAM;AACN,uCAAO,SAAS,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,cAAc;AAC7D,uCAAO,SAAS,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,EAAE,YAAY;AAC9D,uCAAO,SAAS,KAAK,CAAC,MAAM,EAAE,WAAW,QAAQ,CAAC,EAAE,YAAY;AAAA,UAClE,UAAE;AACA,kBAAM,OAAO,QAAQ;AACrB,kBAAM,QAAQ,QAAQ,SAAS,CAAC;AAAA,UAClC;AAAA,QACF,CAAC;AAED,+BAAG,kFAAkF,YAAY;AAC/F,gBAAM,WAAgC,CAAC;AACvC,cAAI;AACJ,gBAAM,mBAAmB,IAAI,QAAc,CAAC,QAAQ;AAClD,+BAAmB;AAAA,UACrB,CAAC;AACD,gBAAM,QAAQ,gBAAgB,IAAI,CAAC;AACnC,gBAAM,WAAW,yBAAyB,IAAI,CAAC;AAC/C,gBAAM,WAAW,MAAM,MAAM,OAAQ,KAAK,OAAO,CAAC,MAAM;AACtD,qBAAS,KAAK,CAAC;AACf,gBAAI,EAAE,WAAW,SAAU,kBAAiB;AAAA,UAC9C,CAAC;AACD,gBAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,cAAI;AAKF,kBAAM,OAAO;AAAA,cACX;AAAA,cACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,cACvB,UAAU,EAAE,QAAQ,MAAM,CAAC;AAAA,YAC7B;AACA,kBAAM,OAAO;AAAA,cACX;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,UAAU,EAAE,QAAQ,SAAS,CAAC;AAAA,YAChC;AACA,kBAAM;AACN,kBAAM,sBAAsB,SAAS;AAAA,cACnC,CAAC,MAAM,EAAE,WAAW;AAAA,YACtB;AACA,uCAAO,mBAAmB,EAAE,aAAa,CAAC;AAC1C,kBAAMA,UAAS,oBAAoB,CAAC,EAAE;AACtC,uCAAOA,OAAM,EAAE,aAAa,CAAC;AAE7B,uCAAOA,QAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ;AAAA,cACxC;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AACD,uCAAO,CAAC,GAAGA,QAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE;AAAA,cACzDA,QAAO,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,YACxB;AAAA,UACF,UAAE;AACA,kBAAM,OAAO,QAAQ;AACrB,kBAAM,QAAQ,QAAQ,SAAS,CAAC;AAAA,UAClC;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;","names":["import_vitest","import_vitest","import_vitest","LEVELS","import_vitest","entry","path","fs","import_vitest","mulberry32","import_vitest","mark_all","reset","stream","import_act","import_vitest","events","entry"]}