{"version":3,"file":"h-k-dev-angular-file-drop.mjs","sources":["../../../projects/angular-file-drop/src/lib/utils.ts","../../../projects/angular-file-drop/src/lib/angular-file-drop.ts","../../../projects/angular-file-drop/src/lib/files.enum.ts","../../../projects/angular-file-drop/src/public-api.ts","../../../projects/angular-file-drop/src/h-k-dev-angular-file-drop.ts"],"sourcesContent":["import type { DroppedFile } from './files.types';\n\n/**\n * Interactive child elements that should not trigger the file picker when clicked.\n */\nexport const FILE_DND_IGNORE_SELECTOR =\n  'button,a,input,textarea,select,[contenteditable=\"true\"],[data-file-dnd-ignore]';\n\n// ─── DragEvent Helpers ──────────────────────────────────────────────────────\nexport function containsFiles(event: DragEvent) {\n  if (!event.dataTransfer?.types) return false;\n  return Array.from(event.dataTransfer.types).includes('Files');\n}\n\nexport function setDropEffect(event: DragEvent, dropEffect: DataTransfer['dropEffect']): void {\n  try {\n    if (event.dataTransfer) {\n      event.dataTransfer.dropEffect = dropEffect;\n    }\n  } catch (error) {\n    console.warn('[FileDnd] setDropEffect error:', error);\n  }\n}\n\n// ─── Filtering ──────────────────────────────────────────────────────────────\n\n/**\n * A path is considered hidden if any of its segments starts with a dot\n * (e.g. `.git/config` or `folder/.DS_Store`).\n */\nexport function isHiddenPath(relativePath: string) {\n  return relativePath.split('/').some((part) => part.length > 1 && part.startsWith('.'));\n}\n\nexport function filterHiddenFiles(files: DroppedFile[]): DroppedFile[] {\n  return files.filter((f) => !isHiddenPath(f.relativePath));\n}\n\n/**\n * Matches a file against an `accept`-style string (e.g. `.png,image/*,application/pdf`).\n */\nexport function isFileAccepted(file: File, acceptStr: string | null) {\n  if (!acceptStr) return true;\n\n  const accepted = acceptStr\n    .split(',')\n    .map((s) => s.trim().toLowerCase())\n    .filter(Boolean);\n\n  const mime = (file.type || '').toLowerCase();\n  const baseMime = mime.replace(/\\/.*$/, '');\n  const name = file.name.toLowerCase();\n\n  return accepted.some((valid) => {\n    if (valid === '*/*') {\n      return true;\n    }\n\n    if (valid.startsWith('.')) {\n      return name.endsWith(valid);\n    }\n\n    if (valid.endsWith('/*')) {\n      return baseMime === valid.replace(/\\/.*$/, '');\n    }\n\n    return mime === valid;\n  });\n}\n\nexport function filterAcceptedFiles(files: DroppedFile[], acceptStr: string | null): DroppedFile[] {\n  if (!acceptStr) return files;\n  return files.filter((f) => isFileAccepted(f.file, acceptStr));\n}\n\nexport function enforceMultiple(files: DroppedFile[], multiple: boolean): DroppedFile[] {\n  if (!multiple && files.length > 1) {\n    return [files[0]];\n  }\n  return files;\n}\n\nexport function toDroppedFiles(files: ArrayLike<File>): DroppedFile[] {\n  return Array.from(files).map((file) => ({\n    file,\n    relativePath: file.webkitRelativePath || file.name,\n  }));\n}\n\n// ─── Reading Dropped Files ──────────────────────────────────────────────────\n\n/**\n * Extracts all files from a drop's DataTransfer, traversing folders when\n * `traverseDirectories` is true. Picks the best available API:\n * File System Access handles → webkit entries → plain FileList.\n */\nexport async function readDroppedFiles(\n  dt: DataTransfer,\n  traverseDirectories: boolean,\n): Promise<DroppedFile[]> {\n  const items = Array.from(dt.items ?? []).filter((item) => item.kind === 'file');\n\n  // Feature detection for the modern File System Access API\n  const supportsHandles = items.length > 0 && 'getAsFileSystemHandle' in items[0];\n\n  try {\n    if (supportsHandles) {\n      // Hardened: Wrap individual handle retrieval to prevent single-file failures from crashing Promise.all\n      const handles = (\n        await Promise.all(\n          items.map(async (item) => {\n            try {\n              return (await (item as any).getAsFileSystemHandle()) as FileSystemHandle | null;\n            } catch (err) {\n              console.warn('[FileDnd] Failed to get handle for item:', err);\n              return null;\n            }\n          }),\n        )\n      ).filter((h): h is FileSystemHandle => h !== null);\n\n      return await walkHandles(handles, '', traverseDirectories);\n    }\n\n    // Fallback 1: The old webkit API (still supports folders)\n    if (items.length && 'webkitGetAsEntry' in items[0]) {\n      const entries = items\n        .map((item) => item.webkitGetAsEntry())\n        .filter((entry): entry is FileSystemEntry => entry !== null);\n\n      return await walkEntries(entries, '', traverseDirectories);\n    }\n\n    // Fallback 2: Basic FileList (no folder traversal support)\n    return toDroppedFiles(dt.files);\n  } catch (error) {\n    console.error('[FileDnd] Error reading dropped files:', error);\n    return [];\n  }\n}\n\n// ─── Modern FileSystemHandle Traversal ──────────────────────────────────────\n\nexport async function walkHandles(\n  handles: FileSystemHandle[],\n  basePath: string,\n  traverseDirectories: boolean,\n): Promise<DroppedFile[]> {\n  const results: DroppedFile[] = [];\n\n  for (const handle of handles) {\n    try {\n      if (handle.kind === 'file') {\n        const fileHandle = handle as FileSystemFileHandle;\n        const file = await fileHandle.getFile();\n        results.push({ file, relativePath: basePath + file.name });\n      } else if (handle.kind === 'directory') {\n        if (!traverseDirectories) {\n          continue;\n        }\n\n        const dirHandle = handle as FileSystemDirectoryHandle;\n        const dirPath = basePath + dirHandle.name + '/';\n\n        const children: FileSystemHandle[] = [];\n\n        for await (const [_, child] of (dirHandle as any).entries()) {\n          children.push(child);\n        }\n\n        const childResults = await walkHandles(children, dirPath, traverseDirectories);\n        results.push(...childResults);\n      }\n    } catch (err) {\n      // Hardened: if one file is locked or requires permissions the user denied, just skip it\n      console.warn(`[FileDnd] Skipped handle ${handle.name} due to error:`, err);\n    }\n  }\n\n  return results;\n}\n\n// ─── FileSystemEntry Traversal ──────────────────────────────────────────────\n\nexport function walkEntries(\n  entries: FileSystemEntry[],\n  basePath: string,\n  traverseDirectories: boolean,\n): Promise<DroppedFile[]> {\n  return Promise.all(entries.map((entry) => walkEntry(entry, basePath, traverseDirectories))).then(\n    (results) => results.flat(),\n  );\n}\n\nexport async function walkEntry(\n  entry: FileSystemEntry,\n  basePath: string,\n  traverseDirectories: boolean,\n): Promise<DroppedFile[]> {\n  try {\n    if (entry.isFile) {\n      return await resolveFileEntry(entry as FileSystemFileEntry, basePath);\n    } else if (entry.isDirectory) {\n      if (!traverseDirectories) {\n        return [];\n      }\n      return await resolveDirectoryEntry(\n        entry as FileSystemDirectoryEntry,\n        basePath,\n        traverseDirectories,\n      );\n    }\n  } catch (err) {\n    console.warn(`[FileDnd] Skipped entry ${entry.name} due to error:`, err);\n  }\n  return [];\n}\n\nexport function resolveFileEntry(\n  entry: FileSystemFileEntry,\n  basePath: string,\n): Promise<DroppedFile[]> {\n  return new Promise((resolve) => {\n    entry.file(\n      (file) => {\n        resolve([{ file, relativePath: basePath + file.name }]);\n      },\n      (err) => {\n        console.warn('[FileDnd] file entry error:', err);\n        resolve([]);\n      },\n    );\n  });\n}\n\nexport function resolveDirectoryEntry(\n  entry: FileSystemDirectoryEntry,\n  basePath: string,\n  traverseDirectories: boolean,\n): Promise<DroppedFile[]> {\n  const dirPath = basePath + entry.name + '/';\n  const reader = entry.createReader();\n  const collected: FileSystemEntry[] = [];\n\n  return new Promise((resolve) => {\n    const readBatch = () => {\n      reader.readEntries(\n        async (batch) => {\n          if (batch.length === 0) {\n            const results = await walkEntries(collected, dirPath, traverseDirectories);\n            resolve(results);\n          } else {\n            collected.push(...batch);\n            readBatch();\n          }\n        },\n        (err) => {\n          console.warn('[FileDnd] readEntries error:', err);\n          resolve([]);\n        },\n      );\n    };\n\n    readBatch();\n  });\n}\n\n// ─── Hidden File Input ──────────────────────────────────────────────────────\n\n/**\n * Creates an invisible `<input type=\"file\">` attached to `document.body`.\n * The caller is responsible for removing it again.\n */\nexport function createHiddenFileInput() {\n  const input = document.createElement('input');\n  input.type = 'file';\n\n  // Apply stealth styles\n  input.style.position = 'fixed';\n  input.style.opacity = '0';\n  input.style.pointerEvents = 'none';\n  input.style.width = '0';\n  input.style.height = '0';\n  input.style.top = '0';\n  input.style.left = '0';\n  input.tabIndex = -1;\n  input.setAttribute('aria-hidden', 'true');\n\n  // Append input to the document body to prevent void-element issues\n  document.body.appendChild(input);\n\n  return input;\n}\n","import {\n  booleanAttribute,\n  Directive,\n  computed,\n  DestroyRef,\n  ElementRef,\n  PLATFORM_ID,\n  inject,\n\n  // Signals\n  input,\n  output,\n  signal,\n} from '@angular/core';\n\nimport type { DroppedFile, FileDropEvent, FilePickerOptions } from './files.types';\nimport {\n  containsFiles,\n  createHiddenFileInput,\n  enforceMultiple,\n  FILE_DND_IGNORE_SELECTOR,\n  filterAcceptedFiles,\n  filterHiddenFiles,\n  readDroppedFiles,\n  setDropEffect,\n  toDroppedFiles,\n} from './utils';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport type { DroppedFile, FileDropEvent, FilePickerOptions } from './files.types';\n\n@Directive({\n  selector: '[dropZone]',\n  exportAs: 'dropZone',\n  host: {\n    '(dragenter)': 'onDragEnter($event)',\n    '(dragover)': 'onDragOver($event)',\n    '(dragleave)': 'onDragLeave($event)',\n    '(drop)': 'onDrop($event)',\n    '(click)': 'onActivate($event)',\n    '(keydown.enter)': 'onActivate($event)',\n    '(keydown.space)': 'onActivate($event)',\n\n    // Host activation\n    '[attr.role]': 'hostActivationEnabled() ? \"button\" : null',\n    '[attr.tabindex]': 'hostActivationEnabled() ? (disabled() ? \"-1\" : \"0\") : null',\n    '[attr.aria-disabled]': 'hostActivationEnabled() && disabled() ? \"true\" : null',\n    '[style.cursor]': 'hostCanOpenPicker() ? \"pointer\" : \"auto\"',\n\n    // Global reset\n    '(document:dragleave)': 'onDocumentDragLeave($event)',\n    '(document:drop)': 'resetDragState()',\n    '(document:dragend)': 'resetDragState()',\n    '(window:blur)': 'resetDragState()',\n  },\n})\nexport class AngularFileDrop {\n  destroyRef = inject(DestroyRef);\n\n  /**\n   * Whether multiple files can be selected.\n   */\n  multiple = input(true, { transform: booleanAttribute });\n\n  /**\n   * Allows dropped folders/directories to be traversed.\n   *\n   * This should NOT force the hidden file input into directory-picker mode.\n   */\n  directory = input(true, { transform: booleanAttribute });\n  directoryPicker = input(false, { transform: booleanAttribute });\n\n  /**\n   * The accepted file types.\n   */\n  acceptedFiles = input('');\n  ignoreHiddenFiles = input(true, { transform: booleanAttribute });\n  clickable = input(true, { transform: booleanAttribute });\n  disabled = input(false, { transform: booleanAttribute });\n  isManualActivation = input(false, { transform: booleanAttribute });\n\n  hostActivationEnabled = computed(() => this.clickable() && !this.isManualActivation());\n  hostCanOpenPicker = computed(() => this.hostActivationEnabled() && !this.disabled());\n\n  fileDrop = output<FileDropEvent>();\n  dragEnter = output<DragEvent>();\n  dragLeave = output<DragEvent>();\n  dragOver = output<DragEvent>();\n\n  #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n  // ─── State ────────────────────────────────────────────────────────────────\n  isDragOver = signal(false);\n\n  el = inject<ElementRef<HTMLElement>>(ElementRef);\n  hiddenInput?: HTMLInputElement;\n\n  openPicker(event?: Event, options?: FilePickerOptions) {\n    event?.preventDefault();\n\n    if (this.disabled()) return;\n\n    const input = this.getOrCreateFileInput();\n    if (!input) return;\n\n    this.syncInput(input, options);\n    input.click();\n  }\n\n  openDirectoryPicker(event?: Event) {\n    this.openPicker(event, { directory: true });\n  }\n\n  openFilePicker(event?: Event) {\n    this.openPicker(event, { directory: false });\n  }\n\n  // ─── Host Events ──────────────────────────────────────────────────────────\n  shouldIgnoreActivationTarget(event: Event) {\n    const target = event.target as HTMLElement | null;\n    const closestIgnore = target?.closest(FILE_DND_IGNORE_SELECTOR);\n    // Ignore if an interactive child was clicked, but do not ignore if the host ITSELF is the button/link\n    return !!closestIgnore && closestIgnore !== this.el.nativeElement;\n  }\n\n  onActivate(event: Event) {\n    if (!this.hostCanOpenPicker() || this.shouldIgnoreActivationTarget(event)) return;\n    this.openPicker(event);\n  }\n\n  onDragEnter(event: DragEvent) {\n    if (!containsFiles(event) || event.defaultPrevented) return;\n    if (this.disabled()) {\n      this.resetDragState();\n      return;\n    }\n\n    event.preventDefault();\n    this.isDragOver.set(true);\n    this.dragEnter.emit(event);\n  }\n\n  onDragOver(event: DragEvent) {\n    if (!containsFiles(event) || event.defaultPrevented) return;\n    if (this.disabled()) {\n      event.preventDefault();\n      setDropEffect(event, 'none');\n      this.resetDragState();\n      return;\n    }\n\n    event.preventDefault();\n\n    // Mirror Dropzone.js effectAllowed logic\n    try {\n      const effect = event.dataTransfer!.effectAllowed;\n      setDropEffect(event, effect === 'move' || effect === 'linkMove' ? 'move' : 'copy');\n    } catch (error) {\n      console.warn('[FileDnd] onDragOver effectAllowed error:', error);\n    }\n\n    this.isDragOver.set(true);\n    this.dragOver.emit(event);\n  }\n\n  onDragLeave(event: DragEvent) {\n    if (!containsFiles(event)) return;\n\n    if (this.disabled()) {\n      this.resetDragState();\n      return;\n    }\n\n    event.preventDefault();\n\n    const related = event.relatedTarget;\n\n    if (!(related instanceof Node) || !this.el.nativeElement.contains(related)) {\n      this.isDragOver.set(false);\n      this.dragLeave.emit(event);\n    }\n  }\n\n  // Global reset: if the drag leaves the browser window entirely, relatedTarget is null\n  onDocumentDragLeave(event: DragEvent) {\n    if (!containsFiles(event)) return; // Polish: ignore dragging text/links out of window\n    if (!event.relatedTarget) this.resetDragState();\n  }\n\n  resetDragState() {\n    this.isDragOver.set(false);\n  }\n\n  async onDrop(event: DragEvent) {\n    if (!containsFiles(event)) return;\n\n    // Another, more specific dropzone already handled it.\n    if (event.defaultPrevented) {\n      this.resetDragState();\n      return;\n    }\n\n    if (this.disabled()) {\n      event.preventDefault();\n      this.resetDragState();\n      return;\n    }\n\n    event.preventDefault();\n\n    // Do not stop propagation; parent directives and document listeners can reset.\n    this.resetDragState();\n\n    const dt = event.dataTransfer;\n    if (!dt) return;\n\n    const dropped = await readDroppedFiles(dt, this.directory());\n\n    const filtered = this.prepareFiles(dropped);\n    if (filtered.length) this.fileDrop.emit({ files: filtered });\n  }\n\n  // ─── Hidden Input (Attached to Body) ──────────────────────────────────────\n  syncInput(input: HTMLInputElement, options?: FilePickerOptions) {\n    input.multiple = this.multiple();\n    input.accept = this.acceptedFiles() ?? '';\n    input.disabled = this.disabled();\n\n    const useDirectoryPicker = options?.directory ?? this.directoryPicker();\n\n    if (useDirectoryPicker) {\n      input.setAttribute('webkitdirectory', '');\n    } else {\n      input.removeAttribute('webkitdirectory');\n    }\n  }\n\n  getOrCreateFileInput() {\n    if (!this.#isBrowser) return;\n    if (this.hiddenInput) return this.hiddenInput;\n\n    const input = createHiddenFileInput();\n    this.syncInput(input);\n\n    const onChange = () => {\n      if (this.disabled()) {\n        input.value = '';\n        return;\n      }\n\n      const files = toDroppedFiles(input.files ?? []);\n\n      const filtered = this.prepareFiles(files);\n      if (filtered.length) this.fileDrop.emit({ files: filtered });\n\n      // Clear the value so the exact same file(s) can be selected again\n      input.value = '';\n    };\n\n    input.addEventListener('change', onChange);\n\n    // Clean up the DOM element\n\n    this.destroyRef.onDestroy(() => {\n      input.removeEventListener('change', onChange);\n      input.remove();\n      this.hiddenInput = undefined;\n    });\n\n    this.hiddenInput = input;\n    return input;\n  }\n\n  // ─── Validation ───────────────────────────────────────────────────────────\n  prepareFiles(files: DroppedFile[]) {\n    const visible = this.ignoreHiddenFiles() ? filterHiddenFiles(files) : files;\n    const accepted = filterAcceptedFiles(visible, this.acceptedFiles());\n    return enforceMultiple(accepted, this.multiple());\n  }\n}\n","export const FILE_TYPES = {\n  // ─── Documents ────────────────────────────────────────────────────────────\n  PDF: '.pdf,application/pdf',\n  TXT: '.txt,text/plain',\n  RTF: '.rtf,application/rtf',\n  DOC: '.doc,application/msword',\n  DOCX: '.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\n  // ─── Emails ───────────────────────────────────────────────────────────────\n  EML: '.eml,message/rfc822',\n  MSG: '.msg,application/vnd.ms-outlook',\n\n  // ─── Spreadsheets ─────────────────────────────────────────────────────────\n  CSV: '.csv,text/csv',\n  XLS: '.xls,application/vnd.ms-excel',\n  XLSX: '.xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\n  // ─── Presentations ────────────────────────────────────────────────────────\n  PPT: '.ppt,application/vnd.ms-powerpoint',\n  PPTX: '.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\n  // ─── Images ───────────────────────────────────────────────────────────────\n  PNG: '.png,image/png',\n  JPG: '.jpg,.jpeg,image/jpeg',\n  SVG: '.svg,image/svg+xml',\n  WEBP: '.webp,image/webp',\n  GIF: '.gif,image/gif',\n  ANY_IMAGE: 'image/*',\n\n  // ─── Archives ─────────────────────────────────────────────────────────────\n  ZIP: '.zip,application/zip',\n  RAR: '.rar,application/vnd.rar',\n  SEVEN_ZIP: '.7z,application/x-7z-compressed',\n  TAR: '.tar,application/x-tar',\n  GZ: '.gz,application/gzip',\n\n  // ─── Audio / Video ────────────────────────────────────────────────────────\n  MP3: '.mp3,audio/mpeg',\n  MP4: '.mp4,video/mp4',\n  ANY_AUDIO: 'audio/*',\n  ANY_VIDEO: 'video/*',\n\n  // ─── Web / Data ───────────────────────────────────────────────────────────\n  JSON: '.json,application/json',\n  XML: '.xml,application/xml',\n  HTML: '.html,.htm,text/html',\n} as const;\n","/*\n * Public API Surface of angular-file-drop\n */\n\nexport * from './lib/angular-file-drop';\nexport * from './lib/utils';\nexport * from './lib/files.types';\nexport { FILE_TYPES } from './lib/files.enum';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAEA;;AAEG;AACI,MAAM,wBAAwB,GACnC;AAEF;AACM,SAAU,aAAa,CAAC,KAAgB,EAAA;AAC5C,IAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK;AAAE,QAAA,OAAO,KAAK;AAC5C,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/D;AAEM,SAAU,aAAa,CAAC,KAAgB,EAAE,UAAsC,EAAA;AACpF,IAAA,IAAI;AACF,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,UAAU;QAC5C;IACF;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC;IACvD;AACF;AAEA;AAEA;;;AAGG;AACG,SAAU,YAAY,CAAC,YAAoB,EAAA;IAC/C,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACxF;AAEM,SAAU,iBAAiB,CAAC,KAAoB,EAAA;AACpD,IAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;AAC3D;AAEA;;AAEG;AACG,SAAU,cAAc,CAAC,IAAU,EAAE,SAAwB,EAAA;AACjE,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;IAE3B,MAAM,QAAQ,GAAG;SACd,KAAK,CAAC,GAAG;AACT,SAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;SACjC,MAAM,CAAC,OAAO,CAAC;AAElB,IAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAEpC,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAC7B,QAAA,IAAI,KAAK,KAAK,KAAK,EAAE;AACnB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7B;AAEA,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACxB,OAAO,QAAQ,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD;QAEA,OAAO,IAAI,KAAK,KAAK;AACvB,IAAA,CAAC,CAAC;AACJ;AAEM,SAAU,mBAAmB,CAAC,KAAoB,EAAE,SAAwB,EAAA;AAChF,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,KAAK;AAC5B,IAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC/D;AAEM,SAAU,eAAe,CAAC,KAAoB,EAAE,QAAiB,EAAA;IACrE,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnB;AACA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,cAAc,CAAC,KAAsB,EAAA;AACnD,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;QACtC,IAAI;AACJ,QAAA,YAAY,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI;AACnD,KAAA,CAAC,CAAC;AACL;AAEA;AAEA;;;;AAIG;AACI,eAAe,gBAAgB,CACpC,EAAgB,EAChB,mBAA4B,EAAA;IAE5B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;;AAG/E,IAAA,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,uBAAuB,IAAI,KAAK,CAAC,CAAC,CAAC;AAE/E,IAAA,IAAI;QACF,IAAI,eAAe,EAAE;;AAEnB,YAAA,MAAM,OAAO,GAAG,CACd,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,KAAI;AACvB,gBAAA,IAAI;AACF,oBAAA,QAAQ,MAAO,IAAY,CAAC,qBAAqB,EAAE;gBACrD;gBAAE,OAAO,GAAG,EAAE;AACZ,oBAAA,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,GAAG,CAAC;AAC7D,oBAAA,OAAO,IAAI;gBACb;AACF,YAAA,CAAC,CAAC,CACH,EACD,MAAM,CAAC,CAAC,CAAC,KAA4B,CAAC,KAAK,IAAI,CAAC;YAElD,OAAO,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,mBAAmB,CAAC;QAC5D;;QAGA,IAAI,KAAK,CAAC,MAAM,IAAI,kBAAkB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YAClD,MAAM,OAAO,GAAG;iBACb,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,EAAE;iBACrC,MAAM,CAAC,CAAC,KAAK,KAA+B,KAAK,KAAK,IAAI,CAAC;YAE9D,OAAO,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,mBAAmB,CAAC;QAC5D;;AAGA,QAAA,OAAO,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC;IACjC;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC;AAC9D,QAAA,OAAO,EAAE;IACX;AACF;AAEA;AAEO,eAAe,WAAW,CAC/B,OAA2B,EAC3B,QAAgB,EAChB,mBAA4B,EAAA;IAE5B,MAAM,OAAO,GAAkB,EAAE;AAEjC,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,QAAA,IAAI;AACF,YAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC1B,MAAM,UAAU,GAAG,MAA8B;AACjD,gBAAA,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE;AACvC,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5D;AAAO,iBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;gBACtC,IAAI,CAAC,mBAAmB,EAAE;oBACxB;gBACF;gBAEA,MAAM,SAAS,GAAG,MAAmC;gBACrD,MAAM,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC,IAAI,GAAG,GAAG;gBAE/C,MAAM,QAAQ,GAAuB,EAAE;AAEvC,gBAAA,WAAW,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAK,SAAiB,CAAC,OAAO,EAAE,EAAE;AAC3D,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBACtB;gBAEA,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC;AAC9E,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;YAC/B;QACF;QAAE,OAAO,GAAG,EAAE;;YAEZ,OAAO,CAAC,IAAI,CAAC,CAAA,yBAAA,EAA4B,MAAM,CAAC,IAAI,CAAA,cAAA,CAAgB,EAAE,GAAG,CAAC;QAC5E;IACF;AAEA,IAAA,OAAO,OAAO;AAChB;AAEA;SAEgB,WAAW,CACzB,OAA0B,EAC1B,QAAgB,EAChB,mBAA4B,EAAA;AAE5B,IAAA,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAC9F,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE,CAC5B;AACH;AAEO,eAAe,SAAS,CAC7B,KAAsB,EACtB,QAAgB,EAChB,mBAA4B,EAAA;AAE5B,IAAA,IAAI;AACF,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,MAAM,gBAAgB,CAAC,KAA4B,EAAE,QAAQ,CAAC;QACvE;AAAO,aAAA,IAAI,KAAK,CAAC,WAAW,EAAE;YAC5B,IAAI,CAAC,mBAAmB,EAAE;AACxB,gBAAA,OAAO,EAAE;YACX;YACA,OAAO,MAAM,qBAAqB,CAChC,KAAiC,EACjC,QAAQ,EACR,mBAAmB,CACpB;QACH;IACF;IAAE,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,IAAI,CAAC,CAAA,wBAAA,EAA2B,KAAK,CAAC,IAAI,CAAA,cAAA,CAAgB,EAAE,GAAG,CAAC;IAC1E;AACA,IAAA,OAAO,EAAE;AACX;AAEM,SAAU,gBAAgB,CAC9B,KAA0B,EAC1B,QAAgB,EAAA;AAEhB,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,QAAA,KAAK,CAAC,IAAI,CACR,CAAC,IAAI,KAAI;AACP,YAAA,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACzD,QAAA,CAAC,EACD,CAAC,GAAG,KAAI;AACN,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,CAAC;YAChD,OAAO,CAAC,EAAE,CAAC;AACb,QAAA,CAAC,CACF;AACH,IAAA,CAAC,CAAC;AACJ;SAEgB,qBAAqB,CACnC,KAA+B,EAC/B,QAAgB,EAChB,mBAA4B,EAAA;IAE5B,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG;AAC3C,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE;IACnC,MAAM,SAAS,GAAsB,EAAE;AAEvC,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;QAC7B,MAAM,SAAS,GAAG,MAAK;AACrB,YAAA,MAAM,CAAC,WAAW,CAChB,OAAO,KAAK,KAAI;AACd,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBACtB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC;oBAC1E,OAAO,CAAC,OAAO,CAAC;gBAClB;qBAAO;AACL,oBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACxB,oBAAA,SAAS,EAAE;gBACb;AACF,YAAA,CAAC,EACD,CAAC,GAAG,KAAI;AACN,gBAAA,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC;gBACjD,OAAO,CAAC,EAAE,CAAC;AACb,YAAA,CAAC,CACF;AACH,QAAA,CAAC;AAED,QAAA,SAAS,EAAE;AACb,IAAA,CAAC,CAAC;AACJ;AAEA;AAEA;;;AAGG;SACa,qBAAqB,GAAA;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,IAAA,KAAK,CAAC,IAAI,GAAG,MAAM;;AAGnB,IAAA,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC9B,IAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AACzB,IAAA,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM;AAClC,IAAA,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG;AACvB,IAAA,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;AACxB,IAAA,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;AACrB,IAAA,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;AACtB,IAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AACnB,IAAA,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;;AAGzC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAEhC,IAAA,OAAO,KAAK;AACd;;MC5Oa,eAAe,CAAA;AAC1B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B;;AAEG;IACH,QAAQ,GAAG,KAAK,CAAC,IAAI,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEvD;;;;AAIG;IACH,SAAS,GAAG,KAAK,CAAC,IAAI,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACxD,eAAe,GAAG,KAAK,CAAC,KAAK,uFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE/D;;AAEG;IACH,aAAa,GAAG,KAAK,CAAC,EAAE;sFAAC;IACzB,iBAAiB,GAAG,KAAK,CAAC,IAAI,yFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAChE,SAAS,GAAG,KAAK,CAAC,IAAI,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACxD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACxD,kBAAkB,GAAG,KAAK,CAAC,KAAK,0FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAElE,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;8FAAC;AACtF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;0FAAC;IAEpF,QAAQ,GAAG,MAAM,EAAiB;IAClC,SAAS,GAAG,MAAM,EAAa;IAC/B,SAAS,GAAG,MAAM,EAAa;IAC/B,QAAQ,GAAG,MAAM,EAAa;IAE9B,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;IAGnD,UAAU,GAAG,MAAM,CAAC,KAAK;mFAAC;AAE1B,IAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAChD,IAAA,WAAW;IAEX,UAAU,CAAC,KAAa,EAAE,OAA2B,EAAA;QACnD,KAAK,EAAE,cAAc,EAAE;QAEvB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACzC,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;QAC9B,KAAK,CAAC,KAAK,EAAE;IACf;AAEA,IAAA,mBAAmB,CAAC,KAAa,EAAA;QAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7C;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;QAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9C;;AAGA,IAAA,4BAA4B,CAAC,KAAY,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;QACjD,MAAM,aAAa,GAAG,MAAM,EAAE,OAAO,CAAC,wBAAwB,CAAC;;QAE/D,OAAO,CAAC,CAAC,aAAa,IAAI,aAAa,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa;IACnE;AAEA,IAAA,UAAU,CAAC,KAAY,EAAA;QACrB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;YAAE;AAC3E,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gBAAgB;YAAE;AACrD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gBAAgB;YAAE;AACrD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;YAC5B,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;;AAGtB,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAa,CAAC,aAAa;AAChD,YAAA,aAAa,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;QACpF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,KAAK,CAAC;QAClE;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,WAAW,CAAC,KAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE;AAE3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa;AAEnC,QAAA,IAAI,EAAE,OAAO,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC1E,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B;IACF;;AAGA,IAAA,mBAAmB,CAAC,KAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO;QAClC,IAAI,CAAC,KAAK,CAAC,aAAa;YAAE,IAAI,CAAC,cAAc,EAAE;IACjD;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;IAEA,MAAM,MAAM,CAAC,KAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE;;AAG3B,QAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC1B,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;;QAGtB,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY;AAC7B,QAAA,IAAI,CAAC,EAAE;YAAE;AAET,QAAA,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QAC3C,IAAI,QAAQ,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC9D;;IAGA,SAAS,CAAC,KAAuB,EAAE,OAA2B,EAAA;AAC5D,QAAA,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;AACzC,QAAA,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAEhC,MAAM,kBAAkB,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE;QAEvE,IAAI,kBAAkB,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC3C;aAAO;AACL,YAAA,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC;QAC1C;IACF;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QACtB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW;AAE7C,QAAA,MAAM,KAAK,GAAG,qBAAqB,EAAE;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAErB,MAAM,QAAQ,GAAG,MAAK;AACpB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,gBAAA,KAAK,CAAC,KAAK,GAAG,EAAE;gBAChB;YACF;YAEA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAE/C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACzC,IAAI,QAAQ,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;;AAG5D,YAAA,KAAK,CAAC,KAAK,GAAG,EAAE;AAClB,QAAA,CAAC;AAED,QAAA,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;;AAI1C,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC7C,KAAK,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC9B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,YAAY,CAAC,KAAoB,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,KAAK;QAC3E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnE,OAAO,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACnD;uGA9NW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,6CAAA,EAAA,eAAA,EAAA,gEAAA,EAAA,oBAAA,EAAA,yDAAA,EAAA,cAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAzB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,IAAI,EAAE;AACJ,wBAAA,aAAa,EAAE,qBAAqB;AACpC,wBAAA,YAAY,EAAE,oBAAoB;AAClC,wBAAA,aAAa,EAAE,qBAAqB;AACpC,wBAAA,QAAQ,EAAE,gBAAgB;AAC1B,wBAAA,SAAS,EAAE,oBAAoB;AAC/B,wBAAA,iBAAiB,EAAE,oBAAoB;AACvC,wBAAA,iBAAiB,EAAE,oBAAoB;;AAGvC,wBAAA,aAAa,EAAE,2CAA2C;AAC1D,wBAAA,iBAAiB,EAAE,4DAA4D;AAC/E,wBAAA,sBAAsB,EAAE,uDAAuD;AAC/E,wBAAA,gBAAgB,EAAE,0CAA0C;;AAG5D,wBAAA,sBAAsB,EAAE,6BAA6B;AACrD,wBAAA,iBAAiB,EAAE,kBAAkB;AACrC,wBAAA,oBAAoB,EAAE,kBAAkB;AACxC,wBAAA,eAAe,EAAE,kBAAkB;AACpC,qBAAA;AACF,iBAAA;;;ACvDM,MAAM,UAAU,GAAG;;AAExB,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,GAAG,EAAE,iBAAiB;AACtB,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,GAAG,EAAE,yBAAyB;AAC9B,IAAA,IAAI,EAAE,+EAA+E;;AAGrF,IAAA,GAAG,EAAE,qBAAqB;AAC1B,IAAA,GAAG,EAAE,iCAAiC;;AAGtC,IAAA,GAAG,EAAE,eAAe;AACpB,IAAA,GAAG,EAAE,+BAA+B;AACpC,IAAA,IAAI,EAAE,yEAAyE;;AAG/E,IAAA,GAAG,EAAE,oCAAoC;AACzC,IAAA,IAAI,EAAE,iFAAiF;;AAGvF,IAAA,GAAG,EAAE,gBAAgB;AACrB,IAAA,GAAG,EAAE,uBAAuB;AAC5B,IAAA,GAAG,EAAE,oBAAoB;AACzB,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,GAAG,EAAE,gBAAgB;AACrB,IAAA,SAAS,EAAE,SAAS;;AAGpB,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,GAAG,EAAE,0BAA0B;AAC/B,IAAA,SAAS,EAAE,iCAAiC;AAC5C,IAAA,GAAG,EAAE,wBAAwB;AAC7B,IAAA,EAAE,EAAE,sBAAsB;;AAG1B,IAAA,GAAG,EAAE,iBAAiB;AACtB,IAAA,GAAG,EAAE,gBAAgB;AACrB,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,SAAS,EAAE,SAAS;;AAGpB,IAAA,IAAI,EAAE,wBAAwB;AAC9B,IAAA,GAAG,EAAE,sBAAsB;AAC3B,IAAA,IAAI,EAAE,sBAAsB;;;AC7C9B;;AAEG;;ACFH;;AAEG;;;;"}