{"version":3,"file":"index.cjs","names":[],"sources":["../src/warn.ts","../src/flatten.ts","../src/intl.ts","../src/format.ts","../src/locale.ts","../src/icu.ts","../src/parse.ts","../src/instance.ts","../src/tags.ts","../src/dom.ts"],"sourcesContent":["// one warn-once for the whole runtime: the set is unbounded, so a message never carries a value\nconst warned = new Set<string>();\n\nexport function warnOnce(message: string): void {\n  if (warned.has(message)) return;\n  warned.add(message);\n  console.warn(`[verbaly] ${message}`);\n}\n","import type { MessageTree } from './types';\nimport { warnOnce } from './warn';\n\nexport function flatten(\n  tree: MessageTree,\n  prefix = '',\n  out: Record<string, string> = {},\n): Record<string, string> {\n  // a catalog is untrusted input: a lazy loader, addMessages or a CMS never crosses the build gate\n  if (!isGroup(tree)) return out;\n  for (const [key, value] of Object.entries(tree)) {\n    const path = prefix ? `${prefix}.${key}` : key;\n    if (typeof value === 'string') out[path] = value;\n    else if (isGroup(value)) flatten(value, path, out);\n    else warnOnce(`catalog value at \"${path}\" is not text, so the key renders as itself`);\n  }\n  return out;\n}\n\nfunction isGroup(value: unknown): value is MessageTree {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","const CACHE_CAP = 200; // dynamic locales/options can't grow unbounded\n\nconst nfCache = new Map<string, Intl.NumberFormat>();\nconst dtfCache = new Map<string, Intl.DateTimeFormat>();\nconst prCache = new Map<string, Intl.PluralRules>();\nconst rtfCache = new Map<string, Intl.RelativeTimeFormat>();\nconst lfCache = new Map<string, Intl.ListFormat>();\nconst dnCache = new Map<string, Intl.DisplayNames>();\n\nfunction cached<T>(cache: Map<string, T>, key: string, make: () => T): T {\n  let hit = cache.get(key);\n  if (!hit) {\n    if (cache.size >= CACHE_CAP) cache.delete(cache.keys().next().value as string);\n    hit = make();\n    cache.set(key, hit);\n  }\n  return hit;\n}\n\nexport function numberFormat(\n  locale: string,\n  options?: Intl.NumberFormatOptions,\n): Intl.NumberFormat {\n  const key = locale + (options ? JSON.stringify(options) : '');\n  return cached(nfCache, key, () => new Intl.NumberFormat(locale, options));\n}\n\nexport function dateTimeFormat(\n  locale: string,\n  options?: Intl.DateTimeFormatOptions,\n): Intl.DateTimeFormat {\n  const key = locale + (options ? JSON.stringify(options) : '');\n  return cached(dtfCache, key, () => new Intl.DateTimeFormat(locale, options));\n}\n\nexport function pluralRules(\n  locale: string,\n  type: Intl.PluralRuleType = 'cardinal',\n): Intl.PluralRules {\n  return cached(prCache, locale + type, () => new Intl.PluralRules(locale, { type }));\n}\n\nexport function relativeTimeFormat(locale: string): Intl.RelativeTimeFormat {\n  return cached(rtfCache, locale, () => new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }));\n}\n\nexport function listFormat(locale: string, type: Intl.ListFormatType): Intl.ListFormat {\n  return cached(lfCache, locale + type, () => new Intl.ListFormat(locale, { type }));\n}\n\nexport function displayNames(locale: string): Intl.DisplayNames {\n  return cached(dnCache, locale, () => new Intl.DisplayNames(locale, { type: 'language' }));\n}\n","import { dateTimeFormat, listFormat, numberFormat, pluralRules, relativeTimeFormat } from './intl';\nimport type { MessageNode, ParamNode } from './parse';\nimport type { Formatter, Params } from './types';\nimport { warnOnce } from './warn';\n\ninterface FormatContext {\n  locale: string;\n  params: Params | undefined;\n  formatters: Record<string, Formatter>;\n  hashValue?: unknown;\n  key?: string;\n}\n\nexport function formatNodes(nodes: MessageNode[], ctx: FormatContext): string {\n  let out = '';\n  for (const node of nodes) {\n    if (node.kind === 'text') out += node.value;\n    else if (node.kind === 'hash') out += autoFormat(ctx.hashValue, ctx.locale, ctx);\n    else out += formatParam(node, ctx);\n  }\n  return out;\n}\n\n// every warn names its message: keying on the param alone silenced the second message with the gap\nfunction where(ctx: FormatContext): string {\n  return ctx.key ? ` in \"${ctx.key}\"` : '';\n}\n\nfunction formatParam(node: ParamNode, ctx: FormatContext): string {\n  const value = ctx.params?.[node.name];\n  if (value === undefined) {\n    warnOnce(`missing param \"${node.name}\"${where(ctx)}`);\n    return `{${node.name}}`;\n  }\n\n  if (node.variants) {\n    const chosen = pickVariant(node.variants, value, ctx.locale, node.ordinal);\n    // the value is left out of the warn on purpose: a counter walking 0..N must not grow the dedupe\n    if (!chosen) {\n      warnOnce(`no case matched for {${node.name}}${where(ctx)}, add an \"other\" case`);\n      return '';\n    }\n    return formatNodes(chosen, { ...ctx, hashValue: value });\n  }\n  if (node.format) return applyFormat(value, node, ctx);\n  return autoFormat(value, ctx.locale, ctx);\n}\n\n// the type of the offending value, never the value: the dedupe set must stay bounded\nfunction describe(value: unknown): string {\n  if (value instanceof Date) return Number.isNaN(value.getTime()) ? 'an invalid Date' : 'a Date';\n  if (Array.isArray(value)) return 'an array';\n  if (value === null) return 'null';\n  if (value === undefined) return 'undefined';\n  const type = typeof value;\n  return type === 'object' ? 'an object' : `a ${type}`;\n}\n\nfunction pickVariant(\n  variants: [string, MessageNode[]][],\n  value: unknown,\n  locale: string,\n  ordinal?: boolean,\n): MessageNode[] | undefined {\n  const raw = String(value);\n  if (typeof value === 'number') {\n    for (const [key, nodes] of variants) if (key === `=${raw}`) return nodes;\n    const category = pluralRules(locale, ordinal ? 'ordinal' : 'cardinal').select(value);\n    for (const [key, nodes] of variants) if (key === category) return nodes;\n  } else {\n    for (const [key, nodes] of variants) if (key === raw) return nodes;\n  }\n  for (const [key, nodes] of variants) if (key === 'other') return nodes;\n  return undefined;\n}\n\nfunction applyFormat(value: unknown, node: ParamNode, ctx: FormatContext): string {\n  const { name, arg } = node;\n  const format = node.format!;\n  const custom = ctx.formatters[format];\n  if (custom) return custom(value, ctx.locale, arg);\n\n  const { locale } = ctx;\n  // a format missing its argument degrades like an invalid one: with a warn, never in silence\n  const degrade = (problem: string): string => {\n    warnOnce(`{${name}:${format}}${where(ctx)} ${problem}`);\n    return String(value);\n  };\n\n  switch (format) {\n    case 'number':\n      return numberFormat(locale).format(Number(value));\n    case 'integer':\n      return numberFormat(locale, { maximumFractionDigits: 0 }).format(Number(value));\n    case 'percent':\n      return numberFormat(locale, { style: 'percent' }).format(Number(value));\n    case 'currency':\n      if (!arg) return degrade('needs an argument like /USD');\n      try {\n        return numberFormat(locale, { style: 'currency', currency: arg }).format(Number(value));\n      } catch {\n        return degrade(`does not know the currency \"${arg}\"`);\n      }\n    case 'date':\n      try {\n        return dateTimeFormat(\n          locale,\n          arg ? { dateStyle: arg as Intl.DateTimeFormatOptions['dateStyle'] } : undefined,\n        ).format(toDate(value));\n      } catch {\n        return degrade(`cannot format ${describe(value)}${arg ? ` with style \"${arg}\"` : ''}`);\n      }\n    case 'time':\n      try {\n        return dateTimeFormat(locale, {\n          timeStyle: (arg ?? 'short') as Intl.DateTimeFormatOptions['timeStyle'],\n        }).format(toDate(value));\n      } catch {\n        return degrade(`cannot format ${describe(value)} with style \"${arg ?? 'short'}\"`);\n      }\n    case 'relative':\n      if (typeof value === 'number' && !arg) return degrade('needs an argument like /day');\n      if (typeof value !== 'number' && !(value instanceof Date))\n        return degrade('needs a number or a Date');\n      return formatRelative(value, node, ctx);\n    case 'list': {\n      if (!Array.isArray(value)) return degrade('needs an array');\n      const type = arg === 'or' ? 'disjunction' : arg === 'unit' ? 'unit' : 'conjunction';\n      return listFormat(locale, type).format(value.map((item) => autoFormat(item, locale, ctx)));\n    }\n    case 'unit':\n      if (!arg) return degrade('needs an argument like /kilometer');\n      try {\n        return numberFormat(locale, { style: 'unit', unit: arg }).format(Number(value));\n      } catch {\n        return degrade(`does not know the unit \"${arg}\"`);\n      }\n    default:\n      return degrade('is not a format verbaly knows');\n  }\n}\n\n// seconds per unit, largest first (auto pick)\nconst REL_UNITS: [Intl.RelativeTimeFormatUnit, number][] = [\n  ['year', 31536000],\n  ['month', 2592000],\n  ['week', 604800],\n  ['day', 86400],\n  ['hour', 3600],\n  ['minute', 60],\n  ['second', 1],\n];\n\nfunction formatRelative(value: number | Date, node: ParamNode, ctx: FormatContext): string {\n  const { arg } = node;\n  try {\n    const fmt = relativeTimeFormat(ctx.locale);\n    if (typeof value === 'number') return fmt.format(value, arg as Intl.RelativeTimeFormatUnit);\n    const diffSec = (value.getTime() - Date.now()) / 1000;\n    if (arg) {\n      const per = REL_UNITS.find(([unit]) => unit === arg)?.[1];\n      if (!per) throw new RangeError(arg);\n      return fmt.format(Math.round(diffSec / per), arg as Intl.RelativeTimeFormatUnit);\n    }\n    const [unit, per] = REL_UNITS.find(([, s]) => Math.abs(diffSec) >= s) ?? ['second', 1];\n    return fmt.format(Math.round(diffSec / per), unit);\n  } catch {\n    // an invalid Date lands here too, so the warn names both suspects instead of blaming the unit\n    warnOnce(`{${node.name}:relative}${where(ctx)} cannot format ${describe(value)} as \"${arg}\"`);\n    return String(value);\n  }\n}\n\nexport function autoFormat(value: unknown, locale: string, ctx?: FormatContext): string {\n  if (value === null || value === undefined) return '';\n  if (typeof value === 'number') return numberFormat(locale).format(value);\n  if (value instanceof Date) {\n    // an invalid Date makes Intl throw: degrade like every other bad format input\n    if (Number.isNaN(value.getTime())) {\n      warnOnce(`an invalid Date${ctx ? where(ctx) : ''} renders as plain text`);\n      return String(value);\n    }\n    return dateTimeFormat(locale).format(value);\n  }\n  return String(value);\n}\n\nfunction toDate(value: unknown): Date {\n  return value instanceof Date ? value : new Date(value as string | number);\n}\n","import { displayNames } from './intl';\nimport type { Verbaly } from './types';\n\nexport interface ResolveLocaleOptions {\n  supported: string[];\n  fallback?: string;\n  storageKey?: string | false;\n  path?: string | false;\n  base?: string;\n}\n\nexport interface LocaleFromPathOptions {\n  supported: string[];\n  path?: string;\n  base?: string;\n}\n\n// shared identity: localStorage key (browser) + cookie name (SSR integrations)\nexport const LOCALE_STORAGE_KEY = 'verbaly-locale';\n\n// zh-Hant-TW → [zh-Hant-TW, zh-Hant, zh]\nexport function narrowLocales(lang: string): string[] {\n  const out: string[] = [];\n  const parts = lang.split('-');\n  while (parts.length > 0) {\n    out.push(parts.join('-'));\n    parts.pop();\n  }\n  return out;\n}\n\n// fallback tables for engines without Intl.Locale getTextInfo (Firefox)\nconst RTL_SCRIPTS = /^(Arab|Aran|Hebr|Thaa|Nkoo|Syrc|Samr|Mand|Adlm|Rohg|Yezi)$/;\nconst RTL_LANGS = /^(ar|he|fa|ur|ps|sd|ug|yi|dv|ckb)$/;\n\ninterface TextInfoLocale extends Intl.Locale {\n  getTextInfo?(): { direction?: string };\n  textInfo?: { direction?: string };\n}\n\nexport function localeDirection(locale: string): 'ltr' | 'rtl' {\n  try {\n    const loc = new Intl.Locale(locale) as TextInfoLocale;\n    const direction = (loc.getTextInfo?.() ?? loc.textInfo)?.direction;\n    if (direction === 'rtl' || direction === 'ltr') return direction;\n    const script = loc.script ?? loc.maximize().script;\n    if (script) return RTL_SCRIPTS.test(script) ? 'rtl' : 'ltr';\n    return RTL_LANGS.test(loc.language) ? 'rtl' : 'ltr';\n  } catch {\n    // malformed tag: best effort on the primary subtag, never throw\n    return RTL_LANGS.test(locale.split('-')[0]!.toLowerCase()) ? 'rtl' : 'ltr';\n  }\n}\n\n// localized language name for locale switchers; defaults to the endonym\nexport function localeName(locale: string, displayIn: string = locale): string {\n  try {\n    return displayNames(displayIn).of(locale) ?? locale;\n  } catch {\n    return locale; // unknown tag or missing Intl data: the code beats a crash\n  }\n}\n\nexport interface LocalePathOptions {\n  supported: string[];\n  sourceLocale?: string;\n  path?: string;\n  base?: string;\n}\n\n// the inverse of what render writes: /es/docs → /pt/docs, and the source locale keeps no prefix\nexport function localePath(locale: string, options: LocalePathOptions): string {\n  const { supported, sourceLocale } = options;\n  const base = normalizeBase(options.base);\n  const full = options.path ?? currentPath() ?? '/';\n  const cut = full.search(/[?#]/);\n  const path = stripBase(cut < 0 ? full : full.slice(0, cut), base);\n  const rest = cut < 0 ? '' : full.slice(cut);\n\n  const segments = path.split('/').filter(Boolean);\n  if (segments[0] && matchPathSegment(segments[0], supported)) segments.shift();\n  if (locale !== sourceLocale) segments.unshift(locale);\n  const trailing = segments.length && path.endsWith('/') ? '/' : '';\n  return `${base}/${segments.join('/')}${trailing}${rest}`;\n}\n\n// which tree this page belongs to: a fact of the url, so it answers undefined instead of guessing\nexport function localeFromPath(options: LocaleFromPathOptions): string | undefined {\n  const path = options.path ?? currentPath();\n  if (path === undefined) return undefined;\n  const segment = stripBase(path, normalizeBase(options.base)).split('/').find(Boolean);\n  return segment ? matchPathSegment(segment, options.supported) : undefined;\n}\n\nexport function resolveLocale(options: ResolveLocaleOptions): string {\n  const { supported, fallback = supported[0] ?? 'en', storageKey = LOCALE_STORAGE_KEY } = options;\n\n  // the document you are looking at wins: render put the page under that prefix already translated\n  if (options.path !== false) {\n    const match = localeFromPath({ supported, path: options.path, base: options.base });\n    if (match) return match;\n  }\n\n  if (storageKey) {\n    const stored = getStorage()?.getItem(storageKey);\n    const match = stored && matchSupported(stored, supported);\n    if (match) return match;\n  }\n\n  for (const lang of preferredLanguages()) {\n    const match = matchSupported(lang, supported);\n    if (match) return match;\n  }\n\n  return fallback;\n}\n\n// 'app', '/app' and '/app/' all read as '/app'; nothing means the site sits at the root\nfunction normalizeBase(base: string | undefined): string {\n  const trimmed = base?.replace(/^\\/+/, '').replace(/\\/+$/, '');\n  return trimmed ? `/${trimmed}` : '';\n}\n\n// the boundary check is what keeps base /app from swallowing /application\nfunction stripBase(path: string, base: string): string {\n  if (!base || !path.startsWith(base)) return path;\n  const rest = path.slice(base.length);\n  if (rest === '') return '/';\n  return rest.startsWith('/') ? rest : path;\n}\n\n// language, optional script, optional region: what render writes, never a slug like pt-and-friends\nconst LOCALE_SEGMENT = /^[a-z]{2,3}(-[a-z]{4})?(-([a-z]{2}|\\d{3}))?$/i;\n\n// a segment is narrowed only when it is shaped like a tag: a slug must never become a locale\nfunction matchPathSegment(segment: string, supported: string[]): string | undefined {\n  if (supported.includes(segment)) return segment;\n  return LOCALE_SEGMENT.test(segment) ? matchSupported(segment, supported) : undefined;\n}\n\n// exact, then progressive BCP-47 narrowing (zh-Hant-TW → zh-Hant → zh)\nfunction matchSupported(lang: string, supported: string[]): string | undefined {\n  for (const candidate of narrowLocales(lang)) {\n    if (supported.includes(candidate)) return candidate;\n  }\n  return undefined;\n}\n\n// server-side Accept-Language negotiation (q-values, case-insensitive, BCP-47 base)\nexport function negotiateLocale(\n  header: string | null | undefined,\n  supported: string[],\n  fallback: string = supported[0] ?? 'en',\n): string {\n  if (!header) return fallback;\n\n  const ranges: { tag: string; q: number }[] = [];\n  for (const part of header.split(',')) {\n    const [rawTag, ...params] = part.trim().split(';');\n    const tag = rawTag?.trim();\n    if (!tag || tag === '*') continue;\n    let q = 1;\n    for (const param of params) {\n      const [name, value] = param.split('=');\n      if (name?.trim().toLowerCase() === 'q') {\n        const parsed = Number(value?.trim());\n        q = Number.isFinite(parsed) ? parsed : 1;\n      }\n    }\n    if (q > 0) ranges.push({ tag, q });\n  }\n  // stable sort: ties keep header order\n  ranges.sort((a, b) => b.q - a.q);\n\n  for (const { tag } of ranges) {\n    const match = matchSupportedLoose(tag, supported);\n    if (match) return match;\n  }\n  return fallback;\n}\n\n// case-insensitive matchSupported (headers arrive as en-US; configs as en)\nfunction matchSupportedLoose(lang: string, supported: string[]): string | undefined {\n  for (const candidate of narrowLocales(lang.toLowerCase())) {\n    const match = supported.find((s) => s.toLowerCase() === candidate);\n    if (match) return match;\n  }\n  return undefined;\n}\n\n// per-request negotiation shared by SSR integrations: cookie value → Accept-Language → fallback\nexport interface RequestLocaleOptions {\n  supported: string[];\n  cookie?: string | null;\n  header?: string | null;\n  fallback?: string;\n}\n\nexport function resolveRequestLocale(options: RequestLocaleOptions): string {\n  const { supported, cookie, header, fallback = supported[0] ?? 'en' } = options;\n  if (cookie) {\n    // '' sentinel = no match → fall through to the header\n    const match = negotiateLocale(cookie, supported, '');\n    if (match) return match;\n  }\n  return negotiateLocale(header, supported, fallback);\n}\n\nexport interface SwitchLocaleOptions {\n  cookie?: string | false;\n  maxAge?: number;\n}\n\nconst YEAR = 31536000;\n\n// shared by the SSR integrations: catalog first (no flash), then locale, then persistence\nexport async function switchLocale(\n  instance: Pick<Verbaly, 'loadLocale' | 'setLocale'>,\n  locale: string,\n  options: SwitchLocaleOptions = {},\n): Promise<void> {\n  const { cookie = LOCALE_STORAGE_KEY, maxAge = YEAR } = options;\n  await instance.loadLocale(locale);\n  instance.setLocale(locale);\n  if (typeof document === 'undefined') return; // SSR-safe no-op\n  if (cookie) {\n    document.cookie = `${cookie}=${encodeURIComponent(locale)}; path=/; max-age=${maxAge}; samesite=lax`;\n  }\n  document.documentElement.lang = locale;\n  document.documentElement.dir = localeDirection(locale);\n}\n\nexport function persistLocale(\n  locale: string,\n  storageKey: string | false = LOCALE_STORAGE_KEY,\n): void {\n  if (storageKey) getStorage()?.setItem(storageKey, locale);\n  if (typeof document !== 'undefined') {\n    document.documentElement.lang = locale;\n    document.documentElement.dir = localeDirection(locale);\n  }\n}\n\nfunction currentPath(): string | undefined {\n  // require document like every other browser check: a server has no page to read a prefix from\n  return typeof document !== 'undefined' && typeof location !== 'undefined'\n    ? location.pathname\n    : undefined;\n}\n\nfunction preferredLanguages(): readonly string[] {\n  // require document: Node 21+ has a global navigator whose language is the OS, not a user\n  if (typeof document === 'undefined' || typeof navigator === 'undefined') return [];\n  return navigator.languages?.length ? navigator.languages : [navigator.language];\n}\n\nfunction getStorage(): Storage | null {\n  try {\n    return typeof localStorage === 'undefined' ? null : localStorage;\n  } catch {\n    return null; // blocked storage (privacy mode)\n  }\n}\n","import type { MessageNode, ParamNode } from './parse';\n\n// ICU escape-hatch → native MessageNode AST\nconst ICU_ARG = /\\{\\s*[a-zA-Z0-9_]+\\s*,\\s*(?:plural|selectordinal|select|number|date|time)\\b/;\n\nexport function isIcu(message: string): boolean {\n  return ICU_ARG.test(message);\n}\n\nexport function parseIcu(message: string): MessageNode[] {\n  let i = 0;\n  const at = (): string => message.charAt(i);\n  const skipWs = (): void => {\n    while (i < message.length && /\\s/.test(at())) i++;\n  };\n  const readIdent = (): string => {\n    let s = '';\n    while (i < message.length && /[a-zA-Z0-9_]/.test(at())) s += message[i++];\n    return s;\n  };\n\n  function parseBody(inPlural: boolean): MessageNode[] {\n    const nodes: MessageNode[] = [];\n    let buf = '';\n    const flush = (): void => {\n      if (buf) nodes.push({ kind: 'text', value: buf });\n      buf = '';\n    };\n    while (i < message.length) {\n      const ch = at();\n      if (ch === '}') break;\n      if (ch === '{') {\n        flush();\n        nodes.push(parseArg());\n      } else if (ch === '#' && inPlural) {\n        flush();\n        nodes.push({ kind: 'hash' });\n        i++;\n      } else if (ch === \"'\") {\n        buf += readQuoted();\n      } else {\n        buf += ch;\n        i++;\n      }\n    }\n    flush();\n    return nodes;\n  }\n\n  // ICU apostrophe quoting\n  function readQuoted(): string {\n    i++; // opening '\n    if (at() === \"'\") {\n      i++;\n      return \"'\";\n    }\n    const next = at();\n    if (next !== '{' && next !== '}' && next !== '#') return \"'\"; // lone apostrophe\n    let out = '';\n    while (i < message.length) {\n      if (at() === \"'\") {\n        if (message.charAt(i + 1) === \"'\") {\n          out += \"'\";\n          i += 2;\n          continue;\n        }\n        i++; // closing '\n        return out;\n      }\n      out += message[i++];\n    }\n    return out; // unterminated\n  }\n\n  function parseArg(): MessageNode {\n    i++; // {\n    skipWs();\n    const name = readIdent();\n    skipWs();\n    if (at() === '}') {\n      i++;\n      return { kind: 'param', name };\n    }\n    if (at() === ',') i++;\n    skipWs();\n    const type = readIdent();\n    const node: ParamNode = { kind: 'param', name };\n\n    if (type === 'number' || type === 'date' || type === 'time') {\n      skipWs();\n      let style = '';\n      if (at() === ',') {\n        i++;\n        skipWs();\n        while (i < message.length && at() !== '}' && at() !== ',') style += message[i++];\n        style = style.trim();\n      }\n      if (type === 'number') {\n        node.format =\n          style === 'integer' || style === 'percent' || style === 'currency' ? style : 'number';\n      } else {\n        node.format = type;\n        if (style) node.arg = style;\n      }\n      skipToClose();\n      return node;\n    }\n\n    if (type === 'plural' || type === 'selectordinal' || type === 'select') {\n      if (type === 'selectordinal') node.ordinal = true;\n      const variants: [string, MessageNode[]][] = [];\n      skipWs();\n      if (at() === ',') i++; // comma after the keyword\n      skipWs();\n      if (type !== 'select' && message.startsWith('offset:', i)) {\n        i += 7;\n        skipWs();\n        while (i < message.length && /[0-9]/.test(at())) i++; // offset parsed, not applied (v1)\n        skipWs();\n      }\n      while (i < message.length && at() !== '}') {\n        const selector = readSelector();\n        skipWs();\n        if (at() !== '{') break;\n        i++; // {\n        const body = parseBody(type !== 'select');\n        if (at() === '}') i++;\n        variants.push([selector, body]);\n        skipWs();\n      }\n      if (at() === '}') i++;\n      node.variants = variants;\n      return node;\n    }\n\n    // unknown type → simple param\n    skipToClose();\n    return node;\n  }\n\n  function readSelector(): string {\n    if (at() === '=') {\n      let s = '=';\n      i++;\n      while (i < message.length && /[0-9]/.test(at())) s += message[i++];\n      return s;\n    }\n    let s = '';\n    while (i < message.length && !/[\\s{]/.test(at())) s += message[i++];\n    return s;\n  }\n\n  function skipToClose(): void {\n    while (i < message.length && at() !== '}') i++;\n    if (at() === '}') i++;\n  }\n\n  return parseBody(false);\n}\n","import { isIcu, parseIcu } from './icu';\n\nexport type MessageNode = { kind: 'text'; value: string } | { kind: 'hash' } | ParamNode;\n\nexport interface ParamNode {\n  kind: 'param';\n  name: string;\n  format?: string;\n  arg?: string;\n  ordinal?: boolean;\n  variants?: [string, MessageNode[]][];\n}\n\nconst astCache = new Map<string, MessageNode[]>();\nconst AST_CACHE_MAX = 5000; // dynamic/CMS messages can't grow it unbounded\n\nexport function parse(message: string): MessageNode[] {\n  let cached = astCache.get(message);\n  if (!cached) {\n    // drop the oldest, never the whole map: clearing threw away the hot set on every overflow\n    if (astCache.size >= AST_CACHE_MAX) astCache.delete(astCache.keys().next().value as string);\n    cached = isIcu(message) ? parseIcu(message) : parseMessage(message, false);\n    astCache.set(message, cached);\n  }\n  return cached;\n}\n\nfunction parseMessage(input: string, inVariant: boolean): MessageNode[] {\n  const nodes: MessageNode[] = [];\n  let buf = '';\n  let i = 0;\n\n  const flush = () => {\n    if (buf) nodes.push({ kind: 'text', value: buf });\n    buf = '';\n  };\n\n  while (i < input.length) {\n    const ch = input[i];\n    if (ch === '{') {\n      if (input[i + 1] === '{') {\n        buf += '{';\n        i += 2;\n        continue;\n      }\n      const close = findClose(input, i);\n      if (close < 0) {\n        buf += input.slice(i);\n        break;\n      }\n      flush();\n      nodes.push(parsePlaceholder(input.slice(i + 1, close)));\n      i = close + 1;\n    } else if (ch === '}' && input[i + 1] === '}') {\n      buf += '}';\n      i += 2;\n    } else if (inVariant && ch === '#') {\n      if (input[i + 1] === '#') {\n        buf += '#';\n        i += 2;\n      } else {\n        flush();\n        nodes.push({ kind: 'hash' });\n        i += 1;\n      }\n    } else {\n      buf += ch;\n      i += 1;\n    }\n  }\n  flush();\n  return nodes;\n}\n\nfunction findClose(input: string, open: number): number {\n  let depth = 0;\n  let i = open;\n  while (i < input.length) {\n    const ch = input[i];\n    if (ch === '{') {\n      if (input[i + 1] === '{') {\n        i += 2;\n        continue;\n      }\n      depth += 1;\n    } else if (ch === '}') {\n      if (input[i + 1] === '}') {\n        i += 2;\n        continue;\n      }\n      depth -= 1;\n      if (depth === 0) return i;\n    }\n    i += 1;\n  }\n  return -1;\n}\n\nfunction parsePlaceholder(inner: string): MessageNode {\n  const segments = splitTop(inner);\n  const head = (segments[0] ?? '').trim();\n  if (!head) return { kind: 'text', value: `{${inner}}` };\n\n  const colon = head.indexOf(':');\n  const name = (colon < 0 ? head : head.slice(0, colon)).trim();\n  if (!name) return { kind: 'text', value: `{${inner}}` };\n\n  const node: ParamNode = { kind: 'param', name };\n\n  if (colon >= 0) {\n    const fmtRaw = head.slice(colon + 1).trim();\n    const slash = fmtRaw.indexOf('/');\n    node.format = (slash < 0 ? fmtRaw : fmtRaw.slice(0, slash)).trim();\n    if (slash >= 0) node.arg = fmtRaw.slice(slash + 1).trim();\n  }\n\n  if (segments.length > 1) {\n    node.variants = [];\n    for (const seg of segments.slice(1)) {\n      const sep = seg.indexOf(':');\n      if (sep < 0) continue;\n      const key = seg.slice(0, sep).trim();\n      const body = seg.slice(sep + 1).trim();\n      if (key) node.variants.push([key, parseMessage(body, true)]);\n    }\n  }\n  return node;\n}\n\nfunction splitTop(input: string): string[] {\n  const parts: string[] = [];\n  let buf = '';\n  let depth = 0;\n  let i = 0;\n  while (i < input.length) {\n    const ch = input[i];\n    if (ch === '{') {\n      if (input[i + 1] === '{') {\n        buf += '{{';\n        i += 2;\n        continue;\n      }\n      depth += 1;\n      buf += ch;\n    } else if (ch === '}') {\n      if (input[i + 1] === '}') {\n        buf += '}}';\n        i += 2;\n        continue;\n      }\n      depth -= 1;\n      buf += ch;\n    } else if (ch === '|' && depth === 0) {\n      if (input[i + 1] === '|') {\n        buf += '|';\n        i += 2;\n        continue;\n      }\n      parts.push(buf);\n      buf = '';\n    } else {\n      buf += ch;\n    }\n    i += 1;\n  }\n  parts.push(buf);\n  return parts;\n}\n","import { flatten } from './flatten';\nimport { autoFormat, formatNodes } from './format';\nimport { narrowLocales } from './locale';\nimport { parse } from './parse';\nimport { warnOnce } from './warn';\nimport type {\n  DictionaryInput,\n  MessageTree,\n  Params,\n  TFunction,\n  Verbaly,\n  VerbalyOptions,\n} from './types';\n\nexport function createVerbaly<const D extends DictionaryInput = DictionaryInput>(\n  options: VerbalyOptions<D> = {},\n): Verbaly<D> {\n  const dict: Record<string, Record<string, string>> = {};\n  const listeners = new Set<() => void>();\n  const formatters = options.formatters ?? {};\n  const loaders = options.loaders ?? {};\n  const loaded = new Set<string>();\n  const inFlight = new Map<string, Promise<void>>();\n  const fallbacks = options.fallback\n    ? Array.isArray(options.fallback)\n      ? options.fallback\n      : [options.fallback]\n    : [];\n\n  let locale = options.locale ?? detectLocale();\n  let version = 0;\n  let chainCache: string[] | null = null;\n\n  if (options.messages) {\n    for (const [loc, tree] of Object.entries(options.messages)) {\n      dict[loc] = flatten(tree);\n    }\n  }\n\n  function chain(): string[] {\n    if (chainCache) return chainCache;\n    const result = narrowLocales(locale);\n    for (const fb of fallbacks) if (!result.includes(fb)) result.push(fb);\n    chainCache = result;\n    return result;\n  }\n\n  function lookup(key: string): { msg: string; from: string } | undefined {\n    for (const loc of chain()) {\n      const msg = dict[loc]?.[key];\n      // '' = untranslated (extract scaffolds it) → keep falling back\n      if (msg) return { msg, from: loc };\n    }\n    return undefined;\n  }\n\n  function translate(key: string, params: Params | undefined): string {\n    const hit = lookup(key);\n    if (hit === undefined) {\n      const replacement = options.onMissing?.(key, locale);\n      const value = typeof replacement === 'string' ? replacement : key;\n      if (typeof replacement !== 'string' && !options.onMissing) {\n        warnOnce(`missing key \"${key}\" (${locale})`);\n      }\n      options.onResolve?.({ key, locale, value, status: 'miss' });\n      return value;\n    }\n    const value = formatNodes(parse(hit.msg), { locale, params, formatters, key });\n    options.onResolve?.({\n      key,\n      locale,\n      value,\n      status: hit.from === locale ? 'hit' : 'fallback',\n      from: hit.from,\n    });\n    return value;\n  }\n\n  function tagged(strings: TemplateStringsArray, values: unknown[]): string {\n    let out = strings[0] ?? '';\n    for (let i = 0; i < values.length; i++) {\n      out += autoFormat(values[i], locale) + (strings[i + 1] ?? '');\n    }\n    return out;\n  }\n\n  function notify(): void {\n    version += 1;\n    for (const fn of listeners) fn();\n  }\n\n  autoLoad(locale);\n\n  const t = ((first: unknown, ...rest: unknown[]): string => {\n    if (isTemplateStrings(first)) return tagged(first, rest);\n    return translate(first as string, rest[0] as Params | undefined);\n  }) as TFunction<D>;\n\n  t.id =\n    () =>\n    (strings: TemplateStringsArray, ...values: unknown[]) =>\n      tagged(strings, values);\n\n  // fire and forget: the UI re-renders when it lands, and a failure reports instead of rejecting\n  function autoLoad(target: string): void {\n    void loadLocale(target).catch(() => {\n      warnOnce(`failed to load catalog for \"${target}\"`);\n    });\n  }\n\n  function pendingLoader(target: string): string | undefined {\n    for (const candidate of narrowLocales(target)) {\n      if (loaders[candidate]) return loaded.has(candidate) ? undefined : candidate;\n    }\n    return undefined;\n  }\n\n  function loadLocale(target: string): Promise<void> {\n    const pending = pendingLoader(target);\n    if (!pending) return Promise.resolve();\n    const running = inFlight.get(pending);\n    if (running) return running;\n    const load = loaders[pending]!()\n      .then((mod) => {\n        loaded.add(pending);\n        inFlight.delete(pending);\n        addMessages(\n          pending,\n          'default' in mod ? (mod.default as MessageTree) : (mod as MessageTree),\n        );\n      })\n      .catch((error: unknown) => {\n        inFlight.delete(pending);\n        throw error;\n      });\n    inFlight.set(pending, load);\n    return load;\n  }\n\n  function addMessages(loc: string, messages: MessageTree): void {\n    dict[loc] = { ...dict[loc], ...flatten(messages) };\n    notify();\n  }\n\n  return {\n    get locale() {\n      return locale;\n    },\n    get locales() {\n      return [...new Set([...Object.keys(dict), ...Object.keys(loaders)])];\n    },\n    get version() {\n      return version;\n    },\n    t,\n    setLocale(next: string) {\n      autoLoad(next);\n      if (next === locale) return;\n      locale = next;\n      chainCache = null;\n      notify();\n    },\n    loadLocale,\n    addMessages,\n    subscribe(listener: () => void) {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n    has(key: string) {\n      return lookup(key) !== undefined;\n    },\n    inspect(key: string) {\n      const hit = lookup(key);\n      return hit ? { from: hit.from, source: hit.msg } : undefined;\n    },\n  };\n}\n\nfunction isTemplateStrings(value: unknown): value is TemplateStringsArray {\n  return Array.isArray(value) && 'raw' in value;\n}\n\nfunction detectLocale(): string {\n  // gate on document, not navigator: Node 21+ exposes a global navigator (OS locale)\n  return typeof document !== 'undefined' && typeof navigator !== 'undefined' && navigator.language\n    ? navigator.language\n    : 'en';\n}\n","// Named-tag tokenizer for <Trans>\nexport type TagNode = string | { name: string; children: TagNode[] };\n\nconst TAG = /<(\\/?)([a-zA-Z][\\w-]*)(\\/?)>/g;\n\n// text runs only, post-tokenize: decoded braces/angles never re-enter a parser\nconst ENTITY = /&(?:(lt|gt|amp)|#(\\d+)|#[xX]([0-9a-fA-F]+));/g;\nconst ENTITY_MAP: Record<string, string> = { lt: '<', gt: '>', amp: '&' };\nconst decodeEntities = (s: string): string =>\n  s.replace(ENTITY, (full, name?: string, dec?: string, hex?: string) => {\n    if (name) return ENTITY_MAP[name]!;\n    const code = dec ? parseInt(dec, 10) : parseInt(hex!, 16);\n    return code <= 0x10ffff ? String.fromCodePoint(code) : full;\n  });\n\nexport function parseTags(text: string): TagNode[] {\n  TAG.lastIndex = 0;\n  const root: TagNode[] = [];\n  const stack: { name: string; children: TagNode[] }[] = [];\n  const top = (): TagNode[] => (stack.length ? stack[stack.length - 1]!.children : root);\n  const pushText = (s: string): void => {\n    if (s) top().push(decodeEntities(s));\n  };\n\n  let last = 0;\n  let m: RegExpExecArray | null;\n  while ((m = TAG.exec(text)) !== null) {\n    const [full, closing, name, selfClose] = m;\n    pushText(text.slice(last, m.index));\n    last = m.index + full.length;\n\n    if (selfClose) {\n      top().push({ name: name!, children: [] });\n    } else if (closing) {\n      if (stack.length && stack[stack.length - 1]!.name === name) {\n        const node = stack.pop()!;\n        top().push(node);\n      } else {\n        pushText(full); // stray closing tag → literal\n      }\n    } else {\n      stack.push({ name: name!, children: [] });\n    }\n  }\n  pushText(text.slice(last));\n\n  // unclosed opens: drop wrapper\n  while (stack.length) {\n    const node = stack.pop()!;\n    top().push(...node.children);\n  }\n  return root;\n}\n","import { narrowLocales } from './locale';\nimport { parseTags, type TagNode } from './tags';\nimport type { DictionaryInput, Params, Verbaly } from './types';\nimport { warnOnce } from './warn';\n\n// hrefs come from the caller, never from messages\nexport type RichLink = string | { href: string; target?: string; rel?: string };\n\nexport interface BindDomOptions {\n  root?: ParentNode;\n  attribute?: string;\n  richTags?: string[];\n  richLinks?: Record<string, RichLink>;\n}\n\nconst UNSAFE_HREF = /^\\s*(javascript|data|vbscript):/i;\nconst URL_ATTR = /^(href|src|xlink:href|action|formaction)$/;\nconst BLOCKED_ATTR = /^(style|srcdoc)$/;\n\nexport function safeHref(href: string): string | undefined {\n  if (UNSAFE_HREF.test(href)) {\n    warnOnce(`blocked unsafe href: ${href}`);\n    return undefined;\n  }\n  return href;\n}\n\n// one link normalization for core + every adapter (applies safeHref)\nexport function normalizeLink(link: RichLink): { href?: string; target?: string; rel?: string } {\n  const { href, target, rel } = typeof link === 'string' ? { href: link } : link;\n  return { href: safeHref(href), target, rel };\n}\n\n// one attribute guard for bindDom + render, a catalog is untrusted input: undefined = skip\nexport function safeAttribute(name: string, value: string): string | undefined {\n  const lower = name.toLowerCase();\n  if (lower.startsWith('on') || BLOCKED_ATTR.test(lower)) return undefined;\n  if (URL_ATTR.test(lower)) return safeHref(value);\n  return value;\n}\n\n// children never reach a void element: a browser parses <br></br> as two <br>, hydration as one\nexport const VOID_TAGS = [\n  'area',\n  'base',\n  'br',\n  'col',\n  'embed',\n  'hr',\n  'img',\n  'input',\n  'link',\n  'meta',\n  'param',\n  'source',\n  'track',\n  'wbr',\n];\n\n// phrasing-only, attribute-less → XSS-safe\nexport const RICH_TAGS = [\n  'em',\n  'strong',\n  'code',\n  'b',\n  'i',\n  'u',\n  's',\n  'small',\n  'mark',\n  'sub',\n  'sup',\n  'span',\n  'kbd',\n  'abbr',\n  'br',\n  'wbr',\n];\n\nexport function bindDom<D extends DictionaryInput>(\n  instance: Verbaly<D>,\n  options: BindDomOptions = {},\n): () => void {\n  if (typeof document === 'undefined') {\n    throw new Error('[verbaly] bindDom requires a DOM');\n  }\n  const t = instance.t as unknown as (key: string, params?: Params) => string;\n  const root = options.root ?? document.body;\n  const attr = options.attribute ?? 'data-verbaly';\n  const argsAttr = `${attr}-args`;\n  const attrsAttr = `${attr}-attr`;\n  const richAttr = `${attr}-rich`;\n  const linksAttr = `${attr}-links`;\n  const richTags = new Set(options.richTags ?? RICH_TAGS);\n  const globalLinks = options.richLinks;\n  const argsCache = new WeakMap<Element, { raw: string | null; value: Params | undefined }>();\n  const linksCache = new WeakMap<\n    Element,\n    { raw: string | null; value: Record<string, RichLink> | undefined }\n  >();\n  const attrsCache = new WeakMap<Element, { raw: string | null; value: Params | undefined }>();\n\n  function fromCache<T>(\n    cache: WeakMap<Element, { raw: string | null; value: T }>,\n    el: Element,\n    raw: string | null,\n    compute: () => T,\n  ): T {\n    const hit = cache.get(el);\n    if (hit && hit.raw === raw) return hit.value;\n    const value = compute();\n    cache.set(el, { raw, value });\n    return value;\n  }\n\n  function cachedArgs(el: Element): Params | undefined {\n    const raw = el.getAttribute(argsAttr);\n    return fromCache(argsCache, el, raw, () => parseArgs(raw));\n  }\n\n  function cachedLinks(el: Element): Record<string, RichLink> | undefined {\n    const raw = el.getAttribute(linksAttr);\n    if (!raw) return globalLinks;\n    return fromCache(linksCache, el, raw, () => {\n      const own = parseArgs(raw) as Record<string, RichLink> | undefined;\n      return own ? (globalLinks ? { ...globalLinks, ...own } : own) : globalLinks;\n    });\n  }\n\n  function renderRich(\n    el: Element,\n    nodes: TagNode[],\n    links: Record<string, RichLink> | undefined,\n  ): void {\n    for (const node of nodes) {\n      if (typeof node === 'string') {\n        el.append(node);\n        continue;\n      }\n      const link = links?.[node.name];\n      if (link !== undefined) {\n        const { href, target, rel } = normalizeLink(link);\n        const a = el.ownerDocument.createElement('a');\n        if (href !== undefined) a.setAttribute('href', href);\n        if (target) a.setAttribute('target', target);\n        if (rel) a.setAttribute('rel', rel);\n        renderRich(a, node.children, links);\n        el.append(a);\n      } else if (richTags.has(node.name)) {\n        const child = el.ownerDocument.createElement(node.name);\n        if (!VOID_TAGS.includes(node.name)) renderRich(child, node.children, links);\n        el.append(child);\n      } else {\n        renderRich(el, node.children, links); // unknown tag → unwrap\n      }\n    }\n  }\n\n  // pre-rendered html wins until this locale resolves: repainting it is the flash render kills\n  let trustServerHtml = true;\n\n  function holdBack(key: string, current: string | null): boolean {\n    if (!trustServerHtml || !current?.trim()) return false;\n    return instance.inspect(key)?.from !== instance.locale;\n  }\n\n  function render(el: Element): void {\n    const args = cachedArgs(el);\n    const key = el.getAttribute(attr);\n    if (key && !holdBack(key, el.textContent)) {\n      const text = t(key, args);\n      if (el.hasAttribute(richAttr)) {\n        el.textContent = '';\n        renderRich(el, parseTags(text), cachedLinks(el));\n      } else {\n        el.textContent = text;\n      }\n    }\n\n    const rawAttrs = el.getAttribute(attrsAttr);\n    const attrMap = fromCache(attrsCache, el, rawAttrs, () => parseArgs(rawAttrs));\n    if (attrMap) {\n      for (const [name, attrKey] of Object.entries(attrMap)) {\n        if (typeof attrKey !== 'string') continue;\n        if (holdBack(attrKey, el.getAttribute(name))) continue;\n        const value = safeAttribute(name, t(attrKey, args));\n        if (value !== undefined) el.setAttribute(name, value);\n      }\n    }\n  }\n\n  const selector = `[${attr}], [${attrsAttr}]`;\n\n  function renderAll(scope: ParentNode | Element): void {\n    if (scope instanceof Element && scope.matches(selector)) render(scope);\n    for (const el of scope.querySelectorAll(selector)) render(el);\n  }\n\n  warnOnLangMismatch(instance.locale);\n  renderAll(root);\n  // from here the dom is ours: a stale value from a previous locale must not survive a switch\n  trustServerHtml = false;\n  const unsubscribe = instance.subscribe(() => renderAll(root));\n\n  const observer = new MutationObserver((records) => {\n    for (const record of records) {\n      if (record.type === 'attributes' && record.target instanceof Element) {\n        render(record.target);\n      } else if (record.type === 'childList') {\n        for (const node of record.addedNodes) {\n          if (node instanceof Element) renderAll(node);\n        }\n      }\n    }\n  });\n\n  observer.observe(root instanceof Document ? root.documentElement : (root as Node), {\n    childList: true,\n    subtree: true,\n    attributes: true,\n    attributeFilter: [attr, argsAttr, attrsAttr, richAttr, linksAttr],\n  });\n\n  return () => {\n    unsubscribe();\n    observer.disconnect();\n  };\n}\n\n// render writes <html lang>, so a disagreement here means the page is about to be translated away\nfunction warnOnLangMismatch(locale: string): void {\n  const lang = document.documentElement.lang;\n  if (!lang || narrowLocales(lang).includes(locale) || narrowLocales(locale).includes(lang)) return;\n  warnOnce(\n    `the page is <html lang=\"${lang}\"> and this instance is in \"${locale}\", so bindDom is about to ` +\n      `translate it away: read the url with localeFromPath when it carries the locale, and call ` +\n      `persistLocale first when it does not`,\n  );\n}\n\nfunction parseArgs(raw: string | null): Params | undefined {\n  if (!raw) return undefined;\n  try {\n    return JSON.parse(raw) as Params;\n  } catch {\n    warnOnce(`invalid args JSON: ${raw}`);\n    return undefined;\n  }\n}\n"],"mappings":";;AACA,MAAM,yBAAS,IAAI,IAAY;AAE/B,SAAgB,SAAS,SAAuB;CAC9C,IAAI,OAAO,IAAI,OAAO,GAAG;CACzB,OAAO,IAAI,OAAO;CAClB,QAAQ,KAAK,aAAa,SAAS;AACrC;;;ACJA,SAAgB,QACd,MACA,SAAS,IACT,MAA8B,CAAC,GACP;CAExB,IAAI,CAAC,QAAQ,IAAI,GAAG,OAAO;CAC3B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,GAAG;EAC/C,MAAM,OAAO,SAAS,GAAG,OAAO,GAAG,QAAQ;EAC3C,IAAI,OAAO,UAAU,UAAU,IAAI,QAAQ;OACtC,IAAI,QAAQ,KAAK,GAAG,QAAQ,OAAO,MAAM,GAAG;OAC5C,SAAS,qBAAqB,KAAK,4CAA4C;CACtF;CACA,OAAO;AACT;AAEA,SAAS,QAAQ,OAAsC;CACrD,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;ACrBA,MAAM,YAAY;AAElB,MAAM,0BAAU,IAAI,IAA+B;AACnD,MAAM,2BAAW,IAAI,IAAiC;AACtD,MAAM,0BAAU,IAAI,IAA8B;AAClD,MAAM,2BAAW,IAAI,IAAqC;AAC1D,MAAM,0BAAU,IAAI,IAA6B;AACjD,MAAM,0BAAU,IAAI,IAA+B;AAEnD,SAAS,OAAU,OAAuB,KAAa,MAAkB;CACvE,IAAI,MAAM,MAAM,IAAI,GAAG;CACvB,IAAI,CAAC,KAAK;EACR,IAAI,MAAM,QAAQ,WAAW,MAAM,OAAO,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAe;EAC7E,MAAM,KAAK;EACX,MAAM,IAAI,KAAK,GAAG;CACpB;CACA,OAAO;AACT;AAEA,SAAgB,aACd,QACA,SACmB;CACnB,MAAM,MAAM,UAAU,UAAU,KAAK,UAAU,OAAO,IAAI;CAC1D,OAAO,OAAO,SAAS,WAAW,IAAI,KAAK,aAAa,QAAQ,OAAO,CAAC;AAC1E;AAEA,SAAgB,eACd,QACA,SACqB;CACrB,MAAM,MAAM,UAAU,UAAU,KAAK,UAAU,OAAO,IAAI;CAC1D,OAAO,OAAO,UAAU,WAAW,IAAI,KAAK,eAAe,QAAQ,OAAO,CAAC;AAC7E;AAEA,SAAgB,YACd,QACA,OAA4B,YACV;CAClB,OAAO,OAAO,SAAS,SAAS,YAAY,IAAI,KAAK,YAAY,QAAQ,EAAE,KAAK,CAAC,CAAC;AACpF;AAEA,SAAgB,mBAAmB,QAAyC;CAC1E,OAAO,OAAO,UAAU,cAAc,IAAI,KAAK,mBAAmB,QAAQ,EAAE,SAAS,OAAO,CAAC,CAAC;AAChG;AAEA,SAAgB,WAAW,QAAgB,MAA4C;CACrF,OAAO,OAAO,SAAS,SAAS,YAAY,IAAI,KAAK,WAAW,QAAQ,EAAE,KAAK,CAAC,CAAC;AACnF;AAEA,SAAgB,aAAa,QAAmC;CAC9D,OAAO,OAAO,SAAS,cAAc,IAAI,KAAK,aAAa,QAAQ,EAAE,MAAM,WAAW,CAAC,CAAC;AAC1F;;;ACvCA,SAAgB,YAAY,OAAsB,KAA4B;CAC5E,IAAI,MAAM;CACV,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,SAAS,QAAQ,OAAO,KAAK;MACjC,IAAI,KAAK,SAAS,QAAQ,OAAO,WAAW,IAAI,WAAW,IAAI,QAAQ,GAAG;MAC1E,OAAO,YAAY,MAAM,GAAG;CAEnC,OAAO;AACT;AAGA,SAAS,MAAM,KAA4B;CACzC,OAAO,IAAI,MAAM,QAAQ,IAAI,IAAI,KAAK;AACxC;AAEA,SAAS,YAAY,MAAiB,KAA4B;CAChE,MAAM,QAAQ,IAAI,SAAS,KAAK;CAChC,IAAI,UAAU,KAAA,GAAW;EACvB,SAAS,kBAAkB,KAAK,KAAK,GAAG,MAAM,GAAG,GAAG;EACpD,OAAO,IAAI,KAAK,KAAK;CACvB;CAEA,IAAI,KAAK,UAAU;EACjB,MAAM,SAAS,YAAY,KAAK,UAAU,OAAO,IAAI,QAAQ,KAAK,OAAO;EAEzE,IAAI,CAAC,QAAQ;GACX,SAAS,wBAAwB,KAAK,KAAK,GAAG,MAAM,GAAG,EAAE,sBAAsB;GAC/E,OAAO;EACT;EACA,OAAO,YAAY,QAAQ;GAAE,GAAG;GAAK,WAAW;EAAM,CAAC;CACzD;CACA,IAAI,KAAK,QAAQ,OAAO,YAAY,OAAO,MAAM,GAAG;CACpD,OAAO,WAAW,OAAO,IAAI,QAAQ,GAAG;AAC1C;AAGA,SAAS,SAAS,OAAwB;CACxC,IAAI,iBAAiB,MAAM,OAAO,OAAO,MAAM,MAAM,QAAQ,CAAC,IAAI,oBAAoB;CACtF,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO;CACjC,IAAI,UAAU,MAAM,OAAO;CAC3B,IAAI,UAAU,KAAA,GAAW,OAAO;CAChC,MAAM,OAAO,OAAO;CACpB,OAAO,SAAS,WAAW,cAAc,KAAK;AAChD;AAEA,SAAS,YACP,UACA,OACA,QACA,SAC2B;CAC3B,MAAM,MAAM,OAAO,KAAK;CACxB,IAAI,OAAO,UAAU,UAAU;EAC7B,KAAK,MAAM,CAAC,KAAK,UAAU,UAAU,IAAI,QAAQ,IAAI,OAAO,OAAO;EACnE,MAAM,WAAW,YAAY,QAAQ,UAAU,YAAY,UAAU,CAAC,CAAC,OAAO,KAAK;EACnF,KAAK,MAAM,CAAC,KAAK,UAAU,UAAU,IAAI,QAAQ,UAAU,OAAO;CACpE,OACE,KAAK,MAAM,CAAC,KAAK,UAAU,UAAU,IAAI,QAAQ,KAAK,OAAO;CAE/D,KAAK,MAAM,CAAC,KAAK,UAAU,UAAU,IAAI,QAAQ,SAAS,OAAO;AAEnE;AAEA,SAAS,YAAY,OAAgB,MAAiB,KAA4B;CAChF,MAAM,EAAE,MAAM,QAAQ;CACtB,MAAM,SAAS,KAAK;CACpB,MAAM,SAAS,IAAI,WAAW;CAC9B,IAAI,QAAQ,OAAO,OAAO,OAAO,IAAI,QAAQ,GAAG;CAEhD,MAAM,EAAE,WAAW;CAEnB,MAAM,WAAW,YAA4B;EAC3C,SAAS,IAAI,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,EAAE,GAAG,SAAS;EACtD,OAAO,OAAO,KAAK;CACrB;CAEA,QAAQ,QAAR;EACE,KAAK,UACH,OAAO,aAAa,MAAM,CAAC,CAAC,OAAO,OAAO,KAAK,CAAC;EAClD,KAAK,WACH,OAAO,aAAa,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,CAAC;EAChF,KAAK,WACH,OAAO,aAAa,QAAQ,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,CAAC;EACxE,KAAK;GACH,IAAI,CAAC,KAAK,OAAO,QAAQ,6BAA6B;GACtD,IAAI;IACF,OAAO,aAAa,QAAQ;KAAE,OAAO;KAAY,UAAU;IAAI,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,CAAC;GACxF,QAAQ;IACN,OAAO,QAAQ,+BAA+B,IAAI,EAAE;GACtD;EACF,KAAK,QACH,IAAI;GACF,OAAO,eACL,QACA,MAAM,EAAE,WAAW,IAA+C,IAAI,KAAA,CACxE,CAAC,CAAC,OAAO,OAAO,KAAK,CAAC;EACxB,QAAQ;GACN,OAAO,QAAQ,iBAAiB,SAAS,KAAK,IAAI,MAAM,gBAAgB,IAAI,KAAK,IAAI;EACvF;EACF,KAAK,QACH,IAAI;GACF,OAAO,eAAe,QAAQ,EAC5B,WAAY,OAAO,QACrB,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,CAAC;EACzB,QAAQ;GACN,OAAO,QAAQ,iBAAiB,SAAS,KAAK,EAAE,eAAe,OAAO,QAAQ,EAAE;EAClF;EACF,KAAK;GACH,IAAI,OAAO,UAAU,YAAY,CAAC,KAAK,OAAO,QAAQ,6BAA6B;GACnF,IAAI,OAAO,UAAU,YAAY,EAAE,iBAAiB,OAClD,OAAO,QAAQ,0BAA0B;GAC3C,OAAO,eAAe,OAAO,MAAM,GAAG;EACxC,KAAK;GACH,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,OAAO,QAAQ,gBAAgB;GAE1D,OAAO,WAAW,QADL,QAAQ,OAAO,gBAAgB,QAAQ,SAAS,SAAS,aACxC,CAAC,CAAC,OAAO,MAAM,KAAK,SAAS,WAAW,MAAM,QAAQ,GAAG,CAAC,CAAC;EAE3F,KAAK;GACH,IAAI,CAAC,KAAK,OAAO,QAAQ,mCAAmC;GAC5D,IAAI;IACF,OAAO,aAAa,QAAQ;KAAE,OAAO;KAAQ,MAAM;IAAI,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,CAAC;GAChF,QAAQ;IACN,OAAO,QAAQ,2BAA2B,IAAI,EAAE;GAClD;EACF,SACE,OAAO,QAAQ,+BAA+B;CAClD;AACF;AAGA,MAAM,YAAqD;CACzD,CAAC,QAAQ,OAAQ;CACjB,CAAC,SAAS,MAAO;CACjB,CAAC,QAAQ,MAAM;CACf,CAAC,OAAO,KAAK;CACb,CAAC,QAAQ,IAAI;CACb,CAAC,UAAU,EAAE;CACb,CAAC,UAAU,CAAC;AACd;AAEA,SAAS,eAAe,OAAsB,MAAiB,KAA4B;CACzF,MAAM,EAAE,QAAQ;CAChB,IAAI;EACF,MAAM,MAAM,mBAAmB,IAAI,MAAM;EACzC,IAAI,OAAO,UAAU,UAAU,OAAO,IAAI,OAAO,OAAO,GAAkC;EAC1F,MAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,KAAK;EACjD,IAAI,KAAK;GACP,MAAM,MAAM,UAAU,MAAM,CAAC,UAAU,SAAS,GAAG,CAAC,GAAG;GACvD,IAAI,CAAC,KAAK,MAAM,IAAI,WAAW,GAAG;GAClC,OAAO,IAAI,OAAO,KAAK,MAAM,UAAU,GAAG,GAAG,GAAkC;EACjF;EACA,MAAM,CAAC,MAAM,OAAO,UAAU,MAAM,GAAG,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;EACrF,OAAO,IAAI,OAAO,KAAK,MAAM,UAAU,GAAG,GAAG,IAAI;CACnD,QAAQ;EAEN,SAAS,IAAI,KAAK,KAAK,YAAY,MAAM,GAAG,EAAE,iBAAiB,SAAS,KAAK,EAAE,OAAO,IAAI,EAAE;EAC5F,OAAO,OAAO,KAAK;CACrB;AACF;AAEA,SAAgB,WAAW,OAAgB,QAAgB,KAA6B;CACtF,IAAI,UAAU,QAAQ,UAAU,KAAA,GAAW,OAAO;CAClD,IAAI,OAAO,UAAU,UAAU,OAAO,aAAa,MAAM,CAAC,CAAC,OAAO,KAAK;CACvE,IAAI,iBAAiB,MAAM;EAEzB,IAAI,OAAO,MAAM,MAAM,QAAQ,CAAC,GAAG;GACjC,SAAS,kBAAkB,MAAM,MAAM,GAAG,IAAI,GAAG,uBAAuB;GACxE,OAAO,OAAO,KAAK;EACrB;EACA,OAAO,eAAe,MAAM,CAAC,CAAC,OAAO,KAAK;CAC5C;CACA,OAAO,OAAO,KAAK;AACrB;AAEA,SAAS,OAAO,OAAsB;CACpC,OAAO,iBAAiB,OAAO,QAAQ,IAAI,KAAK,KAAwB;AAC1E;;;AC3KA,MAAa,qBAAqB;AAGlC,SAAgB,cAAc,MAAwB;CACpD,MAAM,MAAgB,CAAC;CACvB,MAAM,QAAQ,KAAK,MAAM,GAAG;CAC5B,OAAO,MAAM,SAAS,GAAG;EACvB,IAAI,KAAK,MAAM,KAAK,GAAG,CAAC;EACxB,MAAM,IAAI;CACZ;CACA,OAAO;AACT;AAGA,MAAM,cAAc;AACpB,MAAM,YAAY;AAOlB,SAAgB,gBAAgB,QAA+B;CAC7D,IAAI;EACF,MAAM,MAAM,IAAI,KAAK,OAAO,MAAM;EAClC,MAAM,aAAa,IAAI,cAAc,KAAK,IAAI,SAAA,EAAW;EACzD,IAAI,cAAc,SAAS,cAAc,OAAO,OAAO;EACvD,MAAM,SAAS,IAAI,UAAU,IAAI,SAAS,CAAC,CAAC;EAC5C,IAAI,QAAQ,OAAO,YAAY,KAAK,MAAM,IAAI,QAAQ;EACtD,OAAO,UAAU,KAAK,IAAI,QAAQ,IAAI,QAAQ;CAChD,QAAQ;EAEN,OAAO,UAAU,KAAK,OAAO,MAAM,GAAG,CAAC,CAAC,EAAE,CAAE,YAAY,CAAC,IAAI,QAAQ;CACvE;AACF;AAGA,SAAgB,WAAW,QAAgB,YAAoB,QAAgB;CAC7E,IAAI;EACF,OAAO,aAAa,SAAS,CAAC,CAAC,GAAG,MAAM,KAAK;CAC/C,QAAQ;EACN,OAAO;CACT;AACF;AAUA,SAAgB,WAAW,QAAgB,SAAoC;CAC7E,MAAM,EAAE,WAAW,iBAAiB;CACpC,MAAM,OAAO,cAAc,QAAQ,IAAI;CACvC,MAAM,OAAO,QAAQ,QAAQ,YAAY,KAAK;CAC9C,MAAM,MAAM,KAAK,OAAO,MAAM;CAC9B,MAAM,OAAO,UAAU,MAAM,IAAI,OAAO,KAAK,MAAM,GAAG,GAAG,GAAG,IAAI;CAChE,MAAM,OAAO,MAAM,IAAI,KAAK,KAAK,MAAM,GAAG;CAE1C,MAAM,WAAW,KAAK,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;CAC/C,IAAI,SAAS,MAAM,iBAAiB,SAAS,IAAI,SAAS,GAAG,SAAS,MAAM;CAC5E,IAAI,WAAW,cAAc,SAAS,QAAQ,MAAM;CACpD,MAAM,WAAW,SAAS,UAAU,KAAK,SAAS,GAAG,IAAI,MAAM;CAC/D,OAAO,GAAG,KAAK,GAAG,SAAS,KAAK,GAAG,IAAI,WAAW;AACpD;AAGA,SAAgB,eAAe,SAAoD;CACjF,MAAM,OAAO,QAAQ,QAAQ,YAAY;CACzC,IAAI,SAAS,KAAA,GAAW,OAAO,KAAA;CAC/B,MAAM,UAAU,UAAU,MAAM,cAAc,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO;CACpF,OAAO,UAAU,iBAAiB,SAAS,QAAQ,SAAS,IAAI,KAAA;AAClE;AAEA,SAAgB,cAAc,SAAuC;CACnE,MAAM,EAAE,WAAW,WAAW,UAAU,MAAM,MAAM,aAAa,uBAAuB;CAGxF,IAAI,QAAQ,SAAS,OAAO;EAC1B,MAAM,QAAQ,eAAe;GAAE;GAAW,MAAM,QAAQ;GAAM,MAAM,QAAQ;EAAK,CAAC;EAClF,IAAI,OAAO,OAAO;CACpB;CAEA,IAAI,YAAY;EACd,MAAM,SAAS,WAAW,CAAC,EAAE,QAAQ,UAAU;EAC/C,MAAM,QAAQ,UAAU,eAAe,QAAQ,SAAS;EACxD,IAAI,OAAO,OAAO;CACpB;CAEA,KAAK,MAAM,QAAQ,mBAAmB,GAAG;EACvC,MAAM,QAAQ,eAAe,MAAM,SAAS;EAC5C,IAAI,OAAO,OAAO;CACpB;CAEA,OAAO;AACT;AAGA,SAAS,cAAc,MAAkC;CACvD,MAAM,UAAU,MAAM,QAAQ,QAAQ,EAAE,CAAC,CAAC,QAAQ,QAAQ,EAAE;CAC5D,OAAO,UAAU,IAAI,YAAY;AACnC;AAGA,SAAS,UAAU,MAAc,MAAsB;CACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,WAAW,IAAI,GAAG,OAAO;CAC5C,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM;CACnC,IAAI,SAAS,IAAI,OAAO;CACxB,OAAO,KAAK,WAAW,GAAG,IAAI,OAAO;AACvC;AAGA,MAAM,iBAAiB;AAGvB,SAAS,iBAAiB,SAAiB,WAAyC;CAClF,IAAI,UAAU,SAAS,OAAO,GAAG,OAAO;CACxC,OAAO,eAAe,KAAK,OAAO,IAAI,eAAe,SAAS,SAAS,IAAI,KAAA;AAC7E;AAGA,SAAS,eAAe,MAAc,WAAyC;CAC7E,KAAK,MAAM,aAAa,cAAc,IAAI,GACxC,IAAI,UAAU,SAAS,SAAS,GAAG,OAAO;AAG9C;AAGA,SAAgB,gBACd,QACA,WACA,WAAmB,UAAU,MAAM,MAC3B;CACR,IAAI,CAAC,QAAQ,OAAO;CAEpB,MAAM,SAAuC,CAAC;CAC9C,KAAK,MAAM,QAAQ,OAAO,MAAM,GAAG,GAAG;EACpC,MAAM,CAAC,QAAQ,GAAG,UAAU,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG;EACjD,MAAM,MAAM,QAAQ,KAAK;EACzB,IAAI,CAAC,OAAO,QAAQ,KAAK;EACzB,IAAI,IAAI;EACR,KAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,CAAC,MAAM,SAAS,MAAM,MAAM,GAAG;GACrC,IAAI,MAAM,KAAK,CAAC,CAAC,YAAY,MAAM,KAAK;IACtC,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC;IACnC,IAAI,OAAO,SAAS,MAAM,IAAI,SAAS;GACzC;EACF;EACA,IAAI,IAAI,GAAG,OAAO,KAAK;GAAE;GAAK;EAAE,CAAC;CACnC;CAEA,OAAO,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;CAE/B,KAAK,MAAM,EAAE,SAAS,QAAQ;EAC5B,MAAM,QAAQ,oBAAoB,KAAK,SAAS;EAChD,IAAI,OAAO,OAAO;CACpB;CACA,OAAO;AACT;AAGA,SAAS,oBAAoB,MAAc,WAAyC;CAClF,KAAK,MAAM,aAAa,cAAc,KAAK,YAAY,CAAC,GAAG;EACzD,MAAM,QAAQ,UAAU,MAAM,MAAM,EAAE,YAAY,MAAM,SAAS;EACjE,IAAI,OAAO,OAAO;CACpB;AAEF;AAUA,SAAgB,qBAAqB,SAAuC;CAC1E,MAAM,EAAE,WAAW,QAAQ,QAAQ,WAAW,UAAU,MAAM,SAAS;CACvE,IAAI,QAAQ;EAEV,MAAM,QAAQ,gBAAgB,QAAQ,WAAW,EAAE;EACnD,IAAI,OAAO,OAAO;CACpB;CACA,OAAO,gBAAgB,QAAQ,WAAW,QAAQ;AACpD;AAOA,MAAM,OAAO;AAGb,eAAsB,aACpB,UACA,QACA,UAA+B,CAAC,GACjB;CACf,MAAM,EAAE,SAAS,oBAAoB,SAAS,SAAS;CACvD,MAAM,SAAS,WAAW,MAAM;CAChC,SAAS,UAAU,MAAM;CACzB,IAAI,OAAO,aAAa,aAAa;CACrC,IAAI,QACF,SAAS,SAAS,GAAG,OAAO,GAAG,mBAAmB,MAAM,EAAE,oBAAoB,OAAO;CAEvF,SAAS,gBAAgB,OAAO;CAChC,SAAS,gBAAgB,MAAM,gBAAgB,MAAM;AACvD;AAEA,SAAgB,cACd,QACA,aAA6B,oBACvB;CACN,IAAI,YAAY,WAAW,CAAC,EAAE,QAAQ,YAAY,MAAM;CACxD,IAAI,OAAO,aAAa,aAAa;EACnC,SAAS,gBAAgB,OAAO;EAChC,SAAS,gBAAgB,MAAM,gBAAgB,MAAM;CACvD;AACF;AAEA,SAAS,cAAkC;CAEzC,OAAO,OAAO,aAAa,eAAe,OAAO,aAAa,cAC1D,SAAS,WACT,KAAA;AACN;AAEA,SAAS,qBAAwC;CAE/C,IAAI,OAAO,aAAa,eAAe,OAAO,cAAc,aAAa,OAAO,CAAC;CACjF,OAAO,UAAU,WAAW,SAAS,UAAU,YAAY,CAAC,UAAU,QAAQ;AAChF;AAEA,SAAS,aAA6B;CACpC,IAAI;EACF,OAAO,OAAO,iBAAiB,cAAc,OAAO;CACtD,QAAQ;EACN,OAAO;CACT;AACF;;;ACnQA,MAAM,UAAU;AAEhB,SAAgB,MAAM,SAA0B;CAC9C,OAAO,QAAQ,KAAK,OAAO;AAC7B;AAEA,SAAgB,SAAS,SAAgC;CACvD,IAAI,IAAI;CACR,MAAM,WAAmB,QAAQ,OAAO,CAAC;CACzC,MAAM,eAAqB;EACzB,OAAO,IAAI,QAAQ,UAAU,KAAK,KAAK,GAAG,CAAC,GAAG;CAChD;CACA,MAAM,kBAA0B;EAC9B,IAAI,IAAI;EACR,OAAO,IAAI,QAAQ,UAAU,eAAe,KAAK,GAAG,CAAC,GAAG,KAAK,QAAQ;EACrE,OAAO;CACT;CAEA,SAAS,UAAU,UAAkC;EACnD,MAAM,QAAuB,CAAC;EAC9B,IAAI,MAAM;EACV,MAAM,cAAoB;GACxB,IAAI,KAAK,MAAM,KAAK;IAAE,MAAM;IAAQ,OAAO;GAAI,CAAC;GAChD,MAAM;EACR;EACA,OAAO,IAAI,QAAQ,QAAQ;GACzB,MAAM,KAAK,GAAG;GACd,IAAI,OAAO,KAAK;GAChB,IAAI,OAAO,KAAK;IACd,MAAM;IACN,MAAM,KAAK,SAAS,CAAC;GACvB,OAAO,IAAI,OAAO,OAAO,UAAU;IACjC,MAAM;IACN,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC;IAC3B;GACF,OAAO,IAAI,OAAO,KAChB,OAAO,WAAW;QACb;IACL,OAAO;IACP;GACF;EACF;EACA,MAAM;EACN,OAAO;CACT;CAGA,SAAS,aAAqB;EAC5B;EACA,IAAI,GAAG,MAAM,KAAK;GAChB;GACA,OAAO;EACT;EACA,MAAM,OAAO,GAAG;EAChB,IAAI,SAAS,OAAO,SAAS,OAAO,SAAS,KAAK,OAAO;EACzD,IAAI,MAAM;EACV,OAAO,IAAI,QAAQ,QAAQ;GACzB,IAAI,GAAG,MAAM,KAAK;IAChB,IAAI,QAAQ,OAAO,IAAI,CAAC,MAAM,KAAK;KACjC,OAAO;KACP,KAAK;KACL;IACF;IACA;IACA,OAAO;GACT;GACA,OAAO,QAAQ;EACjB;EACA,OAAO;CACT;CAEA,SAAS,WAAwB;EAC/B;EACA,OAAO;EACP,MAAM,OAAO,UAAU;EACvB,OAAO;EACP,IAAI,GAAG,MAAM,KAAK;GAChB;GACA,OAAO;IAAE,MAAM;IAAS;GAAK;EAC/B;EACA,IAAI,GAAG,MAAM,KAAK;EAClB,OAAO;EACP,MAAM,OAAO,UAAU;EACvB,MAAM,OAAkB;GAAE,MAAM;GAAS;EAAK;EAE9C,IAAI,SAAS,YAAY,SAAS,UAAU,SAAS,QAAQ;GAC3D,OAAO;GACP,IAAI,QAAQ;GACZ,IAAI,GAAG,MAAM,KAAK;IAChB;IACA,OAAO;IACP,OAAO,IAAI,QAAQ,UAAU,GAAG,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,QAAQ;IAC5E,QAAQ,MAAM,KAAK;GACrB;GACA,IAAI,SAAS,UACX,KAAK,SACH,UAAU,aAAa,UAAU,aAAa,UAAU,aAAa,QAAQ;QAC1E;IACL,KAAK,SAAS;IACd,IAAI,OAAO,KAAK,MAAM;GACxB;GACA,YAAY;GACZ,OAAO;EACT;EAEA,IAAI,SAAS,YAAY,SAAS,mBAAmB,SAAS,UAAU;GACtE,IAAI,SAAS,iBAAiB,KAAK,UAAU;GAC7C,MAAM,WAAsC,CAAC;GAC7C,OAAO;GACP,IAAI,GAAG,MAAM,KAAK;GAClB,OAAO;GACP,IAAI,SAAS,YAAY,QAAQ,WAAW,WAAW,CAAC,GAAG;IACzD,KAAK;IACL,OAAO;IACP,OAAO,IAAI,QAAQ,UAAU,QAAQ,KAAK,GAAG,CAAC,GAAG;IACjD,OAAO;GACT;GACA,OAAO,IAAI,QAAQ,UAAU,GAAG,MAAM,KAAK;IACzC,MAAM,WAAW,aAAa;IAC9B,OAAO;IACP,IAAI,GAAG,MAAM,KAAK;IAClB;IACA,MAAM,OAAO,UAAU,SAAS,QAAQ;IACxC,IAAI,GAAG,MAAM,KAAK;IAClB,SAAS,KAAK,CAAC,UAAU,IAAI,CAAC;IAC9B,OAAO;GACT;GACA,IAAI,GAAG,MAAM,KAAK;GAClB,KAAK,WAAW;GAChB,OAAO;EACT;EAGA,YAAY;EACZ,OAAO;CACT;CAEA,SAAS,eAAuB;EAC9B,IAAI,GAAG,MAAM,KAAK;GAChB,IAAI,IAAI;GACR;GACA,OAAO,IAAI,QAAQ,UAAU,QAAQ,KAAK,GAAG,CAAC,GAAG,KAAK,QAAQ;GAC9D,OAAO;EACT;EACA,IAAI,IAAI;EACR,OAAO,IAAI,QAAQ,UAAU,CAAC,QAAQ,KAAK,GAAG,CAAC,GAAG,KAAK,QAAQ;EAC/D,OAAO;CACT;CAEA,SAAS,cAAoB;EAC3B,OAAO,IAAI,QAAQ,UAAU,GAAG,MAAM,KAAK;EAC3C,IAAI,GAAG,MAAM,KAAK;CACpB;CAEA,OAAO,UAAU,KAAK;AACxB;;;ACjJA,MAAM,2BAAW,IAAI,IAA2B;AAChD,MAAM,gBAAgB;AAEtB,SAAgB,MAAM,SAAgC;CACpD,IAAI,SAAS,SAAS,IAAI,OAAO;CACjC,IAAI,CAAC,QAAQ;EAEX,IAAI,SAAS,QAAQ,eAAe,SAAS,OAAO,SAAS,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAe;EAC1F,SAAS,MAAM,OAAO,IAAI,SAAS,OAAO,IAAI,aAAa,SAAS,KAAK;EACzE,SAAS,IAAI,SAAS,MAAM;CAC9B;CACA,OAAO;AACT;AAEA,SAAS,aAAa,OAAe,WAAmC;CACtE,MAAM,QAAuB,CAAC;CAC9B,IAAI,MAAM;CACV,IAAI,IAAI;CAER,MAAM,cAAc;EAClB,IAAI,KAAK,MAAM,KAAK;GAAE,MAAM;GAAQ,OAAO;EAAI,CAAC;EAChD,MAAM;CACR;CAEA,OAAO,IAAI,MAAM,QAAQ;EACvB,MAAM,KAAK,MAAM;EACjB,IAAI,OAAO,KAAK;GACd,IAAI,MAAM,IAAI,OAAO,KAAK;IACxB,OAAO;IACP,KAAK;IACL;GACF;GACA,MAAM,QAAQ,UAAU,OAAO,CAAC;GAChC,IAAI,QAAQ,GAAG;IACb,OAAO,MAAM,MAAM,CAAC;IACpB;GACF;GACA,MAAM;GACN,MAAM,KAAK,iBAAiB,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC;GACtD,IAAI,QAAQ;EACd,OAAO,IAAI,OAAO,OAAO,MAAM,IAAI,OAAO,KAAK;GAC7C,OAAO;GACP,KAAK;EACP,OAAO,IAAI,aAAa,OAAO,KAAK;GAClC,IAAI,MAAM,IAAI,OAAO,KAAK;IACxB,OAAO;IACP,KAAK;GACP,OAAO;IACL,MAAM;IACN,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC;IAC3B,KAAK;GACP;EACF,OAAO;GACL,OAAO;GACP,KAAK;EACP;CACF;CACA,MAAM;CACN,OAAO;AACT;AAEA,SAAS,UAAU,OAAe,MAAsB;CACtD,IAAI,QAAQ;CACZ,IAAI,IAAI;CACR,OAAO,IAAI,MAAM,QAAQ;EACvB,MAAM,KAAK,MAAM;EACjB,IAAI,OAAO,KAAK;GACd,IAAI,MAAM,IAAI,OAAO,KAAK;IACxB,KAAK;IACL;GACF;GACA,SAAS;EACX,OAAO,IAAI,OAAO,KAAK;GACrB,IAAI,MAAM,IAAI,OAAO,KAAK;IACxB,KAAK;IACL;GACF;GACA,SAAS;GACT,IAAI,UAAU,GAAG,OAAO;EAC1B;EACA,KAAK;CACP;CACA,OAAO;AACT;AAEA,SAAS,iBAAiB,OAA4B;CACpD,MAAM,WAAW,SAAS,KAAK;CAC/B,MAAM,QAAQ,SAAS,MAAM,GAAA,CAAI,KAAK;CACtC,IAAI,CAAC,MAAM,OAAO;EAAE,MAAM;EAAQ,OAAO,IAAI,MAAM;CAAG;CAEtD,MAAM,QAAQ,KAAK,QAAQ,GAAG;CAC9B,MAAM,QAAQ,QAAQ,IAAI,OAAO,KAAK,MAAM,GAAG,KAAK,EAAA,CAAG,KAAK;CAC5D,IAAI,CAAC,MAAM,OAAO;EAAE,MAAM;EAAQ,OAAO,IAAI,MAAM;CAAG;CAEtD,MAAM,OAAkB;EAAE,MAAM;EAAS;CAAK;CAE9C,IAAI,SAAS,GAAG;EACd,MAAM,SAAS,KAAK,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK;EAC1C,MAAM,QAAQ,OAAO,QAAQ,GAAG;EAChC,KAAK,UAAU,QAAQ,IAAI,SAAS,OAAO,MAAM,GAAG,KAAK,EAAA,CAAG,KAAK;EACjE,IAAI,SAAS,GAAG,KAAK,MAAM,OAAO,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK;CAC1D;CAEA,IAAI,SAAS,SAAS,GAAG;EACvB,KAAK,WAAW,CAAC;EACjB,KAAK,MAAM,OAAO,SAAS,MAAM,CAAC,GAAG;GACnC,MAAM,MAAM,IAAI,QAAQ,GAAG;GAC3B,IAAI,MAAM,GAAG;GACb,MAAM,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK;GACnC,MAAM,OAAO,IAAI,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK;GACrC,IAAI,KAAK,KAAK,SAAS,KAAK,CAAC,KAAK,aAAa,MAAM,IAAI,CAAC,CAAC;EAC7D;CACF;CACA,OAAO;AACT;AAEA,SAAS,SAAS,OAAyB;CACzC,MAAM,QAAkB,CAAC;CACzB,IAAI,MAAM;CACV,IAAI,QAAQ;CACZ,IAAI,IAAI;CACR,OAAO,IAAI,MAAM,QAAQ;EACvB,MAAM,KAAK,MAAM;EACjB,IAAI,OAAO,KAAK;GACd,IAAI,MAAM,IAAI,OAAO,KAAK;IACxB,OAAO;IACP,KAAK;IACL;GACF;GACA,SAAS;GACT,OAAO;EACT,OAAO,IAAI,OAAO,KAAK;GACrB,IAAI,MAAM,IAAI,OAAO,KAAK;IACxB,OAAO;IACP,KAAK;IACL;GACF;GACA,SAAS;GACT,OAAO;EACT,OAAO,IAAI,OAAO,OAAO,UAAU,GAAG;GACpC,IAAI,MAAM,IAAI,OAAO,KAAK;IACxB,OAAO;IACP,KAAK;IACL;GACF;GACA,MAAM,KAAK,GAAG;GACd,MAAM;EACR,OACE,OAAO;EAET,KAAK;CACP;CACA,MAAM,KAAK,GAAG;CACd,OAAO;AACT;;;ACzJA,SAAgB,cACd,UAA6B,CAAC,GAClB;CACZ,MAAM,OAA+C,CAAC;CACtD,MAAM,4BAAY,IAAI,IAAgB;CACtC,MAAM,aAAa,QAAQ,cAAc,CAAC;CAC1C,MAAM,UAAU,QAAQ,WAAW,CAAC;CACpC,MAAM,yBAAS,IAAI,IAAY;CAC/B,MAAM,2BAAW,IAAI,IAA2B;CAChD,MAAM,YAAY,QAAQ,WACtB,MAAM,QAAQ,QAAQ,QAAQ,IAC5B,QAAQ,WACR,CAAC,QAAQ,QAAQ,IACnB,CAAC;CAEL,IAAI,SAAS,QAAQ,UAAU,aAAa;CAC5C,IAAI,UAAU;CACd,IAAI,aAA8B;CAElC,IAAI,QAAQ,UACV,KAAK,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,QAAQ,QAAQ,GACvD,KAAK,OAAO,QAAQ,IAAI;CAI5B,SAAS,QAAkB;EACzB,IAAI,YAAY,OAAO;EACvB,MAAM,SAAS,cAAc,MAAM;EACnC,KAAK,MAAM,MAAM,WAAW,IAAI,CAAC,OAAO,SAAS,EAAE,GAAG,OAAO,KAAK,EAAE;EACpE,aAAa;EACb,OAAO;CACT;CAEA,SAAS,OAAO,KAAwD;EACtE,KAAK,MAAM,OAAO,MAAM,GAAG;GACzB,MAAM,MAAM,KAAK,IAAI,GAAG;GAExB,IAAI,KAAK,OAAO;IAAE;IAAK,MAAM;GAAI;EACnC;CAEF;CAEA,SAAS,UAAU,KAAa,QAAoC;EAClE,MAAM,MAAM,OAAO,GAAG;EACtB,IAAI,QAAQ,KAAA,GAAW;GACrB,MAAM,cAAc,QAAQ,YAAY,KAAK,MAAM;GACnD,MAAM,QAAQ,OAAO,gBAAgB,WAAW,cAAc;GAC9D,IAAI,OAAO,gBAAgB,YAAY,CAAC,QAAQ,WAC9C,SAAS,gBAAgB,IAAI,KAAK,OAAO,EAAE;GAE7C,QAAQ,YAAY;IAAE;IAAK;IAAQ;IAAO,QAAQ;GAAO,CAAC;GAC1D,OAAO;EACT;EACA,MAAM,QAAQ,YAAY,MAAM,IAAI,GAAG,GAAG;GAAE;GAAQ;GAAQ;GAAY;EAAI,CAAC;EAC7E,QAAQ,YAAY;GAClB;GACA;GACA;GACA,QAAQ,IAAI,SAAS,SAAS,QAAQ;GACtC,MAAM,IAAI;EACZ,CAAC;EACD,OAAO;CACT;CAEA,SAAS,OAAO,SAA+B,QAA2B;EACxE,IAAI,MAAM,QAAQ,MAAM;EACxB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KACjC,OAAO,WAAW,OAAO,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM;EAE5D,OAAO;CACT;CAEA,SAAS,SAAe;EACtB,WAAW;EACX,KAAK,MAAM,MAAM,WAAW,GAAG;CACjC;CAEA,SAAS,MAAM;CAEf,MAAM,MAAM,OAAgB,GAAG,SAA4B;EACzD,IAAI,kBAAkB,KAAK,GAAG,OAAO,OAAO,OAAO,IAAI;EACvD,OAAO,UAAU,OAAiB,KAAK,EAAwB;CACjE;CAEA,EAAE,YAEC,SAA+B,GAAG,WACjC,OAAO,SAAS,MAAM;CAG1B,SAAS,SAAS,QAAsB;EACtC,WAAgB,MAAM,CAAC,CAAC,YAAY;GAClC,SAAS,+BAA+B,OAAO,EAAE;EACnD,CAAC;CACH;CAEA,SAAS,cAAc,QAAoC;EACzD,KAAK,MAAM,aAAa,cAAc,MAAM,GAC1C,IAAI,QAAQ,YAAY,OAAO,OAAO,IAAI,SAAS,IAAI,KAAA,IAAY;CAGvE;CAEA,SAAS,WAAW,QAA+B;EACjD,MAAM,UAAU,cAAc,MAAM;EACpC,IAAI,CAAC,SAAS,OAAO,QAAQ,QAAQ;EACrC,MAAM,UAAU,SAAS,IAAI,OAAO;EACpC,IAAI,SAAS,OAAO;EACpB,MAAM,OAAO,QAAQ,QAAQ,CAAE,CAAC,CAC7B,MAAM,QAAQ;GACb,OAAO,IAAI,OAAO;GAClB,SAAS,OAAO,OAAO;GACvB,YACE,SACA,aAAa,MAAO,IAAI,UAA2B,GACrD;EACF,CAAC,CAAC,CACD,OAAO,UAAmB;GACzB,SAAS,OAAO,OAAO;GACvB,MAAM;EACR,CAAC;EACH,SAAS,IAAI,SAAS,IAAI;EAC1B,OAAO;CACT;CAEA,SAAS,YAAY,KAAa,UAA6B;EAC7D,KAAK,OAAO;GAAE,GAAG,KAAK;GAAM,GAAG,QAAQ,QAAQ;EAAE;EACjD,OAAO;CACT;CAEA,OAAO;EACL,IAAI,SAAS;GACX,OAAO;EACT;EACA,IAAI,UAAU;GACZ,OAAO,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,IAAI,GAAG,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC;EACrE;EACA,IAAI,UAAU;GACZ,OAAO;EACT;EACA;EACA,UAAU,MAAc;GACtB,SAAS,IAAI;GACb,IAAI,SAAS,QAAQ;GACrB,SAAS;GACT,aAAa;GACb,OAAO;EACT;EACA;EACA;EACA,UAAU,UAAsB;GAC9B,UAAU,IAAI,QAAQ;GACtB,aAAa;IACX,UAAU,OAAO,QAAQ;GAC3B;EACF;EACA,IAAI,KAAa;GACf,OAAO,OAAO,GAAG,MAAM,KAAA;EACzB;EACA,QAAQ,KAAa;GACnB,MAAM,MAAM,OAAO,GAAG;GACtB,OAAO,MAAM;IAAE,MAAM,IAAI;IAAM,QAAQ,IAAI;GAAI,IAAI,KAAA;EACrD;CACF;AACF;AAEA,SAAS,kBAAkB,OAA+C;CACxE,OAAO,MAAM,QAAQ,KAAK,KAAK,SAAS;AAC1C;AAEA,SAAS,eAAuB;CAE9B,OAAO,OAAO,aAAa,eAAe,OAAO,cAAc,eAAe,UAAU,WACpF,UAAU,WACV;AACN;;;AC1LA,MAAM,MAAM;AAGZ,MAAM,SAAS;AACf,MAAM,aAAqC;CAAE,IAAI;CAAK,IAAI;CAAK,KAAK;AAAI;AACxE,MAAM,kBAAkB,MACtB,EAAE,QAAQ,SAAS,MAAM,MAAe,KAAc,QAAiB;CACrE,IAAI,MAAM,OAAO,WAAW;CAC5B,MAAM,OAAO,MAAM,SAAS,KAAK,EAAE,IAAI,SAAS,KAAM,EAAE;CACxD,OAAO,QAAQ,UAAW,OAAO,cAAc,IAAI,IAAI;AACzD,CAAC;AAEH,SAAgB,UAAU,MAAyB;CACjD,IAAI,YAAY;CAChB,MAAM,OAAkB,CAAC;CACzB,MAAM,QAAiD,CAAC;CACxD,MAAM,YAAwB,MAAM,SAAS,MAAM,MAAM,SAAS,EAAE,CAAE,WAAW;CACjF,MAAM,YAAY,MAAoB;EACpC,IAAI,GAAG,IAAI,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC;CACrC;CAEA,IAAI,OAAO;CACX,IAAI;CACJ,QAAQ,IAAI,IAAI,KAAK,IAAI,OAAO,MAAM;EACpC,MAAM,CAAC,MAAM,SAAS,MAAM,aAAa;EACzC,SAAS,KAAK,MAAM,MAAM,EAAE,KAAK,CAAC;EAClC,OAAO,EAAE,QAAQ,KAAK;EAEtB,IAAI,WACF,IAAI,CAAC,CAAC,KAAK;GAAQ;GAAO,UAAU,CAAC;EAAE,CAAC;OACnC,IAAI,SAAS;GAClB,IAAI,MAAM,UAAU,MAAM,MAAM,SAAS,EAAE,CAAE,SAAS,MAAM;IAC1D,MAAM,OAAO,MAAM,IAAI;IACvB,IAAI,CAAC,CAAC,KAAK,IAAI;GACjB,OACE,SAAS,IAAI;EAEjB,OACE,MAAM,KAAK;GAAQ;GAAO,UAAU,CAAC;EAAE,CAAC;CAE5C;CACA,SAAS,KAAK,MAAM,IAAI,CAAC;CAGzB,OAAO,MAAM,QAAQ;EACnB,MAAM,OAAO,MAAM,IAAI;EACvB,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,QAAQ;CAC7B;CACA,OAAO;AACT;;;ACrCA,MAAM,cAAc;AACpB,MAAM,WAAW;AACjB,MAAM,eAAe;AAErB,SAAgB,SAAS,MAAkC;CACzD,IAAI,YAAY,KAAK,IAAI,GAAG;EAC1B,SAAS,wBAAwB,MAAM;EACvC;CACF;CACA,OAAO;AACT;AAGA,SAAgB,cAAc,MAAkE;CAC9F,MAAM,EAAE,MAAM,QAAQ,QAAQ,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI;CAC1E,OAAO;EAAE,MAAM,SAAS,IAAI;EAAG;EAAQ;CAAI;AAC7C;AAGA,SAAgB,cAAc,MAAc,OAAmC;CAC7E,MAAM,QAAQ,KAAK,YAAY;CAC/B,IAAI,MAAM,WAAW,IAAI,KAAK,aAAa,KAAK,KAAK,GAAG,OAAO,KAAA;CAC/D,IAAI,SAAS,KAAK,KAAK,GAAG,OAAO,SAAS,KAAK;CAC/C,OAAO;AACT;AAGA,MAAa,YAAY;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,MAAa,YAAY;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAgB,QACd,UACA,UAA0B,CAAC,GACf;CACZ,IAAI,OAAO,aAAa,aACtB,MAAM,IAAI,MAAM,kCAAkC;CAEpD,MAAM,IAAI,SAAS;CACnB,MAAM,OAAO,QAAQ,QAAQ,SAAS;CACtC,MAAM,OAAO,QAAQ,aAAa;CAClC,MAAM,WAAW,GAAG,KAAK;CACzB,MAAM,YAAY,GAAG,KAAK;CAC1B,MAAM,WAAW,GAAG,KAAK;CACzB,MAAM,YAAY,GAAG,KAAK;CAC1B,MAAM,WAAW,IAAI,IAAI,QAAQ,YAAY,SAAS;CACtD,MAAM,cAAc,QAAQ;CAC5B,MAAM,4BAAY,IAAI,QAAoE;CAC1F,MAAM,6BAAa,IAAI,QAGrB;CACF,MAAM,6BAAa,IAAI,QAAoE;CAE3F,SAAS,UACP,OACA,IACA,KACA,SACG;EACH,MAAM,MAAM,MAAM,IAAI,EAAE;EACxB,IAAI,OAAO,IAAI,QAAQ,KAAK,OAAO,IAAI;EACvC,MAAM,QAAQ,QAAQ;EACtB,MAAM,IAAI,IAAI;GAAE;GAAK;EAAM,CAAC;EAC5B,OAAO;CACT;CAEA,SAAS,WAAW,IAAiC;EACnD,MAAM,MAAM,GAAG,aAAa,QAAQ;EACpC,OAAO,UAAU,WAAW,IAAI,WAAW,UAAU,GAAG,CAAC;CAC3D;CAEA,SAAS,YAAY,IAAmD;EACtE,MAAM,MAAM,GAAG,aAAa,SAAS;EACrC,IAAI,CAAC,KAAK,OAAO;EACjB,OAAO,UAAU,YAAY,IAAI,WAAW;GAC1C,MAAM,MAAM,UAAU,GAAG;GACzB,OAAO,MAAO,cAAc;IAAE,GAAG;IAAa,GAAG;GAAI,IAAI,MAAO;EAClE,CAAC;CACH;CAEA,SAAS,WACP,IACA,OACA,OACM;EACN,KAAK,MAAM,QAAQ,OAAO;GACxB,IAAI,OAAO,SAAS,UAAU;IAC5B,GAAG,OAAO,IAAI;IACd;GACF;GACA,MAAM,OAAO,QAAQ,KAAK;GAC1B,IAAI,SAAS,KAAA,GAAW;IACtB,MAAM,EAAE,MAAM,QAAQ,QAAQ,cAAc,IAAI;IAChD,MAAM,IAAI,GAAG,cAAc,cAAc,GAAG;IAC5C,IAAI,SAAS,KAAA,GAAW,EAAE,aAAa,QAAQ,IAAI;IACnD,IAAI,QAAQ,EAAE,aAAa,UAAU,MAAM;IAC3C,IAAI,KAAK,EAAE,aAAa,OAAO,GAAG;IAClC,WAAW,GAAG,KAAK,UAAU,KAAK;IAClC,GAAG,OAAO,CAAC;GACb,OAAO,IAAI,SAAS,IAAI,KAAK,IAAI,GAAG;IAClC,MAAM,QAAQ,GAAG,cAAc,cAAc,KAAK,IAAI;IACtD,IAAI,CAAC,UAAU,SAAS,KAAK,IAAI,GAAG,WAAW,OAAO,KAAK,UAAU,KAAK;IAC1E,GAAG,OAAO,KAAK;GACjB,OACE,WAAW,IAAI,KAAK,UAAU,KAAK;EAEvC;CACF;CAGA,IAAI,kBAAkB;CAEtB,SAAS,SAAS,KAAa,SAAiC;EAC9D,IAAI,CAAC,mBAAmB,CAAC,SAAS,KAAK,GAAG,OAAO;EACjD,OAAO,SAAS,QAAQ,GAAG,CAAC,EAAE,SAAS,SAAS;CAClD;CAEA,SAAS,OAAO,IAAmB;EACjC,MAAM,OAAO,WAAW,EAAE;EAC1B,MAAM,MAAM,GAAG,aAAa,IAAI;EAChC,IAAI,OAAO,CAAC,SAAS,KAAK,GAAG,WAAW,GAAG;GACzC,MAAM,OAAO,EAAE,KAAK,IAAI;GACxB,IAAI,GAAG,aAAa,QAAQ,GAAG;IAC7B,GAAG,cAAc;IACjB,WAAW,IAAI,UAAU,IAAI,GAAG,YAAY,EAAE,CAAC;GACjD,OACE,GAAG,cAAc;EAErB;EAEA,MAAM,WAAW,GAAG,aAAa,SAAS;EAC1C,MAAM,UAAU,UAAU,YAAY,IAAI,gBAAgB,UAAU,QAAQ,CAAC;EAC7E,IAAI,SACF,KAAK,MAAM,CAAC,MAAM,YAAY,OAAO,QAAQ,OAAO,GAAG;GACrD,IAAI,OAAO,YAAY,UAAU;GACjC,IAAI,SAAS,SAAS,GAAG,aAAa,IAAI,CAAC,GAAG;GAC9C,MAAM,QAAQ,cAAc,MAAM,EAAE,SAAS,IAAI,CAAC;GAClD,IAAI,UAAU,KAAA,GAAW,GAAG,aAAa,MAAM,KAAK;EACtD;CAEJ;CAEA,MAAM,WAAW,IAAI,KAAK,MAAM,UAAU;CAE1C,SAAS,UAAU,OAAmC;EACpD,IAAI,iBAAiB,WAAW,MAAM,QAAQ,QAAQ,GAAG,OAAO,KAAK;EACrE,KAAK,MAAM,MAAM,MAAM,iBAAiB,QAAQ,GAAG,OAAO,EAAE;CAC9D;CAEA,mBAAmB,SAAS,MAAM;CAClC,UAAU,IAAI;CAEd,kBAAkB;CAClB,MAAM,cAAc,SAAS,gBAAgB,UAAU,IAAI,CAAC;CAE5D,MAAM,WAAW,IAAI,kBAAkB,YAAY;EACjD,KAAK,MAAM,UAAU,SACnB,IAAI,OAAO,SAAS,gBAAgB,OAAO,kBAAkB,SAC3D,OAAO,OAAO,MAAM;OACf,IAAI,OAAO,SAAS,aACpB;QAAA,MAAM,QAAQ,OAAO,YACxB,IAAI,gBAAgB,SAAS,UAAU,IAAI;EAAA;CAInD,CAAC;CAED,SAAS,QAAQ,gBAAgB,WAAW,KAAK,kBAAmB,MAAe;EACjF,WAAW;EACX,SAAS;EACT,YAAY;EACZ,iBAAiB;GAAC;GAAM;GAAU;GAAW;GAAU;EAAS;CAClE,CAAC;CAED,aAAa;EACX,YAAY;EACZ,SAAS,WAAW;CACtB;AACF;AAGA,SAAS,mBAAmB,QAAsB;CAChD,MAAM,OAAO,SAAS,gBAAgB;CACtC,IAAI,CAAC,QAAQ,cAAc,IAAI,CAAC,CAAC,SAAS,MAAM,KAAK,cAAc,MAAM,CAAC,CAAC,SAAS,IAAI,GAAG;CAC3F,SACE,2BAA2B,KAAK,8BAA8B,OAAO,wJAGvE;AACF;AAEA,SAAS,UAAU,KAAwC;CACzD,IAAI,CAAC,KAAK,OAAO,KAAA;CACjB,IAAI;EACF,OAAO,KAAK,MAAM,GAAG;CACvB,QAAQ;EACN,SAAS,sBAAsB,KAAK;EACpC;CACF;AACF"}