{"version":3,"file":"kara-ui-alfa-components-form-input-file.mjs","sources":["../../../libs/kara-ui/components/form/input-file/input-file.ts","../../../libs/kara-ui/components/form/input-file/components/helper/files.ts","../../../libs/kara-ui/components/form/input-file/components/file-item/file-item.component.ts","../../../libs/kara-ui/components/form/input-file/components/file-item/file-item.component.html","../../../libs/kara-ui/components/form/input-file/components/drag-zone/drag-zone.component.ts","../../../libs/kara-ui/components/form/input-file/components/drag-zone/drag-zone.component.html","../../../libs/kara-ui/components/form/input-file/input-file.component.ts","../../../libs/kara-ui/components/form/input-file/input-file.component.html","../../../libs/kara-ui/components/form/input-file/kara-ui-alfa-components-form-input-file.ts"],"sourcesContent":["import type { HttpErrorResponse, HttpEvent } from '@angular/common/http';\n\nexport const FORMAT_SIZE_NAME: [string, string, string] = ['B', 'KB', 'MB'];\n\nexport interface KFile {\n  originFile?: File;\n  name: string;\n  size: string | null;\n  invalidSize: boolean;\n  invalidFormat: boolean;\n  isErrorLoading?: boolean;\n  progress?: number;\n  isLoading?: boolean;\n  response?: unknown;\n}\n\nexport interface KUploadingFile {\n  file: File;\n  responseHandler: (response: HttpEvent<unknown> | HttpErrorResponse) => void;\n}\n","import { FORMAT_SIZE_NAME } from '../../input-file';\n\nconst BYTES_PER_KB = 1024;\nconst BYTES_PER_MB = 1024 * BYTES_PER_KB;\n\nexport function formatFileSize(\n  size: number | undefined | null,\n  units: [string, string, string] = FORMAT_SIZE_NAME,\n): string | null {\n  if (size === null || size === undefined) {\n    return null;\n  }\n\n  if (size < BYTES_PER_KB) {\n    return `${size} ${units[0]}`;\n  }\n\n  if (size < BYTES_PER_MB) {\n    return `${(size / BYTES_PER_KB).toFixed(0)} ${units[1]}`;\n  }\n\n  return `${Math.round((size / BYTES_PER_MB) * 100) / 100} ${units[2]}`;\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { AsyncPipe } from '@angular/common';\nimport { KIconComponent } from 'kara-ui-alfa/components/icon';\nimport { KCircleLoaderComponent } from 'kara-ui-alfa/components/loader';\nimport { KButtonComponent } from 'kara-ui-alfa/components/button';\nimport { KLinkComponent } from 'kara-ui-alfa/components/link';\nimport { SetTextVarPipe } from 'kara-ui-alfa/helpers';\nimport { KARA_LANGUAGE } from 'kara-ui-alfa/i18n';\nimport { formatFileSize } from '../helper/files';\nimport { KFile } from '../../input-file';\n\nenum FileStatus {\n  LOADING,\n  INVALID,\n}\n\n@Component({\n  selector: 'k-file-item',\n  templateUrl: './file-item.component.html',\n  styleUrls: ['./file-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [KIconComponent, KCircleLoaderComponent, KButtonComponent, KLinkComponent, AsyncPipe, SetTextVarPipe],\n})\nexport class FileItemComponent {\n  @Input() file!: KFile;\n  @Input() disabled?: boolean;\n  @Input() set maxFileSize(maxFileSize: number) {\n    this.formattedMaxSize = formatFileSize(maxFileSize);\n  }\n\n  @Output() delete = new EventEmitter<KFile>();\n  @Output() repeat = new EventEmitter<KFile>();\n\n  formattedMaxSize?: string | null;\n  readonly language$ = inject(KARA_LANGUAGE).pipe(map(({ inputFile }) => inputFile));\n  readonly type = FileStatus;\n\n  get isInvalid(): boolean {\n    return this.file.isErrorLoading || this.file.invalidSize || this.file.invalidFormat;\n  }\n\n  get status(): FileStatus | null {\n    if (this.isInvalid) {\n      return FileStatus.INVALID;\n    }\n\n    if (this.file.isLoading) {\n      return FileStatus.LOADING;\n    }\n\n    return null;\n  }\n\n  onDelete(): void {\n    this.delete.emit(this.file);\n  }\n\n  onRepeat(): void {\n    this.repeat.emit(this.file);\n  }\n}\n","<div class=\"k-file-item\" [class.k-file-item-invalid]=\"isInvalid\">\n  @switch (status) {\n    @case (type.INVALID) {\n      <k-icon icon=\"warning-m\" class=\"k-file-item-icon k-file-item-icon_invalid\"></k-icon>\n    }\n    @case (type.LOADING) {\n      <div class=\"k-file-item-icon k-file-item-icon_loading\">\n        <k-circle-loader [percent]=\"file.progress\"></k-circle-loader>\n      </div>\n    }\n    @default {\n      <k-icon icon=\"document-m\" class=\"k-file-item-icon\"></k-icon>\n    }\n  }\n\n  <div class=\"k-file-item-content\">\n    <div class=\"k-file-item-name kui-base-default-medium\">{{ file.name }}</div>\n    <div class=\"k-file-item-size kui-base-default-small\">\n      @if (file.isLoading) {\n        {{ (language$ | async)?.loading }}\n      } @else {\n        {{ file.size }}\n      }\n    </div>\n  </div>\n\n  <button\n    kButton\n    theme=\"phantom-low\"\n    size=\"S\"\n    icon=\"dismiss-s\"\n    [onlyIcon]=\"true\"\n    [disabled]=\"disabled\"\n    (click)=\"onDelete()\"\n  ></button>\n</div>\n\n@if (file.invalidSize) {\n  <div class=\"k-file-item-error kui-paragraph-default-xsmall\">\n    {{ (language$ | async)?.invalidFileSize | setTextVar: { maxSize: formattedMaxSize } }}\n  </div>\n}\n\n@if (file.invalidFormat) {\n  <div class=\"k-file-item-error kui-paragraph-default-xsmall\">\n    {{ (language$ | async)?.invalidFileFormat }}\n  </div>\n}\n\n@if (file.isErrorLoading) {\n  <div class=\"k-file-item-error kui-paragraph-default-xsmall\">\n    {{ (language$ | async)?.errorFileLoading }}\n    @if (file.originFile) {\n      <a kLink [showLine]=\"true\" (click)=\"onRepeat()\">{{ (language$ | async)?.repeatUploading }}</a>\n    }\n  </div>\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, inject } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { AsyncPipe } from '@angular/common';\nimport { KIconComponent } from 'kara-ui-alfa/components/icon';\nimport { KLinkComponent } from 'kara-ui-alfa/components/link';\nimport { KARA_LANGUAGE } from 'kara-ui-alfa/i18n';\n\n@Component({\n  selector: 'k-drag-zone',\n  templateUrl: './drag-zone.component.html',\n  styleUrls: ['./drag-zone.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [KIconComponent, KLinkComponent, AsyncPipe],\n})\nexport class KDragZoneComponent {\n  @Input() multiple: boolean = false;\n  @Input() accept?: string;\n  @HostBinding('attr.disabled') @Input() disabled?: boolean;\n\n  @Output() changeFiles = new EventEmitter<FileList | null>();\n\n  isDraggable = false;\n\n  readonly language$ = inject(KARA_LANGUAGE).pipe(map(({ inputFile }) => inputFile));\n\n  onDropped(event: DragEvent): void {\n    event.preventDefault();\n    this.isDraggable = false;\n\n    if (!event.dataTransfer?.types.includes(`Files`)) {\n      return;\n    }\n\n    this.changeFiles.emit(event.dataTransfer.files);\n  }\n\n  onDragEnter(event: DragEvent): void {\n    event.preventDefault();\n    this.isDraggable = event.dataTransfer?.types.includes('Files') ?? false;\n  }\n\n  onDragLeave(event: DragEvent): void {\n    event.preventDefault();\n    this.isDraggable = false;\n  }\n\n  onDragOver(event: DragEvent): void {\n    event.preventDefault();\n  }\n\n  selectFiles(event: Event): void {\n    const target = event.target as HTMLInputElement;\n    this.changeFiles.emit(target.files);\n\n    target.value = '';\n  }\n}\n","<label\n  class=\"k-file-drag-zone\"\n  [class.k-file-drag-zone__hover]=\"isDraggable\"\n  (drop)=\"onDropped($event)\"\n  (dragenter)=\"onDragEnter($event)\"\n  (dragleave)=\"onDragLeave($event)\"\n  (dragover)=\"onDragOver($event)\"\n>\n  <div class=\"k-file-drag-zone-content\">\n    <k-icon icon=\"filecursor-m\" class=\"k-file-drag-zone-icon\"></k-icon>\n\n    <span class=\"kui-base-default-medium\">\n      <a kLink [disabled]=\"disabled\">\n        {{ multiple ? (language$ | async)?.dragZoneLoadingMany : (language$ | async)?.dragZoneLoadingOne }}\n      </a>\n      {{ multiple ? (language$ | async)?.dragZoneExtraMany : (language$ | async)?.dragZoneExtraOne }}\n    </span>\n  </div>\n  <input type=\"file\" class=\"k-file-input\" [multiple]=\"multiple\" [accept]=\"accept\" (change)=\"selectFiles($event)\" />\n</label>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  computed,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { HttpErrorResponse, HttpEvent, HttpEventType, HttpResponse } from '@angular/common/http';\nimport { KAlertComponent } from 'kara-ui-alfa/components/alert';\nimport { SetTextVarPipe } from 'kara-ui-alfa/helpers';\nimport { KInputControlValueAccessor } from 'kara-ui-alfa/components/form/base';\nimport { KARA_LANGUAGE } from 'kara-ui-alfa/i18n';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\nimport { formatFileSize } from './components/helper/files';\nimport { KFile, KUploadingFile } from './input-file';\nimport { FileItemComponent } from './components/file-item/file-item.component';\nimport { KDragZoneComponent } from './components/drag-zone/drag-zone.component';\n\ntype KInputFile = File | any;\ninterface PreventableEvent {\n  defaultPrevented: boolean;\n  preventDefault(): void;\n}\n\nconst createPreventableEvent = (): PreventableEvent => ({\n  defaultPrevented: false,\n  preventDefault() {\n    this.defaultPrevented = true;\n  },\n});\n\nexport type MaxFilesErrorEvent = Readonly<PreventableEvent>;\nexport type MaxTotalSizeErrorEvent = Readonly<PreventableEvent>;\n\n@Component({\n  selector: 'k-input-file',\n  templateUrl: './input-file.component.html',\n  styleUrls: ['./input-file.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [KDragZoneComponent, KAlertComponent, FileItemComponent, SetTextVarPipe],\n})\nexport class KInputFileComponent extends KInputControlValueAccessor<KInputFile[]> implements OnChanges {\n  /** Заголовок */\n  @Input() label?: string;\n  /** Описание */\n  @Input() description?: string;\n\n  /**\n   * Допустимые форматы фалов через запятую(нативный input)\n   * Пример: `.jpg, .jpeg, .png`\n   * `image/*`\n   * */\n  @Input() accept?: string;\n\n  /** Максимальный размер файла в байтах\n   * Пример: 1мб = 1 \\* 1024 \\* 1024\n   */\n  @Input() maxFileSize?: number;\n  /** Максимальное количество файлов, если пусто то без ограничений */\n  readonly maxFiles = input<number>(1);\n\n  /** Суммарный максимальный размер файлов в байтах\n   *  Пример: 20мб = 20 \\* 1024 \\* 1024\n   */\n  readonly maxTotalFileSize = input<number>();\n\n  /** Отображение названия файла */\n  @Input() mapName: (file: KInputFile) => string = this.defaultMapName;\n  /** Отображение размера файла в байтах */\n  @Input() mapSizeInBytes: (file: KInputFile) => number | null = this.defaultMapSize;\n\n  /** Если нужна логика по пред загрузке файла.\n   * Пример:\n   *  ```\n   * uploadFile({ file, responseHandler }: KUploadingFile): void {\n   *  this.http\n   *   .post('https://api', file, { observe: 'events', reportProgress: true })\n   *   .subscribe((response) => {\n   *     responseHandler(response);\n   *   });\n   * }\n   * ```\n   */\n  @Output() uploadFile = new EventEmitter<KUploadingFile>();\n  @Output() valueChange = new EventEmitter<KInputFile[]>();\n  protected readonly maxFileError = output<MaxFilesErrorEvent>();\n  protected readonly maxTotalFileSizeError = output<MaxTotalSizeErrorEvent>();\n\n  filesData: KFile[] = [];\n\n  fileAlreadyExist: string[] = [];\n\n  protected readonly showMaxFilesError = signal(false);\n  protected readonly showMaxTotalFileSizeError = signal(false);\n  protected readonly maxTotalFileSizeFormatted = computed(() => formatFileSize(this.maxTotalFileSize()));\n\n  readonly loadingFile: KFile = { name: '', size: null, invalidFormat: false, invalidSize: false };\n\n  protected readonly language = toSignal(inject(KARA_LANGUAGE).pipe(map(({ inputFile }) => inputFile)));\n\n  protected readonly multiple = computed(() => this.maxFiles() !== 1);\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.value) {\n      this.writeValue(changes.value.currentValue);\n    }\n  }\n\n  onRemove(fileToRemove: KFile): void {\n    this.onTouched();\n\n    if (!this.filesData) {\n      return;\n    }\n\n    this.filesData = this.filesData.filter((file) => file !== fileToRemove);\n\n    this.updateControlValue();\n    this.closeMaxTotalSizeErrorAlert();\n    this.closeMaxFilesErrorAlert();\n  }\n\n  onReload(file: KFile): void {\n    this.initUploadingFile(file);\n  }\n\n  processFiles(files: FileList | null): void {\n    if (!files?.length) {\n      return;\n    }\n\n    this.closeFileAlreadyLoaded();\n\n    const uploadingFiles = Array.from(files);\n\n    const maxFiles = this.maxFiles();\n    if (maxFiles && (this.filesData?.length ?? 0) + uploadingFiles.length > maxFiles) {\n      this.triggerMaxFilesError();\n      return;\n    }\n\n    this.closeMaxFilesErrorAlert();\n\n    const maxTotalFileSize = this.maxTotalFileSize();\n    if (maxTotalFileSize) {\n      const totalSize = [...this.filesData, ...uploadingFiles].reduce((acc, value) => {\n        let size = 0;\n        if (value instanceof File) size = value.size;\n        else if (value.originFile instanceof File) size = value.originFile.size;\n        else if (value.response) size = this.mapSizeInBytes(value.response) || 0;\n        return acc + size;\n      }, 0);\n\n      if (totalSize > maxTotalFileSize) {\n        this.triggerMaxTotalFileSizeError();\n        return;\n      }\n    }\n    this.closeMaxTotalSizeErrorAlert();\n\n    const newFiles = (this.multiple() ? uploadingFiles : [uploadingFiles[0]]).filter((file) => {\n      const isExist = this.filesData.some(({ name }) => name === file.name);\n\n      if (isExist) {\n        this.fileAlreadyExist.push(file.name);\n      }\n\n      return !isExist;\n    });\n\n    const fileList = newFiles.map<KFile>((file) => ({\n      originFile: file,\n      name: file.name,\n      size: formatFileSize(file.size),\n      invalidSize: !!this.maxFileSize && file.size > this.maxFileSize,\n      invalidFormat: !this.isFormatAcceptable(file),\n    }));\n\n    this.filesData = (this.filesData || []).concat(fileList);\n    this.onTouched();\n\n    fileList.forEach((file) => this.initUploadingFile(file));\n  }\n\n  closeMaxTotalSizeErrorAlert(): void {\n    this.showMaxTotalFileSizeError.set(false);\n  }\n\n  closeMaxFilesErrorAlert(): void {\n    this.showMaxFilesError.set(false);\n  }\n\n  closeFileAlreadyLoaded(): void {\n    this.fileAlreadyExist = [];\n  }\n\n  filesTrackBy(index: number, file: KFile): File | string | number {\n    return file.originFile || file.name || index;\n  }\n\n  private initUploadingFile(file: KFile): void {\n    if (file.invalidFormat || file.invalidSize || !file.originFile) {\n      return;\n    }\n\n    if (!this.uploadFile.observed) {\n      this.responseHandler(new HttpResponse({ body: file.originFile }), file.originFile);\n    }\n\n    this.uploadFile.emit({\n      file: file.originFile,\n      responseHandler: (response) => file.originFile && this.responseHandler(response, file.originFile),\n    });\n  }\n\n  private updateControlValue(): void {\n    const data = (this.filesData || [])\n      .filter(\n        ({ invalidFormat, invalidSize, isErrorLoading, isLoading }) =>\n          !invalidFormat && !invalidSize && !isErrorLoading && !isLoading,\n      )\n      .map<KInputFile>((file) => {\n        if (file.response) {\n          return file.response;\n        }\n\n        if (file.originFile) {\n          return file.originFile;\n        }\n\n        return { name: file.name };\n      });\n\n    this.value = data;\n\n    this.onChange(data);\n    this.valueChange.emit(data);\n  }\n\n  private isFormatAcceptable(file: File): boolean {\n    if (!this.accept) {\n      return true;\n    }\n\n    const extension = `.${(file.name.split(`.`).pop() || ``).toLowerCase()}`;\n\n    return this.accept\n      .toLowerCase()\n      .split(',')\n      .map((format) => format.trim())\n      .some(\n        (format) =>\n          format === extension ||\n          format === file.type ||\n          (format.split(`/`)[1] === `*` && file.type.split(`/`)[0] === format.split(`/`)[0]),\n      );\n  }\n\n  private responseHandler(response: HttpEvent<unknown> | HttpErrorResponse, uploadingFile: File): void {\n    let progress: number = 0;\n    let isLoading: boolean = false;\n    let isErrorLoading: boolean = false;\n    let body: unknown;\n\n    if (response instanceof HttpErrorResponse) {\n      isLoading = false;\n      isErrorLoading = true;\n      progress = 0;\n    } else if (response.type === HttpEventType.Response) {\n      progress = 100;\n      isLoading = false;\n      body = response.body;\n    } else if (response.type === HttpEventType.UploadProgress) {\n      progress = response.total ? Math.round((response.loaded / response.total) * 100) : 100;\n      isLoading = true;\n    } else if (\n      [HttpEventType.Sent, HttpEventType.DownloadProgress, HttpEventType.ResponseHeader].some(\n        (type) => type === response.type,\n      )\n    ) {\n      isLoading = true;\n    }\n\n    this.updateFile(uploadingFile, progress, isLoading, isErrorLoading, body);\n  }\n\n  private updateFile(\n    uploadingFile: File,\n    progress: number,\n    isLoading: boolean,\n    isErrorLoading: boolean,\n    response?: unknown,\n  ): void {\n    if (!this.filesData) {\n      return;\n    }\n\n    this.filesData = this.filesData.map((file) => {\n      if (file.originFile === uploadingFile) {\n        return {\n          ...file,\n          progress,\n          isLoading,\n          isErrorLoading,\n          response,\n        };\n      }\n\n      return file;\n    });\n\n    if (this.filesData.some((file) => file.isLoading) && !this.control?.control?.errors?.kFileLoading) {\n      this.control?.control?.setErrors({ kFileLoading: true });\n    }\n\n    if (!isLoading && !isErrorLoading) {\n      this.updateControlValue();\n    }\n\n    this.cdr.markForCheck();\n  }\n\n  override writeValue(value: KInputFile[] | undefined): void {\n    this.filesData = (value || []).map((file) => ({\n      invalidFormat: false,\n      invalidSize: false,\n      name: this.mapName(file),\n      size: formatFileSize(this.mapSizeInBytes(file)),\n      response: file,\n    }));\n\n    super.writeValue(value);\n  }\n\n  private defaultMapName(file: KInputFile): string {\n    if (file instanceof File) {\n      return file.name;\n    }\n\n    return '';\n  }\n\n  private defaultMapSize(file: KInputFile): number | null {\n    if (file instanceof File) {\n      return file.size;\n    }\n\n    return null;\n  }\n\n  private triggerMaxFilesError(): void {\n    const event = createPreventableEvent();\n\n    this.maxFileError.emit(event);\n    if (!event.defaultPrevented) {\n      this.showMaxFilesError.set(true);\n    }\n  }\n\n  private triggerMaxTotalFileSizeError(): void {\n    const event = createPreventableEvent();\n\n    this.maxTotalFileSizeError.emit(event);\n    if (!event.defaultPrevented) {\n      this.showMaxTotalFileSizeError.set(true);\n    }\n  }\n}\n","<div class=\"k-file-container\">\n  <div class=\"k-file-header\">\n    @if (label) {\n      <div class=\"k-file-label kui-base-default-medium\">{{ label }}</div>\n    }\n    @if (description) {\n      <div class=\"k-file-hint kui-base-default-xsmall\">{{ description }}</div>\n    }\n  </div>\n\n  @let multi = multiple();\n  @if (multi || (!multi && !filesData?.length)) {\n    <k-drag-zone\n      [attr.id]=\"id\"\n      [accept]=\"accept\"\n      [multiple]=\"multi\"\n      [disabled]=\"disabled\"\n      (changeFiles)=\"processFiles($event)\"\n    ></k-drag-zone>\n  }\n</div>\n\n@let lang = language();\n\n@if (showMaxFilesError()) {\n  <k-alert status=\"warning\" [closable]=\"true\" (closed)=\"closeMaxFilesErrorAlert()\">\n    {{ lang?.maxFileErrorDescription | setTextVar: { maxFiles: maxFiles() } }}\n  </k-alert>\n}\n\n@if (showMaxTotalFileSizeError()) {\n  <k-alert status=\"warning\" [closable]=\"true\" (closed)=\"closeMaxTotalSizeErrorAlert()\">\n    {{ lang ? (lang.maxTotalFileSizeError | setTextVar: { maxTotalFileSize: maxTotalFileSizeFormatted() }) : '' }}\n  </k-alert>\n}\n@if (fileAlreadyExist.length) {\n  <k-alert status=\"warning\" [closable]=\"true\" (closed)=\"closeFileAlreadyLoaded()\">\n    {{ lang ? (lang.fileAlreadyLoaded | setTextVar: { name: fileAlreadyExist }) : '' }}\n  </k-alert>\n}\n\n@if (isLoading) {\n  <k-file-item class=\"kui-skeleton\" [file]=\"loadingFile\"></k-file-item>\n} @else {\n  @for (file of filesData; track filesTrackBy($index, file)) {\n    <k-file-item\n      [file]=\"file\"\n      [maxFileSize]=\"maxFileSize\"\n      [disabled]=\"disabled\"\n      (repeat)=\"onReload($event)\"\n      (delete)=\"onRemove($event)\"\n    ></k-file-item>\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":";;;;;;;;;;;;;;;;AAEO,MAAM,gBAAgB,GAA6B,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;;ACA3E,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,YAAY,GAAG,IAAI,GAAG,YAAY;SAExB,cAAc,CAC5B,IAA+B,EAC/B,QAAkC,gBAAgB,EAAA;IAElD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AACvC,QAAA,OAAO,IAAI;;AAGb,IAAA,IAAI,IAAI,GAAG,YAAY,EAAE;QACvB,OAAO,CAAA,EAAG,IAAI,CAAI,CAAA,EAAA,KAAK,CAAC,CAAC,CAAC,EAAE;;AAG9B,IAAA,IAAI,IAAI,GAAG,YAAY,EAAE;AACvB,QAAA,OAAO,GAAG,CAAC,IAAI,GAAG,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,KAAK,CAAC,CAAC,CAAC,EAAE;;IAG1D,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,YAAY,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;AACvE;;ACVA,IAAK,UAGJ;AAHD,CAAA,UAAK,UAAU,EAAA;AACb,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACT,CAAC,EAHI,UAAU,KAAV,UAAU,GAGd,EAAA,CAAA,CAAA;MASY,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;AAcY,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAS;AAClC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAS;QAGnC,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS,CAAC,CAAC;QACzE,IAAI,CAAA,IAAA,GAAG,UAAU;AAyB3B;IAlCC,IAAa,WAAW,CAAC,WAAmB,EAAA;AAC1C,QAAA,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,WAAW,CAAC;;AAUrD,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa;;AAGrF,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,OAAO,UAAU,CAAC,OAAO;;AAG3B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACvB,OAAO,UAAU,CAAC,OAAO;;AAG3B,QAAA,OAAO,IAAI;;IAGb,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG7B,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;8GAnClB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ECxB9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qqDAyDA,EDnCY,MAAA,EAAA,CAAA,ugCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,EAAE,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EAAE,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,EAAE,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,yCAAE,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAElG,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,mBAGN,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,cAAc,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,qqDAAA,EAAA,MAAA,EAAA,CAAA,ugCAAA,CAAA,EAAA;8BAGrG,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACY,WAAW,EAAA,CAAA;sBAAvB;gBAIS,MAAM,EAAA,CAAA;sBAAf;gBACS,MAAM,EAAA,CAAA;sBAAf;;;MElBU,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;QAQW,IAAQ,CAAA,QAAA,GAAY,KAAK;AAIxB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAmB;QAE3D,IAAW,CAAA,WAAA,GAAG,KAAK;QAEV,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS,CAAC,CAAC;AAiCnF;AA/BC,IAAA,SAAS,CAAC,KAAgB,EAAA;QACxB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AAExB,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA,KAAA,CAAO,CAAC,EAAE;YAChD;;QAGF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;;AAGjD,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK;;AAGzE,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;AAG1B,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;;AAGxB,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAEnC,QAAA,MAAM,CAAC,KAAK,GAAG,EAAE;;8GAxCR,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,sPCd/B,m0BAoBA,EAAA,MAAA,EAAA,CAAA,u7BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDRY,cAAc,EAAE,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,yHAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAExC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;+BACE,aAAa,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,m0BAAA,EAAA,MAAA,EAAA,CAAA,u7BAAA,CAAA,EAAA;8BAG3C,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACsC,QAAQ,EAAA,CAAA;sBAA9C,WAAW;uBAAC,eAAe;;sBAAG;gBAErB,WAAW,EAAA,CAAA;sBAApB;;;AEaH,MAAM,sBAAsB,GAAG,OAAyB;AACtD,IAAA,gBAAgB,EAAE,KAAK;IACvB,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;KAC7B;AACF,CAAA,CAAC;AAYI,MAAO,mBAAoB,SAAQ,0BAAwC,CAAA;AAPjF,IAAA,WAAA,GAAA;;;AAyBW,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,CAAC,CAAC;AAEpC;;AAEG;QACM,IAAgB,CAAA,gBAAA,GAAG,KAAK,EAAU;;AAGlC,QAAA,IAAA,CAAA,OAAO,GAAiC,IAAI,CAAC,cAAc;;AAE3D,QAAA,IAAA,CAAA,cAAc,GAAwC,IAAI,CAAC,cAAc;AAElF;;;;;;;;;;;AAWG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAkB;AAC/C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAgB;QACrC,IAAY,CAAA,YAAA,GAAG,MAAM,EAAsB;QAC3C,IAAqB,CAAA,qBAAA,GAAG,MAAM,EAA0B;QAE3E,IAAS,CAAA,SAAA,GAAY,EAAE;QAEvB,IAAgB,CAAA,gBAAA,GAAa,EAAE;AAEZ,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,KAAK,CAAC;AACzC,QAAA,IAAA,CAAA,yBAAyB,GAAG,QAAQ,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAE7F,QAAA,IAAA,CAAA,WAAW,GAAU,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;QAE7E,IAAQ,CAAA,QAAA,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAACA,KAAG,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC;AAElF,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AA2QpE;AAzQC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;;;AAI/C,IAAA,QAAQ,CAAC,YAAmB,EAAA;QAC1B,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;;AAGF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,YAAY,CAAC;QAEvE,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,uBAAuB,EAAE;;AAGhC,IAAA,QAAQ,CAAC,IAAW,EAAA;AAClB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;AAG9B,IAAA,YAAY,CAAC,KAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;YAClB;;QAGF,IAAI,CAAC,sBAAsB,EAAE;QAE7B,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAExC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,QAAQ,EAAE;YAChF,IAAI,CAAC,oBAAoB,EAAE;YAC3B;;QAGF,IAAI,CAAC,uBAAuB,EAAE;AAE9B,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAChD,IAAI,gBAAgB,EAAE;AACpB,YAAA,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;gBAC7E,IAAI,IAAI,GAAG,CAAC;gBACZ,IAAI,KAAK,YAAY,IAAI;AAAE,oBAAA,IAAI,GAAG,KAAK,CAAC,IAAI;AACvC,qBAAA,IAAI,KAAK,CAAC,UAAU,YAAY,IAAI;AAAE,oBAAA,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI;qBAClE,IAAI,KAAK,CAAC,QAAQ;oBAAE,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACxE,OAAO,GAAG,GAAG,IAAI;aAClB,EAAE,CAAC,CAAC;AAEL,YAAA,IAAI,SAAS,GAAG,gBAAgB,EAAE;gBAChC,IAAI,CAAC,4BAA4B,EAAE;gBACnC;;;QAGJ,IAAI,CAAC,2BAA2B,EAAE;QAElC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,cAAc,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,KAAI;YACxF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;YAErE,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;YAGvC,OAAO,CAAC,OAAO;AACjB,SAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAQ,CAAC,IAAI,MAAM;AAC9C,YAAA,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,YAAA,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW;AAC/D,YAAA,aAAa,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC9C,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;IAG1D,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG3C,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;;IAGnC,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;IAG5B,YAAY,CAAC,KAAa,EAAE,IAAW,EAAA;QACrC,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK;;AAGtC,IAAA,iBAAiB,CAAC,IAAW,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC9D;;AAGF,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;;AAGpF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,UAAU;AACrB,YAAA,eAAe,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;AAClG,SAAA,CAAC;;IAGI,kBAAkB,GAAA;QACxB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;aAC/B,MAAM,CACL,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,KACxD,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS;AAElE,aAAA,GAAG,CAAa,CAAC,IAAI,KAAI;AACxB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO,IAAI,CAAC,QAAQ;;AAGtB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,OAAO,IAAI,CAAC,UAAU;;AAGxB,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAC5B,SAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGrB,IAAA,kBAAkB,CAAC,IAAU,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,IAAI;;QAGb,MAAM,SAAS,GAAG,CAAI,CAAA,EAAA,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAA,CAAE,EAAE,WAAW,EAAE,CAAA,CAAE;QAExE,OAAO,IAAI,CAAC;AACT,aAAA,WAAW;aACX,KAAK,CAAC,GAAG;aACT,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE;aAC7B,IAAI,CACH,CAAC,MAAM,KACL,MAAM,KAAK,SAAS;YACpB,MAAM,KAAK,IAAI,CAAC,IAAI;AACpB,aAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAG,CAAA,CAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACrF;;IAGG,eAAe,CAAC,QAAgD,EAAE,aAAmB,EAAA;QAC3F,IAAI,QAAQ,GAAW,CAAC;QACxB,IAAI,SAAS,GAAY,KAAK;QAC9B,IAAI,cAAc,GAAY,KAAK;AACnC,QAAA,IAAI,IAAa;AAEjB,QAAA,IAAI,QAAQ,YAAY,iBAAiB,EAAE;YACzC,SAAS,GAAG,KAAK;YACjB,cAAc,GAAG,IAAI;YACrB,QAAQ,GAAG,CAAC;;aACP,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE;YACnD,QAAQ,GAAG,GAAG;YACd,SAAS,GAAG,KAAK;AACjB,YAAA,IAAI,GAAG,QAAQ,CAAC,IAAI;;aACf,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,cAAc,EAAE;YACzD,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,GAAG;YACtF,SAAS,GAAG,IAAI;;AACX,aAAA,IACL,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CACrF,CAAC,IAAI,KAAK,IAAI,KAAK,QAAQ,CAAC,IAAI,CACjC,EACD;YACA,SAAS,GAAG,IAAI;;AAGlB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,CAAC;;IAGnE,UAAU,CAChB,aAAmB,EACnB,QAAgB,EAChB,SAAkB,EAClB,cAAuB,EACvB,QAAkB,EAAA;AAElB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;;AAGF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC3C,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,EAAE;gBACrC,OAAO;AACL,oBAAA,GAAG,IAAI;oBACP,QAAQ;oBACR,SAAS;oBACT,cAAc;oBACd,QAAQ;iBACT;;AAGH,YAAA,OAAO,IAAI;AACb,SAAC,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;AACjG,YAAA,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;AAG1D,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE;YACjC,IAAI,CAAC,kBAAkB,EAAE;;AAG3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAGhB,IAAA,UAAU,CAAC,KAA+B,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM;AAC5C,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACxB,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC/C,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;AAEH,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;;AAGjB,IAAA,cAAc,CAAC,IAAgB,EAAA;AACrC,QAAA,IAAI,IAAI,YAAY,IAAI,EAAE;YACxB,OAAO,IAAI,CAAC,IAAI;;AAGlB,QAAA,OAAO,EAAE;;AAGH,IAAA,cAAc,CAAC,IAAgB,EAAA;AACrC,QAAA,IAAI,IAAI,YAAY,IAAI,EAAE;YACxB,OAAO,IAAI,CAAC,IAAI;;AAGlB,QAAA,OAAO,IAAI;;IAGL,oBAAoB,GAAA;AAC1B,QAAA,MAAM,KAAK,GAAG,sBAAsB,EAAE;AAEtC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;;IAI5B,4BAA4B,GAAA;AAClC,QAAA,MAAM,KAAK,GAAG,sBAAsB,EAAE;AAEtC,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;AAC3B,YAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC;;;8GAnUjC,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,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,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjDhC,grDAsDA,EDPY,MAAA,EAAA,CAAA,sTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,8HAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAErE,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAGP,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,grDAAA,EAAA,MAAA,EAAA,CAAA,sTAAA,CAAA,EAAA;8BAIxE,KAAK,EAAA,CAAA;sBAAb;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAOQ,MAAM,EAAA,CAAA;sBAAd;gBAKQ,WAAW,EAAA,CAAA;sBAAnB;gBAUQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAcS,UAAU,EAAA,CAAA;sBAAnB;gBACS,WAAW,EAAA,CAAA;sBAApB;;;AE5FH;;AAEG;;;;"}