{"version":3,"file":"shival99-z-ui-services.mjs","sources":["../../../../libs/core-ui/services/defines/z-cache-scope.define.ts","../../../../libs/core-ui/services/defines/z-excel.define.ts","../../../../libs/core-ui/services/defines/z-indexdb.define.ts","../../../../libs/core-ui/services/defines/z-translate.define.ts","../../../../libs/core-ui/services/z-cache.service.ts","../../../../libs/core-ui/services/z-excel.service.ts","../../../../libs/core-ui/services/z-indexdb.service.ts","../../../../libs/core-ui/services/types/z-theme.types.ts","../../../../libs/core-ui/services/types/z-translate.types.ts","../../../../libs/core-ui/services/z-translate.service.ts","../../../../libs/core-ui/services/z-http-abstract.service.ts","../../../../libs/core-ui/services/z-overlay-container.service.ts","../../../../libs/core-ui/services/z-overlay-z-index.service.ts","../../../../libs/core-ui/services/z-subject.service.ts","../../../../libs/core-ui/services/z-theme.service.ts","../../../../libs/core-ui/services/shival99-z-ui-services.ts"],"sourcesContent":["import { zNormalize } from '@shival99/z-ui/utils';\n\nconst Z_CACHE_SCOPE_SEPARATOR = '::';\nconst Z_DB_SCOPE_SEPARATOR = '__';\nconst Z_SCOPE_FALLBACK = 'global';\n\nconst Z_RUNTIME_SCOPE = (() => {\n  if (typeof window === 'undefined') {\n    return Z_SCOPE_FALLBACK;\n  }\n\n  const origin = zNormalize(window.location.origin);\n  const baseHref =\n    typeof document !== 'undefined' ? zNormalize(document.querySelector('base')?.getAttribute('href') ?? '') : '';\n  if (!origin && !baseHref) {\n    return Z_SCOPE_FALLBACK;\n  }\n\n  if (!origin) {\n    return baseHref || Z_SCOPE_FALLBACK;\n  }\n\n  if (!baseHref) {\n    return origin;\n  }\n\n  return `${origin}__${baseHref}`;\n})();\n\nconst Z_CACHE_SCOPE_SUFFIX = `${Z_CACHE_SCOPE_SEPARATOR}${Z_RUNTIME_SCOPE}`;\nconst Z_DB_SCOPE_SUFFIX = `${Z_DB_SCOPE_SEPARATOR}${Z_RUNTIME_SCOPE}`;\n\nfunction zAppendScope(value: string, scopeSuffix: string): string {\n  const trimmed = value.trim();\n  if (!trimmed || trimmed.endsWith(scopeSuffix)) {\n    return value;\n  }\n\n  return `${trimmed}${scopeSuffix}`;\n}\n\nexport function zBuildScopedCacheKey(baseKey: string): string {\n  return zAppendScope(baseKey, Z_CACHE_SCOPE_SUFFIX);\n}\n\nexport function zBuildScopedDbName(baseDbName: string): string {\n  return zAppendScope(baseDbName, Z_DB_SCOPE_SUFFIX);\n}\n\nexport function zStripScopedCacheKey(key: string): string {\n  const normalizedKey = key.trim();\n  if (!normalizedKey) {\n    return key;\n  }\n\n  if (!normalizedKey.endsWith(Z_CACHE_SCOPE_SUFFIX)) {\n    return normalizedKey;\n  }\n\n  return normalizedKey.slice(0, normalizedKey.length - Z_CACHE_SCOPE_SUFFIX.length);\n}\n","import type { ZExcelDefaultConfig } from '../types/z-excel.types';\n\nexport const Z_EXCEL_COLORS = {\n  'green-50': 'FFF0FDF4',\n  'green-100': 'FFDCFCE7',\n  'green-200': 'FFBBF7D0',\n  'green-300': 'FF86EFAC',\n  'green-400': 'FF4ADE80',\n  'green-500': 'FF22C55E',\n\n  'blue-50': 'FFEFF6FF',\n  'blue-100': 'FFDBEAFE',\n  'blue-200': 'FFBFDBFE',\n  'blue-300': 'FF93C5FD',\n  'blue-400': 'FF60A5FA',\n  'blue-500': 'FF3B82F6',\n\n  'gray-50': 'FFF9FAFB',\n  'gray-100': 'FFF3F4F6',\n  'gray-200': 'FFE5E7EB',\n  'gray-300': 'FFD1D5DB',\n  'gray-400': 'FF9CA3AF',\n  'gray-500': 'FF6B7280',\n\n  'yellow-50': 'FFFFFBEB',\n  'yellow-100': 'FFFEF3C7',\n  'yellow-200': 'FFFDE68A',\n  'yellow-300': 'FFFCD34D',\n\n  'red-50': 'FFFEF2F2',\n  'red-100': 'FFFEE2E2',\n  'red-200': 'FFFECACA',\n  'red-300': 'FFFCA5A5',\n\n  white: 'FFFFFFFF',\n  black: 'FF000000',\n  transparent: '00000000',\n} as const;\n\nexport const Z_EXCEL_DEFAULT_CONFIG: ZExcelDefaultConfig = {\n  font: {\n    name: 'Calibri',\n    size: 11,\n  },\n  headerFont: {\n    name: 'Calibri',\n    size: 11,\n    bold: true,\n  },\n  headerColors: {\n    level0: Z_EXCEL_COLORS['green-300'],\n    level1: Z_EXCEL_COLORS['blue-200'],\n  },\n};\n\nexport const Z_EXCEL_BORDER_THIN = {\n  top: { style: 'thin' as const },\n  left: { style: 'thin' as const },\n  bottom: { style: 'thin' as const },\n  right: { style: 'thin' as const },\n};\n\nexport const Z_EXCEL_CHAR_WIDTH_MAP: Record<string, number> = {\n  W: 1.4,\n  M: 1.4,\n  D: 1.2,\n  O: 1.2,\n  Q: 1.2,\n  A: 1.1,\n  B: 1.1,\n  C: 1.1,\n  G: 1.1,\n  H: 1.1,\n  N: 1.1,\n  R: 1.1,\n  S: 1.1,\n  U: 1.1,\n  V: 1.1,\n  X: 1.1,\n  Y: 1.1,\n  Z: 1.1,\n  E: 1.0,\n  F: 1.0,\n  K: 1.0,\n  P: 1.0,\n  T: 1.0,\n  J: 0.9,\n  L: 0.9,\n  I: 0.6,\n  i: 0.5,\n  l: 0.5,\n  t: 0.6,\n  f: 0.6,\n  j: 0.5,\n  '1': 0.8,\n  '!': 0.5,\n  '.': 0.5,\n  ',': 0.5,\n  ':': 0.5,\n  ';': 0.5,\n  '|': 0.5,\n  ' ': 0.5,\n};\n\nexport const Z_EXCEL_FONT_MULTIPLIERS: Record<string, number> = {\n  'Times New Roman': 1.0,\n  Arial: 0.95,\n  Calibri: 0.95,\n  'Courier New': 1.2,\n  'Comic Sans MS': 1.15,\n  Verdana: 1.05,\n  Tahoma: 0.9,\n  Georgia: 1.05,\n  Impact: 0.85,\n  'Trebuchet MS': 0.95,\n};\n\nexport const Z_EXCEL_WIDTH_LIMITS = {\n  min: 5,\n  max: 50,\n  tableMin: 8,\n  tableMax: 30,\n  default: 20,\n};\n","import { type ZIndexDbConfig } from '../types/z-indexdb.types';\n\nexport const Z_INDEXDB_DEFAULT_CONFIG: Required<Pick<ZIndexDbConfig, 'dbName' | 'version' | 'mode' | 'defaultStore'>> =\n  {\n    dbName: 'ZDatabase',\n    version: 1,\n    mode: 'readwrite',\n    defaultStore: 'ZStore',\n  };\n\nexport const Z_INDEXDB_BATCH_SIZE = 100;\nexport const Z_INDEXDB_MAX_VERSION = 1000;\n","export const Z_LANG_TO_LOCALE: Record<string, string> = {\n  vi: 'vi-VN',\n  en: 'en-US',\n};\n","import { Injectable } from '@angular/core';\nimport { zBuildScopedCacheKey } from './defines';\nimport type { ZCacheConfig } from './types/z-cache.types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ZCacheService {\n  private static _prefix = 'z_';\n  private static _encrypt = true;\n\n  public static configure(config: ZCacheConfig): void {\n    if (config.prefix) {\n      ZCacheService._prefix = config.prefix;\n    }\n    if (config.encrypt !== undefined) {\n      ZCacheService._encrypt = config.encrypt;\n    }\n  }\n\n  private static _encode(data: unknown): string {\n    const payload = { __z: true, __d: data };\n    return btoa(encodeURIComponent(JSON.stringify(payload)));\n  }\n\n  private static _decode<T>(data: string): T | null {\n    try {\n      const decoded = JSON.parse(decodeURIComponent(atob(data)));\n      if (!decoded.__z) {\n        return null;\n      }\n      return decoded.__d as T;\n    } catch {\n      return null;\n    }\n  }\n\n  private static _normalizeLegacyKey(key: string): string {\n    return key.trim().toLowerCase();\n  }\n\n  private static _normalizeKey(key: string): string {\n    return zBuildScopedCacheKey(ZCacheService._normalizeLegacyKey(key));\n  }\n\n  private static _toStorageKey(normalizedKey: string, encrypt: boolean): string {\n    const prefixedKey = `${ZCacheService._prefix}${normalizedKey}`;\n    return encrypt ? ZCacheService._encode(prefixedKey) : prefixedKey;\n  }\n\n  private static _getFullKey(key: string, encrypt: boolean): string {\n    return ZCacheService._toStorageKey(ZCacheService._normalizeKey(key), encrypt);\n  }\n\n  private static _getLegacyFullKey(key: string, encrypt: boolean): string | null {\n    const legacyNormalized = ZCacheService._normalizeLegacyKey(key);\n    const scopedNormalized = ZCacheService._normalizeKey(key);\n    if (legacyNormalized === scopedNormalized) {\n      return null;\n    }\n\n    return ZCacheService._toStorageKey(legacyNormalized, encrypt);\n  }\n\n  private static _getCandidateStorageKeys(key: string, encrypt: boolean): string[] {\n    const scopedKey = ZCacheService._getFullKey(key, encrypt);\n    const legacyKey = ZCacheService._getLegacyFullKey(key, encrypt);\n    return legacyKey ? [scopedKey, legacyKey] : [scopedKey];\n  }\n\n  private static _decodeStorageKey(storageKey: string): string | null {\n    const decoded = ZCacheService._decode<unknown>(storageKey);\n    if (typeof decoded !== 'string') {\n      return null;\n    }\n\n    return decoded;\n  }\n\n  private static _isManagedStorageKey(storageKey: string): boolean {\n    if (storageKey.startsWith(ZCacheService._prefix)) {\n      return true;\n    }\n\n    const decoded = ZCacheService._decodeStorageKey(storageKey);\n    if (!decoded) {\n      return false;\n    }\n\n    return decoded.startsWith(ZCacheService._prefix);\n  }\n\n  private static _safeOperation<T>(operation: () => T, fallback: T): T {\n    try {\n      return operation();\n    } catch (error) {\n      console.error('[ZCache] Operation error:', error);\n      return fallback;\n    }\n  }\n\n  public static get<T>(key: string, defaultValue?: T, encrypt = ZCacheService._encrypt): T | undefined {\n    return ZCacheService._safeOperation(() => {\n      const candidateKeys = ZCacheService._getCandidateStorageKeys(key, encrypt);\n      for (let i = 0; i < candidateKeys.length; i++) {\n        const result = localStorage.getItem(candidateKeys[i]);\n        if (!result) {\n          continue;\n        }\n\n        const data = encrypt ? ZCacheService._decode<T>(result) : (JSON.parse(result) as T);\n        if (data === null || data === undefined) {\n          continue;\n        }\n\n        if (i > 0) {\n          const scopedKey = candidateKeys[0];\n          localStorage.setItem(scopedKey, result);\n          localStorage.removeItem(candidateKeys[i]);\n        }\n\n        return data;\n      }\n\n      return defaultValue;\n    }, defaultValue);\n  }\n\n  public static set<T>(key: string, data: T, encrypt = ZCacheService._encrypt): boolean {\n    return ZCacheService._safeOperation(() => {\n      const _key = ZCacheService._getFullKey(key, encrypt);\n      const legacyKey = ZCacheService._getLegacyFullKey(key, encrypt);\n      const _value = encrypt ? ZCacheService._encode(data) : JSON.stringify(data);\n      localStorage.setItem(_key, _value);\n      if (legacyKey) {\n        localStorage.removeItem(legacyKey);\n      }\n      return true;\n    }, false);\n  }\n\n  public static delete(key: string): boolean {\n    return ZCacheService._safeOperation(() => {\n      const encryptedKeys = ZCacheService._getCandidateStorageKeys(key, true);\n      const plainKeys = ZCacheService._getCandidateStorageKeys(key, false);\n      encryptedKeys.forEach(item => localStorage.removeItem(item));\n      plainKeys.forEach(item => localStorage.removeItem(item));\n      return true;\n    }, false);\n  }\n\n  public static deleteMultiple(keys: string[]): boolean {\n    return ZCacheService._safeOperation(() => {\n      keys.forEach(key => {\n        const encryptedKeys = ZCacheService._getCandidateStorageKeys(key, true);\n        const plainKeys = ZCacheService._getCandidateStorageKeys(key, false);\n        encryptedKeys.forEach(item => localStorage.removeItem(item));\n        plainKeys.forEach(item => localStorage.removeItem(item));\n      });\n      return true;\n    }, false);\n  }\n\n  public static clear(): boolean {\n    return ZCacheService._safeOperation(() => {\n      const keysToRemove: string[] = [];\n\n      for (let i = 0; i < localStorage.length; i++) {\n        const key = localStorage.key(i);\n        if (!key) {\n          continue;\n        }\n\n        if (ZCacheService._isManagedStorageKey(key)) {\n          keysToRemove.push(key);\n        }\n      }\n\n      keysToRemove.forEach(key => localStorage.removeItem(key));\n      return true;\n    }, false);\n  }\n\n  public static has(key: string, encrypt = ZCacheService._encrypt): boolean {\n    return ZCacheService._safeOperation(() => {\n      const candidateKeys = ZCacheService._getCandidateStorageKeys(key, encrypt);\n      return candidateKeys.some(storageKey => localStorage.getItem(storageKey) !== null);\n    }, false);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { zConvertColorToArgb, zFormatNumExcel } from '@shival99/z-ui/utils';\nimport * as ExcelJS from 'exceljs';\nimport { saveAs } from 'file-saver';\nimport * as XLSX from 'xlsx';\nimport {\n  Z_EXCEL_DEFAULT_CONFIG,\n  Z_EXCEL_BORDER_THIN,\n  Z_EXCEL_CHAR_WIDTH_MAP,\n  Z_EXCEL_FONT_MULTIPLIERS,\n  Z_EXCEL_WIDTH_LIMITS,\n} from './defines/z-excel.define';\nimport type {\n  ZExcelConfig,\n  ZExcelColumnConfig,\n  ZExcelExportOptions,\n  ZExcelExportResult,\n  ZExcelFromTableConfig,\n  ZExcelCell,\n  ZExcelCellContext,\n  ZExcelAlign,\n  ZExcelTableColumnConfig,\n  ZExcelTableHeaderConfig,\n} from './types/z-excel.types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ZExcelService {\n  private static _isHeaderConfig<T>(\n    config: ZExcelTableColumnConfig<T>['header']\n  ): config is { content?: string | (() => string); align?: ZExcelAlign } {\n    if (!config || typeof config !== 'object') {\n      return false;\n    }\n    return config.constructor === Object;\n  }\n\n  private static _getHeaderConfig<T>(col: ZExcelTableColumnConfig<T> | undefined): ZExcelTableHeaderConfig {\n    const empty: ZExcelTableHeaderConfig = {\n      content: undefined,\n      class: undefined,\n      style: undefined,\n      align: undefined,\n      tooltip: undefined,\n      rowSpan: undefined,\n      colSpan: undefined,\n    };\n\n    if (!col) {\n      return empty;\n    }\n\n    if (!ZExcelService._isHeaderConfig(col.header)) {\n      return { ...empty, content: col.header as string | (() => string) | undefined };\n    }\n\n    return {\n      content: col.header.content,\n      class: undefined,\n      style: undefined,\n      align: col.header.align,\n      tooltip: undefined,\n      rowSpan: undefined,\n      colSpan: undefined,\n    };\n  }\n\n  public async exportExcel<T = unknown>(config: ZExcelConfig<T>, options: ZExcelExportOptions = {}): Promise<void> {\n    try {\n      const result = await ZExcelService.exportExcelStatic(config);\n      await this._saveFile(result, options);\n    } catch (error) {\n      console.error('Error exporting Excel:', error);\n      options.toast?.error?.('Failed to export Excel file');\n      throw error;\n    }\n  }\n\n  public async exportFromTable<T = unknown>(\n    config: ZExcelFromTableConfig<T>,\n    options: ZExcelExportOptions = {}\n  ): Promise<void> {\n    try {\n      const excelColumns = this._convertTableColumnsToExcel(config);\n      const excelConfig: ZExcelConfig<T> = {\n        fileName: config.fileName,\n        columns: excelColumns,\n        source: config.source,\n      };\n      await this.exportExcel(excelConfig, options);\n    } catch (error) {\n      console.error('Error exporting from table:', error);\n      options.toast?.error?.('Failed to export Excel file');\n      throw error;\n    }\n  }\n\n  public async exportFromElement(\n    elementId: string,\n    fileName = 'export',\n    options: ZExcelExportOptions = {}\n  ): Promise<void> {\n    try {\n      const result = await ZExcelService.exportFromElementStatic(elementId, fileName);\n      await this._saveFile(result, options);\n    } catch (error) {\n      console.error('Error exporting from element:', error);\n      options.toast?.error?.('Failed to export Excel file');\n      throw error;\n    }\n  }\n\n  public async exportFromElementXlsx(\n    elementId: string,\n    fileName = 'export',\n    options: ZExcelExportOptions = {}\n  ): Promise<void> {\n    try {\n      const element = document.getElementById(elementId);\n      if (!element) {\n        throw new Error(`Element with id \"${elementId}\" not found`);\n      }\n\n      const table = element.querySelector('table') || element;\n      if (table.tagName !== 'TABLE') {\n        throw new Error('Element must be a table or contain a table');\n      }\n\n      const workbook = XLSX.utils.table_to_book(table as HTMLTableElement, { sheet: 'Sheet1' });\n      const { addTimestamp = true } = options;\n\n      let finalFileName = `${fileName}.xlsx`;\n      if (addTimestamp) {\n        finalFileName = `${fileName}_${ZExcelService._formatTimestamp()}.xlsx`;\n      }\n\n      XLSX.writeFile(workbook, finalFileName);\n\n      if (options.showNotification !== false) {\n        options.toast?.success?.(`File \"${finalFileName}\" has been downloaded`);\n      }\n    } catch (error) {\n      console.error('Error exporting from element with XLSX:', error);\n      options.toast?.error?.('Failed to export Excel file');\n      throw error;\n    }\n  }\n\n  public static async exportExcelStatic<T = unknown>(config: ZExcelConfig<T>): Promise<ZExcelExportResult> {\n    const workbook = new ExcelJS.Workbook();\n    const { fileName = 'export', columns, source } = config;\n\n    for (const sheetSource of source) {\n      const sheet = workbook.addWorksheet(sheetSource.sheetName || 'Sheet1');\n      const flatColumns = ZExcelService._flattenColumns(columns);\n      const headerLevels = ZExcelService._calculateHeaderLevels(columns);\n\n      sheet.columns = flatColumns.map(col => ({\n        key: col.id,\n        header: col.header || col.id,\n        width: col.width || Z_EXCEL_WIDTH_LIMITS.default,\n        style: { font: Z_EXCEL_DEFAULT_CONFIG.font },\n      }));\n\n      ZExcelService._createHeaderRows(sheet, columns, headerLevels);\n      const dataStartRow = headerLevels + 1;\n      const mergedCells = new Set<string>();\n      const mergeRegions = ZExcelService._processMergeRegions(flatColumns, sheetSource.data, dataStartRow);\n\n      sheetSource.data.forEach((dataItem: T, rowIndex: number) => {\n        const row = sheet.addRow([]);\n\n        flatColumns.forEach((col, colIndex) => {\n          const cell = row.getCell(colIndex + 1);\n          const cellValue = ZExcelService._getCellValue(col, dataItem, rowIndex, sheetSource.data);\n          cell.value = cellValue as ExcelJS.CellValue;\n        });\n\n        row.eachCell((cell: ExcelJS.Cell, colNumber: number) => {\n          const colConfig = flatColumns[colNumber - 1];\n          const currentRow = dataStartRow + rowIndex + 1;\n          const cellKey = `${currentRow}:${colNumber}`;\n\n          if (mergedCells.has(cellKey)) {\n            return;\n          }\n\n          cell.font = {\n            name: Z_EXCEL_DEFAULT_CONFIG.font.name,\n            size: Z_EXCEL_DEFAULT_CONFIG.font.size,\n            ...(cell.font || {}),\n          };\n\n          if (colConfig.formatNum) {\n            const rawValue = ZExcelService._getCellValue(colConfig, dataItem, rowIndex, sheetSource.data);\n            zFormatNumExcel(cell, rawValue, colConfig.formatNum);\n          }\n\n          if (!colConfig.formatNum && colConfig.format) {\n            const context: ZExcelCellContext<T> = {\n              row: dataItem,\n              rowIndex,\n              data: sheetSource.data,\n              cell: cell as unknown as ZExcelCell,\n            };\n            colConfig.format(context);\n          }\n\n          if (colConfig.align) {\n            cell.alignment = {\n              horizontal: colConfig.align,\n              vertical: 'middle',\n              ...(cell.alignment || {}),\n            };\n          }\n\n          if (colConfig.note) {\n            const noteText = colConfig.note(dataItem, rowIndex, sheetSource.data);\n            if (noteText) {\n              cell.note = noteText;\n            }\n          }\n\n          cell.border = Z_EXCEL_BORDER_THIN;\n        });\n      });\n\n      mergeRegions.forEach(region => {\n        try {\n          sheet.mergeCells(region.startRow, region.startCol, region.endRow, region.endCol);\n\n          const mergedCell = sheet.getCell(region.startRow, region.startCol);\n          if (!mergedCell.alignment) {\n            mergedCell.alignment = { vertical: 'middle' };\n          }\n\n          for (let r = region.startRow; r <= region.endRow; r++) {\n            for (let c = region.startCol; c <= region.endCol; c++) {\n              mergedCells.add(`${r}:${c}`);\n            }\n          }\n        } catch (error) {\n          console.warn(`Failed to merge cells:`, error);\n        }\n      });\n\n      ZExcelService._applyAutoFitWidth(sheet, flatColumns);\n    }\n\n    const buffer = await workbook.xlsx.writeBuffer();\n    return { buffer: buffer as ArrayBuffer, fileName: `${fileName}.xlsx` };\n  }\n\n  public static async exportFromElementStatic(elementId: string, fileName = 'export'): Promise<ZExcelExportResult> {\n    const workbook = new ExcelJS.Workbook();\n    const element = document.getElementById(elementId);\n\n    if (!element) {\n      throw new Error(`Element with id \"${elementId}\" not found`);\n    }\n\n    const sheet = workbook.addWorksheet('Sheet1');\n    const table = element.querySelector('table') || element;\n\n    if (table.tagName !== 'TABLE') {\n      throw new Error('Element must be a table or contain a table');\n    }\n\n    ZExcelService._processTableElement(sheet, table as HTMLTableElement);\n    ZExcelService._applyAutoFitWidthForTable(sheet);\n\n    const buffer = await workbook.xlsx.writeBuffer();\n    return { buffer: buffer as ArrayBuffer, fileName: `${fileName}.xlsx` };\n  }\n\n  private async _saveFile(result: ZExcelExportResult, options: ZExcelExportOptions): Promise<void> {\n    const { addTimestamp = true, showNotification = true } = options;\n\n    let finalFileName = result.fileName;\n    if (addTimestamp) {\n      const timestamp = ZExcelService._formatTimestamp();\n      if (!finalFileName.includes(timestamp.slice(0, 8))) {\n        finalFileName = finalFileName.replace('.xlsx', `_${timestamp}.xlsx`);\n      }\n    }\n\n    const blob = new Blob([result.buffer], {\n      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n    });\n    saveAs(blob, finalFileName);\n\n    if (showNotification) {\n      options.toast?.success?.(`File \"${finalFileName}\" has been downloaded`);\n    }\n  }\n\n  private _convertTableColumnsToExcel<T>(config: ZExcelFromTableConfig<T>): ZExcelColumnConfig<T>[] {\n    const { tableColumns, excelOverrides = {}, excludeColumns = [], headerResolver } = config;\n\n    const convertColumn = (col: ZExcelTableColumnConfig<T>): ZExcelColumnConfig<T> | null => {\n      if (excludeColumns.includes(col.id)) {\n        return null;\n      }\n\n      if (['select', 'expand', 'actions'].includes(col.id)) {\n        return null;\n      }\n\n      const headerConfig = ZExcelService._getHeaderConfig(col);\n      let headerText = '';\n\n      headerText = col.id;\n\n      if (headerResolver) {\n        headerText = headerResolver(col);\n      }\n\n      if (!headerResolver && typeof headerConfig.content === 'string') {\n        headerText = headerConfig.content;\n      }\n\n      if (!headerResolver && typeof headerConfig.content === 'function') {\n        const result = (headerConfig.content as () => string)();\n        headerText = typeof result === 'string' ? result : col.id;\n      }\n\n      const excelCol: ZExcelColumnConfig<T> = {\n        id: col.id,\n        header: headerText,\n        accessorKey: col.accessorKey,\n        accessorFn: col.accessorFn ? (row: T) => col.accessorFn!(row) : undefined,\n        autoFit: true,\n        align: headerConfig.align as ZExcelAlign,\n        visible: typeof col.visible === 'boolean' ? col.visible : true,\n      };\n\n      const override = excelOverrides[col.id];\n      if (override) {\n        Object.assign(excelCol, override);\n      }\n\n      if (col.columns && col.columns.length > 0) {\n        excelCol.columns = col.columns\n          .map((childCol: ZExcelTableColumnConfig<T>) => convertColumn(childCol))\n          .filter((c: ZExcelColumnConfig<T> | null): c is ZExcelColumnConfig<T> => c !== null);\n\n        if (excelCol.columns && excelCol.columns.length > 0) {\n          excelCol.headerColSpan = ZExcelService._getLeafCount(excelCol.columns);\n        }\n      }\n\n      return excelCol;\n    };\n\n    return tableColumns\n      .map((col: ZExcelTableColumnConfig<T>) => convertColumn(col))\n      .filter((c: ZExcelColumnConfig<T> | null): c is ZExcelColumnConfig<T> => c !== null);\n  }\n\n  private static _flattenColumns<T>(columns: ZExcelColumnConfig<T>[]): ZExcelColumnConfig<T>[] {\n    const result: ZExcelColumnConfig<T>[] = [];\n\n    const flatten = (cols: ZExcelColumnConfig<T>[]) => {\n      for (const col of cols) {\n        if (col.visible === false) {\n          continue;\n        }\n\n        if (col.columns && col.columns.length > 0) {\n          flatten(col.columns);\n          continue;\n        }\n\n        result.push(col);\n      }\n    };\n\n    flatten(columns);\n    return result;\n  }\n\n  private static _calculateHeaderLevels<T>(columns: ZExcelColumnConfig<T>[]): number {\n    const getLevel = (cols: ZExcelColumnConfig<T>[], currentLevel = 1): number => {\n      let maxLevel = currentLevel;\n\n      for (const col of cols) {\n        let currentColLevel = currentLevel;\n\n        if (col.headerRowSpan && col.headerRowSpan > 1) {\n          currentColLevel = currentLevel + col.headerRowSpan - 1;\n        }\n\n        if (col.columns && col.columns.length > 0) {\n          if (!col.headerRowSpan || col.headerRowSpan <= 1) {\n            const childLevel = getLevel(col.columns, currentLevel + 1);\n            currentColLevel = Math.max(currentColLevel, childLevel);\n          }\n        }\n\n        maxLevel = Math.max(maxLevel, currentColLevel);\n      }\n\n      return maxLevel;\n    };\n\n    return getLevel(columns);\n  }\n\n  private static _createHeaderRows<T>(\n    sheet: ExcelJS.Worksheet,\n    columns: ZExcelColumnConfig<T>[],\n    maxLevels: number\n  ): void {\n    interface ZHeaderCellInfo {\n      header: string;\n      colSpan: number;\n      rowSpan: number;\n      formatHeader?: (cell: ZExcelCell) => void;\n      startCol: number;\n      endCol: number;\n      isProcessed?: boolean;\n      isEmpty?: boolean;\n    }\n\n    const headerStructure: Array<Array<ZHeaderCellInfo>> = [];\n\n    for (let i = 0; i < maxLevels; i++) {\n      headerStructure[i] = [];\n    }\n\n    ZExcelService._buildHeaderStructure(columns, headerStructure, 0, maxLevels);\n\n    const processedMergeRegions = new Set<string>();\n\n    headerStructure.forEach((row, rowIndex) => {\n      const headerRow = sheet.getRow(rowIndex + 1);\n      const sortedRow = row.sort((a, b) => (a.startCol || 0) - (b.startCol || 0));\n\n      sortedRow.forEach((headerCell: ZHeaderCellInfo) => {\n        if (headerCell.isProcessed || headerCell.isEmpty) {\n          return;\n        }\n\n        const colIndex = (headerCell.startCol || 0) + 1;\n        const cell = headerRow.getCell(colIndex);\n        cell.value = headerCell.header;\n\n        if (headerCell.colSpan > 1 || headerCell.rowSpan > 1) {\n          const startRow = rowIndex + 1;\n          const endRow = startRow + headerCell.rowSpan - 1;\n          const startCol = colIndex;\n          const endCol = colIndex + headerCell.colSpan - 1;\n          const mergeKey = `${startRow}:${startCol}-${endRow}:${endCol}`;\n\n          if (!processedMergeRegions.has(mergeKey)) {\n            try {\n              sheet.mergeCells(startRow, startCol, endRow, endCol);\n              processedMergeRegions.add(mergeKey);\n              headerCell.isProcessed = true;\n            } catch (error) {\n              console.warn(`Failed to merge header cells:`, error);\n            }\n          }\n        }\n\n        const defaultColor =\n          rowIndex === 0 ? Z_EXCEL_DEFAULT_CONFIG.headerColors.level0 : Z_EXCEL_DEFAULT_CONFIG.headerColors.level1;\n\n        cell.fill = {\n          type: 'pattern',\n          pattern: 'solid',\n          fgColor: { argb: defaultColor },\n        };\n\n        cell.font = Z_EXCEL_DEFAULT_CONFIG.headerFont;\n        cell.alignment = { horizontal: 'center', vertical: 'middle' };\n        cell.border = Z_EXCEL_BORDER_THIN;\n\n        if (headerCell.formatHeader) {\n          headerCell.formatHeader(cell as unknown as ZExcelCell);\n        }\n      });\n    });\n  }\n\n  private static _buildHeaderStructure<T>(\n    columns: ZExcelColumnConfig<T>[],\n    headerStructure: Array<\n      Array<{\n        header: string;\n        colSpan: number;\n        rowSpan: number;\n        formatHeader?: (cell: ZExcelCell) => void;\n        startCol: number;\n        endCol: number;\n      }>\n    >,\n    level: number,\n    maxLevels: number,\n    startCol = 0\n  ): number {\n    let currentCol = startCol;\n\n    for (const col of columns) {\n      if (col.visible === false) {\n        continue;\n      }\n\n      if (col.columns && col.columns.length > 0) {\n        const childrenLeafCount = ZExcelService._getLeafCount(col.columns);\n        const colSpan = col.headerColSpan || childrenLeafCount;\n        const rowSpan = col.headerRowSpan || 1;\n\n        headerStructure[level].push({\n          header: col.header || col.id,\n          colSpan,\n          rowSpan,\n          formatHeader: col.formatHeader,\n          startCol: currentCol,\n          endCol: currentCol + colSpan - 1,\n        });\n\n        if (col.headerRowSpan && col.headerRowSpan > 1) {\n          currentCol += colSpan;\n          continue;\n        }\n\n        ZExcelService._buildHeaderStructure(col.columns, headerStructure, level + 1, maxLevels, currentCol);\n\n        currentCol += colSpan;\n        continue;\n      }\n\n      const colSpan = col.headerColSpan || 1;\n      const rowSpan = col.headerRowSpan || maxLevels - level;\n\n      headerStructure[level].push({\n        header: col.header || col.id,\n        colSpan,\n        rowSpan,\n        formatHeader: col.formatHeader,\n        startCol: currentCol,\n        endCol: currentCol + colSpan - 1,\n      });\n\n      currentCol += colSpan;\n    }\n\n    return currentCol;\n  }\n\n  private static _getLeafCount<T>(columns: ZExcelColumnConfig<T>[]): number {\n    let count = 0;\n    for (const col of columns) {\n      if (col.visible === false) {\n        continue;\n      }\n\n      if (col.columns && col.columns.length > 0) {\n        count += ZExcelService._getLeafCount(col.columns);\n        continue;\n      }\n      count++;\n    }\n    return count;\n  }\n\n  private static _getCellValue<T>(col: ZExcelColumnConfig<T>, row: T, rowIndex: number, data: T[]): unknown {\n    if (col.accessorFn) {\n      return col.accessorFn(row, rowIndex, data);\n    }\n    if (col.accessorKey) {\n      return (row as Record<string, unknown>)[col.accessorKey];\n    }\n    return '';\n  }\n\n  private static _processMergeRegions<T>(\n    flatColumns: ZExcelColumnConfig<T>[],\n    data: T[],\n    dataStartRow: number\n  ): Array<{\n    startRow: number;\n    startCol: number;\n    endRow: number;\n    endCol: number;\n    firstItemIndex: number;\n  }> {\n    const mergeRegions: Array<{\n      startRow: number;\n      startCol: number;\n      endRow: number;\n      endCol: number;\n      firstItemIndex: number;\n    }> = [];\n    const dataLength = data.length;\n\n    flatColumns.forEach((colConfig, colIndex) => {\n      const colNumber = colIndex + 1;\n\n      if (colConfig.rowSpan || colConfig.colSpan) {\n        let currentGroupStart = 0;\n\n        while (currentGroupStart < dataLength) {\n          const currentItem = data[currentGroupStart];\n\n          const rowSpan =\n            typeof colConfig.rowSpan === 'function'\n              ? colConfig.rowSpan(currentItem, currentGroupStart, data)\n              : colConfig.rowSpan || 1;\n          const colSpan =\n            typeof colConfig.colSpan === 'function'\n              ? colConfig.colSpan(currentItem, currentGroupStart, data)\n              : colConfig.colSpan || 1;\n\n          const hasRowSpan = rowSpan > 1;\n          const hasColSpan = colSpan > 1;\n\n          if (hasRowSpan || hasColSpan) {\n            const startRow = dataStartRow + currentGroupStart;\n            const endRow = hasRowSpan ? Math.min(startRow + rowSpan - 1, dataStartRow + dataLength - 1) : startRow;\n            const startCol = colNumber;\n            const endCol = hasColSpan ? colNumber + colSpan - 1 : colNumber;\n\n            if ((endRow > startRow || endCol > startCol) && endRow < dataStartRow + dataLength) {\n              mergeRegions.push({\n                startRow,\n                startCol,\n                endRow,\n                endCol,\n                firstItemIndex: currentGroupStart,\n              });\n            }\n          }\n\n          currentGroupStart += Math.max(1, rowSpan);\n        }\n      }\n    });\n\n    return mergeRegions;\n  }\n\n  private static _applyAutoFitWidth<T>(sheet: ExcelJS.Worksheet, flatColumns: ZExcelColumnConfig<T>[]): void {\n    flatColumns.forEach((col, index) => {\n      const colNumber = index + 1;\n      const column = sheet.getColumn(colNumber);\n\n      if (col.autoFit && !col.width) {\n        let maxWidth = 0;\n\n        sheet.eachRow((row: ExcelJS.Row) => {\n          const cell = row.getCell(colNumber);\n          if (cell.value) {\n            const cellWidth =\n              ZExcelService._calculateCellWidth(cell, String(cell.value)) /\n              ZExcelService._getMergedColumnSpan(sheet, row, cell);\n            maxWidth = Math.max(maxWidth, cellWidth);\n          }\n        });\n\n        const calculatedWidth = Math.max(Z_EXCEL_WIDTH_LIMITS.min, Math.min(Z_EXCEL_WIDTH_LIMITS.max, maxWidth + 1));\n        column.width = calculatedWidth;\n      }\n    });\n  }\n\n  private static _applyAutoFitWidthForTable(sheet: ExcelJS.Worksheet): void {\n    const { columnCount } = sheet;\n\n    for (let colNumber = 1; colNumber <= columnCount; colNumber++) {\n      const column = sheet.getColumn(colNumber);\n      let maxWidth = 0;\n\n      sheet.eachRow((row: ExcelJS.Row) => {\n        const cell = row.getCell(colNumber);\n        if (cell.value) {\n          const cellWidth =\n            ZExcelService._calculateCellWidth(cell, String(cell.value)) /\n            ZExcelService._getMergedColumnSpan(sheet, row, cell);\n          maxWidth = Math.max(maxWidth, cellWidth);\n        }\n      });\n\n      const calculatedWidth = Math.max(\n        Z_EXCEL_WIDTH_LIMITS.tableMin,\n        Math.min(Z_EXCEL_WIDTH_LIMITS.tableMax, maxWidth * 0.8 + 2)\n      );\n      column.width = calculatedWidth;\n    }\n  }\n\n  private static _getMergedColumnSpan(sheet: ExcelJS.Worksheet, row: ExcelJS.Row, cell: ExcelJS.Cell): number {\n    if (!cell.isMerged) {\n      return 1;\n    }\n\n    let colSpan = 0;\n    for (let colNumber = 1; colNumber <= sheet.columnCount; colNumber++) {\n      const mergedCell = row.getCell(colNumber);\n      if (mergedCell.address === cell.master.address || mergedCell.isMergedTo(cell.master)) {\n        colSpan++;\n      }\n    }\n\n    return Math.max(1, colSpan);\n  }\n\n  private static _calculateCellWidth(cell: ExcelJS.Cell, text: string): number {\n    const font = cell.font || {};\n    const fontSize = font.size || Z_EXCEL_DEFAULT_CONFIG.font.size;\n    const fontFamily = font.name || Z_EXCEL_DEFAULT_CONFIG.font.name;\n    const isBold = font.bold || false;\n    const isItalic = font.italic || false;\n\n    const fontSizeMultiplier = fontSize / 11;\n    const fontMultiplier = Z_EXCEL_FONT_MULTIPLIERS[fontFamily] || 1.0;\n\n    let adjustedWidth = 0;\n    for (const char of text) {\n      const charWidth = Z_EXCEL_CHAR_WIDTH_MAP[char] || 1.0;\n      adjustedWidth += charWidth;\n    }\n\n    adjustedWidth *= fontSizeMultiplier * fontMultiplier;\n\n    if (isBold) {\n      adjustedWidth *= 1.1;\n    }\n    if (isItalic) {\n      adjustedWidth *= 1.05;\n    }\n\n    return Math.ceil(adjustedWidth * 1.2);\n  }\n\n  private static _processTableElement(sheet: ExcelJS.Worksheet, table: HTMLTableElement): void {\n    const rows = Array.from(table.rows);\n    const mergedCells = new Set<string>();\n\n    rows.forEach((row, rowIndex) => {\n      const cells = Array.from(row.cells);\n      let colOffset = 0;\n\n      cells.forEach((cell, cellIndex) => {\n        const computedStyle = window.getComputedStyle(cell);\n        if (computedStyle.display === 'none' || computedStyle.visibility === 'hidden') {\n          return;\n        }\n\n        const rect = cell.getBoundingClientRect();\n        if (rect.width === 0 && rect.height === 0) {\n          return;\n        }\n\n        while (mergedCells.has(`${rowIndex + 1}:${cellIndex + colOffset + 1}`)) {\n          colOffset++;\n        }\n\n        const excelRow = sheet.getRow(rowIndex + 1);\n        const colIndex = cellIndex + colOffset;\n        const excelCell = excelRow.getCell(colIndex + 1);\n\n        const cellContent = cell.textContent?.trim() || '';\n        excelCell.value = ZExcelService._parseContentValue(cellContent);\n\n        if (!excelCell.font) {\n          excelCell.font = Z_EXCEL_DEFAULT_CONFIG.font;\n        }\n\n        ZExcelService._applyCellFormatFromHTML(excelCell, cell);\n\n        const rowSpan = parseInt(cell.getAttribute('rowspan') || '1');\n        const colSpan = parseInt(cell.getAttribute('colspan') || '1');\n\n        if (rowSpan > 1 || colSpan > 1) {\n          const startRow = rowIndex + 1;\n          const startCol = colIndex + 1;\n          const endRow = startRow + rowSpan - 1;\n          const endCol = startCol + colSpan - 1;\n\n          const mergeKey = `${startRow}:${startCol}-${endRow}:${endCol}`;\n          if (!mergedCells.has(mergeKey)) {\n            sheet.mergeCells(startRow, startCol, endRow, endCol);\n            mergedCells.add(mergeKey);\n\n            for (let r = startRow; r <= endRow; r++) {\n              for (let c = startCol; c <= endCol; c++) {\n                mergedCells.add(`${r}:${c}`);\n              }\n            }\n          }\n        }\n      });\n    });\n  }\n\n  private static _parseContentValue(content: string): string | number {\n    if (!content || content.trim() === '') {\n      return '';\n    }\n\n    const trimmedContent = content.trim();\n\n    if (/^-?\\d+(\\.\\d+)?$/.test(trimmedContent)) {\n      const parsed = parseFloat(trimmedContent);\n      if (!isNaN(parsed) && isFinite(parsed)) {\n        return parsed;\n      }\n    }\n\n    if (/^-?\\d+(\\.\\d+)?%$/.test(trimmedContent)) {\n      const numberPart = trimmedContent.replace('%', '');\n      const parsed = parseFloat(numberPart);\n      if (!isNaN(parsed) && isFinite(parsed)) {\n        return parsed / 100;\n      }\n    }\n\n    return trimmedContent;\n  }\n\n  private static _applyCellFormatFromHTML(excelCell: ExcelJS.Cell, htmlCell: HTMLTableCellElement): void {\n    const computedStyle = window.getComputedStyle(htmlCell);\n\n    excelCell.font = {\n      name: Z_EXCEL_DEFAULT_CONFIG.font.name,\n      bold: computedStyle.fontWeight === 'bold' || parseInt(computedStyle.fontWeight) >= 600,\n      italic: computedStyle.fontStyle === 'italic',\n      size: parseInt(computedStyle.fontSize) || Z_EXCEL_DEFAULT_CONFIG.font.size,\n      color: { argb: zConvertColorToArgb(computedStyle.color) },\n    };\n\n    if (computedStyle.backgroundColor && computedStyle.backgroundColor !== 'rgba(0, 0, 0, 0)') {\n      excelCell.fill = {\n        type: 'pattern',\n        pattern: 'solid',\n        fgColor: { argb: zConvertColorToArgb(computedStyle.backgroundColor) },\n      };\n    }\n\n    excelCell.alignment = {\n      horizontal: ZExcelService._getExcelAlignment(computedStyle.textAlign),\n      vertical: ZExcelService._getExcelVerticalAlignment(computedStyle.verticalAlign),\n    };\n\n    excelCell.border = Z_EXCEL_BORDER_THIN;\n  }\n\n  private static _getExcelAlignment(textAlign: string): 'left' | 'center' | 'right' | undefined {\n    switch (textAlign) {\n      case 'center':\n        return 'center';\n      case 'right':\n        return 'right';\n      case 'left':\n        return 'left';\n      default:\n        return undefined;\n    }\n  }\n\n  private static _getExcelVerticalAlignment(verticalAlign: string): 'top' | 'middle' | 'bottom' | undefined {\n    switch (verticalAlign) {\n      case 'middle':\n        return 'middle';\n      case 'top':\n        return 'top';\n      case 'bottom':\n        return 'bottom';\n      default:\n        return 'middle';\n    }\n  }\n\n  private static _formatTimestamp(): string {\n    const now = new Date();\n    const year = now.getFullYear();\n    const month = String(now.getMonth() + 1).padStart(2, '0');\n    const day = String(now.getDate()).padStart(2, '0');\n    const hours = String(now.getHours()).padStart(2, '0');\n    const minutes = String(now.getMinutes()).padStart(2, '0');\n    const seconds = String(now.getSeconds()).padStart(2, '0');\n    return `${year}${month}${day}_${hours}${minutes}${seconds}`;\n  }\n}\n","import {\n  zBuildScopedCacheKey,\n  zBuildScopedDbName,\n  zStripScopedCacheKey,\n  Z_INDEXDB_DEFAULT_CONFIG,\n  Z_INDEXDB_MAX_VERSION,\n  Z_INDEXDB_BATCH_SIZE,\n} from './defines';\nimport type {\n  ZIndexDbConfig,\n  ZIndexDbGetOptions,\n  ZIndexDbSetOptions,\n  ZIndexDbStoreConfig,\n} from './types/z-indexdb.types';\n\nexport class ZIndexDbService {\n  private _db: IDBDatabase | null = null;\n  private _dbName: string;\n  private _legacyDbName: string | null = null;\n  private _version: number;\n  private _mode: IDBTransactionMode;\n  private _dbReady: Promise<void>;\n  private _stores: Map<string, ZIndexDbStoreConfig> = new Map();\n  private _defaultStoreName: string;\n  private _globalProtectedKeys: string[];\n  private _encrypt = true;\n\n  public constructor(config: ZIndexDbConfig = {}) {\n    const baseDbName = config.dbName ?? Z_INDEXDB_DEFAULT_CONFIG.dbName;\n    const scopedDbName = zBuildScopedDbName(baseDbName);\n    this._dbName = scopedDbName;\n    this._legacyDbName = scopedDbName === baseDbName ? null : baseDbName;\n    this._version = config.version ?? Z_INDEXDB_DEFAULT_CONFIG.version;\n    this._mode = config.mode ?? Z_INDEXDB_DEFAULT_CONFIG.mode;\n    this._defaultStoreName = config.defaultStore ?? Z_INDEXDB_DEFAULT_CONFIG.defaultStore;\n    this._globalProtectedKeys = config.protectedKeys ?? [];\n    this._encrypt = config.encrypt ?? true;\n\n    if (config.stores?.length) {\n      config.stores.forEach(store => this._stores.set(store.name, store));\n    }\n    if (!this._stores.has(this._defaultStoreName)) {\n      this._stores.set(this._defaultStoreName, { name: this._defaultStoreName });\n    }\n\n    this._dbReady = this._initDb();\n  }\n\n  private _getStoreConfig(storeName?: string): ZIndexDbStoreConfig {\n    const name = storeName ?? this._defaultStoreName;\n    return this._stores.get(name) ?? { name };\n  }\n\n  /**\n   * Determines if encryption should be used.\n   * Priority: per-call > store-level > global\n   * @param storeConfig - Store configuration\n   * @param perCallEncrypt - Per-call encrypt override (highest priority)\n   */\n  private _shouldEncrypt(storeConfig: ZIndexDbStoreConfig, perCallEncrypt?: boolean): boolean {\n    if (perCallEncrypt !== undefined) {\n      return perCallEncrypt;\n    }\n    return storeConfig.encrypt ?? this._encrypt;\n  }\n\n  private _normalizeLegacyKey(key: string): string {\n    return key.trim().toLowerCase();\n  }\n\n  private _normalizeKey(key: string): string {\n    return zBuildScopedCacheKey(this._normalizeLegacyKey(key));\n  }\n\n  private _resolveLegacyNormalizedKey(key: string): string | null {\n    const legacyKey = this._normalizeLegacyKey(key);\n    const scopedKey = this._normalizeKey(key);\n    return legacyKey === scopedKey ? null : legacyKey;\n  }\n\n  private _buildStorageKeys(key: string, encrypt: boolean): string[] {\n    const scopedKey = this._normalizeKey(key);\n    const legacyKey = this._resolveLegacyNormalizedKey(key);\n    const logicalKeys = legacyKey ? [scopedKey, legacyKey] : [scopedKey];\n\n    if (!encrypt) {\n      return logicalKeys;\n    }\n\n    return logicalKeys.map(item => this._encryptData(item));\n  }\n\n  private _encryptData(data: unknown): string {\n    const payload = {\n      __z: true,\n      __t: typeof data,\n      __d: data,\n    };\n    return btoa(encodeURIComponent(JSON.stringify(payload)));\n  }\n\n  private _decryptData<T>(data: string): T | null {\n    try {\n      const decoded = JSON.parse(decodeURIComponent(atob(data)));\n      if (!decoded.__z) {\n        return null;\n      }\n      return decoded.__d as T;\n    } catch {\n      return null;\n    }\n  }\n\n  private _closeConnection(): void {\n    if (this._db) {\n      this._db.close();\n      this._db = null;\n    }\n  }\n\n  private async _reconnect(): Promise<void> {\n    this._closeConnection();\n    this._dbReady = this._initDb();\n    await this._dbReady;\n  }\n\n  private async _withRetry<T>(operation: () => Promise<T>, retries = 3): Promise<T> {\n    let lastError: unknown;\n    for (let i = 0; i < retries; i++) {\n      try {\n        return await operation();\n      } catch (error) {\n        lastError = error;\n        if (error instanceof Error && error.name === 'InvalidStateError') {\n          await this._reconnect();\n        }\n        await new Promise(resolve => setTimeout(resolve, Math.pow(2, i) * 100));\n      }\n    }\n\n    throw lastError;\n  }\n\n  private async _initDb(): Promise<void> {\n    if (this._db) {\n      return;\n    }\n\n    await this._adoptLegacyDbNameIfNeeded();\n    const currentVersion = await this._getCurrentDbVersion();\n    if (currentVersion >= Z_INDEXDB_MAX_VERSION) {\n      await this._resetDatabase();\n      this._version = 1;\n    }\n    if (currentVersion > this._version && currentVersion < Z_INDEXDB_MAX_VERSION) {\n      this._version = currentVersion;\n    }\n\n    return new Promise((resolve, reject) => {\n      try {\n        const request = indexedDB.open(this._dbName, this._version);\n\n        request.onupgradeneeded = event => {\n          const db = (event.target as IDBOpenDBRequest).result;\n          const existingStores = Array.from(db.objectStoreNames);\n          existingStores.forEach(storeName => {\n            if (!this._stores.has(storeName)) {\n              db.deleteObjectStore(storeName);\n            }\n          });\n          this._stores.forEach((_, storeName) => {\n            if (!db.objectStoreNames.contains(storeName)) {\n              db.createObjectStore(storeName);\n            }\n          });\n        };\n\n        request.onsuccess = event => {\n          this._db = (event.target as IDBOpenDBRequest).result;\n          this._version = this._db.version;\n          this._db.onerror = e => console.error('[ZIndexDb] Error:', (e.target as IDBRequest).error);\n          this._db.onclose = () => {\n            this._db = null;\n          };\n\n          const missingStores = this._getMissingStores();\n          if (missingStores.length > 0) {\n            this._triggerUpgrade().then(resolve).catch(reject);\n            return;\n          }\n\n          resolve();\n        };\n\n        request.onerror = event => {\n          console.error('[ZIndexDb] Open error:', (event.target as IDBOpenDBRequest).error);\n          reject((event.target as IDBOpenDBRequest).error);\n        };\n      } catch (error) {\n        reject(error);\n      }\n    });\n  }\n\n  private async _adoptLegacyDbNameIfNeeded(): Promise<void> {\n    if (!this._legacyDbName) {\n      return;\n    }\n\n    const supportsDatabasesApi = typeof (indexedDB as IDBFactory & { databases?: unknown }).databases === 'function';\n    if (!supportsDatabasesApi) {\n      const scopedMeta = await this._probeDbMetadataByOpen(this._dbName);\n      if (scopedMeta.hasStores) {\n        return;\n      }\n\n      const legacyMeta = await this._probeDbMetadataByOpen(this._legacyDbName);\n      if (!legacyMeta.hasStores) {\n        return;\n      }\n\n      this._dbName = this._legacyDbName;\n      this._version = Math.max(this._version, legacyMeta.version);\n      this._legacyDbName = null;\n      return;\n    }\n\n    const scopedVersion = await this._getExistingDbVersion(this._dbName);\n    if (scopedVersion > 0) {\n      return;\n    }\n\n    const legacyVersion = await this._getExistingDbVersion(this._legacyDbName);\n    if (legacyVersion <= 0) {\n      return;\n    }\n\n    this._dbName = this._legacyDbName;\n    this._version = Math.max(this._version, legacyVersion);\n    this._legacyDbName = null;\n  }\n\n  private _getExistingDbVersion(dbName: string): Promise<number> {\n    const databasesApi = (\n      indexedDB as IDBFactory & {\n        databases?: () => Promise<Array<{ name?: string; version?: number }>>;\n      }\n    ).databases;\n\n    if (!databasesApi) {\n      return Promise.resolve(0);\n    }\n\n    return databasesApi\n      .call(indexedDB)\n      .then(databases => {\n        const matchedDb = databases.find(database => database.name === dbName);\n        return typeof matchedDb?.version === 'number' ? matchedDb.version : 0;\n      })\n      .catch(() => 0);\n  }\n\n  private _probeDbMetadataByOpen(dbName: string): Promise<{ version: number; hasStores: boolean }> {\n    return new Promise(resolve => {\n      try {\n        const request = indexedDB.open(dbName);\n        request.onsuccess = event => {\n          const db = (event.target as IDBOpenDBRequest).result;\n          const { version } = db;\n          const hasStores = db.objectStoreNames.length > 0;\n          db.close();\n\n          if (hasStores || version > 1) {\n            resolve({ version, hasStores });\n            return;\n          }\n\n          try {\n            const deleteRequest = indexedDB.deleteDatabase(dbName);\n            deleteRequest.onsuccess = () => resolve({ version: 0, hasStores: false });\n            deleteRequest.onerror = () => resolve({ version: 0, hasStores: false });\n            deleteRequest.onblocked = () => resolve({ version: 0, hasStores: false });\n          } catch {\n            resolve({ version: 0, hasStores: false });\n          }\n        };\n        request.onerror = () => resolve({ version: 0, hasStores: false });\n      } catch {\n        resolve({ version: 0, hasStores: false });\n      }\n    });\n  }\n\n  private _getCurrentDbVersion(): Promise<number> {\n    return this._getExistingDbVersion(this._dbName).then(version => {\n      if (version > 0) {\n        return version;\n      }\n\n      return this._probeDbMetadataByOpen(this._dbName).then(metadata => (metadata.version > 0 ? metadata.version : 1));\n    });\n  }\n\n  private async _triggerUpgrade(): Promise<void> {\n    this._closeConnection();\n    const isVersionLimitReached = this._version >= Z_INDEXDB_MAX_VERSION;\n    if (isVersionLimitReached) {\n      await this._resetDatabase();\n    }\n\n    this._version = isVersionLimitReached ? 1 : this._version + 1;\n    this._dbReady = this._initDb();\n    await this._dbReady;\n  }\n\n  private async _resetDatabase(): Promise<void> {\n    this._closeConnection();\n    return new Promise((resolve, reject) => {\n      const deleteRequest = indexedDB.deleteDatabase(this._dbName);\n      deleteRequest.onsuccess = () => resolve();\n      deleteRequest.onerror = () => reject(deleteRequest.error);\n      deleteRequest.onblocked = () => {\n        setTimeout(() => this._resetDatabase().then(resolve).catch(reject), 100);\n      };\n    });\n  }\n\n  private _getMissingStores(): string[] {\n    if (!this._db) {\n      return [];\n    }\n    const existingStores = Array.from(this._db.objectStoreNames);\n    const requiredStores = Array.from(this._stores.keys());\n    return requiredStores.filter(store => !existingStores.includes(store));\n  }\n\n  private _ensureStoreExists(storeName: string): boolean {\n    if (!this._db) {\n      return false;\n    }\n    return this._db.objectStoreNames.contains(storeName);\n  }\n\n  public async get<T>(key: string, options?: ZIndexDbGetOptions<T>): Promise<T | undefined> {\n    const storeConfig = this._getStoreConfig(options?.storeName);\n    const shouldEncrypt = this._shouldEncrypt(storeConfig, options?.encrypt);\n    const defaultValue = options?.defaultValue;\n\n    return this._withRetry(async () => {\n      await this._dbReady;\n      if (!this._db) {\n        await this._reconnect();\n        if (!this._db) {\n          return defaultValue;\n        }\n      }\n\n      if (!this._ensureStoreExists(storeConfig.name)) {\n        await this._triggerUpgrade();\n        if (!this._ensureStoreExists(storeConfig.name)) {\n          return defaultValue;\n        }\n      }\n\n      const storageKeys = this._buildStorageKeys(key, shouldEncrypt);\n      return new Promise<T | undefined>(resolve => {\n        try {\n          const transaction = this._db!.transaction([storeConfig.name], this._mode);\n          const store = transaction.objectStore(storeConfig.name);\n          const request = store.get(storageKeys[0]);\n\n          request.onsuccess = () => {\n            const resolveData = (rawValue: unknown): void => {\n              try {\n                if (!rawValue) {\n                  resolve(defaultValue);\n                  return;\n                }\n\n                const decrypted = shouldEncrypt ? this._decryptData<T>(rawValue as string) : (rawValue as T);\n                resolve(decrypted ?? defaultValue);\n              } catch {\n                resolve(defaultValue);\n              }\n            };\n\n            if (request.result) {\n              resolveData(request.result);\n              return;\n            }\n\n            if (storageKeys.length < 2) {\n              resolve(defaultValue);\n              return;\n            }\n\n            const legacyRequest = store.get(storageKeys[1]);\n            legacyRequest.onsuccess = () => resolveData(legacyRequest.result);\n            legacyRequest.onerror = () => resolve(defaultValue);\n          };\n\n          request.onerror = () => resolve(defaultValue);\n          transaction.onerror = () => resolve(defaultValue);\n        } catch {\n          resolve(defaultValue);\n        }\n      });\n    });\n  }\n\n  public async set<T>(key: string, value: T, options?: ZIndexDbSetOptions): Promise<void> {\n    const storeConfig = this._getStoreConfig(options?.storeName);\n    const shouldEncrypt = this._shouldEncrypt(storeConfig, options?.encrypt);\n\n    return this._withRetry(async () => {\n      await this._dbReady;\n      if (!this._db) {\n        await this._reconnect();\n        if (!this._db) {\n          throw new Error('Database not initialized');\n        }\n      }\n\n      if (!this._ensureStoreExists(storeConfig.name)) {\n        await this._triggerUpgrade();\n        if (!this._ensureStoreExists(storeConfig.name)) {\n          throw new Error(`Failed to create store \"${storeConfig.name}\"`);\n        }\n      }\n\n      const storageKeys = this._buildStorageKeys(key, shouldEncrypt);\n      const _key = storageKeys[0];\n      const _value = shouldEncrypt ? this._encryptData(value) : value;\n\n      return new Promise<void>((resolve, reject) => {\n        try {\n          const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n          const store = transaction.objectStore(storeConfig.name);\n          const request = store.put(_value, _key);\n          if (storageKeys.length > 1) {\n            store.delete(storageKeys[1]);\n          }\n\n          request.onerror = () => reject(request.error);\n          transaction.oncomplete = () => resolve();\n          transaction.onerror = () => reject(transaction.error);\n        } catch (error) {\n          reject(error);\n        }\n      });\n    });\n  }\n\n  /**\n   * Delete key(s) from IndexDB. If storeName not provided, deletes from all stores.\n   * Tries both encrypted and non-encrypted versions of the key.\n   */\n  public async delete(key: string | string[], storeName?: string): Promise<void> {\n    if (storeName === undefined) {\n      await Promise.all(this.getStoreNames().map(name => this._deleteFromStore(key, name)));\n      return;\n    }\n    await this._deleteFromStore(key, storeName);\n  }\n\n  private async _deleteFromStore(key: string | string[], storeName: string): Promise<void> {\n    const storeConfig = this._getStoreConfig(storeName);\n    return this._withRetry(async () => {\n      await this._dbReady;\n      if (!this._db) {\n        await this._reconnect();\n        if (!this._db) {\n          throw new Error('Database not initialized');\n        }\n      }\n\n      if (!this._ensureStoreExists(storeConfig.name)) {\n        return;\n      }\n\n      const keys = Array.isArray(key) ? key : [key];\n      return new Promise<void>((resolve, reject) => {\n        try {\n          const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n          const store = transaction.objectStore(storeConfig.name);\n          keys.forEach(k => {\n            const plainKeys = this._buildStorageKeys(k, false);\n            const encryptedKeys = this._buildStorageKeys(k, true);\n\n            plainKeys.forEach(item => store.delete(item));\n            encryptedKeys.forEach(item => store.delete(item));\n          });\n\n          transaction.oncomplete = () => resolve();\n          transaction.onerror = () => reject(transaction.error);\n        } catch (error) {\n          reject(error);\n        }\n      });\n    });\n  }\n\n  public async clear(storeName?: string): Promise<void> {\n    const storeConfig = this._getStoreConfig(storeName);\n    const protectedKeys = [...this._globalProtectedKeys, ...(storeConfig.protectedKeys ?? [])];\n\n    return this._withRetry(async () => {\n      await this._dbReady;\n      if (!this._db) {\n        await this._reconnect();\n        if (!this._db) {\n          throw new Error('Database not initialized');\n        }\n      }\n\n      if (!this._ensureStoreExists(storeConfig.name)) {\n        return;\n      }\n\n      if (protectedKeys.length === 0) {\n        return new Promise<void>((resolve, reject) => {\n          const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n          const store = transaction.objectStore(storeConfig.name);\n          const request = store.clear();\n\n          request.onsuccess = () => resolve();\n          request.onerror = () => reject(request.error);\n        });\n      }\n\n      return new Promise<void>((resolve, reject) => {\n        try {\n          const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n          const store = transaction.objectStore(storeConfig.name);\n          const keyRequest = store.getAllKeys();\n\n          const protectedSet = new Set<string>();\n          const protectedLogicalKeys = new Set<string>();\n          protectedKeys.forEach(k => {\n            const plainKeys = this._buildStorageKeys(k, false);\n            const encryptedKeys = this._buildStorageKeys(k, true);\n            plainKeys.forEach(item => {\n              protectedSet.add(item);\n              protectedLogicalKeys.add(item);\n            });\n            encryptedKeys.forEach(item => protectedSet.add(item));\n          });\n\n          keyRequest.onsuccess = () => {\n            const allKeys = keyRequest.result as string[];\n            allKeys.forEach(k => {\n              if (!protectedSet.has(k)) {\n                const decrypted = this._decryptData<string>(k);\n                if (!decrypted || !protectedLogicalKeys.has(decrypted)) {\n                  store.delete(k);\n                }\n              }\n            });\n          };\n\n          keyRequest.onerror = () => reject(keyRequest.error);\n          transaction.oncomplete = () => resolve();\n          transaction.onerror = () => reject(transaction.error);\n        } catch (error) {\n          reject(error);\n        }\n      });\n    });\n  }\n\n  public async getAll<T = unknown>(storeName?: string): Promise<Record<string, T>> {\n    const storeConfig = this._getStoreConfig(storeName);\n    return this._withRetry(async () => {\n      await this._dbReady;\n      if (!this._db) {\n        await this._reconnect();\n        if (!this._db) {\n          return {};\n        }\n      }\n\n      if (!this._ensureStoreExists(storeConfig.name)) {\n        return {};\n      }\n\n      return new Promise<Record<string, T>>(resolve => {\n        try {\n          const transaction = this._db!.transaction([storeConfig.name], this._mode);\n          const store = transaction.objectStore(storeConfig.name);\n          const keysRequest = store.getAllKeys();\n          const valuesRequest = store.getAll();\n          const results: Record<string, T> = {};\n\n          keysRequest.onsuccess = () => {\n            const keys = keysRequest.result;\n            const values = valuesRequest.result;\n\n            keys.forEach((key, index) => {\n              if (typeof key === 'string') {\n                try {\n                  const _key = this._shouldEncrypt(storeConfig) ? this._decryptData<string>(key) : key;\n                  const _value = this._shouldEncrypt(storeConfig) ? this._decryptData<T>(values[index]) : values[index];\n                  if (_key && _value !== null) {\n                    results[zStripScopedCacheKey(_key)] = _value;\n                  }\n                } catch {\n                  console.warn(`[ZIndexDb] Failed to decrypt entry for key: ${key}`);\n                }\n              }\n            });\n\n            resolve(results);\n          };\n\n          keysRequest.onerror = () => resolve({});\n          transaction.onerror = () => resolve({});\n        } catch {\n          resolve({});\n        }\n      });\n    });\n  }\n\n  public async setMultiple<T>(items: Record<string, T>, options?: ZIndexDbSetOptions): Promise<void> {\n    const storeConfig = this._getStoreConfig(options?.storeName);\n    const shouldEncrypt = this._shouldEncrypt(storeConfig, options?.encrypt);\n    const entries = Object.entries(items);\n\n    await this._dbReady;\n    if (this._db && !this._ensureStoreExists(storeConfig.name)) {\n      await this._triggerUpgrade();\n    }\n\n    for (let i = 0; i < entries.length; i += Z_INDEXDB_BATCH_SIZE) {\n      const batch = entries.slice(i, i + Z_INDEXDB_BATCH_SIZE);\n      await this._withRetry(async () => {\n        await this._dbReady;\n        if (!this._db) {\n          await this._reconnect();\n          if (!this._db) {\n            throw new Error('Database not initialized');\n          }\n        }\n\n        if (!this._ensureStoreExists(storeConfig.name)) {\n          throw new Error(`Store \"${storeConfig.name}\" does not exist`);\n        }\n\n        return new Promise<void>((resolve, reject) => {\n          const transaction = this._db!.transaction([storeConfig.name], 'readwrite');\n          const store = transaction.objectStore(storeConfig.name);\n\n          batch.forEach(([key, value]) => {\n            const storageKeys = this._buildStorageKeys(key, shouldEncrypt);\n            const _key = storageKeys[0];\n            const _value = shouldEncrypt ? this._encryptData(value) : value;\n            store.put(_value, _key);\n            if (storageKeys.length > 1) {\n              store.delete(storageKeys[1]);\n            }\n          });\n\n          transaction.oncomplete = () => resolve();\n          transaction.onerror = () => reject(transaction.error);\n        });\n      });\n    }\n  }\n\n  public getStoreNames(): string[] {\n    return Array.from(this._stores.keys());\n  }\n\n  public hasStore(storeName: string): boolean {\n    return this._stores.has(storeName);\n  }\n\n  public async addStore(config: ZIndexDbStoreConfig): Promise<void> {\n    if (this._stores.has(config.name)) {\n      return;\n    }\n\n    this._stores.set(config.name, config);\n    await this._triggerUpgrade();\n  }\n\n  public async clearAll(): Promise<void> {\n    const storeNames = this.getStoreNames();\n    await Promise.all(storeNames.map(storeName => this.clear(storeName)));\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type ZThemeName = 'green' | 'orange' | 'violet' | 'neutral' | 'stone' | 'zinc' | 'gray' | 'slate' | 'hospital';\n\nexport interface ZThemeConfig {\n  defaultTheme?: ZThemeName;\n  defaultDarkMode?: boolean;\n  cacheKey?: string;\n}\n\nexport const Z_THEME_CONFIG = new InjectionToken<ZThemeConfig>('Z_THEME_CONFIG');\nexport const Z_DEFAULT_THEME: ZThemeName = 'neutral';\n\n/** Single cache key for all theme preferences */\nexport const Z_THEME_PREFERENCES_CACHE_KEY = 'Z_THEME_PREFERENCES';\n\n/** Cached theme preferences structure */\nexport interface ZThemePreferences {\n  theme: ZThemeName;\n  isDark: boolean;\n}\n\nexport const Z_THEME_CSS_MAP: Record<ZThemeName, string> = {\n  neutral: '',\n  green: 'assets/css/themes/green.css',\n  orange: 'assets/css/themes/orange.css',\n  violet: 'assets/css/themes/violet.css',\n  stone: 'assets/css/themes/stone.css',\n  zinc: 'assets/css/themes/zinc.css',\n  gray: 'assets/css/themes/gray.css',\n  slate: 'assets/css/themes/slate.css',\n  hospital: 'assets/css/themes/hospital.css',\n};\n","export interface ZTranslateConfig {\n  /** Default language */\n  defaultLang?: string;\n  /** Available languages */\n  availableLangs?: string[];\n  /** Path to translation files */\n  translationPath?: string;\n  /** Translation file extension */\n  fileExtension?: string;\n}\n\nexport interface ZTranslateI18nConfig {\n  defaultLang?: string;\n  availableLangs?: string[];\n}\n\nexport const Z_LANG_CACHE_KEY = 'Z_LANGUAGE';\n","import { computed, DestroyRef, inject, Injectable, signal, type Signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslateService, TranslationObject } from '@ngx-translate/core';\nimport { firstValueFrom, Observable } from 'rxjs';\nimport { Z_LANG_TO_LOCALE } from './defines';\nimport { Z_LANG_CACHE_KEY } from './types';\nimport { ZCacheService } from './z-cache.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ZTranslateService {\n  private readonly _translate = inject(TranslateService);\n  private readonly _destroyRef = inject(DestroyRef);\n\n  public readonly currentLang = signal<string>('vi');\n  public readonly availableLangs = signal<string[]>(['vi', 'en']);\n\n  public constructor() {\n    this._initialize();\n  }\n\n  private _initialize(): void {\n    const currentLang = this._translate.getCurrentLang() || ZCacheService.get<string>(Z_LANG_CACHE_KEY) || 'vi';\n    this._setCurrentLang(currentLang);\n    this._syncAvailableLangs();\n    this._bindTranslateEvents();\n  }\n\n  private _bindTranslateEvents(): void {\n    this._translate.onLangChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(event => {\n      if (!event.lang) {\n        return;\n      }\n      this._setCurrentLang(event.lang);\n    });\n  }\n\n  private _setCurrentLang(lang: string): void {\n    this.currentLang.set(lang);\n    ZCacheService.set(Z_LANG_CACHE_KEY, lang);\n    document.documentElement.lang = lang;\n  }\n\n  private _syncAvailableLangs(): void {\n    const langs = this._translate.getLangs();\n    if (langs.length) {\n      this.availableLangs.set([...langs]);\n    }\n  }\n\n  public use(lang: string): void {\n    if (!lang || lang === this.currentLang()) {\n      return;\n    }\n\n    void firstValueFrom(this._translate.use(lang)).catch(() => {\n      // Keep current language when target language load fails.\n    });\n  }\n\n  public getLang(): string {\n    return this.currentLang();\n  }\n\n  public getLocale(): string {\n    return Z_LANG_TO_LOCALE[this.currentLang()] ?? 'vi-VN';\n  }\n\n  public locale(): Signal<string> {\n    return computed(() => Z_LANG_TO_LOCALE[this.currentLang()] ?? 'vi-VN');\n  }\n\n  public instant(key: string, params?: Record<string, unknown>): string {\n    if (!key) {\n      return '';\n    }\n\n    return this._translate.instant(key, params);\n  }\n\n  /**\n   * Returns a computed signal that automatically updates when language changes.\n   * Use this instead of instant() when you need reactive translations.\n   *\n   * @example\n   * ```typescript\n   * // In component\n   * protected readonly title = this._zTranslate.translate('my_title_key');\n   *\n   * // In template\n   * <h1>{{ title() }}</h1>\n   * ```\n   */\n  public translate(key: string, params?: Record<string, unknown>): Signal<string> {\n    return computed(() => {\n      this.currentLang();\n      return this.instant(key, params);\n    });\n  }\n\n  public async get(key: string, params?: Record<string, unknown>): Promise<string> {\n    if (!key) {\n      return '';\n    }\n\n    return firstValueFrom(this._translate.get(key, params));\n  }\n\n  public get$(key: string, params?: Record<string, unknown>): Observable<string> {\n    return this._translate.get(key, params);\n  }\n\n  public stream$(key: string, params?: Record<string, unknown>): Observable<string> {\n    return this._translate.stream(key, params);\n  }\n\n  public async getMany(keys: string[], params?: Record<string, unknown>): Promise<Record<string, string>> {\n    const results: Record<string, string> = {};\n    await Promise.all(\n      keys.map(async key => {\n        results[key] = await this.get(key, params);\n      })\n    );\n\n    return results;\n  }\n\n  public has(key: string): boolean {\n    const translation = this._translate.instant(key);\n    return translation !== key;\n  }\n\n  public setTranslation(lang: string, translations: TranslationObject, shouldMerge = true): void {\n    this._translate.setTranslation(lang, translations, shouldMerge);\n    this._syncAvailableLangs();\n  }\n\n  public getNgxTranslate(): TranslateService {\n    return this._translate;\n  }\n}\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { catchError, defer, from, map, Observable, of, switchMap, tap, throwError } from 'rxjs';\nimport type {\n  ZHttpCacheEntry,\n  ZHttpConfig,\n  ZHttpContentType,\n  ZHttpError,\n  ZHttpNetworkCheck,\n  ZHttpOptions,\n} from './types/z-http.types';\nimport { ZCacheService } from './z-cache.service';\nimport { ZIndexDbService } from './z-indexdb.service';\nimport { ZTranslateService } from './z-translate.service';\n\nexport const Z_HTTP_DEFAULT_CONFIG: Required<ZHttpConfig> = {\n  defaultCacheTime: 3 * 60 * 1000,\n  networkCheckCacheTime: 5000,\n  tokenKey: 'Z_TOKEN',\n  userInfoKey: 'Z_USER_INFO',\n  lastUrlKey: 'Z_LAST_URL',\n  loginRoute: '/login',\n  homeRoute: '/',\n  unauthorizedRoute: '/401',\n};\n\n@Injectable()\nexport abstract class ZHttpAbstractService<TApiType extends string = string> {\n  protected readonly http = inject(HttpClient);\n  protected readonly router = inject(Router);\n  protected readonly cacheService = ZCacheService;\n  protected readonly translateService = inject(ZTranslateService);\n  protected readonly indexDbService: ZIndexDbService;\n\n  private _httpConfig: Required<ZHttpConfig> | null = null;\n  private _networkCache: ZHttpNetworkCheck | null = null;\n\n  public constructor() {\n    this.indexDbService = new ZIndexDbService({\n      dbName: 'ZHttpCache',\n      defaultStore: 'zHttpCache',\n      stores: [{ name: 'zHttpCache', encrypt: true }],\n    });\n  }\n\n  /**\n   * Returns the HTTP configuration. Override this method in subclasses to customize.\n   * @example\n   * ```typescript\n   * protected override setHttpConfig(): Partial<ZHttpConfig> {\n   *   return {\n   *     tokenKey: 'MY_TOKEN',\n   *     loginRoute: '/auth/login',\n   *   };\n   * }\n   * ```\n   */\n  protected setHttpConfig(): Partial<ZHttpConfig> {\n    return {};\n  }\n\n  protected get config(): Required<ZHttpConfig> {\n    if (!this._httpConfig) {\n      this._httpConfig = { ...Z_HTTP_DEFAULT_CONFIG, ...this.setHttpConfig() };\n    }\n\n    return this._httpConfig;\n  }\n\n  protected abstract resolveBaseUrl(apiType?: TApiType): string;\n\n  protected get<T, TParams extends object = object>(\n    endpoint: string,\n    options?: ZHttpOptions<TParams, TApiType>\n  ): Observable<T> {\n    const httpCall = (): Observable<T> => {\n      const { headers, params } = this._buildRequest(options);\n      const httpOptions = this._buildHttpOptions({ ...options, headers, params });\n      const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n      return this.http.get<T>(url, httpOptions) as Observable<T>;\n    };\n\n    return this._handleCacheAndRequest('GET', endpoint, httpCall, options);\n  }\n\n  protected post<T, TParams extends object = object>(\n    endpoint: string,\n    body: unknown,\n    options?: ZHttpOptions<TParams, TApiType>\n  ): Observable<T> {\n    const httpCall = (): Observable<T> => {\n      const { headers, body: transformedBody } = this._buildRequest(options, body);\n      const httpOptions = this._buildHttpOptions({ ...options, headers });\n      const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n      return this.http.post<T>(url, transformedBody, httpOptions) as Observable<T>;\n    };\n\n    return this._handleCacheAndRequest('POST', endpoint, httpCall, options, body);\n  }\n\n  protected put<T, TParams extends object = object>(\n    endpoint: string,\n    body: unknown,\n    options?: ZHttpOptions<TParams, TApiType>\n  ): Observable<T> {\n    const httpCall = (): Observable<T> => {\n      const { headers, body: transformedBody } = this._buildRequest(options, body);\n      const httpOptions = this._buildHttpOptions({ ...options, headers });\n      const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n      return this.http.put<T>(url, transformedBody, httpOptions) as Observable<T>;\n    };\n\n    return this._handleCacheAndRequest('PUT', endpoint, httpCall, options, body);\n  }\n\n  protected patch<T, TParams extends object = object>(\n    endpoint: string,\n    body: unknown,\n    options?: ZHttpOptions<TParams, TApiType>\n  ): Observable<T> {\n    const httpCall = (): Observable<T> => {\n      const { headers, body: transformedBody } = this._buildRequest(options, body);\n      const httpOptions = this._buildHttpOptions({ ...options, headers });\n      const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n      return this.http.patch<T>(url, transformedBody, httpOptions) as Observable<T>;\n    };\n\n    return this._handleCacheAndRequest('PATCH', endpoint, httpCall, options, body);\n  }\n\n  protected delete<T, TParams extends object = object>(\n    endpoint: string,\n    body?: unknown,\n    options?: ZHttpOptions<TParams, TApiType>\n  ): Observable<T> {\n    const httpCall = (): Observable<T> => {\n      const { headers, body: transformedBody } = this._buildRequest(options, body);\n      const httpOptions = this._buildHttpOptions({\n        ...options,\n        headers,\n        body: transformedBody,\n      });\n      if ('transferCache' in httpOptions) {\n        delete httpOptions['transferCache'];\n      }\n      const url = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n      return this.http.delete<T>(url, httpOptions) as Observable<T>;\n    };\n\n    return this._handleCacheAndRequest('DELETE', endpoint, httpCall, options, body);\n  }\n\n  private _buildRequest(\n    options?: ZHttpOptions<object, TApiType>,\n    body?: unknown\n  ): { headers: HttpHeaders; body?: unknown; params?: Record<string, string> } {\n    let headers = new HttpHeaders().set('Accept', 'application/json');\n    const contentType: ZHttpContentType = options?.contentType ?? 'json';\n    let finalBody = body;\n    let params: Record<string, string> | undefined;\n\n    if (contentType === 'json') {\n      headers = headers.set('Content-Type', 'application/json');\n      if (body !== undefined && body !== null) {\n        finalBody = JSON.stringify(body);\n      }\n    }\n\n    if (contentType === 'urlencoded') {\n      headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');\n      if (body && typeof body === 'object') {\n        const urlParams = new URLSearchParams();\n        Object.entries(body).forEach(([key, value]) => {\n          urlParams.set(key, String(value));\n        });\n        finalBody = urlParams.toString();\n      }\n    }\n\n    if (contentType === 'form-data') {\n      if (body instanceof FormData) {\n        finalBody = body;\n      }\n      if (!(body instanceof FormData) && body && typeof body === 'object') {\n        const formData = new FormData();\n        Object.entries(body).forEach(([key, value]) => {\n          formData.append(key, value as string | Blob);\n        });\n        finalBody = formData;\n      }\n    }\n\n    if (options?.headers && !(options.headers instanceof HttpHeaders)) {\n      const headersObj = options.headers as Record<string, string | string[]>;\n      Object.keys(headersObj).forEach(key => {\n        const value = headersObj[key];\n        headers = headers.set(key, Array.isArray(value) ? value.join(',') : value);\n      });\n    }\n\n    const token = this.cacheService.get<string>(this.config.tokenKey);\n    if (token && !options?.skipToken) {\n      headers = headers.set('Authorization', `Bearer ${token}`);\n    }\n\n    if (options?.params && !(options.params instanceof Object.getPrototypeOf(URLSearchParams).constructor)) {\n      const paramsObj = options.params as Record<string, unknown>;\n      params = {};\n      Object.keys(paramsObj).forEach(key => {\n        const value = paramsObj[key];\n        if (value !== undefined && value !== null) {\n          params![key] = String(value);\n        }\n      });\n    }\n\n    return { headers, body: finalBody, params };\n  }\n\n  private _buildHttpOptions(options?: ZHttpOptions<object, TApiType>): Record<string, unknown> {\n    const httpOptions: Record<string, unknown> = { ...options };\n    delete httpOptions['enableCache'];\n    delete httpOptions['keyCache'];\n    delete httpOptions['timeCache'];\n    delete httpOptions['contentType'];\n    delete httpOptions['api'];\n    delete httpOptions['skipToken'];\n    delete httpOptions['skipErrorToast'];\n    return httpOptions;\n  }\n\n  private _handleCacheAndRequest<T>(\n    method: string,\n    endpoint: string,\n    httpCall: () => Observable<T>,\n    options?: ZHttpOptions<object, TApiType>,\n    body?: unknown\n  ): Observable<T> {\n    if (!options?.enableCache) {\n      return this._executeHttpCall(httpCall, options, method, endpoint, body);\n    }\n\n    const cacheKey = this._resolveCacheKey(method, endpoint, options, body);\n\n    return from(this._getCachedData<T>(cacheKey)).pipe(\n      switchMap(cachedData => {\n        if (cachedData !== null) {\n          return of(cachedData);\n        }\n        return this._executeHttpCall(httpCall, options, method, endpoint, body);\n      }),\n      catchError(() => this._executeHttpCall(httpCall, options, method, endpoint, body))\n    );\n  }\n\n  private _executeHttpCall<T>(\n    httpCall: () => Observable<T>,\n    options?: ZHttpOptions<object, TApiType>,\n    method?: string,\n    endpoint?: string,\n    body?: unknown\n  ): Observable<T> {\n    return this._detectNetworkStatus().pipe(\n      switchMap(isOnline => {\n        if (!isOnline) {\n          const error: ZHttpError<TApiType> = {\n            message: this.translateService.instant('i18n_z_ui_http_network_offline'),\n            status: 0,\n          };\n          return throwError(() => error);\n        }\n\n        return httpCall().pipe(\n          catchError(err => this._handleError(err, options, method, endpoint, body)),\n          tap(data => {\n            if (options?.log) {\n              console.log('[ZHttp] Request succeeded:', {\n                method,\n                body,\n                endpoint: `${this.resolveBaseUrl(options?.api)}${endpoint}`,\n                data,\n              });\n            }\n\n            if (options?.enableCache && method && endpoint) {\n              const cacheKey = this._resolveCacheKey(method, endpoint, options, body);\n              const ttl = options.timeCache ?? this.config.defaultCacheTime;\n              this._cacheData(cacheKey, data, ttl).catch(console.warn);\n            }\n          })\n        );\n      })\n    );\n  }\n\n  private _generateCacheKey(\n    method: string,\n    endpoint: string,\n    options?: ZHttpOptions<object, TApiType>,\n    body?: unknown\n  ): string {\n    const api = options?.api ?? 'default';\n    const params = options?.params ? JSON.stringify(options.params) : '';\n    const bodyStr = body ? JSON.stringify(body) : '';\n    return `${method}_${api}_${endpoint}_${params}_${bodyStr}`;\n  }\n\n  private _resolveCacheKey(\n    method: string,\n    endpoint: string,\n    options?: ZHttpOptions<object, TApiType>,\n    body?: unknown\n  ): string {\n    if (options?.keyCache !== undefined) {\n      return options.keyCache;\n    }\n\n    return this._generateCacheKey(method, endpoint, options, body);\n  }\n\n  private async _cacheData<T>(key: string, data: T, ttl: number): Promise<void> {\n    const cacheEntry: ZHttpCacheEntry<T> = { data, timestamp: Date.now(), ttl };\n    await this.indexDbService.set(key, cacheEntry, { storeName: 'HttpCache' });\n  }\n\n  private async _getCachedData<T>(key: string): Promise<T | null> {\n    try {\n      const cached = await this.indexDbService.get<ZHttpCacheEntry<T>>(key, { storeName: 'HttpCache' });\n      if (!cached) {\n        return null;\n      }\n\n      if (Date.now() - cached.timestamp > cached.ttl) {\n        await this.indexDbService.delete(key, 'HttpCache');\n        return null;\n      }\n      return cached.data;\n    } catch {\n      return null;\n    }\n  }\n\n  private _detectNetworkStatus(): Observable<boolean> {\n    const now = Date.now();\n    if (this._networkCache && now - this._networkCache.time < this.config.networkCheckCacheTime) {\n      return of(this._networkCache.isOnline);\n    }\n\n    if (!navigator.onLine) {\n      this._networkCache = { time: now, isOnline: false };\n      return of(false);\n    }\n\n    return this._checkNetworkWithRetry().pipe(\n      map(isOnline => {\n        this._networkCache = { time: Date.now(), isOnline };\n        return isOnline;\n      }),\n      catchError(() => {\n        this._networkCache = { time: Date.now(), isOnline: false };\n        return of(false);\n      })\n    );\n  }\n\n  private _checkNetworkWithRetry(retries = 2): Observable<boolean> {\n    return defer(() => this._performNetworkCheck()).pipe(\n      catchError(() => {\n        if (retries > 0) {\n          return this._checkNetworkWithRetry(retries - 1);\n        }\n        return of(false);\n      })\n    );\n  }\n\n  private _performNetworkCheck(): Observable<boolean> {\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), 3000);\n\n    return from(fetch('data:,', { method: 'HEAD', signal: controller.signal })).pipe(\n      tap(() => clearTimeout(timeoutId)),\n      map(() => true),\n      catchError(() => {\n        clearTimeout(timeoutId);\n        throw new Error('Network check failed');\n      })\n    );\n  }\n\n  private _handleError(\n    error: Error,\n    options?: ZHttpOptions<object, TApiType>,\n    method?: string,\n    endpoint?: string,\n    body?: unknown\n  ): Observable<never> {\n    const statusCode = error instanceof HttpErrorResponse ? error.status : 500;\n    const fullEndpoint = `${this.resolveBaseUrl(options?.api)}${endpoint}`;\n\n    const httpError = this._buildErrorObject(error, statusCode, fullEndpoint, method, body, options);\n    const localizedError = this._localizeError(httpError, statusCode);\n\n    console.error('[ZHttp] Request failed:', {\n      method,\n      endpoint: fullEndpoint,\n      status: statusCode,\n      error: localizedError,\n    });\n\n    void this._handleStatusCode(statusCode);\n    return throwError(() => localizedError);\n  }\n\n  private _buildErrorObject(\n    error: Error,\n    statusCode: number,\n    endpoint: string,\n    method?: string,\n    body?: unknown,\n    options?: ZHttpOptions<object, TApiType>\n  ): ZHttpError<TApiType> {\n    const baseError: ZHttpError<TApiType> = { message: '', status: statusCode, endpoint, method, body, options };\n\n    if (!(error instanceof HttpErrorResponse)) {\n      return {\n        ...baseError,\n        error: error.message,\n        message: error.message || this.translateService.instant('i18n_z_ui_http_error_default'),\n      };\n    }\n\n    const errorBody = error.error;\n\n    if (typeof errorBody?.message === 'string') {\n      const message =\n        errorBody.message === 'Failed to fetch'\n          ? this.translateService.instant('i18n_z_ui_http_error_failed_to_fetch', { url: endpoint })\n          : errorBody.message;\n      return { ...baseError, error: errorBody, message };\n    }\n\n    if (Array.isArray(errorBody?.errors) && errorBody.errors.length > 0) {\n      const message = errorBody.errors\n        .map((err: unknown) => (typeof err === 'string' ? err : JSON.stringify(err)))\n        .join(', ');\n      return { ...baseError, error: errorBody, message };\n    }\n\n    if (\n      typeof errorBody === 'object' &&\n      errorBody !== null &&\n      !Array.isArray(errorBody) &&\n      Object.keys(errorBody).length > 0\n    ) {\n      return { ...baseError, error: errorBody, message: JSON.stringify(errorBody) };\n    }\n\n    if (typeof errorBody === 'string') {\n      return { ...baseError, error: errorBody, message: errorBody };\n    }\n\n    return {\n      ...baseError,\n      error: error.message,\n      message: error.message || this.translateService.instant('i18n_z_ui_http_error_default'),\n    };\n  }\n\n  private _localizeError(error: ZHttpError<TApiType>, statusCode: number): ZHttpError<TApiType> {\n    const localizedError = { ...error };\n    const errorMessages: Record<number, string> = {\n      400: error.message || this.translateService.instant('i18n_z_ui_http_error_400'),\n      401: this._get401Message(),\n      403: this.translateService.instant('i18n_z_ui_http_error_403'),\n      404: this.translateService.instant('i18n_z_ui_http_error_404'),\n      500: this.translateService.instant('i18n_z_ui_http_error_500'),\n    };\n\n    if (errorMessages[statusCode]) {\n      localizedError.message = errorMessages[statusCode];\n    }\n\n    return localizedError;\n  }\n\n  private _get401Message(): string {\n    const token = this.cacheService.get<string>(this.config.tokenKey);\n\n    if (!token) {\n      return this.translateService.instant('i18n_z_ui_http_error_401_expired');\n    }\n\n    return this.translateService.instant('i18n_z_ui_http_error_401_permission');\n  }\n\n  private async _handleStatusCode(statusCode: number): Promise<void> {\n    if (statusCode !== 401) {\n      return;\n    }\n\n    await this._redirectToLogin();\n  }\n\n  private async _redirectToLogin(): Promise<void> {\n    const currentUrl = this.router.url;\n    const shouldSaveUrl =\n      currentUrl &&\n      currentUrl !== '/' &&\n      !currentUrl.includes(this.config.loginRoute) &&\n      !currentUrl.includes(this.config.unauthorizedRoute);\n\n    if (shouldSaveUrl) {\n      this.cacheService.set(this.config.lastUrlKey, currentUrl);\n      await this.indexDbService.set(this.config.lastUrlKey, currentUrl).catch(console.error);\n    }\n\n    this.cacheService.deleteMultiple([this.config.tokenKey, this.config.userInfoKey]);\n    await this.indexDbService.clear('HttpCache').catch(console.error);\n    this.router.navigate([this.config.loginRoute]).catch(console.error);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/**\n * Service to coordinate overlay container lifecycle events.\n * Used by overlay containers (z-modal, z-drawer, etc.) to notify\n * child components (z-popover, z-select dropdown, etc.) when they should close.\n *\n * This enables smooth closing behavior when a parent overlay container closes -\n * all child popovers/dropdowns will close immediately without waiting for DOM removal.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ZOverlayContainerService {\n  private readonly _closeAll$ = new Subject<void>();\n\n  /**\n   * Observable that emits when an overlay container starts closing.\n   * Child components should subscribe to this and close themselves immediately.\n   */\n  public readonly closeAll$ = this._closeAll$.asObservable();\n\n  /**\n   * Called by overlay containers (z-modal, z-drawer, etc.) when they start closing.\n   * This will notify all subscribed child components to close immediately.\n   */\n  public notifyClosing(): void {\n    this._closeAll$.next();\n  }\n}\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\n\n/**\n * Global z-index counter for overlay components (z-modal, z-drawer, etc.).\n *\n * Each time an overlay opens, it calls `next()` to get a unique, incrementing\n * z-index value. This guarantees that overlays opened later always stack on top\n * of earlier ones — regardless of DOM order or HMR re-creation.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ZOverlayZIndexService {\n  private _currentZIndex = 1000;\n  private readonly _platformId = inject(PLATFORM_ID);\n\n  /**\n   * Returns the next z-index value and increments the counter.\n   * Kept for backward compatibility with existing overlay flow.\n   */\n  public next(): number {\n    const zIndex = this._currentZIndex;\n    this._currentZIndex += 2; // +2 to leave room for backdrop (zIndex - 1)\n\n    return zIndex;\n  }\n\n  public applyToOverlay(overlayRef: OverlayRef): number {\n    const zIndex = this.next();\n    overlayRef.hostElement.style.zIndex = `${zIndex}`;\n\n    if (overlayRef.backdropElement) {\n      overlayRef.backdropElement.style.zIndex = `${zIndex - 1}`;\n    }\n\n    return zIndex;\n  }\n\n  public deferMoveToTop(overlayRef: OverlayRef): void {\n    if (!isPlatformBrowser(this._platformId)) {\n      return;\n    }\n\n    queueMicrotask(() => {\n      this.moveToTop(overlayRef);\n    });\n  }\n\n  public moveToTop(overlayRef: OverlayRef): void {\n    if (!isPlatformBrowser(this._platformId)) {\n      return;\n    }\n\n    const wrapperElement = overlayRef.hostElement;\n    if (!wrapperElement) {\n      return;\n    }\n\n    if (wrapperElement.hasAttribute('popover')) {\n      const popoverWrapper = wrapperElement as HTMLElement & {\n        hidePopover?: () => void;\n        showPopover?: () => void;\n      };\n\n      if (popoverWrapper.hidePopover && popoverWrapper.showPopover) {\n        try {\n          popoverWrapper.hidePopover();\n          popoverWrapper.showPopover();\n          return;\n        } catch {\n          // fall through to non-popover fallback\n        }\n      }\n    }\n\n    const parent = wrapperElement.parentElement;\n    if (parent) {\n      parent.appendChild(wrapperElement);\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { ZSubjectType } from './types/z-subject.types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ZSubjectService {\n  private readonly _subjects = new Map<string, Subject<unknown>>();\n  private readonly _behaviorSubjects = new Map<string, BehaviorSubject<unknown>>();\n\n  /**\n   * Emit a value to a subject\n   * @param key - Subject identifier\n   * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n   * @param value - Value to emit\n   */\n  public emit<T>(key: string, type: ZSubjectType, value: T): void {\n    if (type === 'behavior') {\n      const existingSubject = this._behaviorSubjects.get(key) as BehaviorSubject<T> | undefined;\n      if (existingSubject) {\n        existingSubject.next(value);\n        return;\n      }\n\n      const newSubject = new BehaviorSubject<T>(value);\n      this._behaviorSubjects.set(key, newSubject as BehaviorSubject<unknown>);\n      return;\n    }\n\n    const existingSubject = this._subjects.get(key) as Subject<T> | undefined;\n    if (existingSubject) {\n      existingSubject.next(value);\n      return;\n    }\n\n    const newSubject = new Subject<T>();\n    this._subjects.set(key, newSubject as Subject<unknown>);\n    newSubject.next(value);\n  }\n\n  /**\n   * Get an observable for a subject\n   * @param key - Subject identifier\n   * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n   * @param initialValue - Initial value for BehaviorSubject (required for new behavior subjects)\n   */\n  public on$<T>(key: string, type: ZSubjectType, initialValue?: T): Observable<T> {\n    if (type === 'behavior') {\n      const existingSubject = this._behaviorSubjects.get(key) as BehaviorSubject<T> | undefined;\n      if (existingSubject) {\n        return existingSubject.asObservable();\n      }\n\n      const newSubject = new BehaviorSubject<T>(initialValue as T);\n      this._behaviorSubjects.set(key, newSubject as BehaviorSubject<unknown>);\n      return newSubject.asObservable();\n    }\n\n    const existingSubject = this._subjects.get(key) as Subject<T> | undefined;\n    if (existingSubject) {\n      return existingSubject.asObservable();\n    }\n\n    const newSubject = new Subject<T>();\n    this._subjects.set(key, newSubject as Subject<unknown>);\n    return newSubject.asObservable();\n  }\n\n  /**\n   * Get the current value of a BehaviorSubject\n   * @param key - Subject identifier\n   */\n  public getValue<T>(key: string): T | undefined {\n    const subject = this._behaviorSubjects.get(key);\n    if (!subject) {\n      return undefined;\n    }\n    return subject.getValue() as T;\n  }\n\n  /**\n   * Complete and remove a subject\n   * @param key - Subject identifier\n   * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n   */\n  public complete(key: string, type: ZSubjectType): void {\n    if (type === 'behavior') {\n      const subject = this._behaviorSubjects.get(key);\n      if (!subject) {\n        return;\n      }\n      subject.complete();\n      this._behaviorSubjects.delete(key);\n      return;\n    }\n\n    const subject = this._subjects.get(key);\n    if (!subject) {\n      return;\n    }\n    subject.complete();\n    this._subjects.delete(key);\n  }\n\n  /**\n   * Complete all subjects\n   */\n  public completeAll(): void {\n    this._subjects.forEach(subject => subject.complete());\n    this._behaviorSubjects.forEach(subject => subject.complete());\n    this._subjects.clear();\n    this._behaviorSubjects.clear();\n  }\n\n  /**\n   * Check if a subject exists\n   * @param key - Subject identifier\n   * @param type - 'subject' for Subject, 'behavior' for BehaviorSubject\n   */\n  public has(key: string, type: ZSubjectType): boolean {\n    if (type === 'behavior') {\n      return this._behaviorSubjects.has(key);\n    }\n    return this._subjects.has(key);\n  }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { effect, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport {\n  type ZThemeConfig,\n  type ZThemeName,\n  type ZThemePreferences,\n  Z_DEFAULT_THEME,\n  Z_THEME_CONFIG,\n  Z_THEME_CSS_MAP,\n  Z_THEME_PREFERENCES_CACHE_KEY,\n} from './types/z-theme.types';\nimport { ZCacheService } from './z-cache.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ZThemeService {\n  private readonly _document = inject(DOCUMENT);\n  private readonly _platformId = inject(PLATFORM_ID);\n  private readonly _config = inject(Z_THEME_CONFIG, { optional: true }) as ZThemeConfig | null;\n  private readonly _isBrowser = isPlatformBrowser(this._platformId);\n\n  private readonly _defaultTheme = this._config?.defaultTheme ?? Z_DEFAULT_THEME;\n  private readonly _defaultDarkMode = this._config?.defaultDarkMode ?? true;\n  private readonly _preferencesCacheKey = this._config?.cacheKey?.trim() || Z_THEME_PREFERENCES_CACHE_KEY;\n\n  private readonly _isDark = signal(this._getInitialPreferences().isDark);\n  private readonly _currentTheme = signal<ZThemeName>(this._getInitialPreferences().theme);\n  private readonly _loadedThemes = new Set<ZThemeName>(['neutral']);\n\n  public readonly isDark = this._isDark.asReadonly();\n  public readonly currentTheme = this._currentTheme.asReadonly();\n\n  constructor() {\n    if (this._isBrowser) {\n      this._initializeTheme();\n    }\n\n    effect(() => {\n      const theme = this._currentTheme();\n      const isDark = this._isDark();\n\n      if (this._isBrowser) {\n        this._savePreferences({ theme, isDark });\n      }\n    });\n  }\n\n  public setTheme(theme: ZThemeName): void {\n    this._currentTheme.set(theme);\n    if (this._loadedThemes.has(theme)) {\n      this._document.documentElement.setAttribute('z-theme', theme);\n      return;\n    }\n\n    if (!Z_THEME_CSS_MAP[theme]) {\n      this._document.documentElement.setAttribute('z-theme', theme);\n      return;\n    }\n\n    this._loadThemeCSS(theme, () => {\n      this._document.documentElement.setAttribute('z-theme', theme);\n    });\n  }\n\n  public toggleDarkMode(isDark: boolean): void {\n    this._isDark.set(isDark);\n    if (isDark) {\n      this._document.documentElement.classList.add('dark');\n      return;\n    }\n\n    this._document.documentElement.classList.remove('dark');\n  }\n\n  public preloadTheme(theme: ZThemeName): void {\n    if (this._loadedThemes.has(theme) || !Z_THEME_CSS_MAP[theme]) {\n      return;\n    }\n\n    this._loadThemeCSS(theme);\n  }\n\n  private _initializeTheme(): void {\n    const { theme, isDark } = this._getInitialPreferences();\n    this.setTheme(theme);\n    this.toggleDarkMode(isDark);\n  }\n\n  private _getInitialPreferences(): ZThemePreferences {\n    const defaultPreferences: ZThemePreferences = {\n      theme: this._defaultTheme,\n      isDark: this._defaultDarkMode,\n    };\n\n    if (!this._isBrowser) {\n      return defaultPreferences;\n    }\n\n    const cached = ZCacheService.get<ZThemePreferences>(this._preferencesCacheKey);\n    if (!cached) {\n      return defaultPreferences;\n    }\n\n    return {\n      theme: this._isValidTheme(cached.theme) ? cached.theme : defaultPreferences.theme,\n      isDark: typeof cached.isDark === 'boolean' ? cached.isDark : defaultPreferences.isDark,\n    };\n  }\n\n  private _savePreferences(preferences: ZThemePreferences): void {\n    ZCacheService.set(this._preferencesCacheKey, preferences);\n  }\n\n  private _isValidTheme(theme: unknown): theme is ZThemeName {\n    const validThemes: ZThemeName[] = [\n      'green',\n      'orange',\n      'violet',\n      'neutral',\n      'stone',\n      'zinc',\n      'gray',\n      'slate',\n      'hospital',\n    ];\n    return typeof theme === 'string' && validThemes.includes(theme as ZThemeName);\n  }\n\n  private _loadThemeCSS(theme: ZThemeName, onLoad?: () => void): void {\n    const cssPath = Z_THEME_CSS_MAP[theme];\n    if (!cssPath) {\n      onLoad?.();\n      return;\n    }\n\n    const existingLink = this._document.querySelector(`link[data-theme=\"${theme}\"]`);\n    if (existingLink) {\n      this._loadedThemes.add(theme);\n      onLoad?.();\n      return;\n    }\n\n    const link = this._document.createElement('link');\n    link.rel = 'stylesheet';\n    link.href = cssPath;\n    link.setAttribute('data-theme', theme);\n    link.onload = (): void => {\n      this._loadedThemes.add(theme);\n      onLoad?.();\n    };\n\n    link.onerror = (): void => {\n      console.error(`Failed to load theme \"${theme}\" from ${cssPath}`);\n      onLoad?.();\n    };\n\n    this._document.head.appendChild(link);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAEA,MAAM,uBAAuB,GAAG,IAAI;AACpC,MAAM,oBAAoB,GAAG,IAAI;AACjC,MAAM,gBAAgB,GAAG,QAAQ;AAEjC,MAAM,eAAe,GAAG,CAAC,MAAK;AAC5B,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,gBAAgB;IACzB;IAEA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjD,IAAA,MAAM,QAAQ,GACZ,OAAO,QAAQ,KAAK,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE;AAC/G,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;AACxB,QAAA,OAAO,gBAAgB;IACzB;IAEA,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,QAAQ,IAAI,gBAAgB;IACrC;IAEA,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,QAAQ,EAAE;AACjC,CAAC,GAAG;AAEJ,MAAM,oBAAoB,GAAG,CAAA,EAAG,uBAAuB,CAAA,EAAG,eAAe,EAAE;AAC3E,MAAM,iBAAiB,GAAG,CAAA,EAAG,oBAAoB,CAAA,EAAG,eAAe,EAAE;AAErE,SAAS,YAAY,CAAC,KAAa,EAAE,WAAmB,EAAA;AACtD,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;IAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAC7C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,WAAW,EAAE;AACnC;AAEM,SAAU,oBAAoB,CAAC,OAAe,EAAA;AAClD,IAAA,OAAO,YAAY,CAAC,OAAO,EAAE,oBAAoB,CAAC;AACpD;AAEM,SAAU,kBAAkB,CAAC,UAAkB,EAAA;AACnD,IAAA,OAAO,YAAY,CAAC,UAAU,EAAE,iBAAiB,CAAC;AACpD;AAEM,SAAU,oBAAoB,CAAC,GAAW,EAAA;AAC9C,IAAA,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,EAAE;IAChC,IAAI,CAAC,aAAa,EAAE;AAClB,QAAA,OAAO,GAAG;IACZ;IAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;AACjD,QAAA,OAAO,aAAa;IACtB;AAEA,IAAA,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC;AACnF;;AC1DO,MAAM,cAAc,GAAG;AAC5B,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,WAAW,EAAE,UAAU;AAEvB,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,UAAU,EAAE,UAAU;AAEtB,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,UAAU,EAAE,UAAU;AAEtB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,YAAY,EAAE,UAAU;AAExB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,SAAS,EAAE,UAAU;AAErB,IAAA,KAAK,EAAE,UAAU;AACjB,IAAA,KAAK,EAAE,UAAU;AACjB,IAAA,WAAW,EAAE,UAAU;;AAGlB,MAAM,sBAAsB,GAAwB;AACzD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,IAAI,EAAE,EAAE;AACT,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,IAAI,EAAE,IAAI;AACX,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC;AACnC,QAAA,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC;AACnC,KAAA;;AAGI,MAAM,mBAAmB,GAAG;AACjC,IAAA,GAAG,EAAE,EAAE,KAAK,EAAE,MAAe,EAAE;AAC/B,IAAA,IAAI,EAAE,EAAE,KAAK,EAAE,MAAe,EAAE;AAChC,IAAA,MAAM,EAAE,EAAE,KAAK,EAAE,MAAe,EAAE;AAClC,IAAA,KAAK,EAAE,EAAE,KAAK,EAAE,MAAe,EAAE;;AAG5B,MAAM,sBAAsB,GAA2B;AAC5D,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;;AAGH,MAAM,wBAAwB,GAA2B;AAC9D,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,aAAa,EAAE,GAAG;AAClB,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,cAAc,EAAE,IAAI;;AAGf,MAAM,oBAAoB,GAAG;AAClC,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,OAAO,EAAE,EAAE;;;ACxHN,MAAM,wBAAwB,GACnC;AACE,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,YAAY,EAAE,QAAQ;;AAGnB,MAAM,oBAAoB,GAAG;AAC7B,MAAM,qBAAqB,GAAG;;ACX9B,MAAM,gBAAgB,GAA2B;AACtD,IAAA,EAAE,EAAE,OAAO;AACX,IAAA,EAAE,EAAE,OAAO;;;MCKA,aAAa,CAAA;AAChB,IAAA,OAAO,OAAO,GAAG,IAAI;AACrB,IAAA,OAAO,QAAQ,GAAG,IAAI;IAEvB,OAAO,SAAS,CAAC,MAAoB,EAAA;AAC1C,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM;QACvC;AACA,QAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;AAChC,YAAA,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO;QACzC;IACF;IAEQ,OAAO,OAAO,CAAC,IAAa,EAAA;QAClC,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACxC,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D;IAEQ,OAAO,OAAO,CAAI,IAAY,EAAA;AACpC,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAChB,gBAAA,OAAO,IAAI;YACb;YACA,OAAO,OAAO,CAAC,GAAQ;QACzB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;IAEQ,OAAO,mBAAmB,CAAC,GAAW,EAAA;AAC5C,QAAA,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;IACjC;IAEQ,OAAO,aAAa,CAAC,GAAW,EAAA;QACtC,OAAO,oBAAoB,CAAC,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACrE;AAEQ,IAAA,OAAO,aAAa,CAAC,aAAqB,EAAE,OAAgB,EAAA;QAClE,MAAM,WAAW,GAAG,CAAA,EAAG,aAAa,CAAC,OAAO,CAAA,EAAG,aAAa,CAAA,CAAE;AAC9D,QAAA,OAAO,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW;IACnE;AAEQ,IAAA,OAAO,WAAW,CAAC,GAAW,EAAE,OAAgB,EAAA;AACtD,QAAA,OAAO,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAC/E;AAEQ,IAAA,OAAO,iBAAiB,CAAC,GAAW,EAAE,OAAgB,EAAA;QAC5D,MAAM,gBAAgB,GAAG,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC;QAC/D,MAAM,gBAAgB,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC;AACzD,QAAA,IAAI,gBAAgB,KAAK,gBAAgB,EAAE;AACzC,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,aAAa,CAAC,aAAa,CAAC,gBAAgB,EAAE,OAAO,CAAC;IAC/D;AAEQ,IAAA,OAAO,wBAAwB,CAAC,GAAW,EAAE,OAAgB,EAAA;QACnE,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;QACzD,MAAM,SAAS,GAAG,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC;AAC/D,QAAA,OAAO,SAAS,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;IACzD;IAEQ,OAAO,iBAAiB,CAAC,UAAkB,EAAA;QACjD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAU,UAAU,CAAC;AAC1D,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,OAAO;IAChB;IAEQ,OAAO,oBAAoB,CAAC,UAAkB,EAAA;QACpD,IAAI,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AAChD,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,OAAO,GAAG,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,KAAK;QACd;QAEA,OAAO,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC;IAClD;AAEQ,IAAA,OAAO,cAAc,CAAI,SAAkB,EAAE,QAAW,EAAA;AAC9D,QAAA,IAAI;YACF,OAAO,SAAS,EAAE;QACpB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AACjD,YAAA,OAAO,QAAQ;QACjB;IACF;IAEO,OAAO,GAAG,CAAI,GAAW,EAAE,YAAgB,EAAE,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAA;AAClF,QAAA,OAAO,aAAa,CAAC,cAAc,CAAC,MAAK;YACvC,MAAM,aAAa,GAAG,aAAa,CAAC,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1E,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACrD,IAAI,CAAC,MAAM,EAAE;oBACX;gBACF;gBAEA,MAAM,IAAI,GAAG,OAAO,GAAG,aAAa,CAAC,OAAO,CAAI,MAAM,CAAC,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAO;gBACnF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;oBACvC;gBACF;AAEA,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,oBAAA,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC;AAClC,oBAAA,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;oBACvC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC3C;AAEA,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,OAAO,YAAY;QACrB,CAAC,EAAE,YAAY,CAAC;IAClB;IAEO,OAAO,GAAG,CAAI,GAAW,EAAE,IAAO,EAAE,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAA;AACzE,QAAA,OAAO,aAAa,CAAC,cAAc,CAAC,MAAK;YACvC,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;YACpD,MAAM,SAAS,GAAG,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC;YAC/D,MAAM,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3E,YAAA,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;YAClC,IAAI,SAAS,EAAE;AACb,gBAAA,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC;YACpC;AACA,YAAA,OAAO,IAAI;QACb,CAAC,EAAE,KAAK,CAAC;IACX;IAEO,OAAO,MAAM,CAAC,GAAW,EAAA;AAC9B,QAAA,OAAO,aAAa,CAAC,cAAc,CAAC,MAAK;YACvC,MAAM,aAAa,GAAG,aAAa,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC;YACvE,MAAM,SAAS,GAAG,aAAa,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC;AACpE,YAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5D,YAAA,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxD,YAAA,OAAO,IAAI;QACb,CAAC,EAAE,KAAK,CAAC;IACX;IAEO,OAAO,cAAc,CAAC,IAAc,EAAA;AACzC,QAAA,OAAO,aAAa,CAAC,cAAc,CAAC,MAAK;AACvC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;gBACjB,MAAM,aAAa,GAAG,aAAa,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC;gBACvE,MAAM,SAAS,GAAG,aAAa,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC;AACpE,gBAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5D,gBAAA,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1D,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI;QACb,CAAC,EAAE,KAAK,CAAC;IACX;AAEO,IAAA,OAAO,KAAK,GAAA;AACjB,QAAA,OAAO,aAAa,CAAC,cAAc,CAAC,MAAK;YACvC,MAAM,YAAY,GAAa,EAAE;AAEjC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,GAAG,EAAE;oBACR;gBACF;AAEA,gBAAA,IAAI,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;AAC3C,oBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;gBACxB;YACF;AAEA,YAAA,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACzD,YAAA,OAAO,IAAI;QACb,CAAC,EAAE,KAAK,CAAC;IACX;IAEO,OAAO,GAAG,CAAC,GAAW,EAAE,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAA;AAC7D,QAAA,OAAO,aAAa,CAAC,cAAc,CAAC,MAAK;YACvC,MAAM,aAAa,GAAG,aAAa,CAAC,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1E,YAAA,OAAO,aAAa,CAAC,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;QACpF,CAAC,EAAE,KAAK,CAAC;IACX;uGArLW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCsBY,aAAa,CAAA;IAChB,OAAO,eAAe,CAC5B,MAA4C,EAAA;QAE5C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACzC,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,MAAM,CAAC,WAAW,KAAK,MAAM;IACtC;IAEQ,OAAO,gBAAgB,CAAI,GAA2C,EAAA;AAC5E,QAAA,MAAM,KAAK,GAA4B;AACrC,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,OAAO,EAAE,SAAS;SACnB;QAED,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC9C,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,MAA6C,EAAE;QACjF;QAEA,OAAO;AACL,YAAA,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;AACvB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,OAAO,EAAE,SAAS;SACnB;IACH;AAEO,IAAA,MAAM,WAAW,CAAc,MAAuB,EAAE,UAA+B,EAAE,EAAA;AAC9F,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC5D,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;QACvC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;YAC9C,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,6BAA6B,CAAC;AACrD,YAAA,MAAM,KAAK;QACb;IACF;AAEO,IAAA,MAAM,eAAe,CAC1B,MAAgC,EAChC,UAA+B,EAAE,EAAA;AAEjC,QAAA,IAAI;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;AAC7D,YAAA,MAAM,WAAW,GAAoB;gBACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,gBAAA,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB;YACD,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC;QAC9C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;YACnD,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,6BAA6B,CAAC;AACrD,YAAA,MAAM,KAAK;QACb;IACF;IAEO,MAAM,iBAAiB,CAC5B,SAAiB,EACjB,QAAQ,GAAG,QAAQ,EACnB,OAAA,GAA+B,EAAE,EAAA;AAEjC,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,uBAAuB,CAAC,SAAS,EAAE,QAAQ,CAAC;YAC/E,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;QACvC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;YACrD,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,6BAA6B,CAAC;AACrD,YAAA,MAAM,KAAK;QACb;IACF;IAEO,MAAM,qBAAqB,CAChC,SAAiB,EACjB,QAAQ,GAAG,QAAQ,EACnB,OAAA,GAA+B,EAAE,EAAA;AAEjC,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC;YAClD,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,SAAS,CAAA,WAAA,CAAa,CAAC;YAC7D;YAEA,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO;AACvD,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;AAC7B,gBAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;YAC/D;AAEA,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAyB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACzF,YAAA,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,OAAO;AAEvC,YAAA,IAAI,aAAa,GAAG,CAAA,EAAG,QAAQ,OAAO;YACtC,IAAI,YAAY,EAAE;gBAChB,aAAa,GAAG,GAAG,QAAQ,CAAA,CAAA,EAAI,aAAa,CAAC,gBAAgB,EAAE,CAAA,KAAA,CAAO;YACxE;AAEA,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC;AAEvC,YAAA,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE;gBACtC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,CAAA,MAAA,EAAS,aAAa,CAAA,qBAAA,CAAuB,CAAC;YACzE;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC;YAC/D,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,6BAA6B,CAAC;AACrD,YAAA,MAAM,KAAK;QACb;IACF;AAEO,IAAA,aAAa,iBAAiB,CAAc,MAAuB,EAAA;AACxE,QAAA,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE;QACvC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;AAEvD,QAAA,KAAK,MAAM,WAAW,IAAI,MAAM,EAAE;AAChC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,IAAI,QAAQ,CAAC;YACtE,MAAM,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC;YAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAElE,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;gBACtC,GAAG,EAAE,GAAG,CAAC,EAAE;AACX,gBAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE;AAC5B,gBAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,oBAAoB,CAAC,OAAO;AAChD,gBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE;AAC7C,aAAA,CAAC,CAAC;YAEH,aAAa,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC;AAC7D,YAAA,MAAM,YAAY,GAAG,YAAY,GAAG,CAAC;AACrC,YAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU;AACrC,YAAA,MAAM,YAAY,GAAG,aAAa,CAAC,oBAAoB,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC;YAEpG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAW,EAAE,QAAgB,KAAI;gBACzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAE5B,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAI;oBACpC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtC,oBAAA,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC;AACxF,oBAAA,IAAI,CAAC,KAAK,GAAG,SAA8B;AAC7C,gBAAA,CAAC,CAAC;gBAEF,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAkB,EAAE,SAAiB,KAAI;oBACrD,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;AAC5C,oBAAA,MAAM,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,CAAC;AAC9C,oBAAA,MAAM,OAAO,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,EAAE;AAE5C,oBAAA,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;wBAC5B;oBACF;oBAEA,IAAI,CAAC,IAAI,GAAG;AACV,wBAAA,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,IAAI;AACtC,wBAAA,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,IAAI;AACtC,wBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;qBACrB;AAED,oBAAA,IAAI,SAAS,CAAC,SAAS,EAAE;AACvB,wBAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC;wBAC7F,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC;oBACtD;oBAEA,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;AAC5C,wBAAA,MAAM,OAAO,GAAyB;AACpC,4BAAA,GAAG,EAAE,QAAQ;4BACb,QAAQ;4BACR,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,4BAAA,IAAI,EAAE,IAA6B;yBACpC;AACD,wBAAA,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;oBAC3B;AAEA,oBAAA,IAAI,SAAS,CAAC,KAAK,EAAE;wBACnB,IAAI,CAAC,SAAS,GAAG;4BACf,UAAU,EAAE,SAAS,CAAC,KAAK;AAC3B,4BAAA,QAAQ,EAAE,QAAQ;AAClB,4BAAA,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;yBAC1B;oBACH;AAEA,oBAAA,IAAI,SAAS,CAAC,IAAI,EAAE;AAClB,wBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC;wBACrE,IAAI,QAAQ,EAAE;AACZ,4BAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;wBACtB;oBACF;AAEA,oBAAA,IAAI,CAAC,MAAM,GAAG,mBAAmB;AACnC,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,YAAY,CAAC,OAAO,CAAC,MAAM,IAAG;AAC5B,gBAAA,IAAI;AACF,oBAAA,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;AAEhF,oBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAClE,oBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;wBACzB,UAAU,CAAC,SAAS,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC/C;AAEA,oBAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,wBAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACrD,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;wBAC9B;oBACF;gBACF;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC;gBAC/C;AACF,YAAA,CAAC,CAAC;AAEF,YAAA,aAAa,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC;QACtD;QAEA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;QAChD,OAAO,EAAE,MAAM,EAAE,MAAqB,EAAE,QAAQ,EAAE,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAO,EAAE;IACxE;IAEO,aAAa,uBAAuB,CAAC,SAAiB,EAAE,QAAQ,GAAG,QAAQ,EAAA;AAChF,QAAA,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC;QAElD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,SAAS,CAAA,WAAA,CAAa,CAAC;QAC7D;QAEA,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO;AAEvD,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;AAC7B,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;QAC/D;AAEA,QAAA,aAAa,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAyB,CAAC;AACpE,QAAA,aAAa,CAAC,0BAA0B,CAAC,KAAK,CAAC;QAE/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;QAChD,OAAO,EAAE,MAAM,EAAE,MAAqB,EAAE,QAAQ,EAAE,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAO,EAAE;IACxE;AAEQ,IAAA,MAAM,SAAS,CAAC,MAA0B,EAAE,OAA4B,EAAA;QAC9E,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAAE,GAAG,OAAO;AAEhE,QAAA,IAAI,aAAa,GAAG,MAAM,CAAC,QAAQ;QACnC,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,SAAS,GAAG,aAAa,CAAC,gBAAgB,EAAE;AAClD,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBAClD,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,KAAA,CAAO,CAAC;YACtE;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACrC,YAAA,IAAI,EAAE,mEAAmE;AAC1E,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;QAE3B,IAAI,gBAAgB,EAAE;YACpB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,CAAA,MAAA,EAAS,aAAa,CAAA,qBAAA,CAAuB,CAAC;QACzE;IACF;AAEQ,IAAA,2BAA2B,CAAI,MAAgC,EAAA;AACrE,QAAA,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,EAAE,EAAE,cAAc,GAAG,EAAE,EAAE,cAAc,EAAE,GAAG,MAAM;AAEzF,QAAA,MAAM,aAAa,GAAG,CAAC,GAA+B,KAAkC;YACtF,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACnC,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACpD,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,YAAY,GAAG,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC;YACxD,IAAI,UAAU,GAAG,EAAE;AAEnB,YAAA,UAAU,GAAG,GAAG,CAAC,EAAE;YAEnB,IAAI,cAAc,EAAE;AAClB,gBAAA,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC;YAClC;YAEA,IAAI,CAAC,cAAc,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,QAAQ,EAAE;AAC/D,gBAAA,UAAU,GAAG,YAAY,CAAC,OAAO;YACnC;YAEA,IAAI,CAAC,cAAc,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,UAAU,EAAE;AACjE,gBAAA,MAAM,MAAM,GAAI,YAAY,CAAC,OAAwB,EAAE;AACvD,gBAAA,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,GAAG,CAAC,EAAE;YAC3D;AAEA,YAAA,MAAM,QAAQ,GAA0B;gBACtC,EAAE,EAAE,GAAG,CAAC,EAAE;AACV,gBAAA,MAAM,EAAE,UAAU;gBAClB,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,CAAC,GAAM,KAAK,GAAG,CAAC,UAAW,CAAC,GAAG,CAAC,GAAG,SAAS;AACzE,gBAAA,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,YAAY,CAAC,KAAoB;AACxC,gBAAA,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI;aAC/D;YAED,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACnC;AAEA,YAAA,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,gBAAA,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;qBACpB,GAAG,CAAC,CAAC,QAAoC,KAAK,aAAa,CAAC,QAAQ,CAAC;qBACrE,MAAM,CAAC,CAAC,CAA+B,KAAiC,CAAC,KAAK,IAAI,CAAC;AAEtF,gBAAA,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnD,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACxE;YACF;AAEA,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC;AAED,QAAA,OAAO;aACJ,GAAG,CAAC,CAAC,GAA+B,KAAK,aAAa,CAAC,GAAG,CAAC;aAC3D,MAAM,CAAC,CAAC,CAA+B,KAAiC,CAAC,KAAK,IAAI,CAAC;IACxF;IAEQ,OAAO,eAAe,CAAI,OAAgC,EAAA;QAChE,MAAM,MAAM,GAA4B,EAAE;AAE1C,QAAA,MAAM,OAAO,GAAG,CAAC,IAA6B,KAAI;AAChD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,gBAAA,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE;oBACzB;gBACF;AAEA,gBAAA,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,oBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;oBACpB;gBACF;AAEA,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB;AACF,QAAA,CAAC;QAED,OAAO,CAAC,OAAO,CAAC;AAChB,QAAA,OAAO,MAAM;IACf;IAEQ,OAAO,sBAAsB,CAAI,OAAgC,EAAA;QACvE,MAAM,QAAQ,GAAG,CAAC,IAA6B,EAAE,YAAY,GAAG,CAAC,KAAY;YAC3E,IAAI,QAAQ,GAAG,YAAY;AAE3B,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,IAAI,eAAe,GAAG,YAAY;gBAElC,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE;oBAC9C,eAAe,GAAG,YAAY,GAAG,GAAG,CAAC,aAAa,GAAG,CAAC;gBACxD;AAEA,gBAAA,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzC,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,IAAI,CAAC,EAAE;AAChD,wBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,CAAC,CAAC;wBAC1D,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC;oBACzD;gBACF;gBAEA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC;YAChD;AAEA,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC;AAED,QAAA,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B;AAEQ,IAAA,OAAO,iBAAiB,CAC9B,KAAwB,EACxB,OAAgC,EAChC,SAAiB,EAAA;QAajB,MAAM,eAAe,GAAkC,EAAE;AAEzD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE;QACzB;QAEA,aAAa,CAAC,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC;AAE3E,QAAA,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU;QAE/C,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAI;YACxC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC5C,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AAE3E,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,UAA2B,KAAI;gBAChD,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,OAAO,EAAE;oBAChD;gBACF;gBAEA,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC;gBAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;AACxC,gBAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM;AAE9B,gBAAA,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE;AACpD,oBAAA,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC;oBAC7B,MAAM,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC;oBAChD,MAAM,QAAQ,GAAG,QAAQ;oBACzB,MAAM,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC;oBAChD,MAAM,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;oBAE9D,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACxC,wBAAA,IAAI;4BACF,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;AACpD,4BAAA,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC,4BAAA,UAAU,CAAC,WAAW,GAAG,IAAI;wBAC/B;wBAAE,OAAO,KAAK,EAAE;AACd,4BAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC;wBACtD;oBACF;gBACF;gBAEA,MAAM,YAAY,GAChB,QAAQ,KAAK,CAAC,GAAG,sBAAsB,CAAC,YAAY,CAAC,MAAM,GAAG,sBAAsB,CAAC,YAAY,CAAC,MAAM;gBAE1G,IAAI,CAAC,IAAI,GAAG;AACV,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;iBAChC;AAED,gBAAA,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC,UAAU;AAC7C,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC7D,gBAAA,IAAI,CAAC,MAAM,GAAG,mBAAmB;AAEjC,gBAAA,IAAI,UAAU,CAAC,YAAY,EAAE;AAC3B,oBAAA,UAAU,CAAC,YAAY,CAAC,IAA6B,CAAC;gBACxD;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,OAAO,qBAAqB,CAClC,OAAgC,EAChC,eASC,EACD,KAAa,EACb,SAAiB,EACjB,QAAQ,GAAG,CAAC,EAAA;QAEZ,IAAI,UAAU,GAAG,QAAQ;AAEzB,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACzB,YAAA,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE;gBACzB;YACF;AAEA,YAAA,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,MAAM,iBAAiB,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AAClE,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,IAAI,iBAAiB;AACtD,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC;AAEtC,gBAAA,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAC1B,oBAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE;oBAC5B,OAAO;oBACP,OAAO;oBACP,YAAY,EAAE,GAAG,CAAC,YAAY;AAC9B,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,CAAC;AACjC,iBAAA,CAAC;gBAEF,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE;oBAC9C,UAAU,IAAI,OAAO;oBACrB;gBACF;AAEA,gBAAA,aAAa,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC;gBAEnG,UAAU,IAAI,OAAO;gBACrB;YACF;AAEA,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC;YACtC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,IAAI,SAAS,GAAG,KAAK;AAEtD,YAAA,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAC1B,gBAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE;gBAC5B,OAAO;gBACP,OAAO;gBACP,YAAY,EAAE,GAAG,CAAC,YAAY;AAC9B,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,CAAC;AACjC,aAAA,CAAC;YAEF,UAAU,IAAI,OAAO;QACvB;AAEA,QAAA,OAAO,UAAU;IACnB;IAEQ,OAAO,aAAa,CAAI,OAAgC,EAAA;QAC9D,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACzB,YAAA,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE;gBACzB;YACF;AAEA,YAAA,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,KAAK,IAAI,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;gBACjD;YACF;AACA,YAAA,KAAK,EAAE;QACT;AACA,QAAA,OAAO,KAAK;IACd;IAEQ,OAAO,aAAa,CAAI,GAA0B,EAAE,GAAM,EAAE,QAAgB,EAAE,IAAS,EAAA;AAC7F,QAAA,IAAI,GAAG,CAAC,UAAU,EAAE;YAClB,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC;QAC5C;AACA,QAAA,IAAI,GAAG,CAAC,WAAW,EAAE;AACnB,YAAA,OAAQ,GAA+B,CAAC,GAAG,CAAC,WAAW,CAAC;QAC1D;AACA,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,OAAO,oBAAoB,CACjC,WAAoC,EACpC,IAAS,EACT,YAAoB,EAAA;QAQpB,MAAM,YAAY,GAMb,EAAE;AACP,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;QAE9B,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,QAAQ,KAAI;AAC1C,YAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC;YAE9B,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE;gBAC1C,IAAI,iBAAiB,GAAG,CAAC;AAEzB,gBAAA,OAAO,iBAAiB,GAAG,UAAU,EAAE;AACrC,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAE3C,oBAAA,MAAM,OAAO,GACX,OAAO,SAAS,CAAC,OAAO,KAAK;0BACzB,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,EAAE,IAAI;AACxD,0BAAE,SAAS,CAAC,OAAO,IAAI,CAAC;AAC5B,oBAAA,MAAM,OAAO,GACX,OAAO,SAAS,CAAC,OAAO,KAAK;0BACzB,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAiB,EAAE,IAAI;AACxD,0BAAE,SAAS,CAAC,OAAO,IAAI,CAAC;AAE5B,oBAAA,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC;AAC9B,oBAAA,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC;AAE9B,oBAAA,IAAI,UAAU,IAAI,UAAU,EAAE;AAC5B,wBAAA,MAAM,QAAQ,GAAG,YAAY,GAAG,iBAAiB;wBACjD,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,GAAG,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,QAAQ;wBACtG,MAAM,QAAQ,GAAG,SAAS;AAC1B,wBAAA,MAAM,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,CAAC,GAAG,SAAS;AAE/D,wBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,MAAM,GAAG,QAAQ,KAAK,MAAM,GAAG,YAAY,GAAG,UAAU,EAAE;4BAClF,YAAY,CAAC,IAAI,CAAC;gCAChB,QAAQ;gCACR,QAAQ;gCACR,MAAM;gCACN,MAAM;AACN,gCAAA,cAAc,EAAE,iBAAiB;AAClC,6BAAA,CAAC;wBACJ;oBACF;oBAEA,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;gBAC3C;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,YAAY;IACrB;AAEQ,IAAA,OAAO,kBAAkB,CAAI,KAAwB,EAAE,WAAoC,EAAA;QACjG,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AACjC,YAAA,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;YAEzC,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;gBAC7B,IAAI,QAAQ,GAAG,CAAC;AAEhB,gBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,GAAgB,KAAI;oBACjC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AACnC,oBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,wBAAA,MAAM,SAAS,GACb,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAC3D,aAAa,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC;wBACtD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;oBAC1C;AACF,gBAAA,CAAC,CAAC;gBAEF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC5G,gBAAA,MAAM,CAAC,KAAK,GAAG,eAAe;YAChC;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,OAAO,0BAA0B,CAAC,KAAwB,EAAA;AAChE,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK;AAE7B,QAAA,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,IAAI,WAAW,EAAE,SAAS,EAAE,EAAE;YAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;YACzC,IAAI,QAAQ,GAAG,CAAC;AAEhB,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,GAAgB,KAAI;gBACjC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AACnC,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,MAAM,SAAS,GACb,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC3D,aAAa,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC;oBACtD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC1C;AACF,YAAA,CAAC,CAAC;YAEF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,oBAAoB,CAAC,QAAQ,EAC7B,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,CAC5D;AACD,YAAA,MAAM,CAAC,KAAK,GAAG,eAAe;QAChC;IACF;AAEQ,IAAA,OAAO,oBAAoB,CAAC,KAAwB,EAAE,GAAgB,EAAE,IAAkB,EAAA;AAChG,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,OAAO,CAAC;QACV;QAEA,IAAI,OAAO,GAAG,CAAC;AACf,QAAA,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,IAAI,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE;YACnE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AACzC,YAAA,IAAI,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACpF,gBAAA,OAAO,EAAE;YACX;QACF;QAEA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;IAC7B;AAEQ,IAAA,OAAO,mBAAmB,CAAC,IAAkB,EAAE,IAAY,EAAA;AACjE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI;AAChE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK;AAErC,QAAA,MAAM,kBAAkB,GAAG,QAAQ,GAAG,EAAE;QACxC,MAAM,cAAc,GAAG,wBAAwB,CAAC,UAAU,CAAC,IAAI,GAAG;QAElE,IAAI,aAAa,GAAG,CAAC;AACrB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACvB,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,GAAG;YACrD,aAAa,IAAI,SAAS;QAC5B;AAEA,QAAA,aAAa,IAAI,kBAAkB,GAAG,cAAc;QAEpD,IAAI,MAAM,EAAE;YACV,aAAa,IAAI,GAAG;QACtB;QACA,IAAI,QAAQ,EAAE;YACZ,aAAa,IAAI,IAAI;QACvB;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;IACvC;AAEQ,IAAA,OAAO,oBAAoB,CAAC,KAAwB,EAAE,KAAuB,EAAA;QACnF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACnC,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU;QAErC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAI;YAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACnC,IAAI,SAAS,GAAG,CAAC;YAEjB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,KAAI;gBAChC,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACnD,gBAAA,IAAI,aAAa,CAAC,OAAO,KAAK,MAAM,IAAI,aAAa,CAAC,UAAU,KAAK,QAAQ,EAAE;oBAC7E;gBACF;AAEA,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACzC,gBAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzC;gBACF;AAEA,gBAAA,OAAO,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,QAAQ,GAAG,CAAC,CAAA,CAAA,EAAI,SAAS,GAAG,SAAS,GAAG,CAAC,CAAA,CAAE,CAAC,EAAE;AACtE,oBAAA,SAAS,EAAE;gBACb;gBAEA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC3C,gBAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS;gBACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAEhD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;gBAClD,SAAS,CAAC,KAAK,GAAG,aAAa,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAE/D,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACnB,oBAAA,SAAS,CAAC,IAAI,GAAG,sBAAsB,CAAC,IAAI;gBAC9C;AAEA,gBAAA,aAAa,CAAC,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC;AAEvD,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;AAC7D,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;gBAE7D,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE;AAC9B,oBAAA,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC;AAC7B,oBAAA,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC;AAC7B,oBAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,CAAC;AACrC,oBAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,CAAC;oBAErC,MAAM,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;oBAC9D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;wBAC9B,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;AACpD,wBAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;AAEzB,wBAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,4BAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;gCACvC,WAAW,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;4BAC9B;wBACF;oBACF;gBACF;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,OAAO,kBAAkB,CAAC,OAAe,EAAA;QAC/C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACrC,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE;AAErC,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;AAC1C,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;AACtC,gBAAA,OAAO,MAAM;YACf;QACF;AAEA,QAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAClD,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACtC,OAAO,MAAM,GAAG,GAAG;YACrB;QACF;AAEA,QAAA,OAAO,cAAc;IACvB;AAEQ,IAAA,OAAO,wBAAwB,CAAC,SAAuB,EAAE,QAA8B,EAAA;QAC7F,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAEvD,SAAS,CAAC,IAAI,GAAG;AACf,YAAA,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,IAAI;AACtC,YAAA,IAAI,EAAE,aAAa,CAAC,UAAU,KAAK,MAAM,IAAI,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,GAAG;AACtF,YAAA,MAAM,EAAE,aAAa,CAAC,SAAS,KAAK,QAAQ;AAC5C,YAAA,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI;YAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;SAC1D;QAED,IAAI,aAAa,CAAC,eAAe,IAAI,aAAa,CAAC,eAAe,KAAK,kBAAkB,EAAE;YACzF,SAAS,CAAC,IAAI,GAAG;AACf,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE;aACtE;QACH;QAEA,SAAS,CAAC,SAAS,GAAG;YACpB,UAAU,EAAE,aAAa,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC;YACrE,QAAQ,EAAE,aAAa,CAAC,0BAA0B,CAAC,aAAa,CAAC,aAAa,CAAC;SAChF;AAED,QAAA,SAAS,CAAC,MAAM,GAAG,mBAAmB;IACxC;IAEQ,OAAO,kBAAkB,CAAC,SAAiB,EAAA;QACjD,QAAQ,SAAS;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,OAAO;AAChB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,MAAM;AACf,YAAA;AACE,gBAAA,OAAO,SAAS;;IAEtB;IAEQ,OAAO,0BAA0B,CAAC,aAAqB,EAAA;QAC7D,QAAQ,aAAa;AACnB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,KAAK;AACd,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ;AACjB,YAAA;AACE,gBAAA,OAAO,QAAQ;;IAErB;AAEQ,IAAA,OAAO,gBAAgB,GAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE;AAC9B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACzD,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAClD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACrD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACzD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACzD,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,OAAO,CAAA,EAAG,OAAO,EAAE;IAC7D;uGAz1BW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCZY,eAAe,CAAA;IAClB,GAAG,GAAuB,IAAI;AAC9B,IAAA,OAAO;IACP,aAAa,GAAkB,IAAI;AACnC,IAAA,QAAQ;AACR,IAAA,KAAK;AACL,IAAA,QAAQ;AACR,IAAA,OAAO,GAAqC,IAAI,GAAG,EAAE;AACrD,IAAA,iBAAiB;AACjB,IAAA,oBAAoB;IACpB,QAAQ,GAAG,IAAI;AAEvB,IAAA,WAAA,CAAmB,SAAyB,EAAE,EAAA;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,wBAAwB,CAAC,MAAM;AACnE,QAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,CAAC;AACnD,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY,KAAK,UAAU,GAAG,IAAI,GAAG,UAAU;QACpE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,wBAAwB,CAAC,OAAO;QAClE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,wBAAwB,CAAC,IAAI;QACzD,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,YAAY,IAAI,wBAAwB,CAAC,YAAY;QACrF,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE;QACtD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI;AAEtC,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE;YACzB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrE;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5E;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;IAChC;AAEQ,IAAA,eAAe,CAAC,SAAkB,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,iBAAiB;AAChD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;IAC3C;AAEA;;;;;AAKG;IACK,cAAc,CAAC,WAAgC,EAAE,cAAwB,EAAA;AAC/E,QAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAChC,YAAA,OAAO,cAAc;QACvB;AACA,QAAA,OAAO,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ;IAC7C;AAEQ,IAAA,mBAAmB,CAAC,GAAW,EAAA;AACrC,QAAA,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;IACjC;AAEQ,IAAA,aAAa,CAAC,GAAW,EAAA;QAC/B,OAAO,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC5D;AAEQ,IAAA,2BAA2B,CAAC,GAAW,EAAA;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QACzC,OAAO,SAAS,KAAK,SAAS,GAAG,IAAI,GAAG,SAAS;IACnD;IAEQ,iBAAiB,CAAC,GAAW,EAAE,OAAgB,EAAA;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC;AACvD,QAAA,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAEpE,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,WAAW;QACpB;AAEA,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzD;AAEQ,IAAA,YAAY,CAAC,IAAa,EAAA;AAChC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,GAAG,EAAE,IAAI;YACT,GAAG,EAAE,OAAO,IAAI;AAChB,YAAA,GAAG,EAAE,IAAI;SACV;AACD,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D;AAEQ,IAAA,YAAY,CAAI,IAAY,EAAA;AAClC,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAChB,gBAAA,OAAO,IAAI;YACb;YACA,OAAO,OAAO,CAAC,GAAQ;QACzB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAChB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QACjB;IACF;AAEQ,IAAA,MAAM,UAAU,GAAA;QACtB,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,MAAM,IAAI,CAAC,QAAQ;IACrB;AAEQ,IAAA,MAAM,UAAU,CAAI,SAA2B,EAAE,OAAO,GAAG,CAAC,EAAA;AAClE,QAAA,IAAI,SAAkB;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AAChC,YAAA,IAAI;gBACF,OAAO,MAAM,SAAS,EAAE;YAC1B;YAAE,OAAO,KAAK,EAAE;gBACd,SAAS,GAAG,KAAK;gBACjB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE;AAChE,oBAAA,MAAM,IAAI,CAAC,UAAU,EAAE;gBACzB;gBACA,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACzE;QACF;AAEA,QAAA,MAAM,SAAS;IACjB;AAEQ,IAAA,MAAM,OAAO,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,0BAA0B,EAAE;AACvC,QAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE;AACxD,QAAA,IAAI,cAAc,IAAI,qBAAqB,EAAE;AAC3C,YAAA,MAAM,IAAI,CAAC,cAAc,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;QACnB;QACA,IAAI,cAAc,GAAG,IAAI,CAAC,QAAQ,IAAI,cAAc,GAAG,qBAAqB,EAAE;AAC5E,YAAA,IAAI,CAAC,QAAQ,GAAG,cAAc;QAChC;QAEA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI;AACF,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;AAE3D,gBAAA,OAAO,CAAC,eAAe,GAAG,KAAK,IAAG;AAChC,oBAAA,MAAM,EAAE,GAAI,KAAK,CAAC,MAA2B,CAAC,MAAM;oBACpD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC;AACtD,oBAAA,cAAc,CAAC,OAAO,CAAC,SAAS,IAAG;wBACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAChC,4BAAA,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;wBACjC;AACF,oBAAA,CAAC,CAAC;oBACF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,KAAI;wBACpC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC5C,4BAAA,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;wBACjC;AACF,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC;AAED,gBAAA,OAAO,CAAC,SAAS,GAAG,KAAK,IAAG;oBAC1B,IAAI,CAAC,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,MAAM;oBACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;oBAChC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAG,CAAC,CAAC,MAAqB,CAAC,KAAK,CAAC;AAC1F,oBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,MAAK;AACtB,wBAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACjB,oBAAA,CAAC;AAED,oBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9C,oBAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,wBAAA,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;wBAClD;oBACF;AAEA,oBAAA,OAAO,EAAE;AACX,gBAAA,CAAC;AAED,gBAAA,OAAO,CAAC,OAAO,GAAG,KAAK,IAAG;oBACxB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAG,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;AACjF,oBAAA,MAAM,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;AAClD,gBAAA,CAAC;YACH;YAAE,OAAO,KAAK,EAAE;gBACd,MAAM,CAAC,KAAK,CAAC;YACf;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,0BAA0B,GAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB;QACF;QAEA,MAAM,oBAAoB,GAAG,OAAQ,SAAkD,CAAC,SAAS,KAAK,UAAU;QAChH,IAAI,CAAC,oBAAoB,EAAE;YACzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;AAClE,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE;gBACxB;YACF;YAEA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxE,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;gBACzB;YACF;AAEA,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa;AACjC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC;AAC3D,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YACzB;QACF;QAEA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,aAAa,GAAG,CAAC,EAAE;YACrB;QACF;QAEA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC;AAC1E,QAAA,IAAI,aAAa,IAAI,CAAC,EAAE;YACtB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC3B;AAEQ,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAC1C,QAAA,MAAM,YAAY,GAChB,SAGD,CAAC,SAAS;QAEX,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3B;AAEA,QAAA,OAAO;aACJ,IAAI,CAAC,SAAS;aACd,IAAI,CAAC,SAAS,IAAG;AAChB,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC;AACtE,YAAA,OAAO,OAAO,SAAS,EAAE,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC,OAAO,GAAG,CAAC;AACvE,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,MAAM,CAAC,CAAC;IACnB;AAEQ,IAAA,sBAAsB,CAAC,MAAc,EAAA;AAC3C,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;AAC3B,YAAA,IAAI;gBACF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,gBAAA,OAAO,CAAC,SAAS,GAAG,KAAK,IAAG;AAC1B,oBAAA,MAAM,EAAE,GAAI,KAAK,CAAC,MAA2B,CAAC,MAAM;AACpD,oBAAA,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;oBACtB,MAAM,SAAS,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;oBAChD,EAAE,CAAC,KAAK,EAAE;AAEV,oBAAA,IAAI,SAAS,IAAI,OAAO,GAAG,CAAC,EAAE;AAC5B,wBAAA,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;wBAC/B;oBACF;AAEA,oBAAA,IAAI;wBACF,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC;AACtD,wBAAA,aAAa,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACzE,wBAAA,aAAa,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACvE,wBAAA,aAAa,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC3E;AAAE,oBAAA,MAAM;wBACN,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC3C;AACF,gBAAA,CAAC;AACD,gBAAA,OAAO,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACnE;AAAE,YAAA,MAAM;gBACN,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;AAC7D,YAAA,IAAI,OAAO,GAAG,CAAC,EAAE;AACf,gBAAA,OAAO,OAAO;YAChB;AAEA,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAClH,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,eAAe,GAAA;QAC3B,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,IAAI,qBAAqB;QACpE,IAAI,qBAAqB,EAAE;AACzB,YAAA,MAAM,IAAI,CAAC,cAAc,EAAE;QAC7B;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,qBAAqB,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC;AAC7D,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,MAAM,IAAI,CAAC,QAAQ;IACrB;AAEQ,IAAA,MAAM,cAAc,GAAA;QAC1B,IAAI,CAAC,gBAAgB,EAAE;QACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5D,aAAa,CAAC,SAAS,GAAG,MAAM,OAAO,EAAE;AACzC,YAAA,aAAa,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;AACzD,YAAA,aAAa,CAAC,SAAS,GAAG,MAAK;gBAC7B,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC;AAC1E,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,YAAA,OAAO,EAAE;QACX;AACA,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC5D,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACtD,QAAA,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxE;AAEQ,IAAA,kBAAkB,CAAC,SAAiB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,YAAA,OAAO,KAAK;QACd;QACA,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC;IACtD;AAEO,IAAA,MAAM,GAAG,CAAI,GAAW,EAAE,OAA+B,EAAA;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC;AAC5D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC;AACxE,QAAA,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY;AAE1C,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAW;YAChC,MAAM,IAAI,CAAC,QAAQ;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,gBAAA,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,oBAAA,OAAO,YAAY;gBACrB;YACF;YAEA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC9C,gBAAA,MAAM,IAAI,CAAC,eAAe,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC9C,oBAAA,OAAO,YAAY;gBACrB;YACF;YAEA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC;AAC9D,YAAA,OAAO,IAAI,OAAO,CAAgB,OAAO,IAAG;AAC1C,gBAAA,IAAI;AACF,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;oBACzE,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;oBACvD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAEzC,oBAAA,OAAO,CAAC,SAAS,GAAG,MAAK;AACvB,wBAAA,MAAM,WAAW,GAAG,CAAC,QAAiB,KAAU;AAC9C,4BAAA,IAAI;gCACF,IAAI,CAAC,QAAQ,EAAE;oCACb,OAAO,CAAC,YAAY,CAAC;oCACrB;gCACF;AAEA,gCAAA,MAAM,SAAS,GAAG,aAAa,GAAG,IAAI,CAAC,YAAY,CAAI,QAAkB,CAAC,GAAI,QAAc;AAC5F,gCAAA,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC;4BACpC;AAAE,4BAAA,MAAM;gCACN,OAAO,CAAC,YAAY,CAAC;4BACvB;AACF,wBAAA,CAAC;AAED,wBAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,4BAAA,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;4BAC3B;wBACF;AAEA,wBAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC1B,OAAO,CAAC,YAAY,CAAC;4BACrB;wBACF;wBAEA,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC/C,wBAAA,aAAa,CAAC,SAAS,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC;wBACjE,aAAa,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;AACrD,oBAAA,CAAC;oBAED,OAAO,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;oBAC7C,WAAW,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;gBACnD;AAAE,gBAAA,MAAM;oBACN,OAAO,CAAC,YAAY,CAAC;gBACvB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,MAAM,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,OAA4B,EAAA;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC;AAC5D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC;AAExE,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAW;YAChC,MAAM,IAAI,CAAC,QAAQ;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,gBAAA,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,oBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;gBAC7C;YACF;YAEA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC9C,gBAAA,MAAM,IAAI,CAAC,eAAe,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;oBAC9C,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,WAAW,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;gBACjE;YACF;YAEA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC;AAC9D,YAAA,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;AAC3B,YAAA,MAAM,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK;YAE/D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,gBAAA,IAAI;AACF,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;oBAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;oBACvD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AACvC,oBAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC1B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC9B;AAEA,oBAAA,OAAO,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;oBAC7C,WAAW,CAAC,UAAU,GAAG,MAAM,OAAO,EAAE;AACxC,oBAAA,WAAW,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;gBACvD;gBAAE,OAAO,KAAK,EAAE;oBACd,MAAM,CAAC,KAAK,CAAC;gBACf;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;AACI,IAAA,MAAM,MAAM,CAAC,GAAsB,EAAE,SAAkB,EAAA;AAC5D,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACrF;QACF;QACA,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC;IAC7C;AAEQ,IAAA,MAAM,gBAAgB,CAAC,GAAsB,EAAE,SAAiB,EAAA;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACnD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAW;YAChC,MAAM,IAAI,CAAC,QAAQ;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,gBAAA,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,oBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;gBAC7C;YACF;YAEA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;gBAC9C;YACF;AAEA,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YAC7C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,gBAAA,IAAI;AACF,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;oBAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;AACvD,oBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;wBACf,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC;wBAClD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC;AAErD,wBAAA,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7C,wBAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnD,oBAAA,CAAC,CAAC;oBAEF,WAAW,CAAC,UAAU,GAAG,MAAM,OAAO,EAAE;AACxC,oBAAA,WAAW,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;gBACvD;gBAAE,OAAO,KAAK,EAAE;oBACd,MAAM,CAAC,KAAK,CAAC;gBACf;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEO,MAAM,KAAK,CAAC,SAAkB,EAAA;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACnD,QAAA,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,IAAI,WAAW,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;AAE1F,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAW;YAChC,MAAM,IAAI,CAAC,QAAQ;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,gBAAA,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,oBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;gBAC7C;YACF;YAEA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;gBAC9C;YACF;AAEA,YAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9B,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;oBAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;AACvD,oBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE;oBAE7B,OAAO,CAAC,SAAS,GAAG,MAAM,OAAO,EAAE;AACnC,oBAAA,OAAO,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/C,gBAAA,CAAC,CAAC;YACJ;YAEA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,gBAAA,IAAI;AACF,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;oBAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;AACvD,oBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE;AAErC,oBAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU;AACtC,oBAAA,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU;AAC9C,oBAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAG;wBACxB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC;wBAClD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC;AACrD,wBAAA,SAAS,CAAC,OAAO,CAAC,IAAI,IAAG;AACvB,4BAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,4BAAA,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,wBAAA,CAAC,CAAC;AACF,wBAAA,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvD,oBAAA,CAAC,CAAC;AAEF,oBAAA,UAAU,CAAC,SAAS,GAAG,MAAK;AAC1B,wBAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAkB;AAC7C,wBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;4BAClB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gCACxB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAS,CAAC,CAAC;gCAC9C,IAAI,CAAC,SAAS,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACtD,oCAAA,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gCACjB;4BACF;AACF,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC;AAED,oBAAA,UAAU,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;oBACnD,WAAW,CAAC,UAAU,GAAG,MAAM,OAAO,EAAE;AACxC,oBAAA,WAAW,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;gBACvD;gBAAE,OAAO,KAAK,EAAE;oBACd,MAAM,CAAC,KAAK,CAAC;gBACf;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEO,MAAM,MAAM,CAAc,SAAkB,EAAA;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACnD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAW;YAChC,MAAM,IAAI,CAAC,QAAQ;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,gBAAA,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,oBAAA,OAAO,EAAE;gBACX;YACF;YAEA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC9C,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,OAAO,IAAI,OAAO,CAAoB,OAAO,IAAG;AAC9C,gBAAA,IAAI;AACF,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;oBACzE,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;AACvD,oBAAA,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE;AACtC,oBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE;oBACpC,MAAM,OAAO,GAAsB,EAAE;AAErC,oBAAA,WAAW,CAAC,SAAS,GAAG,MAAK;AAC3B,wBAAA,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM;AAC/B,wBAAA,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM;wBAEnC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC1B,4BAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,gCAAA,IAAI;oCACF,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,YAAY,CAAS,GAAG,CAAC,GAAG,GAAG;oCACpF,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,YAAY,CAAI,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AACrG,oCAAA,IAAI,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;wCAC3B,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM;oCAC9C;gCACF;AAAE,gCAAA,MAAM;AACN,oCAAA,OAAO,CAAC,IAAI,CAAC,+CAA+C,GAAG,CAAA,CAAE,CAAC;gCACpE;4BACF;AACF,wBAAA,CAAC,CAAC;wBAEF,OAAO,CAAC,OAAO,CAAC;AAClB,oBAAA,CAAC;oBAED,WAAW,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC;oBACvC,WAAW,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC;gBACzC;AAAE,gBAAA,MAAM;oBACN,OAAO,CAAC,EAAE,CAAC;gBACb;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,MAAM,WAAW,CAAI,KAAwB,EAAE,OAA4B,EAAA;QAChF,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC;AAC5D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC;QACxE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAErC,MAAM,IAAI,CAAC,QAAQ;AACnB,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC1D,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE;QAC9B;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,oBAAoB,EAAE;AAC7D,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC;AACxD,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,YAAW;gBAC/B,MAAM,IAAI,CAAC,QAAQ;AACnB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,oBAAA,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,wBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;oBAC7C;gBACF;gBAEA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;oBAC9C,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,WAAW,CAAC,IAAI,CAAA,gBAAA,CAAkB,CAAC;gBAC/D;gBAEA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;oBAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;oBAEvD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;wBAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC;AAC9D,wBAAA,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;AAC3B,wBAAA,MAAM,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK;AAC/D,wBAAA,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AACvB,wBAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC1B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;wBAC9B;AACF,oBAAA,CAAC,CAAC;oBAEF,WAAW,CAAC,UAAU,GAAG,MAAM,OAAO,EAAE;AACxC,oBAAA,WAAW,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACvD,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;IACF;IAEO,aAAa,GAAA;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACxC;AAEO,IAAA,QAAQ,CAAC,SAAiB,EAAA;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACpC;IAEO,MAAM,QAAQ,CAAC,MAA2B,EAAA;QAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACjC;QACF;QAEA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;AACrC,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;AAEO,IAAA,MAAM,QAAQ,GAAA;AACnB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACvE;AACD;;MCxqBY,cAAc,GAAG,IAAI,cAAc,CAAe,gBAAgB;AACxE,MAAM,eAAe,GAAe;AAE3C;AACO,MAAM,6BAA6B,GAAG;AAQtC,MAAM,eAAe,GAA+B;AACzD,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,KAAK,EAAE,6BAA6B;AACpC,IAAA,MAAM,EAAE,8BAA8B;AACtC,IAAA,MAAM,EAAE,8BAA8B;AACtC,IAAA,KAAK,EAAE,6BAA6B;AACpC,IAAA,IAAI,EAAE,4BAA4B;AAClC,IAAA,IAAI,EAAE,4BAA4B;AAClC,IAAA,KAAK,EAAE,6BAA6B;AACpC,IAAA,QAAQ,EAAE,gCAAgC;;;ACfrC,MAAM,gBAAgB,GAAG;;MCLnB,iBAAiB,CAAA;AACX,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACrC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC,IAAA,WAAW,GAAG,MAAM,CAAS,IAAI,uDAAC;IAClC,cAAc,GAAG,MAAM,CAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE/D,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,WAAW,EAAE;IACpB;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,aAAa,CAAC,GAAG,CAAS,gBAAgB,CAAC,IAAI,IAAI;AAC3G,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;QACjC,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AACxF,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBACf;YACF;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,aAAa,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC;AACzC,QAAA,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI;IACtC;IAEQ,mBAAmB,GAAA;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AACxC,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACrC;IACF;AAEO,IAAA,GAAG,CAAC,IAAY,EAAA;QACrB,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;YACxC;QACF;AAEA,QAAA,KAAK,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;;AAE1D,QAAA,CAAC,CAAC;IACJ;IAEO,OAAO,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC3B;IAEO,SAAS,GAAA;QACd,OAAO,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO;IACxD;IAEO,MAAM,GAAA;AACX,QAAA,OAAO,QAAQ,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC;IACxE;IAEO,OAAO,CAAC,GAAW,EAAE,MAAgC,EAAA;QAC1D,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;IAC7C;AAEA;;;;;;;;;;;;AAYG;IACI,SAAS,CAAC,GAAW,EAAE,MAAgC,EAAA;QAC5D,OAAO,QAAQ,CAAC,MAAK;YACnB,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;AAClC,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,MAAM,GAAG,CAAC,GAAW,EAAE,MAAgC,EAAA;QAC5D,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzD;IAEO,IAAI,CAAC,GAAW,EAAE,MAAgC,EAAA;QACvD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;IACzC;IAEO,OAAO,CAAC,GAAW,EAAE,MAAgC,EAAA;QAC1D,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;IAC5C;AAEO,IAAA,MAAM,OAAO,CAAC,IAAc,EAAE,MAAgC,EAAA;QACnE,MAAM,OAAO,GAA2B,EAAE;AAC1C,QAAA,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,GAAG,CAAC,OAAM,GAAG,KAAG;AACnB,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;QAC5C,CAAC,CAAC,CACH;AAED,QAAA,OAAO,OAAO;IAChB;AAEO,IAAA,GAAG,CAAC,GAAW,EAAA;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;QAChD,OAAO,WAAW,KAAK,GAAG;IAC5B;AAEO,IAAA,cAAc,CAAC,IAAY,EAAE,YAA+B,EAAE,WAAW,GAAG,IAAI,EAAA;QACrF,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC;QAC/D,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEO,eAAe,GAAA;QACpB,OAAO,IAAI,CAAC,UAAU;IACxB;uGAjIW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACMM,MAAM,qBAAqB,GAA0B;AAC1D,IAAA,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;AAC/B,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,iBAAiB,EAAE,MAAM;;MAIL,oBAAoB,CAAA;AACrB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACvB,YAAY,GAAG,aAAa;AAC5B,IAAA,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC5C,IAAA,cAAc;IAEzB,WAAW,GAAiC,IAAI;IAChD,aAAa,GAA6B,IAAI;AAEtD,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,eAAe,CAAC;AACxC,YAAA,MAAM,EAAE,YAAY;AACpB,YAAA,YAAY,EAAE,YAAY;YAC1B,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChD,SAAA,CAAC;IACJ;AAEA;;;;;;;;;;;AAWG;IACO,aAAa,GAAA;AACrB,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAc,MAAM,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;QAC1E;QAEA,OAAO,IAAI,CAAC,WAAW;IACzB;IAIU,GAAG,CACX,QAAgB,EAChB,OAAyC,EAAA;QAEzC,MAAM,QAAQ,GAAG,MAAoB;AACnC,YAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AACvD,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC3E,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA,EAAG,QAAQ,EAAE;YAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,WAAW,CAAkB;AAC5D,QAAA,CAAC;AAED,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;IACxE;AAEU,IAAA,IAAI,CACZ,QAAgB,EAChB,IAAa,EACb,OAAyC,EAAA;QAEzC,MAAM,QAAQ,GAAG,MAAoB;AACnC,YAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;AAC5E,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;AACnE,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA,EAAG,QAAQ,EAAE;AAC7D,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,GAAG,EAAE,eAAe,EAAE,WAAW,CAAkB;AAC9E,QAAA,CAAC;AAED,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;IAC/E;AAEU,IAAA,GAAG,CACX,QAAgB,EAChB,IAAa,EACb,OAAyC,EAAA;QAEzC,MAAM,QAAQ,GAAG,MAAoB;AACnC,YAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;AAC5E,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;AACnE,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA,EAAG,QAAQ,EAAE;AAC7D,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,eAAe,EAAE,WAAW,CAAkB;AAC7E,QAAA,CAAC;AAED,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;IAC9E;AAEU,IAAA,KAAK,CACb,QAAgB,EAChB,IAAa,EACb,OAAyC,EAAA;QAEzC,MAAM,QAAQ,GAAG,MAAoB;AACnC,YAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;AAC5E,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;AACnE,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA,EAAG,QAAQ,EAAE;AAC7D,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAI,GAAG,EAAE,eAAe,EAAE,WAAW,CAAkB;AAC/E,QAAA,CAAC;AAED,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;IAChF;AAEU,IAAA,MAAM,CACd,QAAgB,EAChB,IAAc,EACd,OAAyC,EAAA;QAEzC,MAAM,QAAQ,GAAG,MAAoB;AACnC,YAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;AAC5E,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACzC,gBAAA,GAAG,OAAO;gBACV,OAAO;AACP,gBAAA,IAAI,EAAE,eAAe;AACtB,aAAA,CAAC;AACF,YAAA,IAAI,eAAe,IAAI,WAAW,EAAE;AAClC,gBAAA,OAAO,WAAW,CAAC,eAAe,CAAC;YACrC;AACA,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA,EAAG,QAAQ,EAAE;YAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAI,GAAG,EAAE,WAAW,CAAkB;AAC/D,QAAA,CAAC;AAED,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;IACjF;IAEQ,aAAa,CACnB,OAAwC,EACxC,IAAc,EAAA;AAEd,QAAA,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC;AACjE,QAAA,MAAM,WAAW,GAAqB,OAAO,EAAE,WAAW,IAAI,MAAM;QACpE,IAAI,SAAS,GAAG,IAAI;AACpB,QAAA,IAAI,MAA0C;AAE9C,QAAA,IAAI,WAAW,KAAK,MAAM,EAAE;YAC1B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;YACzD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;AACvC,gBAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClC;QACF;AAEA,QAAA,IAAI,WAAW,KAAK,YAAY,EAAE;YAChC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC;AAC1E,YAAA,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACpC,gBAAA,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE;AACvC,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;oBAC5C,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC,gBAAA,CAAC,CAAC;AACF,gBAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE;YAClC;QACF;AAEA,QAAA,IAAI,WAAW,KAAK,WAAW,EAAE;AAC/B,YAAA,IAAI,IAAI,YAAY,QAAQ,EAAE;gBAC5B,SAAS,GAAG,IAAI;YAClB;AACA,YAAA,IAAI,EAAE,IAAI,YAAY,QAAQ,CAAC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACnE,gBAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC5C,oBAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAsB,CAAC;AAC9C,gBAAA,CAAC,CAAC;gBACF,SAAS,GAAG,QAAQ;YACtB;QACF;AAEA,QAAA,IAAI,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO,CAAC,OAAO,YAAY,WAAW,CAAC,EAAE;AACjE,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,OAA4C;YACvE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AACpC,gBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC;gBAC7B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC5E,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACjE,QAAA,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;YAChC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAC;QAC3D;QAEA,IAAI,OAAO,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,MAAM,YAAY,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,EAAE;AACtG,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAiC;YAC3D,MAAM,GAAG,EAAE;YACX,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AACnC,gBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC;gBAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;oBACzC,MAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC9B;AACF,YAAA,CAAC,CAAC;QACJ;QAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE;IAC7C;AAEQ,IAAA,iBAAiB,CAAC,OAAwC,EAAA;AAChE,QAAA,MAAM,WAAW,GAA4B,EAAE,GAAG,OAAO,EAAE;AAC3D,QAAA,OAAO,WAAW,CAAC,aAAa,CAAC;AACjC,QAAA,OAAO,WAAW,CAAC,UAAU,CAAC;AAC9B,QAAA,OAAO,WAAW,CAAC,WAAW,CAAC;AAC/B,QAAA,OAAO,WAAW,CAAC,aAAa,CAAC;AACjC,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC;AACzB,QAAA,OAAO,WAAW,CAAC,WAAW,CAAC;AAC/B,QAAA,OAAO,WAAW,CAAC,gBAAgB,CAAC;AACpC,QAAA,OAAO,WAAW;IACpB;IAEQ,sBAAsB,CAC5B,MAAc,EACd,QAAgB,EAChB,QAA6B,EAC7B,OAAwC,EACxC,IAAc,EAAA;AAEd,QAAA,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;QACzE;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAEvE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAChD,SAAS,CAAC,UAAU,IAAG;AACrB,YAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,gBAAA,OAAO,EAAE,CAAC,UAAU,CAAC;YACvB;AACA,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;QACzE,CAAC,CAAC,EACF,UAAU,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CACnF;IACH;IAEQ,gBAAgB,CACtB,QAA6B,EAC7B,OAAwC,EACxC,MAAe,EACf,QAAiB,EACjB,IAAc,EAAA;QAEd,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CACrC,SAAS,CAAC,QAAQ,IAAG;YACnB,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,MAAM,KAAK,GAAyB;oBAClC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,gCAAgC,CAAC;AACxE,oBAAA,MAAM,EAAE,CAAC;iBACV;AACD,gBAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;YAChC;AAEA,YAAA,OAAO,QAAQ,EAAE,CAAC,IAAI,CACpB,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,EAC1E,GAAG,CAAC,IAAI,IAAG;AACT,gBAAA,IAAI,OAAO,EAAE,GAAG,EAAE;AAChB,oBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE;wBACxC,MAAM;wBACN,IAAI;AACJ,wBAAA,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAE;wBAC3D,IAAI;AACL,qBAAA,CAAC;gBACJ;gBAEA,IAAI,OAAO,EAAE,WAAW,IAAI,MAAM,IAAI,QAAQ,EAAE;AAC9C,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;oBACvE,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB;AAC7D,oBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC1D;YACF,CAAC,CAAC,CACH;QACH,CAAC,CAAC,CACH;IACH;AAEQ,IAAA,iBAAiB,CACvB,MAAc,EACd,QAAgB,EAChB,OAAwC,EACxC,IAAc,EAAA;AAEd,QAAA,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,SAAS;QACrC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;AACpE,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;QAChD,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;IAC5D;AAEQ,IAAA,gBAAgB,CACtB,MAAc,EACd,QAAgB,EAChB,OAAwC,EACxC,IAAc,EAAA;AAEd,QAAA,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS,EAAE;YACnC,OAAO,OAAO,CAAC,QAAQ;QACzB;AAEA,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;IAChE;AAEQ,IAAA,MAAM,UAAU,CAAI,GAAW,EAAE,IAAO,EAAE,GAAW,EAAA;AAC3D,QAAA,MAAM,UAAU,GAAuB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE;AAC3E,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;IAC5E;IAEQ,MAAM,cAAc,CAAI,GAAW,EAAA;AACzC,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAqB,GAAG,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;YACjG,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE;gBAC9C,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC;AAClD,gBAAA,OAAO,IAAI;YACb;YACA,OAAO,MAAM,CAAC,IAAI;QACpB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;YAC3F,OAAO,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QACxC;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE;AACnD,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB;QAEA,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC,IAAI,CACvC,GAAG,CAAC,QAAQ,IAAG;AACb,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE;AACnD,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC1D,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,CACH;IACH;IAEQ,sBAAsB,CAAC,OAAO,GAAG,CAAC,EAAA;AACxC,QAAA,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAClD,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,OAAO,GAAG,CAAC,EAAE;gBACf,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,GAAG,CAAC,CAAC;YACjD;AACA,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,CACH;IACH;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;QAE5D,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAC9E,GAAG,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC,EAClC,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,UAAU,CAAC,MAAK;YACd,YAAY,CAAC,SAAS,CAAC;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;QACzC,CAAC,CAAC,CACH;IACH;IAEQ,YAAY,CAClB,KAAY,EACZ,OAAwC,EACxC,MAAe,EACf,QAAiB,EACjB,IAAc,EAAA;AAEd,QAAA,MAAM,UAAU,GAAG,KAAK,YAAY,iBAAiB,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG;AAC1E,QAAA,MAAM,YAAY,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA,EAAG,QAAQ,EAAE;AAEtE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;QAChG,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC;AAEjE,QAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE;YACvC,MAAM;AACN,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,KAAK,EAAE,cAAc;AACtB,SAAA,CAAC;AAEF,QAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACvC,QAAA,OAAO,UAAU,CAAC,MAAM,cAAc,CAAC;IACzC;IAEQ,iBAAiB,CACvB,KAAY,EACZ,UAAkB,EAClB,QAAgB,EAChB,MAAe,EACf,IAAc,EACd,OAAwC,EAAA;AAExC,QAAA,MAAM,SAAS,GAAyB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;AAE5G,QAAA,IAAI,EAAE,KAAK,YAAY,iBAAiB,CAAC,EAAE;YACzC,OAAO;AACL,gBAAA,GAAG,SAAS;gBACZ,KAAK,EAAE,KAAK,CAAC,OAAO;AACpB,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,8BAA8B,CAAC;aACxF;QACH;AAEA,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK;AAE7B,QAAA,IAAI,OAAO,SAAS,EAAE,OAAO,KAAK,QAAQ,EAAE;AAC1C,YAAA,MAAM,OAAO,GACX,SAAS,CAAC,OAAO,KAAK;AACpB,kBAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,sCAAsC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;AACzF,kBAAE,SAAS,CAAC,OAAO;YACvB,OAAO,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE;QACpD;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC;iBACvB,GAAG,CAAC,CAAC,GAAY,MAAM,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBAC3E,IAAI,CAAC,IAAI,CAAC;YACb,OAAO,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE;QACpD;QAEA,IACE,OAAO,SAAS,KAAK,QAAQ;AAC7B,YAAA,SAAS,KAAK,IAAI;AAClB,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EACjC;AACA,YAAA,OAAO,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;QAC/E;AAEA,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,YAAA,OAAO,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;QAC/D;QAEA,OAAO;AACL,YAAA,GAAG,SAAS;YACZ,KAAK,EAAE,KAAK,CAAC,OAAO;AACpB,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,8BAA8B,CAAC;SACxF;IACH;IAEQ,cAAc,CAAC,KAA2B,EAAE,UAAkB,EAAA;AACpE,QAAA,MAAM,cAAc,GAAG,EAAE,GAAG,KAAK,EAAE;AACnC,QAAA,MAAM,aAAa,GAA2B;AAC5C,YAAA,GAAG,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0BAA0B,CAAC;AAC/E,YAAA,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE;YAC1B,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0BAA0B,CAAC;YAC9D,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0BAA0B,CAAC;YAC9D,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0BAA0B,CAAC;SAC/D;AAED,QAAA,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE;AAC7B,YAAA,cAAc,CAAC,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC;QACpD;AAEA,QAAA,OAAO,cAAc;IACvB;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAEjE,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,kCAAkC,CAAC;QAC1E;QAEA,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qCAAqC,CAAC;IAC7E;IAEQ,MAAM,iBAAiB,CAAC,UAAkB,EAAA;AAChD,QAAA,IAAI,UAAU,KAAK,GAAG,EAAE;YACtB;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;IAC/B;AAEQ,IAAA,MAAM,gBAAgB,GAAA;AAC5B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;QAClC,MAAM,aAAa,GACjB,UAAU;AACV,YAAA,UAAU,KAAK,GAAG;YAClB,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAC5C,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAErD,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC;YACzD,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACxF;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACjF,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IACrE;uGA7eoB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAApB,oBAAoB,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADzC;;;ACxBD;;;;;;;AAOG;MAIU,wBAAwB,CAAA;AAClB,IAAA,UAAU,GAAG,IAAI,OAAO,EAAQ;AAEjD;;;AAGG;AACa,IAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAE1D;;;AAGG;IACI,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACxB;uGAfW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA;;2FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACTD;;;;;;AAMG;MAIU,qBAAqB,CAAA;IACxB,cAAc,GAAG,IAAI;AACZ,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAElD;;;AAGG;IACI,IAAI,GAAA;AACT,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc;AAClC,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;AAEzB,QAAA,OAAO,MAAM;IACf;AAEO,IAAA,cAAc,CAAC,UAAsB,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;QAC1B,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAE;AAEjD,QAAA,IAAI,UAAU,CAAC,eAAe,EAAE;AAC9B,YAAA,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,MAAM,GAAG,CAAC,CAAA,CAAE;QAC3D;AAEA,QAAA,OAAO,MAAM;IACf;AAEO,IAAA,cAAc,CAAC,UAAsB,EAAA;QAC1C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACxC;QACF;QAEA,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAC5B,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,SAAS,CAAC,UAAsB,EAAA;QACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACxC;QACF;AAEA,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW;QAC7C,IAAI,CAAC,cAAc,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;YAC1C,MAAM,cAAc,GAAG,cAGtB;YAED,IAAI,cAAc,CAAC,WAAW,IAAI,cAAc,CAAC,WAAW,EAAE;AAC5D,gBAAA,IAAI;oBACF,cAAc,CAAC,WAAW,EAAE;oBAC5B,cAAc,CAAC,WAAW,EAAE;oBAC5B;gBACF;AAAE,gBAAA,MAAM;;gBAER;YACF;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa;QAC3C,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC;QACpC;IACF;uGAnEW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCNY,eAAe,CAAA;AACT,IAAA,SAAS,GAAG,IAAI,GAAG,EAA4B;AAC/C,IAAA,iBAAiB,GAAG,IAAI,GAAG,EAAoC;AAEhF;;;;;AAKG;AACI,IAAA,IAAI,CAAI,GAAW,EAAE,IAAkB,EAAE,KAAQ,EAAA;AACtD,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAmC;YACzF,IAAI,eAAe,EAAE;AACnB,gBAAA,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3B;YACF;AAEA,YAAA,MAAM,UAAU,GAAG,IAAI,eAAe,CAAI,KAAK,CAAC;YAChD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAsC,CAAC;YACvE;QACF;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAA2B;QACzE,IAAI,eAAe,EAAE;AACnB,YAAA,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B;QACF;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,OAAO,EAAK;QACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,UAA8B,CAAC;AACvD,QAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB;AAEA;;;;;AAKG;AACI,IAAA,GAAG,CAAI,GAAW,EAAE,IAAkB,EAAE,YAAgB,EAAA;AAC7D,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAmC;YACzF,IAAI,eAAe,EAAE;AACnB,gBAAA,OAAO,eAAe,CAAC,YAAY,EAAE;YACvC;AAEA,YAAA,MAAM,UAAU,GAAG,IAAI,eAAe,CAAI,YAAiB,CAAC;YAC5D,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAsC,CAAC;AACvE,YAAA,OAAO,UAAU,CAAC,YAAY,EAAE;QAClC;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAA2B;QACzE,IAAI,eAAe,EAAE;AACnB,YAAA,OAAO,eAAe,CAAC,YAAY,EAAE;QACvC;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,OAAO,EAAK;QACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,UAA8B,CAAC;AACvD,QAAA,OAAO,UAAU,CAAC,YAAY,EAAE;IAClC;AAEA;;;AAGG;AACI,IAAA,QAAQ,CAAI,GAAW,EAAA;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,OAAO,OAAO,CAAC,QAAQ,EAAO;IAChC;AAEA;;;;AAIG;IACI,QAAQ,CAAC,GAAW,EAAE,IAAkB,EAAA;AAC7C,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;YAC/C,IAAI,CAAC,OAAO,EAAE;gBACZ;YACF;YACA,OAAO,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;YAClC;QACF;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;QACA,OAAO,CAAC,QAAQ,EAAE;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;IAC5B;AAEA;;AAEG;IACI,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;IAChC;AAEA;;;;AAIG;IACI,GAAG,CAAC,GAAW,EAAE,IAAkB,EAAA;AACxC,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;QACxC;QACA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC;uGAtHW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCUY,aAAa,CAAA;AACP,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACjC,OAAO,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAwB;AAC3E,IAAA,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;IAEhD,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,eAAe;IAC7D,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,IAAI,IAAI;IACxD,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,6BAA6B;IAEtF,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACtD,aAAa,GAAG,MAAM,CAAa,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACvE,aAAa,GAAG,IAAI,GAAG,CAAa,CAAC,SAAS,CAAC,CAAC;AAEjD,IAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAClC,IAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AAE9D,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE;QACzB;QAEA,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;AAE7B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC1C;AACF,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,QAAQ,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACjC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC;YAC7D;QACF;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAC3B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC;YAC7D;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAK;YAC7B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC;AAC/D,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,cAAc,CAAC,MAAe,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QACxB,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YACpD;QACF;QAEA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IACzD;AAEO,IAAA,YAAY,CAAC,KAAiB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAC5D;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAC3B;IAEQ,gBAAgB,GAAA;QACtB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAC7B;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,MAAM,kBAAkB,GAAsB;YAC5C,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,MAAM,EAAE,IAAI,CAAC,gBAAgB;SAC9B;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,kBAAkB;QAC3B;QAEA,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAoB,IAAI,CAAC,oBAAoB,CAAC;QAC9E,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,kBAAkB;QAC3B;QAEA,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK;AACjF,YAAA,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,kBAAkB,CAAC,MAAM;SACvF;IACH;AAEQ,IAAA,gBAAgB,CAAC,WAA8B,EAAA;QACrD,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC;IAC3D;AAEQ,IAAA,aAAa,CAAC,KAAc,EAAA;AAClC,QAAA,MAAM,WAAW,GAAiB;YAChC,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,SAAS;YACT,OAAO;YACP,MAAM;YACN,MAAM;YACN,OAAO;YACP,UAAU;SACX;QACD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAmB,CAAC;IAC/E;IAEQ,aAAa,CAAC,KAAiB,EAAE,MAAmB,EAAA;AAC1D,QAAA,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI;YACV;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA,iBAAA,EAAoB,KAAK,CAAA,EAAA,CAAI,CAAC;QAChF,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B,MAAM,IAAI;YACV;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;AACjD,QAAA,IAAI,CAAC,GAAG,GAAG,YAAY;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAW;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B,MAAM,IAAI;AACZ,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,MAAW;YACxB,OAAO,CAAC,KAAK,CAAC,CAAA,sBAAA,EAAyB,KAAK,CAAA,OAAA,EAAU,OAAO,CAAA,CAAE,CAAC;YAChE,MAAM,IAAI;AACZ,QAAA,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACvC;uGA9IW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACfD;;AAEG;;;;"}