{"version":3,"file":"upload.mjs","sources":["../../src/upload/upload.tsx"],"sourcesContent":["import { defineComponent, ref, computed, watch, TransitionGroup, Teleport } from 'vue';\nimport type { InputHTMLAttributes } from 'vue';\nimport {\n  AddIcon,\n  LoadingIcon,\n  CloseIcon,\n  CloseCircleIcon,\n  UploadIcon,\n  DeleteIcon,\n  ErrorCircleFilledIcon,\n  File1Icon,\n  FileZipFilledIcon,\n  FileExcelFilledIcon,\n  FilePdfFilledIcon,\n  FileWordFilledIcon,\n  FilePowerpointFilledIcon,\n  VideoFilledIcon,\n} from 'tdesign-icons-vue-next';\nimport { isBoolean } from 'lodash-es';\nimport TImage from '../image';\nimport TImageViewer from '../image-viewer';\nimport TButton from '../button';\nimport { TdUploadProps, UploadFile } from './type';\nimport UploadProps from './props';\nimport useUpload from './hooks/useUpload';\nimport useDrag from './hooks/useDrag';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass, useConfig } from '../hooks/useClass';\nimport {\n  FILE_PDF_REGEXP,\n  FILE_EXCEL_REGEXP,\n  FILE_WORD_REGEXP,\n  FILE_PPT_REGEXP,\n  VIDEO_REGEXP,\n  AUDIO_REGEXP,\n  returnFileSize,\n} from '../_common/js/upload/utils';\n\nconst FILE_ZIP_REGEXP = /(\\.zip|\\.rar|\\.7z|\\.tar|\\.gz|\\.bz2|\\.xz)/i;\n\nexport default defineComponent({\n  name: 'TUpload',\n  components: {\n    TImage,\n  },\n  props: UploadProps,\n  emits: [\n    'update:files',\n    'update:modelValue',\n    'change',\n    'fail',\n    'preview',\n    'progress',\n    'remove',\n    'success',\n    'select-change',\n    'validate',\n    'click-upload',\n    'drag',\n    'drop',\n  ],\n  setup(props, { expose }) {\n    const uploadClass = usePrefixClass('upload');\n    const { globalConfig } = useConfig('upload');\n\n    const {\n      disabled,\n      displayFiles,\n      toUploadFiles,\n      uploading,\n      inputRef,\n      uploadFilePercent,\n      uploadFiles,\n      isImageFile,\n      onNormalFileChange,\n      onInnerRemove,\n      cancelUpload,\n      setUploadValue,\n    } = useUpload(props);\n\n    const renderTNodeJSX = useTNodeJSX();\n\n    const showViewer = ref(false);\n    const initialIndex = ref(0);\n\n    const {\n      dragging,\n      dragIndex,\n      sortedFiles,\n      cloneVisible,\n      cloneStyle,\n      cloneFile,\n      getDragKey,\n      syncFiles,\n      onTouchstart,\n      onTouchmove,\n      onTouchend,\n      onTouchcancel,\n      dragEnded,\n    } = useDrag(props, uploadClass, setUploadValue, toUploadFiles);\n\n    watch(\n      [() => displayFiles.value, () => displayFiles.value?.length],\n      ([files]) => {\n        if (files) {\n          syncFiles(files);\n        }\n      },\n      { immediate: true },\n    );\n\n    const rootClass = computed(() => [\n      uploadClass.value,\n      `${uploadClass.value}--${props.theme || 'grid'}`,\n      {\n        [`${uploadClass.value}--disabled`]: props.disabled,\n        [`${uploadClass.value}--dragging`]: props.draggable && dragging.value,\n      },\n    ]);\n\n    const previewImgs = computed(() =>\n      displayFiles.value.filter((item) => isImageFile(item)).map((item) => item.url as string),\n    );\n\n    const handlePreview = (e: MouseEvent, file: UploadFile, index: number) => {\n      if (dragging.value) return;\n      // 拖拽刚结束 300ms 内屏蔽误触预览\n      if (dragEnded.value) return;\n\n      props.onPreview?.({ e, file, index });\n      if (!isImageFile(file)) return;\n\n      const imageIndex = displayFiles.value.filter((item, i) => isImageFile(item) && i <= index).length - 1;\n      initialIndex.value = Math.max(0, imageIndex);\n      showViewer.value = props.preview;\n    };\n\n    const triggerUpload = (e: MouseEvent) => {\n      if (disabled?.value) return;\n      inputRef.value?.click();\n      props.onClickUpload?.({ e });\n    };\n\n    const handleImageClose = ({ visible }: { visible: boolean }) => {\n      showViewer.value = visible;\n    };\n\n    const getFileTypeIcon = (file: UploadFile) => {\n      const mime = file.raw?.type || file.type || '';\n      const fileType = `${file.name || ''} ${file.url || ''} ${mime}`;\n      const baseClass = `${uploadClass.value}__file-type`;\n      if (FILE_PDF_REGEXP.test(fileType)) return <FilePdfFilledIcon class={[baseClass, `${baseClass}--pdf`]} />;\n      if (FILE_EXCEL_REGEXP.test(fileType) || /spreadsheetml/i.test(mime))\n        return <FileExcelFilledIcon class={[baseClass, `${baseClass}--excel`]} />;\n      if (FILE_PPT_REGEXP.test(fileType) || /presentationml/i.test(mime))\n        return <FilePowerpointFilledIcon class={[baseClass, `${baseClass}--ppt`]} />;\n      if (FILE_WORD_REGEXP.test(fileType) || /wordprocessingml/i.test(mime))\n        return <FileWordFilledIcon class={[baseClass, `${baseClass}--word`]} />;\n      if (VIDEO_REGEXP.test(fileType) || AUDIO_REGEXP.test(fileType))\n        return <VideoFilledIcon class={[baseClass, `${baseClass}--media`]} />;\n      if (FILE_ZIP_REGEXP.test(fileType) || /zip|compressed/i.test(mime))\n        return <FileZipFilledIcon class={[baseClass, `${baseClass}--zip`]} />;\n      return <File1Icon class={[baseClass, `${baseClass}--other`]} />;\n    };\n\n    const renderStatus = (file: UploadFile) => {\n      if (file.status !== 'fail' && file.status !== 'progress') return null;\n      return (\n        <div class={`${uploadClass.value}__progress-mask`}>\n          {file.status === 'progress' ? (\n            <>\n              <LoadingIcon class={`${uploadClass.value}__progress-loading`} />\n              <div class={`${uploadClass.value}__progress-text`}>\n                {file.percent ? `${file.percent}%` : globalConfig.value.progress.uploadingText}\n              </div>\n            </>\n          ) : (\n            <>\n              <CloseCircleIcon class={`${uploadClass.value}__progress-fail-icon`} />\n              <div class={`${uploadClass.value}__progress-text`}>{globalConfig.value.progress.failText}</div>\n            </>\n          )}\n        </div>\n      );\n    };\n\n    const reachMax = computed(() => props.max > 0 && displayFiles.value?.length >= props.max);\n\n    const renderAddContent = () => {\n      if (!props.addBtn || reachMax.value) return null;\n\n      const addBtnNode = renderTNodeJSX('addBtn', <AddIcon />);\n      const addContentNode = renderTNodeJSX('addContent');\n\n      return (\n        <div key=\"add-btn\" class={`${uploadClass.value}__item ${uploadClass.value}__item--add`} onClick={triggerUpload}>\n          <div class={`${uploadClass.value}__add-icon`}>{addContentNode || addBtnNode}</div>\n        </div>\n      );\n    };\n\n    const renderGridLayout = () => {\n      const files = dragging.value && sortedFiles.value.length > 0 ? sortedFiles.value : displayFiles.value;\n      return (\n        <TransitionGroup name={`${uploadClass.value}-drag`}>\n          {files.map((file, index) => {\n            const isFileItem = !isImageFile(file) && !file.url;\n            const showFileContent = isFileItem && file.status !== 'progress' && file.status !== 'fail';\n            const showRemoveBtn = isBoolean(file.removeBtn) ? file.removeBtn : props.removeBtn;\n            const showDisabledMask =\n              disabled?.value && !isFileItem && file.status !== 'progress' && file.status !== 'fail';\n            const isDragged = dragging.value && dragIndex.value === index;\n            const fileKey = getDragKey(file);\n\n            return (\n              <div\n                key={fileKey}\n                data-drag-key={fileKey}\n                class={[\n                  `${uploadClass.value}__item`,\n                  {\n                    [`${uploadClass.value}__item--file`]: isFileItem,\n                    [`${uploadClass.value}__item--dragging`]: isDragged,\n                  },\n                ]}\n                style={{ opacity: isDragged ? 0 : undefined }}\n                onTouchstart={(e: TouchEvent) => onTouchstart(e, index)}\n                onTouchmove={(e: TouchEvent) => onTouchmove(e)}\n                onTouchend={(e: TouchEvent) => onTouchend(e)}\n                onTouchcancel={(e: TouchEvent) => onTouchcancel(e)}\n              >\n                {file.url && (\n                  <t-image\n                    class={`${uploadClass.value}__image`}\n                    shape=\"round\"\n                    {...(props.imageProps as TdUploadProps['imageProps'])}\n                    src={file.url}\n                    onClick={(e: MouseEvent) => handlePreview(e, file, index)}\n                  />\n                )}\n                {showFileContent && (\n                  <div\n                    class={`${uploadClass.value}__file-content`}\n                    onClick={(e: MouseEvent) => handlePreview(e, file, index)}\n                  >\n                    <div class={`${uploadClass.value}__file-icon`}>{getFileTypeIcon(file)}</div>\n                    <div class={`${uploadClass.value}__file-name`}>{file.name}</div>\n                  </div>\n                )}\n                {renderStatus(file)}\n                {showDisabledMask && <div class={`${uploadClass.value}__disabled-mask`} />}\n                {showRemoveBtn && (\n                  <CloseIcon\n                    class={`${uploadClass.value}__delete-btn`}\n                    onClick={({ e }: any) => onInnerRemove({ e, file, index })}\n                  />\n                )}\n              </div>\n            );\n          })}\n          {renderAddContent()}\n        </TransitionGroup>\n      );\n    };\n\n    const renderListItemIcon = (file: UploadFile) => {\n      if (file.status === 'progress') {\n        return <LoadingIcon class={`${uploadClass.value}__list-item-loading`} />;\n      }\n      if (file.status === 'fail') {\n        return <ErrorCircleFilledIcon class={`${uploadClass.value}__list-item-error-icon`} />;\n      }\n      if (isImageFile(file) && file.url) {\n        return (\n          <div style={{ position: 'relative', flexShrink: 0 }}>\n            <t-image\n              class={`${uploadClass.value}__list-item-thumbnail`}\n              shape=\"round\"\n              {...(props.imageProps as TdUploadProps['imageProps'])}\n              src={file.url}\n            />\n            {disabled?.value && <div class={`${uploadClass.value}__disabled-mask`} />}\n          </div>\n        );\n      }\n      return <span class={`${uploadClass.value}__list-item-icon`}>{getFileTypeIcon(file)}</span>;\n    };\n\n    const renderListItemSubText = (file: UploadFile) => {\n      if (file.status === 'progress') {\n        const percentText = file.percent ? ` ${file.percent}%` : '';\n        return `${globalConfig.value.progress.uploadingText}${percentText}`;\n      }\n      if (file.status === 'fail') {\n        return file.response?.error || globalConfig.value.progress.failText;\n      }\n      if (file.size != null) return returnFileSize(file.size);\n      return '';\n    };\n\n    const renderListLayout = () => {\n      const addContentNode = renderTNodeJSX('addContent');\n      const addBtnNode = renderTNodeJSX('addBtn');\n      const defaultTriggerBtn = (\n        <TButton theme=\"primary\" size=\"medium\" disabled={disabled?.value}>\n          {{\n            icon: () => <UploadIcon />,\n            default: () => 'Upload',\n          }}\n        </TButton>\n      );\n      const triggerNode = addContentNode || addBtnNode || defaultTriggerBtn;\n      const showTrigger = props.addBtn && !reachMax.value;\n\n      const files = dragging.value && sortedFiles.value.length > 0 ? sortedFiles.value : displayFiles.value;\n\n      return (\n        <>\n          {showTrigger && (\n            <div class={`${uploadClass.value}__list-trigger`} onClick={triggerUpload}>\n              {triggerNode}\n            </div>\n          )}\n          {files.length > 0 && (\n            <div class={`${uploadClass.value}__list`}>\n              <TransitionGroup name={`${uploadClass.value}-drag`}>\n                {files.map((file, index) => {\n                  const itemClass = [\n                    `${uploadClass.value}__list-item`,\n                    {\n                      [`${uploadClass.value}__list-item--fail`]: file.status === 'fail',\n                      [`${uploadClass.value}__list-item--progress`]: file.status === 'progress',\n                      [`${uploadClass.value}__list-item--dragging`]: dragging.value && dragIndex.value === index,\n                    },\n                  ];\n                  const showRemoveBtn = isBoolean(file.removeBtn) ? file.removeBtn : props.removeBtn;\n                  const isDragged = dragging.value && dragIndex.value === index;\n\n                  return (\n                    <div\n                      key={getDragKey(file)}\n                      data-drag-key={getDragKey(file)}\n                      class={itemClass}\n                      style={{ opacity: isDragged ? 0 : undefined }}\n                      onClick={(e: MouseEvent) => handlePreview(e, file, index)}\n                      onTouchstart={(e: TouchEvent) => onTouchstart(e, index)}\n                      onTouchmove={(e: TouchEvent) => onTouchmove(e)}\n                      onTouchend={(e: TouchEvent) => onTouchend(e)}\n                      onTouchcancel={(e: TouchEvent) => onTouchcancel(e)}\n                    >\n                      {renderListItemIcon(file)}\n                      <div class={`${uploadClass.value}__list-item-content`}>\n                        <div class={`${uploadClass.value}__list-item-name`}>{file.name}</div>\n                        <div class={`${uploadClass.value}__list-item-size`}>{renderListItemSubText(file)}</div>\n                      </div>\n                      <div class={`${uploadClass.value}__list-item-action`}>\n                        {showRemoveBtn && !dragging.value && (\n                          <DeleteIcon\n                            class={`${uploadClass.value}__list-item-delete`}\n                            onClick={({ e }: any) => {\n                              e?.stopPropagation?.();\n                              onInnerRemove({ e, file, index });\n                            }}\n                          />\n                        )}\n                      </div>\n                    </div>\n                  );\n                })}\n              </TransitionGroup>\n            </div>\n          )}\n        </>\n      );\n    };\n\n    const renderDragClone = () => {\n      if (!cloneVisible.value || !cloneFile.value) return null;\n\n      const file = cloneFile.value;\n      const isList = props.theme === 'list';\n\n      // 列表布局\n      if (isList) {\n        return (\n          <Teleport to=\"body\">\n            <div class={`${uploadClass.value}__list-item`} style={cloneStyle.value}>\n              {renderListItemIcon(file)}\n              <div class={`${uploadClass.value}__list-item-content`}>\n                <div class={`${uploadClass.value}__list-item-name`}>{file.name}</div>\n                <div class={`${uploadClass.value}__list-item-size`}>{renderListItemSubText(file)}</div>\n              </div>\n            </div>\n          </Teleport>\n        );\n      }\n\n      // 宫格布局\n      const isFileItem = !isImageFile(file) && !file.url;\n      const showFileContent = isFileItem && file.status !== 'progress' && file.status !== 'fail';\n\n      return (\n        <Teleport to=\"body\">\n          <div class={[`${uploadClass.value}__item`, `${uploadClass.value}__drag-clone`]} style={cloneStyle.value}>\n            {file.url && (\n              <t-image\n                class={`${uploadClass.value}__image`}\n                shape=\"round\"\n                {...(props.imageProps as TdUploadProps['imageProps'])}\n                src={file.url}\n              />\n            )}\n            {showFileContent && (\n              <div class={`${uploadClass.value}__file-content`}>\n                <div class={`${uploadClass.value}__file-icon`}>{getFileTypeIcon(file)}</div>\n                <div class={`${uploadClass.value}__file-name`}>{file.name}</div>\n              </div>\n            )}\n            {renderStatus(file)}\n          </div>\n        </Teleport>\n      );\n    };\n\n    expose({\n      upload: inputRef.value,\n      uploading,\n      triggerUpload,\n      uploadFiles,\n      cancelUpload,\n      uploadFilePercent,\n    });\n\n    return () => (\n      <div class={rootClass.value}>\n        {props.theme === 'list' ? renderListLayout() : renderGridLayout()}\n        <input\n          ref={inputRef}\n          type=\"file\"\n          multiple={props.multiple}\n          hidden\n          {...(props.capture ? { capture: props.capture as InputHTMLAttributes['capture'] } : {})}\n          accept={props.accept}\n          onChange={onNormalFileChange}\n        />\n        <TImageViewer\n          visible={showViewer.value}\n          images={previewImgs.value}\n          index={initialIndex.value}\n          onClose={handleImageClose}\n        />\n        {renderDragClone()}\n      </div>\n    );\n  },\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","FILE_ZIP_REGEXP","defineComponent","name","components","TImage","props","UploadProps","emits","setup","_ref","expose","uploadClass","usePrefixClass","_useConfig","useConfig","globalConfig","_useUpload","useUpload","disabled","displayFiles","toUploadFiles","uploading","inputRef","uploadFilePercent","uploadFiles","isImageFile","onNormalFileChange","onInnerRemove","cancelUpload","setUploadValue","renderTNodeJSX","useTNodeJSX","showViewer","ref","initialIndex","_useDrag","useDrag","dragging","dragIndex","sortedFiles","cloneVisible","cloneStyle","cloneFile","getDragKey","syncFiles","onTouchstart","onTouchmove","onTouchend","onTouchcancel","dragEnded","watch","value","_displayFiles$value","length","_ref2","_ref3","_slicedToArray","files","immediate","rootClass","computed","concat","theme","_defineProperty","draggable","previewImgs","filter","item","map","url","handlePreview","e","file","index","_props$onPreview","onPreview","imageIndex","i","Math","max","preview","triggerUpload","_inputRef$value","_props$onClickUpload","click","onClickUpload","handleImageClose","_ref5","visible","getFileTypeIcon","_file$raw","mime","raw","type","fileType","baseClass","FILE_PDF_REGEXP","test","_createVNode","FilePdfFilledIcon","FILE_EXCEL_REGEXP","FileExcelFilledIcon","FILE_PPT_REGEXP","FilePowerpointFilledIcon","FILE_WORD_REGEXP","FileWordFilledIcon","VIDEO_REGEXP","AUDIO_REGEXP","VideoFilledIcon","FileZipFilledIcon","File1Icon","renderStatus","status","_Fragment","LoadingIcon","percent","progress","uploadingText","failText","reachMax","_displayFiles$value2","renderAddContent","addBtn","addBtnNode","AddIcon","addContentNode","renderGridLayout","TransitionGroup","default","_default","isFileItem","showFileContent","showRemoveBtn","isBoolean","removeBtn","showDisabledMask","isDragged","fileKey","opacity","imageProps","onClick","_ref7","renderListItemIcon","ErrorCircleFilledIcon","position","flexShrink","_resolveComponent","_mergeProps","renderListItemSubText","percentText","_file$response","response","error","size","returnFileSize","renderListLayout","_slot","defaultTriggerBtn","TButton","icon","UploadIcon","triggerNode","showTrigger","itemClass","DeleteIcon","_ref9","_e$stopPropagation","stopPropagation","renderDragClone","isList","Teleport","upload","multiple","capture","accept","TImageViewer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCO,SAAAA,QAAAC,CAAA,EAAA;AAAA,EAAA,OAAA,OAAAA,CAAA,KAAA,UAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAC,IAAA,CAAAJ,CAAA,CAAAK,KAAAA,iBAAAA,IAAAA,CAAAA,OAAA,CAAAL,CAAA,CAAA,CAAA;AAAA,CAAA;AAEP,IAAMM,eAAkB,GAAA,2CAAA,CAAA;AAExB,cAAeC,eAAgB,CAAA;AAC7BC,EAAAA,IAAM,EAAA,SAAA;AACNC,EAAAA,UAAY,EAAA;AACVC,IAAAA,MAAA,EAAAA,KAAAA;GACF;AACAC,EAAAA,KAAO,EAAAC,WAAA;EACPC,KAAO,EAAA,CACL,cAAA,EACA,mBAAA,EACA,QAAA,EACA,MAAA,EACA,SAAA,EACA,UAAA,EACA,QAAA,EACA,SAAA,EACA,eAAA,EACA,UAAA,EACA,cAAA,EACA,MAAA,EACA,MAAA,CACF;AACAC,EAAAA,KAAM,WAANA,KAAMA,CAAAH,KAAA,EAAAI,IAAA,EAAmB;AAAA,IAAA,IAAVC,MAAA,GAAAD,IAAA,CAAAC,MAAA,CAAA;AACP,IAAA,IAAAC,WAAA,GAAcC,eAAe,QAAQ,CAAA,CAAA;AAC3C,IAAA,IAAAC,UAAA,GAAyBC,SAAA,CAAU,QAAQ,CAAA;MAAnCC,YAAA,GAAAF,UAAA,CAAAE,YAAA,CAAA;AAEF,IAAA,IAAAC,UAAA,GAaFC,UAAUZ,KAAK,CAAA;MAZjBa,QAAA,GAAAF,UAAA,CAAAE,QAAA;MACAC,YAAA,GAAAH,UAAA,CAAAG,YAAA;MACAC,aAAA,GAAAJ,UAAA,CAAAI,aAAA;MACAC,SAAA,GAAAL,UAAA,CAAAK,SAAA;MACAC,QAAA,GAAAN,UAAA,CAAAM,QAAA;MACAC,iBAAA,GAAAP,UAAA,CAAAO,iBAAA;MACAC,WAAA,GAAAR,UAAA,CAAAQ,WAAA;MACAC,WAAA,GAAAT,UAAA,CAAAS,WAAA;MACAC,kBAAA,GAAAV,UAAA,CAAAU,kBAAA;MACAC,aAAA,GAAAX,UAAA,CAAAW,aAAA;MACAC,YAAA,GAAAZ,UAAA,CAAAY,YAAA;MACAC,cAAA,GAAAb,UAAA,CAAAa,cAAA,CAAA;AAGF,IAAA,IAAMC,iBAAiBC,WAAY,EAAA,CAAA;AAE7B,IAAA,IAAAC,UAAA,GAAaC,IAAI,KAAK,CAAA,CAAA;AACtB,IAAA,IAAAC,YAAA,GAAeD,IAAI,CAAC,CAAA,CAAA;IAEpB,IAAAE,QAAA,GAcFC,OAAA,CAAQ/B,KAAO,EAAAM,WAAA,EAAakB,gBAAgBT,aAAa,CAAA;MAb3DiB,QAAA,GAAAF,QAAA,CAAAE,QAAA;MACAC,SAAA,GAAAH,QAAA,CAAAG,SAAA;MACAC,WAAA,GAAAJ,QAAA,CAAAI,WAAA;MACAC,YAAA,GAAAL,QAAA,CAAAK,YAAA;MACAC,UAAA,GAAAN,QAAA,CAAAM,UAAA;MACAC,SAAA,GAAAP,QAAA,CAAAO,SAAA;MACAC,UAAA,GAAAR,QAAA,CAAAQ,UAAA;MACAC,SAAA,GAAAT,QAAA,CAAAS,SAAA;MACAC,aAAA,GAAAV,QAAA,CAAAU,YAAA;MACAC,YAAA,GAAAX,QAAA,CAAAW,WAAA;MACAC,WAAA,GAAAZ,QAAA,CAAAY,UAAA;MACAC,cAAA,GAAAb,QAAA,CAAAa,aAAA;MACAC,SAAA,GAAAd,QAAA,CAAAc,SAAA,CAAA;AAGFC,IAAAA,KAAA,CACE,CAAC,YAAA;MAAA,OAAM/B,YAAA,CAAagC;KAAO,EAAA,YAAA;AAAA,MAAA,IAAAC,mBAAA,CAAA;MAAA,OAAAA,CAAAA,mBAAA,GAAMjC,YAAA,CAAagC,6DAAbC,mBAAA,CAAoBC,MAAM,CAAA;KAAA,CAAA,EAC3D,UAAAC,KAAA,EAAa;AAAA,MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,KAAA,EAAA,CAAA,CAAA;AAAXG,QAAAA,KAAK,GAAAF,KAAA,CAAA,CAAA,CAAA,CAAA;AACL,MAAA,IAAIE,KAAO,EAAA;QACTb,SAAA,CAAUa,KAAK,CAAA,CAAA;AACjB,OAAA;AACF,KAAA,EACA;AAAEC,MAAAA,WAAW,IAAA;AAAK,KACpB,CAAA,CAAA;IAEM,IAAAC,SAAA,GAAYC,SAAS,YAAA;MAAA,OAAM,CAC/BjD,WAAY,CAAAwC,KAAA,KAAAU,MAAA,CACTlD,WAAA,CAAYwC,KAAU,QAAAU,MAAA,CAAAxD,KAAA,CAAMyD,KAAS,IAAA,MAAA,CAAA,EAAAC,eAAA,CAAAA,eAAA,CAAA,EAAA,EAAA,EAAA,CAAAF,MAAA,CAElClD,WAAY,CAAAwC,KAAA,EAAA,YAAA,CAAA,EAAoB9C,KAAM,CAAAa,QAAA,MAAA2C,MAAA,CACtClD,WAAA,CAAYwC,KAAoB,iBAAA9C,KAAA,CAAM2D,aAAa3B,QAAS,CAAAc,KAAA,CAEnE,CAAA,CAAA;KAAA,CAAA,CAAA;IAED,IAAMc,WAAc,GAAAL,QAAA,CAAS,YAAA;AAAA,MAAA,OAC3BzC,YAAA,CAAagC,KAAM,CAAAe,MAAA,CAAO,UAACC,IAAS,EAAA;QAAA,OAAA1C,WAAA,CAAY0C,IAAI,CAAC,CAAA;AAAA,OAAA,CAAE,CAAAC,GAAA,CAAI,UAACD,IAAA,EAAA;QAAA,OAASA,KAAKE,GAAa,CAAA;OAAA,CAAA,CAAA;AAAA,KACzF,CAAA,CAAA;IAEA,IAAMC,aAAgB,GAAA,SAAhBA,aAAgBA,CAACC,CAAe,EAAAC,IAAA,EAAkBC,KAAkB,EAAA;AAAA,MAAA,IAAAC,gBAAA,CAAA;MACxE,IAAIrC,QAAS,CAAAc,KAAA,EAAO,OAAA;MAEpB,IAAIF,SAAU,CAAAE,KAAA,EAAO,OAAA;AAErB,MAAA,CAAAuB,gBAAA,GAAArE,KAAA,CAAMsE,SAAY,MAAA,IAAA,IAAAD,gBAAA,KAAA,KAAA,CAAA,IAAlBA,gBAAA,CAAA5E,IAAA,CAAAO,KAAA,EAAkB;AAAEkE,QAAAA,CAAG,EAAHA,CAAG;AAAAC,QAAAA,IAAA,EAAAA,IAAA;AAAMC,QAAAA,OAAAA,KAAAA;AAAM,OAAC,CAAA,CAAA;AAChC,MAAA,IAAA,CAAChD,YAAY+C,IAAI,CAAA,EAAG,OAAA;MAExB,IAAMI,UAAa,GAAAzD,YAAA,CAAagC,KAAM,CAAAe,MAAA,CAAO,UAACC,IAAA,EAAMU,CAAM,EAAA;AAAA,QAAA,OAAApD,WAAA,CAAY0C,IAAI,CAAA,IAAKU,CAAK,IAAAJ,KAAK,CAAA;SAAEpB,MAAS,GAAA,CAAA,CAAA;MACpGnB,YAAA,CAAaiB,KAAQ,GAAA2B,IAAA,CAAKC,GAAI,CAAA,CAAA,EAAGH,UAAU,CAAA,CAAA;AAC3C5C,MAAAA,UAAA,CAAWmB,QAAQ9C,KAAM,CAAA2E,OAAA,CAAA;KAC3B,CAAA;AAEM,IAAA,IAAAC,aAAA,GAAgB,SAAhBA,aAAAA,CAAiBV,CAAkB,EAAA;MAAA,IAAAW,eAAA,EAAAC,oBAAA,CAAA;AACvC,MAAA,IAAIjE,QAAU,KAAVA,IAAAA,IAAAA,QAAU,eAAVA,QAAU,CAAAiC,KAAA,EAAO,OAAA;AACrB,MAAA,CAAA+B,eAAA,GAAA5D,QAAA,CAAS6B,iDAAT+B,eAAA,CAAgBE,KAAM,EAAA,CAAA;AAChB,MAAA,CAAAD,oBAAA,GAAA9E,KAAA,CAAAgF,aAAA,MAAA,IAAA,IAAAF,oBAAA,KAAA,KAAA,CAAA,IAAAA,oBAAA,CAAArF,IAAA,CAAAO,KAAA,EAAgB;AAAEkE,QAAAA,CAAA,EAAAA,CAAAA;AAAE,OAAC,CAAA,CAAA;KAC7B,CAAA;AAEA,IAAA,IAAMe,gBAAmB,GAAA,SAAnBA,gBAAmBA,CAAAC,KAAA,EAAuC;AAAA,MAAA,IAApCC,OAAA,GAAAD,KAAA,CAAAC,OAAA,CAAA;MAC1BxD,UAAA,CAAWmB,KAAQ,GAAAqC,OAAA,CAAA;KACrB,CAAA;AAEM,IAAA,IAAAC,eAAA,GAAkB,SAAlBA,eAAAA,CAAmBjB,IAAqB,EAAA;AAAA,MAAA,IAAAkB,SAAA,CAAA;AAC5C,MAAA,IAAMC,IAAO,GAAA,CAAA,CAAAD,SAAA,GAAAlB,IAAA,CAAKoB,GAAK,MAAA,IAAA,IAAAF,SAAA,KAAVA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAA,CAAUG,IAAA,KAAQrB,KAAKqB,IAAQ,IAAA,EAAA,CAAA;MAC5C,IAAMC,qBAActB,IAAA,CAAKtE,QAAQ,EAAM,EAAA,GAAA,CAAA,CAAA2D,MAAA,CAAAW,IAAA,CAAKH,OAAO,EAAM,EAAAR,GAAAA,CAAAA,CAAAA,MAAA,CAAA8B,IAAA,CAAA,CAAA;AACnD,MAAA,IAAAI,SAAA,GAAAlC,EAAAA,CAAAA,MAAA,CAAelD,WAAY,CAAAwC,KAAA,EAAA,aAAA,CAAA,CAAA;MAC7B,IAAA6C,eAAA,CAAgBC,KAAKH,QAAQ,CAAA,EAAG,OAAAI,WAAA,CAAAC,iBAAA,EAAA;AAAA,QAAA,OAAA,EAAiC,CAACJ,SAAW,EAAAlC,EAAAA,CAAAA,MAAA,CAAGkC;AAAmB,OAAA,EAAA,IAAA,CAAA,CAAA;AACvG,MAAA,IAAIK,kBAAkBH,IAAK,CAAAH,QAAQ,CAAK,IAAA,gBAAA,CAAiBG,KAAKN,IAAI,CAAA,EAChE,OAAAO,WAAA,CAAAG,mBAAA,EAAA;AAAA,QAAA,OAAA,EAAmC,CAACN,SAAW,EAAAlC,EAAAA,CAAAA,MAAA,CAAGkC;AAAqB,OAAA,EAAA,IAAA,CAAA,CAAA;AACzE,MAAA,IAAIO,gBAAgBL,IAAK,CAAAH,QAAQ,CAAK,IAAA,iBAAA,CAAkBG,KAAKN,IAAI,CAAA,EAC/D,OAAAO,WAAA,CAAAK,wBAAA,EAAA;AAAA,QAAA,OAAA,EAAwC,CAACR,SAAW,EAAAlC,EAAAA,CAAAA,MAAA,CAAGkC;AAAmB,OAAA,EAAA,IAAA,CAAA,CAAA;AAC5E,MAAA,IAAIS,iBAAiBP,IAAK,CAAAH,QAAQ,CAAK,IAAA,mBAAA,CAAoBG,KAAKN,IAAI,CAAA,EAClE,OAAAO,WAAA,CAAAO,kBAAA,EAAA;AAAA,QAAA,OAAA,EAAkC,CAACV,SAAW,EAAAlC,EAAAA,CAAAA,MAAA,CAAGkC;AAAoB,OAAA,EAAA,IAAA,CAAA,CAAA;AACvE,MAAA,IAAIW,aAAaT,IAAK,CAAAH,QAAQ,CAAK,IAAAa,YAAA,CAAaV,KAAKH,QAAQ,CAAA,EAC3D,OAAAI,WAAA,CAAAU,eAAA,EAAA;AAAA,QAAA,OAAA,EAA+B,CAACb,SAAW,EAAAlC,EAAAA,CAAAA,MAAA,CAAGkC;AAAqB,OAAA,EAAA,IAAA,CAAA,CAAA;AACrE,MAAA,IAAI/F,gBAAgBiG,IAAK,CAAAH,QAAQ,CAAK,IAAA,iBAAA,CAAkBG,KAAKN,IAAI,CAAA,EAC/D,OAAAO,WAAA,CAAAW,iBAAA,EAAA;AAAA,QAAA,OAAA,EAAiC,CAACd,SAAW,EAAAlC,EAAAA,CAAAA,MAAA,CAAGkC;AAAmB,OAAA,EAAA,IAAA,CAAA,CAAA;MACrE,OAAAG,WAAA,CAAAY,SAAA,EAAA;AAAA,QAAA,OAAA,EAAyB,CAACf,SAAW,EAAAlC,EAAAA,CAAAA,MAAA,CAAGkC;AAAqB,OAAA,EAAA,IAAA,CAAA,CAAA;KAC/D,CAAA;AAEM,IAAA,IAAAgB,YAAA,GAAe,SAAfA,YAAAA,CAAgBvC,IAAqB,EAAA;AACzC,MAAA,IAAIA,IAAK,CAAAwC,MAAA,KAAW,MAAU,IAAAxC,IAAA,CAAKwC,MAAW,KAAA,UAAA,EAAmB,OAAA,IAAA,CAAA;AAE/D,MAAA,OAAAd,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CAAelD,YAAYwC,KACxB,EAAA,iBAAA,CAAA;AAAA,OAAA,EAAA,CAAAqB,IAAA,CAAKwC,WAAW,UACf,GAAAd,WAAA,CAAAe,QAAA,EAAA,IAAA,EAAA,CAAAf,WAAA,CAAAgB,WAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAArD,MAAA,CACyBlD,YAAYwC,KAA2B,EAAA,oBAAA,CAAA;AAAA,OAAA,EAAA,IAAA,CAAA,EAAA+C,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CAC/ClD,YAAYwC,KACxB,EAAA,iBAAA,CAAA;OAAAqB,EAAAA,CAAAA,IAAA,CAAK2C,OAAU,GAAAtD,EAAAA,CAAAA,MAAA,CAAGW,KAAK2C,OAAa,EAAA,GAAA,CAAA,GAAApG,YAAA,CAAaoC,KAAM,CAAAiE,QAAA,CAASC;2BAKxC1G,YAAYwC,KAA6B,EAAA,sBAAA,CAAA;AAAA,OAAA,EAAA,IAAA,CAAA,EAAA+C,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACrDlD,WAAA,CAAYwC;UAAyBpC,YAAa,CAAAoC,KAAA,CAAMiE,QAAS,CAAAE,QAAA;KAK1F,CAAA;IAEM,IAAAC,QAAA,GAAW3D,QAAS,CAAA,YAAA;AAAA,MAAA,IAAA4D,oBAAA,CAAA;MAAA,OAAMnH,KAAM,CAAA0E,GAAA,GAAM,KAAK,CAAA,CAAAyC,oBAAA,GAAArG,YAAa,CAAAgC,KAAA,MAAA,IAAA,IAAAqE,oBAAA,KAAbA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,oBAAA,CAAoBnE,MAAU,KAAAhD,KAAA,CAAM0E,GAAG,CAAA;KAAA,CAAA,CAAA;AAExF,IAAA,IAAM0C,mBAAmB,SAAnBA,mBAAyB;MACzB,IAAA,CAACpH,KAAM,CAAAqH,MAAA,IAAUH,QAAS,CAAApE,KAAA,EAAc,OAAA,IAAA,CAAA;MAE5C,IAAMwE,UAAa,GAAA7F,cAAA,CAAe,QAAU,EAAAoE,WAAA,CAAA0B,OAAA,EAAA,IAAA,EAAA,IAAA,CAAW,CAAA,CAAA;AACjD,MAAA,IAAAC,cAAA,GAAiB/F,eAAe,YAAY,CAAA,CAAA;AAGhD,MAAA,OAAAoE,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,KAAA,EAAS,SAAA;QAAA,OAAArC,EAAAA,EAAAA,CAAAA,MAAA,CAAoBlD,WAAA,CAAYwC,KAAe,aAAAU,MAAA,CAAAlD,WAAA,CAAYwC,KAAoB,EAAA,aAAA,CAAA;QAAA,SAAS8B,EAAAA,aAAAA;;2BAChFtE,WAAA,CAAYwC;OAAoB0E,EAAAA,CAAAA,cAAkB,IAAAF,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA;KAGvE,CAAA;AAEA,IAAA,IAAMG,mBAAmB,SAAnBA,mBAAyB;MACvB,IAAArE,KAAA,GAAQpB,SAASc,KAAS,IAAAZ,WAAA,CAAYY,MAAME,MAAS,GAAA,CAAA,GAAId,WAAY,CAAAY,KAAA,GAAQhC,YAAa,CAAAgC,KAAA,CAAA;MAChG,OAAA+C,WAAA,CAAA6B,eAAA,EAAA;AAAA,QAAA,MAAA,EAAA,EAAA,CAAAlE,MAAA,CAC4BlD,WAAY,CAAAwC,KAAA,EAAA,OAAA,CAAA;AAAA,OAAA,EAAA;AAAA6E,QAAAA,OAAA,WAAAC,QAAA,GAAA;UAAA,OACnCxE,CAAAA,KAAM,CAAAW,GAAA,CAAI,UAACI,IAAA,EAAMC,KAAU,EAAA;YAC1B,IAAMyD,aAAa,CAACzG,WAAA,CAAY+C,IAAI,CAAA,IAAK,CAACA,IAAK,CAAAH,GAAA,CAAA;AAC/C,YAAA,IAAM8D,kBAAkBD,UAAc,IAAA1D,IAAA,CAAKwC,MAAW,KAAA,UAAA,IAAcxC,KAAKwC,MAAW,KAAA,MAAA,CAAA;AACpF,YAAA,IAAMoB,gBAAgBC,SAAU,CAAA7D,IAAA,CAAK8D,SAAS,CAAI,GAAA9D,IAAA,CAAK8D,YAAYjI,KAAM,CAAAiI,SAAA,CAAA;YACnE,IAAAC,gBAAA,GACJ,CAAArH,qBAAAA,aAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAUiC,KAAS,KAAA,CAAC+E,cAAc1D,IAAK,CAAAwC,MAAA,KAAW,UAAc,IAAAxC,IAAA,CAAKwC,MAAW,KAAA,MAAA,CAAA;YAClF,IAAMwB,SAAY,GAAAnG,QAAA,CAASc,KAAS,IAAAb,SAAA,CAAUa,KAAU,KAAAsB,KAAA,CAAA;AAClD,YAAA,IAAAgE,OAAA,GAAU9F,WAAW6B,IAAI,CAAA,CAAA;AAE/B,YAAA,OAAA0B,WAAA,CAAA,KAAA,EAAA;AAAA,cAAA,KAAA,EAESuC,OACL;AAAA,cAAA,eAAA,EAAeA;qBACR,EAAA,CAAA,EAAA,CAAA5E,MAAA,CACFlD,WAAY,CAAAwC,KAAA,EAAA,QAAA,CAAA,EAAAY,eAAA,CAAAA,eAAA,CAAA,EAAA,EAAA,EAAA,CAAAF,MAAA,CAETlD,WAAA,CAAYwC,KAAsB,EAAA+E,cAAAA,CAAAA,EAAAA,UAAA,CAAArE,EAAAA,EAAAA,CAAAA,MAAA,CAClClD,WAAA,CAAYwC,KAA0B,EAAAqF,kBAAAA,CAAAA,EAAAA,SAAA,CAG9C,CAAA;cAAA,OAAO,EAAA;AAAEE,gBAAAA,OAAA,EAASF,SAAY,GAAA,CAAA,GAAI,KAAU,CAAA;eAAA;cAAA,cAC9B,EAAA,SAAA3F,aAAC0B,CAAkB,EAAA;AAAA,gBAAA,OAAA1B,aAAA,CAAa0B,GAAGE,KAAK,CAAA,CAAA;AAAA,eAAA;cAAA,aACzC,EAAA,SAAA3B,YAACyB,CAAkB,EAAA;gBAAA,OAAAzB,YAAA,CAAYyB,CAAC,CAAA,CAAA;AAAA,eAAA;cAAA,YACjC,EAAA,SAAAxB,WAACwB,CAAA,EAAA;gBAAA,OAAkBxB,WAAW,CAAAwB,CAAC,CAC3C,CAAA;AAAA,eAAA;cAAA,eAAe,EAAA,SAAAvB,cAACuB,CAAA,EAAA;gBAAA,OAAkBvB,eAAcuB,CAAC,CAAA,CAAA;AAAA,eAAA;aAEhDC,EAAAA,CAAAA,IAAA,CAAKH;iCAEQ1D,WAAA,CAAYwC,KACtB,EAAA,SAAA,CAAA;cAAA,OAAM,EAAA,OAAA;aACD9C,EAAAA,KAAA,CAAMsI;mBACNnE,EAAAA,IAAA,CAAKH;uBACD,EAAA,SAAAuE,QAACrE;uBAAkBD,aAAc,CAAAC,CAAA,EAAGC,IAAM,EAAAC,KAAK,CAC1D,CAAA;AAAA,eAAA;aAAA,CAAA,EAAA,IAAA,CAAA,EAED0D,eACC,IAAAjC,WAAA,CAAA,KAAA,EAAA;AAAA,cAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACYlD,WAAA,CAAYwC,KACtB,EAAA,gBAAA,CAAA;cAAA,SAAS,EAAA,SAAAyF,QAACrE,CAAA,EAAA;AAAA,gBAAA,OAAkBD,aAAc,CAAAC,CAAA,EAAGC,MAAMC,KAAK,CAAA,CAAA;AAAA,eAAA;AAAA,aAAA,EAAA,CAAAyB,WAAA,CAAA,KAAA,EAAA;AAAA,cAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CAEzClD,YAAYwC,KAAqB,EAAA,aAAA,CAAA;AAAA,aAAA,EAAA,CAAAsC,eAAA,CAAgBjB,IAAI,CAAA,IAAA0B,WAAA,CAAA,KAAA,EAAA;AAAA,cAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACrDlD,YAAYwC,KAAqB,EAAA,aAAA,CAAA;AAAA,aAAA,EAAA,CAAAqB,IAAA,CAAKtE,QALtD,EAQF6G,aAAavC,IAAI,CAAA,EACjB+D;iCAAmC5H,YAAYwC,KAAwB,EAAA,iBAAA,CAAA;AAAA,aAAA,EAAA,IAAA,CAAA,EACvEiF;iCAEazH,WAAA,CAAYwC;uBACb,EAAA,SAAAyF,QAAAC,KAAA,EAAA;AAAA,gBAAA,IAAGtE,CAAA,GAAAsE,KAAA,CAAAtE,CAAA,CAAA;AAAA,gBAAA,OAAa5C,aAAc,CAAA;AAAE4C,kBAAAA,GAAAA;AAAGC,kBAAAA,IAAM,EAANA,IAAM;AAAAC,kBAAAA,KAAA,EAAAA,KAAAA;AAAM,iBAAC,CAC3D,CAAA;AAAA,eAAA;aAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAIR,WAAC,CAAA,EACAgD,gBAAiB,EAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;KAGxB,CAAA;AAEM,IAAA,IAAAqB,kBAAA,GAAqB,SAArBA,kBAAAA,CAAsBtE,IAAqB,EAAA;AAC3C,MAAA,IAAAA,IAAA,CAAKwC,WAAW,UAAY,EAAA;QAC9B,OAAAd,WAAA,CAAAgB,WAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAArD,MAAA,CAA8BlD,YAAYwC,KAA4B,EAAA,qBAAA,CAAA;AAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AACxE,OAAA;AACI,MAAA,IAAAqB,IAAA,CAAKwC,WAAW,MAAQ,EAAA;QAC1B,OAAAd,WAAA,CAAA6C,qBAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAAlF,MAAA,CAAwClD,YAAYwC,KAA+B,EAAA,wBAAA,CAAA;AAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AACrF,OAAA;MACA,IAAI1B,WAAY,CAAA+C,IAAI,CAAK,IAAAA,IAAA,CAAKH,GAAK,EAAA;AACjC,QAAA,OAAA6B,WAAA,CAAA,KAAA,EAAA;UAAA,OACc,EAAA;AAAE8C,YAAAA,QAAU,EAAA,UAAA;AAAYC,YAAAA,YAAY,CAAA;AAAE,WAAA;AAAA,SAAA,EAAA,CAAA/C,WAAA,CAAAgD,gBAAA,CAAA,SAAA,CAAA,EAAAC,UAAA,CAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAAtF,MAAA,CAEpClD,WAAY,CAAAwC,KAAA,EAAA,uBAAA,CAAA;UAAA,OAChB,EAAA,OAAA;SACD9C,EAAAA,KAAM,CAAAsI,UAAA,EAAA;AAAA,UAAA,KAAA,EACNnE,IAAA,CAAKH,GAAAA;SAEX,CAAA,EAAA,IAAA,CAAA,EAAA,CAAAnD,aAAAA,IAAAA,IAAAA,+BAAAA,SAAUiC,KAAS,KAAA+C,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CAAelD,YAAYwC,KAAwB,EAAA,iBAAA,CAAA;SAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAG7E,OAAA;AACO,MAAA,OAAA+C,WAAA,CAAA,MAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CAAgBlD,YAAYwC,KAA0B,EAAA,kBAAA,CAAA;OAAAsC,EAAAA,CAAAA,eAAA,CAAgBjB,IAAI,CAAA,CAAA,CAAA,CAAA;KACnF,CAAA;AAEM,IAAA,IAAA4E,qBAAA,GAAwB,SAAxBA,qBAAAA,CAAyB5E,IAAqB,EAAA;AAC9C,MAAA,IAAAA,IAAA,CAAKwC,WAAW,UAAY,EAAA;AAC9B,QAAA,IAAMqC,WAAc,GAAA7E,IAAA,CAAK2C,OAAU,GAAA,GAAA,CAAAtD,MAAA,CAAIW,KAAK2C,OAAa,EAAA,GAAA,CAAA,GAAA,EAAA,CAAA;AACzD,QAAA,OAAA,EAAA,CAAAtD,MAAA,CAAU9C,YAAA,CAAaoC,KAAM,CAAAiE,QAAA,CAASC,aAAgB,CAAA,CAAAxD,MAAA,CAAAwF,WAAA,CAAA,CAAA;AACxD,OAAA;AACI,MAAA,IAAA7E,IAAA,CAAKwC,WAAW,MAAQ,EAAA;AAAA,QAAA,IAAAsC,cAAA,CAAA;AAC1B,QAAA,OAAO,EAAAA,cAAA,GAAA9E,IAAK,CAAA+E,QAAA,cAAAD,cAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAALA,cAAA,CAAeE,KAAS,KAAAzI,YAAA,CAAaoC,MAAMiE,QAAS,CAAAE,QAAA,CAAA;AAC7D,OAAA;AACA,MAAA,IAAI9C,KAAKiF,IAAQ,IAAA,IAAA,EAAa,OAAAC,cAAA,CAAelF,KAAKiF,IAAI,CAAA,CAAA;AAC/C,MAAA,OAAA,EAAA,CAAA;KACT,CAAA;AAEA,IAAA,IAAME,mBAAmB,SAAnBA,mBAAyB;AAAA,MAAA,IAAAC,KAAA,CAAA;AACvB,MAAA,IAAA/B,cAAA,GAAiB/F,eAAe,YAAY,CAAA,CAAA;AAC5C,MAAA,IAAA6F,UAAA,GAAa7F,eAAe,QAAQ,CAAA,CAAA;AACpC,MAAA,IAAA+H,iBAAA,GAAA3D,WAAA,CAAA4D,MAAA,EAAA;AAAA,QAAA,OAAA,EACW;gBAAe,QAAA;AAAA,QAAA,UAAA,EAAmB5I,QAAA,KAAA,IAAA,IAAAA,QAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,QAAA,CAAUiC,KAAAA;AACxD,OAAA,EAAA;QACC4G,IAAA,EAAM,SAANA,IAAAA,GAAA;UAAA,OAAA7D,WAAA,CAAA8D,UAAA,EAAA,IAAA,EAAA,IAAA,CAAA,CAAA;SAAwB;QACxBhC,SAAS,SAATA;iBAAe,QAAA,CAAA;AAAA,SAAA;OAHlB,CAAA,CAAA;AAOG,MAAA,IAAAiC,WAAA,GAAcpC,kBAAkBF,UAAc,IAAAkC,iBAAA,CAAA;MACpD,IAAMK,WAAc,GAAA7J,KAAA,CAAMqH,MAAU,IAAA,CAACH,QAAS,CAAApE,KAAA,CAAA;MAExC,IAAAM,KAAA,GAAQpB,SAASc,KAAS,IAAAZ,WAAA,CAAYY,MAAME,MAAS,GAAA,CAAA,GAAId,WAAY,CAAAY,KAAA,GAAQhC,YAAa,CAAAgC,KAAA,CAAA;AAG9F,MAAA,OAAA+C,WAAA,CAAAe,QAAA,EACGiD,IAAAA,EAAAA,CAAAA,WAAA,IAAAhE,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACgBlD,YAAYwC,KAAuB,EAAA,gBAAA,CAAA;QAAA,SAAS8B,EAAAA,aAAAA;OACxDgF,EAAAA,CAAAA,WAAA,EADF,EAIFxG,MAAMJ,MAAS,GAAA,CAAA,IAAA6C,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACClD,WAAY,CAAAwC,KAAA,EAAA,QAAA,CAAA;OAAA+C,EAAAA,CAAAA,WAAA,CAAA6B,eAAA,EAAA;AAAA,QAAA,MAAA,EAAA,EAAA,CAAAlE,MAAA,CACClD,WAAY,CAAAwC,KAAA,EAAA,OAAA,CAAA;AAAA,OAAA,EAAA1D,OAAA,CAAAmK,KAAA,GACnCnG,MAAMW,GAAI,CAAA,UAACI,MAAMC,KAAU,EAAA;QAC1B,IAAM0F,SAAY,GAAA,CAAA,EAAA,CAAAtG,MAAA,CACblD,WAAY,CAAAwC,KAAA,EAAAY,aAAAA,CAAAA,EAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAA,EAAA,EAAA,EAAA,CAAAF,MAAA,CAETlD,WAAY,CAAAwC,KAAA,EAAA,mBAAA,CAAA,EAA2BqB,KAAKwC,MAAW,KAAA,MAAA,CAAA,EAAA,EAAA,CAAAnD,MAAA,CACvDlD,WAAY,CAAAwC,KAAA,EAA+BqB,uBAAAA,CAAAA,EAAAA,KAAKwC,MAAW,KAAA,UAAA,CAAA,EAAA,EAAA,CAAAnD,MAAA,CAC3DlD,WAAA,CAAYwC,OAA+Bd,uBAAAA,CAAAA,EAAAA,QAAS,CAAAc,KAAA,IAASb,UAAUa,KAAU,KAAAsB,KAAA,CAEzF,CAAA,CAAA;AACA,QAAA,IAAM2D,gBAAgBC,SAAU,CAAA7D,IAAA,CAAK8D,SAAS,CAAI,GAAA9D,IAAA,CAAK8D,YAAYjI,KAAM,CAAAiI,SAAA,CAAA;QACzE,IAAME,SAAY,GAAAnG,QAAA,CAASc,KAAS,IAAAb,SAAA,CAAUa,KAAU,KAAAsB,KAAA,CAAA;AAGtD,QAAA,OAAAyB,WAAA,CAAA,KAAA,EAAA;UAAA,KACOvD,EAAAA,UAAA,CAAW6B,IAAI,CACpB;UAAA,eAAe7B,EAAAA,UAAW,CAAA6B,IAAI,CAC9B;AAAA,UAAA,OAAA,EAAO2F;iBACA,EAAA;AAAEzB,YAAAA,OAAS,EAAAF,SAAA,GAAY,CAAI,GAAA,KAAA,CAAA;;mBACzB,EAAA,SAAAI,QAACrE,CAAkB,EAAA;AAAA,YAAA,OAAAD,aAAA,CAAcC,CAAG,EAAAC,IAAA,EAAMC,KAAK,CACxD,CAAA;AAAA,WAAA;UAAA,cAAc,EAAA,SAAA5B,aAAC0B,CAAkB,EAAA;AAAA,YAAA,OAAA1B,aAAA,CAAa0B,GAAGE,KAAK,CAAA,CAAA;AAAA,WAAA;UAAA,aACzC,EAAA,SAAA3B,YAACyB,CAAkB,EAAA;YAAA,OAAAzB,YAAA,CAAYyB,CAAC,CAC7C,CAAA;AAAA,WAAA;UAAA,YAAY,EAAA,SAAAxB,WAACwB,CAAA,EAAA;YAAA,OAAkBxB,WAAW,CAAAwB,CAAC;;yBAC5B,EAAA,SAAAvB,cAACuB,CAAkB,EAAA;YAAA,OAAAvB,cAAA,CAAcuB,CAAC,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAA,CAEhDuE,mBAAmBtE,IAAI,CAAA,EAAA0B,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACTlD,WAAY,CAAAwC,KAAA,EAAA,qBAAA,CAAA;AAAA,SAAA,EAAA,CAAA+C,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACVlD,YAAYwC,KAA0B,EAAA,kBAAA,CAAA;AAAA,SAAA,EAAA,CAAAqB,IAAA,CAAKtE;6BAC3CS,YAAYwC,KAA0B,EAAA,kBAAA,CAAA;AAAA,SAAA,EAAA,CAAAiG,qBAAA,CAAsB5E,IAAI,CAAA,MAAA0B,WAAA,CAAA,KAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CAElElD,YAAYwC,KACxB,EAAA,oBAAA,CAAA;SAAAiF,EAAAA,CAAAA,aAAA,IAAiB,CAAC/F,QAAS,CAAAc,KAAA,IAAA+C,WAAA,CAAAkE,UAAA,EAAA;AAAA,UAAA,OAAA,EAAA,EAAA,CAAAvG,MAAA,CAEdlD,WAAY,CAAAwC,KAAA,EAAA,oBAAA,CAAA;UAAA,SACb,EAAA,SAAAyF,OAAAyB,CAAAA,KAAA,EAAgB;AAAA,YAAA,IAAAC,kBAAA,CAAA;AAAA,YAAA,IAAb/F,UAAAA;AACVA,YAAAA,CAAA,aAAAA,CAAA,KAAA,KAAA,CAAA,IAAA,CAAA+F,kBAAA,GAAA/F,CAAA,CAAGgG,eAAkB,MAAAD,IAAAA,IAAAA,kBAAA,eAArBA,kBAAA,CAAAxK,IAAA,CAAAyE,CAAqB,CAAA,CAAA;AACrB5C,YAAAA,aAAA,CAAc;AAAE4C,cAAAA,CAAA,EAAAA,CAAA;AAAGC,cAAAA,IAAM,EAANA,IAAM;AAAAC,cAAAA,KAAA,EAAAA,KAAAA;AAAM,aAAC,CAAA,CAAA;AAClC,WAAA;;OAMX,CAAA,IAAAmF,KAAA,GAAA;AAAA5B,QAAAA,OAAA,WAAAC,QAAA,GAAA;AAAA,UAAA,OAAA,CAAA2B,KAAA,CAAA,CAAA;AAAA,SAAA;OA5CJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;KAkDT,CAAA;AAEA,IAAA,IAAMY,kBAAkB,SAAlBA,kBAAwB;MAC5B,IAAI,CAAChI,YAAA,CAAaW,KAAS,IAAA,CAACT,SAAU,CAAAS,KAAA,EAAc,OAAA,IAAA,CAAA;AAEpD,MAAA,IAAMqB,OAAO9B,SAAU,CAAAS,KAAA,CAAA;AACjB,MAAA,IAAAsH,MAAA,GAASpK,MAAMyD,KAAU,KAAA,MAAA,CAAA;AAG/B,MAAA,IAAI2G,MAAQ,EAAA;QAER,OAAAvE,WAAA,CAAAwE,QAAA,EAAA;UAAA,IAAa,EAAA,MAAA;AACX,SAAA,EAAA;AAAA1C,UAAAA,OAAA,WAAAC,QAAA,GAAA;AAAA,YAAA,OAAA,CAAA/B,WAAA,CAAA,KAAA,EAAA;AAAA,cAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CAAelD,WAAA,CAAYwC,KAAoB,EAAA,aAAA,CAAA;AAAA,cAAA,OAAA,EAAOV,UAAW,CAAAU,KAAAA;AAAA,aAAA,EAAA,CAC9D2F,mBAAmBtE,IAAI,CAAA,EAAA0B,WAAA,CAAA,KAAA,EAAA;AAAA,cAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACTlD,WAAY,CAAAwC,KAAA,EAAA,qBAAA,CAAA;AAAA,aAAA,EAAA,CAAA+C,WAAA,CAAA,KAAA,EAAA;AAAA,cAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACVlD,YAAYwC,KAA0B,EAAA,kBAAA,CAAA;AAAA,aAAA,EAAA,CAAAqB,IAAA,CAAKtE;iCAC3CS,YAAYwC,KAA0B,EAAA,kBAAA,CAAA;aAAAiG,EAAAA,CAAAA,qBAAA,CAAsB5E,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;AAKzF,OAAA;MAGA,IAAM0D,aAAa,CAACzG,WAAA,CAAY+C,IAAI,CAAA,IAAK,CAACA,IAAK,CAAAH,GAAA,CAAA;AAC/C,MAAA,IAAM8D,kBAAkBD,UAAc,IAAA1D,IAAA,CAAKwC,MAAW,KAAA,UAAA,IAAcxC,KAAKwC,MAAW,KAAA,MAAA,CAAA;MAEpF,OAAAd,WAAA,CAAAwE,QAAA,EAAA;QAAA,IACe,EAAA,MAAA;AACX,OAAA,EAAA;AAAA1C,QAAAA,OAAA,WAAAC,QAAA,GAAA;AAAA,UAAA,OAAA,CAAA/B,WAAA,CAAA,KAAA,EAAA;AAAA,YAAA,OAAA,EAAY,CAAArC,EAAAA,CAAAA,MAAA,CAAIlD,WAAA,CAAYwC,4BAAkBxC,WAAA,CAAYwC,KAAmB,EAAA,cAAA,CAAA,CAAA;AAAA,YAAA,OAAA,EAAUV,UAAW,CAAAU,KAAAA;WAC/FqB,EAAAA,CAAAA,IAAK,CAAAH,GAAA,IAAA6B,WAAA,CAAAgD,gBAAA,aAAAC,UAAA,CAAA;AAAA,YAAA,OAAA,EAAA,EAAA,CAAAtF,MAAA,CAEQlD,WAAA,CAAYwC,KACtB,EAAA,SAAA,CAAA;YAAA,OAAM,EAAA,OAAA;WACD9C,EAAAA,KAAA,CAAMsI,UACX,EAAA;AAAA,YAAA,KAAA,EAAKnE,KAAKH,GAAAA;WACZ,CAAA,EAAA,IAAA,CAAA,EAED8D,eACC,IAAAjC,WAAA,CAAA,KAAA,EAAA;AAAA,YAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CAAelD,WAAY,CAAAwC,KAAA,EAAA,gBAAA,CAAA;AAAA,WAAA,EAAA,CAAA+C,WAAA,CAAA,KAAA,EAAA;AAAA,YAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACVlD,YAAYwC,KAAqB,EAAA,aAAA,CAAA;AAAA,WAAA,EAAA,CAAAsC,eAAA,CAAgBjB,IAAI,CAAA,IAAA0B,WAAA,CAAA,KAAA,EAAA;AAAA,YAAA,OAAA,EAAA,EAAA,CAAArC,MAAA,CACrDlD,YAAYwC,KAAqB,EAAA,aAAA,CAAA;WAAAqB,EAAAA,CAAAA,IAAA,CAAKtE,QAFtD,EAKF6G,aAAavC,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;KAI1B,CAAA;AAEO9D,IAAAA,MAAA,CAAA;MACLiK,QAAQrJ,QAAS,CAAA6B,KAAA;AACjB9B,MAAAA,SAAA,EAAAA,SAAA;AACA4D,MAAAA,aAAA,EAAAA,aAAA;AACAzD,MAAAA,WAAA,EAAAA,WAAA;AACAI,MAAAA,YAAA,EAAAA,YAAA;AACAL,MAAAA,iBAAA,EAAAA,iBAAAA;AACF,KAAC,CAAA,CAAA;IAED,OAAO,YAAA;AAAA,MAAA,OAAA2E,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACOvC,SAAU,CAAAR,KAAAA;AAAA,OAAA,EAAA,CACnB9C,KAAM,CAAAyD,KAAA,KAAU,MAAS,GAAA6F,gBAAA,KAAqB7B,gBAAiB,EAAA,EAAA5B,WAAA,UAAAiD,UAAA,CAAA;AAAA,QAAA,KAAA,EAEzD7H,QAAA;AAAA,QAAA,MAAA,EACA,MACL;QAAA,UAAUjB,EAAAA,KAAM,CAAAuK,QAAA;AAAA,QAAA,QAAA,EAAA,IAAA;OAEXvK,EAAAA,KAAA,CAAMwK,UAAU;QAAEA,OAAA,EAASxK,KAAM,CAAAwK,OAAAA;OAA8C,GAAA;gBAC5ExK,EAAAA,KAAA,CAAMyK,MACd;QAAA,UAAUpJ,EAAAA,kBAAAA;OACZwE,CAAAA,EAAAA,IAAAA,CAAAA,EAAAA,WAAA,CAAA6E,WAAA,EAAA;QAAA,SAEW/I,EAAAA,UAAA,CAAWmB,KACpB;QAAA,QAAQc,EAAAA,WAAY,CAAAd,KAAA;QAAA,OACbjB,EAAAA,YAAA,CAAaiB,KACpB;QAAA,SAASmC,EAAAA,gBAAAA;OAEVkF,EAAAA,IAAAA,CAAAA,EAAAA,eAAgB,EAAA,CAAA,CAAA,CAAA;KAjBlB,CAAA;AAoBL,GAAA;AACF,CAAC,CAAA;;;;"}