@anzusystems/common-admin 1.40.0-alpha2 → 1.40.0-alpha21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common-admin.es.d.ts +1177 -104
- package/dist/common-admin.es.js +234 -220
- package/dist/lib-0Uo9u2yO.js +22782 -0
- package/dist/lib-0Uo9u2yO.js.map +1 -0
- package/dist/{shortcut-buttons-flatpickr-kO3ccQIk.js → shortcut-buttons-flatpickr-q_Sj_p8S.js} +2 -2
- package/dist/{shortcut-buttons-flatpickr-kO3ccQIk.js.map → shortcut-buttons-flatpickr-q_Sj_p8S.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{webfontloader-PblqnHWA.js → webfontloader-lQaPC7Q5.js} +2 -2
- package/dist/{webfontloader-PblqnHWA.js.map → webfontloader-lQaPC7Q5.js.map} +1 -1
- package/package.json +19 -19
- package/dist/lib-h8PEdYwt.js +0 -21678
- package/dist/lib-h8PEdYwt.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib-0Uo9u2yO.js","sources":["../src/components/ABooleanValue.vue","../src/components/ACard.vue","../src/utils/common.ts","../src/utils/string.ts","../src/components/injectionKeys.ts","../src/components/form/AFormTextField.vue","../src/components/form/AFormTextarea.vue","../src/components/form/ASystemEntityScope.vue","../src/components/ADatatablePagination.vue","../src/components/ADatatableConfigButton.vue","../src/components/ADatatableOrdering.vue","../src/components/ADialogToolbar.vue","../src/components/ALogData.vue","../node_modules/@kyvg/vue3-notification/dist/index.es.js","../src/plugins/i18n.ts","../src/model/error/AnzuFatalError.ts","../src/composables/statusCodes.ts","../src/model/error/AnzuApiForbiddenError.ts","../src/model/error/AnzuApiValidationError.ts","../src/model/error/AnzuApiResponseCodeError.ts","../src/model/error/AnzuApiForbiddenOperationError.ts","../src/composables/system/alerts.ts","../src/components/ACreateDialog.vue","../src/components/AAdminSwitcher.vue","../node_modules/dayjs/dayjs.min.js","../node_modules/dayjs/plugin/utc.js","../src/utils/datetime.ts","../src/components/ATimeTrackingFields.vue","../src/composables/filter/filterHelpers.ts","../src/components/filter/AFilterString.vue","../src/components/filter/AFilterMixed.vue","../src/components/filter/AFilterInteger.vue","../src/utils/event.ts","../src/components/buttons/filter/AFilterAdvancedButton.vue","../src/components/buttons/filter/AFilterSubmitButton.vue","../src/components/buttons/filter/AFilterResetButton.vue","../src/components/filter/AFilterWrapper.vue","../src/model/valueObject/Grant.ts","../src/components/permission/APermissionGrantEditor.vue","../src/model/valueObject/GrantOrigin.ts","../src/components/permission/APermissionValueChip.vue","../src/utils/object.ts","../src/types/OwnerAware.ts","../src/types/CreatedByAware.ts","../src/composables/system/ability.ts","../src/components/permission/Acl.vue","../src/components/ADatetime.vue","../node_modules/flatpickr/dist/esm/types/options.js","../node_modules/flatpickr/dist/esm/l10n/default.js","../node_modules/flatpickr/dist/esm/utils/index.js","../node_modules/flatpickr/dist/esm/utils/dom.js","../node_modules/flatpickr/dist/esm/utils/formatting.js","../node_modules/flatpickr/dist/esm/utils/dates.js","../node_modules/flatpickr/dist/esm/utils/polyfills.js","../node_modules/flatpickr/dist/esm/index.js","../node_modules/vue-flatpickr-component/dist/esm/events.js","../node_modules/vue-flatpickr-component/dist/esm/util.js","../node_modules/vue-flatpickr-component/dist/esm/component.js","../node_modules/flatpickr/dist/l10n/sk.js","../node_modules/flatpickr/dist/l10n/cs.js","../node_modules/flatpickr/dist/l10n/default.js","../src/validators/vuelidate/common/useValidateRequiredIf.ts","../src/composables/languageSettings.ts","../src/components/ADatetimePicker.vue","../src/components/form/AFormDatetimePicker.vue","../src/components/form/AFormFlagDatetimePicker.vue","../src/components/filter/AFilterDatetimePicker.vue","../src/composables/system/pagination.ts","../src/components/form/AFormRemoteAutocomplete.vue","../src/components/form/AFormRemoteCheckbox.vue","../src/components/form/AFormRemoteSwitch.vue","../src/components/form/AFormValueObjectOptionsSelect.vue","../src/components/filter/AFilterValueObjectOptionsSelect.vue","../src/components/filter/AFilterRemoteAutocomplete.vue","../src/components/filter/AFilterBooleanGroup.vue","../src/components/filter/AFilterBooleanSelect.vue","../src/model/valueObject/JobStatus.ts","../src/components/job/AJobStatusChip.vue","../src/model/commonConfig.ts","../src/components/ACachedChip.vue","../src/model/valueObject/LogLevel.ts","../src/components/log/ALogLevelChip.vue","../src/utils/number.ts","../src/components/ACopyText.vue","../src/components/AChipNoLink.vue","../src/components/AUserAndTimeTrackingFields.vue","../src/components/buttons/action/AActionCloseButton.vue","../src/components/buttons/action/AActionCreateButton.vue","../src/components/buttons/action/AActionDeleteButton.vue","../src/components/buttons/action/AActionEditButton.vue","../src/components/buttons/action/AActionSaveAndCloseButton.vue","../src/components/buttons/action/AActionSaveButton.vue","../src/components/buttons/table/ATableCopyIdButton.vue","../src/components/buttons/table/ATableDetailButton.vue","../src/components/buttons/table/ATableEditButton.vue","../src/components/buttons/ABtnSplit.vue","../src/composables/themeSettings.ts","../src/components/AThemeSelect.vue","../src/components/flags/FlagEn.vue","../src/components/flags/FlagEmpty.vue","../src/components/flags/FlagCountry.vue","../src/components/ALanguageSelect.vue","../src/components/systemBar/ASystemBarNewVersion.vue","../src/model/error/AnzuNewVersionFetchError.ts","../src/components/systemBar/ASystemBar.vue","../src/components/AAnzuUserAvatar.vue","../src/components/AAvatarColorPicker.vue","../src/components/ACurrentUserDropdown.vue","../src/components/form/AFormRemoteAutocompleteWithCached.vue","../src/components/view/ALoginView.vue","../src/components/view/ALogoutView.vue","../src/components/view/AUnauthorizedView.vue","../src/components/view/ANotFoundView.vue","../src/components/job/AJobDetailCommon.vue","../src/types/coreDam/Asset.ts","../src/model/coreDam/filter/AssetFilter.ts","../src/types/coreDam/AssetSelect.ts","../src/services/stores/coreDam/assetSelectStore.ts","../src/components/dam/assetSelect/composables/commonAdminCoreDamOptions.ts","../src/services/api/apiHelper.ts","../src/utils/response.ts","../src/services/api/apiFetchOne.ts","../src/services/api/queryBuilder.ts","../src/types/ApiResponse.ts","../src/services/api/apiFetchList.ts","../src/types/coreDam/DamConfig.ts","../src/components/damImage/uploadQueue/composables/damConfigApi.ts","../src/components/damImage/uploadQueue/composables/damAssetCustomFormApi.ts","../src/components/damImage/uploadQueue/composables/damConfigState.ts","../src/components/damImage/uploadQueue/api/damAssetApi.ts","../src/components/dam/assetSelect/composables/assetSelectListActions.ts","../src/components/dam/assetSelect/composables/assetSelectItemActions.ts","../src/assets/image/placeholder16x9.jpg","../src/components/dam/assetSelect/components/AssetImagePreview.vue","../src/utils/file.ts","../src/components/dam/assetSelect/components/AssetSelectTableRowItem.vue","../src/components/dam/assetSelect/components/AssetSelectListTable.vue","../src/components/dam/assetSelect/composables/assetSelectGridView.ts","../src/components/dam/assetSelect/composables/assetSelectFilterSidebar.ts","../src/components/dam/assetSelect/components/AssetSelectListBar.vue","../src/components/dam/assetSelect/components/AssetSelectTilesItem.vue","../src/components/dam/assetSelect/components/AssetSelectListTiles.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilterFormImage.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilterFormDefault.vue","../src/components/dam/assetSelect/components/filter/AssetSelectFilter.vue","../src/components/damImage/uploadQueue/api/damCurrentUserApi.ts","../src/components/damImage/composables/damCurrentUser.ts","../src/components/damImage/composables/damFilterUserAllowedUploadConfigs.ts","../src/components/dam/assetSelect/AAssetSelect.vue","../node_modules/sortablejs/modular/sortable.esm.js","../node_modules/@vueuse/integrations/useSortable.mjs","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v1.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/utils/generator.ts","../src/components/sortable/sortableActions.ts","../src/components/sortable/sortableUtils.ts","../src/components/sortable/ASortable.vue","../src/components/sortable/sortableNestedActions.ts","../src/components/sortable/ASortableNestedItem.vue","../src/components/sortable/ASortableNested.vue","../src/components/subjectSelect/ASubjectSelect.vue","../src/components/customDataForm/useCustomDataForm.ts","../src/components/customDataForm/CustomDataFormElementTypes.ts","../src/validators/vuelidate/common/useValidateBetween.ts","../src/validators/vuelidate/common/useValidateEmail.ts","../src/validators/vuelidate/common/useValidateMaxLength.ts","../src/validators/vuelidate/common/useValidateMaxValue.ts","../src/validators/vuelidate/common/useValidateMinLength.ts","../src/validators/vuelidate/common/useValidateMinValue.ts","../src/validators/vuelidate/common/useValidateNumeric.ts","../src/validators/vuelidate/common/useValidateRequired.ts","../src/validators/vuelidate/common/useValidateSlug.ts","../src/validators/vuelidate/common/useValidateStringArrayItemLength.ts","../src/validators/vuelidate/common/useValidateUrl.ts","../src/validators/vuelidate/useValidate.ts","../src/components/customDataForm/ACustomDataFormElement.vue","../src/components/customDataForm/ACustomDataForm.vue","../src/components/file/composables/dropzone.ts","../src/components/file/composables/fileType.ts","../src/components/file/composables/formatAndSizeCheck.ts","../src/components/file/AFileDropzone.vue","../src/components/damImage/composables/commonAdminImageOptions.ts","../src/components/damImage/composables/imageActions.ts","../src/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper.ts","../src/types/coreDam/UploadQueue.ts","../src/types/coreDam/AssetFile.ts","../src/components/damImage/uploadQueue/composables/UploadQueueItemFactory.ts","../src/components/damImage/uploadQueue/composables/mimeTypeHelper.ts","../src/components/damImage/uploadQueue/composables/damUploadChunkSize.ts","../src/components/damImage/uploadQueue/api/damImageApi.ts","../src/components/damImage/uploadQueue/api/uploadApi.ts","../node_modules/rusha/dist/rusha.js","../src/components/damImage/uploadQueue/composables/uploadService.ts","../src/components/damImage/uploadQueue/composables/damNotificationsEventBus.ts","../src/components/damImage/uploadQueue/composables/damNotifications.ts","../src/components/damImage/uploadQueue/composables/assetSuggestions.ts","../src/composables/system/defineCached.ts","../src/services/api/apiFetchByIds.ts","../src/services/api/apiCreateOne.ts","../src/components/damImage/uploadQueue/api/keywordApi.ts","../src/components/damImage/uploadQueue/composables/extSystemIdForCached.ts","../src/components/damImage/uploadQueue/keyword/cachedKeywords.ts","../src/components/damImage/uploadQueue/api/authorApi.ts","../src/components/damImage/uploadQueue/author/cachedAuthors.ts","../src/components/damImage/uploadQueue/composables/uploadQueuesStore.ts","../src/components/file/AFileInput.vue","../src/components/damImage/composables/imageWidgetInkectionKeys.ts","../src/services/api/apiUpdateOne.ts","../src/services/api/apiDeleteOne.ts","../src/components/damImage/uploadQueue/api/imageApi.ts","../src/components/damImage/AImageWidgetSimple.vue","../src/components/damImage/uploadQueue/composables/imageStore.ts","../src/components/damImage/uploadQueue/composables/uploadValidations.ts","../src/components/damImage/uploadQueue/components/ImageDetailDialogMetadata.vue","../src/components/damImage/uploadQueue/composables/assetDetailStore.ts","../src/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue","../src/composables/datetime/remainingTime.ts","../src/assets/dam-meta-icons/2k.svg","../src/assets/dam-meta-icons/4k.svg","../src/assets/dam-meta-icons/8k.svg","../src/assets/dam-meta-icons/qhd.svg","../src/assets/dam-meta-icons/fhd.svg","../src/assets/dam-meta-icons/slot.svg","../src/assets/dam-meta-icons/low.svg","../src/assets/dam-meta-icons/rss.svg","../src/components/damImage/uploadQueue/composables/assetImageIconsConfig.ts","../src/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue","../src/components/damImage/uploadQueue/components/AssetImage.vue","../src/components/damImage/uploadQueue/composables/assetFileFailReason.ts","../src/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue","../src/components/damImage/uploadQueue/components/AssetInfobox.vue","../src/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar.ts","../src/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue","../src/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue","../src/components/dam/AColorBox.vue","../src/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChip.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue","../src/components/damImage/uploadQueue/author/authorActions.ts","../src/components/damImage/uploadQueue/author/AuthorFilter.ts","../src/components/damImage/uploadQueue/author/DamAuthorType.ts","../src/components/damImage/uploadQueue/author/authorValidation.ts","../src/components/damImage/uploadQueue/author/AuthorFactory.ts","../src/components/damImage/uploadQueue/author/AuthorCreateButton.vue","../src/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue","../src/components/damImage/uploadQueue/keyword/keywordActions.ts","../src/components/damImage/uploadQueue/keyword/KeywordFilter.ts","../src/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteCachedKeywordChip.vue","../src/components/damImage/uploadQueue/keyword/KeywordFactory.ts","../src/components/damImage/uploadQueue/keyword/keywordValidation.ts","../src/components/damImage/uploadQueue/keyword/KeywordCreateButton.vue","../src/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue","../src/components/damImage/uploadQueue/keyword/damKeywordConfig.ts","../src/components/damImage/uploadQueue/author/damAuthorConfig.ts","../src/components/damImage/uploadQueue/components/AssetMetadata.vue","../src/components/damImage/uploadQueue/components/AssetDetailSidebarMetadata.vue","../src/components/damImage/uploadQueue/composables/imageRoiStore.ts","../src/components/damImage/uploadQueue/components/AssetFileRotate.vue","../src/components/damImage/uploadQueue/api/damImageRoiApi.ts","../src/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue","../src/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue","../src/components/damImage/uploadQueue/components/AssetDetailDialogSidebar.vue","../src/components/damImage/uploadQueue/composables/cropperJsService.ts","../node_modules/cropperjs/dist/cropper.esm.js","../src/components/ACropperjs.vue","../src/components/damImage/uploadQueue/components/AssetImageRoiSelect.vue","../src/components/damImage/uploadQueue/components/AssetDetailDialog.vue","../src/components/damImage/uploadQueue/composables/uploadQueueDialog.ts","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebar.vue","../src/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialogSingle.vue","../src/components/damImage/uploadQueue/api/damAssetLicenceApi.ts","../src/components/damImage/uploadQueue/components/ImageWidgetInner.vue","../src/components/damImage/AImageWidget.vue","../src/components/damImage/uploadQueue/components/ImageWidgetMultipleItem.vue","../src/components/damImage/uploadQueue/components/UploadQueueItemEditable.vue","../src/components/damImage/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue","../src/components/damImage/uploadQueue/composables/uploadQueueMassOperations.ts","../src/components/damImage/uploadQueue/components/AssetQueueSelectedSidebar.vue","../src/components/damImage/uploadQueue/components/UploadQueueEditable.vue","../src/components/damImage/uploadQueue/components/UploadQueueDialog.vue","../src/components/damImage/uploadQueue/components/ImageWidgetMultipleInner.vue","../src/components/damImage/AImageWidgetMultiple.vue","../src/components/damImage/AImageWidgetMultipleSimple.vue","../src/composables/system/datatableColumns.ts","../src/components/subjectSelect/useSubjectSelect.ts","../src/components/subjectSelect/selectStrategies.ts","../src/utils/boolean.ts","../src/model/factory/AnzuUserFactory.ts","../src/model/factory/PermissionConfigFactory.ts","../src/model/factory/PermissionGroupFactory.ts","../src/services/api/apiAnyRequest.ts","../src/services/api/apiFetchListBatch.ts","../src/composables/system/error.ts","../src/services/api/job/jobApi.ts","../src/model/valueObject/JobBaseResource.ts","../src/AnzuSystemsCommonAdmin.ts","../src/utils/array.ts","../src/utils/history.ts","../src/locales/cs.ts","../src/locales/en.ts","../src/locales/sk.ts","../src/model/commonVuetifyConfig.ts","../src/plugins/webfontloader.ts","../src/model/factory/JobFactory.ts","../src/composables/system/loginStatus.ts"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n value: number | string | boolean\n chip?: boolean\n invertColor?: boolean\n }>(),\n {\n chip: false,\n invertColor: false,\n }\n)\n\nconst { t } = useI18n()\n\nconst booleanValue = computed(() => {\n return props.value === true || props.value === 1 || props.value === 'true'\n})\n\nconst text = computed(() => {\n if (booleanValue.value) {\n return t('common.model.boolean.true')\n }\n return t('common.model.boolean.false')\n})\n\nconst color = computed(() => {\n if (props.invertColor) {\n return booleanValue.value ? 'error' : 'success'\n }\n return booleanValue.value ? 'success' : 'error'\n})\n</script>\n\n<template>\n <VChip\n v-if=\"chip\"\n :color=\"color\"\n label\n size=\"small\"\n >\n {{ text }}\n </VChip>\n <span v-else>{{ text }}</span>\n</template>\n","<script lang=\"ts\" setup>\nimport ACardLoader from '@/components/ACardLoader.vue'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n loading?: boolean\n title?: string\n }>(),\n {\n loading: undefined,\n title: undefined,\n }\n)\n\nconst loadingComputed = computed(() => {\n return props.loading ? 'primary' : false\n})\n</script>\n\n<template>\n <VCard\n :title=\"title\"\n variant=\"flat\"\n :loading=\"loadingComputed\"\n >\n <ACardLoader :loading=\"loading\" />\n <slot />\n </VCard>\n</template>\n","import type { DocId } from '@/types/common'\nimport { isProxy, isRef, toRaw, unref } from 'vue'\n\nexport const isUndefined = (value: unknown): value is undefined => {\n return typeof value === 'undefined'\n}\n\nexport const isDefined = <T>(value: T | undefined): value is T => {\n return !isUndefined(value)\n}\n\nexport const isNull = (value: unknown): value is null => {\n return value === null\n}\n\nexport const isNumber = (value: unknown): value is number => {\n return typeof value === 'number'\n}\n\nexport const isString = (value: unknown): value is string => {\n return typeof value === 'string'\n}\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const isArray = <T = unknown>(value: unknown): value is Array<T> => {\n return Array.isArray(value)\n}\n\nexport const isFunction = <T extends (...args: any[]) => any>(value: unknown): value is T => {\n return typeof value === 'function'\n}\n\nexport const isBoolean = (value: unknown): value is boolean => {\n return typeof value === 'boolean'\n}\n\nexport const isDocId = (value: unknown): value is DocId => {\n return isString(value) && /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(value)\n}\n\nexport const isInt = (value: any): value is number => {\n const x = parseFloat(value)\n\n return !isNaN(value) && (x | 0) === x\n}\n\nexport const isObject = (value: unknown): value is object => {\n return typeof value === 'object' && !isArray(value) && !isNull(value)\n}\n\nexport const isEmptyObject = <T>(value: T): value is T => {\n if (isObject(value)) {\n return Object.keys(value).length === 0\n }\n return false\n}\n\nexport const isEmptyArray = (value: unknown): value is [] => {\n return isArray(value) && value.length === 0\n}\n\nexport const isEmpty = (value: unknown): boolean => {\n return (\n isNull(value) || isUndefined(value) || value === '' || value === 0 || isEmptyArray(value) || isEmptyObject(value)\n )\n}\n/**\n * Use only for objects with some primitives like:\n * number, string, boolean, null. Not supported: function, undefined, symbol, ...\n */\nexport const cloneDeep = <T>(object: T) => {\n if (typeof structuredClone === 'function') {\n try {\n if (isProxy(object)) {\n return structuredClone(toRaw(object)) as T\n }\n if (isRef(object)) {\n return structuredClone(unref(object)) as T\n }\n return structuredClone(object) as T\n } catch (error) {\n return JSON.parse(JSON.stringify(object)) as T\n }\n }\n return JSON.parse(JSON.stringify(object)) as T\n}\n","import type { UrlParams } from '@/services/api/apiHelper'\nimport { isNull, isUndefined } from '@/utils/common'\n\nexport const stringToInt = (value: any, fallbackValue = 0): number => {\n let check = fallbackValue\n try {\n check = Number.parseInt(value, 10)\n } catch {\n return fallbackValue\n }\n\n if (Number.isNaN(check)) {\n return fallbackValue\n }\n\n return check\n}\n\nexport const stringToFloat = (value: any, fallbackValue = 0): number => {\n let check = fallbackValue\n try {\n check = Number.parseFloat(value)\n } catch {\n return fallbackValue\n }\n\n if (Number.isNaN(check)) {\n return fallbackValue\n }\n\n return check\n}\n\nexport const stringSplitOnFirstOccurrence = (value: string, delimiter = '') => {\n const index = value.indexOf(delimiter)\n\n return {\n start: value.slice(0, index),\n end: value.slice(index + delimiter.length),\n }\n}\n\nexport const stringToSlug = (value: string) => {\n return value\n .toString()\n .toLowerCase()\n .trim()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/&/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '')\n}\n\ntype Kebab<T extends string, A extends string = ''> = T extends `${infer F}${infer R}`\n ? Kebab<R, `${A}${F extends Lowercase<F> ? '' : '-'}${Lowercase<F>}`>\n : A\n\nexport const stringToKebabCase = <T extends string>(value: T): Kebab<T> =>\n value.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase() as Kebab<T>\n\nexport const stringTrimLength = (value: string, maxLength = 80): string => {\n if (value.length > maxLength) {\n return value.substring(1, maxLength) + '...'\n }\n\n return value\n}\n\n/**\n * Converts colon parameters to real values from params.\n *\n * @param template url containing colon parameters, example: '/:id/edit'\n * @param params object containing real values to be replaced, example: { id:5 }\n */\nexport const stringUrlTemplateReplace = (template: string, params: UrlParams) => {\n if (template.indexOf(':') === -1) return template\n const newParts: string[] = []\n const parts = template.split('/')\n parts.forEach((part, index) => {\n newParts[index] = part\n if (!part.startsWith(':')) return\n const key = part.substring(1)\n if (!isUndefined(params[key])) newParts[index] = params[part.substring(1)] + ''\n })\n return newParts.join('/')\n}\n\n/**\n * Converts colon parameters to real values from params. Same as above but it additionally supports vue router regexp.\n *\n * @param template url containing colon parameters, example: '/:id(\\\\d+)/edit'\n * @param params object containing real values to be replaced, example: { id:5 }\n */\nexport const stringUrlTemplateReplaceVueRouter = (template: string, params: UrlParams) => {\n if (template.indexOf(':') === -1) return template\n const newParts: string[] = []\n const parts = template.split('/')\n parts.forEach((part: string, index: number) => {\n newParts[index] = part\n if (!part.startsWith(':')) return\n newParts[index] = part.substring(1)\n const regex = /^:([a-zA-Z0-9_-]+).*/\n const match = part.match(regex)\n if (isNull(match) || !match[1]) return\n if (!isUndefined(params[match[1]])) newParts[index] = params[match[1]] + ''\n })\n return newParts.join('/')\n}\n\n/**\n * Slot names with dots are not valid, Vue takes dots as modifiers, so we must replace dots with dash.\n */\nexport const stringNormalizeForSlotName = (name: string) => name.replace('.', '-')\n\nexport const stringIsValidEmail = (email: string): boolean => {\n const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,63}$/\n return emailRegex.test(email)\n}\n","import type { InjectionKey } from 'vue'\nimport type { CurrentUserType, CustomAclResolver } from '@/AnzuSystemsCommonAdmin'\nimport type { LanguageCode } from '@/composables/languageSettings'\n\nexport const SystemScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SystemScope')\nexport const SubjectScopeSymbol: InjectionKey<string | undefined> = Symbol.for('anzu:SubjectScope')\nexport const CurrentUserSymbol: InjectionKey<CurrentUserType | undefined> = Symbol.for('anzu:CurrentUser')\nexport const CustomAclResolverSymbol: InjectionKey<CustomAclResolver | undefined> = Symbol.for('anzu:CustomAclResolver')\nexport const AvailableLanguagesSymbol: InjectionKey<LanguageCode[] | undefined> = Symbol.for('anzu:AvailableLanguages')\nexport const DefaultLanguageSymbol: InjectionKey<LanguageCode | undefined> = Symbol.for('anzu:DefaultLanguage')\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { VuetifyIconValue } from '@/types/Vuetify'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string | number | null | undefined\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n prependIcon?: VuetifyIconValue\n appendIcon?: VuetifyIconValue\n dataCy?: string\n hideLabel?: boolean\n type?: string\n step?: number\n maxlength?: number | undefined\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n prependIcon: undefined,\n appendIcon: undefined,\n dataCy: undefined,\n hideLabel: false,\n type: 'text',\n step: undefined,\n maxlength: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string | number | null | undefined): void\n (e: 'click:append', data: string | number | null | undefined): void\n (e: 'blur', data: string | number | null | undefined): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onUpdate = (newValue: string) => {\n emit('update:modelValue', newValue)\n}\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n</script>\n\n<template>\n <VTextField\n :prepend-icon=\"prependIcon\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :model-value=\"modelValue\"\n :required=\"requiredComputed\"\n :type=\"type\"\n :step=\"step\"\n :append-icon=\"appendIcon\"\n :maxlength=\"maxlength\"\n trim\n @click:append=\"(event: any) => emit('click:append', event)\"\n @blur=\"onBlur\"\n @update:model-value=\"onUpdate($event)\"\n >\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </template>\n </VTextField>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport { isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { VuetifyIconValue } from '@/types/Vuetify'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string | null // todo check number and null\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n prependIcon?: VuetifyIconValue\n appendIcon?: VuetifyIconValue\n dataCy?: string\n hideLabel?: boolean\n rows?: number\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n prependIcon: undefined,\n appendIcon: undefined,\n dataCy: undefined,\n hideLabel: false,\n rows: 1,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string | null): void\n (e: 'click:append', data: string | null): void\n (e: 'blur', data: string | null): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onUpdate = (newValue: string) => {\n emit('update:modelValue', newValue)\n}\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n</script>\n\n<template>\n <VTextarea\n :prepend-icon=\"prependIcon\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :model-value=\"modelValue\"\n :required=\"requiredComputed\"\n :rows=\"rows\"\n auto-grow\n :append-icon=\"appendIcon\"\n trim\n @click:append=\"(event: any) => emit('click:append', event)\"\n @blur=\"onBlur\"\n @update:model-value=\"onUpdate($event)\"\n >\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </template>\n </VTextarea>\n</template>\n","<script lang=\"ts\" setup>\nimport { provide } from 'vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n system: string\n subject: string\n }>(),\n {}\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nprovide<string>(SystemScopeSymbol, props.system)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nprovide<string>(SubjectScopeSymbol, props.subject)\n</script>\n\n<template>\n <slot />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, watch } from 'vue'\nimport { cloneDeep, isNull } from '@/utils/common'\nimport type { Pagination } from '@/types/Pagination'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Pagination\n itemsPerPageOptions?: number[]\n hideRecordsPerPage?: boolean\n }>(),\n {\n itemsPerPageOptions: () => [10, 25, 50],\n hideRecordsPerPage: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n (e: 'update:modelValue', data: Pagination): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: Pagination) {\n emit('update:modelValue', cloneDeep(newValue))\n },\n})\n\nconst { t } = useI18n()\n\nconst lastPage = computed(() => {\n return Math.ceil(modelValueComputed.value.totalCount / modelValueComputed.value.rowsPerPage)\n})\n\nconst displayedFrom = computed(() => {\n return modelValueComputed.value.page * modelValueComputed.value.rowsPerPage - modelValueComputed.value.rowsPerPage + 1\n})\n\nconst displayedTo = computed(() => {\n return (\n modelValueComputed.value.page * modelValueComputed.value.rowsPerPage -\n modelValueComputed.value.rowsPerPage +\n modelValueComputed.value.currentViewCount\n )\n})\n\nconst disabledFirstAndPrev = computed(() => {\n return modelValueComputed.value.page === 1\n})\n\nconst disabledLast = computed(() => {\n return !isNull(modelValueComputed.value.hasNextPage) || modelValueComputed.value.page === lastPage.value\n})\n\nconst disabledNext = computed(() => {\n return (\n (isNull(modelValueComputed.value.hasNextPage) && modelValueComputed.value.page === lastPage.value) ||\n modelValueComputed.value.hasNextPage === false\n )\n})\n\nconst computedTotalCountText = computed(() => {\n if (!isNull(modelValueComputed.value.hasNextPage)) {\n return modelValueComputed.value.hasNextPage ? displayedTo.value + 1 + '+' : displayedTo.value\n }\n return modelValueComputed.value.totalCount\n})\n\nconst rowsPerPageComputed = computed(() => {\n return modelValueComputed.value.rowsPerPage\n})\nwatch(rowsPerPageComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n modelValueComputed.value.page = 1\n emit('change')\n }\n})\nconst pageComputed = computed(() => {\n return modelValueComputed.value.page\n})\nwatch(pageComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('change')\n }\n})\n\nconst onClickFirst = () => {\n modelValueComputed.value.page = 1\n}\n\nconst onClickLast = () => {\n modelValueComputed.value.page = lastPage.value\n}\n\nconst onClickPrev = () => {\n modelValueComputed.value.page = modelValueComputed.value.page - 1\n}\n\nconst onClickNext = () => {\n modelValueComputed.value.page = modelValueComputed.value.page + 1\n}\n</script>\n\n<template>\n <div class=\"anzu-data-footer\">\n <div\n v-if=\"!hideRecordsPerPage\"\n class=\"anzu-data-footer__page-limit\"\n >\n {{ t('common.system.datatable.itemsPerPage') }}:\n <VBtnToggle\n v-model=\"modelValueComputed.rowsPerPage\"\n class=\"ml-2\"\n density=\"compact\"\n mandatory\n data-cy=\"table-size\"\n >\n <VBtn\n v-for=\"item in itemsPerPageOptions\"\n :key=\"item\"\n :color=\"item === modelValueComputed.rowsPerPage ? 'secondary' : ''\"\n :value=\"item\"\n density=\"compact\"\n size=\"small\"\n variant=\"text\"\n >\n {{ item }}\n </VBtn>\n </VBtnToggle>\n </div>\n <div class=\"anzu-data-footer__pagination\">\n {{ displayedFrom }} - {{ displayedTo }} {{ t('common.system.datatable.from') }} {{ computedTotalCountText }}\n </div>\n <div class=\"anzu-data-footer__icons-before\">\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-page-first\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickFirst\"\n />\n <VBtn\n :disabled=\"disabledFirstAndPrev\"\n icon=\"mdi-chevron-left\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickPrev\"\n />\n </div>\n <div class=\"current-page\">\n <span>{{ modelValueComputed.page }}</span>\n </div>\n <div class=\"anzu-data-footer__icons-after\">\n <VBtn\n :disabled=\"disabledNext\"\n icon=\"mdi-chevron-right\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickNext\"\n />\n <VBtn\n :disabled=\"disabledLast\"\n icon=\"mdi-page-last\"\n size=\"small\"\n variant=\"text\"\n @click.stop=\"onClickLast\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-data-footer {\n margin-top: 10px;\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n font-size: 0.75rem;\n padding: 0 8px;\n\n > div.current-page {\n padding-left: 10px;\n padding-right: 10px;\n user-select: none;\n min-width: 40px;\n display: flex;\n text-align: center;\n align-items: center;\n justify-content: center;\n }\n\n &__page-limit {\n display: flex;\n align-items: center;\n flex: 0 0 0;\n justify-content: flex-end;\n white-space: nowrap;\n margin-right: 14px;\n }\n\n &__pagination {\n display: block;\n text-align: center;\n margin: 0 32px 0 24px;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { ColumnInternalValues } from '@/composables/system/datatableColumns'\nimport { cloneDeep } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n columnsAll: ColumnInternalValues[]\n columnsHidden: Array<string>\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n buttonT: 'common.system.datatable.config',\n buttonClass: 'ml-1',\n dataCy: 'table-settings',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:columnsHidden', data: Array<string>): void\n}>()\n\nconst { t } = useI18n()\n\nconst isVisible = (key: string) => {\n return !props.columnsHidden.includes(key)\n}\n\nconst toggleVisibility = (key: string) => {\n const cloned = cloneDeep(props.columnsHidden)\n const index = cloned.indexOf(key)\n if (index > -1) {\n cloned.splice(index, 1)\n emit('update:columnsHidden', cloned)\n return\n }\n cloned.push(key)\n emit('update:columnsHidden', cloned)\n}\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n color=\"light\"\n icon\n size=\"x-small\"\n variant=\"text\"\n >\n <VIcon icon=\"mdi-cog\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n <VMenu activator=\"parent\">\n <VCard>\n <VList density=\"compact\">\n <VListItem>\n <VListItemTitle>\n <strong>{{ t('common.system.datatable.displayCols') }}</strong>\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-for=\"column in columnsAll\"\n :key=\"column.key\"\n @click.stop=\"toggleVisibility(column.key)\"\n >\n <VListItemTitle>\n <VIcon\n v-if=\"isVisible(column.key)\"\n class=\"mr-2\"\n icon=\"mdi-checkbox-marked\"\n />\n <VIcon\n v-else\n class=\"mr-2\"\n icon=\"mdi-checkbox-blank-outline\"\n />\n {{ column.title }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DatatableOrderingOption, DatatableOrderingOptions } from '@/composables/system/datatableColumns'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n variant?: 'default' | 'most-relevant'\n modelValue?: number\n customOptions?: undefined | DatatableOrderingOptions\n }>(),\n {\n variant: 'default',\n modelValue: 1,\n customOptions: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: number): void\n (e: 'sortByChange', data: DatatableOrderingOption): void\n}>()\n\nconst { t } = useI18n()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst active = ref(props.modelValue)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: number) {\n active.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst defaultItems: DatatableOrderingOptions = [\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: 'desc' } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: 'asc' } },\n]\n\nconst defaultItemsMostRelevant: DatatableOrderingOptions = [\n { id: 3, titleT: 'common.system.datatable.ordering.mostRelevant' },\n { id: 1, titleT: 'common.system.datatable.ordering.mostRecent', sortBy: { key: 'createdAt', order: 'desc' } },\n { id: 2, titleT: 'common.system.datatable.ordering.oldest', sortBy: { key: 'createdAt', order: 'asc' } },\n]\n\nconst activeTitle = computed(() => {\n const found = options.value.find((item: any) => item.id === active.value)\n if (found) return t(found.titleT)\n return ''\n})\n\nconst options = computed(() => {\n if (props.customOptions) return props.customOptions\n if (props.variant === 'most-relevant') return defaultItemsMostRelevant\n return defaultItems\n})\n\nconst onItemClick = (item: DatatableOrderingOption) => {\n modelValueComputed.value = item.id\n}\n\nwatch(\n active,\n (newValue, oldValue) => {\n if (isUndefined(oldValue) || newValue === oldValue) return\n const found = options.value.find((item: any) => item.id === newValue)\n if (found) emit('sortByChange', found)\n },\n { immediate: true }\n)\n\nwatch(\n modelValueComputed,\n (newValue, oldValue) => {\n if (isUndefined(oldValue) || newValue === oldValue) return\n active.value = newValue\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"d-flex align-center justify-center\">\n <div class=\"text-caption mr-1\">\n {{ t('common.system.datatable.ordering.title') }}:\n </div>\n <VBtn\n variant=\"text\"\n rounded=\"xl\"\n size=\"small\"\n append-icon=\"mdi-chevron-down\"\n >\n {{ activeTitle }}\n <VMenu\n activator=\"parent\"\n location=\"bottom\"\n close-on-content-click\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <VListItem\n v-for=\"item in options\"\n :key=\"item.id\"\n @click=\"onItemClick(item)\"\n >\n <VListItemTitle :class=\"{ 'font-weight-bold': item.id === active }\">\n {{ t(item.titleT) }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n","<script setup lang=\"ts\">\nconst emit = defineEmits<{\n (e: 'onCancel'): void\n}>()\n\nconst onCancel = () => {\n emit('onCancel')\n}\n</script>\n\n<template>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n >\n <VToolbarTitle class=\"flex-fill\">\n <slot />\n </VToolbarTitle>\n <VSpacer />\n <VBtn\n class=\"ml-2\"\n icon=\"mdi-close\"\n size=\"small\"\n variant=\"text\"\n data-cy=\"button-close\"\n @click.stop=\"onCancel\"\n />\n </VToolbar>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, watch } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n data: any\n }>(),\n {}\n)\n\nconst computedData = computed(() => {\n return props.data\n})\n\nwatch(\n computedData,\n (newValue) => {\n console.log(newValue)\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div />\n</template>\n","(function(){var o;\"use strict\";try{if(typeof document<\"u\"){var e=document.createElement(\"style\");e.nonce=(o=document.head.querySelector(\"meta[property=csp-nonce]\"))==null?void 0:o.content,e.appendChild(document.createTextNode(\".vue-notification-group{display:block;position:fixed;z-index:5000}.vue-notification-wrapper{display:block;overflow:hidden;width:100%;margin:0;padding:0}.notification-title{font-weight:600}.vue-notification-template{display:block;box-sizing:border-box;background:white;text-align:left}.vue-notification{display:block;box-sizing:border-box;text-align:left;font-size:12px;padding:10px;margin:0 5px 5px;color:#fff;background:#44A4FC;border-left:5px solid #187FE7}.vue-notification.warn{background:#ffb648;border-left-color:#f48a06}.vue-notification.error{background:#E54D42;border-left-color:#b82e24}.vue-notification.success{background:#68CD86;border-left-color:#42a85f}.vn-fade-enter-active,.vn-fade-leave-active,.vn-fade-move{transition:all .5s}.vn-fade-enter-from,.vn-fade-leave-to{opacity:0}\")),document.head.appendChild(e)}}catch(i){console.error(\"vite-plugin-css-injected-by-js\",i)}})();\nimport { defineComponent as D, createVNode as l, TransitionGroup as H, ref as $, computed as g, onMounted as et, Fragment as C, isVNode as nt } from \"vue\";\nconst R = /* @__PURE__ */ new Map();\nclass it {\n constructor(n, o, a) {\n this.remaining = o, this.callback = n, this.notifyItem = a, this.resume();\n }\n pause() {\n clearTimeout(this.notifyItem.timer), this.remaining -= Date.now() - this.start;\n }\n resume() {\n this.start = Date.now(), clearTimeout(this.notifyItem.timer), this.notifyItem.timer = setTimeout(this.callback, this.remaining);\n }\n}\nfunction ot(t) {\n return { all: t = t || /* @__PURE__ */ new Map(), on: function(n, o) {\n var a = t.get(n);\n a ? a.push(o) : t.set(n, [o]);\n }, off: function(n, o) {\n var a = t.get(n);\n a && (o ? a.splice(a.indexOf(o) >>> 0, 1) : t.set(n, []));\n }, emit: function(n, o) {\n var a = t.get(n);\n a && a.slice().map(function(s) {\n s(o);\n }), (a = t.get(\"*\")) && a.slice().map(function(s) {\n s(n, o);\n });\n } };\n}\nconst T = ot(), b = \"[-+]?[0-9]*.?[0-9]+\", M = [\n {\n name: \"px\",\n regexp: new RegExp(`^${b}px$`)\n },\n {\n name: \"%\",\n regexp: new RegExp(`^${b}%$`)\n },\n /**\n * Fallback option\n * If no suffix specified, assigning \"px\"\n */\n {\n name: \"px\",\n regexp: new RegExp(`^${b}$`)\n }\n], at = (t) => {\n if (t === \"auto\")\n return {\n type: t,\n value: 0\n };\n for (let n = 0; n < M.length; n++) {\n const o = M[n];\n if (o.regexp.test(t))\n return {\n type: o.name,\n value: parseFloat(t)\n };\n }\n return {\n type: \"\",\n value: t\n };\n}, rt = (t) => {\n switch (typeof t) {\n case \"number\":\n return { type: \"px\", value: t };\n case \"string\":\n return at(t);\n default:\n return { type: \"\", value: t };\n }\n}, k = {\n x: /* @__PURE__ */ new Set([\"left\", \"center\", \"right\"]),\n y: /* @__PURE__ */ new Set([\"top\", \"bottom\"])\n}, st = ((t) => () => t++)(0), lt = (t) => typeof t != \"string\" ? [] : t.split(/\\s+/gi).filter(Boolean), ct = (t) => {\n typeof t == \"string\" && (t = lt(t));\n let n = null, o = null;\n return t.forEach((a) => {\n k.y.has(a) && (o = a), k.x.has(a) && (n = a);\n }), { x: n, y: o };\n}, E = {\n position: [\"top\", \"right\"],\n cssAnimation: \"vn-fade\",\n velocityAnimation: {\n enter: (t) => ({\n height: [t.clientHeight, 0],\n opacity: [1, 0]\n }),\n leave: {\n height: 0,\n opacity: [0, 1]\n }\n }\n}, ut = /* @__PURE__ */ D({\n name: \"velocity-group\",\n inheritAttrs: !1,\n props: {\n name: {\n type: String,\n default: \"\"\n }\n },\n emits: {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n enter: (t, n) => !0,\n leave: (t, n) => !0,\n afterLeave: () => !0\n /* eslint-enable @typescript-eslint/no-unused-vars */\n },\n setup: (t, {\n slots: n,\n emit: o\n }) => {\n const a = (c, u) => {\n o(\"enter\", c, u);\n }, s = (c, u) => {\n o(\"leave\", c, u);\n }, h = () => {\n o(\"afterLeave\");\n };\n return () => l(H, {\n tag: \"div\",\n css: !1,\n name: t.name,\n onEnter: a,\n onLeave: s,\n onAfterLeave: h\n }, {\n default: () => {\n var c;\n return [(c = n.default) == null ? void 0 : c.call(n)];\n }\n });\n }\n}), ft = /* @__PURE__ */ D({\n name: \"css-group\",\n inheritAttrs: !1,\n props: {\n name: {\n type: String,\n default: \"\"\n }\n },\n setup: (t, {\n slots: n\n }) => () => l(H, {\n tag: \"div\",\n name: t.name\n }, {\n default: () => {\n var o;\n return [(o = n.default) == null ? void 0 : o.call(n)];\n }\n })\n});\nfunction dt(t) {\n return typeof t == \"function\" || Object.prototype.toString.call(t) === \"[object Object]\" && !nt(t);\n}\nconst x = {\n IDLE: 0,\n DESTROYED: 2\n}, pt = /* @__PURE__ */ D({\n // eslint-disable-next-line vue/multi-word-component-names\n name: \"notifications\",\n props: {\n group: {\n type: String,\n default: \"\"\n },\n /** \n * Width of notification holder, can be `%`, `px` string or number.\n * @example '100%', '200px', 200 \n * */\n width: {\n type: [Number, String],\n default: 300\n },\n reverse: {\n type: Boolean,\n default: !1\n },\n position: {\n type: [String, Array],\n default: () => E.position\n },\n classes: {\n type: String,\n default: \"vue-notification\"\n },\n animationType: {\n type: String,\n default: \"css\",\n validator(t) {\n return t === \"css\" || t === \"velocity\";\n }\n },\n animation: {\n type: Object,\n default() {\n return E.velocityAnimation;\n }\n },\n animationName: {\n type: String,\n default: E.cssAnimation\n },\n speed: {\n type: Number,\n default: 300\n },\n /** Time (in ms) to keep the notification on screen (if **negative** - notification will stay **forever** or until clicked) */\n duration: {\n type: Number,\n default: 3e3\n },\n delay: {\n type: Number,\n default: 0\n },\n max: {\n type: Number,\n default: 1 / 0\n },\n ignoreDuplicates: {\n type: Boolean,\n default: !1\n },\n closeOnClick: {\n type: Boolean,\n default: !0\n },\n pauseOnHover: {\n type: Boolean,\n default: !1\n },\n /** Use [v-html](https://vuejs.org/api/built-in-directives.html#v-html) to set `title` and `text` */\n dangerouslySetInnerHtml: {\n type: Boolean,\n default: !1\n }\n },\n emits: {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n click: (t) => !0,\n destroy: (t) => !0,\n start: (t) => !0\n /* eslint-enable @typescript-eslint/no-unused-vars */\n },\n setup: (t, {\n emit: n,\n slots: o,\n expose: a\n }) => {\n const s = $([]), h = $(null), c = R.get(\"velocity\"), u = g(() => t.animationType === \"velocity\"), j = g(() => u.value ? ut : ft), f = g(() => s.value.filter((e) => e.state !== x.DESTROYED)), N = g(() => rt(t.width)), A = g(() => {\n const {\n x: e,\n y: i\n } = ct(t.position), r = N.value.value, d = N.value.type, m = {\n width: r + d\n };\n return i && (m[i] = \"0px\"), e && (e === \"center\" ? m.left = `calc(50% - ${+r / 2}${d})` : m[e] = \"0px\"), m;\n }), w = g(() => \"bottom\" in A.value), B = (e) => {\n n(\"click\", e), t.closeOnClick && y(e);\n }, V = () => {\n var e;\n t.pauseOnHover && ((e = h.value) == null || e.pause());\n }, Y = () => {\n var e;\n t.pauseOnHover && ((e = h.value) == null || e.resume());\n }, G = (e = {}) => {\n if (e.group || (e.group = \"\"), e.data || (e.data = {}), t.group !== e.group)\n return;\n if (e.clean || e.clear) {\n q();\n return;\n }\n const i = typeof e.duration == \"number\" ? e.duration : t.duration, r = typeof e.speed == \"number\" ? e.speed : t.speed, d = typeof e.ignoreDuplicates == \"boolean\" ? e.ignoreDuplicates : t.ignoreDuplicates, {\n title: m,\n text: K,\n type: Q,\n data: U,\n id: X\n } = e, p = {\n id: X || st(),\n title: m,\n text: K,\n type: Q,\n state: x.IDLE,\n speed: r,\n length: i + 2 * r,\n data: U\n };\n i >= 0 && (h.value = new it(() => y(p), p.length, p));\n const Z = t.reverse ? !w.value : w.value;\n let v = -1;\n const tt = f.value.some((L) => L.title === e.title && L.text === e.text);\n (!d || !tt) && (Z ? (s.value.push(p), n(\"start\", p), f.value.length > t.max && (v = 0)) : (s.value.unshift(p), n(\"start\", p), f.value.length > t.max && (v = f.value.length - 1)), v !== -1 && y(f.value[v]));\n }, _ = (e) => {\n W(e);\n }, F = (e) => [\"vue-notification-template\", t.classes, e.type || \"\"], P = (e) => u.value ? void 0 : {\n transition: `all ${e.speed}ms`\n }, y = (e) => {\n clearTimeout(e.timer), e.state = x.DESTROYED, I(), n(\"destroy\", e);\n }, W = (e) => {\n const i = s.value.find((r) => r.id === e);\n i && y(i);\n }, q = () => {\n f.value.forEach(y);\n }, O = (e, i) => {\n var d;\n const r = (d = t.animation) == null ? void 0 : d[e];\n return typeof r == \"function\" ? r(i) : r;\n }, z = (e, i) => {\n if (!u.value)\n return;\n const r = O(\"enter\", e);\n c(e, r, {\n duration: t.speed,\n complete: i\n });\n }, J = (e, i) => {\n if (!u.value)\n return;\n const r = O(\"leave\", e);\n c(e, r, {\n duration: t.speed,\n complete: i\n });\n };\n function I() {\n s.value = s.value.filter((e) => e.state !== x.DESTROYED);\n }\n return et(() => {\n T.on(\"add\", G), T.on(\"close\", _);\n }), () => {\n let e;\n return l(\"div\", {\n class: \"vue-notification-group\",\n style: A.value\n }, [l(j.value, {\n name: t.animationName,\n onEnter: z,\n onLeave: J,\n onAfterLeave: I\n }, dt(e = f.value.map((i) => l(\"div\", {\n key: i.id,\n class: \"vue-notification-wrapper\",\n style: P(i),\n \"data-id\": i.id,\n onMouseenter: V,\n onMouseleave: Y\n }, [o.body ? o.body({\n item: i,\n class: [t.classes, i.type].join(\"\"),\n close: () => y(i)\n }) : l(\"div\", {\n class: F(i),\n onClick: () => B(i)\n }, [t.dangerouslySetInnerHtml ? l(C, null, [i.title ? l(\"div\", {\n class: \"notification-title\",\n innerHTML: i.title\n }, null) : null, l(\"div\", {\n class: \"notification-content\",\n innerHTML: i.text\n }, null)]) : l(C, null, [i.title ? l(\"div\", {\n class: \"notification-title\"\n }, [i.title]) : null, l(\"div\", {\n class: \"notification-content\"\n }, [i.text])])])]))) ? e : {\n default: () => [e]\n })]);\n };\n }\n}), S = (t) => {\n typeof t == \"string\" && (t = { title: \"\", text: t }), typeof t == \"object\" && T.emit(\"add\", t);\n};\nS.close = (t) => {\n T.emit(\"close\", t);\n};\nconst vt = () => ({ notify: S }), yt = \"Notifications\";\nfunction mt(t, n = {}) {\n Object.entries(n).forEach((a) => R.set(...a));\n const o = n.name || \"notify\";\n t.config.globalProperties[\"$\" + o] = S, t.component(n.componentName || yt, pt);\n}\nconst xt = {\n install: mt\n};\nexport {\n pt as Notifications,\n xt as default,\n S as notify,\n vt as useNotification\n};\n","import type { Locale, Path } from 'vue-i18n'\nimport { createI18n } from 'vue-i18n'\nimport type en from '@/locales/en'\n\nexport type MessageSchema = typeof en\n\nconst REQUIRED_LOCALES = ['en', 'sk']\n\nexport const i18n = createI18n<[MessageSchema]>({\n globalInjection: false,\n legacy: false,\n locale: REQUIRED_LOCALES[0],\n fallbackLocale: false,\n missing: (locale: Locale, key: Path) => {\n if (REQUIRED_LOCALES.includes(locale)) {\n console.warn(`Missing ${locale} translation: ${key}`)\n }\n },\n})\n","export const isAnzuFatalError = (error: any): error is AnzuFatalError => {\n return error instanceof AnzuFatalError\n}\n\nexport class AnzuFatalError extends Error {\n constructor(cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuFatalError'\n this.cause = cause\n this.message = message\n }\n}\n","export const HTTP_STATUS_OK = 200\nexport const HTTP_STATUS_CREATED = 201\nexport const HTTP_STATUS_NO_CONTENT = 204\nexport const HTTP_STATUS_BAD_REQUEST = 400\nexport const HTTP_STATUS_UNAUTHORIZED = 401\nexport const HTTP_STATUS_FORBIDDEN = 403\nexport const HTTP_STATUS_UNPROCESSABLE_ENTITY = 422\n\nexport const HTTP_STATUS_VALID_ALL = [HTTP_STATUS_OK, HTTP_STATUS_CREATED, HTTP_STATUS_NO_CONTENT]\n","import axios from 'axios'\nimport { HTTP_STATUS_FORBIDDEN } from '@/composables/statusCodes'\n\nexport const axiosErrorResponseIsForbidden = (error: Error) => {\n return axios.isAxiosError(error) && error.response?.status === HTTP_STATUS_FORBIDDEN\n}\n\nexport const isAnzuApiForbiddenError = (error: any): error is AnzuApiForbiddenError => {\n return error instanceof AnzuApiForbiddenError\n}\n\nexport class AnzuApiForbiddenError extends Error {\n constructor(cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiForbiddenError'\n this.cause = cause\n this.message = message\n }\n}\n","import axios, { type AxiosError } from 'axios'\nimport { HTTP_STATUS_UNPROCESSABLE_ENTITY } from '@/composables/statusCodes'\n\ninterface ValidationResponseDataFields {\n [key: string]: string[]\n}\n\nexport interface AnzuApiValidationResponseData {\n contextId: string\n error: string\n fields: ValidationResponseDataFields\n}\n\nexport interface ValidationError {\n field: string\n errors: string[]\n}\n\nconst ERROR_VALIDATION = 'validation_failed'\n\nexport const axiosErrorResponseHasValidationData = (error: Error) => {\n return (\n axios.isAxiosError(error) &&\n error.response?.status === HTTP_STATUS_UNPROCESSABLE_ENTITY &&\n error.response.data?.error === ERROR_VALIDATION &&\n error.response.data?.fields\n )\n}\n\nexport const isAnzuApiValidationError = (error: any): error is AnzuApiValidationError => {\n return error instanceof AnzuApiValidationError\n}\n\nfunction resolveResponseData(axiosError: AxiosError, system: string, entity: string) {\n const data = axiosError.response?.data as AnzuApiValidationResponseData\n const items = [] as ValidationError[]\n for (const [key, values] of Object.entries(data.fields)) {\n items.push({\n field: system + '.' + entity + '.model.' + key,\n errors: values,\n })\n }\n return items\n}\n\nexport class AnzuApiValidationError extends Error {\n fields: ValidationError[]\n\n constructor(axiosError: AxiosError, system: string, entity: string, cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiValidationError'\n this.cause = cause\n this.message = message\n this.fields = resolveResponseData(axiosError, system, entity)\n }\n}\n","export const isAnzuApiResponseCodeError = (error: any): error is AnzuApiResponseCodeError => {\n return error instanceof AnzuApiResponseCodeError\n}\n\nexport class AnzuApiResponseCodeError extends Error {\n code: number\n\n constructor(code: number, cause?: Error, message?: string) {\n super(message)\n this.name = 'AnzuApiResponseCodeError'\n this.cause = cause\n this.code = code\n }\n}\n","import axios, { type AxiosError } from 'axios'\nimport { HTTP_STATUS_UNPROCESSABLE_ENTITY } from '@/composables/statusCodes'\n\ninterface ForbiddenOperationResponseData {\n contextId: string\n error: string\n detail: string\n}\n\nconst ERROR_FORBIDDEN_OPERATION = 'forbidden_operation_error'\n\nexport const axiosErrorResponseHasForbiddenOperationData = (error: Error) => {\n return (\n axios.isAxiosError(error) &&\n error.response?.status === HTTP_STATUS_UNPROCESSABLE_ENTITY &&\n error.response.data?.error === ERROR_FORBIDDEN_OPERATION &&\n error.response.data?.detail\n )\n}\n\nexport const isAnzuApiForbiddenOperationError = (error: any): error is AnzuApiForbiddenOperationError => {\n return error instanceof AnzuApiForbiddenOperationError\n}\n\nfunction resolveResponseData(axiosError: AxiosError) {\n const data = axiosError.response?.data as ForbiddenOperationResponseData\n return data.detail\n}\n\nexport class AnzuApiForbiddenOperationError extends Error {\n detail: string\n\n constructor(axiosError: AxiosError, cause?: Error, message = '') {\n super(message)\n this.name = 'AnzuApiForbiddenOperationError'\n this.cause = cause\n this.message = message\n this.detail = resolveResponseData(axiosError)\n }\n}\n","import { notify } from '@kyvg/vue3-notification'\nimport { i18n } from '@/plugins/i18n'\nimport { isAnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isAnzuApiForbiddenError } from '@/model/error/AnzuApiForbiddenError'\nimport { isAnzuApiValidationError, type ValidationError } from '@/model/error/AnzuApiValidationError'\nimport { isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { isAnzuApiForbiddenOperationError } from '@/model/error/AnzuApiForbiddenOperationError'\n\nconst DEFAULT_DURATION_SECONDS = 3\n\nexport const NEW_LINE_MARK = '\\n'\n\nexport type RecordWasType = 'created' | 'deleted' | 'updated' | 'published' | 'unpublished' | 'enabled' | 'disabled'\n\nexport function useAlerts() {\n const showSuccess = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'success',\n })\n }\n\n const showSuccessT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showSuccess(t(translation), duration)\n }\n\n const showError = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showErrorT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showError(t(translation), duration)\n }\n\n const showInfo = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'info',\n })\n }\n\n const showInfoT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showInfo(t(translation), duration)\n }\n\n const showWarning = (message: string, duration = DEFAULT_DURATION_SECONDS) => {\n notify({\n group: 'alerts',\n text: message,\n duration: duration * 1000,\n type: 'warning',\n })\n }\n\n const showWarningT = (translation: string, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n showWarning(t(translation), duration)\n }\n\n const showValidationError = (duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.fixValidationErrors'),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showRecordWas = (variant: RecordWasType, duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.recordWas.' + variant),\n duration: duration * 1000,\n type: 'success',\n })\n }\n\n const showApiValidationError = (errors: ValidationError[], duration = -1, fieldIsTranslated = false) => {\n const { t, te } = i18n.global\n const texts = [t('common.alert.fixApiValidationErrors')]\n\n for (let i = 0; i < errors.length; i++) {\n let fieldText = ''\n if (fieldIsTranslated) {\n fieldText += errors[i].field\n } else if (te(errors[i].field)) {\n fieldText += t(errors[i].field)\n }\n const errorsTexts = new Set<string>()\n for (let j = 0; j < errors[i].errors.length; j++) {\n if (te('error.apiValidation.' + errors[i].errors[j])) {\n errorsTexts.add(t('error.apiValidation.' + errors[i].errors[j]))\n continue\n }\n errorsTexts.add(t('error.apiValidation.noTranslation'))\n }\n if (fieldText.length > 0) {\n texts.push(fieldText + ': ' + Array.from(errorsTexts).join(', '))\n }\n }\n notify({\n group: 'alerts',\n text: texts.join(NEW_LINE_MARK),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showApiForbiddenOperationError = (detail: string, duration = -1) => {\n const { t, te } = i18n.global\n let text = t('error.apiForbiddenOperation.noTranslation')\n if (te('error.apiForbiddenOperation.' + detail)) {\n text = t('error.apiForbiddenOperation.' + detail)\n }\n notify({\n group: 'alerts',\n text: text,\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showUnknownError = (duration = -1) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.unknownError'),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showForbiddenError = (duration = DEFAULT_DURATION_SECONDS) => {\n const { t } = i18n.global\n notify({\n group: 'alerts',\n text: t('common.alert.forbiddenError'),\n duration: duration * 1000,\n type: 'error',\n })\n }\n\n const showErrorsDefault = (error: any) => {\n if (isAnzuApiForbiddenError(error)) {\n showForbiddenError()\n return true\n }\n if (isAnzuApiValidationError(error)) {\n showApiValidationError(error.fields)\n return true\n }\n if (isAnzuApiForbiddenOperationError(error)) {\n showApiForbiddenOperationError(error.detail)\n return true\n }\n if (isAnzuFatalError(error)) {\n showUnknownError()\n return true\n }\n if (isAnzuApiResponseCodeError(error)) {\n showUnknownError()\n return true\n }\n return false\n }\n\n return {\n showSuccess,\n showSuccessT,\n showError,\n showErrorT,\n showInfo,\n showInfoT,\n showWarning,\n showWarningT,\n showValidationError,\n showRecordWas,\n showApiValidationError,\n showApiForbiddenOperationError,\n showUnknownError,\n showForbiddenError,\n showErrorsDefault,\n }\n}\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n buttonClass?: string\n maxWidth?: number | undefined\n dataCy?: string\n v?: any\n callCreate: () => Promise<any>\n disableRedirect?: boolean\n redirectRouteName?: string | undefined\n redirectParamName?: string\n }>(),\n {\n buttonClass: '',\n maxWidth: undefined,\n dataCy: 'button-create',\n v: undefined,\n disableRedirect: false,\n redirectRouteName: undefined,\n redirectParamName: 'id',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'onConfirm'): void\n (e: 'onOpen'): void\n (e: 'onClose'): void\n (e: 'onError', data: any): void\n (e: 'onSuccess', data: any): void\n}>()\n\nconst { t } = useI18n()\n\nconst buttonLoading = ref(false)\n\nconst onOpen = () => {\n emit('update:modelValue', true)\n emit('onOpen')\n}\n\nconst onClose = () => {\n emit('update:modelValue', false)\n emit('onClose')\n}\n\nconst router = useRouter()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n emit('onConfirm')\n try {\n buttonLoading.value = true\n props.v?.$touch()\n if (!isUndefined(props.v) && props.v.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await props.callCreate()\n emit('onSuccess', res)\n showRecordWas('created')\n onClose()\n if (!isUndefined(res.id) && !props.disableRedirect && props.redirectRouteName) {\n router.push({\n name: props.redirectRouteName,\n params: { [props.redirectParamName]: res[props.redirectParamName] },\n })\n }\n } catch (error) {\n showErrorsDefault(error)\n emit('onError', error)\n } finally {\n buttonLoading.value = false\n }\n}\n</script>\n\n<template>\n <ABtnPrimary\n :class=\"buttonClass\"\n rounded=\"pill\"\n :data-cy=\"dataCy\"\n @click.stop=\"onOpen\"\n >\n <slot name=\"button-title\">\n {{ t('common.button.create') }}\n </slot>\n <VDialog\n :model-value=\"modelValue\"\n :max-width=\"maxWidth\"\n persistent\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"modelValue\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onClose\">\n <slot name=\"title\">\n {{ t('common.button.create') }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <slot name=\"content\" />\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onClose\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.create') }}\n </slot>\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </ABtnPrimary>\n</template>\n","<script lang=\"ts\" setup>\nimport { onMounted, ref } from 'vue'\nimport { useFetch } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n configUrl?: string | undefined | null\n }>(),\n {\n configUrl: null,\n }\n)\n\nconst { t } = useI18n()\n\ninterface AdminConfigItem {\n id: string\n title: string\n url: string\n icon: string\n}\n\nconst config = ref<AdminConfigItem[]>([])\n\nonMounted(async () => {\n if (props.configUrl && props.configUrl.length > 0) {\n try {\n const { data } = await useFetch<AdminConfigItem[]>(props.configUrl).get().json()\n config.value = data.value\n } catch (e) {\n //\n }\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"config.length > 0\"\n variant=\"text\"\n size=\"small\"\n icon\n >\n <VIcon icon=\"mdi-dots-grid\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.system.adminSwitcher.button') }}\n </VTooltip>\n <VMenu activator=\"parent\">\n <VCard>\n <div class=\"a-admin-switcher__content\">\n <a\n v-for=\"item in config\"\n :key=\"item.id\"\n :href=\"item.url\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n class=\"a-admin-switcher__item\"\n >\n <img\n :src=\"item.icon\"\n :alt=\"item.title\"\n >\n <span class=\"a-admin-switcher__item-title\">{{ item.title }}</span>\n </a>\n </div>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n\n<style lang=\"scss\">\n.a-admin-switcher {\n &__content {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-template-rows: auto;\n padding: 6px;\n }\n\n &__item {\n display: flex;\n width: 96px;\n height: 96px;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-decoration: none;\n color: rgba(var(--v-theme-on-surface), var(--v-hover-opacity));\n\n &:hover {\n background-color: rgba(var(--v-theme-on-surface), 10%);\n border-radius: 8px;\n }\n\n &-title {\n display: flex;\n font-weight: normal;\n font-size: 14px;\n line-height: 14px;\n color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity));\n padding: 8px 0;\n }\n\n img {\n display: block;\n width: auto;\n height: 50px;\n }\n }\n}\n</style>\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","import type { OpUnitType, QUnitType } from 'dayjs'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { stringToInt } from '@/utils/string'\nimport type { DatetimeUTC, DatetimeUTCNullable } from '@/types/common'\n\ndayjs.extend(utc)\n\nconst SUFFIX = '.000000Z'\nconst FORMAT = 'YYYY-MM-DDTHH:mm:ss'\n\nexport const DATETIME_MIN = '1970-01-01T00:00:00.000000Z'\nexport const DATETIME_MAX = '2100-01-01T00:00:00.000000Z'\n\nexport const dateNow = (): Date => {\n return dayjs().utc().toDate()\n}\n\nexport const dateTimeToDate = (isoDate: DatetimeUTC | DatetimeUTCNullable | string): Date => {\n return dayjs(isoDate).toDate()\n}\nexport const timestampCurrent = (): number => {\n return stringToInt(dayjs().utc().unix())\n}\n\nexport const dateTimeNow = (ignoreFractionalSeconds = true, ignoreSeconds = false): string => {\n if (ignoreFractionalSeconds && !ignoreSeconds) return dayjs().utc().format('YYYY-MM-DDTHH:mm:ss') + SUFFIX\n if (ignoreFractionalSeconds && ignoreSeconds) return dayjs().utc().format('YYYY-MM-DDTHH:mm:00') + SUFFIX\n if (!ignoreFractionalSeconds && ignoreSeconds) return dayjs().utc().format('YYYY-MM-DDTHH:mm:00.SSSSSS') + 'Z'\n return dayjs().utc().format('YYYY-MM-DDTHH:mm:ss.SSSSSS') + 'Z'\n}\n\nexport const dateTimeStartOfDay = (days = 0) => {\n if (days === 0) {\n return dayjs().startOf('day').utc().format(FORMAT) + SUFFIX\n }\n return dayjs().add(days, 'days').startOf('day').utc().format(FORMAT) + SUFFIX\n}\n\nexport const dateTimeEndOfDay = (days = 0) => {\n if (days === 0) {\n return dayjs().endOf('day').utc().format(FORMAT) + SUFFIX\n }\n return dayjs().add(days, 'days').endOf('day').utc().format(FORMAT) + SUFFIX\n}\n\nexport const dateModifyMinutes = (minutes = 0, date: null | Date = null): Date => {\n if (date === null) date = new Date()\n if (minutes === 0) return date\n if (minutes > 0) return dayjs(date).add(minutes, 'minutes').toDate()\n if (minutes < 0) return dayjs(date).subtract(Math.abs(minutes), 'minutes').toDate()\n return date\n}\n\nexport const dateToUtc = (date: dayjs.ConfigType) => {\n return dayjs(date).utc().format('YYYY-MM-DDTHH:mm:ss') + SUFFIX\n}\n\nexport const yearNow = () => {\n return dayjs().utc().format('YYYY')\n}\n\nexport const dateTimePretty = (\n isoDate: DatetimeUTC | DatetimeUTCNullable | string | null,\n edgeDateValue = ''\n): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format('DD.MM.YYYY HH:mm')\n}\n\nexport const dateTimeFriendly = (isoDate: DatetimeUTC | DatetimeUTCNullable | string | null, edgeDateValue = '') => {\n if (\n isoDate === DATETIME_MAX ||\n isoDate === DATETIME_MIN ||\n isoDate === '' ||\n isNull(isoDate) ||\n isUndefined(isoDate)\n ) {\n return edgeDateValue\n }\n let displayYear = true\n let displayDayMonth = true\n const date = dayjs(isoDate)\n const now = dayjs()\n if (now.format('YYYY') === date.format('YYYY')) {\n displayYear = false\n }\n if (now.format('YYYY-MM-DD') === date.format('YYYY-MM-DD')) {\n displayDayMonth = false\n }\n if (!displayYear && !displayDayMonth) return dayjs(date).format('H:mm')\n if (!displayYear) return dayjs(date).format('D.M. H:mm')\n return dayjs(date).format('D.M.YYYY H:mm')\n}\n\nexport const datePretty = (isoDate: DatetimeUTC | DatetimeUTCNullable | string | null, edgeDateValue = ''): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format('DD.MM.YYYY')\n}\n\nexport const timePretty = (isoDate: DatetimeUTC | DatetimeUTCNullable | string | null, edgeDateValue = ''): string => {\n if (isoDate === DATETIME_MAX || isoDate === DATETIME_MIN || isoDate === '' || isNull(isoDate) || isUndefined(isoDate))\n return edgeDateValue\n return dayjs(isoDate).format('HH:mm')\n}\n\nexport const dateDiff = (date1: Date, date2: Date, unit: QUnitType | OpUnitType = 'ms') => {\n const date1dayjs = dayjs(date1)\n const date2dayjs = dayjs(date2)\n return date1dayjs.diff(date2dayjs, unit)\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport { dateTimePretty } from '@/utils/datetime'\nimport ARow from '@/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n }\n)\n\nconst createdAt = computed(() => {\n return dateTimePretty(props.data.createdAt)\n})\nconst modifiedAt = computed(() => {\n return dateTimePretty(props.data.modifiedAt)\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow :title=\"t('common.model.tracking.created')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideCreatedAt\"\n class=\"mr-2\"\n >\n {{ createdAt }}\n </div>\n </div>\n </ARow>\n <ARow :title=\"t('common.model.tracking.modified')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideModifiedAt\"\n class=\"mr-2\"\n >\n {{ modifiedAt }}\n </div>\n </div>\n </ARow>\n</template>\n","import { cloneDeep, isArray, isUndefined } from '@/utils/common'\nimport type { Filter, FilterBag, FilterVariant } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\n\nexport interface MakeFilterOptions<T = any> {\n name: string\n variant: FilterVariant\n titleT?: string\n default: T | null\n field: string\n multiple: boolean\n mandatory: boolean\n exclude: boolean\n}\n\nexport function makeFilterHelper<T = any>(system?: string, subject?: string) {\n return (options: Partial<MakeFilterOptions<T>> = {}): Filter<T> => {\n const variant = isUndefined(options.variant) ? 'eq' : options.variant\n\n let defaultValue = isUndefined(options.default) ? null : options.default\n if (isUndefined(options.default) && variant === 'in') {\n defaultValue = [] as any\n }\n let titleT = options.titleT\n if (isUndefined(titleT) && system && subject && options.name) {\n titleT = system + '.' + subject + '.filter.' + options.name\n }\n\n return {\n variant,\n titleT,\n default: defaultValue,\n field: isUndefined(options.field) ? '' : options.field,\n multiple: isArray(defaultValue),\n mandatory: isUndefined(options.mandatory) ? false : options.mandatory,\n exclude: isUndefined(options.exclude) ? false : options.exclude,\n model: cloneDeep(defaultValue),\n error: '',\n }\n }\n}\n\nexport function useFilterHelpers() {\n const clearOne = (filter: Filter) => {\n filter.model = filter.default\n filter.error = ''\n }\n\n const clearAll = (filterBag: FilterBag) => {\n for (const filterName in filterBag) {\n clearOne(filterBag[filterName])\n }\n }\n\n const clearAllErrors = (filterBag: FilterBag) => {\n for (const filterName in filterBag) {\n filterBag[filterName].error = ''\n }\n }\n\n const resetFilter = (filterBag: FilterBag, pagination: Pagination, callback?: any) => {\n clearAll(filterBag)\n pagination.page = 1\n if (callback) callback()\n }\n\n const submitFilter = (filterBag: FilterBag, pagination: Pagination, callback: () => any) => {\n clearAllErrors(filterBag)\n pagination.page = 1\n callback()\n }\n\n return {\n clearAllErrors,\n clearAll,\n clearOne,\n resetFilter,\n submitFilter,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n placeholder: undefined,\n dataCy: 'filter-string',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { clearOne } = useFilterHelpers()\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (props.modelValue.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (props.modelValue.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (props.modelValue.variant === 'contains' || props.modelValue.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"value\"\n :label=\"label\"\n :placeholder=\"placeholderComputed\"\n :clearable=\"!modelValue.mandatory\"\n :data-cy=\"dataCy\"\n @click:clear.stop=\"clearOne(modelValue)\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport type { Ref } from 'vue'\nimport { computed, ref, toRefs, watch } from 'vue'\nimport { isDocId, isEmpty, isInt, isString, isUndefined } from '@/utils/common'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n filterId?: Filter | undefined\n filterDocId?: Filter | undefined\n filterText?: Filter | undefined\n filterUrl?: Filter | undefined\n filterOverrides?: Filter[] | undefined\n placeholder?: string | undefined\n dataCy?: string\n }>(),\n {\n filterId: undefined,\n filterDocId: undefined,\n filterText: undefined,\n filterUrl: undefined,\n filterOverrides: undefined,\n placeholder: undefined,\n dataCy: 'filter-mixed',\n }\n)\nconst model = ref('')\nconst { filterId, filterText, filterDocId, filterUrl, filterOverrides } = toRefs(props)\nconst { t } = useI18n()\n\nconst filterActive = (filter: Ref<Filter | undefined> | undefined): filter is Ref<Filter> => {\n return !isUndefined(filter) && !isUndefined(filter.value)\n}\nconst { clearOne } = useFilterHelpers()\nconst clearIfActive = (filter: Ref<Filter | undefined> | undefined) => {\n if (filterActive(filter)) {\n clearOne(filter.value)\n }\n}\nconst clearAllActiveExcept = (exceptFilter: Ref<Filter | undefined> | undefined = undefined) => {\n if (exceptFilter?.value?.titleT !== filterId?.value?.titleT) {\n clearIfActive(filterId)\n }\n if (exceptFilter?.value?.titleT !== filterDocId?.value?.titleT) {\n clearIfActive(filterDocId)\n }\n if (exceptFilter?.value?.titleT !== filterText?.value?.titleT) {\n clearIfActive(filterText)\n }\n if (exceptFilter?.value?.titleT !== filterUrl?.value?.titleT) {\n clearIfActive(filterUrl)\n }\n if (!isUndefined(filterOverrides)) {\n filterOverrides.value?.forEach((filter: any) => {\n if (exceptFilter?.value?.titleT !== filter.titleT) {\n clearOne(filter)\n }\n })\n }\n}\nconst overrideFilter: Ref<Filter | undefined> = ref(undefined)\nwatch(overrideFilter, () => {\n if (filterActive(overrideFilter)) {\n overrideFilter.value.model = model.value\n currentFilter.value = overrideFilter.value\n clearAllActiveExcept(overrideFilter)\n return\n }\n setFilters(model.value)\n})\nconst currentFilter: Ref<Filter | undefined> = ref(undefined)\nwatch(model, (newModel: string) => {\n setFilters(newModel)\n})\nconst setFilters = (newModel: string) => {\n if (filterActive(overrideFilter)) {\n overrideFilter.value.model = newModel\n return\n }\n const filter = autodetectFilter(newModel)\n if (!isUndefined(filter)) {\n filter.model = newModel\n }\n currentFilter.value = filter\n clearAllActiveExcept(currentFilter)\n}\nconst autodetectFilter = (newModel: string): Filter | undefined => {\n if (isInt(newModel)) {\n if (filterActive(filterId)) {\n return filterId.value\n }\n }\n if (isDocId(newModel)) {\n if (filterActive(filterDocId)) {\n return filterDocId.value\n }\n }\n if (isString(newModel) && newModel.length > 0) {\n if (filterActive(filterUrl) && newModel.startsWith('http')) {\n return filterUrl.value\n }\n if (filterActive(filterText)) {\n return filterText.value\n }\n }\n return undefined\n}\n\nconst label = computed(() => {\n if (filterActive(overrideFilter)) {\n return t(overrideFilter.value.titleT ?? '')\n }\n if (filterActive(currentFilter)) {\n return t(currentFilter.value.titleT ?? '')\n }\n const filterLabels = []\n if (filterActive(filterId)) {\n filterLabels.push(t(filterId.value.titleT ?? ''))\n }\n if (filterActive(filterDocId)) {\n filterLabels.push(t(filterDocId.value.titleT ?? ''))\n }\n if (filterActive(filterUrl)) {\n filterLabels.push(t(filterUrl.value.titleT ?? ''))\n }\n if (filterActive(filterText)) {\n filterLabels.push(t(filterText.value.titleT ?? ''))\n }\n return filterLabels.join('/')\n})\n\nconst currentFilterModel = computed(() => {\n return currentFilter.value?.model\n})\nwatch(currentFilterModel, (newModel) => {\n if (!isEmpty(model.value) && isEmpty(newModel)) {\n model.value = ''\n }\n})\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (currentFilter.value?.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (currentFilter.value?.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (currentFilter.value?.variant === 'contains' || currentFilter.value?.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"model\"\n :label=\"label\"\n :data-cy=\"dataCy\"\n :placeholder=\"placeholderComputed\"\n >\n <template\n v-if=\"filterOverrides\"\n #append-inner\n >\n <VBtnToggle\n v-model=\"overrideFilter\"\n divided\n class=\"override-toggle\"\n >\n <VBtn\n v-for=\"(override, index) in filterOverrides\"\n :key=\"index\"\n size=\"small\"\n :value=\"override\"\n >\n {{ t(override.titleT ?? '') }}\n </VBtn>\n </VBtnToggle>\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.override-toggle {\n height: 80%;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { stringToInt } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-string',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: stringToInt(newValue + '') } })\n },\n})\n\nconst { clearOne } = useFilterHelpers()\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <VTextField\n v-model=\"value\"\n :label=\"label\"\n :clearable=\"!modelValue.mandatory\"\n :data-cy=\"dataCy\"\n @click:clear.stop=\"clearOne(modelValue)\"\n />\n</template>\n","export const eventClickBlur = (event?: Event): void => {\n if (event?.currentTarget instanceof HTMLElement) {\n event.currentTarget.blur()\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.advancedFilters',\n buttonClass: 'mt-1',\n dataCy: 'filter-advanced',\n }\n)\nconst emit = defineEmits<{\n (e: 'advancedFilter'): void\n}>()\n\nconst active = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n active.value = !active.value\n emit('advancedFilter')\n}\n\nconst icon = computed(() => {\n return active.value ? 'mdi-chevron-double-up' : 'mdi-chevron-double-down'\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <VIcon :icon=\"icon\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\n\nwithDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n touched?: boolean\n }>(),\n {\n buttonT: 'common.button.submitFilter',\n buttonClass: '',\n dataCy: 'filter-submit',\n touched: true,\n }\n)\nconst emit = defineEmits<{\n (e: 'submit'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('submit')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n color=\"primary\"\n type=\"submit\"\n :variant=\"touched ? 'flat' : 'text'\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n tooltipT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n tooltipT: 'common.button.resetFilter',\n buttonClass: 'ml-2',\n dataCy: 'filter-reset',\n }\n)\nconst emit = defineEmits<{\n (e: 'reset'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('reset')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n class=\"px-2\"\n :data-cy=\"dataCy\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n @click.stop=\"onClick\"\n >\n <VIcon\n color=\"grey darken-1\"\n icon=\"mdi-filter-remove-outline\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(tooltipT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport AFilterAdvancedButton from '@/components/buttons/filter/AFilterAdvancedButton.vue'\nimport AFilterSubmitButton from '@/components/buttons/filter/AFilterSubmitButton.vue'\nimport AFilterResetButton from '@/components/buttons/filter/AFilterResetButton.vue'\n\nwithDefaults(\n defineProps<{\n enableAdvanced?: boolean\n enableTop?: boolean\n hideButtons?: boolean\n touched?: boolean\n }>(),\n {\n enableAdvanced: false,\n enableTop: false,\n hideButtons: false,\n touched: true,\n }\n)\nconst emit = defineEmits<{\n (e: 'resetFilter'): void\n}>()\n\nconst resetFilter = () => {\n emit('resetFilter')\n}\n\nconst advancedFilter = ref(false)\n\nconst toggleAdvancedFilter = () => {\n advancedFilter.value = !advancedFilter.value\n}\n</script>\n\n<template>\n <VRow\n v-if=\"enableTop\"\n dense\n >\n <VCol class=\"\">\n <slot name=\"top\" />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol\n v-if=\"enableAdvanced\"\n class=\"v-col-filters--show-hide\"\n cols=\"auto\"\n >\n <AFilterAdvancedButton\n :button-active=\"advancedFilter\"\n @advanced-filter=\"toggleAdvancedFilter\"\n />\n </VCol>\n <VCol class=\"\">\n <slot name=\"default\" />\n <VExpandTransition v-if=\"enableAdvanced\">\n <div v-show=\"advancedFilter\">\n <slot name=\"advanced\" />\n </div>\n </VExpandTransition>\n </VCol>\n <VCol\n v-if=\"!hideButtons\"\n class=\"v-col-filters--buttons text-right\"\n cols=\"auto\"\n >\n <slot name=\"buttons\">\n <AFilterSubmitButton :touched=\"touched\" />\n <AFilterResetButton @reset=\"resetFilter\" />\n </slot>\n </VCol>\n </VRow>\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useI18n } from 'vue-i18n'\n\nexport enum Grant {\n Deny = 0,\n AllowOwner = 1,\n Allow = 2,\n Default = Deny,\n}\n\nexport function useGrant() {\n const { t } = useI18n()\n\n const grantOptions = ref<ValueObjectOption<Grant>[]>([\n {\n value: Grant.Deny,\n title: t('common.permission.grant.deny'),\n color: 'error',\n },\n {\n value: Grant.AllowOwner,\n title: t('common.permission.grant.allowOwner'),\n color: 'warning',\n },\n {\n value: Grant.Allow,\n title: t('common.permission.grant.allow'),\n color: 'success',\n },\n ])\n\n const getGrantOption = (value: Grant): ValueObjectOption<Grant> => {\n return grantOptions.value.find((item) => item.value === value) as ValueObjectOption<Grant>\n }\n\n return {\n grantOptions,\n getGrantOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { Grant, useGrant } from '@/model/valueObject/Grant'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n availableGrants: Grant[]\n selectedGrant: Grant | undefined\n}>()\nconst emit = defineEmits<{\n (e: 'change', data?: Grant): void\n}>()\nconst selectedGrant = computed({\n get() {\n return props.selectedGrant\n },\n set(newGrant) {\n emit('change', newGrant)\n },\n})\nconst { getGrantOption } = useGrant()\n</script>\n\n<template>\n <VBtnToggle\n v-model=\"selectedGrant\"\n divided\n density=\"compact\"\n variant=\"outlined\"\n class=\"text-disabled\"\n >\n <VBtn\n v-for=\"availableGrant in availableGrants\"\n :key=\"availableGrant\"\n :value=\"availableGrant\"\n :color=\"getGrantOption(availableGrant)?.color\"\n >\n {{ getGrantOption(availableGrant)?.title }}\n </VBtn>\n </VBtnToggle>\n</template>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { useI18n } from 'vue-i18n'\n\nexport enum GrantOrigin {\n Role = 'role',\n Group = 'group',\n User = 'user',\n DefaultGrant = 'default',\n Default = DefaultGrant,\n}\n\nexport function useGrantOrigin() {\n const { t } = useI18n()\n\n const grantOriginOptions = ref<ValueObjectOption<GrantOrigin>[]>([\n {\n value: GrantOrigin.Role,\n title: t('common.permission.grantOrigin.role'),\n },\n {\n value: GrantOrigin.Group,\n title: t('common.permission.grantOrigin.group'),\n },\n {\n value: GrantOrigin.User,\n title: t('common.permission.grantOrigin.user'),\n },\n {\n value: GrantOrigin.DefaultGrant,\n title: t('common.permission.grantOrigin.defaultGrant'),\n },\n ])\n\n const getGrantOriginOption = (value: GrantOrigin): ValueObjectOption<GrantOrigin> => {\n return grantOriginOptions.value.find((item) => item.value === value) as ValueObjectOption<GrantOrigin>\n }\n\n return {\n grantOriginOptions,\n getGrantOriginOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { Grant, useGrant } from '@/model/valueObject/Grant'\nimport { GrantOrigin, useGrantOrigin } from '@/model/valueObject/GrantOrigin'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n grant: Grant\n grantOrigin: GrantOrigin\n}>()\n\nconst { getGrantOption } = useGrant()\nconst grantOption = computed(() => getGrantOption(props.grant))\n\nconst { getGrantOriginOption } = useGrantOrigin()\nconst grantOriginOption = computed(() => getGrantOriginOption(props.grantOrigin))\n</script>\n\n<template>\n <VChip\n v-if=\"grantOption\"\n :color=\"grantOption.color\"\n label\n size=\"small\"\n >\n {{ grantOption.title }}\n <span\n v-if=\"grantOrigin !== GrantOrigin.DefaultGrant\"\n class=\"ml-1\"\n >({{ grantOriginOption?.title }})</span>\n </VChip>\n</template>\n","import { isUndefined } from '@/utils/common'\n\nexport const objectDeepFreeze = <T>(obj: T) => {\n const propNames = Object.getOwnPropertyNames(obj)\n for (const name of propNames) {\n const value = (obj as any)[name]\n if (value && typeof value === 'object') {\n objectDeepFreeze(value)\n }\n }\n return Object.freeze(obj)\n}\n\nexport const objectGetValues = <T>(obj: { [key: string]: T }): T[] => {\n return Object.keys(obj).map((k) => obj[k])\n}\n\nexport const objectGetValueByPath = <R = any>(obj: any, path: string, splitChar = '.') => {\n const a = path.split(splitChar)\n let o = obj\n while (a.length) {\n const n = a.shift()\n if (isUndefined(n) || !(n in o)) return\n o = o[n]\n }\n return o as R\n}\n\nexport const objectSetValueByPath = (obj: any, path: string, value: any, splitChar = '.') => {\n const a = path.split(splitChar)\n let o = obj\n while (a.length - 1) {\n const n = a.shift()\n if (isUndefined(n)) return // todo check if correct if\n if (!(n in o)) o[n] = {}\n o = o[n]\n }\n o[a[0]] = value\n}\n\nexport function objectDeletePropertyByPath<T>(obj: T, path: string, splitChar = '.'): T {\n const pathParts = path.split(splitChar)\n const lastIndex = pathParts.length - 1\n\n function recurse(obj: any, index = 0) {\n const key = pathParts[index]\n\n if (index === lastIndex) {\n delete obj[key]\n return\n }\n\n recurse(obj[key], index + 1)\n }\n\n recurse(obj)\n return obj\n}\n\nexport type Immutable<T> = {\n readonly [K in keyof T]: Immutable<T[K]>\n}\n","import type { IntegerId } from '@/types/common'\nimport { isObject } from '@/utils/common'\n\nexport interface OwnerAware {\n owners: IntegerId[]\n}\n\nexport const isOwnerAware = (value: unknown): value is OwnerAware => {\n return isObject(value) && Object.hasOwn(value, 'owners')\n}\n","import type { IntegerIdNullable } from '@/types/common'\n\nexport interface CreatedByAware {\n createdBy: IntegerIdNullable\n}\n\nexport const isCreatedByAware = (value: object): value is CreatedByAware => {\n return Object.hasOwn(value, 'createdBy')\n}\n","import { isDefined, isUndefined } from '@/utils/common'\nimport { objectGetValueByPath } from '@/utils/object'\nimport { Grant } from '@/model/valueObject/Grant'\nimport { isOwnerAware } from '@/types/OwnerAware'\nimport { isCreatedByAware } from '@/types/CreatedByAware'\nimport { inject } from 'vue'\nimport type { CurrentUserType, CustomAclResolver } from '@/AnzuSystemsCommonAdmin'\nimport type { AclValue } from '@/types/Permission'\nimport { CurrentUserSymbol, CustomAclResolverSymbol } from '@/components/injectionKeys'\n\nexport const ROLE_SUPER_ADMIN = 'ROLE_ADMIN'\n\nexport type AclResolverConfig = {\n disableInject?: true | undefined\n currentUser?: CurrentUserType\n customAclProvider?: CustomAclResolver\n}\n\nexport function useAcl<T extends AclValue = AclValue>(options?: AclResolverConfig) {\n const shouldInject = isUndefined(options) || isUndefined(options.disableInject)\n const currentUser =\n options?.currentUser ??\n (shouldInject ? (inject(CurrentUserSymbol, undefined) as CurrentUserType | undefined) : undefined)\n const customAclProvider =\n options?.customAclProvider ??\n (shouldInject ? (inject(CustomAclResolverSymbol, undefined) as CustomAclResolver) : undefined)\n\n const can = (acl: T, subject?: object): boolean => {\n if (isUndefined(currentUser))\n throw new Error('Composable useAcl can be used as a global state without providing current user as a parameter.')\n if (isDefined(customAclProvider) && isDefined(customAclProvider.can)) return customAclProvider.can(acl, subject)\n if (isUndefined(currentUser.value) || currentUser.value.id === 0) return false\n if (currentUser.value.roles.includes(ROLE_SUPER_ADMIN)) return true\n const permission = objectGetValueByPath(currentUser.value, 'resolvedPermissions.' + acl)\n if (isUndefined(permission)) return false\n switch (permission) {\n case Grant.Allow:\n return true\n case Grant.Deny:\n return false\n case Grant.AllowOwner:\n if (isUndefined(subject))\n throw new Error(`Required subject for acl \"${acl}\" to determine an ability to access the resource.`)\n return canOwner(subject)\n default:\n return false\n }\n }\n\n function canOwner(subject: object) {\n if (isUndefined(currentUser))\n throw new Error('Composable useAcl can be used as a global state without providing current user as a parameter.')\n if (!isUndefined(customAclProvider) && !isUndefined(customAclProvider.canOwner))\n return customAclProvider.canOwner(subject)\n if (currentUser.value) {\n if (isOwnerAware(subject)) {\n return subject.owners.includes(currentUser.value.id)\n }\n if (isCreatedByAware(subject)) {\n return subject.createdBy === currentUser.value.id\n }\n }\n return false\n }\n\n const canForAll = (acls: T[], subject?: object): boolean => {\n if (acls.length === 0) {\n return true\n }\n return acls.every((acl) => {\n return can(acl, subject)\n })\n }\n\n const canForSome = (acls: T[], subject?: object): boolean => {\n if (acls.length === 0) {\n return true\n }\n return acls.some((acl) => {\n return can(acl, subject)\n })\n }\n\n return {\n can,\n canForAll,\n canForSome,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useAcl } from '@/composables/system/ability'\nimport { inject, ref, watch } from 'vue'\nimport type { CurrentUserType } from '@/AnzuSystemsCommonAdmin'\nimport type { AclValue } from '@/types/Permission'\nimport { CurrentUserSymbol } from '@/components/injectionKeys'\n\nconst props = withDefaults(\n defineProps<{\n permission: AclValue\n subject?: object\n }>(),\n {\n subject: undefined,\n }\n)\n\nconst currentUser = inject(CurrentUserSymbol) as CurrentUserType\nconst { can } = useAcl()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst allowed = ref<boolean>(can(props.permission, props.subject))\n\nwatch(currentUser, () => {\n allowed.value = can(props.permission, props.subject)\n})\n</script>\n\n<template>\n <slot v-if=\"allowed\" />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { dateTimePretty } from '@/utils/datetime'\nimport type { DatetimeUTCNullable } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n dateTime: DatetimeUTCNullable\n edgeDateValue?: string\n }>(),\n {\n edgeDateValue: 'n/a',\n }\n)\n\nconst pretty = computed(() => {\n return dateTimePretty(props.dateTime, props.edgeDateValue)\n})\n</script>\n\n<template>\n {{ pretty }}\n</template>\n","export var HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n];\nexport var defaults = {\n _disable: [],\n allowInput: false,\n allowInvalidPreload: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n autoFillDefaultTime: true,\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n var week1 = new Date(date.getFullYear(), 0, 4);\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false,\n};\n","export var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n};\nexport default english;\n","export var pad = function (number, length) {\n if (length === void 0) { length = 2; }\n return (\"000\" + number).slice(length * -1);\n};\nexport var int = function (bool) { return (bool === true ? 1 : 0); };\nexport function debounce(fn, wait) {\n var t;\n return function () {\n var _this = this;\n var args = arguments;\n clearTimeout(t);\n t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n };\n}\nexport var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n};\n","export function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n var e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n}\nexport function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (var key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n}\nexport function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n}\n","import { int, pad } from \"../utils\";\nvar doNothing = function () { return undefined; };\nexport var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\nexport var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (dateObj, amPM, locale) {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n },\n};\nexport var tokenRegex = {\n D: \"\",\n F: \"\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\",\n};\nexport var formats = {\n Z: function (date) { return date.toISOString(); },\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n H: function (date) { return pad(date.getHours()); },\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n S: function (date) { return pad(date.getSeconds()); },\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n Y: function (date) { return pad(date.getFullYear(), 4); },\n d: function (date) { return pad(date.getDate()); },\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n i: function (date) { return pad(date.getMinutes()); },\n j: function (date) { return date.getDate(); },\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n m: function (date) { return pad(date.getMonth() + 1); },\n n: function (date) { return date.getMonth() + 1; },\n s: function (date) { return date.getSeconds(); },\n u: function (date) { return date.getTime(); },\n w: function (date) { return date.getDay(); },\n y: function (date) { return String(date.getFullYear()).substring(2); },\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined && !isMobile) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n};\nexport var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined)\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n var format = givenFormat || (config || defaults).dateFormat;\n var datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (config && config.parseDate) {\n parsedDate = config.parseDate(date, format);\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr)) {\n parsedDate = new Date(date);\n }\n else {\n var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token = format[i];\n var isBackSlash = token === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token] && !escaped) {\n regexStr += tokenRegex[token];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token],\n val: match[++matchIndex],\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\";\n }\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n };\n};\nexport function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { timeless = true; }\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n return (3600 * (date1.getHours() - date2.getHours()) +\n 60 * (date1.getMinutes() - date2.getMinutes()) +\n date1.getSeconds() -\n date2.getSeconds());\n}\nexport var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function (secondsSinceMidnight) {\n var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n var hours = config.defaultHour;\n var minutes = config.defaultMinute;\n var seconds = config.defaultSeconds;\n if (config.minDate !== undefined) {\n var minHour = config.minDate.getHours();\n var minMinutes = config.minDate.getMinutes();\n var minSeconds = config.minDate.getSeconds();\n if (hours < minHour) {\n hours = minHour;\n }\n if (hours === minHour && minutes < minMinutes) {\n minutes = minMinutes;\n }\n if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n seconds = config.minDate.getSeconds();\n }\n if (config.maxDate !== undefined) {\n var maxHr = config.maxDate.getHours();\n var maxMinutes = config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = config.maxDate.getSeconds();\n }\n return { hours: hours, minutes: minutes, seconds: seconds };\n}\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n l10n: English,\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self.onMouseOver = onMouseOver;\n self._createElement = createElement;\n self.createDay = createDay;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.updateValue = updateValue;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { yr = self.currentYear; }\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n },\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function getClosestActiveElement() {\n var _a;\n return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n .activeElement || document.activeElement);\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1) {\n return;\n }\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n var defaultDate = self.config.minDate === undefined ||\n compareDates(new Date(), self.config.minDate) >= 0\n ? new Date()\n : new Date(self.config.minDate.getTime());\n var defaults = getDefaultHours(self.config);\n defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n self.selectedDates = [defaultDate];\n self.latestSelectedDateObj = defaultDate;\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n var limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n var limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (self.config.maxTime !== undefined &&\n self.config.minTime !== undefined &&\n self.config.minTime > self.config.maxTime) {\n var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n if (currentTime > maxBound && currentTime < minBound) {\n var result = parseSeconds(minBound);\n hours = result[0];\n minutes = result[1];\n seconds = result[2];\n }\n }\n else {\n if (limitMaxHours) {\n var maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n var minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n minutes = minTime.getMinutes();\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n }\n setHours(hours, minutes, seconds);\n }\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date && date instanceof Date) {\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n }\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n function onYearInput(event) {\n var eventTarget = getEventTarget(event);\n var year = parseInt(eventTarget.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n remove: function () { return element.removeEventListener(event, handler, options); },\n });\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(getEventTarget(e));\n });\n bind(self._input, \"keydown\", onKeyDown);\n if (self.calendarContainer !== undefined) {\n bind(self.calendarContainer, \"keydown\", onKeyDown);\n }\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", documentClick);\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"click\", onMonthNavClick);\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"click\", selectDate);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return getEventTarget(e).select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"click\", timeIncrement);\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"click\", function (e) {\n updateTime(e);\n });\n }\n }\n if (self.config.allowInput) {\n bind(self._input, \"blur\", onBlur);\n }\n }\n function jumpToDate(jumpDate, triggerChange) {\n var jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n var oldYear = self.currentYear;\n var oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n function timeIncrement(e) {\n var eventTarget = getEventTarget(e);\n if (~eventTarget.className.indexOf(\"arrow\"))\n incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n function incrementNumInput(e, delta, inputElem) {\n var target = e && getEventTarget(e);\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n var customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, _dayNumber, i) {\n var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n i % 7 === 6) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n var activeElement = getClosestActiveElement();\n var dayFocused = isInView(activeElement || document.body);\n var startElem = current !== undefined\n ? current\n : dayFocused\n ? activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined) {\n self._input.focus();\n }\n else if (!dayFocused) {\n focusOnDayElem(startElem);\n }\n else {\n getNextAvailableDay(startElem, offset);\n }\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n var dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n var shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = getEventTarget(e);\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container: container,\n yearElement: yearElement,\n monthElement: monthElement,\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (var m = self.config.showMonths; m--;) {\n var month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: function () { return self.__hidePrevMonthArrow; },\n set: function (bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n },\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: function () { return self.__hideNextMonthArrow; },\n set: function (bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n },\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n var defaults = getDefaultHours(self.config);\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel,\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel,\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? defaults.hours\n : military2ampm(defaults.hours));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : defaults.minutes);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.hourElement.setAttribute(\"maxlength\", \"2\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.minuteElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : defaults.seconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.secondElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (var i = self.config.showMonths; i--;) {\n var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n if (!self.weekdayContainer) {\n return;\n }\n var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n <span class='flatpickr-weekday'>\\n \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n </span>\\n \";\n }\n }\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers,\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { toInitial = true; }\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n if (self.config.enableTime === true) {\n var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n setHours(hours, minutes, seconds);\n }\n self.redraw();\n if (triggerChangeEvent)\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (var i = self._handlers.length; i--;) {\n self._handlers[i].remove();\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n var wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach(function (k) {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n if (self.config.allowInput) {\n self.setDate(self._input.value, false, self.config.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined &&\n self.input.value !== \"\" &&\n self.input.value !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config &&\n self.config.mode === \"range\" &&\n self.selectedDates.length === 1)\n self.clear(false);\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless) {\n var _a;\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless);\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (!self.config.enable && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck))\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n return bool;\n else if (typeof d === \"string\") {\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onBlur(e) {\n var isInput = e.target === self._input;\n var valueChanged = self._input.value.trimEnd() !== getDateStr();\n if (isInput &&\n valueChanged &&\n !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n }\n function onKeyDown(e) {\n var eventTarget = getEventTarget(e);\n var isInput = self.config.wrap\n ? element.contains(eventTarget)\n : eventTarget === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, eventTarget === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n self.close();\n return eventTarget.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(eventTarget) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(eventTarget);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27:\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n var activeElement = getClosestActiveElement();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (activeElement && isInView(activeElement)))) {\n var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer &&\n eventTarget.$i !== undefined) ||\n eventTarget === self.input ||\n eventTarget === self.altInput) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (eventTarget === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(eventTarget);\n if (i !== -1) {\n var target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(eventTarget) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(eventTarget)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem, cellClass) {\n if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(cellClass) ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n var hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n hoverableCells.forEach(function (dayElem) {\n var date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return;\n }\n else if (containsDisabled && !outOfRange)\n return;\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n });\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n var eventTarget = getEventTarget(e);\n if (eventTarget) {\n eventTarget.blur();\n }\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n else if (self._input.disabled || self.config.inline) {\n return;\n }\n var wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"allowInvalidPreload\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n },\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n },\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\"),\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return self.config._maxTime; },\n set: minMaxTimeSetter(\"max\"),\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (var i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n getInputElem().className + \" \" + self.config.altInputClass;\n }\n triggerEvent(\"onParseConfig\");\n }\n function getInputElem() {\n return self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (typeof self.config.position === \"function\") {\n return void self.config.position(self, customPositionElement);\n }\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n var top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n var left = window.pageXOffset + inputBounds.left;\n var isCenter = false;\n var isRight = false;\n if (configPosHorizontal === \"center\") {\n left -= (calendarWidth - inputBounds.width) / 2;\n isCenter = true;\n }\n else if (configPosHorizontal === \"right\") {\n left -= calendarWidth - inputBounds.width;\n isRight = true;\n }\n toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n var right = window.document.body.offsetWidth -\n (window.pageXOffset + inputBounds.right);\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = top + \"px\";\n if (!rightMost) {\n self.calendarContainer.style.left = left + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = right + \"px\";\n }\n else {\n var doc = getDocumentStyleSheet();\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n self.calendarContainer.style.left = centerLeft + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function getDocumentStyleSheet() {\n var editableSheet = null;\n for (var i = 0; i < document.styleSheets.length; i++) {\n var sheet = document.styleSheets[i];\n if (!sheet.cssRules)\n continue;\n try {\n sheet.cssRules;\n }\n catch (err) {\n continue;\n }\n editableSheet = sheet;\n break;\n }\n return editableSheet != null ? editableSheet : createStyleSheet();\n }\n function createStyleSheet() {\n var style = document.createElement(\"style\");\n document.head.appendChild(style);\n return style.sheet;\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n buildMonthSwitch();\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(getEventTarget(e), isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n var selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n var single = self.config.mode === \"single\" && !self.config.enableTime;\n var range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate],\n positionElement: [updatePositionElement],\n clickOpens: [\n function () {\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n else {\n self._input.removeEventListener(\"focus\", self.open);\n self._input.removeEventListener(\"click\", self.open);\n }\n },\n ],\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(true);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n self.selectedDates = (self.config.allowInvalidPreload\n ? dates\n : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { format = self.config.dateFormat; }\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate(undefined, triggerChange);\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map(function (rule) {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined),\n };\n return rule;\n })\n .filter(function (x) { return x; });\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n var preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n }\n function setupInputs() {\n self.input = getInputElem();\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n updatePositionElement();\n }\n function updatePositionElement() {\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n var inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n if (self.input.getAttribute(\"step\"))\n self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", function (e) {\n self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var i = 0; i < self.selectedDates.length; i++) {\n var selectedDate = self.selectedDates[i];\n if (selectedDate instanceof Date &&\n compareDates(selectedDate, date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach(function (yearElement, i) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(specificFormat) {\n var format = specificFormat ||\n (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n return self.selectedDates\n .map(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { triggerChange = true; }\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n var eventTarget = getEventTarget(e);\n var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n var isNextMonth = self.nextMonthNav.contains(eventTarget);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(eventTarget) >= 0) {\n eventTarget.select();\n }\n else if (eventTarget.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (eventTarget.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n}\nfunction _flatpickr(nodeList, config) {\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n}\nvar flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n en: __assign({}, English),\n default: __assign({}, English),\n};\nflatpickr.localize = function (l10n) {\n flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n}\nDate.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","const includedEvents = [\n 'onChange',\n 'onClose',\n 'onDestroy',\n 'onMonthChange',\n 'onOpen',\n 'onYearChange',\n];\n// Let's not emit these events by default\nconst excludedEvents = [\n 'onValueUpdate',\n 'onDayCreate',\n 'onParseConfig',\n 'onReady',\n 'onPreCalendarPosition',\n 'onKeyDown',\n];\nexport { includedEvents, excludedEvents };\n","function camelToKebab(string) {\n return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction arrayify(obj) {\n return obj instanceof Array\n ? obj\n : [obj];\n}\nfunction nullify(value) {\n return (value && value.length)\n ? value\n : null;\n}\nexport { camelToKebab, nullify, arrayify };\n","import flatpickr from 'flatpickr';\nimport { defineComponent, h, nextTick } from 'vue';\nimport { excludedEvents, includedEvents } from './events';\nimport { camelToKebab, nullify, arrayify } from './util';\n// Keep a copy of all events for later use\nconst allEvents = [...includedEvents, ...excludedEvents];\n// Passing these properties in `fp.set()` method will cause flatpickr to trigger some callbacks\nconst configCallbacks = ['locale', 'showMonths'];\nexport default defineComponent({\n name: 'FlatPickr',\n compatConfig: {\n MODE: 3,\n },\n render() {\n return h('input', {\n type: 'text',\n 'data-input': true,\n disabled: this.disabled,\n onInput: this.onInput,\n });\n },\n emits: [\n 'blur',\n 'update:modelValue',\n ...allEvents.map(camelToKebab)\n ],\n props: {\n modelValue: {\n type: [String, Number, Date, Array, null],\n required: true,\n },\n // https://flatpickr.js.org/options/\n config: {\n type: Object,\n default: () => ({\n defaultDate: null,\n wrap: false,\n })\n },\n events: {\n type: Array,\n default: () => includedEvents\n },\n disabled: {\n type: Boolean,\n default: false\n },\n },\n data() {\n return {\n fp: null, //todo make it non-reactive\n };\n },\n mounted() {\n // Return early if flatpickr is already loaded\n /* istanbul ignore if */\n if (this.fp)\n return;\n // Init flatpickr\n this.fp = flatpickr(this.getElem(), this.prepareConfig());\n // Attach blur event\n this.fpInput().addEventListener('blur', this.onBlur);\n // Immediate watch will fail before fp is set,\n // so we need to start watching after mount\n this.$watch('disabled', this.watchDisabled, {\n immediate: true\n });\n },\n methods: {\n prepareConfig() {\n // Don't mutate original object on parent component\n let safeConfig = Object.assign({}, this.config);\n this.events.forEach((hook) => {\n // Respect global callbacks registered via setDefault() method\n let globalCallbacks = flatpickr.defaultConfig[hook] || [];\n // Inject our own method along with user's callbacks\n let localCallback = (...args) => {\n this.$emit(camelToKebab(hook), ...args);\n };\n // Overwrite with merged array\n safeConfig[hook] = arrayify(safeConfig[hook] || []).concat(globalCallbacks, localCallback);\n });\n const onCloseCb = this.onClose.bind(this);\n safeConfig['onClose'] = arrayify(safeConfig['onClose'] || []).concat(onCloseCb);\n // Set initial date without emitting any event\n safeConfig.defaultDate = this.modelValue || safeConfig.defaultDate;\n return safeConfig;\n },\n /**\n * Get the HTML node where flatpickr to be attached\n * Bind on parent element if wrap is true\n */\n getElem() {\n return this.config.wrap ? this.$el.parentNode : this.$el;\n },\n /**\n * Watch for value changed by date-picker itself and notify parent component\n */\n onInput(event) {\n const input = event.target;\n // Let's wait for DOM to be updated\n nextTick().then(() => {\n this.$emit('update:modelValue', nullify(input.value));\n });\n },\n fpInput() {\n return this.fp.altInput || this.fp.input;\n },\n /**\n * Blur event is required by many validation libraries\n */\n onBlur(event) {\n this.$emit('blur', nullify(event.target.value));\n },\n /**\n * Flatpickr does not emit input event in some cases\n */\n onClose(selectedDates, dateStr) {\n this.$emit('update:modelValue', dateStr);\n },\n /**\n * Watch for the disabled property and sets the value to the real input.\n */\n watchDisabled(newState) {\n if (newState) {\n this.fpInput().setAttribute('disabled', '');\n }\n else {\n this.fpInput().removeAttribute('disabled');\n }\n }\n },\n watch: {\n /**\n * Watch for any config changes and redraw date-picker\n */\n config: {\n deep: true,\n handler(newConfig) {\n if (!this.fp)\n return;\n let safeConfig = Object.assign({}, newConfig);\n // Workaround: Don't pass hooks to configs again otherwise\n // previously registered hooks will stop working\n // Notice: we are looping through all events\n // This also means that new callbacks can not be passed once component has been initialized\n allEvents.forEach((hook) => {\n delete safeConfig[hook];\n });\n this.fp.set(safeConfig);\n // Workaround: Allow to change locale dynamically\n configCallbacks.forEach((name) => {\n if (typeof safeConfig[name] !== 'undefined') {\n this.fp.set(name, safeConfig[name]);\n }\n });\n }\n },\n /**\n * Watch for changes from parent component and update DOM\n */\n modelValue(newValue) {\n var _a;\n // Prevent updates if v-model value is same as input's current value\n if (!this.$el || newValue === nullify(this.$el.value))\n return;\n // Notify flatpickr instance that there is a change in value\n (_a = this.fp) === null || _a === void 0 ? void 0 : _a.setDate(newValue, true);\n }\n },\n beforeUnmount() {\n /* istanbul ignore else */\n if (!this.fp)\n return;\n this.fpInput().removeEventListener('blur', this.onBlur);\n this.fp.destroy();\n this.fp = null;\n }\n});\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.sk = {}));\n}(this, (function (exports) { 'use strict';\n\n var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n ? window.flatpickr\n : {\n l10ns: {},\n };\n var Slovak = {\n weekdays: {\n shorthand: [\"Ned\", \"Pon\", \"Ut\", \"Str\", \"Štv\", \"Pia\", \"Sob\"],\n longhand: [\n \"Nedeľa\",\n \"Pondelok\",\n \"Utorok\",\n \"Streda\",\n \"Štvrtok\",\n \"Piatok\",\n \"Sobota\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"Máj\",\n \"Jún\",\n \"Júl\",\n \"Aug\",\n \"Sep\",\n \"Okt\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"Január\",\n \"Február\",\n \"Marec\",\n \"Apríl\",\n \"Máj\",\n \"Jún\",\n \"Júl\",\n \"August\",\n \"September\",\n \"Október\",\n \"November\",\n \"December\",\n ],\n },\n firstDayOfWeek: 1,\n rangeSeparator: \" do \",\n time_24hr: true,\n ordinal: function () {\n return \".\";\n },\n };\n fp.l10ns.sk = Slovak;\n var sk = fp.l10ns;\n\n exports.Slovak = Slovak;\n exports.default = sk;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.cs = {}));\n}(this, (function (exports) { 'use strict';\n\n var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n ? window.flatpickr\n : {\n l10ns: {},\n };\n var Czech = {\n weekdays: {\n shorthand: [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"],\n longhand: [\n \"Neděle\",\n \"Pondělí\",\n \"Úterý\",\n \"Středa\",\n \"Čtvrtek\",\n \"Pátek\",\n \"Sobota\",\n ],\n },\n months: {\n shorthand: [\n \"Led\",\n \"Ún\",\n \"Bře\",\n \"Dub\",\n \"Kvě\",\n \"Čer\",\n \"Čvc\",\n \"Srp\",\n \"Zář\",\n \"Říj\",\n \"Lis\",\n \"Pro\",\n ],\n longhand: [\n \"Leden\",\n \"Únor\",\n \"Březen\",\n \"Duben\",\n \"Květen\",\n \"Červen\",\n \"Červenec\",\n \"Srpen\",\n \"Září\",\n \"Říjen\",\n \"Listopad\",\n \"Prosinec\",\n ],\n },\n firstDayOfWeek: 1,\n ordinal: function () {\n return \".\";\n },\n rangeSeparator: \" do \",\n weekAbbreviation: \"Týd.\",\n scrollTitle: \"Rolujte pro změnu\",\n toggleTitle: \"Přepnout dopoledne/odpoledne\",\n amPM: [\"dop.\", \"odp.\"],\n yearAriaLabel: \"Rok\",\n time_24hr: true,\n };\n fp.l10ns.cs = Czech;\n var cs = fp.l10ns;\n\n exports.Czech = Czech;\n exports.default = cs;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.default = {}));\n}(this, (function (exports) { 'use strict';\n\n var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n };\n\n exports.default = english;\n exports.english = english;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","import { createI18nMessage, requiredIf } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateRequiredIf() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(requiredIf, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.required',\n })\n}\n","import { useStorage } from '@vueuse/core'\nimport { readonly } from 'vue'\n// import { useLocale } from 'vuetify'\nimport { i18n } from '@/plugins/i18n'\n\n// use ISO 639-1 codes\nexport type LanguageCode = 'en' | 'sk' | 'cs' | 'xx'\n\nexport interface Language {\n code: LanguageCode\n title: string\n adminOnly?: boolean\n}\n\nexport const ALL_LANGUAGES = [\n {\n code: 'en',\n title: 'English',\n },\n {\n code: 'sk',\n title: 'Slovensky',\n },\n {\n code: 'cs',\n title: 'Česky',\n },\n {\n code: 'xx',\n title: 'Translation ID',\n adminOnly: true,\n },\n] as Language[]\n\nconst storedSettings = useStorage<LanguageCode | 'default'>('language', 'default')\n\nexport function modifyLanguageSettings(configAvailableLanguages: LanguageCode[], configDefaultLanguage: LanguageCode) {\n if (storedSettings.value === 'default') storedSettings.value = configDefaultLanguage\n // const { current } = useLocale()\n\n function addMessages(language: LanguageCode, messages: any) {\n if (!i18n || !i18n.global) return\n // @ts-ignore\n i18n.global.setLocaleMessage(language, messages)\n }\n\n const setLanguage = (code: LanguageCode) => {\n if (!i18n || !i18n.global) return false\n if (configAvailableLanguages.includes(code) || code === 'xx') {\n // current.value = code\n storedSettings.value = code\n // @ts-ignore\n i18n.global.locale.value = code\n\n return code\n }\n return false\n }\n\n const initializeLanguage = () => {\n if (!i18n || !i18n.global || storedSettings.value === 'default') return\n if (configAvailableLanguages.includes(storedSettings.value) || storedSettings.value === 'xx') {\n // current.value = storedSettings.value\n // @ts-ignore\n i18n.global.locale.value = storedSettings.value\n return\n }\n storedSettings.value = configDefaultLanguage\n // current.value = configDefaultLanguage\n // @ts-ignore\n i18n.global.locale.value = configDefaultLanguage\n }\n\n return {\n addMessages,\n initializeLanguage,\n currentLanguageCode: readonly(storedSettings),\n setLanguage,\n allLanguages: ALL_LANGUAGES,\n }\n}\n\nexport function useLanguageSettings() {\n return {\n currentLanguageCode: readonly(storedSettings),\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, unref, watch } from 'vue'\nimport FlatPickr from 'vue-flatpickr-component'\nimport { Slovak } from 'flatpickr/dist/l10n/sk'\nimport { Czech } from 'flatpickr/dist/l10n/cs'\nimport { english as English } from 'flatpickr/dist/l10n/default'\nimport 'flatpickr/dist/flatpickr.css'\nimport { dateNow, dateToUtc } from '@/utils/datetime'\nimport type flatpickr from 'flatpickr'\nimport { isNull, isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport useVuelidate from '@vuelidate/core'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport { useValidateRequiredIf } from '@/validators/vuelidate/common/useValidateRequiredIf'\nimport { useI18n } from 'vue-i18n'\nimport type { DateLimit, DateOption } from 'flatpickr/dist/types/options'\nimport { useLanguageSettings } from '@/composables/languageSettings'\n\ntype FlatpickrRef = null | { fp: undefined | flatpickr.Instance }\ntype TextFieldRef = null | { $el: HTMLElement }\n\n// todo fix types\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n type?: 'datetime' | 'date'\n label?: string\n hideLabel?: boolean\n clearable?: boolean\n disabled?: boolean\n hideDetails?: boolean\n minNow?: boolean\n required?: boolean\n hideSetToNow?: boolean\n placeholder?: string\n enable?: DateLimit<DateOption>[]\n weekNumbers?: false\n dataCy?: string\n defaultValue?: null | DatetimeUTCNullable\n errorMessages?: string[]\n }>(),\n {\n type: 'datetime',\n label: '',\n hideLabel: false,\n clearable: false,\n disabled: false,\n hideDetails: false,\n minNow: false,\n required: false,\n hideSetToNow: false,\n placeholder: '',\n enable: undefined,\n weekNumbers: false,\n dataCy: '',\n defaultValue: null,\n errorMessages: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n (e: 'blur'): void\n (e: 'update:modelValue', data: string | null): void\n (e: 'onOpen'): void\n (e: 'onClose'): void\n}>()\n\nconst shortcutButtonsPlugin = ref<any>(undefined)\nconst pluginsImported = ref(false)\n\nconst flatickrRefIsInitialized = (\n ref: FlatpickrRef\n): ref is { fp: flatpickr.Instance; fpInput: () => { value: string; focus: () => void } } => {\n return ref !== null && typeof ref.fp !== 'undefined'\n}\n\nconst flatickrRef = ref<FlatpickrRef>(null)\nconst textFieldRef = ref<TextFieldRef>(null)\nconst isOpened = ref(false)\nconst textFieldValue = ref('')\nconst flatpickrValue = ref<string | null>(null)\nconst initialized = ref(false)\n\nconst { t } = useI18n()\n\nconst fixFormat = (value: string) => {\n return value.replace('Z', '000Z')\n}\n\nconst checkIfReallyEmitChange = (value: any) => {\n if (value === props.modelValue) return\n emit('update:modelValue', value)\n emit('change')\n}\n\nconst onFlatpickrUpdate = (value: any) => {\n if (value === null || isUndefined(value)) {\n checkIfReallyEmitChange(null)\n return\n }\n if (value && value.date) {\n checkIfReallyEmitChange(fixFormat(value.date + ''))\n return\n }\n checkIfReallyEmitChange(fixFormat(value + ''))\n}\n\nconst onFlatpickrOpen = () => {\n onTextFieldBlur()\n isOpened.value = true\n emit('onOpen')\n}\n\nconst onFlatpickrClose = () => {\n isOpened.value = false\n emit('onClose')\n}\n\nconst onFlatpickrChange = () => {\n if (!flatickrRefIsInitialized(flatickrRef.value)) return\n textFieldValue.value = flatickrRef.value.fpInput().value\n}\n\nconst onTextFieldBlur = () => {\n if (!flatickrRefIsInitialized(flatickrRef.value)) return\n const filtered = textFieldValue.value.replace(/[^\\s\\d.:]/g, '')\n const date = flatickrRef.value.fp.parseDate(filtered, altFormat.value)\n if (isUndefined(date)) {\n if (isNull(props.defaultValue)) {\n flatickrRef.value?.fp.clear(true)\n } else {\n flatickrRef.value?.fp.setDate(props.defaultValue, true)\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n return\n }\n flatickrRef.value?.fp.setDate(date, true)\n v$.value.textFieldValue.$touch()\n emit('blur')\n}\n\nconst onClear = () => {\n flatpickrValue.value = props.defaultValue\n emit('update:modelValue', unref(props.defaultValue))\n}\n\nconst altFormat = computed(() => {\n return props.type === 'datetime' ? 'd.m.Y H:i' : 'd.m.Y'\n})\n\nconst placeholderComputed = computed(() => {\n return props.type === 'datetime' ? 'dd.mm.yyyy hh:mm' : 'dd.mm.yyyy'\n})\n\nconst enableComputed = computed(() => {\n if (props.enable && props.enable.length > 0) {\n return props.enable\n }\n return [\n {\n from: new Date(1901, 1),\n to: new Date(2099, 12),\n },\n ]\n})\n\nconst defaultValueComputed = computed(() => {\n return isNull(props.defaultValue) ? undefined : props.defaultValue\n})\n\nconst pluginsComputed = computed(() => {\n if (props.hideSetToNow || isUndefined(shortcutButtonsPlugin.value)) {\n return []\n }\n return [\n shortcutButtonsPlugin.value({\n button: [\n {\n label: t('common.button.now'),\n },\n ],\n onClick: (index: number, fp: flatpickr.Instance) => {\n const now = dateNow()\n fp.setDate(now, true)\n onFlatpickrUpdate(dateToUtc(now))\n },\n }),\n ]\n})\n\n// todo check for lazy solution\nconst languages = {\n sk: Slovak,\n en: English,\n cs: Czech,\n}\n\nconst { currentLanguageCode } = useLanguageSettings()\n\nconst flatpickrConfig = computed(() => {\n const positionElement = textFieldRef.value?.$el.querySelector('.v-input__control')\n return {\n enableTime: props.type !== 'date',\n wrap: true,\n time_24hr: true,\n altFormat: altFormat.value,\n defaultDate: defaultValueComputed.value,\n allowInput: true,\n altInput: true,\n altInputClass: 'd-sr-only',\n positionElement: positionElement ?? undefined,\n // dateFormat: 'Y-m-dTH:i:S.000000\\\\Z', problem with timezone\n dateFormat: 'Z',\n disableMobile: true,\n clickOpens: false,\n position: 'auto' as const,\n // @ts-ignore\n locale: { ...languages[currentLanguageCode.value] },\n enable: enableComputed.value,\n weekNumbers: props.weekNumbers,\n // @ts-ignore\n minDate: props.minNow ? new Date().fp_incr(-1) : false,\n plugins: pluginsComputed.value,\n }\n})\n\nconst onCalendarClick = () => {\n setTimeout(() => {\n if (!flatickrRefIsInitialized(flatickrRef.value)) return\n if (isOpened.value) {\n flatickrRef.value.fp.close()\n return\n }\n onTextFieldBlur()\n flatickrRef.value.fp.open()\n flatickrRef.value.fpInput().focus()\n }, 0)\n}\n\nconst requiredIf = useValidateRequiredIf()\n\nconst rules = computed(() => {\n return {\n textFieldValue: {\n required: requiredIf(props.required),\n },\n }\n})\n\nconst v$ = useVuelidate(rules, { textFieldValue })\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessages)) return props.errorMessages\n if (v$.value.textFieldValue.$errors.length)\n return [v$.value.textFieldValue.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if ((isNull(newValue) || isUndefined(newValue)) && !isNull(props.defaultValue)) {\n flatpickrValue.value = props.defaultValue\n return\n }\n flatpickrValue.value = isUndefined(newValue) ? null : newValue\n },\n { immediate: true }\n)\n\nwatch(\n flatickrRef,\n (newValue, oldValue) => {\n if (initialized.value === true) return\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue)) return\n onFlatpickrChange()\n initialized.value = true\n },\n { immediate: true }\n)\n\nonMounted(() => {\n // @ts-ignore\n import('shortcut-buttons-flatpickr').then((module) => {\n shortcutButtonsPlugin.value = module.default\n pluginsImported.value = true\n })\n})\n</script>\n\n<template>\n <VTextField\n ref=\"textFieldRef\"\n v-model=\"textFieldValue\"\n :error-messages=\"errorMessageComputed\"\n :persistent-placeholder=\"true\"\n :placeholder=\"placeholderComputed\"\n class=\"a-datetime-picker\"\n @blur=\"onTextFieldBlur\"\n @keyup.enter=\"onTextFieldBlur\"\n >\n <template #append-inner>\n <VIcon\n v-if=\"clearable && defaultValue !== modelValue\"\n class=\"a-datetime-picker__clearable\"\n icon=\"mdi-close-circle\"\n @click.stop=\"onClear\"\n />\n <div>\n <FlatPickr\n v-if=\"pluginsImported\"\n ref=\"flatickrRef\"\n :config=\"flatpickrConfig\"\n :disabled=\"disabled\"\n :model-value=\"flatpickrValue\"\n @update:model-value=\"onFlatpickrUpdate\"\n @on-close=\"onFlatpickrClose\"\n @on-open=\"onFlatpickrOpen\"\n @on-change=\"onFlatpickrChange\"\n />\n <VIcon\n class=\"a-datetime-picker__calendar\"\n icon=\"mdi-calendar\"\n @click.stop=\"onCalendarClick\"\n />\n </div>\n </template>\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"required\"\n />\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-datetime-picker {\n :deep(.v-field__append-inner .v-icon) {\n cursor: pointer;\n }\n\n &__calendar {\n opacity: 0.6 !important;\n }\n\n &__clearable {\n opacity: 0 !important;\n }\n\n &:hover {\n .a-datetime-picker__clearable {\n opacity: 0.6 !important;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/ADatetimePicker.vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { DatetimeUTCNullable } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n dataCy?: string\n clearable?: boolean\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n dataCy: undefined,\n clearable: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DatetimeUTCNullable | undefined): void\n (e: 'click:append', data: string | number | null): void\n (e: 'blur', data: string | number | null): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DatetimeUTCNullable | undefined) {\n emit('update:modelValue', newValue)\n },\n})\n\nconst onBlur = () => {\n emit('blur', isUndefined(props.modelValue) ? null : props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n</script>\n\n<template>\n <ADatetimePicker\n v-model=\"modelValueComputed\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :required=\"requiredComputed\"\n :label=\"labelComputed\"\n :clearable=\"clearable\"\n @blur=\"onBlur\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/ADatetimePicker.vue'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isFunction, isNull, isUndefined } from '@/utils/common'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { DatetimeUTCNullable } from '@/types/common'\nimport { dateTimeNow } from '@/utils/datetime'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTCNullable | undefined\n label?: string\n errorMessage?: string\n v?: any\n dataCy?: string\n clearable?: boolean\n defaultActivationValue?: DatetimeUTCNullable | 'now' | (() => DatetimeUTCNullable)\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n v: null,\n dataCy: undefined,\n clearable: false,\n defaultActivationValue: 'now',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DatetimeUTCNullable | undefined): void\n (e: 'click:append', data: string | number | null): void\n (e: 'blur', data: string | number | null): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst checkboxModel = ref(false)\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DatetimeUTCNullable | undefined) {\n emit('update:modelValue', newValue)\n },\n})\n\nconst onBlur = () => {\n emit('blur', isUndefined(props.modelValue) ? null : props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return [props.v.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nwatch(\n modelValueComputed,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue)) {\n checkboxModel.value = false\n return\n }\n checkboxModel.value = true\n },\n { immediate: true }\n)\n\nconst onCheckboxClick = (value: boolean) => {\n if (value) {\n modelValueComputed.value = null\n return\n }\n if (props.defaultActivationValue === 'now') {\n modelValueComputed.value = dateTimeNow()\n return\n }\n if (isFunction(props.defaultActivationValue)) {\n modelValueComputed.value = props.defaultActivationValue()\n return\n }\n modelValueComputed.value = props.defaultActivationValue\n}\n</script>\n\n<template>\n <VCheckboxBtn\n v-model=\"checkboxModel\"\n :label=\"labelComputed\"\n @click.stop=\"onCheckboxClick(checkboxModel)\"\n />\n <VExpandTransition>\n <div v-show=\"checkboxModel\">\n <ADatetimePicker\n v-model=\"modelValueComputed\"\n :data-cy=\"dataCy\"\n :error-messages=\"errorMessageComputed\"\n :clearable=\"clearable\"\n @blur=\"onBlur\"\n />\n </div>\n </VExpandTransition>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Filter } from '@/types/Filter'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADatetimePicker from '@/components/ADatetimePicker.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-datepicker',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <ADatetimePicker\n v-model=\"value\"\n :data-cy=\"dataCy\"\n :clearable=\"!modelValue.mandatory\"\n :default-value=\"modelValue.default\"\n :label=\"label\"\n />\n</template>\n","import { computed, reactive } from 'vue'\nimport type { Pagination } from '@/types/Pagination'\n\nexport function usePagination(sortBy: string | null = 'id') {\n return reactive<Pagination>({\n sortBy: sortBy,\n descending: true,\n page: 1,\n rowsPerPage: 25,\n rowsNumber: 0,\n hasNextPage: null,\n currentViewCount: 0,\n totalCount: 0,\n })\n}\n\nexport function usePaginationAutoHide(pagination: Pagination) {\n const showPagination = computed(() => {\n if (pagination.page === 1 && pagination.currentViewCount < pagination.rowsPerPage) return false\n return true\n })\n\n return {\n showPagination,\n }\n}\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, inject, ref, toRefs, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { usePagination } from '@/composables/system/pagination'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { Ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId } from '@/types/common'\n\ntype fetchItemsByIdsType =\n | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n label?: string | undefined\n required?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideDetails?: boolean\n hideLabel?: boolean\n fetchItems: (pagination: Pagination, filterBag: FilterBag) => Promise<ValueObjectOption<string | number>[]>\n fetchItemsByIds: fetchItemsByIdsType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n disableInitFetch?: boolean | undefined\n loading?: boolean\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n v: null,\n errorMessage: undefined,\n hideDetails: false,\n hideLabel: false,\n filterByField: 'name',\n filterSortBy: 'createdAt',\n disableInitFetch: false,\n loading: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | IntegerId | DocId[] | IntegerId[] | null): void\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null): void\n}>()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null) {\n emit('update:modelValue', cloneDeep<DocId | IntegerId | DocId[] | IntegerId[] | null>(newValue))\n },\n})\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst { t } = useI18n()\n\nconst { innerFilter } = toRefs(props)\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst onBlur = () => {\n isFocused.value = true\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\nconst fetchedItems = ref<ValueObjectOption<string | number>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<string | number>[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n selectedItemsCache.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n fetchedItems.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value.title }\n })\n})\n\nconst loadingLocal = ref(false)\nconst loadingComputed = computed(() => {\n if (loadingLocal.value) return true\n return props.loading\n})\n\nconst apiSearch = async (query: string) => {\n loadingLocal.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loadingLocal.value = false\n}\n\nconst findLocalDataByValues = (values: Array<DocId | IntegerId>) => {\n const found = allItems.value.filter((item: ValueObjectOption<string | number>) => values.includes(item.value))\n return ([] as ValueObjectOption<string | number>[]).concat(found)\n}\n\nconst tryToLoadFromLocalData = async (value: string | number | string[] | number[]) => {\n let count = 1\n let foundItems = []\n if (isArray(value)) {\n count = value.length\n foundItems = findLocalDataByValues(value)\n } else {\n foundItems = findLocalDataByValues([value])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n // if (\n // isNull(modelValue.value) ||\n // isUndefined(modelValue.value) ||\n // (isArray(modelValue.value) && modelValue.value.length === 0)\n // ) {\n loadingLocal.value = true\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loadingLocal.value = false\n // }\n}\nconst onFocus = () => {\n isFocused.value = true\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!props.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onClickClear = async () => {\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nwatch(\n modelValue,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n if (props.disableInitFetch || autoFetched.value === true) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 3000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) return\n if (isArray<IntegerId | DocId>(newValue)) {\n loadingLocal.value = true\n selectedItemsCache.value = await props.fetchItemsByIds(newValue as Array<IntegerId & DocId>)\n loadingLocal.value = false\n return\n }\n loadingLocal.value = true\n selectedItemsCache.value = await props.fetchItemsByIds([newValue as DocId & IntegerId])\n loadingLocal.value = false\n },\n { immediate: true }\n)\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiSearch(newValue)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300, maxWait: 1000 }\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"allItems\"\n no-filter\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :chips=\"multiple\"\n :hide-details=\"hideDetails\"\n :loading=\"loadingComputed\"\n @update:search=\"onSearchUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n >\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n callbackToTrue: () => Promise<boolean> // return true if successfully changed, otherwise return false\n callbackToFalse: () => Promise<boolean> // return true if successfully changed, otherwise return false\n label?: string | undefined\n hideDetails?: boolean | undefined\n hideLabel?: boolean | undefined\n v?: any\n }>(),\n {\n label: undefined,\n hideDetails: undefined,\n hideLabel: undefined,\n v: null,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst loading = ref(false)\nconst hasError = ref(false)\nconst uniqueId = ref('')\n\nconst modelValueComputed = computed(() => {\n return props.modelValue\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst internalModelValue = ref(props.modelValue)\n\nconst onClick = async () => {\n if (loading.value) return\n loading.value = true\n hasError.value = false\n if (internalModelValue.value === true) {\n const success = await props.callbackToFalse()\n emit('update:modelValue', !success)\n internalModelValue.value = !success\n if (!success) hasError.value = true\n loading.value = false\n return\n }\n const success = await props.callbackToTrue()\n emit('update:modelValue', success)\n internalModelValue.value = success\n if (!success) hasError.value = true\n loading.value = false\n}\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n internalModelValue.value = newValue\n hasError.value = false\n }\n})\n\nonMounted(() => {\n uniqueId.value = 'remote-switch-' + Date.now()\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <VCheckboxBtn\n :id=\"uniqueId\"\n v-model=\"internalModelValue\"\n :disabled=\"loading\"\n @click.stop=\"onClick\"\n />\n <label\n v-if=\"!hideLabel\"\n :for=\"uniqueId\"\n class=\"v-label v-label--clickable\"\n >\n {{ labelComputed }}\n </label>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean\n callbackToTrue: () => Promise<boolean> // return true if successfully changed, otherwise return false\n callbackToFalse: () => Promise<boolean> // return true if successfully changed, otherwise return false\n label?: string | undefined\n hideDetails?: boolean | undefined\n hideLabel?: boolean | undefined\n v?: any\n }>(),\n {\n label: undefined,\n hideDetails: undefined,\n hideLabel: undefined,\n v: null,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n}>()\n\nconst { t } = useI18n()\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst loading = ref(false)\nconst hasError = ref(false)\nconst uniqueId = ref('')\n\nconst modelValueComputed = computed(() => {\n return props.modelValue\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst internalModelValue = ref(props.modelValue)\n\nconst onClick = async () => {\n if (loading.value) return\n loading.value = true\n hasError.value = false\n if (internalModelValue.value === true) {\n const success = await props.callbackToFalse()\n emit('update:modelValue', !success)\n internalModelValue.value = !success\n if (!success) hasError.value = true\n loading.value = false\n return\n }\n const success = await props.callbackToTrue()\n emit('update:modelValue', success)\n internalModelValue.value = success\n if (!success) hasError.value = true\n loading.value = false\n}\n\nwatch(modelValueComputed, (newValue, oldValue) => {\n if (newValue !== oldValue) {\n internalModelValue.value = newValue\n hasError.value = false\n }\n})\n\nonMounted(() => {\n uniqueId.value = 'a-remote-switch-' + Date.now()\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <VBtn\n :id=\"uniqueId\"\n icon\n class=\"a-switch-fix-click\"\n color=\"transparent\"\n :ripple=\"false\"\n :width=\"hideLabel ? 36 : undefined\"\n :height=\"36\"\n @click.stop=\"onClick\"\n >\n <VSwitch\n v-model=\"internalModelValue\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :hide-details=\"hideDetails\"\n density=\"compact\"\n @click.stop=\"onClick\"\n >\n <template\n v-if=\"hasError\"\n #append\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ml-5 mt-1\"\n size=\"x-small\"\n color=\"error\"\n />\n </template>\n </VSwitch>\n </VBtn>\n <label\n v-if=\"!hideLabel\"\n :for=\"uniqueId\"\n class=\"v-label v-label--clickable\"\n >\n {{ labelComputed }}\n </label>\n </div>\n</template>\n\n<style lang=\"scss\">\n.v-btn.a-switch-fix-click:hover > .v-btn__overlay {\n opacity: 0;\n max-height: 36px;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n items: any[]\n label?: string\n errorMessage?: string\n required?: boolean\n v?: any\n hideLabel?: boolean\n multiple?: boolean\n hideDetails?: boolean\n clearable?: boolean\n dataCy?: string\n }>(),\n {\n label: undefined,\n errorMessage: undefined,\n required: undefined,\n v: null,\n hideLabel: false,\n multiple: false,\n hideDetails: false,\n clearable: false,\n dataCy: '',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'blur', data: any): void\n}>()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', cloneDeep<any>(newValue))\n },\n})\n\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst { t } = useI18n()\n\nconst onBlur = () => {\n emit('blur', props.modelValue)\n props.v?.$touch()\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n if (props.v?.required && props.v?.required.$params.type === 'required') return true\n return false\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n item-title=\"title\"\n item-value=\"value\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"dataCy\"\n @blur=\"onBlur\"\n >\n <template #label>\n <span v-if=\"!hideLabel\">{{ labelComputed\n }}<span\n v-if=\"requiredComputed\"\n class=\"required\"\n /></span>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Filter } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n items: ValueObjectOption<string | number>[]\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'change'): void\n}>()\nconst { clearOne } = useFilterHelpers()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n emit('change')\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.modelValue.multiple === false) return false\n return true as unknown as undefined\n})\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"value\"\n :items=\"items\"\n :chips=\"modelValue.multiple\"\n :label=\"label\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"!modelValue.mandatory\"\n data-cy=\"filter-value\"\n @clear=\"clearOne(modelValue)\"\n @change=\"emit('change')\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, type Ref, ref, toRefs, watch } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { Filter, FilterBag } from '@/types/Filter'\nimport { usePagination } from '@/composables/system/pagination'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId, IntegerId } from '@/types/common'\n\ntype fetchItemsByIdsType =\n | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n fetchItems: (pagination: Pagination, filterBag: FilterBag) => Promise<ValueObjectOption<string | number>[]>\n fetchItemsByIds: fetchItemsByIdsType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n disableInitFetch?: boolean | undefined\n placeholder?: string | undefined\n }>(),\n {\n filterByField: 'name',\n filterSortBy: 'createdAt',\n disableInitFetch: false,\n placeholder: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: Filter): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: cloneDeep(newValue) } })\n },\n})\n\nconst search = ref('')\nconst isFocused = ref(false)\nconst autoFetchTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nconst { t } = useI18n()\n\nconst { innerFilter } = toRefs(props)\n\nconst onBlur = () => {\n isFocused.value = true\n}\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.modelValue.multiple === false) return false\n return true as unknown as undefined\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\nconst fetchedItems = ref<ValueObjectOption<string | number>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<string | number>[]>([])\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final = new Map()\n selectedItemsCache.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n fetchedItems.value.forEach((value) => {\n final.set(value.value, { value: value.value, title: value.title })\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value.title }\n })\n})\n\nconst loading = ref(false)\n\nconst apiSearch = async (query: string) => {\n loading.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loading.value = false\n}\n\nconst findLocalDataByValues = (values: Array<DocId | IntegerId>) => {\n const found = allItems.value.filter((item: ValueObjectOption<string | number>) => values.includes(item.value))\n return ([] as ValueObjectOption<string | number>[]).concat(found)\n}\n\nconst tryToLoadFromLocalData = async (value: string | number | string[] | number[]) => {\n let count = 1\n let foundItems = []\n if (isArray(value)) {\n count = value.length\n foundItems = findLocalDataByValues(value)\n } else {\n foundItems = findLocalDataByValues([value])\n }\n selectedItemsCache.value = foundItems\n return foundItems.length === count\n}\n\nconst autoFetched = ref(false)\nconst clearAutoFetchTimer = () => {\n clearTimeout(autoFetchTimer.value)\n autoFetchTimer.value = undefined\n}\nconst autoFetch = async () => {\n clearAutoFetchTimer()\n if (autoFetched.value === true) return\n autoFetched.value = true\n // if (\n // isNull(modelValueComputed.value) ||\n // isUndefined(modelValueComputed.value) ||\n // (isArray(modelValueComputed.value) && modelValueComputed.value.length === 0)\n // ) {\n loading.value = true\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n loading.value = false\n // }\n}\nconst onFocus = () => {\n isFocused.value = true\n clearAutoFetchTimer()\n autoFetch()\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!props.modelValue.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.modelValue.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === query) return\n search.value = query\n}\n\nconst onClickClear = async () => {\n fetchedItems.value = await props.fetchItems(pagination, innerFilter.value)\n if (props.modelValue.multiple) {\n modelValueComputed.value = []\n return\n }\n modelValueComputed.value = null\n}\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (props.modelValue.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (props.modelValue.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (props.modelValue.variant === 'contains' || props.modelValue.variant === 'search')\n return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nwatch(\n modelValueComputed,\n async (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n selectedItemsCache.value = []\n if (props.disableInitFetch || autoFetched.value === true) return\n autoFetchTimer.value = setTimeout(() => {\n autoFetch()\n }, 3000)\n return\n }\n const found = await tryToLoadFromLocalData(newValue)\n if (found) return\n if (isArray<IntegerId | DocId>(newValue)) {\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsByIds(newValue as Array<IntegerId & DocId>)\n loading.value = false\n return\n }\n loading.value = true\n selectedItemsCache.value = await props.fetchItemsByIds([newValue as DocId & IntegerId])\n loading.value = false\n },\n { immediate: true }\n)\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiSearch(newValue)\n }\n },\n { debounce: 300, maxWait: 1000 }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValueComputed\"\n :items=\"allItems\"\n no-filter\n :placeholder=\"placeholderComputed\"\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"!modelValue.mandatory\"\n :label=\"label\"\n :chips=\"modelValue.multiple\"\n :loading=\"loading\"\n @update:search=\"onSearchUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @click:clear=\"onClickClear\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\n\nimport type { Filter } from '@/types/Filter'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCyTrue?: string\n dataCyFalse?: string\n }>(),\n {\n dataCyTrue: 'filter-true',\n dataCyFalse: 'filter-false',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n return props.modelValue.model\n },\n set(newValue) {\n emit('update:modelValue', { ...props.modelValue, ...{ model: newValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n</script>\n\n<template>\n <div class=\"a-filter-boolean-group d-flex flex-column align-left justify-center mb-2\">\n <VLabel class=\"pr-1\">\n <span>{{ label }}</span>\n </VLabel>\n <VBtnToggle v-model=\"value\">\n <VBtn\n size=\"small\"\n :value=\"true\"\n :data-cy=\"dataCyTrue\"\n :color=\"value === true ? 'secondary' : ''\"\n >\n {{ t('common.model.boolean.true') }}\n </VBtn>\n <VBtn\n size=\"small\"\n :value=\"false\"\n :data-cy=\"dataCyFalse\"\n :color=\"value === false ? 'secondary' : ''\"\n >\n {{ t('common.model.boolean.false') }}\n </VBtn>\n </VBtnToggle>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-filter-boolean-group {\n position: relative;\n\n .v-label {\n position: absolute;\n top: -4px;\n left: 0;\n z-index: 2;\n }\n\n .v-btn-group {\n position: relative;\n margin-top: 20px;\n\n .v-btn {\n height: 33px !important;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport type { Filter } from '@/types/Filter'\nimport { isNull, isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: Filter\n dataCy?: string\n }>(),\n {\n dataCy: 'filter-boolean',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n}>()\n\nconst value = computed({\n get() {\n if (isUndefined(props.modelValue.model) || isNull(props.modelValue.model)) return -1\n return props.modelValue.model ? 1 : 0\n },\n set(newValue) {\n let returnValue: null | boolean = null\n if (newValue === 1) returnValue = true\n if (newValue === 0) returnValue = false\n emit('update:modelValue', { ...props.modelValue, ...{ model: returnValue } })\n },\n})\n\nconst { t } = useI18n()\n\nconst label = computed(() => {\n return props.modelValue.titleT ? t(props.modelValue.titleT) : undefined\n})\n\nconst items = computed(() => {\n return [\n { value: -1, title: t('common.model.notSelected') },\n { value: 1, title: t('common.model.boolean.true') },\n { value: 0, title: t('common.model.boolean.false') },\n ]\n})\n</script>\n\n<template>\n <VSelect\n v-model=\"value\"\n :data-cy=\"dataCy\"\n :label=\"label\"\n :items=\"items\"\n />\n</template>\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport enum JobStatus {\n Waiting = 'waiting',\n Processing = 'processing',\n AwaitingBatchProcess = 'awaiting_batch_process',\n Done = 'done',\n Error = 'error',\n Default = Waiting,\n}\n\nexport function useJobStatus() {\n const { t } = useI18n()\n\n const jobStatusOptions = ref<ValueObjectOption<JobStatus>[]>([\n {\n value: JobStatus.Waiting,\n title: t('common.job.status.waiting'),\n color: 'warning',\n },\n {\n value: JobStatus.Processing,\n title: t('common.job.status.processing'),\n color: 'primary',\n },\n {\n value: JobStatus.AwaitingBatchProcess,\n title: t('common.job.status.awaitingBatchProcess'),\n color: 'primary',\n },\n {\n value: JobStatus.Done,\n title: t('common.job.status.done'),\n color: 'success',\n },\n {\n value: JobStatus.Error,\n title: t('common.job.status.error'),\n color: 'error',\n },\n ])\n\n const getJobStatusOption = (value: JobStatus): ValueObjectOption<JobStatus> => {\n return jobStatusOptions.value.find((item) => item.value === value) as ValueObjectOption<JobStatus>\n }\n\n return {\n jobStatusOptions,\n getJobStatusOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { JobStatus, useJobStatus } from '@/model/valueObject/JobStatus'\n\nconst props = defineProps<{\n value: JobStatus\n}>()\n\nconst { getJobStatusOption } = useJobStatus()\nconst option = computed(() => getJobStatusOption(props.value))\n</script>\n\n<template>\n <VChip\n :color=\"option?.color\"\n label\n size=\"small\"\n >\n {{ option?.title }}\n </VChip>\n</template>\n","import type { Immutable } from '@/utils/object'\nimport { objectDeepFreeze } from '@/utils/object'\n\nconst commonConfig = {\n CHIP: {\n CLASS: {\n NO_LINK: 'v-chip-custom-no-link',\n },\n ICON: {\n LINK: 'mdi-arrow-top-right',\n LINK_EXTERNAL: 'mdi-open-in-new',\n },\n },\n}\n\nexport const COMMON_CONFIG: Immutable<typeof commonConfig> = objectDeepFreeze(commonConfig)\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport { useRouter } from 'vue-router'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { objectGetValueByPath } from '@/utils/object'\nimport { isNull, isUndefined } from '@/utils/common'\nimport { COMMON_CONFIG } from '@/model/commonConfig'\n\nconst props = withDefaults(\n defineProps<{\n id?: null | undefined | IntegerId | DocId\n title?: string\n containerClass?: undefined | string\n getCachedFn: (id: any) => any\n displayTextPath: string\n route: string\n disableClick?: boolean\n openInNew?: boolean\n size?: string\n forceRounded?: boolean\n textOnly?: boolean\n fallbackIdText?: boolean\n wrapText?: boolean\n }>(),\n {\n id: null,\n title: '',\n containerClass: 'd-inline-flex',\n disableClick: false,\n openInNew: false,\n size: 'small',\n forceRounded: false,\n textOnly: false,\n fallbackIdText: false,\n wrapText: false,\n }\n)\n\nconst router = useRouter()\nconst cached = shallowRef<undefined | any>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return props.getCachedFn(props.id as any)\n})\n\nconst containerClassComputed = computed(() => {\n return props.wrapText ? props.containerClass + ' a-chip--wrap' : props.containerClass\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return objectGetValueByPath(cached.value, props.displayTextPath)\n }\n return props.fallbackIdText ? props.id : ''\n})\n\nconst onClick = () => {\n router.push({ name: props.route, params: { id: props.id } })\n}\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClassComputed\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else-if=\"disableClick\"\n :size=\"size\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"openInNew ? COMMON_CONFIG.CHIP.ICON.LINK_EXTERNAL : COMMON_CONFIG.CHIP.ICON.LINK\"\n :label=\"forceRounded ? undefined : true\"\n @click.stop=\"onClick\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-chip--wrap {\n .v-chip {\n height: auto !important;\n }\n\n .v-chip .v-chip__content {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n white-space: pre-wrap;\n }\n}\n</style>\n","import { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport enum LogLevel {\n Debug = 'DEBUG',\n Info = 'INFO',\n Notice = 'NOTICE',\n Warning = 'WARNING',\n Error = 'ERROR',\n Critical = 'CRITICAL',\n Alert = 'ALERT',\n Emergency = 'EMERGENCY',\n Default = Info,\n}\n\nexport function useLogLevel() {\n const logLevelOptions = ref<ValueObjectOption<LogLevel>[]>([\n {\n value: LogLevel.Debug,\n title: LogLevel.Debug,\n color: 'blue-grey lighten-5',\n },\n {\n value: LogLevel.Info,\n title: LogLevel.Info,\n color: 'blue-grey lighten-3',\n },\n {\n value: LogLevel.Notice,\n title: LogLevel.Notice,\n color: 'amber lighten-4',\n },\n {\n value: LogLevel.Warning,\n title: LogLevel.Warning,\n color: 'amber',\n },\n {\n value: LogLevel.Error,\n title: LogLevel.Error,\n color: 'red',\n },\n {\n value: LogLevel.Critical,\n title: LogLevel.Critical,\n color: 'red accent-4',\n },\n {\n value: LogLevel.Alert,\n title: LogLevel.Alert,\n color: 'pink',\n },\n {\n value: LogLevel.Emergency,\n title: LogLevel.Emergency,\n color: 'ping darken-4',\n },\n ])\n\n const getLogLevelOption = (value: LogLevel) => {\n return logLevelOptions.value.find((item) => item.value === value)\n }\n\n return {\n logLevelOptions,\n getLogLevelOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { type LogLevel, useLogLevel } from '@/model/valueObject/LogLevel'\n\nconst props = withDefaults(\n defineProps<{\n level: LogLevel\n }>(),\n {}\n)\n\nconst { getLogLevelOption } = useLogLevel()\nconst levelOption = computed(() => {\n return getLogLevelOption(props.level)\n})\n</script>\n\n<template>\n <VChip\n v-if=\"levelOption\"\n :color=\"levelOption.color\"\n label\n size=\"small\"\n >\n {{ levelOption.title }}\n </VChip>\n</template>\n","export const numberToString = (value: number): string => {\n return '' + value\n}\n","<script lang=\"ts\" setup>\nimport { useClipboard } from '@vueuse/core'\nimport { eventClickBlur } from '@/utils/event'\nimport { isNumber, isString } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { numberToString } from '@/utils/number'\n\nconst props = withDefaults(\n defineProps<{\n value: number | string\n notifyT?: string\n dataCy?: string\n }>(),\n {\n notifyT: 'common.alert.textWasCopied',\n dataCy: 'copy-text',\n }\n)\n\nconst { copy, isSupported } = useClipboard()\nconst { showSuccess } = useAlerts()\nconst { t } = useI18n()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (!isSupported) return\n if (isNumber(props.value)) {\n copy(numberToString(props.value)).then(() => {\n showSuccess(t(props.notifyT))\n })\n } else if (isString(props.value) && props.value.length) {\n copy(props.value).then(() => {\n showSuccess(t(props.notifyT))\n })\n }\n}\n</script>\n\n<template>\n <div\n :class=\"{ 'cursor-pointer': isSupported }\"\n :data-cy=\"dataCy\"\n class=\"d-inline-flex align-center anzu-copy-text\"\n @click.stop=\"onClick\"\n >\n <span>{{ value }}</span>\n <VIcon\n v-if=\"isSupported\"\n class=\"ml-1\"\n size=\"x-small\"\n icon=\"mdi-content-copy\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n Copy\n </VTooltip>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-copy-text {\n .v-icon {\n opacity: 0;\n }\n\n &:hover {\n .v-icon {\n opacity: 1;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n color?: string | undefined\n size?: string\n dataCy?: string | undefined\n }>(),\n {\n color: undefined,\n size: 'small',\n dataCy: undefined,\n }\n)\n\nconst customColorClass = computed(() => {\n return isUndefined(props.color) ? 'a-chip-no-link--custom-color' : ''\n})\n</script>\n\n<template>\n <VChip\n :color=\"color as string\"\n :data-cy=\"dataCy\"\n class=\"a-chip-no-link\"\n :class=\"customColorClass\"\n label\n :size=\"size as string\"\n >\n <slot />\n </VChip>\n</template>\n","<script lang=\"ts\" setup>\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/components/ARow.vue'\nimport ADatetime from '@/components/ADatetime.vue'\n\n// todo add user details, find generic way for all systems\n\nwithDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n hideCreatedBy?: boolean\n hideModifiedBy?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n hideCreatedBy: false,\n hideModifiedBy: false,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow\n v-if=\"!hideCreatedAt\"\n :title=\"t('common.model.tracking.created')\"\n >\n <ADatetime :date-time=\"data.createdAt\" />\n </ARow>\n <ARow\n v-if=\"!hideModifiedAt\"\n :title=\"t('common.model.tracking.modified')\"\n >\n <ADatetime :date-time=\"data.modifiedAt\" />\n </ARow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName?: string\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n size?: number\n }>(),\n {\n routeName: undefined,\n routeParams: undefined,\n buttonT: 'common.button.close',\n buttonClass: 'ml-2',\n dataCy: 'button-close',\n size: 36,\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (isUndefined(props.routeName)) {\n return undefined\n }\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"small\"\n variant=\"text\"\n :width=\"size\"\n :height=\"size\"\n :active=\"false\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.close') }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from '@/types/commonAdmin'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: 'button-create',\n size: 36,\n variant: 'primary',\n }\n)\n\nconst { t } = useI18n()\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :to=\"{ name: routeName }\"\n :width=\"size\"\n :height=\"size\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n :to=\"{ name: routeName }\"\n color=\"primary\"\n rounded=\"pill\"\n :height=\"size\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport type { ButtonVariant } from '@/types/commonAdmin'\n\nconst props = withDefaults(\n defineProps<{\n variant?: ButtonVariant\n buttonT?: string\n buttonClass?: string\n dialogMessageT?: string\n dialogConfirmButtonT?: string\n dialogCancelButtonT?: string\n dialogConfirmColor?: string\n dialogZIndex?: number\n dialogMaxWidth?: number\n dataCy?: string\n disabled?: boolean\n disableCloseAfterConfirm?: boolean\n loading?: boolean\n color?: string | undefined\n size?: number\n }>(),\n {\n variant: 'icon',\n buttonT: 'common.button.delete',\n buttonClass: 'ml-2',\n dialogMessageT: 'common.system.modal.confirmDelete',\n dialogConfirmButtonT: 'common.button.delete',\n dialogCancelButtonT: 'common.button.cancel',\n dialogConfirmColor: 'primary',\n dialogZIndex: 200,\n dialogMaxWidth: 300,\n dataCy: 'button-delete',\n disabled: false,\n disableCloseAfterConfirm: false,\n color: undefined,\n size: 36,\n }\n)\nconst emit = defineEmits<{\n (e: 'deleteRecord'): void\n}>()\n\nconst dialog = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n dialog.value = true\n}\nconst onConfirm = () => {\n emit('deleteRecord')\n if (!props.disableCloseAfterConfirm) closeDialog()\n}\n\nconst closeDialog = () => {\n dialog.value = false\n}\n\nconst onCancel = () => {\n closeDialog()\n}\n\nconst { t } = useI18n()\n\ndefineExpose({\n closeDialog,\n})\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :disabled=\"disabled\"\n :color=\"color\"\n :loading=\"loading\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n :color=\"color\"\n rounded=\"pill\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n persistent\n :width=\"500\"\n no-click-animation\n >\n <VCard\n v-if=\"dialog\"\n data-cy=\"delete-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t(dialogMessageT) }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n :disabled=\"loading\"\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t(dialogCancelButtonT) }}\n </ABtnTertiary>\n <ABtnPrimary\n :color=\"dialogConfirmColor\"\n :loading=\"loading\"\n data-cy=\"button-confirm-delete\"\n @click.stop=\"onConfirm\"\n >\n {{ t(dialogConfirmButtonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { useRouter } from 'vue-router'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport type { ButtonVariant } from '@/types/commonAdmin'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.edit',\n buttonClass: 'ml-2',\n dataCy: 'button-edit',\n loading: false,\n size: 36,\n variant: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'editRecord'): void\n}>()\n\nconst { t } = useI18n()\n\nconst router = useRouter()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('editRecord')\n router.push(routerToComputed.value)\n}\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :loading=\"loading\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :variant=\"variantComputed\"\n :data-cy=\"dataCy\"\n :loading=\"loading\"\n color=\"primary\"\n rounded=\"pill\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <span>{{ t(buttonT) }}</span>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport AIconGroup from '@/components/AIconGroup.vue'\n\nwithDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n }>(),\n {\n buttonT: 'common.button.saveAndClose',\n buttonClass: 'ml-2',\n dataCy: 'button-save-close',\n loading: undefined,\n disabled: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'saveRecordAndClose'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('saveRecordAndClose')\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n color=\"primary\"\n icon=\"\"\n variant=\"outlined\"\n :width=\"36\"\n :height=\"35\"\n @click.stop=\"onClick\"\n >\n <AIconGroup\n main-icon=\"mdi-content-save\"\n secondary-icon=\"mdi-close\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport type { ButtonVariant } from '@/types/commonAdmin'\n\nconst props = withDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n size?: number\n variant?: ButtonVariant\n }>(),\n {\n buttonT: 'common.button.save',\n buttonClass: 'ml-2',\n dataCy: 'button-save',\n loading: undefined,\n disabled: undefined,\n size: 36,\n variant: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'saveRecord'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('saveRecord')\n}\n\nconst { t } = useI18n()\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n case 'icon':\n return 'text'\n default:\n return 'flat'\n }\n})\n</script>\n\n<template>\n <VBtn\n v-if=\"variant === 'icon'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n size=\"small\"\n :variant=\"variantComputed\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :width=\"size\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :variant=\"variantComputed\"\n color=\"primary\"\n rounded=\"pill\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :height=\"size\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useClipboard } from '@vueuse/core'\nimport { eventClickBlur } from '@/utils/event'\nimport { useI18n } from 'vue-i18n'\nimport { isNumber, isString } from '@/utils/common'\nimport { numberToString } from '@/utils/number'\nimport { useAlerts } from '@/composables/system/alerts'\nimport AIconGroup from '@/components/AIconGroup.vue'\n\nconst props = withDefaults(\n defineProps<{\n id: number | string\n buttonT?: string\n buttonClass?: string\n iconT?: string\n notifyT?: string\n dataCy?: string\n size?: 'small' | 'x-small'\n }>(),\n {\n buttonT: 'common.button.copyId',\n buttonClass: 'ml-1',\n iconT: 'common.button.id',\n notifyT: 'common.alert.idWasCopied',\n dataCy: 'table-copy',\n size: 'x-small',\n }\n)\n\nconst { t } = useI18n()\nconst { copy, isSupported } = useClipboard()\nconst { showSuccess } = useAlerts()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (isNumber(props.id) && props.id > 0) {\n copy(numberToString(props.id)).then(() => {\n showSuccess(t(props.notifyT))\n })\n } else if (isString(props.id) && props.id.length) {\n copy(props.id).then(() => {\n showSuccess(t(props.notifyT))\n })\n }\n}\n</script>\n\n<template>\n <VBtn\n v-if=\"isSupported\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :size=\"size\"\n variant=\"text\"\n @click.stop=\"onClick\"\n >\n <AIconGroup\n :secondary-text=\"t(iconT)\"\n main-icon=\"mdi-content-copy\"\n size=\"small\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.detail',\n buttonClass: 'ml-1',\n dataCy: 'table-detail',\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"() => {}\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed } from 'vue'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n routeName: string\n recordId?: number | string | undefined\n routeParams?: any | undefined\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n }>(),\n {\n recordId: undefined,\n routeParams: undefined,\n buttonT: 'common.button.edit',\n buttonClass: 'ml-1',\n dataCy: 'table-edit',\n }\n)\n\nconst { t } = useI18n()\n\nconst routerToComputed = computed(() => {\n if (!isUndefined(props.routeParams)) {\n return { name: props.routeName, params: { ...props.routeParams } }\n }\n return { name: props.routeName, params: { id: props.recordId } }\n})\n</script>\n\n<template>\n <VBtn\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :to=\"routerToComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"() => {}\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t(buttonT) }}\n </VTooltip>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\nimport type { ButtonVariantText } from '@/types/commonAdmin'\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n loading?: boolean\n disabled?: boolean\n disableMore?: boolean\n size?: undefined | 'small' | 'x-small'\n variant?: ButtonVariantText\n rounded?: 'pill' | undefined\n color?: string\n }>(),\n {\n buttonT: '',\n buttonClass: 'ml-2',\n dataCy: 'button-save',\n loading: undefined,\n disabled: undefined,\n disableMore: false,\n size: undefined,\n variant: 'primary',\n rounded: undefined,\n color: 'primary',\n }\n)\nconst emit = defineEmits<{\n (e: 'onClick'): void\n}>()\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n emit('onClick')\n}\n\nconst variantComputed = computed(() => {\n switch (props.variant) {\n case 'secondary':\n return 'outlined'\n case 'tertiary':\n return 'text'\n default:\n return 'flat'\n }\n})\n\nconst loadingComputed = computed(() => {\n if (!props.loading) return false\n switch (variantComputed.value) {\n case 'flat':\n return 'white'\n default:\n return 'primary'\n }\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n v-if=\"disableMore\"\n :variant=\"variantComputed\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :color=\"color\"\n :rounded=\"rounded\"\n :size=\"size\"\n :loading=\"loadingComputed\"\n :disabled=\"disabled\"\n @click.stop=\"onClick\"\n >\n <slot name=\"button-content\">\n {{ t(buttonT) }}\n </slot>\n </VBtn>\n <div\n v-else\n class=\"a-button-split d-inline-flex\"\n :class=\"buttonClass + ' a-button-split--' + variant\"\n >\n <VBtn\n class=\"a-button-split__main\"\n :variant=\"variantComputed\"\n :data-cy=\"dataCy\"\n :loading=\"loadingComputed\"\n :disabled=\"disabled\"\n :size=\"size\"\n :rounded=\"rounded\"\n :color=\"color\"\n @click.stop=\"onClick\"\n >\n <slot name=\"button-content\">\n {{ t(buttonT) }}\n </slot>\n </VBtn>\n <div class=\"a-button-split__divider d-inline-flex\" />\n <VDivider\n v-if=\"variant === 'tertiary'\"\n vertical\n class=\"my-2 border-opacity-50\"\n :color=\"color\"\n />\n <VBtn\n :variant=\"variantComputed\"\n :disabled=\"disabled || loading\"\n :data-cy=\"dataCy\"\n :color=\"color\"\n :rounded=\"rounded\"\n :size=\"size\"\n class=\"a-button-split__more\"\n >\n <VIcon icon=\"mdi-chevron-down\" />\n <VMenu\n activator=\"parent\"\n location=\"bottom right\"\n >\n <VList\n density=\"compact\"\n class=\"pa-0\"\n >\n <slot name=\"default\" />\n </VList>\n </VMenu>\n </VBtn>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-button-split {\n .a-button-split__main {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n padding-right: 10px !important;\n }\n\n .a-button-split__more {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n padding: 0 4px 0 0 !important;\n min-width: 32px !important;\n }\n\n .a-button-split__divider {\n display: inline-block;\n width: 1px;\n }\n\n &--secondary {\n .a-button-split__more {\n left: -2px;\n }\n }\n}\n</style>\n","import { computed, readonly, ref } from 'vue'\nimport { useStorage } from '@vueuse/core'\n\nexport enum ThemeSettings {\n Light = 'light',\n Dark = 'dark',\n Auto = 'auto',\n}\n\nexport enum Theme {\n Light = 'light',\n Dark = 'dark',\n}\n\nconst storedSettings = useStorage('theme', ThemeSettings.Light)\n\nconst QUERY = '(prefers-color-scheme: dark)'\n\nconst settings = ref<ThemeSettings>(\n Object.values(ThemeSettings).some((val) => val === storedSettings.value)\n ? <ThemeSettings>storedSettings.value\n : ThemeSettings.Light\n)\nconst theme = ref<Theme>(Theme.Light)\nconst systemHasDarkPreference = ref(window.matchMedia && window.matchMedia(QUERY).matches)\n\nconst setTheme = () => {\n switch (settings.value) {\n case ThemeSettings.Auto:\n theme.value = systemHasDarkPreference.value ? Theme.Dark : Theme.Light\n break\n case ThemeSettings.Light:\n theme.value = Theme.Light\n break\n case ThemeSettings.Dark:\n theme.value = Theme.Dark\n break\n }\n}\nsetTheme()\n\nconst setThemeSettings = (value: ThemeSettings) => {\n settings.value = value\n storedSettings.value = value\n}\n\nwindow.matchMedia(QUERY).addEventListener('change', (event) => {\n systemHasDarkPreference.value = event.matches\n setTheme()\n})\n\nconst toolbarColor = computed(() => {\n return theme.value === Theme.Light ? 'white' : '#1A1A1A'\n})\n\nexport function useTheme() {\n const setThemeAuto = () => {\n setThemeSettings(ThemeSettings.Auto)\n setTheme()\n }\n\n const setThemeDark = () => {\n setThemeSettings(ThemeSettings.Dark)\n setTheme()\n }\n\n const setThemeLight = () => {\n setThemeSettings(ThemeSettings.Light)\n setTheme()\n }\n\n const toggleTheme = () => {\n switch (settings.value) {\n case ThemeSettings.Light:\n setThemeDark()\n break\n case ThemeSettings.Dark:\n setThemeAuto()\n break\n default:\n setThemeLight()\n break\n }\n }\n\n return {\n settings: readonly(settings),\n theme: readonly(theme),\n toolbarColor: readonly(toolbarColor),\n toggleTheme,\n setThemeAuto,\n setThemeDark,\n setThemeLight,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport { ThemeSettings, useTheme } from '@/composables/themeSettings'\n\nconst { setThemeDark, setThemeAuto, setThemeLight, settings } = useTheme()\n\nconst { t } = useI18n()\n\nconst isOpen = ref(false)\n</script>\n\n<template>\n <VMenu\n v-model=\"isOpen\"\n close-on-content-click\n >\n <template #activator=\"{ props }\">\n <VBtn\n class=\"pl-1\"\n rounded=\"pill\"\n v-bind=\"props\"\n variant=\"text\"\n data-cy=\"settings-theme\"\n >\n <div v-if=\"settings === ThemeSettings.Auto\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-auto\"\n :size=\"32\"\n />{{ t('common.system.theme.auto') }}\n </div>\n <div v-else-if=\"settings === ThemeSettings.Light\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-7\"\n :size=\"32\"\n />{{ t('common.system.theme.light') }}\n </div>\n <div v-else-if=\"settings === ThemeSettings.Dark\">\n <VIcon\n class=\"mr-1\"\n icon=\"mdi-brightness-4\"\n :size=\"32\"\n />{{ t('common.system.theme.dark') }}\n </div>\n </VBtn>\n </template>\n <VCard>\n <VList density=\"compact\">\n <VListItem\n :title=\"t('common.system.theme.auto')\"\n @click.stop=\"setThemeAuto\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-auto\"\n />\n </template>\n </VListItem>\n <VListItem\n :title=\"t('common.system.theme.light')\"\n @click.stop=\"setThemeLight\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-7\"\n />\n </template>\n </VListItem>\n <VListItem\n :title=\"t('common.system.theme.dark')\"\n @click.stop=\"setThemeDark\"\n >\n <template #prepend>\n <VIcon\n class=\"mr-2\"\n icon=\"mdi-brightness-4\"\n />\n </template>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 7410 3900\"\n >\n <path\n fill=\"#b22234\"\n d=\"M0 0h7410v3900H0z\"\n />\n <path\n d=\"M0 450h7410m0 600H0m0 600h7410m0 600H0m0 600h7410m0 600H0\"\n stroke=\"#fff\"\n stroke-width=\"300\"\n />\n <path\n fill=\"#3c3b6e\"\n d=\"M0 0h2964v2100H0z\"\n />\n <g fill=\"#fff\">\n <g id=\"d\">\n <g id=\"c\">\n <g id=\"e\">\n <g id=\"b\">\n <path\n id=\"a\"\n d=\"M247 90l70.534 217.082-184.66-134.164h228.253L176.466 307.082z\"\n />\n <use\n xlink:href=\"#a\"\n y=\"420\"\n />\n <use\n xlink:href=\"#a\"\n y=\"840\"\n />\n <use\n xlink:href=\"#a\"\n y=\"1260\"\n />\n </g>\n <use\n xlink:href=\"#a\"\n y=\"1680\"\n />\n </g>\n <use\n xlink:href=\"#b\"\n x=\"247\"\n y=\"210\"\n />\n </g>\n <use\n xlink:href=\"#c\"\n x=\"494\"\n />\n </g>\n <use\n xlink:href=\"#d\"\n x=\"988\"\n />\n <use\n xlink:href=\"#c\"\n x=\"1976\"\n />\n <use\n xlink:href=\"#e\"\n x=\"2470\"\n />\n </g>\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 900 600\"\n >\n <rect\n width=\"900\"\n height=\"600\"\n fill=\"#cccccc\"\n />\n </svg>\n</template>\n","<script setup lang=\"ts\">\nimport type { LanguageCode } from '@/composables/languageSettings'\nimport { computed } from 'vue'\nimport FlagSk from '@/components/flags/FlagSk.vue'\nimport FlagEn from '@/components/flags/FlagEn.vue'\nimport FlagEmpty from '@/components/flags/FlagEmpty.vue'\n\n// flag source: https://github.com/hampusborgos/country-flags\n\nconst props = withDefaults(\n defineProps<{\n code?: LanguageCode | undefined\n dataCy?: string\n }>(),\n {\n code: 'xx',\n dataCy: 'flag-country',\n }\n)\n\nconst currentFlagComponent = computed(() => {\n switch (props.code) {\n case 'sk':\n return FlagSk\n case 'en':\n return FlagEn\n default:\n return FlagEmpty\n }\n})\n</script>\n\n<template>\n <div class=\"flag\">\n <component\n :is=\"currentFlagComponent\"\n :data-cy=\"dataCy\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Language, LanguageCode } from '@/composables/languageSettings'\nimport { ALL_LANGUAGES, modifyLanguageSettings, useLanguageSettings } from '@/composables/languageSettings'\nimport { computed, inject } from 'vue'\nimport { isUndefined } from '@/utils/common'\nimport FlagCountry from '@/components/flags/FlagCountry.vue'\nimport type { CurrentUserType } from '@/AnzuSystemsCommonAdmin'\nimport { ROLE_SUPER_ADMIN } from '@/composables/system/ability'\nimport { AvailableLanguagesSymbol, CurrentUserSymbol, DefaultLanguageSymbol } from '@/components/injectionKeys'\n\nconst emit = defineEmits<{\n (e: 'afterChange', code: LanguageCode): void\n}>()\n\nconst currentUser = inject(CurrentUserSymbol) as CurrentUserType\nconst configAvailableLanguages = inject(AvailableLanguagesSymbol) as LanguageCode[]\nconst configDefaultLanguage = inject(DefaultLanguageSymbol) as LanguageCode\n// @ts-ignore\nconst { setLanguage } = modifyLanguageSettings(configAvailableLanguages, configDefaultLanguage)\nconst { currentLanguageCode } = useLanguageSettings()\n\nconst onLanguageChange = (code: LanguageCode) => {\n const result = setLanguage(code)\n if (result) emit('afterChange', code)\n}\n\nconst currentLocale = computed(() => {\n const found = ALL_LANGUAGES.find((item) => item.code === currentLanguageCode.value)\n if (isUndefined(found)) {\n return ALL_LANGUAGES[0]\n }\n return found as Language\n})\n\nconst availableLocales = computed(() => {\n return ALL_LANGUAGES.filter(\n (item) =>\n (configAvailableLanguages.includes(item.code) || item.code === 'xx') &&\n (!item.adminOnly || currentUser.value?.roles.includes(ROLE_SUPER_ADMIN))\n )\n})\n</script>\n\n<template>\n <VMenu>\n <template #activator=\"{ props }\">\n <VBtn\n class=\"pl-1\"\n rounded=\"pill\"\n v-bind=\"props\"\n variant=\"text\"\n data-cy=\"settings-language\"\n >\n <VAvatar\n class=\"mr-1\"\n size=\"30\"\n >\n <FlagCountry :code=\"currentLocale?.code\" />\n </VAvatar>\n {{ currentLocale.title }}\n </VBtn>\n </template>\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-for=\"locale in availableLocales\"\n :key=\"locale.code\"\n @click.stop=\"onLanguageChange(locale.code)\"\n >\n <VListItemTitle>\n <VAvatar\n class=\"mr-1\"\n size=\"30\"\n >\n <FlagCountry :code=\"locale.code\" />\n </VAvatar>\n {{ locale.title }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n</template>\n\n<style lang=\"scss\" scoped>\n.flag {\n position: relative;\n width: 30px;\n height: 30px;\n\n :deep(svg) {\n width: 90px;\n height: 60px;\n position: absolute;\n top: -15px;\n left: -27px;\n transform: scale(0.7);\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nconst { t } = useI18n()\n\nconst reloadAdmin = () => {\n window.location.reload()\n}\n</script>\n\n<template>\n <span\n v-once\n class=\"system-bar-new-version\"\n >\n {{ t('common.system.newVersionText') }}\n <span\n class=\"text-decoration-underline cursor-pointer\"\n @click.stop=\"reloadAdmin\"\n >\n {{ t('common.system.newVersionReload') }}\n </span>\n </span>\n</template>\n","export const isAnzuApiForbiddenError = (error: unknown): error is AnzuNewVersionFetchError => {\n return error instanceof AnzuNewVersionFetchError\n}\n\nexport class AnzuNewVersionFetchError extends Error {\n constructor(message = '') {\n super(message)\n this.name = 'AnzuNewVersionFetchError'\n this.message = message\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref } from 'vue'\nimport { useIntervalFn } from '@vueuse/core'\nimport ASystemBarNewVersion from '@/components/systemBar/ASystemBarNewVersion.vue'\nimport { isUndefined } from '@/utils/common'\nimport { AnzuNewVersionFetchError } from '@/model/error/AnzuNewVersionFetchError'\n\nconst props = withDefaults(\n defineProps<{\n currentVersion: string\n checkInterval?: number\n jsonRelativePath?: string\n }>(),\n {\n checkInterval: 60000,\n jsonRelativePath: 'config.json',\n }\n)\n\nconst showSystemBar = ref(false)\n\nconst checkNewVersion = async () => {\n try {\n const res = await fetch(`/${props.jsonRelativePath}?random=${Date.now()}`)\n if (res.ok) {\n const contentType = res.headers.get('content-type')\n if (!contentType || !contentType.includes('application/json')) {\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect content type.')\n }\n const json = await res.json()\n if (Object.keys(json).length < 1) {\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect response body.')\n }\n showSystemBar.value = !isUndefined(json.appVersion) && json.appVersion !== props.currentVersion\n\n return\n }\n throw new AnzuNewVersionFetchError('Unable to load env config. Incorrect response code.')\n } catch (error) {\n if (error instanceof AnzuNewVersionFetchError) {\n console.log(error.message)\n return\n }\n if (error instanceof SyntaxError) {\n console.log('There was a SyntaxError', error)\n return\n }\n console.log('There was an error in new version fetch', error)\n }\n}\n\nconst systemBarComponent = computed(() => {\n return ASystemBarNewVersion\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { pause } = useIntervalFn(() => {\n checkNewVersion()\n}, props.checkInterval)\n\nonBeforeUnmount(() => {\n pause()\n})\n</script>\n\n<template>\n <VAppBar\n v-if=\"showSystemBar\"\n height=\"24\"\n color=\"orange accent-3\"\n elevation=\"0\"\n :order=\"-1\"\n >\n <div class=\"text-center w-100 text-caption pb-1\">\n <component :is=\"systemBarComponent\" />\n </div>\n </VAppBar>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\n\nconst props = withDefaults(\n defineProps<{\n user?: AnzuUserMinimal | undefined | null\n size?: number\n containerClass?: string\n }>(),\n {\n user: undefined,\n size: 36,\n containerClass: '',\n }\n)\n\nconst color = computed(() => {\n if (props.user?.avatar.color && props.user.avatar.color.length === 7) {\n return props.user.avatar.color\n }\n return '#3f6ad8'\n})\n\nconst fontSize = computed(() => {\n return props.size * 0.5 + 'px'\n})\n\nconst text = computed(() => {\n if (!props.user) return ''\n if (props.user.avatar.text.length > 0) return props.user.avatar.text\n const firstNameLastName = props.user.person.firstName.charAt(0) + props.user.person.lastName.charAt(0)\n if (firstNameLastName.length > 0) return firstNameLastName\n return props.user.email.slice(0, 2)\n})\n</script>\n\n<template>\n <VAvatar\n :color=\"color\"\n class=\"text-uppercase\"\n :class=\"containerClass\"\n :size=\"size\"\n >\n <div\n class=\"d-inline-flex text-white font-weight-light\"\n :style=\"{ fontSize: fontSize }\"\n >\n {{ text }}\n </div>\n </VAvatar>\n <div />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string\n label?: string\n loading?: boolean\n readonly?: boolean\n required?: boolean\n randomColor?: boolean\n hideLabel?: boolean\n }>(),\n {\n label: '',\n loading: false,\n readonly: false,\n required: false,\n randomColor: false,\n hideLabel: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: string): void\n}>()\n\nconst swatches = [\n ['#F44336', '#E91E63', '#9C27B0', '#673AB7'],\n ['#2196F3', '#03A9F4', '#00BCD4', '#009688'],\n ['#4CAF50', '#8BC34A', '#CDDC39', '#F9A825'],\n ['#FF6F00', '#FF5722', '#795548', '#607D8B'],\n ['#757575', '#000000', '#3F51B5'],\n]\nconst generatedColor = ref('')\n\nconst generateRandomColor = () => {\n const randomRow = Math.floor(Math.random() * swatches.length)\n generatedColor.value = swatches[randomRow][Math.floor(Math.random() * swatches[randomRow].length)]\n return generatedColor.value\n}\n\nconst variantComputed = computed(() => {\n return props.modelValue.length > 0 ? 'flat' : 'tonal'\n})\n\nconst buttonColorComputed = computed(() => {\n return props.modelValue.length > 0 ? props.modelValue : undefined\n})\n\nconst onColorPickerChange = (newColor: string) => {\n emit('update:modelValue', newColor)\n}\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n if (newValue.length === 7) return\n if (newValue.length !== 7 && props.randomColor) {\n if (generatedColor.value === '') {\n emit('update:modelValue', generateRandomColor())\n return\n }\n emit('update:modelValue', generatedColor.value)\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div>\n <label\n v-if=\"!hideLabel\"\n class=\"v-label mr-2\"\n >\n {{ label }}\n <span\n v-if=\"required\"\n class=\"required\"\n />\n </label>\n <VBtn\n :variant=\"variantComputed\"\n icon\n :color=\"buttonColorComputed\"\n >\n <VMenu\n v-if=\"!readonly\"\n activator=\"parent\"\n >\n <VCard>\n <VColorPicker\n :model-value=\"buttonColorComputed\"\n :swatches=\"swatches\"\n class=\"a-color-picker--hide-controls\"\n elevation=\"0\"\n hide-canvas\n hide-inputs\n show-swatches\n @update:model-value=\"onColorPickerChange\"\n />\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n</template>\n\n<style lang=\"scss\">\n.a-color-picker--hide-controls .v-color-picker__controls {\n display: none;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport type { AnzuUserMinimal } from '@/types/AnzuUser'\nimport AAnzuUserAvatar from '@/components/AAnzuUserAvatar.vue'\n\nwithDefaults(\n defineProps<{\n currentUser: AnzuUserMinimal | undefined | null\n settingsRouteName: string\n logoutRouteName: string\n dataCy?: string\n }>(),\n {\n dataCy: 'navbar-user',\n }\n)\n\nconst { t } = useI18n()\n\nconst logoutDialog = ref(false)\n</script>\n\n<template>\n <VBtn\n variant=\"text\"\n icon\n size=\"small\"\n :data-cy=\"dataCy\"\n >\n <AAnzuUserAvatar\n :size=\"32\"\n :user=\"currentUser\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.system.currentUser.button') }}\n </VTooltip>\n <VMenu\n v-if=\"currentUser\"\n activator=\"parent\"\n >\n <VCard>\n <VList class=\"pb-0\">\n <VListItem\n class=\"pb-6\"\n lines=\"two\"\n >\n <template #prepend>\n <AAnzuUserAvatar\n :user=\"currentUser\"\n :size=\"40\"\n />\n </template>\n <VListItemTitle>{{ currentUser.person.fullName }}</VListItemTitle>\n <VListItemSubtitle>\n {{ currentUser.email }}<br>\n {{ currentUser.id }}\n </VListItemSubtitle>\n </VListItem>\n <VDivider />\n <VListItem\n :active=\"false\"\n prepend-icon=\"mdi-cog\"\n :to=\"{ name: settingsRouteName }\"\n data-cy=\"navbar-user-settings\"\n >\n {{ t('common.system.currentUser.settings') }}\n </VListItem>\n <VListItem\n prepend-icon=\"mdi-logout\"\n data-cy=\"navbar-user-logout\"\n @click.stop=\"logoutDialog = true\"\n >\n {{ t('common.system.currentUser.logout') }}\n <VDialog\n v-model=\"logoutDialog\"\n width=\"auto\"\n >\n <VCard v-if=\"logoutDialog\">\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n >\n <VToolbarTitle class=\"flex-fill\">\n {{ t('common.system.currentUser.logout') }}\n </VToolbarTitle>\n <VSpacer />\n <VBtn\n class=\"ml-2\"\n icon=\"mdi-close\"\n size=\"small\"\n variant=\"text\"\n data-cy=\"button-close\"\n @click.stop=\"logoutDialog = false\"\n />\n </VToolbar>\n <VCardText>{{ t('common.system.currentUser.logoutText') }}</VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn\n color=\"secondary\"\n variant=\"text\"\n data-cy=\"button-cancel\"\n @click.stop=\"logoutDialog = false\"\n >\n {{ t('common.button.cancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n data-cy=\"button-confirm\"\n :to=\"{ name: logoutRouteName }\"\n >\n {{ t('common.system.currentUser.logoutConfirm') }}\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n</template>\n","<script lang=\"ts\" setup>\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, inject, ref, toRefs, watch } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isArray, isNull, isUndefined } from '@/utils/common'\nimport { SubjectScopeSymbol, SystemScopeSymbol } from '@/components/injectionKeys'\nimport { usePagination } from '@/composables/system/pagination'\nimport { stringSplitOnFirstOccurrence } from '@/utils/string'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\n// type FetchItemsByIdsType =\n// | ((ids: IntegerId[]) => Promise<ValueObjectOption<IntegerId>[]>)\n// | ((ids: DocId[]) => Promise<ValueObjectOption<DocId>[]>)\n\ntype FetchItemsMinimalType = (pagination: Pagination, filterBag: FilterBag) => Promise<any[]>\n\ntype UseCachedType = () => {\n fetch: any\n add: any\n addManualMinimal: any\n}\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n label?: string | undefined\n required?: boolean\n multiple?: boolean\n clearable?: boolean\n v?: any\n errorMessage?: string\n hideLabel?: boolean\n fetchItemsMinimal: FetchItemsMinimalType\n innerFilter: FilterBag\n filterByField?: string\n filterSortBy?: string | null\n loading?: boolean\n useCached: UseCachedType\n itemTitle?: string\n itemValue?: string\n }>(),\n {\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n v: null,\n errorMessage: undefined,\n hideLabel: false,\n filterByField: 'name',\n filterSortBy: 'createdAt',\n loading: false,\n itemTitle: 'name',\n itemValue: 'id',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'blur', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'focus', data: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined): void\n (e: 'searchChange', data: string): void\n (e: 'searchChangeDebounced', data: string): void\n}>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetch, add, addManualMinimal } = props.useCached()\n\nconst modelValue = computed({\n get() {\n return props.modelValue\n },\n set(newValue: DocId | IntegerId | DocId[] | IntegerId[] | null | undefined) {\n emit('update:modelValue', cloneDeep<DocId | IntegerId | DocId[] | IntegerId[] | null | undefined>(newValue))\n },\n})\n\nconst { t } = useI18n()\nconst system = inject<string | undefined>(SystemScopeSymbol, undefined)\nconst subject = inject<string | undefined>(SubjectScopeSymbol, undefined)\n\nconst isFocused = ref(false)\nconst search = ref('')\nconst loadingLocal = ref(false)\nconst { innerFilter } = toRefs(props)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst pagination = usePagination(props.filterSortBy)\n\nconst fetchedItemsMinimal = ref<Map<IntegerId | DocId, any>>(new Map())\n// const fetchedItems = ref<Map<IntegerId | DocId, string>>(new Map())\n\nconst onFocus = () => {\n isFocused.value = true\n emit('focus', modelValue.value)\n}\n\nconst onBlur = () => {\n isFocused.value = false\n props.v?.$touch()\n emit('blur', modelValue.value)\n}\n\nconst errorMessageComputed = computed(() => {\n if (!isUndefined(props.errorMessage)) return [props.errorMessage]\n if (props.v?.$errors?.length) return props.v.$errors.map((item: ErrorObject) => item.$message)\n return []\n})\n\nconst labelComputed = computed(() => {\n if (!isUndefined(props.label)) return props.label\n if (isUndefined(system) || isUndefined(subject) || isUndefined(props.v?.$path)) return ''\n const { end: path } = stringSplitOnFirstOccurrence(props.v?.$path, '.')\n return t(system + '.' + subject + '.model.' + path)\n})\n\nconst requiredComputed = computed(() => {\n if (!isUndefined(props.required)) return props.required\n return props.v?.required && props.v?.required.$params.type === 'required'\n})\n\nconst multipleComputedVuetifyTypeFix = computed(() => {\n if (props.multiple === false) return false\n return true as unknown as undefined\n})\n\nconst onSearchUpdate = (query: string) => {\n if (!props.multiple && !isFocused.value && query.length === 0) return // vuetify fix\n search.value = query\n}\n\nconst apiSearch = async (query: string) => {\n loadingLocal.value = true\n const filterField = innerFilter.value[props.filterByField]\n filterField.model = query\n fetchedItemsMinimal.value.clear()\n const res = await props.fetchItemsMinimal(pagination, innerFilter.value)\n res.forEach((item: any) => {\n fetchedItemsMinimal.value.set(item[props.itemValue], item)\n })\n loadingLocal.value = false\n}\n\nconst allItems = computed<ValueObjectOption<DocId | IntegerId>[]>(() => {\n const final: Map<IntegerId | DocId, string> = new Map()\n if (isArray(modelValue.value)) {\n modelValue.value.forEach((value) => {\n final.set(value, '')\n })\n } else if (modelValue.value) {\n final.set(modelValue.value, '')\n }\n fetchedItemsMinimal.value.forEach((value) => {\n final.set(value[props.itemValue], value[props.itemTitle])\n })\n return Array.from(final, ([key, value]) => {\n return { value: key, title: value }\n })\n})\n\nconst tryToAddFromFetchedItems = (ids: Set<DocId | IntegerId>) => {\n return new Promise<boolean>((resolve) => {\n fetchedItemsMinimal.value.forEach((value, key) => {\n if (ids.has(key)) {\n addManualMinimal(cloneDeep(value))\n }\n })\n return resolve(true)\n })\n}\n\nconst onClickClear = () => {\n apiSearch('')\n if (props.multiple) {\n modelValue.value = []\n return\n }\n modelValue.value = null\n}\n\nconst deleteWasPressedTime = ref(0)\nconst onKeydownDelete = () => {\n deleteWasPressedTime.value = Date.now()\n}\n\nwatchDebounced(\n search,\n (newValue, oldValue) => {\n if (newValue !== oldValue) {\n apiSearch(newValue)\n emit('searchChangeDebounced', newValue)\n }\n },\n { debounce: 300, maxWait: 1000 }\n)\n\nwatch(search, (newValue, oldValue) => {\n if (newValue.length === 0 && isFocused.value === true) {\n const now = Date.now()\n if (now - deleteWasPressedTime.value > 200) {\n search.value = oldValue\n return\n }\n }\n if (newValue !== oldValue) {\n emit('searchChange', newValue)\n }\n})\n\nwatch(\n modelValue,\n async (newValue) => {\n if (isNull(newValue) || isUndefined(newValue) || (isArray(newValue) && newValue.length === 0)) {\n return\n }\n const values = isArray(newValue) ? newValue : [newValue]\n const idsToFetch = new Set(values)\n await tryToAddFromFetchedItems(idsToFetch)\n\n if (idsToFetch.size > 0) {\n add(Array.from(idsToFetch) as Array<DocId & IntegerId>)\n fetch()\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :search=\"search\"\n chips\n :items=\"allItems\"\n no-filter\n :multiple=\"multipleComputedVuetifyTypeFix\"\n :clearable=\"clearable\"\n :error-messages=\"errorMessageComputed\"\n :loading=\"loadingLocal\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @update:search=\"onSearchUpdate\"\n @click:clear=\"onClickClear\"\n @keydown.delete=\"onKeydownDelete\"\n >\n <template #label>\n <span\n v-if=\"!hideLabel\"\n :key=\"requiredComputed + ''\"\n >\n {{ labelComputed }}\n <span\n v-if=\"requiredComputed\"\n class=\"required\"\n />\n </span>\n </template>\n <template\n v-if=\"!multiple\"\n #selection\n />\n <!-- @vue-skip -->\n <template #chip=\"{ props: chipProps, item: chipItem }\">\n <slot\n name=\"chip\"\n :props=\"chipProps\"\n :item=\"chipItem\"\n >\n <VChip\n v-bind=\"chipProps\"\n :text=\"chipItem.title\"\n />\n </slot>\n </template>\n <!-- @vue-skip -->\n <template #item=\"{ props: itemProps, item: itemItem }\">\n <slot\n name=\"item\"\n :props=\"itemProps\"\n :item=\"itemItem\"\n >\n <VListItem :props=\"itemProps\" />\n </slot>\n </template>\n </VAutocomplete>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n title?: string | undefined\n logoUrl?: string | undefined\n loginUrl?: undefined | (() => string)\n dataCy?: string\n }>(),\n {\n title: undefined,\n logoUrl: undefined,\n loginUrl: undefined,\n dataCy: 'button-login',\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex justify-center align-center flex-column\">\n <img\n :src=\"logoUrl\"\n class=\"logo pb-2\"\n alt=\"\"\n >\n <h1\n v-if=\"title\"\n class=\"display-1 my-3\"\n >\n {{ title }}\n </h1>\n <h4 class=\"mb-3 body-1\">\n <span>{{ t('common.system.login.text') }}</span>\n </h4>\n <div class=\"py-5\">\n <VBtn\n v-if=\"loginUrl\"\n :data-cy=\"dataCy\"\n :href=\"loginUrl()\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.login.text') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.logo {\n display: block;\n max-width: 120px;\n height: auto;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { onMounted } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n logoutUrl?: undefined | (() => string)\n }>(),\n {\n logoutUrl: undefined,\n }\n)\n\nonMounted(() => {\n if (!props.logoutUrl) return\n window.location.href = props.logoutUrl()\n})\n</script>\n\n<template>\n <div />\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n returnRouteName: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.unauthorized.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.unauthorized.text') }}\n </p>\n\n <VBtn\n :to=\"{ name: returnRouteName }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.unauthorized.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n returnRouteName: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.notFound.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.notFound.text') }}\n </p>\n\n <VBtn\n :to=\"{ name: returnRouteName }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.notFound.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { JobBase } from '@/types/Job'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/components/ARow.vue'\nimport AJobStatusChip from '@/components/job/AJobStatusChip.vue'\nimport ADatetime from '@/components/ADatetime.vue'\n\nwithDefaults(\n defineProps<{\n job: JobBase\n loading?: boolean\n }>(),\n {\n loading: false,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <ARow\n :title=\"t('common.job.model.id')\"\n :value=\"job.id\"\n />\n <ARow :title=\"t('common.job.model._resourceName')\">\n <slot name=\"resource-name\">\n {{ job._resourceName }}\n </slot>\n </ARow>\n <ARow :title=\"t('common.job.model.status')\">\n <AJobStatusChip :value=\"job.status\" />\n </ARow>\n <ARow :title=\"t('common.job.model.startedAt')\">\n <ADatetime :date-time=\"job.startedAt\" />\n </ARow>\n <ARow :title=\"t('common.job.model.finishedAt')\">\n <ADatetime :date-time=\"job.finishedAt\" />\n </ARow>\n <ARow\n :title=\"t('common.job.model.result')\"\n :value=\"job.result\"\n />\n </div>\n</template>\n","import type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\nimport type { ResourceNameSystemAware } from '@/types/ResourceNameSystemAware'\nimport type { AssetFile } from '@/types/coreDam/AssetFile'\n\ninterface Texts {\n displayTitle: string\n}\n\nexport type DamDistributionServiceName = string\n\nexport enum DamAssetStatus {\n Draft = 'draft',\n WithFile = 'with_file',\n Deleting = 'deleting',\n Default = Draft,\n}\n\nexport enum DamAssetType {\n Image = 'image',\n Audio = 'audio',\n Video = 'video',\n Document = 'document',\n Default = Image,\n}\n\nexport type DamAssetTypeValues = `${DamAssetType}`\n\nexport const damAssetTypeValueToEnum = (value: DamAssetTypeValues) => {\n switch (value) {\n case 'image':\n return DamAssetType.Image\n case 'audio':\n return DamAssetType.Audio\n case 'video':\n return DamAssetType.Video\n case 'document':\n return DamAssetType.Document\n default:\n return DamAssetType.Default\n }\n}\n\ninterface Attributes {\n assetType: DamAssetType\n assetStatus: DamAssetStatus\n}\n\nexport interface AssetFileProperties {\n distributesInServices: DamDistributionServiceName[]\n slotNames: string[]\n fromRss: boolean\n width: number\n height: number\n}\n\ninterface Flags {\n described: boolean\n visible: boolean\n}\n\nexport interface AssetMetadataSuggestions extends Record<string, Array<string>> {}\n\nexport type AssetCustomData = Record<string, any>\n\ninterface Metadata {\n authorSuggestions: AssetMetadataSuggestions\n keywordSuggestions: AssetMetadataSuggestions\n customData: any\n}\n\nexport interface AssetSearchListItemDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware {\n id: DocId\n texts: Texts\n attributes: Attributes\n flags: Flags\n licence: IntegerId\n mainFile: null | AssetFile\n keywords: DocId[]\n authors: DocId[]\n podcasts: DocId[]\n metadata: Metadata\n assetFileProperties: AssetFileProperties\n}\n\nexport interface AssetDetailItemDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware {\n id: DocId\n texts: Texts\n attributes: Attributes\n flags: Flags\n licence: IntegerId\n mainFile: null | AssetFile\n keywords: DocId[]\n authors: DocId[]\n podcasts: DocId[]\n metadata: Metadata\n distributionCategory: DocIdNullable\n assetFileProperties: AssetFileProperties\n}\n\nexport interface AssetMetadataDto extends AnzuUserAndTimeTrackingAware, ResourceNameSystemAware, Metadata {\n id: DocId\n customData: AssetCustomData\n}\n\nexport type AssetExternalProviderId = string | number\nexport type AssetExternalProviderIdNullable = AssetExternalProviderId | null\n\nexport type AssetExternalProviderMetadata = Record<string, string | number | number[] | string[] | boolean>\n","import { reactive } from 'vue'\nimport { makeFilterHelper } from '@/lib'\n\nconst makeFilter = makeFilterHelper('common', 'assetSelect')\n\nconst filter = reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text', variant: 'search' }),\n },\n type: {\n ...makeFilter({ name: 'type', default: [] }),\n },\n status: {\n ...makeFilter({ name: 'status', default: ['with_file'] }),\n },\n mostDominantColor: {\n ...makeFilter({ name: 'mostDominantColor', default: [] }),\n },\n closestMostDominantColor: {\n ...makeFilter({ name: 'closestMostDominantColor', default: [] }),\n },\n codecName: {\n ...makeFilter({ name: 'codecName', default: [] }),\n },\n orientation: {\n ...makeFilter({ name: 'orientation', default: [] }),\n },\n described: {\n ...makeFilter({ name: 'described', default: null }),\n },\n visible: {\n ...makeFilter({ name: 'visible', default: true }),\n },\n generatedBySystem: {\n ...makeFilter({ name: 'generatedBySystem', default: false }),\n },\n inPodcast: {\n ...makeFilter({ name: 'inPodcast', default: null }),\n },\n fromRss: {\n ...makeFilter({ name: 'fromRss', default: null }),\n },\n slotNames: {\n ...makeFilter({ name: 'slotNames', default: [] }),\n },\n distributedInServices: {\n ...makeFilter({ name: 'distributedInServices', default: [], multiple: true }),\n },\n licences: {\n ...makeFilter({ name: 'licences', default: [] }),\n },\n shortestDimensionFrom: {\n ...makeFilter({ name: 'shortestDimensionFrom', default: null }),\n },\n shortestDimensionUntil: {\n ...makeFilter({ name: 'shortestDimensionUntil', default: null }),\n },\n pixelSizeFrom: {\n ...makeFilter({ name: 'pixelSizeFrom', default: null }),\n },\n pixelSizeUntil: {\n ...makeFilter({ name: 'pixelSizeUntil', default: null }),\n },\n widthFrom: {\n ...makeFilter({ name: 'widthFrom', default: null }),\n },\n widthUntil: {\n ...makeFilter({ name: 'widthUntil', default: null }),\n },\n heightFrom: {\n ...makeFilter({ name: 'heightFrom', default: null }),\n },\n heightUntil: {\n ...makeFilter({ name: 'heightUntil', default: null }),\n },\n ratioWidthFrom: {\n ...makeFilter({ name: 'ratioWidthFrom', default: null }),\n },\n ratioWidthUntil: {\n ...makeFilter({ name: 'ratioWidthUntil', default: null }),\n },\n ratioHeightFrom: {\n ...makeFilter({ name: 'ratioHeightFrom', default: null }),\n },\n ratioHeightUntil: {\n ...makeFilter({ name: 'ratioHeightUntil', default: null }),\n },\n rotationFrom: {\n ...makeFilter({ name: 'rotationFrom', default: null }),\n },\n rotationUntil: {\n ...makeFilter({ name: 'rotationUntil', default: null }),\n },\n durationFrom: {\n ...makeFilter({ name: 'durationFrom', default: null }),\n },\n durationUntil: {\n ...makeFilter({ name: 'durationUntil', default: null }),\n },\n bitrateFrom: {\n ...makeFilter({ name: 'bitrateFrom', default: null }),\n },\n bitrateUntil: {\n ...makeFilter({ name: 'bitrateUntil', default: null }),\n },\n slotsCountFrom: {\n ...makeFilter({ name: 'slotsCountFrom', default: null }),\n },\n slotsCountUntil: {\n ...makeFilter({ name: 'slotsCountUntil', default: null }),\n },\n createdAtFrom: {\n ...makeFilter({ name: 'createdAtFrom', default: null }),\n },\n createdAtUntil: {\n ...makeFilter({ name: 'createdAtUntil', default: null }),\n },\n})\n\nexport function useAssetListFilter() {\n return filter\n}\n","import type { DocId } from '@/types/common'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\n\nexport enum AssetSelectReturnType {\n MainFileId = 'mainFileId',\n AssetId = 'assetId',\n Asset = 'asset',\n}\n\nexport type AssetSelectReturnTypeValues = `${AssetSelectReturnType}`\n\nexport type AssetSelectReturnData = AssetSelectReturnMainFileId | AssetSelectReturnAssetId | AssetSelectReturnAsset\n\ninterface AssetSelectReturnMainFileId {\n type: 'mainFileId'\n value: Array<DocId>\n}\n\ninterface AssetSelectReturnAssetId {\n type: 'assetId'\n value: Array<DocId>\n}\n\ninterface AssetSelectReturnAsset {\n type: 'asset'\n value: Array<AssetSearchListItemDto>\n}\n\nexport const assetSelectReturnTypeValuesToEnum = (value: AssetSelectReturnTypeValues) => {\n switch (value) {\n case 'assetId':\n return AssetSelectReturnType.AssetId\n case 'asset':\n return AssetSelectReturnType.Asset\n case 'mainFileId':\n default:\n return AssetSelectReturnType.MainFileId\n }\n}\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport type { AssetSearchListItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport { DamAssetType as AssetTypeValue } from '@/types/coreDam/Asset'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { computed, ref, toRaw } from 'vue'\nimport { type AssetSelectReturnData, AssetSelectReturnType } from '@/types/coreDam/AssetSelect'\nimport type { ImageWidgetSelectConfig } from '@/types/ImageAware'\nimport { cloneDeep } from '@/utils/common'\n\nexport interface AssetSelectListItem {\n asset: AssetSearchListItemDto\n selected: boolean\n}\n\nexport const useAssetSelectStore = defineStore('commonAdminCoreDamAssetSelectStore', () => {\n const assetListItems = ref<Array<AssetSelectListItem>>([])\n const loader = ref(false)\n const selectedLicenceId = ref<IntegerId>(0)\n const selectConfig = ref<ImageWidgetSelectConfig[]>([])\n const assetType = ref<AssetTypeValue>(AssetTypeValue.Default)\n const selectedAssets = ref<Map<DocId, AssetSelectListItem>>(new Map())\n const singleMode = ref(false)\n const minCount = ref(0)\n const maxCount = ref(0)\n\n function showLoader() {\n loader.value = true\n }\n\n function hideLoader() {\n loader.value = false\n }\n\n function setSelectConfig(value: ImageWidgetSelectConfig[]) {\n if (value.length === 0) return\n selectConfig.value = cloneDeep(value)\n selectedLicenceId.value = value[0].licence\n }\n\n function setSingleMode(value: boolean) {\n singleMode.value = value\n }\n\n function setAssetType(value: DamAssetType) {\n assetType.value = value\n }\n\n function setMinCount(value: number) {\n minCount.value = value\n }\n\n function setMaxCount(value: number) {\n maxCount.value = value\n }\n\n function setList(items: AssetSearchListItemDto[]) {\n assetListItems.value = items.map((item) => {\n return {\n asset: item,\n selected: false,\n }\n })\n }\n\n function appendList(items: AssetSearchListItemDto[]) {\n const assets = items.map((asset) => {\n return {\n asset: asset,\n selected: false,\n }\n })\n assetListItems.value = assetListItems.value.concat(assets)\n }\n\n function toggleSelectedByIndex(index: number) {\n if (!assetListItems.value[index]) return\n\n if (!singleMode.value && isSelectedMax.value && !assetListItems.value[index].selected) {\n return\n }\n\n assetListItems.value[index].selected = !assetListItems.value[index].selected\n\n if (singleMode.value && assetListItems.value[index].selected) {\n unselectAllExcept(index)\n clearSelected()\n addToSelected(assetListItems.value[index])\n return\n }\n\n if (!singleMode.value && assetListItems.value[index].selected) {\n addToSelected(assetListItems.value[index])\n return\n }\n\n removeFromSelected(assetListItems.value[index].asset.id)\n }\n\n function unselectAllExcept(ignoreIndex: number) {\n const items = assetListItems.value\n for (let i = 0; i < items.length; i++) {\n if (items[i].selected && i !== ignoreIndex) {\n items[i].selected = false\n }\n }\n }\n\n function clearSelected() {\n selectedAssets.value.clear()\n }\n\n function addToSelected(assetItem: AssetSelectListItem) {\n if (!selectedAssets.value.has(assetItem.asset.id)) {\n selectedAssets.value.set(assetItem.asset.id, assetItem)\n }\n }\n\n function removeFromSelected(assetId: DocId) {\n if (selectedAssets.value.has(assetId)) {\n selectedAssets.value.delete(assetId)\n }\n }\n\n function getSelectedMainFileIds(): DocId[] {\n const fileIds: Set<DocId> = new Set()\n for (const value of selectedAssets.value.values()) {\n if (value.asset.mainFile?.id) {\n fileIds.add(value.asset.mainFile.id)\n }\n }\n return Array.from(fileIds)\n }\n\n function getSelectedAssetIds(): DocId[] {\n return Array.from(selectedAssets.value.keys())\n }\n\n function getSelectedAssets(): AssetSearchListItemDto[] {\n const assets: Array<AssetSearchListItemDto> = []\n for (const value of selectedAssets.value.values()) {\n assets.push(toRaw(value.asset))\n }\n return assets\n }\n\n function getSelectedData(type: AssetSelectReturnType): AssetSelectReturnData {\n switch (type) {\n case AssetSelectReturnType.AssetId:\n return {\n type: AssetSelectReturnType.AssetId,\n value: getSelectedAssetIds(),\n }\n case AssetSelectReturnType.Asset:\n return {\n type: AssetSelectReturnType.Asset,\n value: getSelectedAssets(),\n }\n case AssetSelectReturnType.MainFileId:\n default:\n return {\n type: AssetSelectReturnType.MainFileId,\n value: getSelectedMainFileIds(),\n }\n }\n }\n\n const isSelectedMax = computed(() => {\n return selectedCount.value >= maxCount.value\n })\n\n const selectedCount = computed(() => {\n return selectedAssets.value.size\n })\n\n function reset() {\n assetListItems.value = []\n loader.value = false\n clearSelected()\n }\n\n const selectedSelectConfig = computed(() => {\n const found = selectConfig.value.find((configItem ) => configItem.licence === selectedLicenceId.value)\n if (found) return found\n return selectConfig.value[0]\n })\n\n return {\n selectedLicenceId,\n selectConfig,\n assetType,\n singleMode,\n minCount,\n maxCount,\n selectedCount,\n selectedAssets,\n loader,\n assetListItems,\n getSelectedData,\n setAssetType,\n setSelectConfig,\n setSingleMode,\n setMinCount,\n setMaxCount,\n showLoader,\n hideLoader,\n setList,\n appendList,\n toggleSelectedByIndex,\n clearSelected,\n reset,\n selectedSelectConfig,\n }\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useAssetSelectStore, import.meta.hot))\n}\n","import { ref } from 'vue'\nimport type { CommonAdminCoreDamOptions } from '@/AnzuSystemsCommonAdmin'\n\nimport { isUndefined } from '@/utils/common'\n\nconst commonAdminCoreDamOptions = ref<CommonAdminCoreDamOptions | undefined>(undefined)\n\nexport function initCommonAdminCoreDamOptions(data: CommonAdminCoreDamOptions) {\n commonAdminCoreDamOptions.value = data\n}\n\nexport function useCommonAdminCoreDamOptions(configName: string = 'default') {\n if (\n isUndefined(commonAdminCoreDamOptions.value) ||\n isUndefined(commonAdminCoreDamOptions.value.configs) ||\n isUndefined(commonAdminCoreDamOptions.value.configs[configName])\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n damClient: commonAdminCoreDamOptions.value.configs[configName].damClient,\n }\n}\n\nexport function useCommonAdminCoreDamOptionsGlobal() {\n if (\n isUndefined(commonAdminCoreDamOptions.value) ||\n isUndefined(commonAdminCoreDamOptions.value.configs)\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n apiTimeout: commonAdminCoreDamOptions.value.apiTimeout,\n uploadStatusFallback: commonAdminCoreDamOptions.value.uploadStatusFallback,\n notification: commonAdminCoreDamOptions.value.notification,\n }\n}\n","import { stringUrlTemplateReplace } from '@/utils/string'\nimport { isEmptyObject } from '@/utils/common'\n\nexport type UrlParams = {\n [key: string]: number | string\n}\n\nexport const replaceUrlParameters = (urlTemplate: string, urlParams: UrlParams, overrideUrlTemplate = '') => {\n if (isEmptyObject(urlParams)) return urlTemplate\n return stringUrlTemplateReplace(overrideUrlTemplate === '' ? urlTemplate : overrideUrlTemplate, urlParams)\n}\n","import { HTTP_STATUS_VALID_ALL } from '@/composables/statusCodes'\n\nexport const isValidHTTPStatus = (statusCode: number) => {\n return HTTP_STATUS_VALID_ALL.includes(statusCode)\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template R Response type\n */\nexport const apiFetchOne = <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .get(replaceUrlParameters(urlTemplate, urlParams), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { ref } from 'vue'\nimport { isArray, isBoolean, isNull, isNumber, isString, isUndefined } from '@/utils/common'\nimport type { Filter, FilterBag, FilterVariant } from '@/types/Filter'\n\n/**\n * Docs: /doc/Admin-Cms-Doc/Filters.md\n */\nexport function useApiQueryBuilder() {\n const q = ref<string[]>([])\n\n const querySetLimit = (value: number): void => {\n queryAdd('limit', value)\n }\n\n const querySetOffset = (page: number, limit: number): void => {\n queryAdd('offset', page * limit - limit)\n }\n\n const querySetOrder = (field: string | null, desc: boolean): void => {\n if (!isNull(field) && field.length > 0) queryAdd('order[' + field + ']', desc ? 'desc' : 'asc')\n }\n\n const formatValue = (value: string | number | boolean): string | number => {\n if (isBoolean(value)) {\n return value ? '1' : '0'\n }\n return value\n }\n\n const queryAddFilter = (filterVariant: FilterVariant, field: string, value: string | number | boolean): void => {\n if (isString(value) && value.length === 0) return\n q.value.push('filter_' + filterVariant + '[' + field + ']=' + formatValue(value))\n }\n\n const getValue = (filter: Filter): string | number | boolean | null => {\n const model = filter.model\n if (isNull(model)) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n if (isString(model)) {\n if (model.length === 0) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n return encodeURIComponent(model)\n }\n if (isArray(model)) {\n if (model.length === 0) {\n if (filter.mandatory) {\n filter.model = filter.default\n return filter.default\n }\n return null\n }\n return model.map((item) => (isString(item) ? encodeURIComponent(item) : item)).join(',')\n }\n if (isNumber(model) || isBoolean(model)) {\n return model\n }\n\n return null\n }\n\n const queryAdd = (key: string, value: any): void => {\n q.value.push(key + '=' + value)\n }\n\n const queryBuild = (): string => {\n return '?' + q.value.join('&')\n }\n\n const querySetFilters = (filterBag: FilterBag): void => {\n const isSearchApi = !isUndefined(filterBag._elastic)\n for (const filterName in filterBag) {\n const filter = filterBag[filterName]\n const field = filter.field || filterName\n if (filter.exclude) {\n continue\n }\n const value = getValue(filter)\n if (isNull(value)) {\n continue\n }\n if (isSearchApi) {\n queryAdd(field, value)\n continue\n }\n queryAddFilter(filter.variant, field, value)\n }\n }\n\n return {\n querySetLimit,\n querySetOffset,\n querySetOrder,\n queryAddFilter,\n querySetFilters,\n queryAdd,\n queryBuild,\n }\n}\n","import { isObject } from '@/utils/common'\n\nexport interface ApiResponseList<T> {\n totalCount: number\n data: T\n}\n\nexport interface ApiInfiniteResponseList<T> {\n hasNextPage: boolean\n data: T\n}\n\nexport const isApiResponseList = <T>(value: unknown): value is ApiResponseList<T> => {\n return isObject(value) && Object.hasOwn(value, 'totalCount')\n}\n\nexport const isApiInfiniteResponseList = <T>(value: unknown): value is ApiInfiniteResponseList<T> => {\n return isObject(value) && Object.hasOwn(value, 'hasNextPage')\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport { isUndefined } from '@/utils/common'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport type { ApiInfiniteResponseList, ApiResponseList } from '@/types/ApiResponse'\nimport { isApiInfiniteResponseList, isApiResponseList } from '@/types/ApiResponse'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\nconst generateListApiQuery = (pagination: Pagination, filterBag: FilterBag): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(pagination.rowsPerPage)\n querySetOffset(pagination.page, pagination.rowsPerPage)\n querySetOrder(pagination.sortBy, pagination.descending)\n querySetFilters(filterBag)\n return queryBuild()\n}\n\n/**\n * @template R Response type override, optional\n */\nexport const apiFetchList = <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n pagination: Pagination,\n filterBag: FilterBag,\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n const searchApi = isUndefined(filterBag._elastic) ? '' : '/search'\n client()\n .get(\n replaceUrlParameters(urlTemplate, urlParams) + searchApi + generateListApiQuery(pagination, filterBag),\n options\n )\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n if (isApiInfiniteResponseList(resData)) {\n pagination.hasNextPage = res.data.hasNextPage\n } else if (isApiResponseList(resData)) {\n pagination.totalCount = resData.totalCount\n }\n pagination.currentViewCount = res.data.data.length\n return resolve(res.data.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve([] as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { DamAssetType, DamDistributionServiceName } from '@/types/coreDam/Asset'\n\nexport interface DamPrvConfig {\n assetExternalProviders: {\n [key: string]: { title: string }\n }\n distributionServices: {\n [key: string]: {\n title: string\n iconPath: string\n type: DamDistributionServiceType\n allowedRedistributeStatuses: Array<DamDistributionStatus>\n }\n }\n colorSet: {\n [key: string]: string\n }\n settings: {\n aclCheckEnabled: boolean\n adminAllowListName: string\n allowSelectExtSystem: boolean\n allowSelectLicenceId: boolean\n defaultAssetLicenceId: number\n defaultExtSystemId: number\n imageChunkConfig: {\n minSize: number\n maxSize: number\n }\n maxBulkItemCount: number\n }\n}\n\nexport interface DamExtSystemConfig extends Record<DamAssetType, DamExtSystemConfigItem> {\n assetExternalProviders: DamExternalProviderAssetConfig\n audio: DamExtSystemConfigItem\n video: DamExtSystemConfigItem\n image: DamExtSystemConfigItem\n document: DamExtSystemConfigItem\n}\n\nexport interface DamExtSystemConfigItem {\n sizeLimit: number\n defaultFileVersion: string\n versions: Array<string>\n mimeTypes: Array<string>\n distribution: DamDistributionConfig\n authors: DamExtSystemAssetTypeExifMetadata\n keywords: DamExtSystemAssetTypeExifMetadata\n customMetadataPinnedAmount: number\n slots: string[]\n}\n\nexport type DamExternalProviderAssetConfig = Record<\n DamExternalProviderAssetName,\n {\n listingLimit: number\n title: string\n }\n>\n\nexport type DamExternalProviderAssetName = string\n\nexport interface DamDistributionConfig {\n distributionServices: Array<DamDistributionServiceName>\n distributionRequirements: Record<DamDistributionServiceName, DamDistributionRequirementsConfig>\n}\n\nexport interface DamDistributionRequirementsConfig {\n title: string\n requiredAuth: boolean\n blockedBy: Array<DamDistributionServiceName>\n categorySelect: DamDistributionRequirementsCategorySelectConfig\n strategy: DamDistributionRequirementStrategy\n}\n\nexport enum DamDistributionRequirementStrategy {\n None = 'none',\n AtLeastOne = 'at_least_one',\n OneFromType = 'one_from_type',\n WaitForAll = 'wait_for_all',\n Default = None,\n}\n\nexport interface DamDistributionRequirementsCategorySelectConfig {\n enabled: boolean\n required: boolean\n}\n\nexport interface DamExtSystemAssetTypeExifMetadata {\n enabled: boolean\n required: boolean\n}\n\nexport enum DamDistributionServiceType {\n Youtube = 'youtubeDistribution',\n Jw = 'jwDistribution',\n Custom = 'customDistribution',\n}\n\nexport enum DamDistributionStatus {\n Waiting = 'waiting',\n Distributing = 'distributing',\n RemoteProcessing = 'remote_processing',\n Distributed = 'distributed',\n Failed = 'failed',\n Default = Waiting,\n}\n\nexport interface DamPubConfig {\n userAuthType: UserAuthType\n}\n\nexport enum UserAuthType {\n JsonCredentials = 'json_credentials',\n OAuth2 = 'oauth2',\n Default = JsonCredentials,\n}\n","import type { DamExtSystemConfig, DamPrvConfig, DamPubConfig } from '@/types/coreDam/DamConfig'\nimport type { AxiosInstance } from 'axios'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { IntegerId } from '@/types/common'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/configuration'\nconst PUB_END_POINT_PREFIX = '/pub'\nconst PUB_END_POINT = PUB_END_POINT_PREFIX + '/v1/configuration'\nconst ENTITY = 'settings'\n\nexport const fetchPubConfiguration = (damClient: () => AxiosInstance) =>\n apiFetchOne<DamPubConfig>(damClient, PUB_END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchConfiguration = (damClient: () => AxiosInstance) =>\n apiFetchOne<DamPrvConfig>(damClient, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchExtSystemConfiguration = (extSystem: IntegerId, damClient: () => AxiosInstance) =>\n apiFetchOne<DamExtSystemConfig>(damClient, END_POINT + '/ext-system/' + extSystem, {}, SYSTEM_CORE_DAM, ENTITY)\n","import type { AxiosInstance } from 'axios'\nimport type { IntegerId } from '@/types/common'\nimport type { DamAssetType, DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\n\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/asset-custom-form'\nconst ENTITY = 'assetCustomForm'\n\n// todo limit set to 100 for now, add load for pagination?\nexport const fetchAssetCustomFormElements = (\n damClient: () => AxiosInstance,\n extSystem: IntegerId,\n assetType: DamAssetType\n) =>\n apiFetchOne<{ data: CustomDataFormElement[] }>(\n damClient,\n END_POINT + '/ext-system/:extSystem/type/:assetType/element?order[position]=asc&limit=100',\n { extSystem, assetType },\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\n// todo limit set to 100 for now, add load for pagination?\nexport const fetchDistributionCustomFormElements = (\n damClient: () => AxiosInstance,\n distributionService: DamDistributionServiceName\n) =>\n apiFetchOne<{ data: CustomDataFormElement[] }>(\n damClient,\n END_POINT + '/distribution-service/:distributionService/element?order[position]=asc&limit=100',\n { distributionService },\n SYSTEM_CORE_DAM,\n ENTITY\n )\n","import {\n type DamExtSystemConfig,\n type DamPrvConfig,\n type DamPubConfig,\n UserAuthType,\n} from '@/types/coreDam/DamConfig'\nimport { DamAssetType, type DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { AxiosInstance } from 'axios'\nimport { isUndefined } from '@/utils/common'\nimport {\n fetchConfiguration,\n fetchExtSystemConfiguration,\n fetchPubConfiguration,\n} from '@/components/damImage/uploadQueue/composables/damConfigApi'\nimport type { IntegerId } from '@/types/common'\nimport {\n fetchAssetCustomFormElements,\n fetchDistributionCustomFormElements,\n} from '@/components/damImage/uploadQueue/composables/damAssetCustomFormApi'\nimport { reactive, shallowRef } from 'vue'\n\n// const createDefaultExtSystemConfig = (override: Partial<DamExtSystemConfigItem> = {}): DamExtSystemConfigItem => ({\n// ...({\n// sizeLimit: 0,\n// defaultFileVersion: '',\n// versions: [],\n// mimeTypes: [],\n// distribution: {\n// distributionServices: [],\n// distributionRequirements: {},\n// },\n// keywords: {\n// enabled: false,\n// required: false,\n// },\n// authors: {\n// enabled: false,\n// required: false,\n// },\n// customMetadataPinnedAmount: 1,\n// slots: [],\n// } as DamExtSystemConfigItem),\n// ...override,\n// })\n\nconst initialized = reactive<{\n damPubConfig: boolean\n damPrvConfig: boolean\n}>({\n damPubConfig: false,\n damPrvConfig: false,\n})\n\nconst damPubConfig = shallowRef<DamPubConfig>({\n userAuthType: UserAuthType.JsonCredentials,\n})\n\nconst damPrvConfig = shallowRef<DamPrvConfig>({\n colorSet: {},\n assetExternalProviders: {},\n distributionServices: {},\n settings: {\n aclCheckEnabled: true,\n adminAllowListName: 'root',\n allowSelectExtSystem: false,\n allowSelectLicenceId: false,\n defaultAssetLicenceId: 0,\n defaultExtSystemId: 0,\n imageChunkConfig: {\n minSize: 0,\n maxSize: 0,\n },\n maxBulkItemCount: 0,\n },\n})\n\nconst damConfigExtSystem = shallowRef(new Map<IntegerId, DamExtSystemConfig>())\n\nconst damConfigAssetCustomFormElements = shallowRef(\n new Map<IntegerId, { [key in DamAssetType]: CustomDataFormElement[] }>()\n)\n\nconst damConfigDistributionCustomFormElements = shallowRef(\n new Map<DamDistributionServiceName, CustomDataFormElement[]>()\n)\n\nexport function useDamConfigState(client: undefined | (() => AxiosInstance) = undefined) {\n function onConfigError(error: Error) {\n console.error(error)\n }\n\n function loadDamPubConfig() {\n return new Promise((resolve, reject) => {\n initialized.damPubConfig = false\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchPubConfiguration(client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load pub config. Incorrect response body.')\n }\n setDamPubConfig(config)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamPubConfig(data: DamPubConfig) {\n try {\n damPubConfig.value.userAuthType = data.userAuthType\n\n initialized.damPubConfig = true\n } catch (err) {\n throw new Error('Unable to load dam pub config. Incorrect fields in json.')\n }\n }\n\n function isDamPubConfigLoaded() {\n return initialized.damPubConfig\n }\n\n function loadDamPrvConfig() {\n return new Promise((resolve, reject) => {\n initialized.damPubConfig = false\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchConfiguration(client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load dam prv config. Incorrect response body.')\n }\n setDamPrvConfig(config)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamPrvConfig(data: DamPrvConfig) {\n try {\n damPrvConfig.value.settings = data.settings\n damPrvConfig.value.colorSet = data.colorSet\n damPrvConfig.value.assetExternalProviders = data.assetExternalProviders\n damPrvConfig.value.distributionServices = data.distributionServices\n\n initialized.damPrvConfig = true\n } catch (err) {\n throw new Error('Unable to load dam config. Incorrect fields in json.')\n }\n }\n\n function isDamPrvConfigLoaded() {\n return initialized.damPrvConfig\n }\n\n function loadDamConfigExtSystem(extSystemId: IntegerId) {\n return new Promise((resolve, reject) => {\n if (isUndefined(client)) {\n reject(false)\n return\n }\n fetchExtSystemConfiguration(extSystemId, client)\n .then((config) => {\n if (Object.keys(config).length < 1) {\n throw new Error('Unable to load dam ext system config. Incorrect response body.')\n }\n setDamConfigExtSystem(config, extSystemId)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamConfigExtSystem(data: DamExtSystemConfig, extSystemId: IntegerId) {\n try {\n const config = {\n assetExternalProviders: data.assetExternalProviders,\n audio: data.audio,\n document: data.document,\n image: data.image,\n video: data.video,\n }\n damConfigExtSystem.value.set(extSystemId, config)\n } catch (err) {\n throw new Error('Unable to load dam ext system config. Incorrect fields in json.')\n }\n }\n\n function getDamConfigExtSystem(extSystemId: IntegerId) {\n return damConfigExtSystem.value.get(extSystemId)\n }\n\n // todo add support to load only selected types\n function loadDamConfigAssetCustomFormElements(extSystemId: IntegerId) {\n return new Promise((resolve, reject) => {\n if (isUndefined(client)) {\n reject(false)\n return\n }\n const promises = [\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Image),\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Audio),\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Video),\n fetchAssetCustomFormElements(client, extSystemId, DamAssetType.Document),\n ]\n\n Promise.all(promises)\n .then((responses) => {\n if (\n responses.length !== 4 ||\n Object.keys(responses[0]).length < 1 ||\n Object.keys(responses[1]).length < 1 ||\n Object.keys(responses[2]).length < 1 ||\n Object.keys(responses[3]).length < 1\n ) {\n throw new Error('Unable to load asset custom form config. Incorrect response body.')\n }\n setDamConfigAssetCustomFormElements(responses, extSystemId)\n resolve(true)\n })\n .catch((err) => {\n onConfigError(err)\n reject(false)\n })\n })\n }\n\n function setDamConfigAssetCustomFormElements(\n responses: Awaited<{\n data: CustomDataFormElement[]\n }>[],\n extSystemId: IntegerId\n ) {\n try {\n const config = {\n image: responses[0].data,\n audio: responses[1].data,\n video: responses[2].data,\n document: responses[3].data,\n }\n damConfigAssetCustomFormElements.value.set(extSystemId, config)\n } catch (err) {\n throw new Error('Unable to load asset custom form config. Incorrect fields in json.')\n }\n }\n\n function getDamConfigAssetCustomFormElements(extSystemId: IntegerId) {\n return damConfigAssetCustomFormElements.value.get(extSystemId)\n }\n\n function loadDamConfigDistributionCustomFormElements (distributionServiceName: DamDistributionServiceName) {\n return new Promise((resolve, reject) => {\n if (isUndefined(client)) {\n reject(false)\n return\n }\n if (damConfigDistributionCustomFormElements.value.has(distributionServiceName)) {\n resolve(true)\n return\n }\n fetchDistributionCustomFormElements(client, distributionServiceName)\n .then((res) => {\n damConfigDistributionCustomFormElements.value.set(distributionServiceName , res.data)\n resolve(true)\n return\n })\n .catch((error) => {\n reject(error)\n return\n })\n })\n }\n\n return {\n initialized,\n damPubConfig,\n damPrvConfig,\n damConfigExtSystem,\n damConfigAssetCustomFormElements,\n damConfigDistributionCustomFormElements,\n loadDamPrvConfig,\n loadDamPubConfig,\n loadDamConfigExtSystem,\n loadDamConfigAssetCustomFormElements,\n loadDamConfigDistributionCustomFormElements,\n isDamPubConfigLoaded,\n isDamPrvConfigLoaded,\n getDamConfigExtSystem,\n getDamConfigAssetCustomFormElements,\n }\n}\n","import type { AxiosInstance, AxiosResponse } from 'axios'\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { AssetDetailItemDto, AssetSearchListItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport { HTTP_STATUS_OK } from '@/composables/statusCodes'\nimport { isNull, isUndefined } from '@/utils/common'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport {\n AnzuApiValidationError,\n type AnzuApiValidationResponseData,\n axiosErrorResponseHasValidationData,\n type ValidationError,\n} from '@/model/error/AnzuApiValidationError'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\n\nconst END_POINT = '/adm/v1/asset'\nconst BULK_METADATA_LIMIT = 10\nexport const ENTITY = 'asset'\nexport const SYSTEM_CORE_DAM = 'coreDam'\nconst FETCH_BY_IDS_MAX_LIMIT = 25\n\nexport interface AssetMetadataBulkItem {\n id: DocId\n keywords: DocId[]\n authors: DocId[]\n described: boolean\n customData: AssetCustomData\n}\n\nexport declare type AssetCustomData = Record<string, any>;\n\nexport const fetchAssetList = (\n client: () => AxiosInstance,\n licenceId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) =>\n apiFetchList<AssetSearchListItemDto[]>(\n client,\n END_POINT + '/licence/:licenceId',\n { licenceId },\n pagination,\n filterBag,\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\nexport const fetchAsset = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<AssetDetailItemDto>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const fetchAssetByFileId = (client: () => AxiosInstance, assetFileId: DocId) =>\n apiFetchOne<AssetDetailItemDto>(client, END_POINT + '/asset-file/:id', { id: assetFileId }, SYSTEM_CORE_DAM, ENTITY)\n\nexport const bulkUpdateAssetsMetadata = (client: () => AxiosInstance, items: UploadQueueItem[]) => {\n return new Promise<AssetMetadataBulkItem[]>((resolve, reject) => {\n const bulkItems = listItemsToMetadataBulkItems(items)\n updateMetadataSequence(client, bulkItems)\n .then((responses) => {\n if (bulkItems.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n return reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const bulkItemsRes: AssetMetadataBulkItem[] = responses.flatMap(response => response.data)\n return resolve(bulkItemsRes)\n } else {\n return reject(responses)\n }\n })\n .catch((err) => {\n //\n return reject(err)\n })\n })\n}\n\nasync function fetchAssetListByIdsSequence(client: () => AxiosInstance, ids: DocId[], licenceId: number) {\n if (ids.length === 0) return Promise.resolve([])\n const totalCalls = Math.ceil(ids.length / FETCH_BY_IDS_MAX_LIMIT)\n const responses = []\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * FETCH_BY_IDS_MAX_LIMIT\n const reduced = ids.slice(offset, offset + FETCH_BY_IDS_MAX_LIMIT)\n const res = await client().get(END_POINT + `/licence/${licenceId}/ids/${reduced.join(',')}`)\n responses.push(res)\n }\n return responses\n}\n\nexport const fetchAssetListByIds: (\n client: () => AxiosInstance,\n ids: DocId[],\n licenceId: number\n) => Promise<AssetDetailItemDto[]> = (client: () => AxiosInstance, ids: DocId[], licenceId: number) => {\n return new Promise((resolve, reject) => {\n fetchAssetListByIdsSequence(client, ids, licenceId)\n .then((responses) => {\n if (ids.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const final = []\n for (let i = 0; i < responses.length; i++) {\n final.push(...responses[i].data.data)\n }\n resolve(final as AssetDetailItemDto[])\n } else {\n reject(responses)\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nasync function updateMetadataSequence(client: () => AxiosInstance, bulkItems: AssetMetadataBulkItem[]) {\n const totalCalls = Math.ceil(bulkItems.length / BULK_METADATA_LIMIT)\n const responses: AxiosResponse[] = []\n if (bulkItems.length === 0) return Promise.resolve([])\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * BULK_METADATA_LIMIT\n const reduced = bulkItems.slice(offset, offset + BULK_METADATA_LIMIT)\n const res = await client().patch(END_POINT + '/metadata-bulk-update', JSON.stringify(reduced))\n responses.push(res)\n }\n return responses\n}\n\nfunction listItemsToMetadataBulkItems (items: UploadQueueItem[]) {\n const dtoItems: AssetMetadataBulkItem[] = []\n items.forEach((item) => {\n if (!isNull(item.assetId) && item.canEditMetadata) {\n dtoItems.push({\n id: item.assetId,\n keywords: item.keywords,\n authors: item.authors,\n described: true,\n customData: item.customData,\n })\n }\n })\n\n return dtoItems\n}\n\nconst { showUnknownError, showApiValidationError } = useAlerts()\n\nconst handleMetadataValidationError = (error: any, assetType: DamAssetType, extSystem: IntegerId) => {\n const { getDamConfigAssetCustomFormElements } = useDamConfigState()\n const configAssetCustomFormElements = getDamConfigAssetCustomFormElements(extSystem)\n if (isUndefined(configAssetCustomFormElements)) {\n throw new Error('Custom form elements must be initialised.')\n }\n if (!error || !error.response || !error.response.data) return\n const data = error.response.data as AnzuApiValidationResponseData\n const items = [] as ValidationError[]\n for (const [key, values] of Object.entries(data.fields)) {\n const field = key.split('.').pop()\n const found = configAssetCustomFormElements[assetType].find((item) => item.property === field)\n if (found) {\n items.push({\n field: found.name,\n errors: values,\n })\n }\n }\n if (items.length) {\n showApiValidationError(items, -1, true)\n return\n }\n showUnknownError()\n}\n\nexport const updateAssetMetadata = (client: () => AxiosInstance, asset: AssetDetailItemDto, extSystem: IntegerId) => {\n return new Promise((resolve, reject) => {\n const data = {\n id: asset.id,\n keywords: asset.keywords,\n authors: asset.authors,\n described: true,\n customData: asset.metadata.customData,\n }\n client()\n .patch(END_POINT + '/metadata-bulk-update', JSON.stringify([data]))\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n handleMetadataValidationError(err, asset.attributes.assetType, extSystem)\n return reject(new AnzuApiValidationError(err, SYSTEM_CORE_DAM, ENTITY, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { useAssetListFilter } from '@/model/coreDam/filter/AssetFilter'\nimport { type AssetSelectListItem, useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { storeToRefs } from 'pinia'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { usePagination } from '@/composables/system/pagination'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { DocId } from '@/types/common'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { fetchAssetList as apiFetchAssetList } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport type { ImageWidgetSelectConfig } from '@/types/ImageAware'\n\nconst filter = useAssetListFilter()\nconst pagination = usePagination()\nconst filterIsTouched = ref(false)\n\nexport function useAssetSelectActions(configName = 'default') {\n const { damClient } = useCommonAdminCoreDamOptions(configName)\n\n const assetSelectStore = useAssetSelectStore()\n const { selectedCount, selectedAssets, assetListItems, loader } = storeToRefs(assetSelectStore)\n\n const { resetFilter } = useFilterHelpers()\n const { showErrorsDefault } = useAlerts()\n\n const fetchAssetList = async () => {\n pagination.page = 1\n try {\n assetSelectStore.showLoader()\n assetSelectStore.setList(\n await apiFetchAssetList(damClient, assetSelectStore.selectedLicenceId, pagination, filter)\n )\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n assetSelectStore.hideLoader()\n }\n }\n const fetchNextPage = async () => {\n pagination.page = pagination.page + 1\n try {\n assetSelectStore.showLoader()\n assetSelectStore.appendList(\n await apiFetchAssetList(damClient, assetSelectStore.selectedLicenceId, pagination, filter)\n )\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n assetSelectStore.hideLoader()\n }\n }\n\n const onItemClick = (data: { assetId: DocId; index: number }) => {\n assetSelectStore.toggleSelectedByIndex(data.index)\n }\n\n const resetAssetList = async () => {\n assetSelectStore.reset()\n filter.type.default = [assetSelectStore.assetType]\n resetFilter(filter, pagination, fetchAssetList)\n }\n\n const filterTouch = () => {\n filterIsTouched.value = true\n }\n const filterUnTouch = () => {\n filterIsTouched.value = false\n }\n\n const initStoreContext = (\n selectConfig: ImageWidgetSelectConfig[],\n assetType: DamAssetType,\n singleMode: boolean,\n minCount: number,\n maxCount: number\n ): void => {\n assetSelectStore.clearSelected()\n assetSelectStore.setAssetType(assetType)\n assetSelectStore.setSelectConfig(selectConfig)\n assetSelectStore.setSingleMode(singleMode)\n assetSelectStore.setMinCount(minCount)\n assetSelectStore.setMaxCount(maxCount)\n }\n\n return {\n filterIsTouched,\n filter,\n selectedCount,\n selectedAssets,\n pagination,\n loader,\n assetListItems: assetListItems as Ref<Array<AssetSelectListItem>>,\n getSelectedData: assetSelectStore.getSelectedData,\n onItemClick,\n fetchAssetList,\n fetchNextPage,\n resetAssetList,\n filterTouch,\n filterUnTouch,\n initStoreContext,\n }\n}\n","import { computed, type Ref } from 'vue'\nimport type { AssetSearchListItemDto } from '@/types/coreDam/Asset'\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\n\nconst IMAGE_HEIGHT = 200\nconst IMAGE_BG_COLOR_DEFAULT = '#ccc'\n\nexport function useAssetItemActions(item: Readonly<Ref<AssetSelectListItem>>) {\n const asset = computed<AssetSearchListItemDto>(() => {\n return item.value.asset\n })\n\n const assetType = computed(() => {\n return asset.value.attributes.assetType\n })\n\n const assetStatus = computed(() => {\n return asset.value.attributes.assetStatus\n })\n\n const imageProperties = computed(() => {\n if (asset.value.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_list) {\n return {\n url: asset.value.mainFile.links.image_list.url,\n width: asset.value.mainFile.links.image_list.width,\n height: asset.value.mainFile.links.image_list.height,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n }\n return {\n url: undefined,\n width: undefined,\n height: IMAGE_HEIGHT,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n })\n\n const tableImageProperties = computed(() => {\n if (asset.value.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_table) {\n return {\n url: asset.value.mainFile.links.image_table.url,\n width: asset.value.mainFile.links.image_table.width,\n height: asset.value.mainFile.links.image_table.height,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n }\n return {\n url: undefined,\n width: undefined,\n height: IMAGE_HEIGHT,\n bgColor: IMAGE_BG_COLOR_DEFAULT,\n }\n })\n\n return {\n asset,\n assetType,\n assetStatus,\n imageProperties,\n tableImageProperties,\n }\n}\n","export default \"data:image/jpeg;base64,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ADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANVAAAABgAAAAAAAAAAAAADhAAABkAAAAAQAHAAbABhAGMAZQBoAG8AbABkAGUAcgAtADEANgAtADkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAABkAAAAOEAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAOEAAAAAFJnaHRsb25nAAAGQAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAADhAAAAABSZ2h0bG9uZwAABkAAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxp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Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iMjc4M0ZDMUFGQTdBRThFREUyRDE3MjI5NTdCNEExQjAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGVlZDBlZGUtOGM3MC00OTljLWEyYjUtMzMwZmFmNWYxMjZmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9IjI3ODNGQzFBRkE3QUU4RURFMkQxNzIyOTU3QjRBMUIwIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHBob3Rvc2hvcDpMZWdhY3lJUFRDRGlnZXN0PSJDNzVEMTdFNTc0QjU2RUY1REJCRTM5OTRDMEU5Nzk1QyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IiIgeG1wOkNyZWF0ZURhdGU9IjIwMTctMDQtMjFUMTI6MTk6MTkrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChNYWNpbnRvc2gpIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDU2NTBiMjEtMjM4Zi00MGNjLTlkNGEtNDZiZTMyOWUzYWExIiBzdEV2dDp3aGVuPSIyMDE3LTA0LTIxVDEyOjE5OjU3KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGVlZDBlZGUtOGM3MC00OTljLWEyYjUtMzMwZmFmNWYxMjZmIiBzdEV2dDp3aGVuPSIyMDE3LTA0LTI2VDE0OjIzOjU0KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/uAA5BZG9iZQBkAAAAAAH/2wCEAAYEBAcFBwsGBgsOCggKDhEODg4OERYTExMTExYRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBwkJEwwTIhMTIhQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIA4QGQAMBEQACEQEDEQH/3QAEAMj/xAGiAAAABwEBAQEBAAAAAAAAAAAEBQMCBgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJzAQIDEQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYXVGR0w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUFBAUGBAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/2gAMAwEAAhEDEQA/AO4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1e4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1u4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq3xJ7Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFXcT4Yq7ifDFWsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/9HuGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KrJZViUvIeKKKknsMVYrqPm+SQlLEcE/nPU+4H7OKpNJqV1KavM5P+sf4Yqt+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKu+uT/AO/X/wCCOKu+uT/79f8A4I4q765P/v1/+COKu+uT/wC/X/4I4q765P8A79f/AII4q765P/v1/wDgjirvrk/+/X/4I4q765P/AL9f/gjirvrk/wDv1/8Agjirvrk/+/X/AOCOKu+uT/79f/gjirvrk/8Av1/+COKuF5cD/dr/APBHFUZaeYb22NBJzX+V9x/zVirK9H1qLUlIUcJV+0h/Wv8AMuKpjirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirEPNmqGab6nGfgj3b/Kb/mwYqkOKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVfBO1s6zREq6GoOKvQrC8W8gS4Xo43Hge4xVEYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/0+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWj2xV5tcyGWV5G6sxP44qsxVuONpGCICzHoB1xVX/AEbdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4q79G3X++ZP8AgTirv0bdf75k/wCBOKu/Rt1/vmT/AIE4qsltJoRyljZV8SKb4qo4q3irLfJkpa2kjJ2WTb6RirIMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/AP/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVaxV5o/2j8z+vFWsVR2gml9D/r4qz8HFW64q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4q6uKurirq4qkPnE/6Gv/GQfqOKsOGKt4qyryUP3U//ABkX9WKsjxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv//V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqRecf8AeNf+Mg/UcVYcOmKt4qyryV/cz/8AGRf1YqyPFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9buGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvM3+0fmf14q1iqO0L/e6H/XxVn4xV2KuxVw36Yql15r1naMVkkBYfsr8R/DFUJ/i6yHaT/gf7cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFXf4vsv+LP+BH9cVd/i+y/4s/4Ef1xV3+L7L/iz/gR/XFUt8wa9b6hbiGEPyDg/EKbCuKsfGKt4qnXlzWoNOSRZ+VXYEcRXoPniqb/AOL7L/iz/gR/XFXf4vsvCT/gf7cVXR+bbJjQl19yv9Diqa211FdLzgcOPbFVXFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//1+4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYq7FWH675ia4Zra2YrCNmYdWPen+TiqRAU6Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqvt7mW1cSwMUYeH8R3xVnOi6uupRVNFmSgdR/xIe2KpjirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//0O4Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8zf7R+Z/XirWKo7Qv97of9fFWfjFXYqlnmS8a1smKGjueCnwr1/wCFxVggFP4Yq3irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVR2h3htLyNx9ljwb5NtirPz1pirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHfOjEQwDsZG/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sVdirsVdirsVdirsVS3zDqP1G0ZlP7x/hX5nq3+xGKsDpireKuxV2KuxV2Ktd69D4+GKs+0LUfr9qsjf3q/A/wAx3/2WKphirsVdirsVccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWJecrgvcRwjoicvvxVj+KuxV2KuxV2KuxV2Ksh8mTH1ZYezKGH0bYqywYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq44qwrzcCL817op+6uKpPirsVdirsVdirsVdiqd+UP97Sewjav4YqzIYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FXYq7FXYq7FXYqsmmSFfUlIVQQKn3xVdXemKt4q7FXYq7FXYq7FXYq7FXYq7FXYqxbzrbHnFcDoQUJ+W64qxvFXYq7FXYq7FXYq7FWTeS7U/vbk9NkH62xVk9KbYq7FXYq7FXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7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nh+0vaux8a4qz/T76O+hWeLodiO4PcYqiMVdirsVdirsVdirsVdirsVdirsVdirsVS7Wdai01KP8Ux+yn8W/ycVYRd3kt5IZpzyc/cPliqlirKvJX9zP/wAZF/VirI8VccVYDr3+903+viqAxVtPtL8x+vFXpgxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYq7FXYq7FUq8xamLK2IU0mkqq+w/afFWDYq3irsVdirsVdirsVdirsVdirsVR+jaq2mzcxvE2zj2/m/2OKs7SZZVWSM8kcVB8cVX4q7FXYq7FXYq7FXYq7FXYq7FXYqk2u+YksAYIKNc/gvz/wAr/JxVhskryuZJCWdtyTiq3FXYqyryV/cz/wDGRf1YqyPFXHFWA69/vdN/r4qgMVbT7S/MfrxV6YMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV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sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYqgNa1EadbtMPtt8Ke5P/NOKsBJJJLGpJrirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVR+jaq+nTch8Ub7Ovt/MP8AKGKsi/xhZeEn3D+uKu/xhZeEn3f24qtl842oUmNHZ+wIoK++KsVu72a9kM1weTdvAey4qpYq7FXYq7FXYq7FXYq7FWVeSv7mf/jIv6sVZHirjirAde/3um/18VQGKtp9pfmP14q9MGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv//Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirzN/tH5n9eKtYqjtC/3uh/18VZ+MVdirHPOv9zB/xkb9WKsVxVpumKsx8m/7xt/xkP6hiqe4q7FXYqwTX9U+v3BK/wB1HVV9/wCZ/wDZYqluKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KtcRiruIxV1BireKuxV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3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxV3+Cp/9+x/ccVd/gqf/AH7H9xxV3+Cp/wDfsf3HFXf4Kn/37H9xxVr/AAVcf79T7jiq6PyVJX95MtPZTX8cVTjTfL9tYEOg5yD9tuv+xH7OKpnirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf//W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Q7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/R7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/S7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/T7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/U7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/V7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/W7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/X7hirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/Z\"","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport placeholder16x9 from '@/assets/image/placeholder16x9.jpg'\nimport { isUndefined } from '@/lib'\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n assetType?: DamAssetType\n assetStatus?: DamAssetStatus\n backgroundColor?: string\n width?: number\n height?: number\n fallbackHeight?: number\n iconSize?: number\n iconColor?: string\n }>(),\n {\n assetType: DamAssetType.Image,\n assetStatus: DamAssetStatus.WithFile,\n src: undefined,\n backgroundColor: '#ccc',\n width: undefined,\n height: undefined,\n fallbackHeight: 200,\n iconSize: 80,\n iconColor: '#505050',\n }\n)\nconst emit = defineEmits<{\n (e: 'error'): void\n}>()\n\nconst onError = () => {\n emit('error')\n}\n\nconst icon = computed(() => {\n if (props.assetStatus === DamAssetStatus.Deleting) return 'mdi-trash-can'\n switch (props.assetType) {\n case DamAssetType.Audio:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-music' : 'mdi-music-off'\n case DamAssetType.Document:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-note' : 'mdi-note-off'\n case DamAssetType.Video:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-video' : 'mdi-video-off'\n case DamAssetType.Image:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-image' : 'mdi-image-off'\n default:\n return ''\n }\n})\n\nconst srcComputed = computed(() => {\n return isUndefined(props.src) ? placeholder16x9 : props.src\n})\n\nconst showIconComputed = computed(() => {\n if (props.assetType === DamAssetType.Image && props.src) return false\n return true\n})\n</script>\n\n<template>\n <div\n v-if=\"assetStatus === DamAssetStatus.WithFile && src\"\n class=\"anzu-common-asset-image anzu-common-asset-image--img position-relative\"\n :style=\"{ width: width + 'px' }\"\n >\n <img\n class=\"anzu-common-asset-image__img\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n alt=\"\"\n :style=\"'background-color:' + backgroundColor\"\n @onerror=\"onError\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"anzu-common-asset-image__icon-wrapper\"\n >\n <div\n class=\"anzu-common-asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"anzu-common-asset-image__icon\"\n />\n </div>\n </div>\n </div>\n <div\n v-else\n :style=\"{ height: fallbackHeight + 'px', backgroundColor: backgroundColor }\"\n style=\"width: 100%\"\n class=\"asset-image asset-image--placeholder d-flex align-center justify-center\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.anzu-common-asset-image {\n position: relative;\n\n &__icon-wrapper {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__icon-circle {\n border-radius: 100%;\n background-color: rgba(204 204 204 / 50%);\n }\n}\n</style>\n","export const prettyBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) {\n return '0 Bytes'\n }\n\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]\n}\n","<script lang=\"ts\" setup>\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\nimport { useI18n } from 'vue-i18n'\nimport { useAssetItemActions } from '@/components/dam/assetSelect/composables/assetSelectItemActions'\nimport AssetImagePreview from '@/components/dam/assetSelect/components/AssetImagePreview.vue'\nimport type { DocId } from '@/types/common'\nimport { prettyBytes } from '@/utils/file'\nimport ADatetime from '@/components/ADatetime.vue'\nimport { toRef } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n item: AssetSelectListItem\n showMetaIcons?: boolean\n }>(),\n {\n showMetaIcons: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'itemClick', data: { assetId: DocId; index: number }): void\n}>()\n\nconst { t } = useI18n()\n\nconst IMAGE_HEIGHT = 72\nconst IMAGE_WIDTH = 128\n\nconst item = toRef(props, 'item')\n\nconst { asset, tableImageProperties, assetType, assetStatus } = useAssetItemActions(item)\n\nconst onItemClick = () => {\n emit('itemClick', { assetId: asset.value.id, index: props.index })\n}\n</script>\n\n<template>\n <tr\n class=\"a-datatable__row\"\n :class=\"{ 'a-datatable__row--selected': item.selected }\"\n @click.stop.exact=\"onItemClick\"\n >\n <td>\n <VIcon\n v-if=\"item.selected\"\n icon=\"mdi-checkbox-outline\"\n :size=\"20\"\n />\n <VIcon\n v-else\n icon=\"mdi-checkbox-blank-outline\"\n :size=\"20\"\n />\n </td>\n <td>\n <AssetImagePreview\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"tableImageProperties.url\"\n :background-color=\"tableImageProperties.bgColor\"\n :width=\"IMAGE_WIDTH\"\n :height=\"IMAGE_HEIGHT\"\n :icon-size=\"20\"\n :fallback-height=\"IMAGE_HEIGHT\"\n />\n </td>\n <td>\n {{ asset.texts.displayTitle || t('commonCoreDam.asset.list.noTitle') }}\n </td>\n <td>\n <ADatetime :date-time=\"asset.createdAt\" />\n </td>\n <td>\n {{ asset.mainFile?.fileAttributes.mimeType }}\n </td>\n <td>\n {{ prettyBytes(asset.mainFile?.fileAttributes.size || 0) }}\n </td>\n </tr>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AssetSelectTableRowItem from '@/components/dam/assetSelect/components/AssetSelectTableRowItem.vue'\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\n\nconst { t } = useI18n()\n\nconst { onItemClick, assetListItems, loader } = useAssetSelectActions()\n</script>\n\n<template>\n <VTable\n class=\"a-datatable a-datatable--dialog-sticky-fix\"\n fixed-header\n >\n <thead>\n <tr>\n <th class=\"text-left\" />\n <th class=\"text-left\">\n {{ t('common.assetSelect.meta.table.image') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.texts.displayTitle') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.model.tracking.created') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.mainFile.fileAttributes.mimeType') }}\n </th>\n <th class=\"text-left\">\n {{ t('common.assetSelect.model.mainFile.fileAttributes.size') }}\n </th>\n </tr>\n </thead>\n <tbody>\n <AssetSelectTableRowItem\n v-for=\"(item, index) in assetListItems\"\n :key=\"item.asset.id\"\n :index=\"index\"\n :item=\"item\"\n @item-click=\"onItemClick\"\n />\n <tr v-if=\"!loader && assetListItems.length === 0\">\n <td\n colspan=\"6\"\n class=\"text-center\"\n >\n {{ t('common.assetSelect.meta.texts.noItemsFound') }}\n </td>\n </tr>\n </tbody>\n </VTable>\n</template>\n","import { readonly, ref } from 'vue'\n\nexport enum AssetSelectGridView {\n Masonry = 'masonry',\n Thumbnail = 'thumbnail',\n Table = 'table',\n Default = Masonry,\n}\n\nconst gridView = ref<AssetSelectGridView>(AssetSelectGridView.Default)\n\nexport function useGridView() {\n const setGridView = (value: AssetSelectGridView) => {\n gridView.value = value\n }\n\n return {\n gridView: readonly(gridView),\n setGridView,\n }\n}\n","import { ref } from 'vue'\n\nconst sidebarLeft = ref(false)\n\nexport function useSidebar() {\n const toggleSidebar = () => {\n sidebarLeft.value ? closeSidebar() : openSidebar()\n }\n\n const openSidebar = () => {\n sidebarLeft.value = true\n }\n\n const closeSidebar = () => {\n sidebarLeft.value = false\n }\n\n return {\n sidebarLeft,\n toggleSidebar,\n openSidebar,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { AssetSelectGridView, useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\n\nconst { t } = useI18n()\nconst { setGridView } = useGridView()\nconst { toggleSidebar } = useSidebar()\n</script>\n\n<template>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n @click=\"toggleSidebar\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n <VBtn\n size=\"x-small\"\n icon\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Masonry)\"\n >\n <VIcon icon=\"mdi-view-compact\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.masonry') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Thumbnail)\"\n >\n <VIcon icon=\"mdi-view-grid\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.thumbnail') }}\n </VTooltip>\n </VBtn>\n <VBtn\n size=\"x-small\"\n icon\n variant=\"text\"\n @click.stop=\"setGridView(AssetSelectGridView.Table)\"\n >\n <VIcon icon=\"mdi-view-headline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.assetSelect.meta.grid.table') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport type { AssetSelectListItem } from '@/services/stores/coreDam/assetSelectStore'\nimport { useAssetItemActions } from '@/components/dam/assetSelect/composables/assetSelectItemActions'\nimport AssetImagePreview from '@/components/dam/assetSelect/components/AssetImagePreview.vue'\nimport type { DocId } from '@/types/common'\nimport { toRef } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n item: AssetSelectListItem\n showMetaIcons?: boolean\n }>(),\n {\n showMetaIcons: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'itemClick', data: { assetId: DocId; index: number }): void\n}>()\n\nconst { t } = useI18n()\n\nconst IMAGE_HEIGHT = 200\n\nconst onItemClick = () => {\n emit('itemClick', { assetId: asset.value.id, index: props.index })\n}\n\nconst item = toRef(props, 'item')\n\nconst { asset, assetType, assetStatus, imageProperties } = useAssetItemActions(item)\n</script>\n\n<template>\n <div\n class=\"asset-list-tiles__item asset-list-tiles__item--pointer\"\n :class=\"{ 'asset-list-tiles__item--selected': item.selected }\"\n @click.stop.exact=\"onItemClick\"\n >\n <div class=\"asset-list-tiles__item-card\">\n <div\n v-if=\"item.selected\"\n class=\"asset-list-tiles__selected-triangle\"\n >\n <div class=\"asset-list-tiles__selected-triangle__bg\" />\n <VIcon\n class=\"asset-list-tiles__selected-triangle__icon\"\n icon=\"mdi-check\"\n color=\"white\"\n size=\"x-small\"\n />\n </div>\n <AssetImagePreview\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n :fallback-height=\"IMAGE_HEIGHT\"\n :asset-file-properties=\"item.asset.assetFileProperties\"\n :show-meta-icons=\"showMetaIcons\"\n />\n <div class=\"asset-list-tiles__item-text text-caption px-2 py-1\">\n <div class=\"d-flex align-center justify-space-between position-relative\">\n <div class=\"line-clamp-1\">\n {{ asset.texts.displayTitle || t('commonCoreDam.asset.list.noTitle') }}\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetSelectTilesItem from '@/components/dam/assetSelect/components/AssetSelectTilesItem.vue'\nimport { useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport { useI18n } from 'vue-i18n'\n\nconst { gridView } = useGridView()\nconst { onItemClick, assetListItems, loader } = useAssetSelectActions()\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n class=\"asset-list-tiles\"\n :class=\"'asset-list-tiles--' + gridView\"\n >\n <AssetSelectTilesItem\n v-for=\"(item, index) in assetListItems\"\n :key=\"item.asset.id\"\n :index=\"index\"\n :item=\"item\"\n @item-click=\"onItemClick\"\n />\n </div>\n <div\n v-if=\"!loader && assetListItems.length === 0\"\n class=\"text-h6 text-medium-emphasis d-flex w-100 h-100 align-center justify-center\"\n >\n {{ t('common.assetSelect.meta.texts.noItemsFound') }}\n </div>\n</template>\n\n<style lang=\"scss\">\n// css similar to '.dam-image-grid' in admin-dam, for now renamed here to new class to avoid conflicts\n// consider refactor later according how much different both versions will be\n\n$class-name-root: 'asset-list-tiles';\n$bg-color-light: #f9f9f9;\n$bg-color-dark: #1e1e1e;\n$border-color-light: #e8e9ea;\n$border-color-dark: #2c2c2c;\n$shadow-color-light: #959595;\n$shadow-color-dark: #3d3d3d;\n$bg-color-actions-light: #fff;\n$bg-color-actions-dark: #1a1a1a;\n\n.#{$class-name-root} {\n display: flex;\n flex-wrap: wrap;\n max-width: 100%;\n padding: 2px;\n\n &__item {\n user-select: none;\n flex-grow: 2;\n max-width: 800px;\n padding: 10px;\n position: relative;\n overflow: hidden;\n min-width: 200px;\n\n &-card {\n border-radius: 5px;\n overflow: hidden;\n\n img.anzu-common-asset-image__img {\n display: block;\n height: 200px;\n min-width: 100%;\n object-fit: cover;\n width: 100%;\n }\n\n &:hover {\n .#{$class-name-root}__item-card-actions {\n display: block;\n }\n }\n\n &-actions {\n border-radius: 4px;\n position: absolute;\n top: -2px;\n right: -5px;\n display: none;\n overflow: hidden;\n }\n }\n\n &-text,\n &-text .line-clamp-1 {\n font-weight: 500;\n line-height: 30px;\n min-height: 38px;\n max-height: 38px;\n }\n\n &--pointer {\n cursor: pointer;\n }\n }\n\n &--thumbnail {\n display: grid;\n grid-template-columns: repeat(6, auto);\n\n .#{$class-name-root}__item {\n img:not(.img-svg) {\n object-fit: contain;\n padding-left: 6px;\n padding-right: 6px;\n padding-top: 6px;\n background-color: transparent !important;\n }\n }\n }\n\n .#{$class-name-root}__selected-triangle {\n position: absolute;\n top: 11px;\n right: 11px;\n z-index: 1;\n\n &__bg {\n content: '';\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 30px 30px 0;\n border-color: transparent #608a32 transparent transparent;\n top: 0;\n right: 0;\n position: absolute;\n }\n\n &__icon {\n position: absolute;\n display: block;\n width: 16px;\n height: 16px;\n top: -3px;\n right: 0;\n }\n }\n}\n\n.v-theme--light {\n .#{$class-name-root} {\n &__item {\n &-card {\n background-color: $bg-color-light;\n border: 1px solid $border-color-light;\n\n &:hover {\n box-shadow: 0 0 3px 1px $shadow-color-light;\n }\n\n &-actions {\n background-color: $bg-color-actions-light;\n }\n }\n\n &--selected {\n .#{$class-name-root}__item-card {\n border-color: #608a32;\n }\n }\n\n &--active {\n .#{$class-name-root}__item-card {\n border-color: blue;\n }\n }\n }\n }\n}\n\n.v-theme--dark {\n .#{$class-name-root} {\n &__item {\n &-card {\n background-color: $bg-color-dark;\n border: 1px solid $border-color-dark;\n\n &:hover {\n box-shadow: 0 0 3px 1px $shadow-color-dark;\n }\n\n &-actions {\n background-color: $bg-color-actions-dark;\n }\n }\n\n &--selected {\n .#{$class-name-root}__item-card {\n border-color: #608a32;\n }\n }\n\n &--active {\n .#{$class-name-root}__item-card {\n border-color: blue;\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AFilterString from '@/components/filter/AFilterString.vue'\nimport AFilterBooleanSelect from '@/components/filter/AFilterBooleanSelect.vue'\n\nconst { filter, filterTouch, filterUnTouch, fetchAssetList } = useAssetSelectActions()\n\nconst onAnyFilterUpdate = () => {\n filterTouch()\n}\n\nconst submitFilter = () => {\n filterUnTouch()\n fetchAssetList()\n}\n</script>\n\n<template>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterString\n v-model=\"filter.text\"\n @update:model-value=\"onAnyFilterUpdate\"\n @keydown.enter=\"submitFilter\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterBooleanSelect\n v-model=\"filter.described\"\n @update:model-value=\"onAnyFilterUpdate\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterBooleanSelect\n v-model=\"filter.visible\"\n @update:model-value=\"onAnyFilterUpdate\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFilterBooleanSelect\n v-model=\"filter.generatedBySystem\"\n @update:model-value=\"onAnyFilterUpdate\"\n />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AFilterString from '@/components/filter/AFilterString.vue'\n\nconst { filter, fetchAssetList, filterTouch, filterUnTouch } = useAssetSelectActions()\n\nconst submitFilter = () => {\n filterUnTouch()\n fetchAssetList()\n}\n\nconst onAnyFilterUpdate = () => {\n filterTouch()\n}\n</script>\n\n<template>\n <VRow>\n <VCol :cols=\"12\">\n <AFilterString\n v-model=\"filter.text\"\n @update:model-value=\"onAnyFilterUpdate\"\n @keydown.enter=\"submitFilter\"\n />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport { computed, watch } from 'vue'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { DamAssetType as AssetTypeValue } from '@/types/coreDam/Asset'\nimport AssetSelectFilterFormImage from '@/components/dam/assetSelect/components/filter/AssetSelectFilterFormImage.vue'\nimport AssetSelectFilterFormDefault from '@/components/dam/assetSelect/components/filter/AssetSelectFilterFormDefault.vue'\nimport { storeToRefs } from 'pinia'\n\nconst { t } = useI18n()\nconst { fetchAssetList, resetAssetList, filterUnTouch, filterIsTouched } = useAssetSelectActions()\n\nconst assetSelectStore = useAssetSelectStore()\nconst { selectedLicenceId, selectConfig } = storeToRefs(assetSelectStore)\n\nconst submitFilter = () => {\n filterUnTouch()\n fetchAssetList()\n}\n\nconst resetFilter = () => {\n resetAssetList()\n filterUnTouch()\n}\n\nconst componentComputed = computed(() => {\n switch (assetSelectStore.assetType) {\n case AssetTypeValue.Image:\n return AssetSelectFilterFormImage\n default:\n return AssetSelectFilterFormDefault\n }\n})\n\nwatch(\n selectedLicenceId,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n submitFilter()\n },\n { immediate: false }\n)\n</script>\n\n<template>\n <div class=\"subject-select-filter\">\n <div class=\"subject-select-filter__content\">\n <VForm\n name=\"search2\"\n class=\"px-2 pt-4\"\n @submit.prevent=\"submitFilter\"\n >\n <VRow v-if=\"selectConfig.length > 1\">\n <VCol :cols=\"12\">\n <VSelect\n v-model=\"selectedLicenceId\"\n :label=\"t('common.assetSelect.filter.licence')\"\n :items=\"selectConfig\"\n item-title=\"title\"\n item-value=\"licence\"\n />\n </VCol>\n </VRow>\n <Component :is=\"componentComputed\" />\n </VForm>\n </div>\n <div class=\"subject-select-filter__actions\">\n <VBtn\n color=\"primary\"\n class=\"mx-2\"\n :variant=\"filterIsTouched ? 'flat' : 'text'\"\n size=\"small\"\n @click.stop=\"submitFilter\"\n >\n {{ t('common.button.submitFilter') }}\n </VBtn>\n <VBtn\n class=\"px-2\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n size=\"small\"\n @click.stop=\"resetFilter\"\n >\n <VIcon icon=\"mdi-filter-remove-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.resetFilter') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n</template>\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { DamCurrentUserDto } from '@/types/coreDam/DamCurrentUser'\n\nconst END_POINT = '/adm/v1/user/current'\n\nexport const fetchDamCurrentUser = (client: () => AxiosInstance) =>\n apiFetchOne<DamCurrentUserDto>(client, END_POINT, {}, 'coreDam', 'user')\n","import { ref } from 'vue'\nimport type { DamCurrentUserDto } from '@/types/coreDam/DamCurrentUser'\nimport { fetchDamCurrentUser } from '@/components/damImage/uploadQueue/api/damCurrentUserApi'\nimport { ROLE_SUPER_ADMIN } from '@/composables/system/ability'\nimport type { AxiosInstance } from 'axios'\n\nexport const damCurrentUser = ref<DamCurrentUserDto | undefined>(undefined)\nexport const damCurrentUserIsSuperAdmin = ref(false)\n\nexport function updateDamCurrentUser(client: () => AxiosInstance) {\n return new Promise((resolve, reject) => {\n fetchDamCurrentUser(client)\n .then((res: DamCurrentUserDto) => {\n damCurrentUser.value = res\n if (res.roles.includes(ROLE_SUPER_ADMIN)) {\n damCurrentUserIsSuperAdmin.value = true\n }\n resolve(damCurrentUser)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport function useDamCurrentUser() {\n return {\n damCurrentUser,\n damCurrentUserIsSuperAdmin,\n }\n}\n","import { useDamCurrentUser } from '@/components/damImage/composables/damCurrentUser'\nimport type { ImageWidgetSelectConfig, ImageWidgetUploadConfig } from '@/types/ImageAware'\nimport { cloneDeep, isUndefined } from '@/utils/common'\n\nexport function filterAllowedImageWidgetSelectConfigs(values: ImageWidgetSelectConfig[]) {\n const { damCurrentUser, damCurrentUserIsSuperAdmin } = useDamCurrentUser()\n if (damCurrentUserIsSuperAdmin.value) return cloneDeep(values)\n const currentUser = damCurrentUser.value\n if (isUndefined(currentUser)) return []\n\n const adminToExtSystems = currentUser.adminToExtSystems.map((extSystemValue) => extSystemValue.id)\n const assetLicences = currentUser.assetLicences.map((assetLicenceValue) => assetLicenceValue.id)\n const allowed: ImageWidgetSelectConfig[] = []\n values.forEach((value) => {\n if (adminToExtSystems.includes(value.extSystem)) {\n allowed.push(value)\n return\n }\n if (assetLicences.includes(value.licence)) {\n allowed.push(value)\n }\n })\n return allowed\n}\n\nexport function isImageWidgetUploadConfigAllowed(value: ImageWidgetUploadConfig) {\n const { damCurrentUser, damCurrentUserIsSuperAdmin } = useDamCurrentUser()\n if (damCurrentUserIsSuperAdmin.value) return true\n\n const currentUser = damCurrentUser.value\n if (isUndefined(currentUser)) return []\n\n const adminToExtSystems = currentUser.adminToExtSystems.map((extSystemValue) => extSystemValue.id)\n if (adminToExtSystems.includes(value.extSystem)) {\n return true\n }\n\n const assetLicences = currentUser.assetLicences.map((assetLicenceValue) => assetLicenceValue.id)\n if (assetLicences.includes(value.licence)) {\n return true\n }\n\n return false\n}\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch, withModifiers } from 'vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DamAssetType, DamAssetTypeValues } from '@/types/coreDam/Asset'\nimport { damAssetTypeValueToEnum } from '@/types/coreDam/Asset'\nimport { useAssetSelectActions } from '@/components/dam/assetSelect/composables/assetSelectListActions'\nimport AssetSelectListTable from '@/components/dam/assetSelect/components/AssetSelectListTable.vue'\nimport AssetSelectListBar from '@/components/dam/assetSelect/components/AssetSelectListBar.vue'\nimport { AssetSelectGridView, useGridView } from '@/components/dam/assetSelect/composables/assetSelectGridView'\nimport AssetSelectListTiles from '@/components/dam/assetSelect/components/AssetSelectListTiles.vue'\nimport { useSidebar } from '@/components/dam/assetSelect/composables/assetSelectFilterSidebar'\nimport AssetSelectFilter from '@/components/dam/assetSelect/components/filter/AssetSelectFilter.vue'\nimport { isUndefined } from '@/utils/common'\nimport type {\n AssetSelectReturnData,\n AssetSelectReturnType,\n AssetSelectReturnTypeValues,\n} from '@/types/coreDam/AssetSelect'\nimport { assetSelectReturnTypeValuesToEnum } from '@/types/coreDam/AssetSelect'\nimport type { ImageWidgetSelectConfig } from '@/types/ImageAware'\nimport {\n filterAllowedImageWidgetSelectConfigs\n} from '@/components/damImage/composables/damFilterUserAllowedUploadConfigs'\nimport { useAlerts } from '@/composables/system/alerts'\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean | undefined\n assetType: DamAssetType | DamAssetTypeValues\n minCount: number\n maxCount: number\n selectConfig: ImageWidgetSelectConfig[]\n returnType?: AssetSelectReturnType | AssetSelectReturnTypeValues\n configName?: string\n skipCurrentUserCheck?: boolean\n }>(),\n {\n modelValue: undefined,\n returnType: 'mainFileId',\n configName: 'default',\n skipCurrentUserCheck: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'onConfirm', data: AssetSelectReturnData): void\n}>()\n\nconst { t } = useI18n()\n\nconst dialogLocal = ref(false)\nconst dialog = computed({\n get() {\n if (isUndefined(props.modelValue)) return dialogLocal.value\n return props.modelValue\n },\n set(newValue: boolean) {\n dialogLocal.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst { selectedCount, loader, pagination, fetchNextPage, resetAssetList, getSelectedData, initStoreContext } =\n useAssetSelectActions()\n\nconst { openSidebar, sidebarLeft } = useSidebar()\nconst { showErrorT } = useAlerts()\n\nconst onOpen = () => {\n let selectConfigLocal = props.selectConfig\n if (!props.skipCurrentUserCheck) {\n selectConfigLocal = filterAllowedImageWidgetSelectConfigs(props.selectConfig)\n }\n if (selectConfigLocal.length === 0) {\n showErrorT('common.assetSelect.error.unallowedLicence')\n return\n }\n\n initStoreContext(\n selectConfigLocal,\n damAssetTypeValueToEnum(props.assetType),\n 1 === props.minCount && props.minCount === props.maxCount,\n props.minCount,\n props.maxCount\n )\n resetAssetList()\n openSidebar()\n dialog.value = true\n}\n\nwatch(\n dialog,\n async (newValue, oldValue) => {\n if (newValue === oldValue || !newValue) return\n onOpen()\n },\n { immediate: true }\n)\n\nconst onClose = () => {\n dialog.value = false\n}\n\nconst onConfirm = () => {\n emit('onConfirm', getSelectedData(assetSelectReturnTypeValuesToEnum(props.returnType)))\n onClose()\n}\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && pagination.hasNextPage === true) {\n fetchNextPage()\n }\n}\n\nconst { gridView } = useGridView()\n\nconst componentComputed = computed(() => {\n switch (gridView.value) {\n case AssetSelectGridView.Table:\n return AssetSelectListTable\n default:\n case AssetSelectGridView.Masonry:\n case AssetSelectGridView.Thumbnail:\n return AssetSelectListTiles\n }\n})\n\nconst disabledSubmit = computed(() => {\n return selectedCount.value < props.minCount || selectedCount.value > props.maxCount\n})\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n :model-value=\"dialog\"\n fullscreen\n class=\"subject-select\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"dialog\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t('common.assetSelect.meta.texts.title') }}\n </slot>\n </ADialogToolbar>\n <AssetSelectListBar />\n <div\n class=\"subject-select__main\"\n :class=\"{ 'subject-select__main--sidebar-active': sidebarLeft }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <AssetSelectFilter />\n </div>\n <div class=\"subject-select__content\">\n <component :is=\"componentComputed\" />\n <div class=\"d-flex w-100 align-center justify-center pa-4\">\n <ABtnSecondary\n v-show=\"pagination.hasNextPage || loader\"\n v-intersect=\"autoloadOnIntersect\"\n :loading=\"loader\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"props.minCount === props.maxCount\">\n {{ t('common.assetSelect.meta.texts.pickExactCount', { count: props.minCount, selected: selectedCount }) }}\n </div>\n <div v-else>\n {{\n t('common.assetSelect.meta.texts.pickRangeCount', {\n minCount: props.minCount,\n maxCount: props.maxCount,\n selected: selectedCount,\n })\n }}\n </div>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n","/**!\n * Sortable 1.15.1\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.1\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Returns the content rect of the element (bounding rect minus border and padding)\r\n * @param {HTMLElement} el \r\n */\nfunction getContentRect(el) {\n var rect = getRect(el);\n var paddingLeft = parseInt(css(el, 'padding-left')),\n paddingTop = parseInt(css(el, 'padding-top')),\n paddingRight = parseInt(css(el, 'padding-right')),\n paddingBottom = parseInt(css(el, 'padding-bottom'));\n rect.top += paddingTop + parseInt(css(el, 'border-top-width'));\n rect.left += paddingLeft + parseInt(css(el, 'border-left-width'));\n // Client Width/Height includes padding only\n rect.width = el.clientWidth - paddingLeft - paddingRight;\n rect.height = el.clientHeight - paddingTop - paddingBottom;\n rect.bottom = rect.top + rect.height;\n rect.right = rect.left + rect.width;\n return rect;\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = parent.parentNode);\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var sortableContentRect = getContentRect(sortable.el);\n var spacer = 10;\n return vertical ? evt.clientX < sortableContentRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < sortableContentRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var sortableContentRect = getContentRect(sortable.el);\n var spacer = 10;\n return vertical ? evt.clientX > sortableContentRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > sortableContentRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import { tryOnMounted, tryOnScopeDispose, toValue, unrefElement, defaultDocument } from '@vueuse/core';\nimport Sortable from 'sortablejs';\nimport { isRef, nextTick } from 'vue-demi';\n\nfunction useSortable(el, list, options = {}) {\n let sortable;\n const { document = defaultDocument, ...resetOptions } = options;\n const defaultOptions = {\n onUpdate: (e) => {\n moveArrayElement(list, e.oldIndex, e.newIndex);\n }\n };\n const start = () => {\n const target = typeof el === \"string\" ? document == null ? void 0 : document.querySelector(el) : unrefElement(el);\n if (!target || sortable !== void 0)\n return;\n sortable = new Sortable(target, { ...defaultOptions, ...resetOptions });\n };\n const stop = () => {\n sortable == null ? void 0 : sortable.destroy();\n sortable = void 0;\n };\n const option = (name, value) => {\n if (value !== void 0)\n sortable == null ? void 0 : sortable.option(name, value);\n else\n return sortable == null ? void 0 : sortable.option(name);\n };\n tryOnMounted(start);\n tryOnScopeDispose(stop);\n return { stop, start, option };\n}\nfunction moveArrayElement(list, from, to) {\n const _valueIsRef = isRef(list);\n const array = _valueIsRef ? [...toValue(list)] : toValue(list);\n if (to >= 0 && to < array.length) {\n const element = array.splice(from, 1)[0];\n nextTick(() => {\n array.splice(to, 0, element);\n if (_valueIsRef)\n list.value = array;\n });\n }\n}\n\nexport { moveArrayElement, useSortable };\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || unsafeStringify(b);\n}\n\nexport default v1;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","// @ts-ignore // todo\nimport { v1 as uuidv1, v4 as uuidv4 } from 'uuid'\n\nexport const generateUUIDv1 = () => {\n return uuidv1()\n}\n\nexport const generateUUIDv4 = () => {\n return uuidv4()\n}\n","import { computed, type ComputedRef, nextTick, type Ref, ref } from 'vue'\nimport type { UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableItemDataAware, SortableItemNewPositions } from '@/components/sortable/sortableUtils'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { objectSetValueByPath } from '@/utils/object'\n\nexport const HANDLE_CLASS = 'a-sortable-widget__handle'\nexport const GHOST_CLASS = 'a-sortable-widget__ghost'\nexport const DRAG_CLASS = 'a-sortable-widget__drag'\nexport const CHOSEN_CLASS = 'a-sortable-widget__chosen'\nexport const GROUP_CLASS = 'a-sortable-widget__group'\n\nexport type SortablePropItem<TItem = any> = SortableItemDataAware & TItem\n\nexport interface SortableItem<TItem = any> {\n key: DocId | IntegerId\n index: number\n raw: SortablePropItem<TItem>\n}\n\nexport interface SortableEmit {\n (e: 'update:modelValue', data: SortablePropItem[]): void\n\n (e: 'update:dirty', data: Array<DocId | IntegerId>): void\n\n (e: 'onEnd', data: SortableItemNewPositions): void\n\n (e: 'onAddAfter', data: SortableItem): void\n\n (e: 'onAddLast', data: SortablePropItem | null): void\n\n (e: 'onEdit', data: SortableItem): void\n\n (e: 'onDelete', data: SortableItem): void\n}\n\nexport interface SortableActionsProps {\n dirty: Set<DocId | IntegerId>\n keyField: string\n positionField: string\n updatePosition: boolean\n}\n\nexport function useSortableActions(\n model: Readonly<Ref<SortablePropItem[]>>,\n initSortableCallback: () => void,\n props: SortableActionsProps,\n emit: SortableEmit\n): {\n removeByIndex: (index: number) => SortableItemNewPositions\n updateDataAtIndex: (index: number, data: SortablePropItem, position: number | null, dirty?: boolean | null) => void\n onRemoveDialogConfirm: () => void\n removeById: (id: DocId | IntegerId) => SortableItemNewPositions\n updateData: (id: DocId | IntegerId, data: SortablePropItem, position: number | null, dirty?: boolean | null) => void\n refresh: () => void\n destroy: () => void\n removeDialog: Ref<boolean>\n addAfterId: (targetId: DocId | IntegerId | null, data: SortablePropItem) => SortableItemNewPositions\n forceRerender: Ref<number>\n dirtyLocal: Ref<Set<DocId | IntegerId>>\n widgetEl: Ref<HTMLElement | null>\n itemToRemove: Ref<SortableItem | null>\n sortableInstance: Ref<UseSortableReturn | null>\n randomUuid: Ref<string>\n items: ComputedRef<SortableItem[]>\n moveArrayElement: (from: number, to: number) => SortableItemNewPositions\n addAfterIndex: (targetIndex: number | null, data: SortablePropItem) => SortableItemNewPositions\n} {\n const removeDialog = ref(false)\n const itemToRemove = ref<null | SortableItem>(null)\n const widgetEl = ref<HTMLElement | null>(null)\n const randomUuid = ref<string>(generateUUIDv1())\n const sortableInstance = ref<UseSortableReturn | null>(null)\n const forceRerender = ref(0)\n const dirtyLocal = ref(props.dirty)\n\n function transformItem(item: SortablePropItem, index: number): SortableItem {\n return {\n key: item[props.keyField],\n index,\n raw: item,\n }\n }\n\n const items = computed(() => {\n return model.value.map((item, index) => transformItem(item, index))\n })\n\n const forceRerenderWidgetHtml = (emitData: SortablePropItem[] | undefined = undefined) => {\n forceRerender.value++\n if (!isUndefined(emitData)) {\n emit('update:modelValue', emitData)\n }\n nextTick(() => {\n initSortableCallback()\n })\n }\n\n const touchDirty = (id: DocId | IntegerId) => {\n dirtyLocal.value.add(id)\n }\n\n const untouchDirty = (id: DocId | IntegerId) => {\n dirtyLocal.value.delete(id)\n }\n\n const updatePositions = (\n items: SortablePropItem[],\n oldIndex: number,\n newIndex: number,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n const start = oldIndex > newIndex ? newIndex : oldIndex\n let position = start + 1\n for (let i = start; i < items.length; i++) {\n objectSetValueByPath(items[i], props.positionField, position)\n touchDirty(items[i][props.keyField])\n position++\n updatedPositions.push({\n id: items[i].id,\n position: items[i].position,\n })\n }\n return updatedPositions\n }\n\n const moveArrayElement = (from: number, to: number): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n if (to >= 0 && to < clonedData.length) {\n let returnData: SortableItemNewPositions = []\n const element = clonedData.splice(from, 1)[0]\n clonedData.splice(to, 0, element)\n if (!isUndefined(props.updatePosition)) {\n returnData = updatePositions(clonedData, from, to)\n }\n forceRerenderWidgetHtml()\n emit('update:modelValue', clonedData)\n return returnData\n }\n return []\n }\n\n const findItemIndexById = (id: DocId | IntegerId, items: SortablePropItem[]) => {\n const idx = items.findIndex((item) => item[props.keyField] === id)\n if (idx === -1) return null\n return idx\n }\n\n const updateDataCommon = (\n item: SortablePropItem,\n data: SortablePropItem,\n position: number | null,\n dirty: null | boolean = null\n ) => {\n item.data = cloneDeep(data)\n if (!isNull(position)) item.data.position = position\n if (!isNull(dirty)) touchDirty(data.id)\n }\n\n /**\n * @param id - id of item\n * @param data - item data\n * @param position - item position, use null to skip update and keep original data\n * @param dirty - item dirty, use null to skip update and keep original data\n */\n const updateData = (\n id: DocId | IntegerId,\n data: SortablePropItem,\n position: number | null = null,\n dirty: null | boolean = null\n ) => {\n const clonedData = cloneDeep(model.value)\n const foundIndex = findItemIndexById(id, clonedData)\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n updateDataCommon(clonedData[foundIndex], data, position, dirty)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n const updateDataAtIndex = (\n index: number,\n data: SortablePropItem,\n position: number | null,\n dirty: null | boolean = null\n ) => {\n const clonedData = cloneDeep(model.value)\n if (clonedData[index]) {\n updateDataCommon(clonedData[index], data, position, dirty)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n /**\n * @template targetIndex null value is when push as last item\n */\n const addAfterIndex = (targetIndex: number | null, data: SortablePropItem): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n if (isNull(targetIndex)) {\n clonedData.push(cloneDeep(data))\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n if (clonedData[targetIndex]) {\n clonedData.splice(targetIndex + 1, 0, data)\n updatePositions(clonedData, targetIndex + 1, targetIndex + 1, returnData)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n /**\n * @template targetId null value is when push as last item\n */\n const addAfterId = (targetId: DocId | IntegerId | null, data: SortablePropItem): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n if (isNull(targetId)) {\n clonedData.push(cloneDeep(data))\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const foundIndex = findItemIndexById(targetId, clonedData)\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n clonedData.splice(foundIndex + 1, 0, data)\n updatePositions(clonedData, foundIndex + 1, foundIndex + 1, returnData)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n return []\n }\n\n const removeById = (id: DocId | IntegerId): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n const foundIndex = findItemIndexById(id, clonedData)\n\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(foundIndex) && clonedData[foundIndex]) {\n clonedData.splice(foundIndex, 1)\n updatePositions(clonedData, foundIndex, foundIndex, returnData)\n untouchDirty(id)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n const removeByIndex = (index: number): SortableItemNewPositions => {\n const clonedData = cloneDeep(model.value)\n\n const returnData: SortableItemNewPositions = []\n\n if (clonedData[index]) {\n const id = clonedData[index][props.keyField]\n clonedData.splice(index, 1)\n updatePositions(clonedData, index, index, returnData)\n untouchDirty(id)\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n return []\n }\n\n const destroy = () => {\n if (!widgetEl.value) return\n if (!sortableInstance.value) return\n sortableInstance.value.stop()\n sortableInstance.value = null\n }\n\n const refresh = () => {\n destroy()\n initSortableCallback()\n }\n\n const onRemoveDialogConfirm = () => {\n if (isNull(itemToRemove.value)) return\n emit('onDelete', itemToRemove.value)\n removeDialog.value = false\n }\n\n return {\n items,\n forceRerender,\n dirtyLocal,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n sortableInstance,\n refresh,\n onRemoveDialogConfirm,\n destroy,\n moveArrayElement,\n addAfterId,\n addAfterIndex,\n removeById,\n removeByIndex,\n updateData,\n updateDataAtIndex,\n }\n}\n","import type { DocId, IntegerId } from '@/types/common'\n\nexport const WIDGET_HTML_ID_PREFIX = 'a-sortable-'\n\nexport interface SortableItemDataAware {\n id?: DocId | IntegerId\n position: number\n}\n\nexport interface SortableItemWithParentDataAware {\n id: DocId | IntegerId\n position: number\n parent: DocId | IntegerId | null // if null, no parent\n}\n\nexport interface SortableItemNewPosition {\n id?: DocId | IntegerId\n position: number\n}\n\nexport type SortableItemNewPositions = Array<SortableItemNewPosition>\n","<script setup lang=\"ts\">\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport type { SortableEvent } from 'sortablejs'\nimport { computed, nextTick, onBeforeUnmount, toRef, watch, withModifiers } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { SortableEmit, SortableItem, SortablePropItem } from '@/components/sortable/sortableActions'\nimport {\n CHOSEN_CLASS,\n DRAG_CLASS,\n GHOST_CLASS,\n GROUP_CLASS,\n HANDLE_CLASS,\n useSortableActions,\n} from '@/components/sortable/sortableActions'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: SortablePropItem[] | any\n dirty?: Set<DocId | IntegerId>\n keyField?: string\n disableDraggable?: boolean\n rootClassName?: string\n widgetIdentifierId?: string | undefined\n disableDefaultSort?: boolean\n updatePosition?: boolean\n positionField?: string\n showAddAfterButton?: boolean\n showAddLastButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n addLastButtonT?: string\n }>(),\n {\n dirty: () => new Set<DocId | IntegerId>(),\n keyField: 'position',\n disableDraggable: false,\n rootClassName: 'a-sortable-widget',\n widgetIdentifierId: undefined,\n disableDefaultSort: false,\n updatePosition: false,\n positionField: 'position',\n showAddAfterButton: false,\n showAddLastButton: false,\n showDeleteButton: false,\n showEditButton: false,\n addLastButtonT: 'common.sortable.addNewAtEnd',\n }\n)\nconst emit = defineEmits<SortableEmit>()\n\nconst model = toRef(() => props.modelValue)\n\nconst { t } = useI18n()\n\nconst onAddAfterClick = (data: SortableItem) => {\n emit('onAddAfter', data)\n}\n\nconst onDeleteClick = (data: SortableItem) => {\n itemToRemove.value = data\n removeDialog.value = true\n}\n\nconst onEditClick = (data: SortableItem) => {\n emit('onEdit', data)\n}\n\nconst onAddLastClick = () => {\n if (props.modelValue.length > 0) {\n emit('onAddLast', cloneDeep(props.modelValue[props.modelValue.length - 1]))\n return\n }\n emit('onAddLast', null)\n}\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst initSortable = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortable = widgetEl.value.querySelector<HTMLElement>('.' + GROUP_CLASS)\n if (!nestedSortable) return\n sortableInstance.value = useSortable(nestedSortable, [], {\n handle: '.' + HANDLE_CLASS,\n ghostClass: GHOST_CLASS,\n dragClass: DRAG_CLASS,\n chosenClass: CHOSEN_CLASS,\n onEnd: async (event: SortableEvent) => {\n if (props.disableDefaultSort || isUndefined(event.oldIndex) || isUndefined(event.newIndex)) return\n const needsRefresh = moveArrayElement(event.oldIndex, event.newIndex)\n emit('onEnd', needsRefresh)\n },\n })\n}\n\nconst {\n items,\n forceRerender,\n dirtyLocal,\n moveArrayElement,\n itemToRemove,\n removeDialog,\n destroy,\n refresh,\n onRemoveDialogConfirm,\n sortableInstance,\n widgetEl,\n randomUuid,\n addAfterId,\n removeById,\n updateData,\n addAfterIndex,\n removeByIndex,\n updateDataAtIndex,\n} = useSortableActions(model, initSortable, props, emit)\n\nonBeforeUnmount(() => {\n destroy()\n})\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortable()\n})\n\nwatch(\n () => props.disableDraggable,\n async (newValue) => {\n destroy()\n if (newValue === false) initSortable()\n }\n)\n\nwatch(\n () => props.dirty,\n (newValue) => {\n dirtyLocal.value = newValue\n }\n)\n\ndefineExpose({\n refresh,\n addAfterId,\n addAfterIndex,\n removeById,\n removeByIndex,\n updateData,\n updateDataAtIndex,\n})\n</script>\n\n<template>\n <div>\n <div\n :id=\"widgetHtmlId\"\n :class=\"rootClassName\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"GROUP_CLASS\"\n >\n <div\n v-for=\"item of items\"\n :key=\"item.key\"\n class=\"a-sortable-widget__item\"\n >\n <VIcon\n :class=\"{\n [HANDLE_CLASS]: true,\n [HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n <div class=\"a-sortable-widget__content\">\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </div>\n <div class=\"a-sortable-widget__buttons\">\n <VBtn\n v-if=\"showEditButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onEditClick(item)\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n text=\"Edit\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onDeleteClick(item)\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n text=\"Remove\"\n />\n </VBtn>\n <slot\n name=\"buttons\"\n :item=\"item\"\n />\n <VBtn\n v-if=\"showAddAfterButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n >\n <VIcon icon=\"mdi-dots-vertical\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n text=\"More options\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n v-if=\"showAddAfterButton\"\n @click.stop=\"onAddAfterClick(item)\"\n >\n Add new item after\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n </div>\n </div>\n </div>\n <slot\n name=\"add-last-activator\"\n :props=\"{ onClick: withModifiers(() => onAddLastClick(), ['stop']) }\"\n >\n <VBtn\n v-if=\"showAddLastButton\"\n size=\"small\"\n prepend-icon=\"mdi-plus\"\n class=\"ma-1\"\n @click.stop=\"onAddLastClick\"\n >\n {{ t(addLastButtonT) }}\n </VBtn>\n </slot>\n <VDialog\n v-model=\"removeDialog\"\n :width=\"500\"\n >\n <VCard v-if=\"removeDialog\">\n <ADialogToolbar @on-cancel=\"removeDialog = false\">\n {{ t('common.system.modal.confirmDelete') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click.stop=\"removeDialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary @click.stop=\"onRemoveDialogConfirm\">\n {{ t('common.button.delete') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use 'sass:color';\n\n// todo dark theme colors\n\n$class-name-root: 'a-sortable-widget';\n$bg-color: #fff;\n$border-color: lightgray;\n$border-color-hover: gray;\n$ghost-bg-color: color.scale(#3f6ad8, $lightness: 95%);\n\n.#{$class-name-root} {\n &__item {\n position: relative;\n display: flex;\n align-items: center;\n padding: 6px 0 6px 4px;\n background-color: $bg-color;\n border: 1px solid $border-color;\n border-bottom: none;\n\n &:first-child {\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n }\n\n &:last-child {\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n border-bottom: 1px solid $border-color;\n }\n\n &:hover {\n border-color: $border-color-hover;\n\n .#{$class-name-root}__buttons {\n opacity: 1;\n }\n }\n\n &:hover + & {\n border-top: 1px solid $border-color-hover;\n }\n }\n\n &__content {\n width: 100%;\n }\n\n &__handle {\n cursor: move;\n margin: 6px;\n\n &--disabled {\n opacity: 0;\n cursor: default;\n }\n }\n\n &__ghost {\n background-color: $ghost-bg-color;\n }\n\n &__buttons {\n opacity: 0;\n display: flex;\n }\n}\n</style>\n","import { type InjectionKey, nextTick, type Ref, ref } from 'vue'\nimport type { UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableItemNewPositions, SortableItemWithParentDataAware } from '@/components/sortable/sortableUtils'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport type { DocId, IntegerId } from '@/types/common'\n\nexport const NESTED_HANDLE_CLASS = 'a-sortable-nested-widget__handle'\nexport const NESTED_GHOST_CLASS = 'a-sortable-nested-widget__ghost'\nexport const NESTED_DRAG_CLASS = 'a-sortable-nested-widget__drag'\nexport const NESTED_CHOSEN_CLASS = 'a-sortable-nested-widget__chosen'\nexport const NESTED_GROUP_CLASS = 'a-sortable-nested-widget__group'\nexport const SortableLevel: InjectionKey<number> = Symbol.for('anzu:SortableLevel')\n\nexport interface SortableNestedItem<TData extends SortableItemWithParentDataAware = any> {\n data: TData\n children?: Array<SortableNestedItem> | undefined // if undefined, no nested allowed\n meta: {\n dirty: boolean\n }\n}\n\nexport interface SortableNested<TData extends SortableItemWithParentDataAware = any> {\n children: Array<SortableNestedItem<TData>>\n meta: {\n dirty: boolean\n }\n}\n\nexport interface SortableNestedEmit {\n (e: 'update:modelValue', data: SortableNested): void\n\n (e: 'onEnd', data: SortableItemNewPositions): void\n\n (e: 'onAddAfter', data: SortableNestedItem): void\n\n (e: 'onAddChild', data: SortableNestedItem): void\n\n (e: 'onAddLast', data: SortableNestedItem | null): void\n\n (e: 'onEdit', data: SortableNestedItem): void\n\n (e: 'onDelete', data: SortableNestedItem): void\n}\n\nexport function useSortableNestedActions(\n model: Readonly<Ref<SortableNested>>,\n initSortablesCallback: () => void,\n emit: SortableNestedEmit\n): {\n onRemoveDialogConfirm: () => void\n removeById: (id: DocId | IntegerId) => SortableItemNewPositions\n updateData: (\n id: DocId | IntegerId,\n data: any,\n children: Array<SortableNestedItem> | undefined | null,\n position: number | null,\n dirty?: boolean | null,\n parent?: DocId | IntegerId | null | undefined\n ) => void\n refresh: () => void\n destroy: () => void\n removeDialog: Ref<boolean>\n sortableInstances: Ref<Array<UseSortableReturn>>\n addChildToId: (targetId: DocId | IntegerId, data: any, childrenAllowed: boolean) => void\n addAfterId: (targetId: DocId | IntegerId | null, data: any, childrenAllowed: boolean) => SortableItemNewPositions\n forceRerender: Ref<number>\n dragging: Ref<boolean>\n widgetEl: Ref<HTMLElement | null>\n itemToRemove: Ref<SortableNestedItem | null>\n randomUuid: Ref<string>\n moveArrayElement: (\n currentId: DocId | IntegerId,\n targetId: DocId | IntegerId | null,\n newIndex: number,\n oldIndex: number,\n maxDepth: number\n ) => SortableItemNewPositions\n} {\n const { showWarningT } = useAlerts()\n\n const sortableInstances = ref<Array<UseSortableReturn>>([])\n const forceRerender = ref(0)\n const removeDialog = ref(false)\n const itemToRemove = ref<null | SortableNestedItem>(null)\n const dragging = ref(false)\n const widgetEl = ref<HTMLElement | null>(null)\n const randomUuid = ref<string>(generateUUIDv1())\n\n const forceRerenderWidgetHtml = (emitData: SortableNested | undefined = undefined) => {\n forceRerender.value++\n if (!isUndefined(emitData)) {\n emit('update:modelValue', emitData)\n }\n nextTick(() => {\n initSortablesCallback()\n })\n }\n\n const refresh = () => {\n destroy()\n initSortablesCallback()\n }\n\n const onRemoveDialogConfirm = () => {\n if (isNull(itemToRemove.value)) return\n emit('onDelete', itemToRemove.value)\n removeDialog.value = false\n }\n\n const destroy = () => {\n if (!widgetEl.value) return\n sortableInstances.value.forEach((item) => {\n item.stop()\n })\n sortableInstances.value = []\n }\n\n const touchDirty = (item: SortableNestedItem, nestedData: SortableNested) => {\n item.meta.dirty = true\n nestedData.meta.dirty = true\n }\n\n const updatePositionsSameParent = (\n items: SortableNestedItem[],\n oldIndex: number,\n newIndex: number,\n clonedData: SortableNested,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n const start = oldIndex > newIndex ? newIndex : oldIndex\n let position = start + 1\n for (let i = start; i < items.length; i++) {\n if (items[i].data.position !== position) {\n items[i].data.position = position\n touchDirty(items[i], clonedData)\n updatedPositions.push({\n id: items[i].data.id,\n position: items[i].data.position,\n })\n }\n position++\n }\n }\n const updatePositionsDifferentParent = (\n itemsTarget: SortableNestedItem[],\n itemsSource: SortableNestedItem[],\n indexTarget: number,\n indexSource: number,\n clonedData: SortableNested,\n updatedPositions: SortableItemNewPositions = []\n ) => {\n if (itemsTarget.length > 0) {\n let position = indexTarget + 1\n for (let i = indexTarget; i < itemsTarget.length; i++) {\n if (itemsTarget[i].data.position !== position) {\n itemsTarget[i].data.position = position\n touchDirty(itemsTarget[i], clonedData)\n updatedPositions.push({\n id: itemsTarget[i].data.id,\n position: itemsTarget[i].data.position,\n })\n }\n position++\n }\n }\n if (itemsSource.length > 0) {\n let position = indexSource + 1\n for (let i = indexSource; i < itemsSource.length; i++) {\n if (itemsSource[i].data.position !== position) {\n itemsSource[i].data.position = position\n touchDirty(itemsSource[i], clonedData)\n updatedPositions.push({\n id: itemsSource[i].data.id,\n position: itemsSource[i].data.position,\n })\n }\n position++\n }\n }\n }\n\n const calculateParentDepth = (\n parent: DocId | IntegerId | null,\n items: Array<SortableNestedItem>,\n depth: number = 0\n ): number => {\n if (parent === null) return depth\n const parentItem = items.find((item) => item.data.id === parent)\n if (!parentItem) return depth\n depth++\n return calculateParentDepth(parentItem.data.parent, items, depth)\n }\n\n const calculateChildDepth = (children: Array<SortableNestedItem> | undefined, depth: number = 0): number => {\n let childDepth = depth\n if (children && children.length) {\n depth++\n for (const child of children) {\n const currentDepth = calculateChildDepth(child.children, depth)\n childDepth = Math.max(childDepth, currentDepth)\n }\n }\n return childDepth\n }\n\n /**\n * @return number - Max depth of array, root = 1\n */\n const calculateNodeMaxDepth = (\n item: SortableNestedItem,\n items: Array<SortableNestedItem>,\n depth: number = 1\n ): number => {\n const parentDepth = calculateParentDepth(item.data.parent, items)\n const childDepth = calculateChildDepth(item.children, depth)\n return parentDepth + childDepth\n }\n\n const findItemById = (\n id: DocId | IntegerId,\n arr: SortableNestedItem[],\n parent: SortableNestedItem | null = null\n ): { itemFound: SortableNestedItem | null; parentItem: SortableNestedItem | null } => {\n for (const item of arr) {\n if (item.data.id === id) {\n return {\n itemFound: item,\n parentItem: parent,\n }\n }\n if (item.children) {\n const foundInChildren = findItemById(id, item.children, item)\n if (foundInChildren.itemFound !== null) {\n return foundInChildren\n }\n }\n }\n\n return {\n itemFound: null,\n parentItem: null,\n }\n }\n\n // todo refactor\n const moveArrayElement = (\n currentId: DocId | IntegerId,\n targetId: DocId | IntegerId | null,\n newIndex: number,\n oldIndex: number,\n maxDepth: number\n ): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound: itemToMove, parentItem: itemToMoveParentItem } = findItemById(currentId, clonedData.children)\n\n if (!itemToMove) {\n console.error('ASortableNested error.')\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n // moving to root\n if (targetId === null) {\n if (isNull(itemToMoveParentItem) && newIndex === oldIndex) {\n // moving item from root to root, but same place, skip\n return []\n }\n if (isNull(itemToMoveParentItem)) {\n // moving item from root to root\n const idx = clonedData.children.indexOf(itemToMove)\n if (idx !== -1) {\n const element = clonedData.children.splice(idx, 1)[0]\n clonedData.children.splice(newIndex, 0, element)\n updatePositionsSameParent(clonedData.children, idx, newIndex, clonedData, returnData)\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n if (!isNull(itemToMoveParentItem) && itemToMoveParentItem.children) {\n // moving from non-root to root\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = null\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n clonedData.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(\n clonedData.children,\n itemToMoveParentItem.children,\n newIndex,\n idx,\n clonedData,\n returnData\n )\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n console.error('ASortableNested error.')\n return []\n }\n // moving to specific array element\n const { itemFound: targetItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem || !targetItem.children) {\n // moving item to undefined children is not allowed by this implementation but allowed by sortablejs\n // so rerender is needed\n forceRerenderWidgetHtml()\n return []\n }\n\n if (!isNull(itemToMoveParentItem) && itemToMoveParentItem.data.id === targetItem.data.id && newIndex === oldIndex) {\n // moving item from/to same parent and same position, skip\n return []\n }\n\n if (itemToMoveParentItem && itemToMoveParentItem.children && targetItem.data.id === itemToMoveParentItem.data.id) {\n // moving item inside same parent\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsSameParent(targetItem.children, idx, newIndex, clonedData, returnData)\n }\n } else if (\n itemToMoveParentItem &&\n itemToMoveParentItem.children &&\n targetItem.data.id !== itemToMoveParentItem.data.id\n ) {\n // moving item between two different parents\n const idx = itemToMoveParentItem.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = targetItem.data.id\n const element = itemToMoveParentItem.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(\n targetItem.children,\n itemToMoveParentItem.children,\n newIndex,\n idx,\n clonedData,\n returnData\n )\n }\n } else {\n // moving from root to non-root\n const idx = clonedData.children.indexOf(itemToMove)\n if (idx !== -1) {\n itemToMove.data.parent = targetItem.data.id\n const element = clonedData.children.splice(idx, 1)[0]\n targetItem.children.splice(newIndex, 0, element)\n updatePositionsDifferentParent(targetItem.children, clonedData.children, newIndex, idx, clonedData, returnData)\n }\n }\n\n if (calculateNodeMaxDepth(targetItem, clonedData.children) > maxDepth) {\n showWarningT('common.sortable.error.maxDeepExceed')\n forceRerenderWidgetHtml()\n return []\n }\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n const removeById = (id: DocId | IntegerId): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n const { itemFound, parentItem } = findItemById(id, clonedData.children)\n if (!itemFound) {\n return []\n }\n\n const returnData: SortableItemNewPositions = []\n\n if (parentItem && parentItem.children) {\n const idx = parentItem.children.indexOf(itemFound)\n if (idx !== -1) {\n parentItem.children.splice(idx, 1)\n updatePositionsSameParent(parentItem.children, idx, idx, clonedData, returnData)\n }\n } else {\n const idx = clonedData.children.indexOf(itemFound)\n if (idx !== -1) {\n clonedData.children.splice(idx, 1)\n updatePositionsSameParent(clonedData.children, idx, idx, clonedData, returnData)\n }\n }\n\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n /**\n * @param id - id of item\n * @param data - item data\n * @param children - item children, use null to skip update and keep original data\n * @param position - item position, use null to skip update and keep original data\n * @param dirty - item dirty, use null to skip update and keep original data\n * @param parent - item parent id, use undefined to skip update and keep original data\n */\n const updateData = (\n id: DocId | IntegerId,\n data: any,\n children: Array<SortableNestedItem> | undefined | null = null,\n position: number | null = null,\n dirty: null | boolean = null,\n parent: DocId | IntegerId | null | undefined = undefined\n ) => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound } = findItemById(id, clonedData.children)\n if (!itemFound) {\n return\n }\n itemFound.data = cloneDeep(data)\n if (!isNull(children)) itemFound.children = children\n if (!isNull(position)) itemFound.data.position = position\n if (!isNull(dirty)) itemFound.meta.dirty = dirty\n if (!isNull(dirty) && dirty === true) clonedData.meta.dirty = true\n if (!isUndefined(parent)) itemFound.data.parent = parent\n forceRerenderWidgetHtml(clonedData)\n }\n\n /**\n * @template targetId null value is when push as last item\n */\n const addAfterId = (\n targetId: DocId | IntegerId | null,\n data: any,\n childrenAllowed: boolean\n ): SortableItemNewPositions => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const insertData: SortableNestedItem = {\n data: cloneDeep(data),\n children: childrenAllowed ? [] : undefined,\n meta: {\n dirty: false,\n },\n }\n\n if (isNull(targetId)) {\n clonedData.children.push(insertData)\n forceRerenderWidgetHtml(clonedData)\n return []\n }\n\n const { itemFound: targetItem, parentItem: targetItemParentItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem) {\n showWarningT('common.sortable.error.unableToAdd')\n return []\n }\n insertData.data.position = targetItem.data.position + 1\n insertData.data.parent = targetItem.data.parent\n\n const returnData: SortableItemNewPositions = []\n\n if (!isNull(targetItemParentItem) && targetItemParentItem.children) {\n const idx = targetItemParentItem.children.indexOf(targetItem) + 1\n if (idx !== -1) {\n targetItemParentItem.children.splice(idx, 0, insertData)\n updatePositionsSameParent(targetItemParentItem.children, idx, idx, clonedData, returnData)\n }\n } else {\n // insert to root\n const idx = clonedData.children.indexOf(targetItem) + 1\n if (idx !== -1) {\n clonedData.children.splice(idx, 0, insertData)\n updatePositionsSameParent(clonedData.children, idx, idx, clonedData, returnData)\n }\n }\n\n forceRerenderWidgetHtml(clonedData)\n return returnData\n }\n\n const addChildToId = (targetId: DocId | IntegerId, data: any, childrenAllowed: boolean) => {\n const clonedData: SortableNested = cloneDeep(model.value)\n\n const { itemFound: targetItem } = findItemById(targetId, clonedData.children)\n\n if (!targetItem) {\n showWarningT('common.sortable.error.unableToAdd')\n return\n }\n const insertData: SortableNestedItem = {\n data: cloneDeep(data),\n children: childrenAllowed ? [] : undefined,\n meta: {\n dirty: false,\n },\n }\n insertData.data.id = data.id\n insertData.data.position =\n targetItem.children && targetItem.children.length > 0 ? targetItem.children.length + 1 : 1\n insertData.data.parent = targetItem.data.id\n\n if (!isUndefined(targetItem.children) && targetItem.children.length === 0) {\n targetItem.children.push(insertData)\n forceRerenderWidgetHtml(clonedData)\n }\n }\n\n return {\n dragging,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n sortableInstances,\n forceRerender,\n refresh,\n onRemoveDialogConfirm,\n destroy,\n moveArrayElement,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n }\n}\n","<script setup lang=\"ts\">\nimport { inject, provide } from 'vue'\nimport { computed } from 'vue'\nimport type { SortableNestedItem } from '@/components/sortable/sortableNestedActions'\nimport { cloneDeep, isUndefined } from '@/utils/common'\nimport { NESTED_HANDLE_CLASS, SortableLevel } from '@/components/sortable/sortableNestedActions'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n item: SortableNestedItem | any\n disableDraggable: boolean\n maxDepth: number\n showAddAfterButton: boolean\n showAddChildButton: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n }>(),\n {}\n)\nconst emit = defineEmits<{\n (e: 'onAddAfter', item: SortableNestedItem): void\n (e: 'onAddChild', item: SortableNestedItem): void\n (e: 'onDelete', item: SortableNestedItem): void\n (e: 'onEdit', item: SortableNestedItem): void\n}>()\n\nconst onDeleteClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onDelete', item)\n return\n }\n emit('onDelete', cloneDeep(props.item))\n}\n\nconst onEditClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onEdit', item)\n return\n }\n emit('onEdit', cloneDeep(props.item))\n}\n\nconst onAddAfterClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onAddAfter', item)\n return\n }\n emit('onAddAfter', cloneDeep(props.item))\n}\n\nconst onAddChildClick = (item: SortableNestedItem | MouseEvent | KeyboardEvent) => {\n if ('data' in item) {\n emit('onAddChild', item)\n return\n }\n emit('onAddChild', cloneDeep(props.item))\n}\n\nconst level = inject<number>(SortableLevel, 1)\nprovide<number>(SortableLevel, level + 1)\n\nconst showAddChildButtonComputed = computed(() => {\n return (\n props.showAddChildButton &&\n !isUndefined(props.item.children) &&\n props.item.children.length === 0 &&\n level < props.maxDepth\n )\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n class=\"a-sortable-nested-widget__container\"\n :class=\"'a-sortable-nested-widget__container--level-' + level\"\n :data-id=\"item.data.id\"\n >\n <div class=\"a-sortable-nested-widget__nested\">\n <div class=\"a-sortable-nested-widget__item\">\n <VIcon\n :class=\"{\n [NESTED_HANDLE_CLASS]: true,\n [NESTED_HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n <div class=\"a-sortable-nested-widget__content\">\n <slot\n name=\"item\"\n :item=\"item\"\n />\n </div>\n <div class=\"a-sortable-nested-widget__buttons\">\n <VBtn\n v-if=\"showEditButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onEditClick\"\n >\n <VIcon icon=\"mdi-pencil\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.edit')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n @click.stop=\"onDeleteClick\"\n >\n <VIcon icon=\"mdi-trash-can-outline\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.remove')\"\n />\n </VBtn>\n <slot\n name=\"buttons\"\n :item=\"item\"\n />\n <VBtn\n v-if=\"showAddAfterButton || showAddChildButtonComputed\"\n icon\n size=\"x-small\"\n variant=\"text\"\n class=\"mx-1\"\n >\n <VIcon icon=\"mdi-dots-vertical\" />\n <VTooltip\n anchor=\"bottom\"\n activator=\"parent\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n v-if=\"showAddAfterButton\"\n @click.stop=\"onAddAfterClick\"\n >\n {{ t('common.sortable.addAfter') }}\n </VListItem>\n <VListItem\n v-if=\"showAddChildButtonComputed\"\n @click.stop=\"onAddChildClick\"\n >\n {{ t('common.sortable.addChild') }}\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </div>\n </div>\n <div\n v-if=\"level < maxDepth && !isUndefined(item.children)\"\n class=\"a-sortable-nested-widget__group\"\n :class=\"{ 'a-sortable-nested-widget__group--empty': item.children.length === 0 }\"\n :data-id=\"item.data.id\"\n >\n <ASortableNestedItem\n v-for=\"child of item.children\"\n :key=\"child.data.id\"\n :item=\"child\"\n :disable-draggable=\"disableDraggable\"\n :max-depth=\"maxDepth\"\n :show-add-after-button=\"showAddAfterButton\"\n :show-add-child-button=\"showAddChildButton\"\n :show-delete-button=\"showDeleteButton\"\n :show-edit-button=\"showEditButton\"\n @on-add-after=\"onAddAfterClick\"\n @on-add-child=\"onAddChildClick\"\n @on-delete=\"onDeleteClick\"\n @on-edit=\"onEditClick\"\n >\n <!-- @vue-ignore -->\n <template #item=\"{ item: itemSlot }\">\n <slot\n name=\"item\"\n :item=\"itemSlot as any\"\n />\n </template>\n <!-- @vue-ignore -->\n <template #buttons=\"{ item: buttonSlot }\">\n <slot\n name=\"buttons\"\n :item=\"buttonSlot as any\"\n />\n </template>\n </ASortableNestedItem>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { SortableEvent } from 'sortablejs'\nimport { computed, nextTick, onBeforeUnmount, toRef, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type {\n SortableNested,\n SortableNestedEmit,\n SortableNestedItem,\n} from '@/components/sortable/sortableNestedActions'\nimport { cloneDeep, isNull, isUndefined } from '@/utils/common'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport {\n NESTED_CHOSEN_CLASS,\n NESTED_DRAG_CLASS,\n NESTED_GHOST_CLASS,\n NESTED_GROUP_CLASS,\n NESTED_HANDLE_CLASS,\n useSortableNestedActions,\n} from '@/components/sortable/sortableNestedActions'\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport { stringToInt } from '@/utils/string'\nimport ASortableNestedItem from '@/components/sortable/ASortableNestedItem.vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: SortableNested\n maxDepth: number\n disableDraggable?: boolean\n rootClassName?: string\n widgetIdentifierId?: string | undefined\n disableDefaultSort?: boolean\n showAddAfterButton?: boolean\n showAddLastButton?: boolean\n showAddChildButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n }>(),\n {\n disableDraggable: false,\n rootClassName: 'a-sortable-nested-widget',\n widgetIdentifierId: undefined,\n disableDefaultSort: false,\n showAddAfterButton: false,\n showAddLastButton: false,\n showAddChildButton: false,\n showDeleteButton: false,\n showEditButton: false,\n }\n)\nconst emit = defineEmits<SortableNestedEmit>()\n\nconst model = toRef(() => props.modelValue)\n\nconst onAddAfterClick = (data: SortableNestedItem) => {\n emit('onAddAfter', data)\n}\n\nconst onAddChildClick = (data: SortableNestedItem) => {\n emit('onAddChild', data)\n}\n\nconst onDeleteClick = (data: SortableNestedItem) => {\n itemToRemove.value = data\n removeDialog.value = true\n}\n\nconst onEditClick = (data: SortableNestedItem) => {\n emit('onEdit', data)\n}\n\nconst onAddLastClick = () => {\n if (props.modelValue.children.length > 0) {\n emit('onAddLast', cloneDeep(props.modelValue.children[props.modelValue.children.length - 1]))\n return\n }\n emit('onAddLast', null)\n}\n\nconst { t } = useI18n()\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst widgetClass = computed(() => {\n return props.rootClassName + ' ' + (dragging.value ? props.rootClassName + '--dragging' : '')\n})\n\nconst initSortables = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortables = Array.from(widgetEl.value.querySelectorAll<HTMLElement>('.' + NESTED_GROUP_CLASS))\n sortableInstances.value = []\n for (let i = 0; i < nestedSortables.length; i++) {\n sortableInstances.value[i] = useSortable(nestedSortables[i], [], {\n group: {\n name: 'nested',\n pull: true,\n put: true,\n },\n handle: '.' + NESTED_HANDLE_CLASS,\n ghostClass: NESTED_GHOST_CLASS,\n dragClass: NESTED_DRAG_CLASS,\n chosenClass: NESTED_CHOSEN_CLASS,\n fallbackOnBody: true,\n swapThreshold: 0.65,\n forceFallback: true,\n fallbackTolerance: 3,\n onUpdate: () => {},\n onStart: () => {\n dragging.value = true\n },\n onEnd: (event: SortableEvent) => {\n dragging.value = false\n nextTick(() => {\n const id = stringToInt(event.item.getAttribute('data-id') ?? '0')\n if (id < 1) return\n const newIndex = event.newIndex\n if (isUndefined(newIndex)) return\n const oldIndex = event.oldIndex\n if (isUndefined(oldIndex)) return\n let parentId: number | null = null\n const parentEl = event.item.parentElement\n if (!isNull(parentEl)) {\n parentId = stringToInt(parentEl.getAttribute('data-id') ?? '0')\n if (parentId === 0) parentId = null\n }\n const needsRefresh = moveArrayElement(id, parentId, newIndex, oldIndex, props.maxDepth)\n emit('onEnd', needsRefresh)\n })\n },\n })\n }\n}\n\nconst {\n dragging,\n widgetEl,\n randomUuid,\n removeDialog,\n itemToRemove,\n forceRerender,\n moveArrayElement,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n destroy,\n refresh,\n onRemoveDialogConfirm,\n sortableInstances,\n} = useSortableNestedActions(model, initSortables, emit)\n\nonBeforeUnmount(() => {\n destroy()\n})\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortables()\n})\n\nwatch(\n () => props.disableDraggable,\n async (newValue) => {\n destroy()\n if (newValue === false) initSortables()\n }\n)\n\ndefineExpose({\n refresh,\n addAfterId,\n addChildToId,\n removeById,\n updateData,\n})\n</script>\n\n<template>\n <div>\n <div\n :id=\"widgetHtmlId\"\n :class=\"widgetClass\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"NESTED_GROUP_CLASS\"\n >\n <ASortableNestedItem\n v-for=\"item of modelValue.children\"\n :key=\"item.data.id\"\n :item=\"item\"\n :disable-draggable=\"disableDraggable\"\n :max-depth=\"maxDepth\"\n :show-add-after-button=\"showAddAfterButton\"\n :show-add-child-button=\"showAddChildButton\"\n :show-delete-button=\"showDeleteButton\"\n :show-edit-button=\"showEditButton\"\n @on-add-after=\"onAddAfterClick\"\n @on-add-child=\"onAddChildClick\"\n @on-delete=\"onDeleteClick\"\n @on-edit=\"onEditClick\"\n >\n <template #item=\"{ item: itemSlot }\">\n <slot\n name=\"item\"\n :item=\"itemSlot\"\n />\n </template>\n <template #buttons=\"{ item: buttonsSlot }\">\n <slot\n name=\"buttons\"\n :item=\"buttonsSlot\"\n />\n </template>\n </ASortableNestedItem>\n </div>\n </div>\n <VBtn\n v-if=\"showAddLastButton\"\n size=\"small\"\n prepend-icon=\"mdi-plus\"\n @click.stop=\"onAddLastClick\"\n >\n {{ t('common.sortable.addNewAtEnd') }}\n </VBtn>\n <VDialog\n v-model=\"removeDialog\"\n :width=\"500\"\n >\n <VCard v-if=\"removeDialog\">\n <ADialogToolbar @on-cancel=\"removeDialog = false\">\n {{ t('common.system.modal.confirmDelete') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary @click.stop=\"removeDialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary @click.stop=\"onRemoveDialogConfirm\">\n {{ t('common.button.delete') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use 'sass:color';\n\n// todo dark theme colors\n\n$class-name-root: 'a-sortable-nested-widget';\n$bg-color: #fff;\n$border-color: lightgray;\n$border-color-hover: gray;\n$ghost-bg-color: color.scale(#3f6ad8, $lightness: 95%);\n$item-space: 10px;\n$ident: 40px;\n\n.#{$class-name-root} {\n &__container {\n position: relative;\n background-color: $bg-color;\n margin-left: ($ident + $item-space);\n\n &::before {\n content: '';\n position: absolute;\n top: -($item-space);\n left: -($ident);\n border-left: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n width: $ident;\n height: ($ident + $item-space);\n }\n\n &::after {\n position: absolute;\n content: '';\n top: ($ident - 1px);\n left: -($ident);\n border-left: 1px solid $border-color;\n border-top: 1px solid $border-color;\n width: $ident;\n height: 100%;\n }\n\n &:last-child::after {\n display: none;\n }\n\n &--level-2 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -4%);\n }\n }\n\n &--level-3 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -8%);\n }\n }\n\n &--level-4 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -12%);\n }\n }\n\n &--level-5 {\n .#{$class-name-root}__item {\n background-color: color.scale($bg-color, $lightness: -16%);\n }\n }\n }\n\n > .#{$class-name-root}__group > .#{$class-name-root}__container:first-child:before {\n border-bottom: none;\n }\n\n &__item {\n width: 100%;\n display: flex;\n border: 1px solid $border-color;\n align-items: center;\n justify-content: space-between;\n padding: 6px 10px;\n border-radius: 5px;\n margin-bottom: 10px;\n\n &:hover {\n border-color: $border-color-hover;\n\n .#{$class-name-root}__buttons {\n opacity: 1;\n }\n }\n\n &:hover + div {\n div {\n border-color: $border-color-hover;\n\n &::after,\n &::before {\n border-color: $border-color-hover;\n }\n }\n }\n }\n\n &__content {\n width: 100%;\n }\n\n &__nested {\n width: 100%;\n }\n\n &__handle {\n cursor: move;\n margin-right: 6px;\n\n &--disabled {\n opacity: 0;\n cursor: default;\n }\n }\n\n &__ghost {\n .#{$class-name-root}__item {\n background-color: $ghost-bg-color !important;\n }\n }\n\n &__buttons {\n opacity: 0;\n display: flex;\n }\n\n &--dragging {\n .#{$class-name-root}__group--empty {\n padding-bottom: 20px;\n }\n }\n\n &__chosen {\n .#{$class-name-root}__container {\n margin-left: 0;\n }\n }\n\n &__drag {\n &::before,\n &::after {\n opacity: 0;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TItem\">\nimport { computed, ref, toRaw, withModifiers } from 'vue'\nimport { isNull, isUndefined } from '@/utils/common'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport type { Pagination } from '@/types/Pagination'\nimport ADatatablePagination from '@/components/ADatatablePagination.vue'\nimport type { Fn } from '@vueuse/core'\n\nconst props = withDefaults(\n defineProps<{\n selectedItems: Array<TItem>\n pagination: Pagination\n submitFilter: Fn\n resetFilter: Fn\n loading?: boolean\n minCount?: number\n maxCount?: number\n modelValue?: boolean | undefined // dialog\n dialogTitleT?: string\n paginationMode?: 'standard' | 'more'\n }>(),\n {\n loading: false,\n minCount: 1,\n maxCount: 1,\n modelValue: undefined,\n dialogTitleT: 'common.subjectSelect.texts.title',\n paginationMode: 'standard',\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: boolean): void\n (e: 'update:pagination', data: Pagination): void\n (e: 'onOpen'): void\n (e: 'onPageChange'): void\n (e: 'onConfirm', data: Array<TItem>): void\n (e: 'onFetchNextPage'): void\n}>()\n\nconst dialogLocal = ref(false)\nconst dialog = computed({\n get() {\n if (isUndefined(props.modelValue)) return dialogLocal.value\n return props.modelValue\n },\n set(newValue: boolean) {\n dialogLocal.value = newValue\n emit('update:modelValue', newValue)\n },\n})\n\nconst paginationComputed = computed({\n get: () => props.pagination,\n set: (newValue) => {\n emit('update:pagination', { ...toRaw(newValue) })\n },\n})\n\nconst sidebarLeft = ref(true)\nconst filterTouched = ref(false)\n\nconst { t } = useI18n()\n\nconst selectedItemsCount = computed(() => {\n return props.selectedItems.length\n})\n\nconst disabledSubmit = computed(() => {\n return selectedItemsCount.value < props.minCount || selectedItemsCount.value > props.maxCount\n})\n\nconst onOpen = () => {\n emit('onOpen')\n sidebarLeft.value = true\n dialog.value = true\n}\n\nconst toggleSidebar = () => {\n sidebarLeft.value = !sidebarLeft.value\n}\n\nconst onClose = () => {\n dialog.value = false\n}\n\nconst onConfirm = () => {\n emit(\n 'onConfirm',\n props.selectedItems.map((item) => toRaw(item))\n )\n onClose()\n}\n\nconst fetchNextPage = () => {\n emit('onFetchNextPage')\n}\n\nconst onPageChange = () => {\n emit('onPageChange')\n}\n\nconst lastPage = computed(() => {\n return Math.ceil(paginationComputed.value.totalCount / paginationComputed.value.rowsPerPage)\n})\n\nconst hasNextPage = computed(() => {\n return !(\n (isNull(paginationComputed.value.hasNextPage) && paginationComputed.value.page === lastPage.value) ||\n paginationComputed.value.hasNextPage === false\n )\n})\n\nconst autoloadOnIntersect = (isIntersecting: boolean) => {\n if (isIntersecting && hasNextPage.value && !props.loading) {\n fetchNextPage()\n }\n}\n\ndefineExpose({\n open: onOpen,\n})\n</script>\n\n<template>\n <slot\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => onOpen(), ['stop']) }\"\n />\n <VDialog\n v-bind=\"$attrs\"\n :model-value=\"dialog\"\n fullscreen\n class=\"subject-select\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <VCard\n v-if=\"dialog\"\n class=\"subject-select__card\"\n >\n <ADialogToolbar\n class=\"subject-select__toolbar system-border-b\"\n @on-cancel=\"onClose\"\n >\n <slot name=\"title\">\n {{ t(dialogTitleT) }}\n </slot>\n </ADialogToolbar>\n <VToolbar\n density=\"compact\"\n color=\"transparent\"\n :height=\"46\"\n elevation=\"0\"\n class=\"system-border-b subject-select__second-bar\"\n >\n <slot name=\"second-bar\">\n <div class=\"d-flex flex-column w-100 px-1 align-center\">\n <div class=\"d-flex justify-space-between w-100 align-center\">\n <div class=\"d-flex align-center\">\n <VBtn\n icon\n :width=\"30\"\n :height=\"30\"\n @click=\"toggleSidebar\"\n >\n <VIcon\n icon=\"mdi-tune\"\n :size=\"16\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.subjectSelect.filter.toggle') }}\n </VTooltip>\n </VBtn>\n <slot name=\"second-bar-left\" />\n </div>\n <div class=\"d-flex align-center\">\n <slot name=\"second-bar-right\" />\n </div>\n </div>\n </div>\n </slot>\n </VToolbar>\n <div\n class=\"subject-select__main\"\n :class=\"{ 'subject-select__main--sidebar-active': sidebarLeft }\"\n >\n <div class=\"subject-select__sidebar system-border-r\">\n <div class=\"subject-select-filter\">\n <div class=\"subject-select-filter__content\">\n <VForm\n name=\"search2\"\n class=\"px-2 pt-4\"\n @submit.prevent=\"submitFilter\"\n >\n <slot name=\"filter\" />\n </VForm>\n </div>\n <div class=\"subject-select-filter__actions\">\n <VBtn\n color=\"primary\"\n class=\"mx-2\"\n :variant=\"filterTouched ? 'flat' : 'text'\"\n size=\"small\"\n @click.stop=\"submitFilter\"\n >\n {{ t('common.button.submitFilter') }}\n </VBtn>\n <VBtn\n class=\"px-2\"\n color=\"light\"\n min-width=\"36px\"\n variant=\"flat\"\n size=\"small\"\n @click.stop=\"resetFilter\"\n >\n <VIcon icon=\"mdi-filter-remove-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.resetFilter') }}\n </VTooltip>\n </VBtn>\n </div>\n </div>\n </div>\n <div class=\"subject-select__content\">\n <slot name=\"content\" />\n <div\n v-if=\"paginationMode === 'more'\"\n class=\"d-flex w-100 align-center justify-center pa-4\"\n >\n <ABtnSecondary\n v-show=\"hasNextPage || loading\"\n v-intersect.quiet=\"autoloadOnIntersect\"\n :loading=\"loading\"\n size=\"small\"\n @click=\"fetchNextPage\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.loadMore') }}\n </slot>\n </ABtnSecondary>\n </div>\n <ADatatablePagination\n v-else\n v-model=\"paginationComputed\"\n @change=\"onPageChange\"\n />\n </div>\n </div>\n <div class=\"subject-select__actions system-border-t\">\n <div v-if=\"props.minCount === props.maxCount\">\n {{ t('common.subjectSelect.texts.pickExactCount', { count: props.minCount, selected: selectedItemsCount }) }}\n </div>\n <div v-else>\n {{\n t('common.subjectSelect.texts.pickRangeCount', {\n minCount: props.minCount,\n maxCount: props.maxCount,\n selected: selectedItemsCount,\n })\n }}\n </div>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"disabledSubmit\"\n @click.stop=\"onConfirm\"\n >\n <slot name=\"button-confirm-title\">\n {{ t('common.button.confirm') }}\n </slot>\n </ABtnPrimary>\n </div>\n </VCard>\n </VDialog>\n</template>\n","import { ref } from 'vue'\n\nconst showAll = ref(false)\n\nexport function useCustomDataForm() {\n const toggleForm = () => {\n showAll.value = !showAll.value\n }\n\n return {\n showAll,\n toggleForm,\n }\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const CustomDataFormElementType = {\n String: 'string',\n Integer: 'integer',\n StringArray: 'string_array',\n Boolean: 'boolean',\n} as const\nexport const CustomDataFormElementTypeDefault = CustomDataFormElementType.String\nexport type CustomDataFormElementTypeType = (typeof CustomDataFormElementType)[keyof typeof CustomDataFormElementType]\n\nexport function useCustomDataFormElementType() {\n const { t } = useI18n()\n const customDataFormElementTypeOptions = ref<ValueObjectOption<CustomDataFormElementTypeType>[]>([\n {\n value: CustomDataFormElementType.String,\n title: t('common.customFormElement.type.string'),\n },\n {\n value: CustomDataFormElementType.Integer,\n title: t('common.customFormElement.type.integer'),\n },\n {\n value: CustomDataFormElementType.StringArray,\n title: t('common.customFormElement.type.stringArray'),\n },\n {\n value: CustomDataFormElementType.Boolean,\n title: t('common.customFormElement.type.boolean'),\n },\n ])\n\n const getCustomDataFormElementTypeOption = (value: CustomDataFormElementTypeType) => {\n return customDataFormElementTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n customDataFormElementTypeOptions,\n getCustomDataFormElementTypeOption,\n }\n}\n","import { between, createI18nMessage } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateBetween() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(between, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.between',\n })\n}\n","import { createI18nMessage, email } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateEmail() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(email, {\n messagePath: () => 'error.jsValidation.email',\n })\n}\n","import { createI18nMessage, maxLength } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMaxLength() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(maxLength, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.maxLength',\n })\n}\n","import { createI18nMessage, maxValue } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMaxValue() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(maxValue, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.maxValue',\n })\n}\n","import { createI18nMessage, minLength } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMinLength() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(minLength, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.minLength',\n })\n}\n","import { createI18nMessage, minValue } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateMinValue() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(minValue, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.minValue',\n })\n}\n","import { createI18nMessage, numeric } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateNumeric() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(numeric, {\n messagePath: () => 'error.jsValidation.numeric',\n })\n}\n","import { createI18nMessage, required } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateRequired() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(required, {\n messagePath: () => 'error.jsValidation.required',\n })\n}\n","import { createI18nMessage, helpers } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateSlug() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(helpers.regex(/^[a-z\\-0-9/]+$/), {\n messagePath: () => 'error.jsValidation.slug',\n })\n}\n","import { createI18nMessage, helpers } from '@vuelidate/validators'\nimport { unref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateStringArrayItemLength() {\n const withI18nMessage = createI18nMessage({ t })\n\n const stringArrayItemLengthValidator = (min: number, max: number) => {\n return (value: string[]) =>\n !helpers.req(value) || value.every((item) => item.length >= unref(min) && item.length <= unref(max))\n }\n const stringArrayItemLengthHelper = (min: number, max: number) => {\n return {\n $validator: stringArrayItemLengthValidator(min, max),\n // $message not required when using i18n\n // $message: (input: { $params: Record<string, any> }) => {\n // const { $params } = input\n // return `Item length in list must have between ${$params.min} and ${$params.max} characters.`\n // },\n $params: {\n min,\n max,\n type: 'stringArrayItemLength',\n },\n }\n }\n\n return withI18nMessage(stringArrayItemLengthHelper, {\n withArguments: true,\n messagePath: () => 'error.jsValidation.stringArrayItemLength',\n })\n}\n","import { createI18nMessage, url } from '@vuelidate/validators'\nimport { i18n } from '@/plugins/i18n'\n\nconst { t } = i18n.global\n\nexport function useValidateUrl() {\n const withI18nMessage = createI18nMessage({ t })\n\n return withI18nMessage(url, {\n messagePath: () => 'error.jsValidation.url',\n })\n}\n","import { useValidateBetween } from '@/validators/vuelidate/common/useValidateBetween'\nimport { useValidateEmail } from '@/validators/vuelidate/common/useValidateEmail'\nimport { useValidateMaxLength } from '@/validators/vuelidate/common/useValidateMaxLength'\nimport { useValidateMaxValue } from '@/validators/vuelidate/common/useValidateMaxValue'\nimport { useValidateMinLength } from '@/validators/vuelidate/common/useValidateMinLength'\nimport { useValidateMinValue } from '@/validators/vuelidate/common/useValidateMinValue'\nimport { useValidateNumeric } from '@/validators/vuelidate/common/useValidateNumeric'\nimport { useValidateRequired } from '@/validators/vuelidate/common/useValidateRequired'\nimport { useValidateRequiredIf } from '@/validators/vuelidate/common/useValidateRequiredIf'\nimport { useValidateSlug } from '@/validators/vuelidate/common/useValidateSlug'\nimport { useValidateStringArrayItemLength } from '@/validators/vuelidate/common/useValidateStringArrayItemLength'\nimport { useValidateUrl } from '@/validators/vuelidate/common/useValidateUrl'\n\nexport function useValidate() {\n return {\n required: useValidateRequired(),\n requiredIf: useValidateRequiredIf(),\n minLength: useValidateMinLength(),\n maxLength: useValidateMaxLength(),\n minValue: useValidateMinValue(),\n maxValue: useValidateMaxValue(),\n between: useValidateBetween(),\n email: useValidateEmail(),\n numeric: useValidateNumeric(),\n slug: useValidateSlug(),\n url: useValidateUrl(),\n stringArrayItemLength: useValidateStringArrayItemLength(),\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed, isProxy, ref, toRaw } from 'vue'\nimport type { ErrorObject } from '@vuelidate/core'\nimport { useVuelidate } from '@vuelidate/core'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { ValidationScope } from '@/types/Validation'\nimport { CustomDataFormElementType } from '@/components/customDataForm/CustomDataFormElementTypes'\nimport { isEmptyObject } from '@/utils/common'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: any\n config: CustomDataFormElement\n validationScope?: ValidationScope\n }>(),\n {\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: { property: string; value: any }): void\n (e: 'blur', data: any): void\n}>()\n\nconst fixValue = (value: any) => {\n if (props.config.attributes.type === CustomDataFormElementType.Integer) {\n return parseInt(value)\n }\n return value\n}\n\nconst updateModelValue = (value: any) => {\n emit('update:modelValue', { property: props.config.property, value: fixValue(value) })\n}\n\nconst modelValueComputed = computed(() => {\n const value = isProxy(props.modelValue) ? toRaw(props.modelValue) : props.modelValue\n if (props.config.attributes.type === CustomDataFormElementType.StringArray && isEmptyObject(value)) return []\n return value\n})\n\nconst { maxLength, minLength, requiredIf, minValue, maxValue, stringArrayItemLength } = useValidate()\n\nconst rules = computed(() => {\n const dynamicRules: Record<string, any> = {\n modelValueComputed: {\n required: requiredIf(props.config.attributes.required),\n },\n }\n switch (props.config.attributes.type) {\n case CustomDataFormElementType.String:\n dynamicRules.modelValueComputed.minLength = minLength(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0\n )\n dynamicRules.modelValueComputed.maxLength = maxLength(\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 256\n )\n break\n case CustomDataFormElementType.Integer:\n dynamicRules.modelValueComputed.minValue = minValue(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0\n )\n dynamicRules.modelValueComputed.maxValue = maxValue(\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 9999\n )\n break\n case CustomDataFormElementType.StringArray:\n dynamicRules.modelValueComputed.minLength = minLength(\n props.config.attributes.minCount ? props.config.attributes.minCount : 0\n )\n dynamicRules.modelValueComputed.maxLength = maxLength(\n props.config.attributes.maxCount ? props.config.attributes.maxCount : 32\n )\n dynamicRules.modelValueComputed.stringArrayItemLength = stringArrayItemLength(\n props.config.attributes.minValue ? props.config.attributes.minValue : 0,\n props.config.attributes.maxValue ? props.config.attributes.maxValue : 256\n )\n break\n }\n\n return dynamicRules\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\nconst errorMessageComputed = computed(() => {\n if (v$.value.$errors.length) return [v$.value.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst counter = ref<number | undefined>(undefined)\ncounter.value = props.config.attributes.maxValue ?? undefined\n\nconst onBlur = () => {\n emit('blur', props.modelValue)\n v$.value.$touch()\n}\n</script>\n\n<template>\n <VTextarea\n v-if=\"config.attributes.type === CustomDataFormElementType.String\"\n :model-value=\"modelValue\"\n auto-grow\n :rows=\"1\"\n :label=\"config.name\"\n :error-messages=\"errorMessageComputed\"\n :counter=\"counter\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VTextarea>\n <VTextField\n v-else-if=\"config.attributes.type === CustomDataFormElementType.Integer\"\n :model-value=\"modelValueComputed\"\n type=\"number\"\n :label=\"config.name\"\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VTextField>\n <VCombobox\n v-else-if=\"config.attributes.type === CustomDataFormElementType.StringArray\"\n :model-value=\"modelValueComputed\"\n :label=\"config.name\"\n multiple\n chips\n :error-messages=\"errorMessageComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n @blur=\"onBlur\"\n >\n <template #label>\n {{ config.name\n }}<span\n v-if=\"config.attributes.required\"\n class=\"required\"\n />\n </template>\n </VCombobox>\n <VSwitch\n v-if=\"config.attributes.type === CustomDataFormElementType.Boolean && config.attributes.required === true\"\n :label=\"config.name\"\n :model-value=\"modelValueComputed\"\n :data-cy=\"'custom-field-' + config.property\"\n @update:model-value=\"updateModelValue\"\n />\n <div v-if=\"config.attributes.type === CustomDataFormElementType.Boolean && config.attributes.required === false\">\n optional boolean todo\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport type { CustomDataFormElement } from '@/components/customDataForm/CustomDataForm'\nimport type { ValidationScope } from '@/types/Validation'\nimport { useCustomDataForm } from '@/components/customDataForm/useCustomDataForm'\nimport ACustomFormElement from '@/components/customDataForm/ACustomDataFormElement.vue'\nimport ARow from '@/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: { [key: string]: any }\n elements: CustomDataFormElement[]\n validationScope?: ValidationScope\n pinnedCount?: number\n readonly?: boolean\n }>(),\n {\n validationScope: undefined,\n pinnedCount: 1000,\n readonly: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'anyChange'): void\n}>()\n\nconst { t } = useI18n()\n\nconst { showAll, toggleForm } = useCustomDataForm()\n\nconst updateModelValue = (data: { property: string; value: any }) => {\n const updated = {} as { [key: string]: any }\n updated[data.property] = data.value\n emit('update:modelValue', { ...props.modelValue, ...updated })\n emit('anyChange')\n}\n\nconst elementsPinned = computed(() => {\n return props.elements.slice(0, props.pinnedCount)\n})\n\nconst elementsOther = computed(() => {\n return props.elements.slice(props.pinnedCount)\n})\n\nconst showHideButtonText = computed(() => {\n return showAll.value\n ? t('common.damImage.asset.detail.metadataToggle.show')\n : t('common.damImage.asset.detail.metadataToggle.hide')\n})\nconst showHideButtonIcon = computed(() => {\n return showAll.value ? 'mdi-minus' : 'mdi-plus'\n})\n\nconst enableShowHide = computed(() => {\n return props.elements.length > props.pinnedCount\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate({ $scope: props.validationScope })\n\nconst validate = (): Promise<boolean> => {\n return v$.value.$validate()\n}\n\ndefineExpose({\n validate,\n})\n</script>\n\n<template>\n <div class=\"w-100\">\n <slot name=\"before-pinned\" />\n <VRow\n v-for=\"element in elementsPinned\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"element.name\"\n >\n {{ modelValue[element.property] }}\n </ARow>\n <ACustomFormElement\n v-else\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n :validation-scope=\"validationScope\"\n @update:model-value=\"updateModelValue\"\n />\n </VCol>\n </VRow>\n <slot name=\"after-pinned\" />\n </div>\n <div\n v-show=\"showAll\"\n class=\"w-100\"\n >\n <VRow\n v-for=\"element in elementsOther\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <ARow\n v-if=\"readonly\"\n :title=\"element.name\"\n >\n {{ modelValue[element.property] }}\n </ARow>\n <ACustomFormElement\n v-else\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n @update:model-value=\"updateModelValue\"\n />\n </VCol>\n </VRow>\n </div>\n <VBtn\n v-if=\"enableShowHide\"\n variant=\"text\"\n size=\"small\"\n class=\"my-2\"\n @click=\"toggleForm\"\n >\n <VIcon :icon=\"showHideButtonIcon\" />\n {{ showHideButtonText }}\n </VBtn>\n</template>\n","import { type Ref, ref } from 'vue'\n\nconst isDraggingFile = ref(false)\nconst draggingTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n\nexport function useDropzoneGlobalDragState() {\n const dragoverHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, true)\n }\n const dragleaveHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, false)\n }\n const dropHandler = (event: DragEvent) => {\n event.preventDefault()\n checkReallyDraggingEnded(event, false)\n }\n const checkReallyDraggingEnded = (event: DragEvent, dragging: boolean) => {\n if (!dragEventContainsFiles(event)) {\n return\n }\n if (dragging) {\n isDraggingFile.value = true\n clearTimeout(draggingTimer.value)\n } else {\n clearTimeout(draggingTimer.value)\n draggingTimer.value = setTimeout(() => {\n isDraggingFile.value = false\n }, 100)\n }\n }\n const dragEventContainsFiles = (event: DragEvent) => {\n if (event.dataTransfer?.types) {\n for (let i = 0; i < event.dataTransfer.types.length; i++) {\n if (event.dataTransfer.types[i] === 'Files') {\n return true\n }\n }\n }\n\n return false\n }\n\n const initGlobalDragState = () => {\n window.document.addEventListener('dragover', dragoverHandler)\n window.document.addEventListener('dragleave', dragleaveHandler)\n window.document.addEventListener('drop', dropHandler)\n }\n\n const destroyGlobalDragState = () => {\n window.document.removeEventListener('dragover', dragoverHandler)\n window.document.removeEventListener('dragleave', dragleaveHandler)\n window.document.removeEventListener('drop', dropHandler)\n }\n\n return {\n isDraggingFile,\n initGlobalDragState,\n destroyGlobalDragState,\n }\n}\n","export const damFileTypeFix = (file: File | null | undefined) => {\n if (!file) return ''\n if (file.type && file.type.length > 0) {\n return file.type\n }\n const extension = file.name.split('.').pop()?.toLowerCase()\n switch (extension) {\n case 'mov':\n return 'video/quicktime'\n default:\n return ''\n }\n}\n","import { useAlerts } from '@/composables/system/alerts'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport { isUndefined } from '@/utils/common'\nimport { computed } from 'vue'\nimport { i18n } from '@/plugins/i18n'\n\n/**\n * @param accept example: 'image/*,.jpg'\n * @param maxSizes example: { 'image/*': 20000 } or { 'image/png': 20000, 'image/jpg': 20000 } or\n * { '.jpg': 20000, '.png': 20000 } or { '*': 20000, }\n */\nexport function useFormatAndSizeCheck(accept: string | undefined, maxSizes: Record<string, number> | undefined) {\n const acceptKeys = computed(() => {\n if (isUndefined(accept)) {\n return []\n }\n return accept.split(',')\n })\n\n const maxSizeKeys = computed(() => {\n if (isUndefined(maxSizes)) {\n return []\n }\n return Object.keys(maxSizes)\n })\n\n const checkFormatsAndSizes = (files: File[], disableAlert = false) => {\n const incorrectFileNames: string[] = []\n const validFiles = files.filter((file) => {\n const isFileValid = checkFormats(file, acceptKeys.value) && checkSizes(file, maxSizeKeys.value, maxSizes)\n if (!isFileValid) {\n incorrectFileNames.push(file.name)\n }\n return isFileValid\n })\n if (incorrectFileNames.length && !disableAlert) {\n const { showWarning } = useAlerts()\n const { t } = i18n.global\n showWarning(t('system.upload.incorrectFormatSize') + ':' + incorrectFileNames.join(', '))\n }\n\n return validFiles\n }\n\n const checkFormats = (file: File, accepts: string[]) => {\n if (accepts.length === 0) {\n return true\n }\n for (let i = 0; i < accepts.length; i++) {\n if (accepts[i].startsWith('.')) {\n // .format\n if (file.name.toLowerCase().endsWith(accepts[i])) {\n return true\n }\n } else {\n // type\n const splitType = accepts[i].split('/')\n if (splitType[1] === '*' && damFileTypeFix(file).startsWith(splitType[0] + '/')) {\n return true\n } else if (accepts[i] === damFileTypeFix(file)) {\n return true\n }\n }\n }\n return false\n }\n\n const checkSizes = (file: File, keys: Array<string>, sizes: Record<string, number> | undefined) => {\n if (keys.length === 0 || isUndefined(sizes)) {\n return true\n }\n for (let j = 0; j < keys.length; j++) {\n if (keys[j] === '*' && sizes[keys[j]] <= file.size) {\n // *\n return true\n } else if (keys[j].startsWith('.') && sizes[keys[j]] <= file.size) {\n // .format\n return true\n } else {\n // type\n const splitType = keys[j].split('/')\n if (splitType[1] === '*' && damFileTypeFix(file).startsWith(splitType[0] + '/') && sizes[keys[j]] > file.size) {\n return true\n } else if (keys[j] === damFileTypeFix(file) && sizes[keys[j]] > file.size) {\n return true\n }\n }\n }\n return false\n }\n\n return {\n checkFormatsAndSizes,\n }\n}\n","<script setup lang=\"ts\">\nimport { useDropZone } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { useDropzoneGlobalDragState } from '@/components/file/composables/dropzone'\nimport { isNull } from '@/utils/common'\nimport { useFormatAndSizeCheck } from '@/components/file/composables/formatAndSizeCheck'\nimport { useI18n } from 'vue-i18n'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n variant?: 'fill' | 'default' | 'fullscreen'\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n disabled?: boolean\n transparent?: boolean\n size?: 'small' | 'default' | 'large'\n hoverOnly?: boolean\n hideText?: boolean\n }>(),\n {\n variant: 'default',\n accept: undefined,\n maxSizes: undefined,\n disabled: false,\n transparent: false,\n size: 'default',\n hoverOnly: false,\n hideText: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'onDrop', files: File[]): void\n (e: 'onClick'): void\n}>()\n\nconst dropZoneRef = ref<HTMLDivElement>()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(props.accept, props.maxSizes)\n\nfunction onDrop(files: File[] | null) {\n if (props.disabled) return\n if (isNull(files) || files.length === 0) return\n emit('onDrop', checkFormatsAndSizes(files))\n}\n\nconst { isOverDropZone } = useDropZone(dropZoneRef, onDrop)\n\nconst { isDraggingFile } = useDropzoneGlobalDragState()\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n ref=\"dropZoneRef\"\n class=\"a-file-dropzone\"\n :class=\"{\n 'a-file-dropzone--bg': !transparent,\n 'a-file-dropzone--over': isOverDropZone && isDraggingFile,\n 'a-file-dropzone--possibility': isDraggingFile,\n [`a-file-dropzone--${variant}`]: true,\n [`a-file-dropzone--${size}`]: true,\n [`a-file-dropzone--hover-only`]: hoverOnly,\n [`a-file-dropzone--hide-text`]: hideText,\n }\"\n @click.stop=\"emit('onClick')\"\n >\n <div\n v-if=\"disabled\"\n class=\"text\"\n />\n <div\n v-else-if=\"isDraggingFile\"\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropHere') }}\n </div>\n <div\n v-else\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropPossibility') }}\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n$class-name-root: 'a-file-dropzone';\n\n.#{$class-name-root} {\n outline-offset: -4px;\n position: relative;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .text {\n padding: 6px;\n pointer-events: none;\n user-select: none;\n text-align: center;\n border-radius: 5px;\n }\n\n &--fill {\n position: absolute !important;\n inset: 0;\n }\n\n &--bg {\n width: 100%;\n }\n\n &--fullscreen {\n inset: 0;\n position: fixed;\n z-index: 9999;\n }\n\n &--small {\n min-height: 70px;\n }\n\n &--default {\n min-height: 140px;\n }\n\n &--large {\n min-height: 210px;\n }\n\n &--hover-only {\n display: none;\n }\n\n &--hide-text .text {\n display: none;\n }\n\n &.#{$class-name-root}--hover-only.#{$class-name-root}--possibility {\n display: flex;\n }\n}\n\n.v-theme--light {\n .#{$class-name-root} {\n .text {\n background-color: rgba(212 212 212 / 50%);\n }\n\n &--bg {\n background-color: #d4d4d4;\n }\n\n &--over:not(&--disabled) {\n background-color: #dcedc8;\n outline: 2px dashed #7cb342;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #e5edf1;\n outline: 2px dashed #bacfd4;\n }\n }\n}\n\n.v-theme--dark {\n .#{$class-name-root} {\n .text {\n background-color: rgba(57 57 57 / 50%);\n }\n\n &--bg {\n background-color: #393939;\n }\n\n &--over:not(&--disabled) {\n background-color: #283121;\n outline: 2px dashed #333e28;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #212531;\n outline: 2px dashed #01579b;\n }\n }\n}\n</style>\n","import { ref } from 'vue'\nimport type { CommonAdminImageOptions } from '@/AnzuSystemsCommonAdmin'\nimport { isUndefined } from '@/utils/common'\n\nconst imageOptions = ref<CommonAdminImageOptions>(undefined)\n\nexport function initCommonAdminImageOptions(data: CommonAdminImageOptions) {\n imageOptions.value = data\n}\n\nexport function useCommonAdminImageOptions(configName: string = 'default') {\n if (\n isUndefined(imageOptions.value) ||\n isUndefined(imageOptions.value.configs) ||\n isUndefined(imageOptions.value.configs[configName])\n ) {\n throw new Error(\"Composable can't be used without properly configured common admin.\")\n }\n\n return {\n imageClient: imageOptions.value.configs[configName].imageClient,\n previewDomain: imageOptions.value.configs[configName].previewDomain,\n imageWidth: imageOptions.value.configs[configName].width,\n imageHeight: imageOptions.value.configs[configName].height,\n }\n}\n","import type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport type { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\n\nexport function useImageActions(config: ReturnType<typeof useCommonAdminImageOptions>) {\n const widgetImageToDamImageUrl = (\n image: ImageAware | ImageCreateUpdateAware,\n width = config.imageWidth,\n height = config.imageHeight,\n random = true\n ) => {\n return (\n config.previewDomain +\n '/image/w' +\n width +\n '-h' +\n height +\n (image.dam.regionPosition > 0 ? '-c' + image.dam.regionPosition : '') +\n '/' +\n image.dam.damId +\n '.jpg' +\n (random ? '?random=' + Date.now() : '')\n )\n }\n\n return {\n widgetImageToDamImageUrl,\n }\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport { computed } from 'vue'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport function useDamAcceptTypeAndSizeHelper(\n assetType: undefined | DamAssetType = undefined,\n damConfigExtSystem: DamExtSystemConfig\n) {\n const createSizesByAssetType = (assetType: DamAssetType) => {\n const sizes: Record<string, number> = {}\n for (let i = 0; i < damConfigExtSystem[assetType].mimeTypes.length; i++) {\n sizes[damConfigExtSystem[assetType].mimeTypes[i]] = damConfigExtSystem[assetType].sizeLimit\n }\n return sizes\n }\n\n const uploadSizes = computed(() => {\n if (assetType) {\n return {\n ...createSizesByAssetType(assetType),\n }\n }\n return {\n ...createSizesByAssetType(DamAssetType.Image),\n ...createSizesByAssetType(DamAssetType.Audio),\n ...createSizesByAssetType(DamAssetType.Video),\n ...createSizesByAssetType(DamAssetType.Document),\n }\n })\n\n const uploadAccept = computed(() => {\n return Object.keys(uploadSizes.value).join(',')\n })\n\n return {\n uploadSizes,\n uploadAccept,\n }\n}\n\n","import type { CancelTokenSource } from 'axios'\nimport type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport type {\n AssetExternalProviderIdNullable,\n AssetExternalProviderMetadata,\n DamAssetStatus,\n DamAssetType\n} from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason, AssetFileLink } from '@/types/coreDam/AssetFile'\nimport type { ImageAware } from '@/types/ImageAware'\n\nexport type UploadQueueKey = string\n\nexport interface UploadQueue {\n items: UploadQueueItem[]\n totalCount: number\n processedCount: number\n fileInputKey: number // used to reset html input file element\n\n suggestions: {\n newKeywordNames: Set<string>\n newAuthorNames: Set<string>\n }\n}\n\nexport enum UploadQueueItemType {\n File = 'file',\n Asset = 'asset',\n ExternalProviderAsset = 'externalProviderAsset',\n SlotFile = 'slotFile',\n}\n\nexport enum UploadQueueItemStatus {\n Loading = 'loading', // loading additional api data\n Waiting = 'waiting', // waiting to be uploaded\n Uploading = 'uploading', // uploading right now\n Processing = 'processing', // all data sent by FE, server processing, waiting for notification, todo\n Failed = 'failed', // any error\n Uploaded = 'uploaded', // uploaded/ready after loading\n Stop = 'stop', // after hitting stop upload\n}\n\nexport interface UploadQueueItem {\n key: string\n file: File | null\n status: UploadQueueItemStatus\n assetStatus: DamAssetStatus\n isDuplicate: boolean\n type: UploadQueueItemType\n assetType: DamAssetType\n displayTitle: string\n assetId: DocIdNullable\n duplicateAssetId: DocIdNullable\n fileId: DocIdNullable\n externalProviderAssetId: AssetExternalProviderIdNullable\n externalProviderName: string | null\n externalProviderMetadata: AssetExternalProviderMetadata\n latestChunkCancelToken: CancelTokenSource | null\n chunkSize: number\n currentChunkIndex: number\n chunkTotalCount: number\n licenceId: IntegerId\n imagePreview?: AssetFileLink\n canEditMetadata: boolean\n keywords: DocId[]\n authors: DocId[]\n customData: any\n authorConflicts: DocId[]\n progress: {\n remainingTime: null | number\n progressPercent: null | number\n speed: null | number\n }\n error: {\n hasError: boolean\n message: string\n assetFileFailReason: AssetFileFailReason\n }\n notificationFallbackTimer: ReturnType<typeof setTimeout> | undefined\n notificationFallbackTry: number\n slotName: string | null\n image: undefined | ImageAware // todo check\n}\n\nexport interface DamUploadStartResponse {\n id: DocId\n asset: DocId\n}\n","import type { DocId, DocIdNullable } from '@/types/common'\nimport type { AnzuUserAndTimeTrackingAware } from '@/types/AnzuUserAndTimeTrackingAware'\n\nexport enum AssetFileProcessStatus {\n Uploading = 'uploading', // file entity created and ready to receive chunks\n Uploaded = 'uploaded', // all chunks were sent\n Stored = 'stored', // File is stored and ready to processing\n Duplicate = 'duplicate', // AssetFile is duplicate of another asset\n Processed = 'processed', // file processed and ready to serve\n Failed = 'failed',\n}\n\nexport enum AssetFileFailReason {\n None = 'none',\n Unknown = 'unknown',\n InvalidChecksum = 'invalid_checksum',\n InvalidMimeType = 'invalid_mime_type',\n DownloadFailed = 'download_failed',\n InvalidSize = 'invalid_size',\n Default = None,\n}\n\nexport enum AssetFileRouteStatus {\n Disabled = 'disabled',\n Active = 'active',\n Default = Disabled,\n}\n\ninterface FileAttributes {\n status: AssetFileProcessStatus\n mimeType: string\n size: number\n originFileName: string\n originUrl: string\n failReason: AssetFileFailReason\n}\n\nexport enum AssetFileLinkType {\n Image = 'image',\n Audio = 'audio',\n Default = Image,\n}\n\nexport interface AssetFileLink {\n width: number\n height: number\n requestedWidth: number\n requestedHeight: number\n url: string\n title: string\n type: AssetFileLinkType\n}\n\nexport interface AssetFileRoute {\n id: DocId\n status: AssetFileRouteStatus\n main: boolean,\n publicUrl: string\n _resourceName: 'assetFileRoute'\n}\n\nexport interface AssetFileMainRouteAware {\n mainRoute?: AssetFileRoute\n}\n\nexport type AssetFileLinks =\n | Record<'image_list' | 'image_table' | 'image_detail' | 'audio', AssetFileLink>\n | Record<string, never>\n\nexport interface AssetFileImage extends AnzuUserAndTimeTrackingAware, AssetFileMainRouteAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n imageAttributes: ImageAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n metadata: Metadata\n _resourceName: 'imageFile'\n}\n\nexport interface AssetFileAudio extends AnzuUserAndTimeTrackingAware, AssetFileMainRouteAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n audioAttributes: AudioAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n _resourceName: 'audioFile'\n}\n\nexport interface AssetFileVideo extends AnzuUserAndTimeTrackingAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n videoAttributes: VideoAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n imagePreview: AssetFileImagePreviewNullable\n _resourceName: 'videoFile'\n}\n\nexport interface AssetFileDocument extends AnzuUserAndTimeTrackingAware, AssetFileMainRouteAware {\n id: DocId\n asset: DocId\n fileAttributes: FileAttributes\n documentAttributes: DocumentAttributes\n originAssetFile: DocIdNullable\n links?: AssetFileLinks\n _resourceName: 'documentFile'\n}\n\nexport interface AssetFileDownloadLink extends AnzuUserAndTimeTrackingAware {\n id: DocId\n link: string\n _system: string\n _resourceName: 'imageFile'\n}\n\nexport type AssetFile = AssetFileImage | AssetFileAudio | AssetFileVideo | AssetFileDocument\n\nexport type AssetFileNullable = AssetFileImage | AssetFileAudio | AssetFileVideo | AssetFileDocument | null\n\nexport const assetFileIsImageFile = (value: any): value is AssetFileImage => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'imageFile'\n}\n\nexport const assetFileIsVideoFile = (value: any): value is AssetFileVideo => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'videoFile'\n}\n\nexport const assetFileIsAudioFile = (value: any): value is AssetFileAudio => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'audioFile'\n}\n\nexport const assetFileIsDocumentFile = (value: any): value is AssetFileDocument => {\n if (!value || !value._resourceName) return false\n return value._resourceName === 'documentFile'\n}\n\ninterface ImageAttributes {\n ratioWidth: number\n ratioHeight: number\n width: number\n height: number\n rotation: number\n mostDominantColor: string\n animated: boolean\n}\n\ninterface Metadata {\n exifData: [] // todo check\n id: string\n createdAt: string\n modifiedAt: string\n createdBy: number\n modifiedBy: number\n}\n\ninterface AudioAttributes {\n duration: number\n codecName: string\n bitrate: number\n}\n\ninterface DocumentAttributes {\n pageCount: number\n}\n\ninterface VideoAttributes {\n bitrate: number\n codecName: string\n duration: number\n height: number\n ratioHeight: number\n ratioWidth: number\n rotation: number\n width: number\n}\n\nexport interface AssetFileImagePreview {\n imageFile: DocId\n position: number\n}\n\nexport type AssetFileImagePreviewNullable = AssetFileImagePreview | null\n","import type { UploadQueueItem, UploadQueueItemStatus, UploadQueueItemType } from '@/types/coreDam/UploadQueue'\nimport type { IntegerId } from '@/types/common'\nimport { DamAssetStatus, type DamAssetType } from '@/types/coreDam/Asset'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\n\nexport function useUploadQueueItemFactory() {\n const createDefault = (\n key: string,\n type: UploadQueueItemType,\n status: UploadQueueItemStatus,\n assetType: DamAssetType,\n chunkSize: number,\n licenceId: IntegerId\n ): UploadQueueItem => {\n return {\n key: key,\n type: type,\n file: null,\n status: status,\n isDuplicate: false,\n duplicateAssetId: null,\n assetType: assetType,\n assetStatus: DamAssetStatus.Default,\n displayTitle: '',\n assetId: null,\n fileId: null,\n externalProviderAssetId: null,\n externalProviderName: null,\n externalProviderMetadata: {},\n keywords: [],\n authors: [],\n authorConflicts: [],\n customData: {},\n latestChunkCancelToken: null,\n chunkSize: chunkSize,\n currentChunkIndex: 0,\n chunkTotalCount: 0,\n licenceId: licenceId,\n imagePreview: undefined,\n progress: {\n remainingTime: null,\n progressPercent: null,\n speed: null,\n },\n canEditMetadata: false,\n error: {\n hasError: false,\n message: '',\n assetFileFailReason: AssetFileFailReason.Default,\n },\n notificationFallbackTimer: undefined,\n notificationFallbackTry: 1,\n slotName: null,\n image: undefined,\n }\n }\n\n return {\n createDefault,\n }\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\n\nexport const getAssetTypeByMimeType = (\n mimeType: string,\n damConfigExtSystem: DamExtSystemConfig\n): DamAssetType | null => {\n for (const [key, values] of Object.entries(damConfigExtSystem)) {\n if (!Object.values(DamAssetType).includes(key as DamAssetType)) continue\n for (let i = 0; i < values.mimeTypes.length; i++) {\n if (mimeType === values.mimeTypes[i]) return key as DamAssetType\n }\n }\n return null\n}\n","import { ref } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isNull } from '@/utils/common'\n\nconst chunkSize = ref<number | undefined>(undefined)\n\nexport function useDamUploadChunkSize(apiTimeout: number = 30) {\n const { damPrvConfig } = useDamConfigState()\n const lastChunkSize = ref(chunkSize.value || damPrvConfig.value.settings.imageChunkConfig.minSize)\n\n const minUploadTimeThreshold = apiTimeout / 5\n const idealUploadTimeThreshold = apiTimeout / 4\n const maxUploadTimeThreshold = apiTimeout / 2\n\n const updateChunkSize = (speed: number | null) => {\n if (isNull(speed)) {\n return false\n }\n\n const expectedChunkUploadSpeed = lastChunkSize.value / speed\n if (expectedChunkUploadSpeed > maxUploadTimeThreshold) {\n lastChunkSize.value = returnFromRange(maxUploadTimeThreshold * speed)\n chunkSize.value = lastChunkSize.value\n\n return true\n }\n if (expectedChunkUploadSpeed < minUploadTimeThreshold) {\n lastChunkSize.value = returnFromRange(idealUploadTimeThreshold * speed)\n chunkSize.value = lastChunkSize.value\n\n return true\n }\n\n return false\n }\n\n const returnFromRange = (value: number) => {\n if (value > damPrvConfig.value.settings.imageChunkConfig.maxSize) {\n return damPrvConfig.value.settings.imageChunkConfig.maxSize\n }\n if (value < damPrvConfig.value.settings.imageChunkConfig.minSize) {\n return damPrvConfig.value.settings.imageChunkConfig.minSize\n }\n\n return value\n }\n\n return {\n lastChunkSize,\n updateChunkSize,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport { type UploadQueueItem, UploadQueueItemType } from '@/types/coreDam/UploadQueue'\nimport type { DocId } from '@/types/common'\nimport { HTTP_STATUS_CREATED, HTTP_STATUS_OK } from '@/composables/statusCodes'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\n\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nconst END_POINT = '/adm/v1/image'\nconst CHUNK_UPLOAD_TIMEOUT = 420\n\nexport const fetchImageFile = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<AssetFileImage>(client, END_POINT + '/:id', { id }, SYSTEM_CORE_DAM, 'asset')\n\nexport const imageUploadStart = (client: () => AxiosInstance, item: UploadQueueItem) => {\n return new Promise((resolve, reject) => {\n let url = END_POINT + '/licence/' + item.licenceId\n if (item.type === UploadQueueItemType.SlotFile && item.slotName && item.assetId) {\n url = END_POINT + '/asset/' + item.assetId + '/slot-name/' + item.slotName\n }\n client()\n .post(\n url,\n JSON.stringify({\n mimeType: damFileTypeFix(item.file),\n size: item.file?.size,\n })\n )\n .then((res) => {\n if (res.status === HTTP_STATUS_CREATED) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const imageUploadChunk = (\n client: (timeout?: number) => AxiosInstance,\n item: UploadQueueItem,\n imageId: DocId,\n buffer: string,\n size: number,\n offset: number,\n onUploadProgressCallback: ((progressEvent: any) => void) | undefined = undefined\n) => {\n return new Promise((resolve, reject) => {\n const formData = new FormData()\n const url = END_POINT + '/' + imageId + '/chunk'\n formData.append('file', buffer)\n formData.append(\n 'chunk',\n JSON.stringify({\n offset: offset,\n size: size,\n })\n )\n\n client(CHUNK_UPLOAD_TIMEOUT)\n .post(url, formData, {\n cancelToken: item.latestChunkCancelToken ? item.latestChunkCancelToken.token : undefined,\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress: onUploadProgressCallback,\n })\n .then((res) => {\n if (res.status === HTTP_STATUS_CREATED) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const imageUploadFinish = (client: () => AxiosInstance, item: UploadQueueItem, sha: string) => {\n return new Promise((resolve, reject) => {\n const url = END_POINT + '/' + item.fileId + '/uploaded'\n client()\n .patch(\n url,\n JSON.stringify({\n checksum: sha,\n })\n )\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n\nexport const rotateImage = (client: () => AxiosInstance, imageId: DocId, angle: 90 | 270) => {\n return new Promise((resolve, reject) => {\n const url = END_POINT + '/' + imageId + '/rotate/' + angle\n client()\n .patch(url)\n .then((res) => {\n if (res.status === HTTP_STATUS_OK) {\n resolve(res.data)\n } else {\n //\n reject()\n }\n })\n .catch((err) => {\n //\n reject(err)\n })\n })\n}\n","import { DamAssetType } from '@/types/coreDam/Asset'\nimport { type DamUploadStartResponse, type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport {\n imageUploadChunk,\n imageUploadFinish,\n imageUploadStart,\n} from '@/components/damImage/uploadQueue/api/damImageApi'\nimport type { AxiosInstance } from 'axios'\nimport type { DocId } from '@/types/common'\nimport { AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { fetchAsset } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\n\nconst NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS = 10\nconst NOTIFICATION_FALLBACK_MAX_TRIES = 3\n\nexport const damUploadStart: (client: () => AxiosInstance, item: UploadQueueItem) => Promise<DamUploadStartResponse> = (\n client: () => AxiosInstance,\n item: UploadQueueItem\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadStart(client, item)\n .then((res) => {\n resolve(res as DamUploadStartResponse)\n return\n })\n .catch((err) => reject(err))\n })\n}\n\nexport const damUploadChunk = (\n client: () => AxiosInstance,\n item: UploadQueueItem,\n imageId: DocId,\n buffer: string,\n size: number,\n offset: number,\n onUploadProgressCallback: any\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadChunk(client, item, imageId, buffer, size, offset, onUploadProgressCallback)\n .then((res) => {\n resolve(res)\n })\n .catch((err) => {\n reject(err)\n })\n })\n}\n\nexport const damUploadFinish = (\n client: () => AxiosInstance,\n item: UploadQueueItem,\n sha: string,\n uploadStatusFallback: boolean\n) => {\n return new Promise((resolve, reject) => {\n if (item.assetType !== DamAssetType.Image) {\n reject()\n return\n }\n imageUploadFinish(client, item, sha)\n .then((res) => {\n item.status = UploadQueueItemStatus.Processing\n if (uploadStatusFallback) {\n item.notificationFallbackTimer = setTimeout(function () {\n notificationFallbackCallback(client, item)\n }, calculateFallbackTime(item))\n }\n resolve(res)\n })\n .catch((err) => reject(err))\n })\n}\n\nfunction calculateFallbackTime(item: UploadQueueItem) {\n return NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS * 1000 * item.notificationFallbackTry * item.notificationFallbackTry\n}\n\nasync function notificationFallbackCallback(client: () => AxiosInstance, item: UploadQueueItem) {\n clearTimeout(item.notificationFallbackTimer)\n if (item.status === UploadQueueItemStatus.Uploaded) return\n if (item.notificationFallbackTry > NOTIFICATION_FALLBACK_MAX_TRIES) return\n if (!item.assetId) return\n const asset = await fetchAsset(client, item.assetId)\n if (asset && asset.mainFile && asset.mainFile.fileAttributes) {\n const uploadQueuesStore = useUploadQueuesStore()\n if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Processed) {\n uploadQueuesStore.queueItemProcessed(asset.id)\n return\n } else if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Duplicate) {\n uploadQueuesStore.queueItemDuplicate(asset.id)\n return\n } else if (asset.mainFile.fileAttributes.status === AssetFileProcessStatus.Failed) {\n uploadQueuesStore.queueItemFailed(asset.id, asset.mainFile.fileAttributes.failReason)\n return\n }\n }\n item.notificationFallbackTry++\n item.notificationFallbackTimer = setTimeout(function () {\n notificationFallbackCallback(client, item)\n }, calculateFallbackTime(item))\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Rusha\"] = factory();\n\telse\n\t\troot[\"Rusha\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar RushaCore = __webpack_require__(5);\n\nvar _require = __webpack_require__(1),\n toHex = _require.toHex,\n ceilHeapSize = _require.ceilHeapSize;\n\nvar conv = __webpack_require__(6);\n\n// Calculate the length of buffer that the sha1 routine uses\n// including the padding.\nvar padlen = function (len) {\n for (len += 9; len % 64 > 0; len += 1) {}\n return len;\n};\n\nvar padZeroes = function (bin, len) {\n var h8 = new Uint8Array(bin.buffer);\n var om = len % 4,\n align = len - om;\n switch (om) {\n case 0:\n h8[align + 3] = 0;\n case 1:\n h8[align + 2] = 0;\n case 2:\n h8[align + 1] = 0;\n case 3:\n h8[align + 0] = 0;\n }\n for (var i = (len >> 2) + 1; i < bin.length; i++) {\n bin[i] = 0;\n }\n};\n\nvar padData = function (bin, chunkLen, msgLen) {\n bin[chunkLen >> 2] |= 0x80 << 24 - (chunkLen % 4 << 3);\n // To support msgLen >= 2 GiB, use a float division when computing the\n // high 32-bits of the big-endian message length in bits.\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 14] = msgLen / (1 << 29) | 0;\n bin[((chunkLen >> 2) + 2 & ~0x0f) + 15] = msgLen << 3;\n};\n\nvar getRawDigest = function (heap, padMaxChunkLen) {\n var io = new Int32Array(heap, padMaxChunkLen + 320, 5);\n var out = new Int32Array(5);\n var arr = new DataView(out.buffer);\n arr.setInt32(0, io[0], false);\n arr.setInt32(4, io[1], false);\n arr.setInt32(8, io[2], false);\n arr.setInt32(12, io[3], false);\n arr.setInt32(16, io[4], false);\n return out;\n};\n\nvar Rusha = function () {\n function Rusha(chunkSize) {\n _classCallCheck(this, Rusha);\n\n chunkSize = chunkSize || 64 * 1024;\n if (chunkSize % 64 > 0) {\n throw new Error('Chunk size must be a multiple of 128 bit');\n }\n this._offset = 0;\n this._maxChunkLen = chunkSize;\n this._padMaxChunkLen = padlen(chunkSize);\n // The size of the heap is the sum of:\n // 1. The padded input message size\n // 2. The extended space the algorithm needs (320 byte)\n // 3. The 160 bit state the algoritm uses\n this._heap = new ArrayBuffer(ceilHeapSize(this._padMaxChunkLen + 320 + 20));\n this._h32 = new Int32Array(this._heap);\n this._h8 = new Int8Array(this._heap);\n this._core = new RushaCore({ Int32Array: Int32Array }, {}, this._heap);\n }\n\n Rusha.prototype._initState = function _initState(heap, padMsgLen) {\n this._offset = 0;\n var io = new Int32Array(heap, padMsgLen + 320, 5);\n io[0] = 1732584193;\n io[1] = -271733879;\n io[2] = -1732584194;\n io[3] = 271733878;\n io[4] = -1009589776;\n };\n\n Rusha.prototype._padChunk = function _padChunk(chunkLen, msgLen) {\n var padChunkLen = padlen(chunkLen);\n var view = new Int32Array(this._heap, 0, padChunkLen >> 2);\n padZeroes(view, chunkLen);\n padData(view, chunkLen, msgLen);\n return padChunkLen;\n };\n\n Rusha.prototype._write = function _write(data, chunkOffset, chunkLen, off) {\n conv(data, this._h8, this._h32, chunkOffset, chunkLen, off || 0);\n };\n\n Rusha.prototype._coreCall = function _coreCall(data, chunkOffset, chunkLen, msgLen, finalize) {\n var padChunkLen = chunkLen;\n this._write(data, chunkOffset, chunkLen);\n if (finalize) {\n padChunkLen = this._padChunk(chunkLen, msgLen);\n }\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n };\n\n Rusha.prototype.rawDigest = function rawDigest(str) {\n var msgLen = str.byteLength || str.length || str.size || 0;\n this._initState(this._heap, this._padMaxChunkLen);\n var chunkOffset = 0,\n chunkLen = this._maxChunkLen;\n for (chunkOffset = 0; msgLen > chunkOffset + chunkLen; chunkOffset += chunkLen) {\n this._coreCall(str, chunkOffset, chunkLen, msgLen, false);\n }\n this._coreCall(str, chunkOffset, msgLen - chunkOffset, msgLen, true);\n return getRawDigest(this._heap, this._padMaxChunkLen);\n };\n\n Rusha.prototype.digest = function digest(str) {\n return toHex(this.rawDigest(str).buffer);\n };\n\n Rusha.prototype.digestFromString = function digestFromString(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromBuffer = function digestFromBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.digestFromArrayBuffer = function digestFromArrayBuffer(str) {\n return this.digest(str);\n };\n\n Rusha.prototype.resetState = function resetState() {\n this._initState(this._heap, this._padMaxChunkLen);\n return this;\n };\n\n Rusha.prototype.append = function append(chunk) {\n var chunkOffset = 0;\n var chunkLen = chunk.byteLength || chunk.length || chunk.size || 0;\n var turnOffset = this._offset % this._maxChunkLen;\n var inputLen = void 0;\n\n this._offset += chunkLen;\n while (chunkOffset < chunkLen) {\n inputLen = Math.min(chunkLen - chunkOffset, this._maxChunkLen - turnOffset);\n this._write(chunk, chunkOffset, inputLen, turnOffset);\n turnOffset += inputLen;\n chunkOffset += inputLen;\n if (turnOffset === this._maxChunkLen) {\n this._core.hash(this._maxChunkLen, this._padMaxChunkLen);\n turnOffset = 0;\n }\n }\n return this;\n };\n\n Rusha.prototype.getState = function getState() {\n var turnOffset = this._offset % this._maxChunkLen;\n var heap = void 0;\n if (!turnOffset) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n heap = io.buffer.slice(io.byteOffset, io.byteOffset + io.byteLength);\n } else {\n heap = this._heap.slice(0);\n }\n return {\n offset: this._offset,\n heap: heap\n };\n };\n\n Rusha.prototype.setState = function setState(state) {\n this._offset = state.offset;\n if (state.heap.byteLength === 20) {\n var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n io.set(new Int32Array(state.heap));\n } else {\n this._h32.set(new Int32Array(state.heap));\n }\n return this;\n };\n\n Rusha.prototype.rawEnd = function rawEnd() {\n var msgLen = this._offset;\n var chunkLen = msgLen % this._maxChunkLen;\n var padChunkLen = this._padChunk(chunkLen, msgLen);\n this._core.hash(padChunkLen, this._padMaxChunkLen);\n var result = getRawDigest(this._heap, this._padMaxChunkLen);\n this._initState(this._heap, this._padMaxChunkLen);\n return result;\n };\n\n Rusha.prototype.end = function end() {\n return toHex(this.rawEnd().buffer);\n };\n\n return Rusha;\n}();\n\nmodule.exports = Rusha;\nmodule.exports._core = RushaCore;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n/* eslint-env commonjs, browser */\n\n//\n// toHex\n//\n\nvar precomputedHex = new Array(256);\nfor (var i = 0; i < 256; i++) {\n precomputedHex[i] = (i < 0x10 ? '0' : '') + i.toString(16);\n}\n\nmodule.exports.toHex = function (arrayBuffer) {\n var binarray = new Uint8Array(arrayBuffer);\n var res = new Array(arrayBuffer.byteLength);\n for (var _i = 0; _i < res.length; _i++) {\n res[_i] = precomputedHex[binarray[_i]];\n }\n return res.join('');\n};\n\n//\n// ceilHeapSize\n//\n\nmodule.exports.ceilHeapSize = function (v) {\n // The asm.js spec says:\n // The heap object's byteLength must be either\n // 2^n for n in [12, 24) or 2^24 * n for n ≥ 1.\n // Also, byteLengths smaller than 2^16 are deprecated.\n var p = 0;\n // If v is smaller than 2^16, the smallest possible solution\n // is 2^16.\n if (v <= 65536) return 65536;\n // If v < 2^24, we round up to 2^n,\n // otherwise we round up to 2^24 * n.\n if (v < 16777216) {\n for (p = 1; p < v; p = p << 1) {}\n } else {\n for (p = 16777216; p < v; p += 16777216) {}\n }\n return p;\n};\n\n//\n// isDedicatedWorkerScope\n//\n\nmodule.exports.isDedicatedWorkerScope = function (self) {\n var isRunningInWorker = 'WorkerGlobalScope' in self && self instanceof self.WorkerGlobalScope;\n var isRunningInSharedWorker = 'SharedWorkerGlobalScope' in self && self instanceof self.SharedWorkerGlobalScope;\n var isRunningInServiceWorker = 'ServiceWorkerGlobalScope' in self && self instanceof self.ServiceWorkerGlobalScope;\n\n // Detects whether we run inside a dedicated worker or not.\n //\n // We can't just check for `DedicatedWorkerGlobalScope`, since IE11\n // has a bug where it only supports `WorkerGlobalScope`.\n //\n // Therefore, we consider us as running inside a dedicated worker\n // when we are running inside a worker, but not in a shared or service worker.\n //\n // When new types of workers are introduced, we will need to adjust this code.\n return isRunningInWorker && !isRunningInSharedWorker && !isRunningInServiceWorker;\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, worker */\n\nmodule.exports = function () {\n var Rusha = __webpack_require__(0);\n\n var hashData = function (hasher, data, cb) {\n try {\n return cb(null, hasher.digest(data));\n } catch (e) {\n return cb(e);\n }\n };\n\n var hashFile = function (hasher, readTotal, blockSize, file, cb) {\n var reader = new self.FileReader();\n reader.onloadend = function onloadend() {\n if (reader.error) {\n return cb(reader.error);\n }\n var buffer = reader.result;\n readTotal += reader.result.byteLength;\n try {\n hasher.append(buffer);\n } catch (e) {\n cb(e);\n return;\n }\n if (readTotal < file.size) {\n hashFile(hasher, readTotal, blockSize, file, cb);\n } else {\n cb(null, hasher.end());\n }\n };\n reader.readAsArrayBuffer(file.slice(readTotal, readTotal + blockSize));\n };\n\n var workerBehaviourEnabled = true;\n\n self.onmessage = function (event) {\n if (!workerBehaviourEnabled) {\n return;\n }\n\n var data = event.data.data,\n file = event.data.file,\n id = event.data.id;\n if (typeof id === 'undefined') return;\n if (!file && !data) return;\n var blockSize = event.data.blockSize || 4 * 1024 * 1024;\n var hasher = new Rusha(blockSize);\n hasher.resetState();\n var done = function (err, hash) {\n if (!err) {\n self.postMessage({ id: id, hash: hash });\n } else {\n self.postMessage({ id: id, error: err.name });\n }\n };\n if (data) hashData(hasher, data, done);\n if (file) hashFile(hasher, 0, blockSize, file, done);\n };\n\n return function () {\n workerBehaviourEnabled = false;\n };\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, browser */\n\nvar work = __webpack_require__(4);\nvar Rusha = __webpack_require__(0);\nvar createHash = __webpack_require__(7);\nvar runWorker = __webpack_require__(2);\n\nvar _require = __webpack_require__(1),\n isDedicatedWorkerScope = _require.isDedicatedWorkerScope;\n\nvar isRunningInDedicatedWorker = typeof self !== 'undefined' && isDedicatedWorkerScope(self);\n\nRusha.disableWorkerBehaviour = isRunningInDedicatedWorker ? runWorker() : function () {};\n\nRusha.createWorker = function () {\n var worker = work(/*require.resolve*/(2));\n var terminate = worker.terminate;\n worker.terminate = function () {\n URL.revokeObjectURL(worker.objectURL);\n terminate.call(worker);\n };\n return worker;\n};\n\nRusha.createHash = createHash;\n\nmodule.exports = Rusha;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction webpackBootstrapFunc (modules) {\n/******/ // The module cache\n/******/ var installedModules = {};\n\n/******/ // The require function\n/******/ function __webpack_require__(moduleId) {\n\n/******/ // Check if module is in cache\n/******/ if(installedModules[moduleId])\n/******/ return installedModules[moduleId].exports;\n\n/******/ // Create a new module (and put it into the cache)\n/******/ var module = installedModules[moduleId] = {\n/******/ i: moduleId,\n/******/ l: false,\n/******/ exports: {}\n/******/ };\n\n/******/ // Execute the module function\n/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ // Flag the module as loaded\n/******/ module.l = true;\n\n/******/ // Return the exports of the module\n/******/ return module.exports;\n/******/ }\n\n/******/ // expose the modules object (__webpack_modules__)\n/******/ __webpack_require__.m = modules;\n\n/******/ // expose the module cache\n/******/ __webpack_require__.c = installedModules;\n\n/******/ // identity function for calling harmony imports with the correct context\n/******/ __webpack_require__.i = function(value) { return value; };\n\n/******/ // define getter function for harmony exports\n/******/ __webpack_require__.d = function(exports, name, getter) {\n/******/ if(!__webpack_require__.o(exports, name)) {\n/******/ Object.defineProperty(exports, name, {\n/******/ configurable: false,\n/******/ enumerable: true,\n/******/ get: getter\n/******/ });\n/******/ }\n/******/ };\n\n/******/ // define __esModule on exports\n/******/ __webpack_require__.r = function(exports) {\n/******/ Object.defineProperty(exports, '__esModule', { value: true });\n/******/ };\n\n/******/ // getDefaultExport function for compatibility with non-harmony modules\n/******/ __webpack_require__.n = function(module) {\n/******/ var getter = module && module.__esModule ?\n/******/ function getDefault() { return module['default']; } :\n/******/ function getModuleExports() { return module; };\n/******/ __webpack_require__.d(getter, 'a', getter);\n/******/ return getter;\n/******/ };\n\n/******/ // Object.prototype.hasOwnProperty.call\n/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n/******/ // __webpack_public_path__\n/******/ __webpack_require__.p = \"/\";\n\n/******/ // on error function for async loading\n/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n var f = __webpack_require__(__webpack_require__.s = ENTRY_MODULE)\n return f.default || f // try to call default if defined to also support babel esmodule exports\n}\n\nvar moduleNameReqExp = '[\\\\.|\\\\-|\\\\+|\\\\w|\\/|@]+'\nvar dependencyRegExp = '\\\\((\\/\\\\*.*?\\\\*\\/)?\\s?.*?(' + moduleNameReqExp + ').*?\\\\)' // additional chars when output.pathinfo is true\n\n// http://stackoverflow.com/a/2593661/130442\nfunction quoteRegExp (str) {\n return (str + '').replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&')\n}\n\nfunction getModuleDependencies (sources, module, queueName) {\n var retval = {}\n retval[queueName] = []\n\n var fnString = module.toString()\n var wrapperSignature = fnString.match(/^function\\s?\\(\\w+,\\s*\\w+,\\s*(\\w+)\\)/)\n if (!wrapperSignature) return retval\n var webpackRequireName = wrapperSignature[1]\n\n // main bundle deps\n var re = new RegExp('(\\\\\\\\n|\\\\W)' + quoteRegExp(webpackRequireName) + dependencyRegExp, 'g')\n var match\n while ((match = re.exec(fnString))) {\n if (match[3] === 'dll-reference') continue\n retval[queueName].push(match[3])\n }\n\n // dll deps\n re = new RegExp('\\\\(' + quoteRegExp(webpackRequireName) + '\\\\(\"(dll-reference\\\\s(' + moduleNameReqExp + '))\"\\\\)\\\\)' + dependencyRegExp, 'g')\n while ((match = re.exec(fnString))) {\n if (!sources[match[2]]) {\n retval[queueName].push(match[1])\n sources[match[2]] = __webpack_require__(match[1]).m\n }\n retval[match[2]] = retval[match[2]] || []\n retval[match[2]].push(match[4])\n }\n\n return retval\n}\n\nfunction hasValuesInQueues (queues) {\n var keys = Object.keys(queues)\n return keys.reduce(function (hasValues, key) {\n return hasValues || queues[key].length > 0\n }, false)\n}\n\nfunction getRequiredModules (sources, moduleId) {\n var modulesQueue = {\n main: [moduleId]\n }\n var requiredModules = {\n main: []\n }\n var seenModules = {\n main: {}\n }\n\n while (hasValuesInQueues(modulesQueue)) {\n var queues = Object.keys(modulesQueue)\n for (var i = 0; i < queues.length; i++) {\n var queueName = queues[i]\n var queue = modulesQueue[queueName]\n var moduleToCheck = queue.pop()\n seenModules[queueName] = seenModules[queueName] || {}\n if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue\n seenModules[queueName][moduleToCheck] = true\n requiredModules[queueName] = requiredModules[queueName] || []\n requiredModules[queueName].push(moduleToCheck)\n var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName)\n var newModulesKeys = Object.keys(newModules)\n for (var j = 0; j < newModulesKeys.length; j++) {\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || []\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]])\n }\n }\n }\n\n return requiredModules\n}\n\nmodule.exports = function (moduleId, options) {\n options = options || {}\n var sources = {\n main: __webpack_require__.m\n }\n\n var requiredModules = options.all ? { main: Object.keys(sources) } : getRequiredModules(sources, moduleId)\n\n var src = ''\n\n Object.keys(requiredModules).filter(function (m) { return m !== 'main' }).forEach(function (module) {\n var entryModule = 0\n while (requiredModules[module][entryModule]) {\n entryModule++\n }\n requiredModules[module].push(entryModule)\n sources[module][entryModule] = '(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })'\n src = src + 'var ' + module + ' = (' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(entryModule)) + ')({' + requiredModules[module].map(function (id) { return '' + JSON.stringify(id) + ': ' + sources[module][id].toString() }).join(',') + '});\\n'\n })\n\n src = src + '(' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(moduleId)) + ')({' + requiredModules.main.map(function (id) { return '' + JSON.stringify(id) + ': ' + sources.main[id].toString() }).join(',') + '})(self);'\n\n var blob = new window.Blob([src], { type: 'text/javascript' })\n if (options.bare) { return blob }\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL\n\n var workerUrl = URL.createObjectURL(blob)\n var worker = new window.Worker(workerUrl)\n worker.objectURL = workerUrl\n\n return worker\n}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n// The low-level RushCore module provides the heart of Rusha,\n// a high-speed sha1 implementation working on an Int32Array heap.\n// At first glance, the implementation seems complicated, however\n// with the SHA1 spec at hand, it is obvious this almost a textbook\n// implementation that has a few functions hand-inlined and a few loops\n// hand-unrolled.\nmodule.exports = function RushaCore(stdlib$840, foreign$841, heap$842) {\n 'use asm';\n var H$843 = new stdlib$840.Int32Array(heap$842);\n function hash$844(k$845, x$846) {\n // k in bytes\n k$845 = k$845 | 0;\n x$846 = x$846 | 0;\n var i$847 = 0, j$848 = 0, y0$849 = 0, z0$850 = 0, y1$851 = 0, z1$852 = 0, y2$853 = 0, z2$854 = 0, y3$855 = 0, z3$856 = 0, y4$857 = 0, z4$858 = 0, t0$859 = 0, t1$860 = 0;\n y0$849 = H$843[x$846 + 320 >> 2] | 0;\n y1$851 = H$843[x$846 + 324 >> 2] | 0;\n y2$853 = H$843[x$846 + 328 >> 2] | 0;\n y3$855 = H$843[x$846 + 332 >> 2] | 0;\n y4$857 = H$843[x$846 + 336 >> 2] | 0;\n for (i$847 = 0; (i$847 | 0) < (k$845 | 0); i$847 = i$847 + 64 | 0) {\n z0$850 = y0$849;\n z1$852 = y1$851;\n z2$854 = y2$853;\n z3$856 = y3$855;\n z4$858 = y4$857;\n for (j$848 = 0; (j$848 | 0) < 64; j$848 = j$848 + 4 | 0) {\n t1$860 = H$843[i$847 + j$848 >> 2] | 0;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | ~y1$851 & y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1518500249 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[k$845 + j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 64 | 0; (j$848 | 0) < (k$845 + 80 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | ~y1$851 & y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1518500249 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 80 | 0; (j$848 | 0) < (k$845 + 160 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 ^ y2$853 ^ y3$855) | 0) + ((t1$860 + y4$857 | 0) + 1859775393 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 160 | 0; (j$848 | 0) < (k$845 + 240 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 & y2$853 | y1$851 & y3$855 | y2$853 & y3$855) | 0) + ((t1$860 + y4$857 | 0) - 1894007588 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n for (j$848 = k$845 + 240 | 0; (j$848 | 0) < (k$845 + 320 | 0); j$848 = j$848 + 4 | 0) {\n t1$860 = (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) << 1 | (H$843[j$848 - 12 >> 2] ^ H$843[j$848 - 32 >> 2] ^ H$843[j$848 - 56 >> 2] ^ H$843[j$848 - 64 >> 2]) >>> 31;\n t0$859 = ((y0$849 << 5 | y0$849 >>> 27) + (y1$851 ^ y2$853 ^ y3$855) | 0) + ((t1$860 + y4$857 | 0) - 899497514 | 0) | 0;\n y4$857 = y3$855;\n y3$855 = y2$853;\n y2$853 = y1$851 << 30 | y1$851 >>> 2;\n y1$851 = y0$849;\n y0$849 = t0$859;\n H$843[j$848 >> 2] = t1$860;\n }\n y0$849 = y0$849 + z0$850 | 0;\n y1$851 = y1$851 + z1$852 | 0;\n y2$853 = y2$853 + z2$854 | 0;\n y3$855 = y3$855 + z3$856 | 0;\n y4$857 = y4$857 + z4$858 | 0;\n }\n H$843[x$846 + 320 >> 2] = y0$849;\n H$843[x$846 + 324 >> 2] = y1$851;\n H$843[x$846 + 328 >> 2] = y2$853;\n H$843[x$846 + 332 >> 2] = y3$855;\n H$843[x$846 + 336 >> 2] = y4$857;\n }\n return { hash: hash$844 };\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nvar _this = this;\n\n/* eslint-env commonjs, browser */\n\nvar reader = void 0;\nif (typeof self !== 'undefined' && typeof self.FileReaderSync !== 'undefined') {\n reader = new self.FileReaderSync();\n}\n\n// Convert a binary string and write it to the heap.\n// A binary string is expected to only contain char codes < 256.\nvar convStr = function (str, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = str.charCodeAt(start + 3);\n case 1:\n H8[off + 1 - (om << 1) | 0] = str.charCodeAt(start + 2);\n case 2:\n H8[off + 2 - (om << 1) | 0] = str.charCodeAt(start + 1);\n case 3:\n H8[off + 3 - (om << 1) | 0] = str.charCodeAt(start);\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2] = str.charCodeAt(start + i) << 24 | str.charCodeAt(start + i + 1) << 16 | str.charCodeAt(start + i + 2) << 8 | str.charCodeAt(start + i + 3);\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = str.charCodeAt(start + j + 2);\n case 2:\n H8[off + j + 2 | 0] = str.charCodeAt(start + j + 1);\n case 1:\n H8[off + j + 3 | 0] = str.charCodeAt(start + j);\n }\n};\n\n// Convert a buffer or array and write it to the heap.\n// The buffer or array is expected to only contain elements < 256.\nvar convBuf = function (buf, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n switch (om) {\n case 0:\n H8[off] = buf[start + 3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[start + 2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[start + 1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[start];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[start + i] << 24 | buf[start + i + 1] << 16 | buf[start + i + 2] << 8 | buf[start + i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[start + j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[start + j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[start + j];\n }\n};\n\nvar convBlob = function (blob, H8, H32, start, len, off) {\n var i = void 0,\n om = off % 4,\n lm = (len + om) % 4,\n j = len - lm;\n var buf = new Uint8Array(reader.readAsArrayBuffer(blob.slice(start, start + len)));\n switch (om) {\n case 0:\n H8[off] = buf[3];\n case 1:\n H8[off + 1 - (om << 1) | 0] = buf[2];\n case 2:\n H8[off + 2 - (om << 1) | 0] = buf[1];\n case 3:\n H8[off + 3 - (om << 1) | 0] = buf[0];\n }\n if (len < lm + (4 - om)) {\n return;\n }\n for (i = 4 - om; i < j; i = i + 4 | 0) {\n H32[off + i >> 2 | 0] = buf[i] << 24 | buf[i + 1] << 16 | buf[i + 2] << 8 | buf[i + 3];\n }\n switch (lm) {\n case 3:\n H8[off + j + 1 | 0] = buf[j + 2];\n case 2:\n H8[off + j + 2 | 0] = buf[j + 1];\n case 1:\n H8[off + j + 3 | 0] = buf[j];\n }\n};\n\nmodule.exports = function (data, H8, H32, start, len, off) {\n if (typeof data === 'string') {\n return convStr(data, H8, H32, start, len, off);\n }\n if (data instanceof Array) {\n return convBuf(data, H8, H32, start, len, off);\n }\n // Safely doing a Buffer check using \"this\" to avoid Buffer polyfill to be included in the dist\n if (_this && _this.Buffer && _this.Buffer.isBuffer(data)) {\n return convBuf(data, H8, H32, start, len, off);\n }\n if (data instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data), H8, H32, start, len, off);\n }\n if (data.buffer instanceof ArrayBuffer) {\n return convBuf(new Uint8Array(data.buffer, data.byteOffset, data.byteLength), H8, H32, start, len, off);\n }\n if (data instanceof Blob) {\n return convBlob(data, H8, H32, start, len, off);\n }\n throw new Error('Unsupported data type.');\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar Rusha = __webpack_require__(0);\n\nvar _require = __webpack_require__(1),\n toHex = _require.toHex;\n\nvar Hash = function () {\n function Hash() {\n _classCallCheck(this, Hash);\n\n this._rusha = new Rusha();\n this._rusha.resetState();\n }\n\n Hash.prototype.update = function update(data) {\n this._rusha.append(data);\n return this;\n };\n\n Hash.prototype.digest = function digest(encoding) {\n var digest = this._rusha.rawEnd().buffer;\n if (!encoding) {\n return digest;\n }\n if (encoding === 'hex') {\n return toHex(digest);\n }\n throw new Error('unsupported digest encoding');\n };\n\n _createClass(Hash, [{\n key: 'state',\n get: function () {\n return this._rusha.getState();\n },\n set: function (state) {\n this._rusha.setState(state);\n }\n }]);\n\n return Hash;\n}();\n\nmodule.exports = function () {\n return new Hash();\n};\n\n/***/ })\n/******/ ]);\n});","import { ref } from 'vue'\nimport type { CancelTokenSource } from 'axios'\nimport axios from 'axios'\nimport { i18n } from '@/plugins/i18n'\nimport {\n type AnzuApiValidationResponseData,\n axiosErrorResponseHasValidationData,\n} from '@/model/error/AnzuApiValidationError'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport { NEW_LINE_MARK } from '@/composables/system/alerts'\nimport { isUndefined } from '@/utils/common'\nimport { useDamUploadChunkSize } from '@/components/damImage/uploadQueue/composables/damUploadChunkSize'\nimport { damUploadChunk, damUploadFinish, damUploadStart } from '@/components/damImage/uploadQueue/api/uploadApi'\nimport {\n useCommonAdminCoreDamOptions,\n useCommonAdminCoreDamOptionsGlobal,\n} from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport rusha from 'rusha'\n\n// const CHUNK_MAX_RETRY = 6\nconst CHUNK_MAX_RETRY = 4\nconst SPEED_CHECK_INTERVAL = 1000\nconst CHUNK_RETRY_INTERVAL = 1000\nconst CHUNK_RETRY_MULTIPLY = 3\n\nconst failUpload = async (queueItem: UploadQueueItem, error: unknown = null) => {\n throw error\n}\n\nconst finishUpload = async (queueItem: UploadQueueItem, sha: string) => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { uploadStatusFallback } = useCommonAdminCoreDamOptionsGlobal()\n return await damUploadFinish(damClient, queueItem, sha, uploadStatusFallback)\n}\n\nconst handleValidationErrorMessage = (error: Error | any) => {\n const { t } = i18n.global || i18n\n if (!error || !error.response || !error.response.data) {\n // @ts-ignore\n return t('common.damImage.uploadErrors.unknownError')\n }\n const data = error.response.data as AnzuApiValidationResponseData\n const errorMessages: string[] = []\n for (const [key, values] of Object.entries(data.fields)) {\n switch (key) {\n case 'size':\n errorMessages.push(t('common.damImage.uploadErrors.size'))\n break\n case 'offset':\n errorMessages.push(t('common.damImage.uploadErrors.offset'))\n break\n case 'mimeType':\n errorMessages.push(t('common.damImage.uploadErrors.mimeType'))\n break\n default:\n // @ts-ignore\n errorMessages.push(t('common.damImage.uploadErrors.systemError') + ': ' + key + ' - ' + values.join(','))\n }\n }\n return errorMessages.length > 0 ? errorMessages.join(NEW_LINE_MARK) : t('common.damImage.uploadErrors.unknownError')\n}\n\nconst readFile = async (offset: number, size: number, file: File): Promise<{ data: string; offset: number }> => {\n return new Promise((resolve, reject) => {\n const partial = file.slice(offset, offset + size)\n const reader = new FileReader()\n reader.onload = function (e) {\n if (e.target?.readyState === FileReader.DONE) {\n resolve({ data: e.target.result as string, offset: offset })\n }\n }\n reader.onerror = function (e) {\n reject(e)\n }\n reader.readAsArrayBuffer(partial)\n })\n}\n\nconst sleep = (ms: number) => {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function useUpload(queueItem: UploadQueueItem, uploadCallback: any = undefined) {\n const { damClient } = useCommonAdminCoreDamOptions()\n const fileSize = ref(0)\n\n const progress = ref(0)\n\n let speedStack: any[] = []\n let lastTimestamp = 0\n let endTimestamp = 0\n let lastLoaded = 0\n const sha = rusha.createHash()\n const { updateChunkSize, lastChunkSize } = useDamUploadChunkSize()\n\n const getCurrentTimestamp = () => {\n return Date.now() / 1000\n }\n\n // @ts-ignore\n function progressCallback(progressEvent) {\n const currentStamp = getCurrentTimestamp()\n if (lastTimestamp === 0) {\n lastTimestamp = currentStamp\n\n return\n }\n\n const dataSent = lastLoaded > 0 ? progressEvent.loaded - lastLoaded : progressEvent.loaded\n lastLoaded = progressEvent.total === progressEvent.loaded ? 0 : progressEvent.loaded\n speedStack.push(dataSent / (currentStamp - lastTimestamp))\n\n lastTimestamp = currentStamp\n }\n\n const uploadChunk = async (chunkFile: File, offset: number) => {\n return new Promise((resolve, reject) => {\n if (!queueItem.fileId) {\n reject()\n return\n }\n damUploadChunk(\n damClient,\n queueItem,\n queueItem.fileId,\n chunkFile as unknown as string, // todo check\n chunkFile.size,\n offset,\n progressCallback\n )\n .then((result) => {\n resolve(result)\n })\n .catch((exception) => {\n reject(exception)\n })\n })\n }\n\n const processAndUploadChunk = async (offset: number): Promise<File> => {\n updateChunkSize(queueItem.progress.speed)\n let arrayBuffer: { data: string; offset: number } = await readFile(offset, lastChunkSize.value, queueItem.file!)\n let chunkFile = new File([arrayBuffer.data], queueItem.file!.name)\n\n queueItem.currentChunkIndex = offset\n const cancelToken = axios.CancelToken\n queueItem.latestChunkCancelToken = cancelToken.source()\n\n let sleepTime = CHUNK_RETRY_INTERVAL\n let attempt = 0\n do {\n attempt++\n try {\n await uploadChunk(chunkFile, offset)\n sha.update(arrayBuffer.data)\n\n return chunkFile\n } catch (error) {\n // in error recompute\n if (axiosErrorResponseHasValidationData(error as Error)) {\n attempt = CHUNK_MAX_RETRY\n queueItem.error.message = handleValidationErrorMessage(error)\n return Promise.reject(error)\n }\n\n if (updateChunkSize(queueItem.progress.speed)) {\n arrayBuffer = await readFile(offset, lastChunkSize.value, queueItem.file!)\n chunkFile = new File([arrayBuffer.data], queueItem.file!.name)\n }\n\n await sleep(sleepTime)\n attempt === CHUNK_MAX_RETRY - 1 ? (sleepTime = 1) : (sleepTime *= CHUNK_RETRY_MULTIPLY)\n }\n } while (attempt < CHUNK_MAX_RETRY)\n return Promise.reject('Unable to upload chunk, max tries exceeded')\n }\n\n function speedCheck() {\n function speedCheckRun() {\n speedStack = speedStack.slice(-15)\n if (speedStack.length > 0) {\n const avgSpeed = Math.ceil(speedStack.reduce((sum, current) => sum + current) / speedStack.length)\n const remainingBytes = Math.ceil(fileSize.value * ((100 - progress.value) / 100))\n\n uploadCallback(progress.value, avgSpeed, Math.ceil(remainingBytes / avgSpeed))\n }\n\n if (endTimestamp === 0) {\n setTimeout(function () {\n speedCheckRun()\n }, SPEED_CHECK_INTERVAL)\n }\n }\n\n speedCheckRun()\n }\n\n const uploadInit = async () => {\n return new Promise((resolve, reject) => {\n if (!queueItem.file || queueItem.file.size < 1) {\n failUpload(queueItem)\n return\n }\n fileSize.value = queueItem.file.size\n queueItem.status = UploadQueueItemStatus.Uploading\n damUploadStart(damClient, queueItem)\n .then((res) => {\n queueItem.assetId = res.asset\n queueItem.fileId = res.id\n resolve(queueItem)\n })\n .catch((err) => {\n reject(err)\n })\n })\n }\n\n const upload = async () => {\n if (uploadCallback) {\n speedCheck()\n }\n\n const filesize = queueItem.file?.size\n if (isUndefined(filesize)) return Promise.reject()\n\n let i = 0\n while (i < filesize) {\n const uploadedChunk = await processAndUploadChunk(i)\n i += uploadedChunk.size\n progress.value = (i / filesize) * 100\n }\n\n endTimestamp = Date.now() / 1000\n return await finishUpload(queueItem, sha.digest('hex'))\n }\n\n return {\n uploadInit,\n upload,\n }\n}\n\nexport const uploadStop = (cancelTokenSource: CancelTokenSource) => {\n // todo stop speed check\n cancelTokenSource.cancel('axios request cancelled')\n}\n","import { type EventBusKey, useEventBus } from '@vueuse/core'\nimport type { DocId } from '@/types/common'\nimport type { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport type { DamAssetType, DamDistributionServiceName } from '@/types/coreDam/Asset'\nimport type { DamDistributionStatus } from '@/types/coreDam/DamConfig'\n\nexport const damNotificationsEventBusKey: EventBusKey<DamNotification> = Symbol('anzu:damNotificationsEventBusKey')\n\nexport function useDamNotificationsEventBus() {\n return useEventBus<DamNotification>(damNotificationsEventBusKey)\n}\n\nexport const DamNotificationName = {\n AssetFileProcessed: 'asset_file_processed',\n AssetFileFailed: 'asset_file_failed',\n AssetFileDuplicate: 'asset_file_duplicate',\n AssetFileUploaded: 'asset_file_uploaded',\n AssetFileDeleted: 'asset_file_deleted',\n AssetMetadataProcessed: 'asset_metadata_processed',\n AssetDeleted: 'asset_deleted',\n DistributionDistributing: 'distribution_distributing',\n DistributionRemoteProcessing: 'distribution_remote_processing',\n DistributionDistributed: 'distribution_distributed',\n DistributionFailed: 'distribution_failed',\n DistributionAuthorized: 'distribution_authorized',\n UserUpdated: 'user_updated',\n} as const\n\nexport type DamNotificationNameType = (typeof DamNotificationName)[keyof typeof DamNotificationName]\n\ntype DamNotificationEvent<T extends DamNotificationNameType, P> = {\n name: T\n data: P\n}\n\ninterface DamNotificationAssetFileData {\n id: DocId\n asset: DocId\n}\n\ninterface DamNotificationAssetFileStatusData {\n id: DocId\n asset: DocId\n status: AssetFileProcessStatus\n failReason: AssetFileFailReason\n assetType: DamAssetType\n originAssetFile: DocId\n}\n\ninterface DamNotificationDistributionData {\n id: DocId\n asset: DocId\n assetFile: DocId\n status: DamDistributionStatus\n}\n\ninterface DamNotificationAssetData {\n asset: DocId\n}\n\ntype DamNotificationAssetFileProcessed = DamNotificationEvent<\n typeof DamNotificationName.AssetFileProcessed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileFailed = DamNotificationEvent<\n typeof DamNotificationName.AssetFileFailed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileDuplicate = DamNotificationEvent<\n typeof DamNotificationName.AssetFileDuplicate,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileUploaded = DamNotificationEvent<\n typeof DamNotificationName.AssetFileUploaded,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetFileDeleted = DamNotificationEvent<\n typeof DamNotificationName.AssetFileDeleted,\n DamNotificationAssetFileData\n>\n\ntype DamNotificationAssetMetadataProcessed = DamNotificationEvent<\n typeof DamNotificationName.AssetMetadataProcessed,\n DamNotificationAssetFileStatusData\n>\n\ntype DamNotificationAssetDeleted = DamNotificationEvent<\n typeof DamNotificationName.AssetDeleted,\n DamNotificationAssetData\n>\n\ntype DamNotificationDistributionDistributing = DamNotificationEvent<\n typeof DamNotificationName.DistributionDistributing,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionRemoteProcessing = DamNotificationEvent<\n typeof DamNotificationName.DistributionRemoteProcessing,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionDistributed = DamNotificationEvent<\n typeof DamNotificationName.DistributionDistributed,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionFailed = DamNotificationEvent<\n typeof DamNotificationName.DistributionFailed,\n DamNotificationDistributionData\n>\n\ntype DamNotificationDistributionAuthorized = DamNotificationEvent<\n typeof DamNotificationName.DistributionAuthorized,\n {\n distributionService: DamDistributionServiceName\n success: boolean\n }\n>\n\ntype DamNotificationUserUpdated = DamNotificationEvent<typeof DamNotificationName.UserUpdated, undefined>\n\nexport type DamNotification =\n | DamNotificationAssetFileProcessed\n | DamNotificationAssetFileFailed\n | DamNotificationAssetFileDuplicate\n | DamNotificationAssetFileUploaded\n | DamNotificationAssetFileDeleted\n | DamNotificationAssetMetadataProcessed\n | DamNotificationAssetDeleted\n | DamNotificationDistributionDistributing\n | DamNotificationDistributionRemoteProcessing\n | DamNotificationDistributionDistributed\n | DamNotificationDistributionFailed\n | DamNotificationDistributionAuthorized\n | DamNotificationUserUpdated\n\n","import { useWebSocket } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport {\n type DamNotification,\n useDamNotificationsEventBus,\n} from '@/components/damImage/uploadQueue/composables/damNotificationsEventBus'\nimport { useCommonAdminCoreDamOptionsGlobal } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nconst { t } = i18n.global || i18n\n\nconst damNotificationsInitialized = ref(false)\n\nexport function initDamNotifications() {\n const { notification } = useCommonAdminCoreDamOptionsGlobal()\n\n const enabled = notification.enabled && notification.webSocketUrl.length > 0\n\n const { open, ws } = useWebSocket(notification.webSocketUrl, {\n immediate: false,\n autoReconnect: {\n retries: 10,\n delay: 5000,\n },\n heartbeat: {\n interval: 4000,\n },\n })\n\n const openConnection = () => {\n console.log('openConnection', enabled)\n damNotificationsInitialized.value = true\n if (!enabled) return\n const eventBus = useDamNotificationsEventBus()\n open()\n if (!ws.value) return\n ws.value.onopen = function (this: WebSocket, event: Event) {\n console.log('ws dam notification-server open', event)\n }\n ws.value.onerror = function (this: WebSocket, event: Event) {\n const { showWarning } = useAlerts()\n setTimeout(() => {\n showWarning(t('common.damImage.notificationsNotConnected'), -1)\n }, 3000)\n console.log('ws dam notification-server error', event)\n }\n ws.value.onmessage = function (this: WebSocket, event: MessageEvent) {\n const message = JSON.parse(event.data as string)\n const data = message.data.length ? JSON.parse(message.data) : undefined\n console.log(message.eventName, data)\n eventBus.emit({ name: message.eventName, data })\n }\n }\n\n return {\n openConnection,\n damNotificationsInitialized,\n }\n}\n\nexport function useDamNotifications() {\n const eventBus = useDamNotificationsEventBus()\n\n const addDamNotificationListener = (callback: (event: DamNotification) => void) => {\n return eventBus.on(callback)\n }\n\n return {\n addDamNotificationListener,\n }\n}\n","import type { AssetMetadataSuggestions } from '@/types/coreDam/Asset'\nimport { isArray, isEmptyObject } from '@/utils/common'\nimport type { DocId } from '@/types/common'\n\nexport function useAssetSuggestions() {\n const updateNewNames = (suggestions: AssetMetadataSuggestions, newNames: Set<string>) => {\n for (const [key, value] of Object.entries(suggestions)) {\n if (isEmptyObject(value)) {\n newNames.add(key)\n }\n }\n }\n\n const getAuthorConflicts = (suggestions: AssetMetadataSuggestions) => {\n const conflicts: Array<DocId> = []\n for (const value of Object.values(suggestions)) {\n if (isArray(value) && value.length > 1) {\n value.forEach((id) => {\n conflicts.push(id)\n })\n }\n }\n return conflicts\n }\n\n return {\n updateNewNames,\n getAuthorConflicts,\n }\n}\n\n","import { type Ref, ref } from 'vue'\nimport { useDebounceFn } from '@vueuse/core'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { isArray, isNull, isUndefined } from '@/utils/common'\n\nexport type CachedItem<T extends object> = T & { _loaded: boolean }\n\nexport type AddToCachedArgs<T extends DocId | IntegerId> =\n | Array<T | null | undefined>\n | Array<Array<T | null | undefined> | T | null | undefined>\n\n/**\n * @template I Identifier type\n * @template T Source type\n * @template M Minimal type\n */\nexport function defineCached<\n I extends DocId | IntegerId,\n T extends Record<DocId | IntegerId, any>,\n M extends Record<DocId | IntegerId, any>,\n>(\n mapFullToMinimal: (source: T) => M,\n mapIdToMinimal: (id: I) => M,\n fetchCallback: (ids: I[]) => Promise<T[]>,\n idProp = 'id'\n) {\n const cache: Ref<Map<I, CachedItem<M>>> = ref(new Map()) // todo check\n const toFetch = ref(new Set()) as Ref<Set<I>> // todo check\n\n const add = (...args: AddToCachedArgs<I>) => {\n const toAdd = <Set<I>>new Set()\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]\n if (isNull(arg) || isUndefined(arg)) continue\n if (isArray(arg)) {\n for (let j = 0; j < arg.length; j++) {\n const item = arg[j]\n if (isNull(item) || isUndefined(item)) continue\n if (!cache.value.has(item)) toAdd.add(item)\n }\n continue\n }\n if (!cache.value.has(arg)) toAdd.add(arg)\n }\n toAdd.forEach((id) => {\n cache.value.set(id, { ...mapIdToMinimal(id), ...{ _loaded: false } })\n toFetch.value.add(id)\n })\n }\n\n const addManual = (data: T) => {\n if (data[idProp]) {\n cache.value.set(data[idProp] as I, { ...mapFullToMinimal(data), ...{ _loaded: true } })\n }\n }\n\n const addManualMinimal = (data: M) => {\n if (data[idProp]) {\n cache.value.set(data[idProp] as I, { ...data, ...{ _loaded: true } })\n }\n }\n\n const updateMap = (data: T[]) => {\n for (let i = 0; i < data.length; i += 1) {\n cache.value.set(data[i][idProp] as I, { ...mapFullToMinimal(data[i]), ...{ _loaded: true } })\n }\n }\n\n const updateToFetch = (ids: Array<I>) => {\n for (let i = 0; i < ids.length; i += 1) {\n toFetch.value.delete(ids[i])\n }\n }\n\n async function apiFetch() {\n if (toFetch.value.size > 0) {\n const ids = Array.from(toFetch.value)\n const res = await fetchCallback(ids)\n updateToFetch(ids)\n updateMap(res)\n return res\n }\n return []\n }\n\n const debouncedFetch = useDebounceFn(\n async () => {\n return await apiFetch()\n },\n 1500,\n { maxWait: 5000 }\n )\n\n /**\n * Debounced fetch for best performance.\n * For general usage.\n */\n const fetch = () => {\n return debouncedFetch()\n }\n\n /**\n * Immediate fetch with no debounce and with result in promise.\n * Use for special cases.\n */\n const immediateFetch = () => {\n return apiFetch()\n }\n\n const get = (id: I | null | undefined) => {\n if (!id) return undefined\n return cache.value.get(id)\n }\n\n const has = (id: I | null | undefined): boolean => {\n if (!id) return false\n return cache.value.has(id)\n }\n\n const isLoaded = (id: I | null | undefined): boolean => {\n if (!id) return false\n const item = cache.value.get(id)\n if (!item) return false\n return item._loaded\n }\n\n return {\n cache,\n toFetch,\n fetch,\n immediateFetch,\n add,\n addManual,\n addManualMinimal,\n has,\n get,\n isLoaded,\n }\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nconst generateByIdsApiQuery = (ids: number[] | string[], isSearchApi: boolean): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, queryAddFilter, queryAdd } = useApiQueryBuilder()\n const limit = ids.length\n querySetLimit(limit)\n querySetOffset(1, limit)\n querySetOrder('id', false)\n if (isSearchApi) queryAdd('id', ids.join(','))\n else queryAddFilter('in', 'id', ids.join(','))\n\n return queryBuild()\n}\n\nexport const apiFetchByIds = <T, R = T>(\n client: () => AxiosInstance,\n ids: string[] | number[],\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {},\n isSearchApi = false\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .get(replaceUrlParameters(urlTemplate, urlParams) + generateByIdsApiQuery(ids, isSearchApi), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data?.data) {\n return resolve(res.data.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiCreateOne = <T, R = T>(\n client: () => AxiosInstance,\n object: T | Record<string, never> = {},\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .post(replaceUrlParameters(urlTemplate, urlParams), JSON.stringify(object), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\n\nconst END_POINT = '/adm/v1/keyword'\nconst END_POINT_LIST = END_POINT + '/ext-system/:extSystemId'\nexport const ENTITY = 'keyword'\n\nexport const fetchKeywordListByIds = (client: () => AxiosInstance, extSystemId: number, ids: string[]) =>\n apiFetchByIds<DamKeyword[]>(\n client,\n ids,\n END_POINT_LIST + '/search',\n { extSystemId },\n SYSTEM_CORE_DAM,\n ENTITY,\n {},\n true\n )\n\nexport const fetchKeywordList = (\n client: () => AxiosInstance,\n extSystemId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) => apiFetchList<DamKeyword[]>(client, END_POINT_LIST, { extSystemId }, pagination, filterBag, SYSTEM_CORE_DAM, ENTITY)\n\nexport const createKeyword = (client: () => AxiosInstance, data: DamKeyword) =>\n apiCreateOne<DamKeyword>(client, data, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\n","import { ref } from 'vue'\nimport type { IntegerId } from '@/types/common'\n\nconst cachedExtSystemId = ref<IntegerId>(0)\n\nexport function useExtSystemIdForCached () {\n return {\n cachedExtSystemId,\n }\n}\n","import type { DocId } from '@/types/common'\nimport { defineCached } from '@/composables/system/defineCached'\nimport type { DamKeyword, DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { fetchKeywordListByIds } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\n\nconst mapFullToMinimal = (keyword: DamKeyword): DamKeywordMinimal => ({\n id: keyword.id,\n name: keyword.name,\n})\n\nconst mapIdToMinimal = (id: DocId): DamKeywordMinimal => {\n return { id: id, name: '' }\n}\n\nconst { cache, toFetch, fetch, add, addManual, addManualMinimal, has, get, isLoaded } = defineCached<\n DocId,\n DamKeyword,\n DamKeywordMinimal\n>(mapFullToMinimal, mapIdToMinimal, (ids) => {\n const { cachedExtSystemId } = useExtSystemIdForCached()\n const { damClient } = useCommonAdminCoreDamOptions()\n return fetchKeywordListByIds(damClient, cachedExtSystemId.value, ids)\n})\n\nexport const useDamCachedKeywords = () => {\n return {\n addManualToCachedKeywords: addManual,\n addManualMinimalToCachedKeywords: addManualMinimal,\n addToCachedKeywords: add,\n fetchCachedKeywords: fetch,\n toFetchCachedKeywords: toFetch,\n cachedKeywords: cache,\n hasCachedKeyword: has,\n getCachedKeyword: get,\n isLoadedCachedKeyword: isLoaded,\n }\n}\n\nexport const useCachedKeywordsForRemoteAutocomplete = () => {\n return {\n fetch,\n add,\n addManualMinimal,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\n\nconst END_POINT = '/adm/v1/author'\nconst END_POINT_LIST = END_POINT + '/ext-system/:extSystemId'\nexport const ENTITY = 'author'\n\nexport const fetchAuthorListByIds = (client: () => AxiosInstance, extSystemId: number, ids: string[]) =>\n apiFetchByIds<DamAuthor[]>(\n client,\n ids,\n END_POINT_LIST + '/search',\n {\n extSystemId,\n },\n SYSTEM_CORE_DAM,\n ENTITY,\n {},\n true\n )\n\nexport const fetchAuthorList = (\n client: () => AxiosInstance,\n extSystemId: number,\n pagination: Pagination,\n filterBag: FilterBag\n) =>\n apiFetchList<DamAuthor[]>(\n client,\n END_POINT_LIST,\n {\n extSystemId,\n },\n pagination,\n filterBag,\n SYSTEM_CORE_DAM,\n ENTITY\n )\n\nexport const createAuthor = (client: () => AxiosInstance, data: DamAuthor) =>\n apiCreateOne<DamAuthor>(client, data, END_POINT, {}, SYSTEM_CORE_DAM, ENTITY)\n\n","import type { DocId } from '@/types/common'\nimport { defineCached } from '@/composables/system/defineCached'\nimport type { DamAuthor, DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\n\nconst mapFullToMinimal = (author: DamAuthor): DamAuthorMinimal => ({\n id: author.id,\n name: author.name,\n identifier: author.identifier,\n})\n\nconst mapIdToMinimal = (id: DocId): DamAuthorMinimal => {\n return { id: id, name: '', identifier: '' }\n}\n\nconst { cache, toFetch, fetch, add, addManual, addManualMinimal, has, get, isLoaded } = defineCached<\n DocId,\n DamAuthor,\n DamAuthorMinimal\n>(mapFullToMinimal, mapIdToMinimal, (ids) => {\n const { cachedExtSystemId } = useExtSystemIdForCached()\n const { damClient } = useCommonAdminCoreDamOptions()\n return fetchAuthorListByIds(damClient, cachedExtSystemId.value, ids)\n})\n\nexport const useDamCachedAuthors = () => {\n return {\n addManualToCachedAuthors: addManual,\n addManualMinimalToCachedAuthors: addManualMinimal,\n addToCachedAuthors: add,\n fetchCachedAuthors: fetch,\n toFetchCachedAuthors: toFetch,\n cachedAuthors: cache,\n hasCachedAuthor: has,\n getCachedAuthor: get,\n isLoadedCachedAuthor: isLoaded,\n }\n}\n\nexport const useDamCachedAuthorsForRemoteAutocomplete = () => {\n return {\n fetch,\n add,\n addManualMinimal,\n }\n}\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { DocId, DocIdNullable, IntegerId } from '@/types/common'\nimport { damFileTypeFix } from '@/components/file/composables/fileType'\nimport {\n type UploadQueue,\n type UploadQueueItem,\n UploadQueueItemStatus,\n UploadQueueItemType,\n type UploadQueueKey,\n} from '@/types/coreDam/UploadQueue'\nimport { useUploadQueueItemFactory } from '@/components/damImage/uploadQueue/composables/UploadQueueItemFactory'\nimport { getAssetTypeByMimeType } from '@/components/damImage/uploadQueue/composables/mimeTypeHelper'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { uploadStop, useUpload } from '@/components/damImage/uploadQueue/composables/uploadService'\nimport { type AssetDetailItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport { DamNotificationName } from '@/components/damImage/uploadQueue/composables/damNotificationsEventBus'\nimport { useDamNotifications } from '@/components/damImage/uploadQueue/composables/damNotifications'\nimport { fetchAsset, fetchAssetByFileId } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useAssetSuggestions } from '@/components/damImage/uploadQueue/composables/assetSuggestions'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport { isNull, isUndefined } from '@/utils/common'\n\nconst QUEUE_MAX_PARALLEL_UPLOADS = 2\nconst QUEUE_CHUNK_SIZE = 10485760\n\nexport const useUploadQueuesStore = defineStore('commonUploadQueuesStore', () => {\n const { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords()\n const { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors()\n\n const queues = ref<Map<UploadQueueKey, UploadQueue>>(new Map())\n\n const { createDefault } = useUploadQueueItemFactory()\n\n const { damClient } = useCommonAdminCoreDamOptions()\n const { addDamNotificationListener } = useDamNotifications()\n addDamNotificationListener((event) => {\n switch (event.name) {\n case DamNotificationName.AssetFileProcessed:\n queueItemProcessed(event.data.asset)\n break\n case DamNotificationName.AssetFileFailed:\n queueItemFailed(event.data.asset, event.data.failReason)\n break\n case DamNotificationName.AssetFileDuplicate:\n queueItemDuplicate(event.data.asset, event.data.originAssetFile, event.data.assetType)\n break\n case DamNotificationName.AssetMetadataProcessed:\n queueItemMetadataProcessed(event.data.asset)\n break\n }\n })\n\n function getQueue(queueKey: UploadQueueKey) {\n if (queues.value.has(queueKey)) {\n return queues.value.get(queueKey)\n }\n return null\n }\n\n function getQueueItems(queueKey: UploadQueueKey) {\n if (queues.value.has(queueKey)) {\n return queues.value.get(queueKey)?.items || []\n }\n return []\n }\n\n async function addByFiles(queueKey: UploadQueueKey, extSystem: IntegerId, assetLicence: IntegerId, files: File[]) {\n const { getDamConfigExtSystem } = useDamConfigState()\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n const configExtSystem = getDamConfigExtSystem(extSystem)\n if (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n for await (const file of files) {\n const type = getAssetTypeByMimeType(damFileTypeFix(file), configExtSystem)\n if (!type || type !== DamAssetType.Image) continue // only image now\n const queueItem = createDefault(\n 'file_' + file.name,\n UploadQueueItemType.File,\n UploadQueueItemStatus.Waiting,\n type,\n QUEUE_CHUNK_SIZE,\n assetLicence\n )\n queueItem.file = file\n queueItem.displayTitle = file.name\n createQueue(queueKey)\n addQueueItem(queueKey, queueItem)\n recalculateQueueCounts(queueKey)\n processUpload(queueKey)\n }\n }\n\n function addQueueItem(queueKey: UploadQueueKey, item: UploadQueueItem) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.items.push(item)\n }\n\n function createQueue(queueKey: UploadQueueKey) {\n if (!queues.value.has(queueKey)) {\n queues.value.set(queueKey, {\n items: [],\n totalCount: 0,\n processedCount: 0,\n fileInputKey: 0,\n suggestions: { newKeywordNames: new Set<string>(), newAuthorNames: new Set<string>() },\n })\n }\n }\n\n function recalculateQueueCounts(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.totalCount = queue.items.length\n queue.processedCount =\n getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploaded).length +\n getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Failed).length\n }\n\n function getQueueItemsByStatus(queueKey: UploadQueueKey, status: UploadQueueItemStatus) {\n const queue = queues.value.get(queueKey)\n if (!queue) return []\n return queue.items.filter((item) => item.status === status)\n }\n\n function processUpload(queueKey: UploadQueueKey) {\n const waitingItems = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Waiting)\n if (waitingItems.length === 0) {\n // upload finished\n return\n }\n const uploadingCount = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploading).length\n if (uploadingCount === QUEUE_MAX_PARALLEL_UPLOADS) {\n // wait for empty upload slot\n return\n }\n for (let i = 0; i < QUEUE_MAX_PARALLEL_UPLOADS; i++) {\n if (waitingItems[i]) queueItemUploadStart(waitingItems[i], queueKey)\n }\n }\n\n async function queueItemUploadStart(item: UploadQueueItem, queueKey: UploadQueueKey) {\n const { upload, uploadInit } = useUpload(item, (progress: number, speed: number, estimate: number) => {\n setUploadSpeed(item, progress, speed, estimate)\n })\n try {\n await uploadInit()\n await upload()\n processUpload(queueKey)\n } catch (e) {\n item.error.hasError = true\n item.status = UploadQueueItemStatus.Failed\n recalculateQueueCounts(queueKey)\n processUpload(queueKey)\n }\n }\n\n function setUploadSpeed(item: UploadQueueItem, progress: number, speed: number, estimate: number) {\n item.progress.progressPercent = progress\n item.progress.remainingTime = estimate\n item.progress.speed = speed\n }\n\n async function queueItemProcessed(assetId: DocId) {\n try {\n const asset = await fetchAsset(damClient, assetId)\n if (!asset) return\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id && asset.mainFile) {\n clearTimeout(item.notificationFallbackTimer)\n item.status = UploadQueueItemStatus.Uploaded\n item.assetStatus = asset.attributes.assetStatus\n if (asset.mainFile.links?.image_detail) {\n item.imagePreview = asset.mainFile.links.image_detail\n }\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n })\n } catch (e) {\n //\n }\n }\n\n async function queueItemDuplicate(\n assetId: DocId,\n originAssetFile: DocIdNullable = null,\n assetType: DamAssetType | null = null\n ) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n if (!originAssetFile || !assetType || assetType !== DamAssetType.Image) return\n let assetRes: null | AssetDetailItemDto = null\n try {\n assetRes = await fetchAssetByFileId(damClient, originAssetFile)\n } catch (e) {\n throw new Error('Fatal error')\n }\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (isNull(assetRes)) return\n if (item.assetId === assetId) {\n clearTimeout(item.notificationFallbackTimer)\n item.isDuplicate = true\n item.status = UploadQueueItemStatus.Uploaded\n item.fileId = originAssetFile\n item.duplicateAssetId = assetRes.id\n item.assetStatus = assetRes.attributes.assetStatus\n if (assetRes.mainFile?.links?.image_detail) {\n item.imagePreview = assetRes.mainFile.links.image_detail\n }\n item.keywords = assetRes.keywords\n item.authors = assetRes.authors\n item.customData = assetRes.metadata.customData\n updateNewNames(assetRes.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(assetRes.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(assetRes!.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n item.assetId = assetRes.id\n item.canEditMetadata = true\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n }\n\n async function queueItemFailed(assetId: DocId, failReason: AssetFileFailReason) {\n try {\n const asset = await fetchAsset(damClient, assetId)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id) {\n clearTimeout(item.notificationFallbackTimer)\n item.error.hasError = true\n item.status = UploadQueueItemStatus.Failed\n item.error.assetFileFailReason = failReason\n item.canEditMetadata = false\n processUpload(queueKey)\n }\n })\n recalculateQueueCounts(queueKey)\n })\n } catch (e) {\n //\n }\n }\n\n async function queueItemMetadataProcessed(assetId: DocId) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n try {\n const asset = await fetchAsset(damClient, assetId)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === asset.id && item.type) {\n clearTimeout(item.notificationFallbackTimer)\n item.keywords = asset.keywords\n item.authors = asset.authors\n item.customData = asset.metadata.customData\n updateNewNames(asset.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(asset.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(asset.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n item.canEditMetadata = true\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n } catch (e) {\n //\n }\n }\n\n function removeByIndex (queueKey: UploadQueueKey, index: number) {\n const queue = queues.value.get(queueKey)\n if (!queue || !queue.items[index]) return\n queue.items.splice(index, 1)\n recalculateQueueCounts(queueKey)\n }\n\n async function stopItemUpload(queueKey: UploadQueueKey, queueItem: UploadQueueItem, index: number) {\n const queue = queues.value.get(queueKey)\n if (!queue || queue.items.length === 0) return\n queueItem.status = UploadQueueItemStatus.Stop\n if (queueItem.latestChunkCancelToken) {\n uploadStop(queueItem.latestChunkCancelToken)\n }\n removeByIndex(queueKey, index)\n processUpload(queueKey)\n }\n\n async function updateFromDetail(asset: AssetDetailItemDto) {\n const { updateNewNames, getAuthorConflicts } = useAssetSuggestions()\n try {\n const assetRes = await fetchAsset(damClient, asset.id)\n queues.value.forEach((queue, queueKey) => {\n queue.items.forEach((item) => {\n if (item.assetId === assetRes.id && item.type) {\n clearTimeout(item.notificationFallbackTimer)\n item.keywords = assetRes.keywords\n item.authors = assetRes.authors\n item.customData = assetRes.metadata.customData\n updateNewNames(assetRes.metadata.authorSuggestions, queue.suggestions.newAuthorNames)\n updateNewNames(assetRes.metadata.keywordSuggestions, queue.suggestions.newKeywordNames)\n item.authorConflicts = getAuthorConflicts(assetRes.metadata.authorSuggestions)\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n addToCachedAuthors(item.authorConflicts)\n }\n })\n recalculateQueueCounts(queueKey)\n fetchCachedAuthors()\n fetchCachedKeywords()\n })\n } catch (e) {\n //\n }\n }\n\n function getQueueTotalCount (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return 0\n return queue.totalCount\n }\n\n function getQueueProcessedCount (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return 0\n return queue.processedCount\n }\n\n function stopUpload (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue || queue.items.length === 0) return\n const currentItems = getQueueItemsByStatus(queueKey, UploadQueueItemStatus.Uploading)\n queue.items.forEach((item) => {\n item.status = UploadQueueItemStatus.Stop\n })\n if (currentItems.length > 0) {\n currentItems.forEach((item) => {\n if (item.latestChunkCancelToken) {\n uploadStop(item.latestChunkCancelToken)\n }\n })\n }\n clearQueue(queueKey)\n forceReloadFileInput(queueKey)\n }\n\n function forceReloadFileInput (queueKey: UploadQueueKey) {\n createQueue(queueKey)\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queue.fileInputKey++\n }\n\n function getQueueFileInputKey (queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return -1\n return queue.fileInputKey\n }\n\n function clearQueue(queueKey: UploadQueueKey) {\n const queue = queues.value.get(queueKey)\n if (!queue) return\n queues.value.set(queueKey, {\n items: [],\n totalCount: 0,\n processedCount: 0,\n fileInputKey: getQueueFileInputKey(queueKey) + 1,\n suggestions: { newKeywordNames: new Set<string>(), newAuthorNames: new Set<string>() },\n })\n }\n\n function getQueueItemsTypes(queueKey: UploadQueueKey) {\n const types: Array<DamAssetType> = []\n const queue = queues.value.get(queueKey)\n if (!queue) return types\n if (queue.items.length > 0) {\n for (let i = 0; i < queue.items.length; i++) {\n if (types.includes(queue.items[i].assetType)) {\n continue\n }\n types.push(queue.items[i].assetType)\n }\n }\n return types\n }\n\n return {\n getQueue,\n getQueueItems,\n addByFiles,\n queueItemProcessed,\n queueItemDuplicate,\n queueItemFailed,\n removeByIndex,\n stopItemUpload,\n getQueueTotalCount,\n getQueueProcessedCount,\n stopUpload,\n getQueueItemsTypes,\n updateFromDetail,\n }\n})\n","<script setup lang=\"ts\">\nimport { ref, watch, withModifiers } from 'vue'\nimport { isBoolean, isUndefined } from '@/utils/common'\nimport AFileDropzone from '@/components/file/AFileDropzone.vue'\nimport type { InputFileChangeEvent } from '@/types/ChangeEvent'\nimport { useFormatAndSizeCheck } from '@/components/file/composables/formatAndSizeCheck'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n useDropzone?: boolean\n dropzoneVariant?: 'fill' | 'default' | 'fullscreen'\n onDropzoneClickCallback?: (() => void) | undefined | false // false for disable, undefined for browse files, otherwise custom callback is used\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: true,\n useDropzone: false,\n dropzoneVariant: 'default',\n onDropzoneClickCallback: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst BLOCK_DOUBLE_CLICK_MS = 200\n\nconst inputRef = ref<undefined | HTMLInputElement>(undefined)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst fileInputKeyLocal = ref(props.fileInputKey || 0)\nconst blockDoubleClick = ref(false)\n\nconst clickInput = () => {\n if (blockDoubleClick.value === true) {\n return\n }\n blockDoubleClick.value = true\n inputRef.value?.click()\n setTimeout(() => {\n blockDoubleClick.value = false\n }, BLOCK_DOUBLE_CLICK_MS)\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(props.accept, props.maxSizes)\n\nconst validateData = (files: File[]) => {\n if (!props.multiple && files.length > 0) {\n const checked = checkFormatsAndSizes([files[0]])\n emit('filesInput', checked)\n return\n }\n const checked = checkFormatsAndSizes(files)\n emit('filesInput', checked)\n}\n\nconst onDropzoneDrop = (files: File[]) => {\n validateData(files)\n}\n\nconst onInputFileChange = (payload: Event) => {\n const event = payload as InputFileChangeEvent\n emit('change', event)\n validateData(Array.from(event.target?.files ?? []))\n}\n\nconst onFileDropzoneClick = () => {\n if (isBoolean(props.onDropzoneClickCallback)) {\n return\n }\n if (isUndefined(props.onDropzoneClickCallback)) {\n clickInput()\n return\n }\n props.onDropzoneClickCallback()\n}\n\nwatch(\n () => props.fileInputKey,\n (newValue, oldValue) => {\n if (newValue === oldValue || isUndefined(newValue)) {\n return\n }\n fileInputKeyLocal.value = newValue\n }\n)\n\ndefineExpose({\n activate: clickInput,\n})\n</script>\n\n<template>\n <AFileDropzone\n v-if=\"useDropzone\"\n :variant=\"dropzoneVariant\"\n @on-click=\"onFileDropzoneClick\"\n @on-drop=\"onDropzoneDrop\"\n />\n <slot\n v-else\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => clickInput(), ['stop']) }\"\n />\n <input\n ref=\"inputRef\"\n :key=\"fileInputKeyLocal\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n hidden\n tabindex=\"-1\"\n type=\"file\"\n @change=\"onInputFileChange\"\n >\n</template>\n","import type { InjectionKey, ShallowRef } from 'vue'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\nimport type { IntegerId } from '@/types/common'\n\nexport const ImageWidgetExtSystemConfigs: InjectionKey<ShallowRef<Map<IntegerId, DamExtSystemConfig>>> = Symbol.for(\n 'anzu:ImageWidgetExtSystemConfigs'\n)\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiUpdateOne = <T, R = T>(\n client: () => AxiosInstance,\n object: T | Record<string, never> = {},\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .put(replaceUrlParameters(urlTemplate, urlParams), JSON.stringify(object), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiDeleteOne = <T, R = T>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n client()\n .delete(replaceUrlParameters(urlTemplate, urlParams), options)\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import type { AxiosInstance, AxiosResponse } from 'axios'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiUpdateOne } from '@/services/api/apiUpdateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { IntegerId } from '@/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { apiFetchByIds } from '@/services/api/apiFetchByIds'\nimport { HTTP_STATUS_OK } from '@/composables/statusCodes'\n\nconst END_POINT = '/adm/v1/image'\nexport const ENTITY = 'image'\nexport const SYSTEM_CMS = 'cms'\n\nconst BULK_METADATA_LIMIT = 20\n\nexport const fetchImageListByIds = (client: () => AxiosInstance, ids: IntegerId[]) =>\n apiFetchByIds<ImageAware[]>(client, ids, END_POINT, {}, SYSTEM_CMS, ENTITY)\n\nexport const fetchImage = (client: () => AxiosInstance, id: IntegerId) =>\n apiFetchOne<ImageAware>(client, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const createImage = (client: () => AxiosInstance, data: ImageCreateUpdateAware) =>\n apiCreateOne<ImageCreateUpdateAware, ImageAware>(client, data, END_POINT, {}, SYSTEM_CMS, ENTITY)\n\nexport const updateImage = (client: () => AxiosInstance, id: IntegerId, data: ImageCreateUpdateAware) =>\n apiUpdateOne<ImageCreateUpdateAware, ImageAware>(client, data, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const deleteImage = (client: () => AxiosInstance, id: IntegerId) =>\n apiDeleteOne<ImageAware>(client, END_POINT + '/:id', { id }, SYSTEM_CMS, ENTITY)\n\nexport const bulkUpdateImages = (client: () => AxiosInstance, items: ImageCreateUpdateAware[]) => {\n return new Promise<ImageAware[]>((resolve, reject) => {\n updateImagesSequence(client, items)\n .then((responses) => {\n if (items.length === 0) {\n return resolve([])\n } else if (responses.length === 0) {\n return reject(responses)\n } else if (\n responses.every((res) => {\n return res.status === HTTP_STATUS_OK\n })\n ) {\n const images: ImageAware[] = responses.flatMap(response => response.data.images)\n return resolve(images)\n } else {\n return reject(responses)\n }\n })\n .catch((err) => {\n //\n return reject(err)\n })\n })\n}\n\nasync function updateImagesSequence(client: () => AxiosInstance, items: ImageCreateUpdateAware[]) {\n const totalCalls = Math.ceil(items.length / BULK_METADATA_LIMIT)\n const responses: AxiosResponse[] = []\n if (items.length === 0) return Promise.resolve([])\n\n for (let i = 0; i < totalCalls; i++) {\n const offset = i * BULK_METADATA_LIMIT\n const reduced = items.slice(offset, offset + BULK_METADATA_LIMIT)\n const reqData = { images: reduced }\n const res = await client().put(END_POINT, JSON.stringify(reqData))\n responses.push(res)\n }\n return responses\n}\n","<script lang=\"ts\" setup>\nimport { ref, toRefs, watch } from 'vue'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { cloneDeep } from '@/utils/common'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport type { IntegerIdNullable } from '@/types/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { fetchImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useI18n } from 'vue-i18n'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable | undefined\n image?: ImageAware | ImageCreateUpdateAware | undefined | null // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n width?: number | undefined\n disableAspectRatio?: boolean\n aspectRatio?: number | string\n showDescription?: boolean\n showSource?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n width: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\n showDescription: false,\n showSource: false,\n }\n)\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { widgetImageToDamImageUrl } = useImageActions(imageOptions)\n\nconst resImage = ref<null | ImageAware | ImageCreateUpdateAware>(null)\n\nconst { image, modelValue } = toRefs(props)\n\nconst resolvedSrc = ref('')\n\nconst { t } = useI18n()\n\nwatch(\n [image, modelValue],\n async ([newImage, newImageId]) => {\n resImage.value = null\n resolvedSrc.value = imagePlaceholderPath\n if (newImage) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n resolvedSrc.value = widgetImageToDamImageUrl(resImage.value)\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (resImage.value) {\n resolvedSrc.value = widgetImageToDamImageUrl(resImage.value)\n }\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n :aspect-ratio=\"disableAspectRatio ? undefined : aspectRatio\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <div class=\"pa-2\">\n <VRow\n v-if=\"showDescription && resImage\"\n dense\n >\n <VCol>\n <span class=\"text-caption text-medium-emphasis\">{{ t('common.damImage.image.model.texts.description') }}:</span>\n <br>{{ resImage.texts.description }}\n </VCol>\n </VRow>\n <VRow\n v-if=\"showSource && resImage\"\n dense\n >\n <VCol>\n <span class=\"text-caption text-medium-emphasis\"> {{ t('common.damImage.image.model.texts.source') }}:</span>\n <br>{{ resImage.texts.source }}\n </VCol>\n </VRow>\n </div>\n <slot\n name=\"append\"\n :image=\"resImage\"\n />\n</template>\n\n<style lang=\"scss\">\n.v-img.disable-radius .v-img__img {\n border-radius: 0;\n}\n</style>\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { ImageCreateUpdateAware, ImageCreateUpdateAwareKeyed } from '@/types/ImageAware'\nimport { cloneDeep, isNull } from '@/utils/common'\n\nexport const useImageStore = defineStore('commonImageStore', () => {\n const images = ref<ImageCreateUpdateAwareKeyed[]>([])\n const imageDetail = ref<ImageCreateUpdateAware | null>(null)\n const maxPosition = ref(0)\n\n function setImageDetail(data: ImageCreateUpdateAware | null) {\n if (isNull(data)) imageDetail.value = null\n imageDetail.value = cloneDeep(data)\n }\n\n function setImages(data: ImageCreateUpdateAwareKeyed[]) {\n images.value = data\n }\n\n function addImages(data: ImageCreateUpdateAwareKeyed[]) {\n images.value.push(...data)\n }\n\n function updateMaxPositionIfGreater(newPosition: number) {\n if (newPosition > maxPosition.value) {\n maxPosition.value = newPosition\n }\n }\n\n function removeImageByIndex(index: number) {\n images.value.splice(index, 1)\n }\n\n function reset() {\n images.value = []\n imageDetail.value = null\n }\n\n return {\n images,\n imageDetail,\n maxPosition,\n setImages,\n addImages,\n setImageDetail,\n updateMaxPositionIfGreater,\n removeImageByIndex,\n reset,\n }\n})\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport type { ValidationScope } from '@/types/Validation'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\n\nexport const ADamAssetMetadataValidationScopeSymbol = Symbol.for('anzu:common:asset-metadata-validation-scope')\n\nexport const AImageMetadataValidationScopeSymbol = Symbol.for('anzu:common:image-validation-scope')\n\nexport const ADamKeywordCreateValidationScopeSymbol = Symbol.for('anzu:common:keyword-create-validation-scope')\n\nexport const ADamAuthorCreateValidationScopeSymbol = Symbol.for('anzu:common:author-create-validation-scope')\n\nconst { required, maxLength } = useValidate()\n\nexport function useImageValidation(\n image: Ref<ImageCreateUpdateAware | null>,\n validationScope: ValidationScope = undefined\n) {\n const rules = computed(() => ({\n image: {\n texts: {\n source: {\n required,\n minLength: maxLength(255),\n },\n },\n },\n }))\n const v$ = useVuelidate(rules, { image }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","<script lang=\"ts\" setup>\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId } from '@/types/common'\nimport { isNull } from '@/utils/common'\nimport {\n AImageMetadataValidationScopeSymbol,\n useImageValidation,\n} from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useAlerts } from '@/composables/system/alerts'\n\nwithDefaults(\n defineProps<{\n modelValue: boolean\n saving: boolean\n loading: boolean\n expand?: boolean\n }>(),\n {\n expand: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'editAsset', data: DocId): void\n (e: 'onConfirm'): void\n (e: 'onClose'): void\n}>()\n\nconst { t } = useI18n()\nconst imageStore = useImageStore()\nconst { imageDetail } = storeToRefs(imageStore)\n\nconst { v$ } = useImageValidation(imageDetail, AImageMetadataValidationScopeSymbol)\n\nconst { showValidationError } = useAlerts()\n\nconst onConfirm = () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onConfirm')\n}\n\nconst onDialogModelUpdate = (newValue: boolean) => {\n if (newValue) return\n emit('onClose')\n}\n\nconst onEditAsset = () => {\n if (isNull(imageDetail.value)) return\n emit('editAsset', imageDetail.value.dam.damId)\n}\n\ndefineExpose({\n confirm: onConfirm,\n})\n</script>\n\n<template>\n <div v-if=\"expand\">\n <VRow v-if=\"loading\">\n <VCol>\n <div class=\"d-flex align-center justify-center\">\n <VProgressCircular indeterminate />\n </div>\n </VCol>\n </VRow>\n <VRow v-if=\"imageDetail\">\n <VCol>\n <VBtn @click.stop=\"onEditAsset\">\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </VCol>\n </VRow>\n <VRow v-if=\"imageDetail\">\n <VCol>\n <AFormTextarea\n v-model=\"imageDetail.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n />\n </VCol>\n </VRow>\n <VRow v-if=\"imageDetail\">\n <VCol>\n <AFormTextarea\n v-model=\"imageDetail.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image.texts.source\"\n />\n </VCol>\n </VRow>\n </div>\n <VDialog\n v-else\n :model-value=\"modelValue\"\n :max-width=\"500\"\n @update:model-value=\"onDialogModelUpdate\"\n >\n <VCard v-if=\"modelValue\">\n <ADialogToolbar @on-cancel=\"onDialogModelUpdate(false)\">\n {{ t('common.damImage.image.meta.edit') }}\n </ADialogToolbar>\n <VCardText>\n <div\n v-if=\"loading\"\n class=\"d-flex align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <div\n v-else-if=\"imageDetail\"\n class=\"position-relative\"\n >\n <div class=\"my-4\">\n <AImageWidgetSimple\n :model-value=\"imageDetail.id\"\n :image=\"imageDetail\"\n />\n </div>\n <VRow>\n <VCol>\n <VBtn @click.stop=\"onEditAsset\">\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFormTextarea\n v-model=\"imageDetail.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n />\n </VCol>\n </VRow>\n <VRow>\n <VCol>\n <AFormTextarea\n v-model=\"imageDetail.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image.texts.source\"\n />\n </VCol>\n </VRow>\n </div>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnPrimary\n :loading=\"saving\"\n :disabled=\"loading\"\n @click.stop=\"onConfirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","import { defineStore } from 'pinia'\nimport { ref } from 'vue'\nimport type { AssetDetailItemDto } from '@/types/coreDam/Asset'\nimport type { DocId } from '@/types/common'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nexport enum AssetDetailTabImageWithRoi {\n Info = 'meta',\n ROI = 'roi',\n Default = Info,\n}\n\nexport const useAssetDetailStore = defineStore('commonAssetDetailStore', () => {\n const asset = ref<AssetDetailItemDto | null>(null)\n const authorConflicts = ref<DocId[]>([])\n const dialog = ref<null | UploadQueueKey>(null)\n const loading = ref(false)\n const metadataAreTouched = ref(false)\n const activeTab = ref<AssetDetailTabImageWithRoi>(AssetDetailTabImageWithRoi.Default)\n const updateUploadStore = ref(false)\n\n function setAsset(data: AssetDetailItemDto | null) {\n asset.value = data\n }\n\n function reset() {\n asset.value = null\n }\n\n return {\n metadataAreTouched,\n authorConflicts,\n asset,\n loading,\n dialog,\n activeTab,\n updateUploadStore,\n setAsset,\n reset,\n }\n})\n","<script setup lang=\"ts\">\nimport { useTheme } from '@/composables/themeSettings'\n\nconst emit = defineEmits<{\n (e: 'closeDialog'): void\n}>()\n\nconst { toolbarColor } = useTheme()\n\nconst closeDialog = () => {\n emit('closeDialog')\n}\n</script>\n\n<template>\n <VCard class=\"dam-image-detail\">\n <div class=\"d-flex flex-column w-100 h-100\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b\"\n >\n <div class=\"text-subtitle-2 d-flex\" />\n <VSpacer />\n <div>\n <VBtn\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"mr-1\"\n @click.stop=\"closeDialog\"\n >\n <VIcon icon=\"mdi-close\" />\n </VBtn>\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 justify-center align-center\">\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n </div>\n </VCard>\n</template>\n","import { useI18n } from 'vue-i18n'\n\nconst MINUTE_IN_SECONDS = 60\nconst HOUR_IN_SECONDS = 3600\nconst DAY_IN_SECONDS = 86400\n\nexport function useRemainingTime() {\n const { t } = useI18n()\n\n const remainingTime = (seconds: number, short: boolean): string => {\n const prefix = short ? 'common.time.short.' : 'common.time.long.'\n if (seconds > DAY_IN_SECONDS) {\n return t(prefix + 'remainingDays', { value: Math.floor(seconds / DAY_IN_SECONDS) })\n }\n if (seconds > HOUR_IN_SECONDS) {\n return t(prefix + 'remainingHours', { value: Math.floor(seconds / HOUR_IN_SECONDS) })\n }\n if (seconds > MINUTE_IN_SECONDS) {\n return t(prefix + 'remainingMinutes', { value: Math.floor(seconds / MINUTE_IN_SECONDS) })\n }\n return t(prefix + 'remainingSeconds', { value: seconds })\n }\n\n const remainingTimeShort = (seconds: number): string => {\n return remainingTime(seconds, true)\n }\n\n const remainingTimeLong = (seconds: number): string => {\n return remainingTime(seconds, false)\n }\n\n return {\n remainingTimeShort,\n remainingTimeLong,\n }\n}\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_2K'%20data-name='2K'%20transform='translate(-10480%20-9321)'%3e%3cg%20id='Group_2714'%20data-name='Group%202714'%20transform='translate(4751%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7179'%20data-name='Path%207179'%20d='M-13.982,7.587a11.158,11.158,0,0,1,1.1-4.668q1-2.375,4.717-5.028A34.591,34.591,0,0,0-3.991-5.417,4.889,4.889,0,0,0-2.534-8.824a3.774,3.774,0,0,0-.835-2.506,2.942,2.942,0,0,0-2.391-1,2.916,2.916,0,0,0-2.9,1.589,7.879,7.879,0,0,0-.524,2.915H-13.72a11.461,11.461,0,0,1,1.1-4.9q1.869-3.554,6.64-3.554a8.425,8.425,0,0,1,6,2.088A7.216,7.216,0,0,1,2.249-8.66,7.473,7.473,0,0,1,.673-3.976a15.678,15.678,0,0,1-3.4,3.03L-4.594.381Q-6.35,1.625-7,2.182A5.279,5.279,0,0,0-8.086,3.476H2.282V7.587ZM6.261-16.554h4.963v9.946l9.327-9.946H27.07L17.163-6.625,27.578,7.587H21.092L13.654-2.951,11.224-.487V7.587H6.261Z'%20transform='translate(10522.981%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_4K'%20data-name='4K'%20transform='translate(-10580%20-9321)'%3e%3cg%20id='Group_2715'%20data-name='Group%202715'%20transform='translate(4851%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7180'%20data-name='Path%207180'%20d='M2.562,2.477H-.124v5.11H-4.693V2.477h-9.4V-1.6l8.73-14.412H-.124V-1.175H2.562ZM-4.693-1.175V-11.4L-10.621-1.175ZM6.313-16.554h4.963v9.946L20.6-16.554h6.518L17.214-6.625,27.629,7.587H21.143L13.705-2.951,11.275-.487V7.587H6.313Z'%20transform='translate(10623.095%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='_8K'%20data-name='8K'%20transform='translate(-10680%20-9321)'%3e%3cg%20id='Group_2716'%20data-name='Group%202716'%20transform='translate(4951%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7181'%20data-name='Path%207181'%20d='M-9.246.692A3.814,3.814,0,0,0-8.337,3.41a3.284,3.284,0,0,0,2.514.966A3.284,3.284,0,0,0-3.309,3.41,3.814,3.814,0,0,0-2.4.692a3.78,3.78,0,0,0-.925-2.76,3.342,3.342,0,0,0-2.5-.942,3.342,3.342,0,0,0-2.5.942A3.78,3.78,0,0,0-9.246.692ZM-14.094,1a7.31,7.31,0,0,1,.9-3.619,5.734,5.734,0,0,1,2.645-2.44A5.548,5.548,0,0,1-12.79-7.538a6.929,6.929,0,0,1-.518-2.5,5.823,5.823,0,0,1,1.953-4.414A7.769,7.769,0,0,1-5.84-16.275,7.769,7.769,0,0,1-.324-14.449a5.823,5.823,0,0,1,1.953,4.414,6.952,6.952,0,0,1-.516,2.5A4.77,4.77,0,0,1-1.123-5.221a6.6,6.6,0,0,1,2.649,2.6A7.406,7.406,0,0,1,2.415,1,6.768,6.768,0,0,1,.193,6.1a8.664,8.664,0,0,1-6.205,2.1q-3.984,0-6.033-2.1A7.043,7.043,0,0,1-14.094,1ZM-8.837-9.511A2.9,2.9,0,0,0-8.04-7.4a2.939,2.939,0,0,0,2.209.819A2.906,2.906,0,0,0-3.623-7.4a2.937,2.937,0,0,0,.78-2.113,3.009,3.009,0,0,0-.78-2.2,2.956,2.956,0,0,0-2.209-.794,2.99,2.99,0,0,0-2.209.794A2.972,2.972,0,0,0-8.837-9.511Zm15.15-7.042h4.963v9.946L20.6-16.554h6.518L17.214-6.625,27.629,7.587H21.143L13.705-2.951,11.275-.487V7.587H6.313Z'%20transform='translate(10723.095%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='QHD'%20transform='translate(-10380%20-9321)'%3e%3cg%20id='Group_2713'%20data-name='Group%202713'%20transform='translate(4651%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7178'%20data-name='Path%207178'%20d='M-12.888,4.215A6.477,6.477,0,0,0-11.217,4a8.316,8.316,0,0,0,1.131-.41L-12.53,1.267l2.592-2.706L-7.485.872a11.391,11.391,0,0,0,.8-2.063,11.878,11.878,0,0,0,.36-3.095,10.307,10.307,0,0,0-1.662-6.28,5.692,5.692,0,0,0-4.856-2.219,5.922,5.922,0,0,0-4.782,2.129q-1.785,2.129-1.785,6.371,0,4.962,2.556,7.108A5.958,5.958,0,0,0-12.888,4.215Zm11.61-8.86A16.059,16.059,0,0,1-2.065.76,8.992,8.992,0,0,1-3.942,4.209l2.772,2.61L-3.8,9.564-6.7,6.813A12.165,12.165,0,0,1-9,7.947a12.314,12.314,0,0,1-3.885.543,11.121,11.121,0,0,1-7.8-2.817q-3.738-3.39-3.738-9.957,0-6.616,3.832-10.007a11.313,11.313,0,0,1,7.78-2.768,11.157,11.157,0,0,1,7.861,2.932Q-1.278-10.737-1.278-4.645ZM2.538,7.818v-24.14H7.549v9.2h9.385v-9.2h5.012V7.818H16.934V-2.958H7.549V7.818ZM31.691-12.129V3.626H36.35A5.031,5.031,0,0,0,41.336.1a12.4,12.4,0,0,0,.771-4.6,11.315,11.315,0,0,0-1.156-5.658q-1.156-1.973-4.6-1.973ZM37.2-16.322a12.707,12.707,0,0,1,3.737.524,7.976,7.976,0,0,1,4.114,3.063,10.738,10.738,0,0,1,1.721,3.9,18.7,18.7,0,0,1,.459,4A16.034,16.034,0,0,1,45.3,3.314a8.728,8.728,0,0,1-8.1,4.5H26.794v-24.14Z'%20transform='translate(10418.421%209375.059)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Full_HD'%20data-name='Full%20HD'%20transform='translate(-10280%20-9321)'%3e%3cg%20id='Group_2712'%20data-name='Group%202712'%20transform='translate(4551%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7177'%20data-name='Path%207177'%20d='M-21.883-16.521H-4.669v4.242h-12.2v5.552H-6.176v4.193H-16.871V7.587h-5.012ZM-1.426,7.587v-24.14H3.585v9.2H12.97v-9.2h5.012V7.587H12.97V-3.19H3.585V7.587ZM27.727-12.361V3.394h4.659A5.031,5.031,0,0,0,37.372-.127a12.4,12.4,0,0,0,.771-4.6,11.315,11.315,0,0,0-1.156-5.658q-1.156-1.973-4.6-1.973Zm5.511-4.193a12.707,12.707,0,0,1,3.737.524,7.976,7.976,0,0,1,4.114,3.063,10.738,10.738,0,0,1,1.721,3.9,18.7,18.7,0,0,1,.459,4,16.034,16.034,0,0,1-1.934,8.156,8.728,8.728,0,0,1-8.1,4.5H22.83v-24.14Z'%20transform='translate(10318.883%209375.554)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Slot'%20transform='translate(-10080%20-9321)'%3e%3cg%20id='Group_2710'%20data-name='Group%202710'%20transform='translate(10080%209321)'%3e%3cg%20id='Group_2668'%20data-name='Group%202668'%20transform='translate(0%200)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20opacity='0.5'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2711'%20data-name='Group%202711'%20transform='translate(10108.517%209349.516)'%3e%3cg%20id='Layer_2'%20data-name='Layer%202'%20transform='translate(0%200)'%3e%3cpath%20id='Path_7172'%20data-name='Path%207172'%20d='M18.322,17H9.371A5.371,5.371,0,0,0,4,22.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V22.371A5.371,5.371,0,0,0,18.322,17Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H9.371a1.79,1.79,0,0,1-1.79-1.79V22.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(-4%206.273)'%20fill='%23fff'/%3e%3cpath%20id='Path_7173'%20data-name='Path%207173'%20d='M31.322,17H22.371A5.371,5.371,0,0,0,17,22.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V22.371A5.371,5.371,0,0,0,31.322,17Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H22.371a1.79,1.79,0,0,1-1.79-1.79V22.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(6.273%206.273)'%20fill='%23fff'/%3e%3cpath%20id='Path_7174'%20data-name='Path%207174'%20d='M18.322,4H9.371A5.371,5.371,0,0,0,4,9.371v8.951a5.371,5.371,0,0,0,5.371,5.371h8.951a5.371,5.371,0,0,0,5.371-5.371V9.371A5.371,5.371,0,0,0,18.322,4Zm1.79,14.322a1.79,1.79,0,0,1-1.79,1.79H9.371a1.79,1.79,0,0,1-1.79-1.79V9.371a1.79,1.79,0,0,1,1.79-1.79h8.951a1.79,1.79,0,0,1,1.79,1.79Z'%20transform='translate(-4%20-4)'%20fill='%23fff'/%3e%3cpath%20id='Path_7175'%20data-name='Path%207175'%20d='M18.79,15.637h6.266V21.9a1.79,1.79,0,1,0,3.581,0V15.637H34.9a1.79,1.79,0,1,0,0-3.581H28.637V5.79a1.79,1.79,0,0,0-3.581,0v6.266H18.79a1.79,1.79,0,0,0,0,3.581Z'%20transform='translate(6.273%20-4)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cg%20id='Low'%20transform='translate(-10180%20-9321)'%3e%3cg%20id='Group_2709'%20data-name='Group%202709'%20transform='translate(4451%201906)'%3e%3ccircle%20id='Ellipse_18'%20data-name='Ellipse%2018'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5729%207415)'%20opacity='0.5'/%3e%3c/g%3e%3cpath%20id='Path_7176'%20data-name='Path%207176'%20d='M-14.218-16.322h5.044v19.8H2.881v4.34h-17.1ZM16.9,4.215A6.477,6.477,0,0,0,18.574,4a8.316,8.316,0,0,0,1.131-.41L17.261,1.267l2.592-2.706L22.306.872a11.391,11.391,0,0,0,.8-2.063,11.878,11.878,0,0,0,.36-3.095,10.307,10.307,0,0,0-1.662-6.28,5.692,5.692,0,0,0-4.856-2.219,5.922,5.922,0,0,0-4.782,2.129q-1.785,2.129-1.785,6.371,0,4.962,2.556,7.108A5.958,5.958,0,0,0,16.9,4.215Zm11.61-8.86a16.059,16.059,0,0,1-.786,5.4,8.992,8.992,0,0,1-1.877,3.449l2.772,2.61L25.99,9.564l-2.9-2.751A12.165,12.165,0,0,1,20.8,7.947a12.314,12.314,0,0,1-3.885.543,11.121,11.121,0,0,1-7.8-2.817Q5.37,2.283,5.37-4.285,5.37-10.9,9.2-14.291a11.313,11.313,0,0,1,7.78-2.768,11.157,11.157,0,0,1,7.861,2.932Q28.513-10.737,28.513-4.645Z'%20transform='translate(10222.799%209374.746)'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%20viewBox='0%200%20100%20100'%3e%3cdefs%3e%3cclipPath%20id='clip-path'%3e%3cpath%20id='Path_7158'%20data-name='Path%207158'%20d='M0,349.208A5.911,5.911,0,1,0,5.911,343.3,5.911,5.911,0,0,0,0,349.208'%20transform='translate(0%20-343.297)'%20fill='%23fff'/%3e%3c/clipPath%3e%3cclipPath%20id='clip-path-2'%3e%3cpath%20id='Path_7159'%20data-name='Path%207159'%20d='M0,167.86a20.2,20.2,0,0,1,20.2,20.2h8.375A28.572,28.572,0,0,0,0,159.485Z'%20transform='translate(-0.001%20-159.485)'%20fill='%23fff'/%3e%3c/clipPath%3e%3cclipPath%20id='clip-path-3'%3e%3cpath%20id='Path_7160'%20data-name='Path%207160'%20d='M0,0V8.621A34.483,34.483,0,0,1,34.484,43.1h8.621A43.1,43.1,0,0,0,0,0Z'%20transform='translate(-0.001%200)'%20fill='%23fff'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20id='RSS'%20transform='translate(-5652%20-7415)'%3e%3ccircle%20id='Ellipse_16'%20data-name='Ellipse%2016'%20cx='50'%20cy='50'%20r='50'%20transform='translate(5652%207415)'%20opacity='0.5'/%3e%3cg%20id='Group_2625'%20data-name='Group%202625'%20transform='translate(5683.674%207441.939)'%3e%3cg%20id='Group_2624'%20data-name='Group%202624'%20transform='translate(0)'%3e%3cg%20id='Group_2619'%20data-name='Group%202619'%20transform='translate(0%2031.281)'%3e%3cg%20id='Group_2618'%20data-name='Group%202618'%20clip-path='url(%23clip-path)'%3e%3crect%20id='Rectangle_2677'%20data-name='Rectangle%202677'%20width='11.823'%20height='11.823'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2621'%20data-name='Group%202621'%20transform='translate(0%2014.532)'%3e%3cg%20id='Group_2620'%20data-name='Group%202620'%20clip-path='url(%23clip-path-2)'%3e%3crect%20id='Rectangle_2678'%20data-name='Rectangle%202678'%20width='28.572'%20height='28.572'%20transform='translate(0%200)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Group_2623'%20data-name='Group%202623'%20transform='translate(0)'%3e%3cg%20id='Group_2622'%20data-name='Group%202622'%20clip-path='url(%23clip-path-3)'%3e%3crect%20id='Rectangle_2679'%20data-name='Rectangle%202679'%20width='43.104'%20height='43.104'%20transform='translate(0)'%20fill='%23fff'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","import svg2k from '@/assets/dam-meta-icons/2k.svg'\nimport svg4k from '@/assets/dam-meta-icons/4k.svg'\nimport svg8k from '@/assets/dam-meta-icons/8k.svg'\nimport svgqhd from '@/assets/dam-meta-icons/qhd.svg'\nimport svgfhd from '@/assets/dam-meta-icons/fhd.svg'\nimport svgslot from '@/assets/dam-meta-icons/slot.svg'\nimport svglow from '@/assets/dam-meta-icons/low.svg'\nimport svgrss from '@/assets/dam-meta-icons/rss.svg'\n\nexport const DIMENSIONS_CONFIG = [\n {\n titleT: 'common.damImage.asset.metaIcons.fullHd',\n width: 1920,\n height: 1080,\n svgSrc: svgfhd,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.2k',\n width: 2048,\n height: 1080,\n svgSrc: svg2k,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.qhd',\n width: 2560,\n height: 1440,\n svgSrc: svgqhd,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.4k',\n width: 3840,\n height: 2160,\n svgSrc: svg4k,\n },\n {\n titleT: 'common.damImage.asset.metaIcons.8k',\n width: 7680,\n height: 4320,\n svgSrc: svg8k,\n },\n]\nexport const ICON_SLOTS = svgslot\nexport const ICON_RSS = svgrss\nexport const ICON_LOW = svglow\nexport const LOW_DIMENSION = 600\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetFileProperties, DamAssetType } from '@/types/coreDam/Asset'\nimport {\n DIMENSIONS_CONFIG,\n ICON_LOW,\n ICON_RSS,\n ICON_SLOTS,\n LOW_DIMENSION,\n} from '@/components/damImage/uploadQueue/composables/assetImageIconsConfig'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetType\n assetFileProperties: AssetFileProperties\n disableAbsolute?: boolean\n }>(),\n {\n disableAbsolute: false,\n }\n)\n\nconst { t } = useI18n()\n\nconst checkDimensions = (icons: string[], titles: string[]) => {\n if (props.assetFileProperties.width === 0 || props.assetFileProperties.height === 0) {\n return\n }\n if (props.assetFileProperties.width < LOW_DIMENSION || props.assetFileProperties.height < LOW_DIMENSION) {\n icons.push(ICON_LOW)\n titles.push(t('common.damImage.asset.metaIcons.low'))\n return\n }\n if (props.assetType !== DamAssetType.Video) return\n for (let i = 0; i < DIMENSIONS_CONFIG.length; i++) {\n if (\n props.assetFileProperties.width === DIMENSIONS_CONFIG[i].width &&\n props.assetFileProperties.height === DIMENSIONS_CONFIG[i].height\n ) {\n icons.push(DIMENSIONS_CONFIG[i].svgSrc)\n titles.push(t(DIMENSIONS_CONFIG[i].titleT))\n break\n }\n }\n}\n\nconst checkDistributions = (icons: string[], titles: string[]) => {\n const { damPrvConfig } = useDamConfigState()\n for (let i = 0; i < props.assetFileProperties.distributesInServices.length; i++) {\n const iconPath =\n damPrvConfig.value.distributionServices[props.assetFileProperties.distributesInServices[i]]?.iconPath\n if (iconPath.length > 0 && !icons.includes(iconPath)) {\n icons.push(iconPath)\n titles.push(damPrvConfig.value.distributionServices[props.assetFileProperties.distributesInServices[i]].title)\n }\n }\n}\n\nconst data = computed(() => {\n const icons: string[] = []\n const titles: string[] = []\n\n if (props.assetFileProperties.slotNames.length > 1) {\n icons.push(ICON_SLOTS)\n titles.push(t('common.damImage.asset.metaIcons.slots'))\n }\n if (props.assetFileProperties.fromRss) {\n icons.push(ICON_RSS)\n titles.push(t('common.damImage.asset.metaIcons.rss'))\n }\n checkDimensions(icons, titles)\n checkDistributions(icons, titles)\n\n return { icons, titles }\n})\n</script>\n\n<template>\n <div\n v-show=\"data.icons.length > 0\"\n class=\"asset-image__meta-icons\"\n :class=\"{ 'asset-image__meta-icons-absolute': !disableAbsolute }\"\n >\n <img\n v-for=\"(item, index) in data.icons\"\n :key=\"item\"\n class=\"img-svg\"\n :src=\"item\"\n alt=\"\"\n :title=\"data.titles[index] || ''\"\n >\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-image__meta-icons-absolute {\n position: absolute;\n left: 6px;\n top: 163px;\n}\n\n.asset-image__meta-icons {\n display: flex;\n\n img.img-svg {\n height: 30px;\n padding: 2px;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport placeholder16x9 from '@/assets/image/placeholder16x9.jpg'\nimport { type AssetFileProperties, DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport { isUndefined } from '@/utils/common'\nimport { useRemainingTime } from '@/composables/datetime/remainingTime'\nimport AssetImageMetaIcons from '@/components/damImage/uploadQueue/components/AssetImageMetaIcons.vue'\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n assetType?: DamAssetType\n assetStatus?: DamAssetStatus\n backgroundColor?: string\n width?: number\n height?: number\n fallbackHeight?: number\n iconSize?: number\n useComponent?: boolean\n cover?: boolean\n aspectRatio?: number\n showUploading?: boolean\n showProcessing?: boolean\n showWaiting?: boolean\n showDone?: boolean\n uploadingColor?: string\n processingColor?: string\n disableProcessingText?: boolean\n uploadingProgress?: number | null\n remainingTime?: number | null\n hideIcon?: boolean\n showMetaIcons?: boolean\n assetFileProperties?: AssetFileProperties\n }>(),\n {\n assetType: DamAssetType.Image,\n assetStatus: DamAssetStatus.WithFile,\n src: undefined,\n backgroundColor: '#ccc',\n width: undefined,\n height: undefined,\n fallbackHeight: 200,\n iconSize: 80,\n useComponent: false,\n cover: false,\n aspectRatio: undefined,\n showUploading: false,\n showProcessing: false,\n showWaiting: false,\n showDone: false,\n uploadingColor: 'primary',\n processingColor: 'primary',\n disableProcessingText: false,\n uploadingProgress: null,\n remainingTime: null,\n hideIcon: false,\n showMetaIcons: false,\n assetFileProperties: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'load'): void\n (e: 'error'): void\n}>()\n\nconst { t } = useI18n()\n\nconst onLoad = () => {\n emit('load')\n}\nconst onError = () => {\n emit('error')\n}\n\nconst icon = computed(() => {\n if (props.assetStatus === DamAssetStatus.Deleting) return 'mdi-trash-can'\n switch (props.assetType) {\n case DamAssetType.Audio:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-music' : 'mdi-music-off'\n case DamAssetType.Document:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-note' : 'mdi-note-off'\n case DamAssetType.Video:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-video' : 'mdi-video-off'\n case DamAssetType.Image:\n return props.assetStatus === DamAssetStatus.WithFile ? 'mdi-image' : 'mdi-image-off'\n default:\n return ''\n }\n})\n\nconst uploadingPercentage = computed(() => {\n if (!props.uploadingProgress) return '0%'\n const value = Math.ceil(props.uploadingProgress)\n return value > 100 ? '100%' : value + '%'\n})\n\nconst backgroundColorComputed = computed(() => {\n return [DamAssetStatus.Deleting, DamAssetStatus.Draft].includes(props.assetStatus) ? '#ccc' : props.backgroundColor\n})\n\nconst iconColor = computed(() => {\n return props.assetStatus === DamAssetStatus.WithFile ? '#505050' : '#8f8f8f'\n})\n\nconst srcComputed = computed(() => {\n return isUndefined(props.src) ? placeholder16x9 : props.src\n})\n\nconst showIconComputed = computed(() => {\n if (props.hideIcon) return false\n else if (props.assetType === DamAssetType.Image && props.src) return false\n return true\n})\n\nconst { remainingTimeShort } = useRemainingTime()\n</script>\n\n<template>\n <VImg\n v-if=\"showUploading || showProcessing || showWaiting\"\n :aspect-ratio=\"aspectRatio\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n :cover=\"cover\"\n class=\"asset-image asset-image--loading-bg\"\n @error=\"onError\"\n @load=\"onLoad\"\n >\n <template #placeholder />\n <template #default>\n <div\n v-if=\"showWaiting\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n indeterminate\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.waiting') }}\n </div>\n </div>\n <div\n v-if=\"showProcessing\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n :color=\"processingColor\"\n indeterminate\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n class=\"ml-auto mr-auto\"\n />\n <div\n v-if=\"!disableProcessingText\"\n class=\"text-caption text-center\"\n >\n {{ t('common.damImage.upload.processing') }}\n </div>\n </div>\n <div\n v-else-if=\"showUploading\"\n class=\"asset-image__progress\"\n >\n <VProgressCircular\n :color=\"uploadingColor\"\n :size=\"iconSize\"\n :width=\"iconSize / 10\"\n class=\"ml-auto mr-auto\"\n :model-value=\"uploadingProgress === null ? undefined : uploadingProgress\"\n >\n {{ uploadingPercentage }}\n </VProgressCircular>\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.uploading') }}\n <span\n v-if=\"remainingTime\"\n class=\"font-weight-bold\"\n >\n {{ remainingTimeShort(remainingTime) }}\n </span>\n </div>\n </div>\n </template>\n </VImg>\n <VImg\n v-else-if=\"assetStatus === DamAssetStatus.WithFile && src && useComponent\"\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n class=\"asset-image asset-image--component position-relative\"\n :cover=\"cover\"\n :aspect-ratio=\"aspectRatio\"\n @load=\"onLoad\"\n @error=\"onError\"\n >\n <template #placeholder />\n <template #default>\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n />\n </div>\n </div>\n <div\n v-if=\"showDone\"\n class=\"asset-image__progress asset-image__progress--animate-done\"\n >\n <VIcon\n icon=\"mdi-check-circle\"\n color=\"success\"\n :size=\"iconSize\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.done') }}\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </template>\n </VImg>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.WithFile && src\"\n class=\"asset-image asset-image--img position-relative\"\n >\n <img\n :src=\"srcComputed\"\n :width=\"width\"\n :height=\"height\"\n alt=\"\"\n :style=\"'background-color:' + backgroundColorComputed\"\n @onerror=\"onError\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n <div\n v-else\n :style=\"{ height: fallbackHeight + 'px', backgroundColor: backgroundColorComputed, width: width + 'px' }\"\n class=\"asset-image asset-image--placeholder d-flex align-center justify-center\"\n >\n <div\n v-if=\"showIconComputed\"\n class=\"asset-image__icon-wrapper\"\n >\n <div\n class=\"asset-image__icon-circle\"\n :style=\"{ padding: iconSize / 4 + 'px' }\"\n >\n <VIcon\n v-if=\"icon.length\"\n :size=\"iconSize\"\n :icon=\"icon\"\n :color=\"iconColor\"\n class=\"asset-image__icon\"\n />\n </div>\n </div>\n <div\n v-if=\"showDone\"\n class=\"asset-image__progress asset-image__progress--animate-done\"\n >\n <VIcon\n icon=\"mdi-check-circle\"\n color=\"success\"\n :size=\"iconSize\"\n />\n <div class=\"text-caption text-center\">\n {{ t('common.damImage.upload.done') }}\n </div>\n </div>\n <AssetImageMetaIcons\n v-if=\"showMetaIcons && assetFileProperties\"\n :asset-file-properties=\"assetFileProperties\"\n :asset-type=\"assetType\"\n />\n </div>\n</template>\n","import { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\n\nexport function useAssetFileFailReason() {\n const { t } = useI18n()\n\n const assetFileFailReasonOptions = ref<ValueObjectOption<AssetFileFailReason>[]>([\n {\n value: AssetFileFailReason.None,\n title: t('common.damImage.asset.assetFileFailReason.none'),\n },\n {\n value: AssetFileFailReason.Unknown,\n title: t('common.damImage.asset.assetFileFailReason.unknown'),\n },\n {\n value: AssetFileFailReason.InvalidChecksum,\n title: t('common.damImage.asset.assetFileFailReason.invalidChecksum'),\n },\n {\n value: AssetFileFailReason.InvalidMimeType,\n title: t('common.damImage.asset.assetFileFailReason.invalidMimeType'),\n },\n {\n value: AssetFileFailReason.DownloadFailed,\n title: t('common.damImage.asset.assetFileFailReason.downloadFailed'),\n },\n {\n value: AssetFileFailReason.InvalidSize,\n title: t('common.damImage.asset.assetFileFailReason.invalidSize'),\n },\n ])\n\n const getAssetFileFailReasonOption = (value: AssetFileFailReason) => {\n return assetFileFailReasonOptions.value.find((item) => item.value === value)\n }\n\n return {\n assetFileFailReasonOptions,\n getAssetFileFailReasonOption,\n }\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport { useAssetFileFailReason } from '@/components/damImage/uploadQueue/composables/assetFileFailReason'\nimport AChipNoLink from '@/components/AChipNoLink.vue'\n\nconst props = withDefaults(\n defineProps<{\n reason: AssetFileFailReason\n }>(),\n {}\n)\n\nconst { getAssetFileFailReasonOption } = useAssetFileFailReason()\nconst reasonOption = computed(() => {\n return getAssetFileFailReasonOption(props.reason)\n})\n</script>\n\n<template>\n <AChipNoLink v-if=\"reasonOption\">\n {{ reasonOption.title }}\n </AChipNoLink>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { DamAssetStatus } from '@/types/coreDam/Asset'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\n\nwithDefaults(\n defineProps<{\n assetStatus: DamAssetStatus\n assetMainFileStatus?: AssetFileProcessStatus | undefined\n assetMainFileFailReason?: AssetFileFailReason | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n v-if=\"assetMainFileStatus && assetMainFileStatus === AssetFileProcessStatus.Duplicate\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"warning\"\n >\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VAlert>\n </div>\n <div\n v-if=\"assetMainFileStatus && assetMainFileStatus === AssetFileProcessStatus.Failed\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"error\"\n >\n {{ t('common.damImage.asset.detail.info.status.failed') }}\n <div v-if=\"assetMainFileFailReason\">\n <br>\n <AssetFileFailReasonChip :reason=\"assetMainFileFailReason\" />\n </div>\n </VAlert>\n </div>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.Deleting\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"error\"\n >\n {{ t('common.damImage.asset.detail.info.status.deleting') }}\n </VAlert>\n </div>\n <div\n v-else-if=\"assetStatus === DamAssetStatus.Draft\"\n class=\"w-100 pa-2 text-caption\"\n >\n <VAlert\n dark\n type=\"warning\"\n >\n {{ t('common.damImage.asset.detail.info.status.draft') }}\n </VAlert>\n </div>\n</template>\n","import { computed, ref } from 'vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nexport const CLASS_PREFIX = 'teleport-target-'\n\nconst mountedDivClasses = ref(new Set<string>())\n\nexport function useAssetDetailSidebarActionbar(uploadKey: UploadQueueKey) {\n const mounted = () => {\n mountedDivClasses.value.add(CLASS_PREFIX + uploadKey)\n }\n\n const unMounted = () => {\n mountedDivClasses.value.delete(CLASS_PREFIX + uploadKey)\n }\n\n const canTeleport = computed(() => {\n return mountedDivClasses.value.has(CLASS_PREFIX + uploadKey)\n })\n\n const divClassName = computed(() => {\n return CLASS_PREFIX + uploadKey\n })\n\n return {\n divClassName,\n canTeleport,\n mounted,\n unMounted,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useAssetDetailSidebarActionbar } from '@/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n }>(),\n {\n }\n)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { canTeleport, divClassName } = useAssetDetailSidebarActionbar(props.queueKey)\n</script>\n\n<template>\n <Teleport\n v-if=\"canTeleport\"\n :to=\"'.' + divClassName\"\n >\n <div class=\"w-100 text-right\">\n <slot />\n </div>\n </Teleport>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ACustomDataForm from '@/components/customDataForm/ACustomDataForm.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport type { IntegerId } from '@/types/common'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetType\n extSystem: IntegerId\n modelValue: { [key: string]: any }\n dataCy?: string\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'anyChange'): void\n}>()\n\nconst { getDamConfigAssetCustomFormElements, getDamConfigExtSystem } = useDamConfigState()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configAssetCustomFormElements = getDamConfigAssetCustomFormElements(props.extSystem)\nif (isUndefined(configAssetCustomFormElements)) {\n throw new Error('Custom form elements must be initialised.')\n}\n\nconst elements = computed(() => {\n return configAssetCustomFormElements[props.assetType]\n})\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configExtSystem = getDamConfigExtSystem(props.extSystem)\n\nif (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n}\n\nconst pinnedCount = computed(() => {\n return configExtSystem[props.assetType].customMetadataPinnedAmount\n})\n</script>\n\n<template>\n <ACustomDataForm\n :model-value=\"modelValue\"\n :pinned-count=\"pinnedCount\"\n :elements=\"elements\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @any-change=\"emit('anyChange')\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template #after-pinned>\n <slot name=\"after-pinned\" />\n </template>\n <template #before-pinned>\n <slot name=\"before-pinned\" />\n </template>\n </ACustomDataForm>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n color?: string | null\n width?: number\n height?: number\n }>(),\n {\n color: null,\n width: 20,\n height: 20,\n }\n)\n\nconst style = computed(() => {\n return `background-color: ${props.color ? props.color : 'transparent'}; width: ${props.width}px; height: ${\n props.height\n }px;`\n})\n</script>\n\n<template>\n <div :style=\"style\">\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ color }}\n </VTooltip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AColorBox from '@/components/dam/AColorBox.vue'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport ABooleanValue from '@/components/ABooleanValue.vue'\n\nwithDefaults(\n defineProps<{\n file: AssetFileImage\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.dominantColor') }}</VCol>\n <VCol cols=\"9\">\n <AColorBox :color=\"file.imageAttributes.mostDominantColor\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.width') }}</VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.width }} px\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.height') }}</VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.height }} px\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.ratio') }}</VCol>\n <VCol cols=\"9\">\n {{ file.imageAttributes.ratioWidth }} / {{ file.imageAttributes.ratioHeight }}\n </VCol>\n </VRow>\n <VRow>\n <VCol>{{ t('common.damImage.asset.detail.info.field.animated') }}</VCol>\n <VCol cols=\"9\">\n <ABooleanValue :value=\"file.imageAttributes.animated\" />\n </VCol>\n </VRow>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isNull, isUndefined } from '@/utils/common'\nimport type { DocId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n title?: string\n queueId?: string | undefined\n forceRounded?: boolean\n textOnly?: boolean\n size?: string\n containerClass?: undefined | string\n }>(),\n {\n queueId: undefined,\n title: '',\n forceRounded: false,\n textOnly: false,\n size: 'small',\n containerClass: 'd-inline-flex',\n }\n)\n\nconst { getCachedAuthor } = useDamCachedAuthors()\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst cached = shallowRef<undefined | CachedItem<DamAuthorMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedAuthor(props.id)\n})\n\nconst displayNewIcon = computed(() => {\n if (!props.queueId) return undefined\n const queue = uploadQueuesStore.getQueue(props.queueId)\n if (!queue || !cached.value) return undefined\n if (queue.suggestions.newAuthorNames.has(cached.value.name)) return 'mdi-new-box'\n return undefined\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return cached.value.name + (cached.value.identifier?.length > 0 ? ` (${cached.value.identifier})` : '')\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClass\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"displayNewIcon\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport type { DocId } from '@/types/common'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n queueId?: string | undefined\n }>(),\n {\n queueId: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'addAuthor', data: DocId | null | undefined): void\n}>()\n\nconst clickClose = () => {\n emit('addAuthor', props.id)\n}\n\nconst { getCachedAuthor } = useDamCachedAuthors()\n\nconst cached = shallowRef<undefined | CachedItem<DamAuthorMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedAuthor(props.id)\n})\n\nconst displayTitle = computed(() => {\n if (cached.value) {\n return cached.value.name + (cached.value.identifier?.length > 0 ? ` (${cached.value.identifier})` : '')\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VChip\n size=\"small\"\n closable\n close-icon=\"mdi-plus\"\n @click:close=\"clickClose\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n</template>\n","import { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isUndefined } from '@/utils/common'\nimport type { DamAuthor, DamAuthorMinimal } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { fetchAuthorList, fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { IntegerId } from '@/types/common'\n\nexport const useAuthorSelectActions = (extSystem: IntegerId) => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { getDamConfigExtSystem } = useDamConfigState()\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n const configExtSystem = getDamConfigExtSystem(extSystem)\n if (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n\n const mapToMinimal = (author: DamAuthor): DamAuthorMinimal => ({\n id: author.id,\n name: author.name,\n identifier: author.identifier,\n })\n\n const mapToValueObject = (author: DamAuthor): ValueObjectOption<string> => ({\n title: author.name + (author.identifier ? ` (${author.identifier})` : ''),\n value: author.id,\n })\n\n const mapToValueObjects = (authors: DamAuthor[]): ValueObjectOption<string>[] => {\n return authors.map((author: DamAuthor) => mapToValueObject(author))\n }\n\n const mapToMinimals = (authors: DamAuthor[]): DamAuthorMinimal[] => {\n return authors.map((author: DamAuthor) => mapToMinimal(author))\n }\n\n const fetchItems = async (pagination: Pagination, filterBag: FilterBag) => {\n return mapToValueObjects(await fetchAuthorList(damClient, extSystem, pagination, filterBag))\n }\n\n const fetchItemsMinimal = async (pagination: Pagination, filterBag: FilterBag) => {\n return mapToMinimals(await fetchAuthorList(damClient, extSystem, pagination, filterBag))\n }\n\n const fetchItemsByIds = async (ids: string[]) => {\n return mapToValueObjects(await fetchAuthorListByIds(damClient, extSystem, ids))\n }\n\n return {\n mapToValueObject,\n fetchItems,\n fetchItemsByIds,\n fetchItemsMinimal,\n }\n}\n","import { reactive } from 'vue'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\n\nconst makeFilter = makeFilterHelper(SYSTEM_CORE_DAM, 'author')\n\nexport function useAuthorFilter() {\n return reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n })\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport enum DamAuthorType {\n None = 'none',\n Internal = 'internal',\n External = 'external',\n Agency = 'agency',\n Default = None,\n}\n\nexport function useDamAuthorType() {\n const { t } = useI18n()\n\n const authorTypeOptions = ref<ValueObjectOption<DamAuthorType>[]>([\n {\n value: DamAuthorType.None,\n title: t('common.damImage.author.authorType.none'),\n },\n {\n value: DamAuthorType.Internal,\n title: t('common.damImage.author.authorType.internal'),\n },\n {\n value: DamAuthorType.External,\n title: t('common.damImage.author.authorType.external'),\n },\n {\n value: DamAuthorType.Agency,\n title: t('common.damImage.author.authorType.agency'),\n },\n ])\n\n const getAuthorTypeOption = (value: DamAuthorType) => {\n return authorTypeOptions.value.find((item) => item.value === value)\n }\n\n return {\n authorTypeOptions,\n getAuthorTypeOption,\n }\n}\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport type { ValidationScope } from '@/types/Validation'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\n\nconst { required, minLength } = useValidate()\n\nexport function useAuthorValidation(author: Ref<DamAuthor>, validationScope: ValidationScope = undefined) {\n const rules = computed(() => ({\n author: {\n name: {\n required,\n minLength: minLength(3),\n },\n identifier: {\n minLength: minLength(3),\n },\n },\n }))\n const v$ = useVuelidate(rules, { author }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","import type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { DamAuthorType } from '@/components/damImage/uploadQueue/author/DamAuthorType'\nimport { dateTimeNow } from '@/utils/datetime'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport function useDamAuthorFactory() {\n const createDefault = (extSystemId: number, reviewed?: boolean): DamAuthor => {\n return {\n id: '',\n name: '',\n identifier: '',\n extSystem: extSystemId,\n flags: {\n reviewed: reviewed ?? false,\n },\n type: DamAuthorType.Default,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: 0,\n modifiedBy: 0,\n _resourceName: ENTITY,\n _system: SYSTEM_CORE_DAM,\n }\n }\n\n return {\n createDefault,\n }\n}\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValidationScope } from '@/types/Validation'\nimport { ADamAuthorCreateValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { useDamAuthorType } from '@/components/damImage/uploadQueue/author/DamAuthorType'\nimport { isUndefined } from '@/utils/common'\nimport { useAuthorValidation } from '@/components/damImage/uploadQueue/author/authorValidation'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { createAuthor } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useDamAuthorFactory } from '@/components/damImage/uploadQueue/author/AuthorFactory'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport ARow from '@/components/ARow.vue'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\nimport AFormValueObjectOptionsSelect from '@/components/form/AFormValueObjectOptionsSelect.vue'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n initialValue?: string\n disableRedirect?: boolean\n variant?: 'button' | 'icon'\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n disabled?: boolean | undefined\n validationScope?: ValidationScope\n }>(),\n {\n initialValue: '',\n disableRedirect: false,\n variant: 'button',\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: undefined,\n disabled: undefined,\n validationScope: ADamAuthorCreateValidationScopeSymbol,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSuccess', data: DamAuthor): void\n}>()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { getDamConfigExtSystem } = useDamConfigState()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configExtSystem = getDamConfigExtSystem(props.extSystem)\nif (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n}\n\nconst { createDefault } = useDamAuthorFactory()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst author = ref<DamAuthor>(createDefault(props.extSystem))\nconst dialog = ref(false)\nconst buttonLoading = ref(false)\n\nconst onClick = () => {\n if (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n author.value = createDefault(props.extSystem, true)\n author.value.name = props.initialValue\n dialog.value = true\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { v$ } = useAuthorValidation(author, props.validationScope)\nconst { t } = useI18n()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n if (buttonLoading.value) return\n try {\n buttonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await createAuthor(damClient, author.value)\n emit('onSuccess', res)\n showRecordWas('created')\n dialog.value = false\n if (!isUndefined(res.id) && !props.disableRedirect) {\n // router.push({ name: ROUTE.DAM.AUTHOR.DETAIL, params: { id: res.id } })\n }\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n buttonLoading.value = false\n }\n}\n\nconst { authorTypeOptions } = useDamAuthorType()\n</script>\n\n<template>\n <ABtnPrimary\n v-if=\"variant === 'button'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :disabled=\"disabled\"\n rounded=\"pill\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :disabled=\"disabled\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.author.button.add') }}\n </VTooltip>\n </VBtn>\n <VDialog v-model=\"dialog\">\n <VCard\n v-if=\"dialog\"\n width=\"500\"\n class=\"mt-0 mr-auto ml-auto\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.author.meta.create') }}\n </ADialogToolbar>\n <VCardText>\n <ASystemEntityScope\n :system=\"SYSTEM_CORE_DAM\"\n subject=\"author\"\n >\n <ARow>\n <AFormTextField\n v-model=\"author.name\"\n :label=\"t('common.damImage.author.model.name')\"\n :v=\"v$.author.name\"\n required\n data-cy=\"author-name\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n <ARow>\n <AFormTextField\n v-model=\"author.identifier\"\n :label=\"t('common.damImage.author.model.identifier')\"\n :v=\"v$.author.identifier\"\n data-cy=\"author-identifier\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n <ARow>\n <AFormValueObjectOptionsSelect\n v-model=\"author.type\"\n :label=\"t('common.damImage.author.model.type')\"\n :items=\"authorTypeOptions\"\n data-cy=\"author-type\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n </ASystemEntityScope>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { ValidationScope } from '@/types/Validation'\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport useVuelidate from '@vuelidate/core'\nimport {\n useDamCachedAuthors,\n useDamCachedAuthorsForRemoteAutocomplete,\n} from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { DamAuthor } from '@/components/damImage/uploadQueue/author/DamAuthor'\nimport { isArray } from '@/utils/common'\nimport AFormRemoteAutocompleteWithCached from '@/components/form/AFormRemoteAutocompleteWithCached.vue'\nimport AuthorRemoteAutocompleteCachedAuthorChip from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChip.vue'\nimport AuthorRemoteAutocompleteCachedAuthorChipConflicts from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue'\nimport { useAuthorSelectActions } from '@/components/damImage/uploadQueue/author/authorActions'\nimport { useAuthorFilter } from '@/components/damImage/uploadQueue/author/AuthorFilter'\nimport AuthorCreateButton from '@/components/damImage/uploadQueue/author/AuthorCreateButton.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DocId | null | DocId[] | any\n extSystem: IntegerId\n queueId?: string | undefined\n label?: string | undefined\n required?: boolean | null\n disabled?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n authorConflicts?: DocId[]\n dataCy?: string\n validationScope?: ValidationScope\n }>(),\n {\n label: undefined,\n queueId: undefined,\n required: null,\n disabled: undefined,\n multiple: false,\n clearable: false,\n authorConflicts: undefined,\n dataCy: undefined,\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | null | DocId[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', [...newValue])\n },\n})\n\nconst { t } = useI18n()\n\nconst requiredComputed = computed(() => !!props.required)\n\nconst { requiredIf } = useValidate()\n\nconst rules = {\n modelValueComputed: {\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n required: requiredIf(requiredComputed.value),\n },\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItemsMinimal } = useAuthorSelectActions(props.extSystem)\n\nconst innerFilter = useAuthorFilter()\n\nconst addAuthor = async (id: null | DocId | undefined) => {\n if (!id) return\n if (!modelValueComputed.value.includes(id)) {\n modelValueComputed.value = [...modelValueComputed.value, ...[id]]\n }\n}\n\nconst addNewAuthorText = ref('')\n\nconst searchChange = (newValue: string) => {\n if (newValue.length > 0) addNewAuthorText.value = newValue\n}\n\nconst { addManualToCachedAuthors } = useDamCachedAuthors()\n\nconst afterCreate = (author: DamAuthor) => {\n addManualToCachedAuthors(author)\n if (isArray(modelValueComputed.value)) {\n modelValueComputed.value = [...modelValueComputed.value, author.id]\n return\n }\n modelValueComputed.value = author.id\n}\n\nconst itemSlotIsSelected = (item: DocId) => {\n if (isArray(modelValueComputed.value)) {\n return modelValueComputed.value.includes(item)\n } else if (modelValueComputed.value) {\n return modelValueComputed.value === item\n }\n return false\n}\n\nonMounted(() => {\n //\n})\n</script>\n\n<template>\n <div class=\"d-flex\">\n <AFormRemoteAutocompleteWithCached\n v-model=\"modelValueComputed\"\n :use-cached=\"useDamCachedAuthorsForRemoteAutocomplete\"\n :v=\"v$\"\n :required=\"requiredComputed\"\n :label=\"label\"\n :fetch-items-minimal=\"fetchItemsMinimal\"\n :inner-filter=\"innerFilter\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n :data-cy=\"dataCy\"\n item-title=\"name\"\n item-value=\"id\"\n @search-change=\"searchChange\"\n >\n <template #item=\"{ props: itemSlotProps, item: itemSlotItem }\">\n <VListItem\n v-bind=\"itemSlotProps\"\n @click.prevent=\"\"\n >\n <template\n v-if=\"multiple\"\n #prepend\n >\n <VCheckboxBtn\n :model-value=\"itemSlotIsSelected(itemSlotItem.value)\"\n :ripple=\"false\"\n />\n </template>\n <template #title>\n <AuthorRemoteAutocompleteCachedAuthorChip\n :id=\"itemSlotItem.value\"\n :key=\"itemSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"itemSlotItem.title\"\n text-only\n />\n </template>\n </VListItem>\n </template>\n <template #chip=\"{ item: chipSlotItem }\">\n <AuthorRemoteAutocompleteCachedAuthorChip\n :id=\"chipSlotItem.value\"\n :key=\"chipSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"chipSlotItem.title\"\n force-rounded\n />\n </template>\n </AFormRemoteAutocompleteWithCached>\n <div>\n <AuthorCreateButton\n variant=\"icon\"\n :ext-system=\"extSystem\"\n data-cy=\"add-author\"\n :initial-value=\"addNewAuthorText\"\n disable-redirect\n :disabled=\"disabled\"\n @on-success=\"afterCreate\"\n />\n </div>\n </div>\n <div\n v-if=\"!disabled && authorConflicts && authorConflicts.length > 0\"\n class=\"d-flex flex-column\"\n >\n <div>\n <span class=\"text-caption\">{{ t('common.damImage.author.conflicts') }}</span>\n </div>\n <div>\n <AuthorRemoteAutocompleteCachedAuthorChipConflicts\n v-for=\"authorId in authorConflicts\"\n :id=\"authorId\"\n :key=\"authorId\"\n class=\"mr-1 mt-1\"\n @add-author=\"addAuthor(authorId)\"\n />\n </div>\n </div>\n</template>\n","import { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isUndefined } from '@/utils/common'\nimport type { DamKeyword, DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport type { ValueObjectOption } from '@/types/ValueObject'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { fetchKeywordList, fetchKeywordListByIds } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport type { IntegerId } from '@/types/common'\n\nexport const useKeywordSelectActions = (extSystem: IntegerId) => {\n const { damClient } = useCommonAdminCoreDamOptions()\n const { getDamConfigExtSystem } = useDamConfigState()\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n const configExtSystem = getDamConfigExtSystem(extSystem)\n if (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n\n const mapToValueObject = (keyword: DamKeyword): ValueObjectOption<string> => ({\n title: keyword.name,\n value: keyword.id,\n })\n\n const mapToMinimal = (keyword: DamKeyword): DamKeywordMinimal => ({\n id: keyword.id,\n name: keyword.name,\n })\n\n const mapToValueObjects = (keywords: DamKeyword[]): ValueObjectOption<string>[] => {\n return keywords.map((keyword: DamKeyword) => mapToValueObject(keyword))\n }\n\n const mapToMinimals = (keywords: DamKeyword[]): DamKeywordMinimal[] => {\n return keywords.map((keyword: DamKeyword) => mapToMinimal(keyword))\n }\n\n const fetchItems = async (pagination: Pagination, filterBag: FilterBag) => {\n return mapToValueObjects(await fetchKeywordList(damClient, extSystem, pagination, filterBag))\n }\n\n const fetchItemsMinimal = async (pagination: Pagination, filterBag: FilterBag) => {\n return mapToMinimals(await fetchKeywordList(damClient, extSystem, pagination, filterBag))\n }\n\n const fetchItemsByIds = async (ids: string[]) => {\n return mapToValueObjects(await fetchKeywordListByIds(damClient, extSystem, ids))\n }\n\n return {\n mapToValueObject,\n fetchItems,\n fetchItemsByIds,\n fetchItemsMinimal,\n }\n}\n","import { reactive } from 'vue'\nimport { makeFilterHelper } from '@/composables/filter/filterHelpers'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\n\nconst makeFilter = makeFilterHelper(SYSTEM_CORE_DAM, ENTITY)\n\nconst filter = reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n id: {\n ...makeFilter({ name: 'id' }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n reviewed: {\n ...makeFilter({ name: 'reviewed' }),\n },\n})\n\nexport function useKeywordListFilter() {\n return filter\n}\n\nexport function useKeywordFilter() {\n return reactive({\n _elastic: {\n ...makeFilter({ exclude: true }),\n },\n text: {\n ...makeFilter({ name: 'text' }),\n },\n })\n}\n","<script lang=\"ts\" setup>\nimport { computed, shallowRef, watch } from 'vue'\nimport type { DocId } from '@/types/common'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { CachedItem } from '@/composables/system/defineCached'\nimport type { DamKeywordMinimal } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { isNull, isUndefined } from '@/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n id: null | DocId | undefined\n title?: string\n queueId?: string | undefined\n forceRounded?: boolean\n textOnly?: boolean\n size?: string\n containerClass?: undefined | string\n }>(),\n {\n queueId: undefined,\n title: '',\n forceRounded: false,\n textOnly: false,\n size: 'small',\n containerClass: 'd-inline-flex',\n }\n)\n\nconst { getCachedKeyword } = useDamCachedKeywords()\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst cached = shallowRef<undefined | CachedItem<DamKeywordMinimal>>(undefined)\nconst loaded = shallowRef<boolean>(false)\n\nconst item = computed(() => {\n return getCachedKeyword(props.id)\n})\n\nconst displayNewIcon = computed(() => {\n if (!props.queueId) return undefined\n const queue = uploadQueuesStore.getQueue(props.queueId)\n if (!queue || !cached.value) return undefined\n if (queue.suggestions.newKeywordNames.has(cached.value.name)) return 'mdi-new-box'\n return undefined\n})\n\nconst displayTitle = computed(() => {\n if (props.title.length > 0) return props.title\n if (cached.value) {\n return cached.value.name\n }\n return ''\n})\n\nwatch(\n item,\n async (newValue) => {\n if (loaded.value) return\n if (isUndefined(newValue) || newValue._loaded === false) return\n cached.value = newValue\n loaded.value = true\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div :class=\"containerClass\">\n <template v-if=\"isNull(id) || isUndefined(id)\">\n <slot name=\"empty\">\n -\n </slot>\n </template>\n <div v-else-if=\"textOnly\">\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </div>\n <VChip\n v-else\n :size=\"size\"\n :append-icon=\"displayNewIcon\"\n :label=\"forceRounded ? undefined : true\"\n >\n {{ displayTitle }}\n <VProgressCircular\n v-if=\"!loaded && title.length === 0\"\n :size=\"12\"\n :width=\"2\"\n indeterminate\n class=\"mx-1\"\n />\n </VChip>\n </div>\n</template>\n","import type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { dateTimeNow } from '@/utils/datetime'\nimport { ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\n\nexport function useDamKeywordFactory() {\n const createDefault = (extSystemId: number, reviewed?: boolean): DamKeyword => {\n return {\n id: '',\n name: '',\n extSystem: extSystemId,\n flags: {\n reviewed: reviewed ?? false,\n },\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: 1,\n modifiedBy: 1,\n _resourceName: ENTITY,\n _system: SYSTEM_CORE_DAM,\n }\n }\n\n return {\n createDefault,\n }\n}\n","import type { Ref } from 'vue'\nimport { computed } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport type { ValidationScope } from '@/types/Validation'\n\nconst { required, minLength } = useValidate()\n\nexport function useKeywordValidation(keyword: Ref<DamKeyword>, validationScope: ValidationScope = undefined) {\n const rules = computed(() => ({\n keyword: {\n name: {\n required,\n minLength: minLength(3),\n },\n },\n }))\n const v$ = useVuelidate(rules, { keyword }, { $scope: validationScope })\n\n return {\n v$,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { ValidationScope } from '@/types/Validation'\nimport { ADamKeywordCreateValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { isUndefined } from '@/utils/common'\nimport { useDamKeywordFactory } from '@/components/damImage/uploadQueue/keyword/KeywordFactory'\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useKeywordValidation } from '@/components/damImage/uploadQueue/keyword/keywordValidation'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\nimport { SYSTEM_CORE_DAM } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { createKeyword, ENTITY } from '@/components/damImage/uploadQueue/api/keywordApi'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport ARow from '@/components/ARow.vue'\nimport AFormTextField from '@/components/form/AFormTextField.vue'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n initialValue?: string\n disableRedirect?: boolean\n variant?: 'button' | 'icon'\n buttonT?: string\n buttonClass?: string\n dataCy?: string\n disabled?: boolean | undefined\n validationScope?: ValidationScope\n }>(),\n {\n initialValue: '',\n disableRedirect: false,\n variant: 'button',\n buttonT: 'common.button.create',\n buttonClass: 'ml-2',\n dataCy: undefined,\n disabled: undefined,\n validationScope: ADamKeywordCreateValidationScopeSymbol,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSuccess', data: DamKeyword): void\n}>()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\nconst { getDamConfigExtSystem } = useDamConfigState()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configExtSystem = getDamConfigExtSystem(props.extSystem)\nif (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n}\n\nconst { createDefault } = useDamKeywordFactory()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst keyword = ref<DamKeyword>(createDefault(props.extSystem))\nconst dialog = ref(false)\nconst buttonLoading = ref(false)\n\nconst onClick = () => {\n if (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n keyword.value = createDefault(props.extSystem, true)\n keyword.value.name = props.initialValue\n dialog.value = true\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { v$ } = useKeywordValidation(keyword, props.validationScope)\nconst { t } = useI18n()\nconst { showValidationError, showRecordWas, showErrorsDefault } = useAlerts()\n\nconst onConfirm = async () => {\n if (buttonLoading.value) return\n try {\n buttonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n buttonLoading.value = false\n return\n }\n const res = await createKeyword(damClient, keyword.value)\n emit('onSuccess', res)\n showRecordWas('created')\n dialog.value = false\n if (!isUndefined(res.id) && !props.disableRedirect) {\n // router.push({ name: ROUTE.DAM.KEYWORD.DETAIL, params: { id: res.id } })\n }\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n buttonLoading.value = false\n }\n}\n</script>\n\n<template>\n <ABtnPrimary\n v-if=\"variant === 'button'\"\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n :disabled=\"disabled\"\n rounded=\"pill\"\n @click.stop=\"onClick\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n <VBtn\n v-else\n :class=\"buttonClass\"\n :data-cy=\"dataCy\"\n icon\n :disabled=\"disabled\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.keyword.button.add') }}\n </VTooltip>\n </VBtn>\n <VDialog v-model=\"dialog\">\n <VCard\n v-if=\"dialog\"\n width=\"500\"\n class=\"mt-0 mr-auto ml-auto\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.keyword.meta.create') }}\n </ADialogToolbar>\n <VCardText>\n <ASystemEntityScope\n :system=\"SYSTEM_CORE_DAM\"\n :subject=\"ENTITY\"\n >\n <ARow>\n <AFormTextField\n v-model=\"keyword.name\"\n :label=\"t('common.damImage.keyword.model.name')\"\n :v=\"v$.keyword.name\"\n required\n data-cy=\"keyword-name\"\n @keyup.enter=\"onConfirm\"\n />\n </ARow>\n </ASystemEntityScope>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n :loading=\"buttonLoading\"\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t(buttonT) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { ValidationScope } from '@/types/Validation'\nimport { computed, ref } from 'vue'\nimport { useValidate } from '@/validators/vuelidate/useValidate'\nimport useVuelidate from '@vuelidate/core'\nimport { useKeywordSelectActions } from '@/components/damImage/uploadQueue/keyword/keywordActions'\nimport { useKeywordFilter } from '@/components/damImage/uploadQueue/keyword/KeywordFilter'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport type { DamKeyword } from '@/components/damImage/uploadQueue/keyword/DamKeyword'\nimport { isArray } from '@/utils/common'\nimport AFormRemoteAutocompleteWithCached from '@/components/form/AFormRemoteAutocompleteWithCached.vue'\nimport { useDamCachedAuthorsForRemoteAutocomplete } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport KeywordRemoteAutocompleteCachedKeywordChip from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteCachedKeywordChip.vue'\nimport KeywordCreateButton from '@/components/damImage/uploadQueue/keyword/KeywordCreateButton.vue'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DocId | null | DocId[] | any\n extSystem: IntegerId\n queueId?: string | undefined\n label?: string | undefined\n required?: boolean | null\n disabled?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n dataCy?: string\n validationScope?: ValidationScope\n }>(),\n {\n label: undefined,\n queueId: undefined,\n required: null,\n disabled: undefined,\n multiple: false,\n clearable: false,\n dataCy: undefined,\n validationScope: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: DocId | null | DocId[]): void\n}>()\n\nconst modelValueComputed = computed({\n get() {\n return props.modelValue\n },\n set(newValue) {\n emit('update:modelValue', [...newValue])\n },\n})\n\nconst requiredComputed = computed(() => !!props.required)\n\nconst { requiredIf } = useValidate()\n\nconst rules = {\n modelValueComputed: {\n required: requiredIf(requiredComputed),\n },\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst v$ = useVuelidate(rules, { modelValueComputed }, { $scope: props.validationScope })\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { fetchItemsMinimal } = useKeywordSelectActions(props.extSystem)\n\nconst innerFilter = useKeywordFilter()\n\nconst addNewKeywordText = ref('')\n\nconst searchChange = (newValue: string) => {\n if (newValue.length > 0) addNewKeywordText.value = newValue\n}\n\nconst { addManualToCachedKeywords } = useDamCachedKeywords()\n\nconst afterCreate = (keyword: DamKeyword) => {\n addManualToCachedKeywords(keyword)\n if (isArray(modelValueComputed.value)) {\n modelValueComputed.value = [...modelValueComputed.value, keyword.id]\n return\n }\n modelValueComputed.value = keyword.id\n}\n\nconst itemSlotIsSelected = (item: DocId) => {\n if (isArray(modelValueComputed.value)) {\n return modelValueComputed.value.includes(item)\n } else if (modelValueComputed.value) {\n return modelValueComputed.value === item\n }\n return false\n}\n</script>\n\n<template>\n <div class=\"d-flex\">\n <AFormRemoteAutocompleteWithCached\n v-model=\"modelValueComputed\"\n :use-cached=\"useDamCachedAuthorsForRemoteAutocomplete\"\n :v=\"v$\"\n :required=\"requiredComputed\"\n :label=\"label\"\n :fetch-items-minimal=\"fetchItemsMinimal\"\n :inner-filter=\"innerFilter\"\n :multiple=\"multiple\"\n :clearable=\"clearable\"\n filter-by-field=\"text\"\n :filter-sort-by=\"null\"\n item-title=\"name\"\n item-value=\"id\"\n :data-cy=\"dataCy\"\n @search-change=\"searchChange\"\n >\n <template #item=\"{ props: itemSlotProps, item: itemSlotItem }\">\n <VListItem\n v-bind=\"itemSlotProps\"\n @click.prevent=\"\"\n >\n <template\n v-if=\"multiple\"\n #prepend\n >\n <VCheckboxBtn\n :model-value=\"itemSlotIsSelected(itemSlotItem.value)\"\n :ripple=\"false\"\n />\n </template>\n <template #title>\n <KeywordRemoteAutocompleteCachedKeywordChip\n :id=\"itemSlotItem.value\"\n :key=\"itemSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"itemSlotItem.title\"\n text-only\n />\n </template>\n </VListItem>\n </template>\n <template #chip=\"{ item: chipSlotItem }\">\n <KeywordRemoteAutocompleteCachedKeywordChip\n :id=\"chipSlotItem.value\"\n :key=\"chipSlotItem.value\"\n :queue-id=\"queueId\"\n :title=\"chipSlotItem.title\"\n force-rounded\n />\n </template>\n </AFormRemoteAutocompleteWithCached>\n <div>\n <KeywordCreateButton\n variant=\"icon\"\n data-cy=\"add-keyword\"\n :ext-system=\"extSystem\"\n :initial-value=\"addNewKeywordText\"\n disable-redirect\n :disabled=\"disabled\"\n @on-success=\"afterCreate\"\n />\n </div>\n </div>\n</template>\n","import { computed } from 'vue'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport type { IntegerId } from '@/types/common'\nimport { isUndefined } from '@/utils/common'\n\nexport const useDamKeywordAssetTypeConfig = (assetType: DamAssetType, extSystem: IntegerId) => {\n const { getDamConfigExtSystem } = useDamConfigState()\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n const configExtSystem = getDamConfigExtSystem(extSystem)\n\n if (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n\n const keywordEnabled = computed(() => {\n return configExtSystem[assetType].keywords.enabled\n })\n\n const keywordRequired = computed(() => {\n return configExtSystem[assetType].keywords.required\n })\n\n return {\n keywordEnabled,\n keywordRequired,\n }\n}\n","import { computed } from 'vue'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport type { IntegerId } from '@/types/common'\nimport { isUndefined } from '@/utils/common'\n\nexport const useDamAuthorAssetTypeConfig = (assetType: DamAssetType, extSystem: IntegerId) => {\n const { getDamConfigExtSystem } = useDamConfigState()\n const configExtSystem = getDamConfigExtSystem(extSystem)\n\n if (isUndefined(configExtSystem)) {\n throw new Error('Ext system must be initialised.')\n }\n\n const authorEnabled = computed(() => {\n return configExtSystem[assetType].authors.enabled\n })\n\n const authorRequired = computed(() => {\n return configExtSystem[assetType].authors.required\n })\n\n return {\n authorEnabled,\n authorRequired,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref } from 'vue'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { type AssetFile, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport ACopyText from '@/components/ACopyText.vue'\nimport { prettyBytes } from '@/utils/file'\nimport AssetMetadataImageAttributes from '@/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { dateTimePretty } from '@/utils/datetime'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { useDamKeywordAssetTypeConfig } from '@/components/damImage/uploadQueue/keyword/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/components/damImage/uploadQueue/author/damAuthorConfig'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, authorConflicts, metadataAreTouched } = storeToRefs(assetDetailStore)\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetType.Default\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\n\nconst assetMainFile = computed<null | AssetFile>(() => {\n return asset.value && asset.value.mainFile ? (asset.value.mainFile as AssetFile) : null\n})\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(assetType.value, props.extSystem)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(assetType.value, props.extSystem)\n</script>\n\n<template>\n <VExpansionPanels\n v-if=\"asset\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataForm\n v-if=\"asset\"\n v-model=\"asset.metadata.customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"asset.keywords\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"asset.authors\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.file')\"\n value=\"file\"\n >\n <VExpansionPanelText class=\"text-caption\">\n <!-- all types -->\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.id') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"asset.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.type') }}\n </VCol>\n <VCol cols=\"9\">\n {{ asset.attributes.assetType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.created') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.createdAt) }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.modified') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.modifiedAt) }}\n </VCol>\n </VRow>\n <div v-if=\"assetMainFile\">\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mainFileId') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"assetMainFile.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mimeType') }}\n </VCol>\n <VCol cols=\"9\">\n {{ assetMainFile.fileAttributes.mimeType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.size') }}\n </VCol>\n <VCol cols=\"9\">\n {{ prettyBytes(assetMainFile.fileAttributes.size) }}\n </VCol>\n </VRow>\n <AssetMetadataImageAttributes\n v-if=\"isTypeImage && assetFileIsImageFile(assetMainFile)\"\n :file=\"assetMainFile\"\n />\n </div>\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport { isNull } from '@/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetMetadata from '@/components/damImage/uploadQueue/components/AssetMetadata.vue'\nimport { updateAssetMetadata } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n isActive: boolean\n dataCy?: string\n assetType: DamAssetType\n extSystem: IntegerId\n }>(),\n {\n dataCy: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, updateUploadStore } = storeToRefs(assetDetailStore)\nconst uploadQueueStore = useUploadQueuesStore()\n\nconst saveButtonLoading = ref(false)\n\nconst { showRecordWas, showValidationError, showErrorsDefault } = useAlerts()\n\nconst v$ = useVuelidate({}, {}, { $scope: ADamAssetMetadataValidationScopeSymbol })\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onSave = async () => {\n if (isNull(asset.value)) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await updateAssetMetadata(damClient, asset.value, props.extSystem)\n if (updateUploadStore.value && !isNull(asset.value)) {\n await uploadQueueStore.updateFromDetail(asset.value)\n }\n showRecordWas('updated')\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveButtonLoading.value = false\n }\n}\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper\n v-if=\"isActive\"\n :queue-key=\"queueKey\"\n >\n <ABtnPrimary\n type=\"submit\"\n class=\"ml-2\"\n data-cy=\"button-save\"\n :loading=\"saveButtonLoading\"\n @click.stop=\"onSave\"\n >\n {{ t('common.button.save') }}\n </ABtnPrimary>\n </AssetDetailSidebarActionsWrapper>\n <AssetMetadata :ext-system=\"extSystem\" />\n</template>\n","import { acceptHMRUpdate, defineStore } from 'pinia'\nimport type { AssetFileImage } from '@/types/coreDam/AssetFile'\nimport type { RegionOfInterest } from '@/types/coreDam/Roi'\n\ninterface State {\n imageFile: null | AssetFileImage\n loader: boolean\n roi: null | RegionOfInterest\n timestampCropper: number\n timestampRoiPreviews: number\n}\n\nexport const useImageRoiStore = defineStore('damImageRoiStore', {\n state: (): State => ({\n imageFile: null,\n loader: false,\n roi: null,\n timestampCropper: Date.now(),\n timestampRoiPreviews: Date.now(),\n }),\n actions: {\n setImageFile(file: AssetFileImage | null) {\n this.imageFile = file\n },\n setRoi(roi: RegionOfInterest | null) {\n this.roi = roi\n },\n showLoader() {\n this.loader = true\n },\n hideLoader() {\n this.loader = false\n },\n forceReloadRoiPreviews() {\n this.timestampRoiPreviews = Date.now()\n },\n forceReloadCropper() {\n this.timestampCropper = Date.now()\n },\n reset() {\n this.imageFile = null\n this.loader = false\n this.roi = null\n this.timestampCropper = Date.now()\n this.timestampRoiPreviews = Date.now()\n },\n },\n})\n\nif (import.meta.hot) {\n import.meta.hot.accept(acceptHMRUpdate(useImageRoiStore, import.meta.hot))\n}\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DocId } from '@/types/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { rotateImage } from '@/components/damImage/uploadQueue/api/damImageApi'\n\nconst props = withDefaults(\n defineProps<{\n imageId: DocId\n dataCy?: string\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'afterRotate'): void\n}>()\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst loading = ref(false)\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst rotate = async (angle: 90 | 270) => {\n try {\n loading.value = true\n await rotateImage(damClient, props.imageId, angle)\n showRecordWas('updated')\n emit('afterRotate')\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n}\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <div class=\"text-caption\">\n {{ t('common.damImage.asset.detail.roi.rotate.rotateMainFileImage') }}\n </div>\n <div\n v-if=\"loading\"\n class=\"w-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n <div v-else>\n <ABtnTertiary\n prepend-icon=\"mdi-rotate-right\"\n class=\"mr-2\"\n data-cy=\"button-rotate-right\"\n @click.stop=\"rotate(90)\"\n >\n {{ t('common.damImage.asset.detail.roi.rotate.rotateClockwise') }}\n </ABtnTertiary>\n <ABtnTertiary\n prepend-icon=\"mdi-rotate-left\"\n data-cy=\"button-rotate-left\"\n @click.stop=\"rotate(270)\"\n >\n {{ t('common.damImage.asset.detail.roi.rotate.rotateCounterclockwise') }}\n </ABtnTertiary>\n </div>\n </div>\n</template>\n","import type { RegionOfInterest } from '@/types/coreDam/Roi'\nimport type { AxiosInstance } from 'axios'\nimport type { DocId } from '@/types/common'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiUpdateOne } from '@/services/api/apiUpdateOne'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\n\n// export interface AssetMetadataBulkItem {\n// id: DocId\n// title: string\n// description: string\n// described: boolean\n// }\n\nconst END_POINT = '/adm/v1/roi'\nconst END_POINT_IMAGE_ROI = '/adm/v1/image/:id/roi'\nexport const ENTITY = 'asset'\n\nexport const fetchRoi = (client: () => AxiosInstance, id: DocId) =>\n apiFetchOne<RegionOfInterest>(client, END_POINT + '/:id', { id }, 'coreDam', ENTITY)\n\nexport const updateRoi = (client: () => AxiosInstance, id: DocId, data: RegionOfInterest) =>\n apiUpdateOne<RegionOfInterest>(client, data, END_POINT + '/:id', { id }, 'coreDam', ENTITY)\n\nexport const fetchImageRoiList = (\n client: () => AxiosInstance,\n imageId: DocId,\n pagination: Pagination,\n filterBag: FilterBag\n) => apiFetchList<any[]>(client, END_POINT_IMAGE_ROI, { id: imageId }, pagination, filterBag, 'coreDam', ENTITY)\n","<script lang=\"ts\" setup>\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useImageRoiStore } from '@/components/damImage/uploadQueue/composables/imageRoiStore'\nimport { useI18n } from 'vue-i18n'\nimport { usePagination } from '@/composables/system/pagination'\nimport { assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { cloneDeep } from '@/utils/common'\nimport { onMounted } from 'vue'\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport AssetFileRotate from '@/components/damImage/uploadQueue/components/AssetFileRotate.vue'\nimport { fetchImageRoiList, fetchRoi } from '@/components/damImage/uploadQueue/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nwithDefaults(\n defineProps<{\n isActive: boolean\n queueKey: UploadQueueKey\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst imageRoiStore = useImageRoiStore()\nconst assetDetailStore = useAssetDetailStore()\n\nconst pagination = usePagination()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst loadRois = async () => {\n if (imageRoiStore.imageFile) {\n imageRoiStore.showLoader()\n const res = await fetchImageRoiList(damClient, imageRoiStore.imageFile.id, pagination, {})\n if (res.length > 0 && res[0].id) {\n const roi = await fetchRoi(damClient, res[0].id)\n imageRoiStore.setRoi(roi)\n imageRoiStore.hideLoader()\n return\n }\n imageRoiStore.setRoi(null)\n imageRoiStore.hideLoader()\n return\n }\n imageRoiStore.setRoi(null)\n imageRoiStore.hideLoader()\n}\n\nconst afterRotate = async () => {\n await loadRois()\n imageRoiStore.forceReloadRoiPreviews()\n imageRoiStore.forceReloadCropper()\n}\n\n// const activeSlotChange = async (slot: null | AssetSlot) => {\n// imageRoiStore.setRoi(null)\n// if (!slot || !assetFileIsImageFile(slot.assetFile)) return\n// imageRoiStore.showLoader()\n// const imageFileDetail = await fetchImageFile(slot.assetFile.id)\n// imageRoiStore.setImageFile(cloneDeep(imageFileDetail))\n// await loadRois()\n// imageRoiStore.forceReloadRoiPreviews()\n// imageRoiStore.forceReloadCropper()\n// }\n\nonMounted(async () => {\n imageRoiStore.reset()\n imageRoiStore.showLoader()\n if (\n assetDetailStore.asset &&\n assetDetailStore.asset.mainFile &&\n assetFileIsImageFile(assetDetailStore.asset.mainFile)\n ) {\n imageRoiStore.setImageFile(cloneDeep(assetDetailStore.asset.mainFile))\n await loadRois()\n }\n imageRoiStore.hideLoader()\n})\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper\n v-if=\"isActive\"\n :queue-key=\"queueKey\"\n >\n <ABtnTertiary\n v-if=\"!imageRoiStore.loader\"\n @click.stop=\"imageRoiStore.forceReloadRoiPreviews()\"\n >\n {{ t('common.damImage.asset.detail.roi.refresh') }}\n </ABtnTertiary>\n </AssetDetailSidebarActionsWrapper>\n <div class=\"px-3\">\n <!-- <AssetDetailSlotSelect-->\n <!-- class=\"mt-4\"-->\n <!-- @active-slot-change=\"activeSlotChange\"-->\n <!-- />-->\n <div class=\"v-expansion-panel-title px-0\">\n {{ t('common.damImage.asset.detail.roi.title') }}\n </div>\n <div class=\"text-caption\">\n {{ t('common.damImage.asset.detail.roi.description') }}\n </div>\n </div>\n <div\n v-if=\"imageRoiStore.loader\"\n class=\"w-100 h-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n />\n </div>\n <div\n v-else-if=\"imageRoiStore.roi\"\n class=\"crop-preview pa-2\"\n >\n <div\n v-for=\"item in imageRoiStore.roi?.links.image_roi_example\"\n :key=\"item.url\"\n class=\"pb-2\"\n >\n <div class=\"text-subtitle-2\">\n {{ item.title }}\n </div>\n <img\n :src=\"item.url + '?timestamp=' + imageRoiStore.timestampRoiPreviews\"\n :width=\"item.width\"\n :height=\"item.height\"\n alt=\"\"\n >\n </div>\n </div>\n <AssetFileRotate\n v-if=\"imageRoiStore.imageFile\"\n :image-id=\"imageRoiStore.imageFile.id\"\n class=\"mx-2\"\n @after-rotate=\"afterRotate\"\n />\n</template>\n\n<style lang=\"scss\">\n.crop-preview {\n width: 100%;\n\n img {\n max-width: 100%;\n height: auto;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { nextTick, onBeforeUnmount, onMounted } from 'vue'\nimport { useAssetDetailSidebarActionbar } from '@/components/damImage/uploadQueue/composables/assetDetailSidebarActionbar'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n }>(),\n {\n }\n)\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { mounted, unMounted, divClassName } = useAssetDetailSidebarActionbar(props.queueKey)\n\nonMounted(async () => {\n await nextTick()\n mounted()\n})\n\nonBeforeUnmount(() => {\n unMounted()\n})\n</script>\n\n<template>\n <div :class=\"divClassName\" />\n</template>\n","<script setup lang=\"ts\">\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { useI18n } from 'vue-i18n'\nimport AssetInfobox from '@/components/damImage/uploadQueue/components/AssetInfobox.vue'\nimport AssetDetailSidebarMetadata from '@/components/damImage/uploadQueue/components/AssetDetailSidebarMetadata.vue'\nimport AssetDetailSidebarROI from '@/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue'\nimport AssetDetailSidebarActionsTeleportTarget from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nwithDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n extSystem: IntegerId\n assetId: DocId\n isVideo: boolean\n isAudio: boolean\n isImage: boolean\n isDocument: boolean\n dataCy?: string\n assetStatus: DamAssetStatus\n assetType: DamAssetType\n assetMainFileStatus?: AssetFileProcessStatus | undefined\n assetMainFileFailReason?: AssetFileFailReason | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n dataCy: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab } = storeToRefs(assetDetailStore)\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs\n v-model=\"activeTab\"\n show-arrows\n class=\"sidebar-info__tabs\"\n >\n <VTab\n :value=\"AssetDetailTabImageWithRoi.Info\"\n data-cy=\"button-meta\"\n >\n {{ t('common.damImage.asset.detail.tabs.info') }}\n </VTab>\n <VTab\n v-if=\"isImage\"\n :value=\"AssetDetailTabImageWithRoi.ROI\"\n data-cy=\"button-focus\"\n >\n {{ t('common.damImage.asset.detail.tabs.roi') }}\n </VTab>\n </VTabs>\n\n <div class=\"sidebar-info__content\">\n <AssetInfobox\n :asset-status=\"assetStatus\"\n :asset-main-file-status=\"assetMainFileStatus\"\n :asset-main-file-fail-reason=\"assetMainFileFailReason\"\n />\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n class=\"py-2\"\n >\n <AssetDetailSidebarMetadata\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n :asset-type=\"assetType\"\n />\n </div>\n <div\n v-if=\"isImage && activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"py-2\"\n >\n <AssetDetailSidebarROI\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n :queue-key=\"queueKey\"\n />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget :queue-key=\"queueKey\" />\n </div>\n </div>\n </div>\n</template>\n","import type { RegionOfInterest } from '@/types/coreDam/Roi'\nimport type Cropper from 'cropperjs'\nimport { stringToFloat, stringToInt } from '@/utils/string'\n\nconst PRECISION = 3\n\nexport const regionToCrop = function (\n cropper: Cropper,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n) {\n const imageData = cropper.getImageData()\n const ratio = imageData.naturalHeight / originalImageHeight\n\n return {\n x: regionOfInterest.pointX * ratio,\n y: regionOfInterest.pointY * ratio,\n width: regionOfInterest.percentageWidth * imageData.naturalWidth,\n height: regionOfInterest.percentageHeight * imageData.naturalHeight,\n rotate: 0,\n scaleX: 1,\n scaleY: 1,\n }\n}\n\nexport const cropToRegion = function (\n cropper: Cropper,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n) {\n const imageData = cropper.getImageData()\n const data = cropper.getData()\n const ratio = imageData.naturalHeight / originalImageHeight\n\n let pointX = stringToInt((data.x / ratio).toFixed(PRECISION))\n if (pointX < 0) pointX = 0\n\n let pointY = stringToInt((data.y / ratio).toFixed(PRECISION))\n if (pointY < 0) pointY = 0\n\n let percentageWidth = stringToFloat((data.width / imageData.naturalWidth).toFixed(PRECISION))\n const validateWidth = percentageWidth * originalImageWidth + pointX\n if (validateWidth > originalImageWidth) {\n percentageWidth = percentageWidth - ((validateWidth - originalImageWidth) * 100) / originalImageWidth\n }\n\n let percentageHeight = stringToFloat((data.height / imageData.naturalHeight).toFixed(PRECISION))\n const validateHeight = percentageHeight * originalImageHeight + pointY\n if (validateHeight > originalImageHeight) {\n percentageHeight = percentageHeight - ((validateHeight - originalImageHeight) * 100) / originalImageHeight\n }\n\n regionOfInterest.pointX = pointX\n regionOfInterest.pointY = pointY\n regionOfInterest.percentageWidth = percentageWidth\n regionOfInterest.percentageHeight = percentageHeight\n\n return regionOfInterest\n}\n","/*!\n * Cropper.js v1.6.1\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-09-17T03:44:19.860Z\n */\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\nvar IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\nvar HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nvar NAMESPACE = 'cropper';\n\n// Actions\nvar ACTION_ALL = 'all';\nvar ACTION_CROP = 'crop';\nvar ACTION_MOVE = 'move';\nvar ACTION_ZOOM = 'zoom';\nvar ACTION_EAST = 'e';\nvar ACTION_WEST = 'w';\nvar ACTION_SOUTH = 's';\nvar ACTION_NORTH = 'n';\nvar ACTION_NORTH_EAST = 'ne';\nvar ACTION_NORTH_WEST = 'nw';\nvar ACTION_SOUTH_EAST = 'se';\nvar ACTION_SOUTH_WEST = 'sw';\n\n// Classes\nvar CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\nvar CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\nvar CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n// Data keys\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\nvar DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n// Drag modes\nvar DRAG_MODE_CROP = 'crop';\nvar DRAG_MODE_MOVE = 'move';\nvar DRAG_MODE_NONE = 'none';\n\n// Events\nvar EVENT_CROP = 'crop';\nvar EVENT_CROP_END = 'cropend';\nvar EVENT_CROP_MOVE = 'cropmove';\nvar EVENT_CROP_START = 'cropstart';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nvar EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nvar EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nvar EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nvar EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nvar EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nvar EVENT_READY = 'ready';\nvar EVENT_RESIZE = 'resize';\nvar EVENT_WHEEL = 'wheel';\nvar EVENT_ZOOM = 'zoom';\n\n// Mime types\nvar MIME_TYPE_JPEG = 'image/jpeg';\n\n// RegExps\nvar REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\nvar REGEXP_DATA_URL = /^data:/;\nvar REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\nvar REGEXP_TAG_NAME = /^img|canvas$/i;\n\n// Misc\n// Inspired by the default width and height of a canvas element.\nvar MIN_CONTAINER_WIDTH = 200;\nvar MIN_CONTAINER_HEIGHT = 100;\n\nvar DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n};\n\nvar TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n/**\n * Check if the given value is not a number.\n */\nvar isNaN = Number.isNaN || WINDOW.isNaN;\n\n/**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\nfunction isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nvar isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n};\n\n/**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\nfunction isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\nfunction isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nvar slice = Array.prototype.slice;\n\n/**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\nfunction toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n}\n\n/**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\nfunction forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n}\n\n/**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\nvar assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n};\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n/**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\nfunction normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\nvar REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n/**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\nfunction setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n}\n\n/**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\nfunction hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n}\n\n/**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\nfunction addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n}\n\n/**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\nfunction removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n}\n\n/**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\nfunction toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n}\nvar REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n/**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\nfunction toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n}\n\n/**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\nfunction getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n}\n\n/**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\nfunction setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n}\n\n/**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\nfunction removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n}\nvar REGEXP_SPACES = /\\s\\s*/;\nvar onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n}();\n\n/**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n}\n\n/**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n}\n\n/**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\nfunction dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n}\n\n/**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\nfunction getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n}\nvar location = WINDOW.location;\nvar REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n/**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\nfunction isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n}\n\n/**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\nfunction addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n}\n\n/**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\nfunction getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n}\n\n/**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\nfunction getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n}\n\n/**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\nfunction getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n}\n\n/**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\nfunction getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n}\n\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\nfunction getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n}\n\n/**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\nfunction getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n}\n\n/**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\nfunction getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n}\nvar fromCharCode = String.fromCharCode;\n\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\nfunction getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n}\nvar REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n/**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\nfunction dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n}\n\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\nfunction resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n}\n\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\nfunction parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\nvar render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n};\n\nvar preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n};\n\nvar events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n};\n\nvar handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n};\n\nvar change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n};\n\nvar methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n};\n\nvar AnotherCropper = WINDOW.Cropper;\nvar Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n return Cropper;\n}();\nassign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\nexport { Cropper as default };\n","<script setup lang=\"ts\" generic=\"T extends EventTarget = EventTarget\">\nimport Cropper from 'cropperjs'\nimport { nextTick, onMounted, onUnmounted, ref } from 'vue'\nimport { isNull } from '@/utils/common'\nimport 'cropperjs/dist/cropper.css'\n\nconst props = withDefaults(\n defineProps<{\n // Library props\n src?: string\n alt?: string\n containerStyle?: { [key: string]: string } | undefined\n imgStyle?: { [key: string]: string } | undefined\n // CropperJS props\n aspectRatio?: number\n autoCrop?: boolean\n autoCropArea?: number\n background?: boolean\n center?: boolean\n checkCrossOrigin?: boolean\n checkOrientation?: boolean\n cropBoxMovable?: boolean\n cropBoxResizable?: boolean\n data?: Cropper.SetDataOptions | null\n dragMode?: Cropper.DragMode\n guides?: boolean\n highlight?: boolean\n initialAspectRatio?: number\n modal?: boolean\n movable?: boolean\n preview?: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement> | string\n responsive?: boolean\n restore?: boolean\n rotatable?: boolean\n scalable?: boolean\n toggleDragModeOnDblclick?: boolean\n viewMode?: Cropper.ViewMode\n wheelZoomRatio?: number\n zoomOnTouch?: boolean\n zoomOnWheel?: boolean\n zoomable?: boolean\n // Size limitation\n minCanvasWidth?: number\n minCanvasHeight?: number\n minContainerWidth?: number\n minContainerHeight?: number\n minCropBoxWidth?: number\n minCropBoxHeight?: number\n // callbacks\n ready?: null | ((event: Cropper.ReadyEvent<T>) => void)\n crop?: null | ((event: Cropper.CropEvent<T>) => void)\n cropend?: null | ((event: Cropper.CropEndEvent<T>) => void)\n cropmove?: null | ((event: Cropper.CropMoveEvent<T>) => void)\n cropstart?: null | ((event: Cropper.CropStartEvent<T>) => void)\n zoom?: null | ((event: Cropper.ZoomEvent<T>) => void)\n }>(),\n {\n containerStyle: undefined,\n src: '',\n alt: '',\n imgStyle: undefined,\n aspectRatio: NaN,\n autoCrop: true,\n autoCropArea: 0.8,\n background: true,\n center: true,\n checkCrossOrigin: true,\n checkOrientation: true,\n cropBoxMovable: true,\n cropBoxResizable: true,\n data: null,\n dragMode: 'crop',\n guides: true,\n highlight: true,\n initialAspectRatio: NaN,\n modal: true,\n movable: true,\n preview: '',\n responsive: true,\n restore: true,\n rotatable: true,\n scalable: true,\n toggleDragModeOnDblclick: true,\n viewMode: 0,\n wheelZoomRatio: 0.1,\n zoomOnTouch: true,\n zoomable: true,\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minContainerWidth: 200,\n minContainerHeight: 100,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n ready: null,\n crop: null,\n cropend: null,\n cropmove: null,\n cropstart: null,\n zoom: null,\n }\n)\n\nconst cropperInstance = ref<InstanceType<typeof Cropper> | null>(null)\nconst imgEl = ref<HTMLImageElement | HTMLCanvasElement | null>(null)\nconst loading = ref(true)\n\nconst enable = () => {\n cropperInstance.value?.enable()\n}\n\nconst disable = () => {\n cropperInstance.value?.disable()\n}\n\nconst destroy = () => {\n cropperInstance.value?.destroy()\n}\n\nconst getImageData = () => {\n return cropperInstance.value?.getImageData()\n}\n\nconst getData = () => {\n return cropperInstance.value?.getData()\n}\n\nconst setData = (data: Cropper.SetDataOptions) => {\n return cropperInstance.value?.setData(data)\n}\n\ndefineExpose({\n enable,\n disable,\n destroy,\n getImageData,\n getData,\n setData,\n})\n\nonMounted(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { containerStyle, src, alt, imgStyle, ...data } = props\n const propsOptions = data as Record<string, any>\n const options: Record<string, any> = {}\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(propsOptions, key) && propsOptions[key] !== undefined) {\n options[key] = propsOptions[key]\n }\n }\n nextTick(() => {\n if (!isNull(imgEl.value)) {\n console.log(imgEl.value)\n cropperInstance.value = new Cropper(imgEl.value as any, options)\n setTimeout(() => {\n loading.value = false\n }, 1000)\n }\n })\n})\n\nonUnmounted(() => {\n destroy()\n})\n</script>\n\n<template>\n <div class=\"d-flex flex-column\">\n <div\n v-if=\"loading\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n\n <div :style=\"containerStyle\">\n <img\n ref=\"imgEl\"\n :style=\"[{ 'max-width': '100%', opacity: loading ? 0 : 1 }, imgStyle]\"\n :alt=\"alt\"\n :src=\"src\"\n >\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref } from 'vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useImageRoiStore } from '@/components/damImage/uploadQueue/composables/imageRoiStore'\nimport { updateRoi } from '@/components/damImage/uploadQueue/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport { cropToRegion, regionToCrop } from '@/components/damImage/uploadQueue/composables/cropperJsService'\nimport ACropperjs from '@/components/ACropperjs.vue'\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst DAM_IMAGE_ASPECT_RATIO = 16 / 9\nconst cropperContainerStyle = { overflow: 'hidden', maxHeight: 'calc(100vh - 160px)' }\n\nconst imageRoiStore = useImageRoiStore()\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst cropper = ref<any>(null) // fix any\n\nconst imageUrl = computed(() => {\n if (imageRoiStore.imageFile && imageRoiStore.imageFile.links?.image_detail) {\n return imageRoiStore.imageFile.links.image_detail.url\n }\n return ''\n})\n\nconst enableCropper = () => {\n if (cropper.value) {\n cropper.value.enable()\n }\n}\n\nconst disableCropper = () => {\n if (cropper.value) {\n cropper.value.disable()\n }\n}\n\nconst applyRegionOfInterest = () => {\n if (cropper.value && imageRoiStore.roi && imageRoiStore.imageFile) {\n enableCropper()\n const data = regionToCrop(\n cropper.value,\n imageRoiStore.roi,\n imageRoiStore.imageFile.imageAttributes.width,\n imageRoiStore.imageFile.imageAttributes.height\n )\n cropper.value.setData(data)\n disableCropper()\n }\n}\n\nconst saveRoi = async () => {\n if (cropper.value && imageRoiStore.roi && imageRoiStore.imageFile) {\n const roi = cropToRegion(\n cropper.value,\n imageRoiStore.roi,\n imageRoiStore.imageFile.imageAttributes.width,\n imageRoiStore.imageFile.imageAttributes.height\n )\n try {\n imageRoiStore.showLoader()\n await updateRoi(damClient, roi.id, roi)\n showRecordWas('updated')\n setTimeout(() => {\n imageRoiStore.forceReloadRoiPreviews()\n }, 2000)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n imageRoiStore.hideLoader()\n }\n }\n}\n\nconst cropperReady = () => {\n applyRegionOfInterest()\n enableCropper()\n}\n\nconst cropperEnd = () => {\n saveRoi()\n}\n\nconst showCropper = computed(() => {\n if (imageRoiStore.imageFile && imageUrl.value.length > 0 && !imageRoiStore.loader) {\n return true\n }\n return false\n})\n\nonUnmounted(() => {\n if (cropper.value) {\n cropper.value.destroy()\n cropper.value = null\n }\n})\n</script>\n\n<template>\n <ACropperjs\n v-if=\"showCropper\"\n :key=\"imageRoiStore.timestampCropper\"\n ref=\"cropper\"\n :aspect-ratio=\"DAM_IMAGE_ASPECT_RATIO\"\n :background=\"false\"\n :check-cross-origin=\"false\"\n :container-style=\"cropperContainerStyle\"\n :ready=\"cropperReady\"\n :cropend=\"cropperEnd\"\n :src=\"imageUrl\"\n :view-mode=\"1\"\n :zoom-on-wheel=\"false\"\n responsive\n />\n</template>\n\n<style lang=\"scss\">\n.cropper-modal {\n background-color: #f1f4f6;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { useTheme } from '@/composables/themeSettings'\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport AssetDetailDialogLoader from '@/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport AssetDetailDialogSidebar from '@/components/damImage/uploadQueue/components/AssetDetailDialogSidebar.vue'\nimport { assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport AssetImageRoiSelect from '@/components/damImage/uploadQueue/components/AssetImageRoiSelect.vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport type { IntegerId } from '@/types/common'\n\nwithDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst { toolbarColor } = useTheme()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, dialog, activeTab, loading } = storeToRefs(assetDetailStore)\n\nconst closeDialog = () => {\n assetDetailStore.setAsset(null)\n dialog.value = null\n}\n\nconst sidebar = ref(true)\n\nconst toggleSidebar = () => {\n sidebar.value = !sidebar.value\n}\n\nconst onImageLoad = () => {\n // imageLoading.value = false\n}\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetType.Default\n})\n\nconst assetStatus = computed(() => {\n if (!asset.value) return DamAssetStatus.Default\n return asset.value.attributes.assetStatus\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\nconst isTypeVideo = computed(() => {\n return assetType.value === DamAssetType.Video\n})\nconst isTypeAudio = computed(() => {\n return assetType.value === DamAssetType.Audio\n})\nconst isTypeDocument = computed(() => {\n return assetType.value === DamAssetType.Document\n})\n\nconst imageProperties = computed(() => {\n if (asset.value?.mainFile && asset.value.mainFile.links && asset.value.mainFile.links.image_detail) {\n return {\n url: asset.value.mainFile.links.image_detail.url,\n width: asset.value.mainFile.links.image_detail.width,\n height: asset.value.mainFile.links.image_detail.height,\n bgColor:\n assetFileIsImageFile(asset.value.mainFile) &&\n asset.value.mainFile.imageAttributes &&\n asset.value.mainFile.imageAttributes.mostDominantColor\n ? asset.value.mainFile.imageAttributes.mostDominantColor\n : '#ccc',\n }\n }\n return {\n url: '',\n width: 356,\n height: 200,\n bgColor: '#ccc',\n }\n})\nconst toolbarTitle = computed(() => {\n if (!asset.value) return ''\n return asset.value.texts.displayTitle\n})\n\nconst assetMainFile = computed(() => {\n return asset.value?.mainFile || undefined\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n >\n <AssetDetailDialogLoader\n v-if=\"loading\"\n @close-dialog=\"closeDialog\"\n />\n <VCard\n v-else-if=\"asset\"\n class=\"dam-image-detail\"\n :class=\"{ 'dam-image-detail--sidebar-active': sidebar }\"\n >\n <div class=\"dam-image-detail__wrapper d-flex flex-column\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b pr-1\"\n >\n <div class=\"text-subtitle-2 d-flex px-2\">\n <div>DAM: {{ toolbarTitle }}</div>\n </div>\n <VSpacer />\n <div>\n <VBtn\n :active=\"sidebar\"\n :variant=\"sidebar ? 'flat' : 'text'\"\n :color=\"sidebar ? 'secondary' : ''\"\n icon\n class=\"mr-1\"\n :width=\"36\"\n :height=\"36\"\n @click.stop=\"toggleSidebar\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.detail.toggleInfo') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"mr-1\"\n @click.stop=\"closeDialog\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.close') }}\n </VTooltip>\n </VBtn>\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 position-relative\">\n <div class=\"d-flex w-100 align-center dam-image-detail__left\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImageRoiSelect />\n </div>\n <div\n v-else\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n use-component\n @load=\"onImageLoad\"\n @error=\"onImageLoad\"\n />\n </div>\n </div>\n <div class=\"h-100 d-flex dam-image-detail__sidebar system-border-l\">\n <AssetDetailDialogSidebar\n v-if=\"asset\"\n :key=\"asset.id\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :asset-id=\"asset.id\"\n :is-video=\"isTypeVideo\"\n :is-audio=\"isTypeAudio\"\n :is-image=\"isTypeImage\"\n :is-document=\"isTypeDocument\"\n :asset-status=\"assetStatus\"\n :asset-type=\"assetType\"\n :asset-main-file-status=\"assetMainFile ? assetMainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"assetMainFile ? assetMainFile.fileAttributes.failReason : undefined\"\n />\n </div>\n </div>\n </div>\n </VCard>\n </VDialog>\n</template>\n","import { ref } from 'vue'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\n\nconst uploadQueueDialog = ref<UploadQueueKey | null>(null)\nconst uploadQueueSidebar = ref(false)\n\nexport function useUploadQueueDialog () {\n const toggleUploadQueueSidebar = () => {\n uploadQueueSidebar.value = !uploadQueueSidebar.value\n }\n\n return {\n toggleUploadQueueSidebar,\n uploadQueueDialog,\n uploadQueueSidebar,\n }\n}\n","<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { computed, ref } from 'vue'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { type AssetFile, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport ACopyText from '@/components/ACopyText.vue'\nimport { prettyBytes } from '@/utils/file'\nimport AssetMetadataImageAttributes from '@/components/damImage/uploadQueue/components/AssetMetadataImageAttributes.vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { dateTimePretty } from '@/utils/datetime'\nimport { useDamKeywordAssetTypeConfig } from '@/components/damImage/uploadQueue/keyword/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/components/damImage/uploadQueue/author/damAuthorConfig'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst { t } = useI18n()\n\nconst panels = ref(['metadata', 'file'])\n\nconst assetDetailStore = useAssetDetailStore()\nconst { asset, authorConflicts, metadataAreTouched } = storeToRefs(assetDetailStore)\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst assetType = computed(() => {\n return DamAssetType.Image\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\n\nconst assetMainFile = computed<null | AssetFile>(() => {\n return asset.value && asset.value.mainFile ? (asset.value.mainFile as AssetFile) : null\n})\n\nconst onAnyMetadataChange = () => {\n metadataAreTouched.value = true\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(assetType.value, props.extSystem)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(assetType.value, props.extSystem)\n</script>\n\n<template>\n <VExpansionPanels\n v-if=\"item\"\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.metadata')\"\n value=\"metadata\"\n >\n <VExpansionPanelText>\n <VForm :disabled=\"!item.canEditMetadata\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n v-model=\"item.customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n @any-change=\"onAnyMetadataChange\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"item.keywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n data-cy=\"custom-field-keywords\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :disabled=\"!item.canEditMetadata\"\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"item.authors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"authorConflicts\"\n data-cy=\"custom-field-authors\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :disabled=\"!item.canEditMetadata\"\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n @update:model-value=\"onAnyMetadataChange\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"asset\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.detail.info.file')\"\n value=\"file\"\n >\n <VExpansionPanelText class=\"text-caption\">\n <!-- all types -->\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.id') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"asset.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.type') }}\n </VCol>\n <VCol cols=\"9\">\n {{ asset.attributes.assetType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.created') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.createdAt) }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.model.tracking.modified') }}\n </VCol>\n <VCol cols=\"9\">\n {{ dateTimePretty(asset.modifiedAt) }}\n </VCol>\n </VRow>\n <div v-if=\"assetMainFile\">\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mainFileId') }}\n </VCol>\n <VCol cols=\"9\">\n <ACopyText :value=\"assetMainFile.id\" />\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.mimeType') }}\n </VCol>\n <VCol cols=\"9\">\n {{ assetMainFile.fileAttributes.mimeType }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"3\">\n {{ t('common.damImage.asset.detail.info.field.size') }}\n </VCol>\n <VCol cols=\"9\">\n {{ prettyBytes(assetMainFile.fileAttributes.size) }}\n </VCol>\n </VRow>\n <AssetMetadataImageAttributes\n v-if=\"isTypeImage && assetFileIsImageFile(assetMainFile)\"\n :file=\"assetMainFile\"\n />\n </div>\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n</template>\n","<script lang=\"ts\" setup>\nimport AssetDetailSidebarActionsWrapper from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsWrapper.vue'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport UploadQueueDialogSingleSidebarMetadataContent from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useAlerts } from '@/composables/system/alerts'\nimport type { IntegerId } from '@/types/common'\n\nwithDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n isActive: boolean\n dataCy?: string\n assetType: DamAssetType\n }>(),\n {\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSave'): void\n (e: 'onSaveAndApply'): void\n}>()\n\nconst { t } = useI18n()\n\nconst v$ = useVuelidate({}, {}, { $scope: ADamAssetMetadataValidationScopeSymbol })\n\nconst { showValidationError } = useAlerts()\n\nconst onSave = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onSave')\n}\n\nconst onSaveAndApply = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return\n }\n emit('onSaveAndApply')\n}\n</script>\n\n<template>\n <AssetDetailSidebarActionsWrapper\n v-if=\"isActive\"\n :queue-key=\"queueKey\"\n >\n <ABtnSecondary\n type=\"submit\"\n class=\"ml-2\"\n data-cy=\"button-save\"\n @click.stop=\"onSave\"\n >\n {{ t('common.button.save') }}\n </ABtnSecondary>\n <ABtnPrimary\n type=\"submit\"\n class=\"mx-2\"\n data-cy=\"button-save-and-apply\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n </AssetDetailSidebarActionsWrapper>\n <UploadQueueDialogSingleSidebarMetadataContent\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport type { DocId, IntegerId } from '@/types/common'\nimport type { DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport type { AssetFileFailReason, AssetFileProcessStatus } from '@/types/coreDam/AssetFile'\nimport { useI18n } from 'vue-i18n'\nimport AssetDetailSidebarROI from '@/components/damImage/uploadQueue/components/AssetDetailSidebarROI.vue'\nimport AssetDetailSidebarActionsTeleportTarget from '@/components/damImage/uploadQueue/components/AssetDetailSidebarActionsTeleportTarget.vue'\nimport UploadQueueDialogSingleSidebarMetadata from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue'\n\nwithDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n assetId: DocId\n isVideo: boolean\n isAudio: boolean\n isImage: boolean\n isDocument: boolean\n enableRoiTab: boolean\n showFileInfo: boolean\n dataCy?: string\n assetStatus: DamAssetStatus\n assetType: DamAssetType\n assetMainFileStatus?: AssetFileProcessStatus | undefined\n assetMainFileFailReason?: AssetFileFailReason | undefined\n }>(),\n {\n assetMainFileStatus: undefined,\n assetMainFileFailReason: undefined,\n dataCy: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'onSave'): void\n (e: 'onSaveAndApply'): void\n}>()\n\nconst { t } = useI18n()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab } = storeToRefs(assetDetailStore)\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs\n v-model=\"activeTab\"\n show-arrows\n class=\"sidebar-info__tabs\"\n >\n <VTab\n :value=\"AssetDetailTabImageWithRoi.Info\"\n data-cy=\"button-meta\"\n >\n {{ t('common.damImage.asset.detail.tabs.info') }}\n </VTab>\n <VTab\n v-if=\"isImage && enableRoiTab\"\n :value=\"AssetDetailTabImageWithRoi.ROI\"\n data-cy=\"button-focus\"\n >\n {{ t('common.damImage.asset.detail.tabs.roi') }}\n </VTab>\n </VTabs>\n\n <div class=\"sidebar-info__content\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n class=\"py-2\"\n >\n <UploadQueueDialogSingleSidebarMetadata\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.Info\"\n :asset-type=\"assetType\"\n @on-save=\"emit('onSave')\"\n @on-save-and-apply=\"emit('onSaveAndApply')\"\n />\n </div>\n <div\n v-if=\"isImage && activeTab === AssetDetailTabImageWithRoi.ROI\"\n class=\"py-2\"\n >\n <AssetDetailSidebarROI\n :queue-key=\"queueKey\"\n :is-active=\"activeTab === AssetDetailTabImageWithRoi.ROI\"\n />\n </div>\n </div>\n <div class=\"sidebar-info__actions px-2\">\n <AssetDetailSidebarActionsTeleportTarget :queue-key=\"queueKey\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { eventClickBlur } from '@/utils/event'\nimport ADialogToolbar from '@/components/ADialogToolbar.vue'\n\nconst props = withDefaults(\n defineProps<{\n isUploading: boolean\n dialogMaxWidth?: number\n buttonSize?: number\n dataCy?: string\n }>(),\n {\n dialogMaxWidth: 300,\n buttonSize: 26,\n dataCy: 'button-stop',\n }\n)\nconst emit = defineEmits<{\n (e: 'confirm'): void\n}>()\n\nconst dialog = ref(false)\n\nconst onClick = (event: Event) => {\n eventClickBlur(event)\n if (!props.isUploading) {\n emit('confirm')\n return\n }\n dialog.value = true\n}\nconst onConfirm = () => {\n emit('confirm')\n dialog.value = false\n}\n\nconst onCancel = () => {\n dialog.value = false\n}\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VBtn\n variant=\"flat\"\n :data-cy=\"dataCy\"\n icon\n :width=\"buttonSize\"\n :height=\"buttonSize\"\n @click.stop=\"onClick\"\n >\n <VIcon icon=\"mdi-close\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.stop') }}\n </VTooltip>\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :width=\"500\"\n >\n <VCard\n v-if=\"dialog\"\n data-cy=\"delete-panel\"\n >\n <ADialogToolbar @on-cancel=\"onCancel\">\n {{ t('common.damImage.upload.stopConfirmQuestion') }}\n </ADialogToolbar>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-cancel\"\n @click.stop=\"onCancel\"\n >\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <ABtnPrimary\n data-cy=\"button-confirm\"\n @click.stop=\"onConfirm\"\n >\n {{ t('common.damImage.upload.stop') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport { useTheme } from '@/composables/themeSettings'\nimport {\n AssetDetailTabImageWithRoi,\n useAssetDetailStore,\n} from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { type AssetDetailItemDto, DamAssetStatus, DamAssetType } from '@/types/coreDam/Asset'\nimport AssetDetailDialogLoader from '@/components/damImage/uploadQueue/components/AssetDetailDialogLoader.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport { AssetFileFailReason, assetFileIsImageFile } from '@/types/coreDam/AssetFile'\nimport AssetImageRoiSelect from '@/components/damImage/uploadQueue/components/AssetImageRoiSelect.vue'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { type UploadQueueItem, UploadQueueItemStatus } from '@/types/coreDam/UploadQueue'\nimport { dateTimeNow } from '@/utils/datetime'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { bulkUpdateAssetsMetadata, fetchAsset } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingleSidebar from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingleSidebar.vue'\nimport UploadQueueButtonStop from '@/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue'\nimport { isNull, isString } from '@/utils/common'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n licenceId: IntegerId\n fileInputKey: number\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'onApply', items: ImageCreateUpdateAware[]): void\n}>()\n\nconst { showErrorsDefault, showRecordWas } = useAlerts()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst { t } = useI18n()\n\nconst { toolbarColor } = useTheme()\n\nconst assetDetailStore = useAssetDetailStore()\nconst { activeTab, loading, asset: assetDetail } = storeToRefs(assetDetailStore)\nconst enableRoiTab = ref(false)\n\nconst uploadQueuesStore = useUploadQueuesStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst item = computed<UploadQueueItem | null>(() => {\n return items.value[0] ?? null\n})\n\nconst asset = computed<AssetDetailItemDto | null>(() => {\n if (!item.value || !item.value.assetId) return null\n if (isDone.value && assetDetail.value) return assetDetail.value\n return {\n id: item.value.assetId,\n texts: {\n displayTitle: '',\n },\n attributes: {\n assetType: item.value.assetType,\n assetStatus: item.value.assetStatus,\n },\n flags: {\n described: false,\n visible: false,\n },\n licence: item.value.licenceId,\n mainFile: null,\n keywords: [],\n authors: [],\n podcasts: [],\n metadata: {\n authorSuggestions: {},\n keywordSuggestions: {},\n customData: {},\n },\n distributionCategory: null,\n assetFileProperties: {\n distributesInServices: [],\n slotNames: [],\n fromRss: false,\n width: 0,\n height: 0,\n },\n _resourceName: 'asset',\n _system: 'coreDam',\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n }\n})\n\nconst sidebar = ref(true)\n\nconst toggleSidebar = () => {\n sidebar.value = !sidebar.value\n}\n\nconst onImageLoad = () => {\n // imageLoading.value = false\n}\n\nconst assetType = computed(() => {\n return asset.value?.attributes.assetType || DamAssetType.Default\n})\n\nconst assetStatus = computed(() => {\n if (!asset.value) return DamAssetStatus.Default\n return asset.value.attributes.assetStatus\n})\n\nconst isTypeImage = computed(() => {\n return assetType.value === DamAssetType.Image\n})\nconst isTypeVideo = computed(() => {\n return assetType.value === DamAssetType.Video\n})\nconst isTypeAudio = computed(() => {\n return assetType.value === DamAssetType.Audio\n})\nconst isTypeDocument = computed(() => {\n return assetType.value === DamAssetType.Document\n})\n\nconst imageProperties = computed(() => {\n if (item.value?.imagePreview) {\n return {\n url: item.value.imagePreview.url,\n width: item.value.imagePreview.requestedWidth || undefined,\n height: item.value.imagePreview.requestedHeight || undefined,\n bgColor:\n assetFileIsImageFile(asset.value?.mainFile) &&\n asset.value?.mainFile.imageAttributes &&\n asset.value?.mainFile.imageAttributes.mostDominantColor\n ? asset.value.mainFile.imageAttributes.mostDominantColor\n : '#ccc',\n }\n }\n return {\n url: '',\n width: 356,\n height: 200,\n bgColor: '#ccc',\n }\n})\n\nconst assetMainFile = computed(() => {\n return asset.value?.mainFile || undefined\n})\n\nconst processing = computed(() => {\n return (\n !isNull(item.value) && [UploadQueueItemStatus.Processing, UploadQueueItemStatus.Loading].includes(item.value.status)\n )\n})\nconst waiting = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Waiting\n})\nconst isDone = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploaded\n})\nconst showDone = computed(() => {\n return !props.disableDoneAnimation && isDone.value\n})\nconst uploading = computed(() => {\n return !isNull(item.value) && item.value.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return item.value?.progress.progressPercent\n})\n\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n assetDetailStore.setAsset(null)\n uploadQueueDialog.value = null\n}\n\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst onSave = async () => {\n if (items.value.length === 0) return\n // saveAndCloseButtonLoading.value = true\n // v$.value.$touch()\n // if (v$.value.$invalid) {\n // showValidationError()\n // saveAndCloseButtonLoading.value = false\n // return\n // }\n try {\n await bulkUpdateAssetsMetadata(damClient, items.value)\n showRecordWas('updated')\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n // saveAndCloseButtonLoading.value = false\n }\n}\n\nconst onSaveAndApply = async () => {\n if (items.value.length === 0) return\n // saveAndCloseButtonLoading.value = true\n // v$.value.$touch()\n // if (v$.value.$invalid) {\n // showValidationError()\n // saveAndCloseButtonLoading.value = false\n // return\n // }\n let description = ''\n let source = ''\n try {\n const assetsMetadataRes = await bulkUpdateAssetsMetadata(damClient, items.value)\n if (!assetsMetadataRes[0]) {\n throw new Error('Fatal error updating asset metadata')\n }\n showRecordWas('updated')\n if (isString(assetsMetadataRes[0].customData?.description)) {\n description = assetsMetadataRes[0].customData.description.trim()\n }\n if (assetsMetadataRes[0].authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, assetsMetadataRes[0].authors)\n source = authorsRes.map((author) => author.name).join(', ')\n }\n emit(\n 'onApply',\n items.value.map((item) => {\n return {\n texts: {\n description: description,\n source: source,\n },\n dam: {\n damId: item.fileId ?? '',\n regionPosition: 0,\n licenceId: props.licenceId,\n },\n position: 1,\n }\n })\n )\n\n await onStopConfirm()\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n // saveAndCloseButtonLoading.value = false\n }\n}\n\nwatch(\n isDone,\n async (newValue) => {\n if (!newValue || !item.value?.assetId) return\n try {\n const res = await fetchAsset(damClient, item.value.assetId)\n assetDetailStore.setAsset(res)\n enableRoiTab.value = true\n } catch (e) {\n showErrorsDefault(e)\n }\n },\n { immediate: true }\n)\n\nonMounted(() => {\n activeTab.value = AssetDetailTabImageWithRoi.Info\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n >\n <AssetDetailDialogLoader\n v-if=\"loading || !item\"\n @close-dialog=\"onStopConfirm\"\n />\n <VCard\n v-else-if=\"item\"\n class=\"dam-image-detail\"\n :class=\"{ 'dam-image-detail--sidebar-active': sidebar }\"\n >\n <div class=\"dam-image-detail__wrapper d-flex flex-column\">\n <VToolbar\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n class=\"system-border-b pr-1\"\n >\n <div class=\"text-subtitle-2 d-flex px-2\">\n <div\n v-if=\"isUploading\"\n class=\"text-subtitle-2\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-subtitle-2 text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n <VSpacer />\n <div>\n <VBtn\n :active=\"sidebar\"\n :variant=\"sidebar ? 'flat' : 'text'\"\n :color=\"sidebar ? 'secondary' : ''\"\n icon\n class=\"mr-1\"\n :width=\"36\"\n :height=\"36\"\n @click.stop=\"toggleSidebar\"\n >\n <VIcon icon=\"mdi-information-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.detail.toggleInfo') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <div class=\"d-flex w-100 h-100 position-relative\">\n <div class=\"d-flex w-100 align-center dam-image-detail__left\">\n <div\n v-if=\"activeTab === AssetDetailTabImageWithRoi.ROI && enableRoiTab\"\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <AssetImageRoiSelect />\n </div>\n <div\n v-else\n class=\"w-100 h-100 pa-2 d-flex align-center justify-center\"\n >\n <div class=\"position-relative\">\n <AssetImage\n v-if=\"item\"\n :asset-type=\"assetType\"\n :asset-status=\"assetStatus\"\n :src=\"imageProperties.url\"\n :background-color=\"imageProperties.bgColor\"\n :width=\"imageProperties.width\"\n :height=\"imageProperties.height\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"showDone\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n @load=\"onImageLoad\"\n @error=\"onImageLoad\"\n />\n <div\n v-if=\"item && item.error.hasError\"\n :class=\"\n 'dam-upload-queue__overlay dam-upload-queue__overlay--error ' +\n 'd-flex align-center justify-center flex-column'\n \"\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ma-1\"\n size=\"x-small\"\n color=\"error\"\n />\n <div class=\"text-error\">\n {{ t('common.damImage.queueItem.error') }}\n </div>\n <div\n v-if=\"item && item.error.message.length\"\n class=\"text-caption\"\n v-text=\"item.error.message\"\n />\n <div v-else-if=\"item.error.assetFileFailReason !== AssetFileFailReason.None\">\n <AssetFileFailReasonChip :reason=\"item.error.assetFileFailReason\" />\n </div>\n <div\n v-else\n class=\"text-caption\"\n >\n {{ t('common.damImage.uploadErrors.unknownError') }}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"h-100 d-flex dam-image-detail__sidebar system-border-l\">\n <UploadQueueDialogSingleSidebar\n v-if=\"asset\"\n :key=\"asset.id\"\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :enable-roi-tab=\"enableRoiTab\"\n :show-file-info=\"enableRoiTab\"\n :asset-id=\"asset.id\"\n :is-video=\"isTypeVideo\"\n :is-audio=\"isTypeAudio\"\n :is-image=\"isTypeImage\"\n :is-document=\"isTypeDocument\"\n :asset-status=\"assetStatus\"\n :asset-type=\"assetType\"\n :asset-main-file-status=\"assetMainFile ? assetMainFile.fileAttributes.status : undefined\"\n :asset-main-file-fail-reason=\"assetMainFile ? assetMainFile.fileAttributes.failReason : undefined\"\n @on-save=\"onSave\"\n @on-save-and-apply=\"onSaveAndApply\"\n />\n </div>\n </div>\n </div>\n </VCard>\n </VDialog>\n</template>\n","import type { DamAssetLicence } from '@/types/coreDam/AssetLicence'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport type { AxiosInstance } from 'axios'\n\nconst END_POINT = '/adm/v1/asset-licence'\n\nexport const fetchDamAssetLicence = (client: () => AxiosInstance, id: number) =>\n apiFetchOne<DamAssetLicence>(client, END_POINT + '/:id', { id }, 'coreDam', 'assetLicence')\n","<script lang=\"ts\" setup>\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport type { DocId, IntegerId, IntegerIdNullable } from '@/types/common'\nimport type {\n ImageAware,\n ImageCreateUpdateAware,\n ImageWidgetSelectConfig,\n ImageWidgetUploadConfig,\n} from '@/types/ImageAware'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.jpg'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/components/damImage/composables/imageActions'\nimport { cloneDeep, isNull, isString, isUndefined } from '@/utils/common'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamAcceptTypeAndSizeHelper } from '@/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AAssetSelect from '@/components/dam/assetSelect/AAssetSelect.vue'\nimport type { AssetSelectReturnData } from '@/types/coreDam/AssetSelect'\nimport { ImageWidgetExtSystemConfigs } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\nimport { createImage, deleteImage, fetchImage, updateImage } from '@/components/damImage/uploadQueue/api/imageApi'\nimport ImageDetailDialogMetadata from '@/components/damImage/uploadQueue/components/ImageDetailDialogMetadata.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { computed, inject, ref, type ShallowRef, toRaw, watch } from 'vue'\nimport AssetDetailDialog from '@/components/damImage/uploadQueue/components/AssetDetailDialog.vue'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { storeToRefs } from 'pinia'\nimport { fetchAsset, fetchAssetByFileId } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingle from '@/components/damImage/uploadQueue/components/UploadQueueDialogSingle.vue'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport type { VBtn } from 'vuetify/components'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\nimport { fetchDamAssetLicence } from '@/components/damImage/uploadQueue/api/damAssetLicenceApi'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable\n queueKey: UploadQueueKey\n uploadConfig: ImageWidgetUploadConfig\n selectConfig: ImageWidgetSelectConfig[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean // only one at once, use in dialogs\n disableOnClickMenu?: boolean\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerIdNullable): void\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst imageWidgetExtSystemConfigs = inject<ShallowRef<Map<IntegerId, DamExtSystemConfig>> | undefined>(\n ImageWidgetExtSystemConfigs,\n undefined\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageWidgetExtSystemConfig = imageWidgetExtSystemConfigs?.value?.get(props.uploadConfig.extSystem)\n\nif (isUndefined(imageWidgetExtSystemConfigs) || isUndefined(imageWidgetExtSystemConfig)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\nconst { t } = useI18n()\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { widgetImageToDamImageUrl } = useImageActions(imageOptions)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst imageStore = useImageStore()\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst resImage = ref<null | ImageCreateUpdateAware>(null)\nconst clickMenuOpened = ref(false)\nconst assetSelectDialog = ref(false)\nconst metadataDialog = ref(false)\nconst metadataDialogSaving = ref(false)\nconst metadataDialogLoading = ref(false)\n\nconst withoutImage = computed(() => {\n return isNull(props.modelValue)\n})\n\n// const { image, modelValue } = toRefs(props)\n\nconst resolvedSrc = ref('')\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst enabledInteractionComputed = computed(() => {\n return true\n})\n\nconst imageLoaded = computed(() => {\n return !isNull(resImage.value)\n})\n\nconst actionEditMeta = () => {\n imageStore.setImageDetail(toRaw(resImage.value))\n metadataDialog.value = true\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst { cachedExtSystemId } = useExtSystemIdForCached()\n\nconst onDrop = (files: File[]) => {\n cachedExtSystemId.value = props.uploadConfig.extSystem\n uploadQueuesStore.addByFiles(props.queueKey, props.uploadConfig.extSystem, props.uploadConfig.licence, files)\n uploadQueueDialog.value = props.queueKey\n}\nconst onFileInput = (files: File[]) => {\n cachedExtSystemId.value = props.uploadConfig.extSystem\n uploadQueuesStore.addByFiles(props.queueKey, props.uploadConfig.extSystem, props.uploadConfig.licence, files)\n uploadQueueDialog.value = props.queueKey\n}\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(DamAssetType.Image, imageWidgetExtSystemConfig)\n\nconst reload = async (newImage: ImageCreateUpdateAware | undefined, newImageId: IntegerIdNullable, force = false) => {\n resolvedSrc.value = imagePlaceholderPath\n if ((newImage && isNull(resImage.value)) || (newImage && force)) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value))\n if (props.expandMetadata) {\n imageStore.setImageDetail(toRaw(resImage.value))\n }\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (!isNull(resImage.value)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImage.value))\n if (props.expandMetadata) {\n imageStore.setImageDetail(toRaw(resImage.value))\n }\n }\n return\n }\n}\n\nconst reset = () => {\n resolvedSrc.value = imagePlaceholderPath\n resImage.value = null\n emit('update:modelValue', null)\n}\n\nwatch(\n [() => props.image, () => props.modelValue],\n async ([newImage, newImageId]) => {\n await reload(newImage, newImageId)\n },\n { immediate: true }\n)\n\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n const assetSelectStore = useAssetSelectStore()\n metadataDialogLoading.value = true\n imageStore.setImageDetail(null)\n metadataDialog.value = true\n let description = ''\n let source = ''\n if (data.type === 'asset') {\n if (!data.value[0] || !data.value[0].mainFile) return\n try {\n const assetRes = await fetchAsset(damClient, data.value[0].id)\n if (isString(assetRes.metadata.customData?.description)) {\n description = assetRes.metadata.customData.description.trim()\n }\n if (assetRes.authors.length > 0) {\n const authorsRes = await fetchAuthorListByIds(\n damClient,\n assetSelectStore.selectedSelectConfig.extSystem,\n assetRes.authors\n )\n source = authorsRes.map((author) => author.name).join(', ')\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n const image: ImageCreateUpdateAware = {\n texts: {\n description: description,\n source: source,\n },\n dam: {\n damId: data.value[0].mainFile.id,\n regionPosition: 0,\n licenceId: data.value[0].licence,\n },\n position: 1,\n }\n if (!isNull(props.modelValue)) {\n image.id = props.modelValue\n }\n imageStore.setImageDetail(image)\n metadataDialogLoading.value = false\n forceReloadViewWithExpandMetadata()\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading: assetLoading, dialog: assetDialog } = storeToRefs(assetDetailStore)\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onEditAsset = async (assetFileId: DocId) => {\n assetLoading.value = true\n assetDialog.value = props.queueKey\n try {\n const asset = await fetchAssetByFileId(damClient, assetFileId)\n const licence = await fetchDamAssetLicence(damClient, asset.licence)\n if (licence.extSystem) {\n cachedExtSystemId.value = licence.extSystem\n }\n assetDetailStore.setAsset(asset)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n assetLoading.value = false\n }\n}\n\nconst onMetadataDialogClose = () => {\n imageStore.setImageDetail(null)\n metadataDialog.value = false\n}\n\nconst onMetadataDialogConfirm = async () => {\n if (isNull(imageStore.imageDetail)) return\n metadataDialogSaving.value = true\n try {\n const res = imageStore.imageDetail.id\n ? await updateImage(imageClient, imageStore.imageDetail.id, imageStore.imageDetail)\n : await createImage(imageClient, imageStore.imageDetail)\n metadataDialog.value = false\n emit('update:modelValue', res.id)\n imageStore.setImageDetail(null)\n reload(res, res.id, true)\n emit('afterMetadataSaveSuccess')\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n }\n}\n\nconst onImageDelete = async () => {\n if (isNull(props.modelValue)) return\n if (props.callDeleteApiOnRemove) {\n try {\n await deleteImage(imageClient, props.modelValue)\n reset()\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n reset()\n}\n\nconst forceReloadViewWithExpandMetadata = () => {\n const detail = imageStore.imageDetail\n if (!isNull(detail)) {\n reload(detail, null, true)\n }\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (!items[0]) return\n\n if (!isNull(props.modelValue)) {\n items[0].id = props.modelValue\n }\n imageStore.setImageDetail(items[0])\n metadataDialog.value = true\n if (props.expandMetadata) {\n forceReloadViewWithExpandMetadata()\n }\n}\n\nconst expandedUploadButton = ref<InstanceType<typeof AFileInput> | null>(null)\n\nconst onDropzoneClick = () => {\n if (!props.expandOptions) {\n clickMenuOpened.value = true\n return\n }\n expandedUploadButton.value?.activate()\n}\n\nconst detailDialogMetadataComponent = ref<InstanceType<typeof ImageDetailDialogMetadata> | null>(null)\n\nconst metadataConfirm = () => {\n detailDialogMetadataComponent.value?.confirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n</script>\n\n<template>\n <div class=\"a-image-widget\">\n <div class=\"a-image-widget__options\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <div v-show=\"enabledInteractionComputed\">\n <div\n v-if=\"expandOptions\"\n class=\"d-flex flex-row\"\n >\n <VBtn\n v-if=\"imageLoaded && !expandMetadata\"\n class=\"mr-2 mb-2\"\n @click=\"actionEditMeta\"\n >\n {{ t('common.damImage.image.meta.edit') }}\n </VBtn>\n <VBtn\n class=\"mr-2 mb-2\"\n @click=\"actionLibrary\"\n >\n <span v-if=\"imageLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VBtn>\n <AFileInput\n ref=\"expandedUploadButton\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn v-bind=\"fileInputProps\">\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInput>\n </div>\n <VBtn\n v-else\n variant=\"text\"\n size=\"x-small\"\n icon\n >\n <VIcon icon=\"mdi-dots-horizontal\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.damImage.image.button.options') }}\n </VTooltip>\n <VMenu\n v-model=\"clickMenuOpened\"\n activator=\"parent\"\n location=\"bottom right\"\n eager\n >\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-if=\"imageLoaded && !expandMetadata\"\n @click=\"actionEditMeta\"\n >\n <VListItemTitle>{{ t('common.damImage.image.meta.edit') }}</VListItemTitle>\n </VListItem>\n <VListItem @click=\"actionLibrary\">\n <VListItemTitle>\n <span v-if=\"imageLoaded\">{{ t('common.damImage.image.button.replaceFromDam') }}</span>\n <span v-else>{{ t('common.damImage.image.button.addFromDam') }}</span>\n </VListItemTitle>\n </VListItem>\n <AFileInput\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VListItem @click.stop=\"fileInputProps.onClick\">\n {{ t('common.damImage.image.button.upload') }}\n </VListItem>\n </template>\n </AFileInput>\n <VListItem\n v-if=\"imageLoaded\"\n @click=\"onImageDelete\"\n >\n <VListItemTitle>{{ t('common.damImage.image.button.removeImage') }}</VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n </div>\n <div class=\"position-relative\">\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <AImageDropzone\n variant=\"fill\"\n transparent\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n :hide-text=\"!withoutImage\"\n @on-click=\"onDropzoneClick\"\n @on-drop=\"onDrop\"\n />\n </div>\n <ImageDetailDialogMetadata\n ref=\"detailDialogMetadataComponent\"\n v-model=\"metadataDialog\"\n :expand=\"expandMetadata\"\n :saving=\"metadataDialogSaving\"\n :loading=\"metadataDialogLoading\"\n @edit-asset=\"onEditAsset\"\n @on-confirm=\"onMetadataDialogConfirm\"\n @on-close=\"onMetadataDialogClose\"\n />\n </div>\n <AAssetSelect\n v-model=\"assetSelectDialog\"\n :select-config=\"selectConfig\"\n :min-count=\"1\"\n :max-count=\"1\"\n :asset-type=\"DamAssetType.Image\"\n return-type=\"asset\"\n @on-confirm=\"onAssetSelectConfirm\"\n />\n <AssetDetailDialog\n v-if=\"assetDialog === queueKey\"\n :queue-key=\"queueKey\"\n :ext-system=\"cachedExtSystemId\"\n />\n <UploadQueueDialogSingle\n v-if=\"uploadQueueDialog === queueKey\"\n :queue-key=\"queueKey\"\n :ext-system=\"uploadConfig.extSystem\"\n :licence-id=\"uploadConfig.licence\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @on-apply=\"onAssetUploadConfirm\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerIdNullable } from '@/types/common'\nimport { onMounted, provide, ref } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { ImageAware, ImageWidgetSelectConfig, ImageWidgetUploadConfig } from '@/types/ImageAware'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport ImageWidgetInner from '@/components/damImage/uploadQueue/components/ImageWidgetInner.vue'\nimport { ImageWidgetExtSystemConfigs } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport { isUndefined } from '@/utils/common'\nimport { isImageWidgetUploadConfigAllowed } from '@/components/damImage/composables/damFilterUserAllowedUploadConfigs'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable\n queueKey: UploadQueueKey\n uploadConfig: ImageWidgetUploadConfig\n selectConfig: ImageWidgetSelectConfig[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerIdNullable): void\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error' | 'uploadNotAllowed'>('loading')\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst {\n initialized,\n loadDamConfigExtSystem,\n damConfigExtSystem,\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigExtSystem,\n getDamConfigAssetCustomFormElements,\n} = useDamConfigState(damClient)\n\nonMounted(async () => {\n if (!isImageWidgetUploadConfigAllowed(props.uploadConfig)) {\n status.value = 'uploadNotAllowed'\n return\n }\n const promises: Promise<any>[] = []\n if (!initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n const config = getDamConfigExtSystem(props.uploadConfig.extSystem)\n if (isUndefined(config)) {\n promises.push(loadDamConfigExtSystem(props.uploadConfig.extSystem))\n }\n const configAssetCustomFormElements = getDamConfigAssetCustomFormElements(props.uploadConfig.extSystem)\n if (isUndefined(configAssetCustomFormElements)) {\n promises.push(loadDamConfigAssetCustomFormElements(props.uploadConfig.extSystem))\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetExtSystemConfigs, damConfigExtSystem)\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetInner> | null>(null)\n\nconst metadataConfirm = () => {\n innerComponent.value?.metadataConfirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n</script>\n\n<template>\n <ImageWidgetInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-bind=\"props\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n @after-metadata-save-success=\"emit('afterMetadataSaveSuccess')\"\n />\n <div\n v-else-if=\"status === 'error'\"\n class=\"text-error\"\n >\n Loading DAM config error\n </div>\n <div\n v-else-if=\"status === 'uploadNotAllowed'\"\n class=\"text-error\"\n >\n DAM access rights error\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n\n<style lang=\"scss\">\n$class-name-root: 'a-image-widget';\n\n.#{$class-name-root} {\n &__options {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { computed } from 'vue'\nimport AFormTextarea from '@/components/form/AFormTextarea.vue'\nimport type { DocId } from '@/types/common'\nimport { isNull, isUndefined } from '@/utils/common'\nimport AActionDeleteButton from '@/components/buttons/action/AActionDeleteButton.vue'\nimport { HANDLE_CLASS } from '@/components/sortable/sortableActions'\nimport { useI18n } from 'vue-i18n'\nimport {\n AImageMetadataValidationScopeSymbol,\n useImageValidation,\n} from '@/components/damImage/uploadQueue/composables/uploadValidations'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n disableDraggable: boolean\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'editAsset', data: DocId): void\n (e: 'removeItem', index: number): void\n}>()\n\nconst imageStore = useImageStore()\nconst { t } = useI18n()\n\nconst image = computed(() => imageStore.images[props.index])\n\nconst { v$ } = useImageValidation(image, AImageMetadataValidationScopeSymbol)\n\nconst onEditAsset = () => {\n if (isNull(image.value) || isUndefined(image.value)) return\n emit('editAsset', image.value.dam.damId)\n}\n\nconst removeItem = () => {\n emit('removeItem', props.index)\n}\n</script>\n\n<template>\n <div class=\"asset-list-tiles__item\">\n <div class=\"asset-list-tiles__item-card\">\n <div class=\"ma-2\">\n <div class=\"d-flex justify-md-space-between align-center\">\n <VIcon\n :class=\"{\n [HANDLE_CLASS]: true,\n [HANDLE_CLASS + '--disabled']: disableDraggable,\n }\"\n icon=\"mdi-drag\"\n />\n </div>\n <AImageWidgetSimple\n :model-value=\"image.id\"\n :image=\"image\"\n />\n <VRow dense>\n <VCol class=\"d-flex justify-space-between mt-1\">\n <VBtn\n variant=\"text\"\n size=\"small\"\n class=\"mb-2\"\n @click.stop=\"onEditAsset\"\n >\n {{ t('common.damImage.queueItem.edit') }}\n </VBtn>\n <AActionDeleteButton\n variant=\"icon\"\n :size=\"30\"\n button-class=\"\"\n @delete-record=\"removeItem\"\n />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol>\n <AFormTextarea\n v-model=\"image.texts.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n />\n </VCol>\n </VRow>\n <VRow dense>\n <VCol>\n <AFormTextarea\n v-model=\"image.texts.source\"\n :label=\"t('common.damImage.image.model.texts.source')\"\n :v=\"v$.image.texts.source\"\n />\n </VCol>\n </VRow>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.asset-list-tiles--thumbnail.a-sortable-widget__group .asset-list-tiles__item img:not(.img-svg) {\n padding: 0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatus } from '@/types/coreDam/Asset'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { type UploadQueueItem, UploadQueueItemStatus, type UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { AssetFileFailReason } from '@/types/coreDam/AssetFile'\nimport ATableCopyIdButton from '@/components/buttons/table/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/utils/file'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/components/damImage/uploadQueue/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/components/damImage/uploadQueue/components/AssetImage.vue'\nimport AssetFileFailReasonChip from '@/components/damImage/uploadQueue/components/AssetFileFailReasonChip.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/components/damImage/uploadQueue/keyword/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/components/damImage/uploadQueue/author/damAuthorConfig'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: string\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst { t } = useI18n()\n\nconst processing = computed(() => {\n return [UploadQueueItemStatus.Processing, UploadQueueItemStatus.Loading].includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatus.Default\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return [UploadQueueItemStatus.Loading, UploadQueueItemStatus.Waiting, UploadQueueItemStatus.Uploading].includes(\n props.item.status\n )\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(assetType.value, props.extSystem)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss,vue/no-ref-object-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(assetType.value, props.extSystem)\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <div\n v-if=\"item.error.hasError\"\n :class=\"\n 'dam-upload-queue__overlay dam-upload-queue__overlay--error ' +\n 'd-flex align-center justify-center flex-column'\n \"\n >\n <VIcon\n icon=\"mdi-alert\"\n class=\"ma-1\"\n size=\"x-small\"\n color=\"error\"\n />\n <div class=\"text-error\">\n {{ t('common.damImage.queueItem.error') }}\n </div>\n <div\n v-if=\"item.error.message.length\"\n class=\"text-caption\"\n v-text=\"item.error.message\"\n />\n <div v-else-if=\"item.error.assetFileFailReason !== AssetFileFailReason.None\">\n <AssetFileFailReasonChip :reason=\"item.error.assetFileFailReason\" />\n </div>\n <div\n v-else\n class=\"text-caption\"\n >\n {{ t('common.damImage.uploadErrors.unknownError') }}\n </div>\n </div>\n </div>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.queueItem.edit') }}\n </VBtn>\n </div>\n <div>\n <div v-if=\"item.isDuplicate\" />\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showCancel\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <!-- <AActionDeleteButton-->\n <!-- variant=\"icon\"-->\n <!-- :disabled=\"!item.canEditMetadata && !item.isDuplicate\"-->\n <!-- button-class=\"\"-->\n <!-- @delete-record=\"remove\"-->\n <!-- />-->\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n dense\n class=\"my-2 mb-3 mt-0 text-caption\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\"> ({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.isDuplicate\"\n class=\"text-caption text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n :disabled=\"!item.canEditMetadata\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"ADamAssetMetadataValidationScopeSymbol\"\n :disabled=\"!item.canEditMetadata\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport ACustomDataFormElement from '@/components/customDataForm/ACustomDataFormElement.vue'\nimport { isUndefined } from '@/utils/common'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n assetType: DamAssetType\n extSystem: IntegerId\n modelValue: { [key: string]: any }\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: any): void\n (e: 'fillEmptyField', data: { assetType: DamAssetType; elementProperty: string; value: any }): void\n (e: 'replaceField', data: { assetType: DamAssetType; elementProperty: string; value: any }): void\n}>()\n\nconst { t } = useI18n()\n\nconst updateModelValue = (data: { property: string; value: any }) => {\n const updated = {} as { [key: string]: any }\n updated[data.property] = data.value\n emit('update:modelValue', { ...props.modelValue, ...updated })\n}\n\nconst fillEmptyField = (elementProperty: string, value: any) => {\n emit('fillEmptyField', { assetType: props.assetType, elementProperty, value })\n}\nconst replaceField = (elementProperty: string, value: any) => {\n emit('replaceField', { assetType: props.assetType, elementProperty, value })\n}\n\nconst { getDamConfigAssetCustomFormElements } = useDamConfigState()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configAssetCustomFormElements = getDamConfigAssetCustomFormElements(props.extSystem)\nif (isUndefined(configAssetCustomFormElements)) {\n throw new Error('Custom form elements must be initialised.')\n}\n\nconst elements = computed(() => {\n return configAssetCustomFormElements[props.assetType]\n})\n</script>\n\n<template>\n <div class=\"w-100\">\n <VRow\n v-for=\"element in elements\"\n :key=\"element.id\"\n dense\n class=\"mt-1\"\n >\n <VCol>\n <div v-if=\"element.attributes.readonly\" />\n <div\n v-else\n class=\"d-flex\"\n >\n <ACustomDataFormElement\n :config=\"element\"\n :model-value=\"modelValue[element.property]\"\n @update:model-value=\"updateModelValue\"\n />\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyField(element.property, modelValue[element.property])\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceField(element.property, modelValue[element.property])\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </VCol>\n </VRow>\n </div>\n</template>\n","import type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { DamAssetType } from '@/types/coreDam/Asset'\nimport { isUndefined } from '@/utils/common'\n\nexport function useUploadQueueMassOperations(queueKey: UploadQueueKey) {\n const uploadQueuesStore = useUploadQueuesStore()\n\n const replaceEmptyCustomDataValue = (\n data: { assetType: DamAssetType; elementProperty: string; value: any },\n forceReplace = false\n ) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (item.assetType !== data.assetType) continue\n if (\n forceReplace ||\n isUndefined(item.customData[data.elementProperty]) ||\n item.customData[data.elementProperty] === ''\n ) {\n item.customData[data.elementProperty] = data.value\n }\n }\n }\n\n const replaceEmptyKeywords = (value: any, forceReplace = false) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.keywords) || item.keywords.length === 0) {\n item.keywords = value\n }\n }\n }\n\n const replaceEmptyAuthors = (value: any, forceReplace = false) => {\n const items = uploadQueuesStore.getQueueItems(queueKey)\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n if (forceReplace || isUndefined(item.authors) || item.authors.length === 0) {\n item.authors = value\n }\n }\n }\n\n return {\n replaceEmptyCustomDataValue,\n replaceEmptyKeywords,\n replaceEmptyAuthors,\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { DamAssetType } from '@/types/coreDam/Asset'\nimport ASystemEntityScope from '@/components/form/ASystemEntityScope.vue'\nimport AssetCustomMetadataFormMassOperations from '@/components/damImage/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/author/AuthorRemoteAutocompleteWithCached.vue'\nimport KeywordRemoteAutocompleteWithCached from '@/components/damImage/uploadQueue/keyword/KeywordRemoteAutocompleteWithCached.vue'\nimport { useUploadQueueMassOperations } from '@/components/damImage/uploadQueue/composables/uploadQueueMassOperations'\nimport type { IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n }>(),\n {}\n)\n\nconst massOperationsData = ref({ image: {}, video: {}, audio: {}, document: {} })\nconst massOperationsKeywords = ref([])\nconst massOperationsAuthors = ref([])\n\nconst { t } = useI18n()\n\nconst panels = ref<Array<string>>(['general'])\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { replaceEmptyCustomDataValue, replaceEmptyAuthors, replaceEmptyKeywords } = useUploadQueueMassOperations(\n props.queueKey\n)\n\nconst fillEmptyField = (data: { assetType: DamAssetType; elementProperty: string; value: any }) => {\n replaceEmptyCustomDataValue(data)\n}\nconst replaceField = (data: { assetType: DamAssetType; elementProperty: string; value: any }) => {\n replaceEmptyCustomDataValue(data, true)\n}\nconst fillEmptyKeywords = () => {\n replaceEmptyKeywords(massOperationsKeywords.value)\n}\nconst replaceKeywords = () => {\n replaceEmptyKeywords(massOperationsKeywords.value, true)\n}\nconst fillEmptyAuthors = () => {\n replaceEmptyAuthors(massOperationsAuthors.value)\n}\nconst replaceAuthors = () => {\n replaceEmptyAuthors(massOperationsAuthors.value, true)\n}\nconst fillAll = (forceReplace = false) => {\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.image)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Image,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.video)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Video,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.audio)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Audio,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n for (const [elementProperty, value] of Object.entries(massOperationsData.value.document)) {\n replaceEmptyCustomDataValue(\n {\n assetType: DamAssetType.Document,\n elementProperty,\n value,\n },\n forceReplace\n )\n }\n if (forceReplace) {\n replaceAuthors()\n replaceKeywords()\n return\n }\n fillEmptyAuthors()\n fillEmptyKeywords()\n}\nconst clearForm = () => {\n massOperationsData.value = { image: {}, video: {}, audio: {}, document: {} }\n massOperationsAuthors.value = []\n massOperationsKeywords.value = []\n}\n\nconst assetTypes = computed(() => {\n return uploadQueuesStore.getQueueItemsTypes(props.queueKey)\n})\n\nonMounted(() => {\n if (assetTypes.value[0]) {\n panels.value.push(assetTypes.value[0])\n }\n})\n</script>\n\n<template>\n <div class=\"sidebar-info d-flex w-100 h-100 flex-column\">\n <div class=\"w-100 d-flex flex-column\">\n <VTabs class=\"sidebar-info__tabs\">\n <VTab>{{ t('common.damImage.asset.massOperations.title') }}</VTab>\n </VTabs>\n <div class=\"sidebar-info__content\">\n <div class=\"text-caption pa-3\">\n {{ t('common.damImage.asset.massOperations.description') }}\n </div>\n <VExpansionPanels\n v-model=\"panels\"\n multiple\n class=\"v-expansion-panels--compact\"\n >\n <VExpansionPanel\n elevation=\"0\"\n :title=\"t('common.damImage.asset.massOperations.general')\"\n value=\"general\"\n >\n <VExpansionPanelText>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <KeywordRemoteAutocompleteWithCached\n v-model=\"massOperationsKeywords\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n :ext-system=\"extSystem\"\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyKeywords\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceKeywords\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n dense\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <div class=\"d-flex\">\n <div style=\"min-width: 286px\">\n <AuthorRemoteAutocompleteWithCached\n v-model=\"massOperationsAuthors\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :validation-scope=\"false\"\n />\n </div>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n class=\"mr-1\"\n @click.stop=\"fillEmptyAuthors\"\n >\n <VIcon icon=\"mdi-file-arrow-left-right-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.fillOneEmpty') }}\n </VTooltip>\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"replaceAuthors\"\n >\n <VIcon icon=\"mdi-file-replace-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.replaceOne') }}\n </VTooltip>\n </VBtn>\n </div>\n </ASystemEntityScope>\n </VCol>\n </VRow>\n </VExpansionPanelText>\n </VExpansionPanel>\n <VExpansionPanel\n v-if=\"assetTypes.includes(DamAssetType.Image)\"\n elevation=\"0\"\n :title=\"t('common.damImage.asset.assetType.image')\"\n :value=\"DamAssetType.Image\"\n >\n <VExpansionPanelText>\n <AssetCustomMetadataFormMassOperations\n v-model=\"massOperationsData.image\"\n :asset-type=\"DamAssetType.Image\"\n :ext-system=\"extSystem\"\n @fill-empty-field=\"fillEmptyField\"\n @replace-field=\"replaceField\"\n />\n </VExpansionPanelText>\n </VExpansionPanel>\n </VExpansionPanels>\n </div>\n <div class=\"sidebar-info__actions pa-2 d-flex align-center justify-center\">\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(false)\"\n >\n {{ t('common.damImage.asset.massOperations.fillAllEmpty') }}\n </VBtn>\n <VBtn\n class=\"mr-2\"\n variant=\"text\"\n size=\"small\"\n @click.stop=\"fillAll(true)\"\n >\n {{ t('common.damImage.asset.massOperations.replaceAll') }}\n </VBtn>\n <VBtn\n variant=\"text\"\n size=\"small\"\n @click.stop=\"clearForm\"\n >\n {{ t('common.damImage.asset.massOperations.clearForm') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted } from 'vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { UploadQueueItem, UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport UploadQueueItemEditable from '@/components/damImage/uploadQueue/components/UploadQueueItemEditable.vue'\nimport AssetQueueSelectedSidebar from '@/components/damImage/uploadQueue/components/AssetQueueSelectedSidebar.vue'\nimport { useDamCachedKeywords } from '@/components/damImage/uploadQueue/keyword/cachedKeywords'\nimport { useDamCachedAuthors } from '@/components/damImage/uploadQueue/author/cachedAuthors'\nimport type { DocId, IntegerId } from '@/types/common'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n extSystem: IntegerId\n massOperations: boolean\n disableDoneAnimation?: boolean\n }>(),\n {\n disableDoneAnimation: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'showDetail', data: DocId): void\n}>()\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst list = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst cancelItem = (data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }) => {\n uploadQueuesStore.stopItemUpload(data.queueKey, data.item, data.index)\n}\n\nconst removeItem = (index: number) => {\n uploadQueuesStore.removeByIndex(props.queueKey, index)\n}\n\nconst { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords()\nconst { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors()\n\nonMounted(() => {\n list.value.forEach((item) => {\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n })\n fetchCachedKeywords()\n fetchCachedAuthors()\n})\n</script>\n\n<template>\n <div\n class=\"asset-queue-editable\"\n :class=\"{ 'asset-queue-editable--sidebar-active': massOperations }\"\n >\n <div class=\"asset-queue-editable__left\">\n <div class=\"overflow-y-auto overflow-x-hidden h-100\">\n <VRow class=\"dam-upload-queue dam-upload-queue--editable pa-2 mb-5\">\n <UploadQueueItemEditable\n v-for=\"(item, index) in list\"\n :key=\"item.key\"\n v-model:customData=\"item.customData\"\n v-model:keywords=\"item.keywords\"\n v-model:authors=\"item.authors\"\n :ext-system=\"extSystem\"\n :item=\"item\"\n :index=\"index\"\n :queue-key=\"queueKey\"\n :disable-done-animation=\"disableDoneAnimation\"\n @cancel-item=\"cancelItem\"\n @remove-item=\"removeItem\"\n @show-detail=\"emit('showDetail', $event)\"\n />\n </VRow>\n </div>\n </div>\n <div\n v-if=\"list.length > 0\"\n class=\"asset-queue-editable__sidebar system-border-l\"\n >\n <AssetQueueSelectedSidebar\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport { useI18n } from 'vue-i18n'\nimport UploadQueueEditable from '@/components/damImage/uploadQueue/components/UploadQueueEditable.vue'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport { computed, ref, toRaw } from 'vue'\nimport { useTheme } from '@/composables/themeSettings'\nimport UploadQueueButtonStop from '@/components/damImage/uploadQueue/components/UploadQueueButtonStop.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useAlerts } from '@/composables/system/alerts'\nimport {\n type AssetMetadataBulkItem,\n bulkUpdateAssetsMetadata,\n fetchAsset,\n} from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport type { ImageCreateUpdateAware } from '@/types/ImageAware'\nimport type { DocId, IntegerId } from '@/types/common'\nimport { isNull, isString, isUndefined } from '@/utils/common'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport type { UploadQueueItem } from '@/types/coreDam/UploadQueue'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport { storeToRefs } from 'pinia'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: string\n licenceId: IntegerId\n fileInputKey: number\n extSystem: IntegerId\n accept: string | undefined\n maxSizes: Record<string, number> | undefined\n }>(),\n {}\n)\n\nconst emit = defineEmits<{\n (e: 'onDrop', files: File[]): void\n (e: 'onFilesInput', files: File[]): void\n (e: 'onApply', items: ImageCreateUpdateAware[]): void\n}>()\n\nconst { uploadQueueDialog, uploadQueueSidebar, toggleUploadQueueSidebar } = useUploadQueueDialog()\n\nconst imageStore = useImageStore()\nconst { maxPosition } = storeToRefs(imageStore)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst queueTotalCount = computed(() => {\n return uploadQueuesStore.getQueueTotalCount(props.queueKey)\n})\n\nconst items = computed(() => {\n return uploadQueuesStore.getQueueItems(props.queueKey)\n})\n\nconst queueProcessedCount = computed(() => {\n return uploadQueuesStore.getQueueProcessedCount(props.queueKey)\n})\n\nconst isUploading = computed(() => {\n return queueTotalCount.value > queueProcessedCount.value\n})\n\nconst isFinished = computed(() => {\n return queueTotalCount.value === queueProcessedCount.value\n})\n\nconst { t } = useI18n()\nconst { toolbarColor } = useTheme()\nconst v$ = useVuelidate()\nconst { showRecordWas, showValidationError, showErrorsDefault } = useAlerts()\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst saveButtonLoading = ref(false)\nconst saveAndCloseButtonLoading = ref(false)\n\nconst onStopConfirm = async () => {\n uploadQueuesStore.stopUpload(props.queueKey)\n uploadQueueDialog.value = null\n}\n\nconst onSave = async () => {\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveButtonLoading.value = false\n return\n }\n try {\n await bulkUpdateAssetsMetadata(damClient, itemsRaw)\n showRecordWas('updated')\n } catch (error) {\n console.error(error)\n showErrorsDefault(error)\n } finally {\n saveButtonLoading.value = false\n }\n}\n\nconst metadataMap = async (queueItems: UploadQueueItem[], bulkItems: AssetMetadataBulkItem[]) => {\n const assetMetadataMap = new Map<DocId, { description: string; authorIds: DocId[] }>()\n const authorIdsToFetch = new Set<DocId>()\n const authorsMap = new Map<DocId, string>()\n try {\n bulkItems.forEach((bulkItem) => {\n assetMetadataMap.set(bulkItem.id, {\n description: isString(bulkItem.customData?.description) ? bulkItem.customData.description.trim() : '',\n authorIds: bulkItem.authors,\n })\n })\n assetMetadataMap.forEach((assetMeta) => {\n assetMeta.authorIds.forEach((authorId) => {\n authorIdsToFetch.add(authorId)\n })\n })\n if (authorIdsToFetch.size > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, props.extSystem, [...authorIdsToFetch])\n authorsRes.forEach((author) => {\n authorsMap.set(author.id, author.name)\n })\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n\n const queueItemsWithAssetId = queueItems.filter(\n (queueItem) => !isNull(queueItem.assetId) && !isNull(queueItem.fileId)\n )\n\n return queueItemsWithAssetId.map((queueItem) => {\n maxPosition.value++\n const description = assetMetadataMap.get(queueItem.assetId!)?.description\n const authorNames: string[] = []\n assetMetadataMap.get(queueItem.assetId!)?.authorIds.forEach((authorId) => {\n const name = authorsMap.get(authorId)\n if (!isUndefined(name) && name.trim().length > 0) {\n authorNames.push(name)\n }\n })\n return {\n key: generateUUIDv1(),\n texts: {\n description: description ?? '',\n source: authorNames.join(', '),\n },\n dam: {\n damId: queueItem.fileId as DocId,\n regionPosition: 0,\n licenceId: props.licenceId,\n },\n position: maxPosition.value,\n }\n })\n}\n\nconst onSaveAndApply = async () => {\n const itemsRaw = toRaw(items.value)\n if (itemsRaw.length === 0) return\n saveAndCloseButtonLoading.value = true\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n saveAndCloseButtonLoading.value = false\n return\n }\n try {\n const res = await bulkUpdateAssetsMetadata(damClient, itemsRaw)\n const mapped = await metadataMap(itemsRaw, res)\n emit('onApply', mapped)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n saveAndCloseButtonLoading.value = false\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading, dialog, updateUploadStore } = storeToRefs(assetDetailStore)\n\nconst showDetail = async (id: DocId) => {\n try {\n assetDetailStore.setAsset(null)\n loading.value = true\n dialog.value = props.queueKey\n updateUploadStore.value = true\n assetDetailStore.setAsset(await fetchAsset(damClient, id))\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <VDialog\n :model-value=\"true\"\n fullscreen\n class=\"overlay--sidebar\"\n >\n <VCard>\n <div class=\"asset-footer__upload asset-footer--full asset-footer__upload--full pa-0\">\n <div class=\"d-flex w-100 h-100 flex-column\">\n <VToolbar\n class=\"w-100 system-border-b pr-1\"\n :color=\"toolbarColor\"\n density=\"compact\"\n :height=\"64\"\n >\n <div class=\"d-flex align-center px-2\">\n <div>\n <div\n v-if=\"isUploading\"\n class=\"text-subtitle-2 d-flex align-center\"\n >\n {{ t('common.damImage.upload.title') }}\n </div>\n <div\n v-else\n class=\"text-subtitle-2 d-flex align-center text-green-darken-3 font-weight-bold\"\n >\n {{ t('common.damImage.upload.titleDone') }}\n </div>\n </div>\n </div>\n <VSpacer />\n <div\n v-if=\"isUploading\"\n class=\"text-caption d-flex align-center\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"16\"\n width=\"2\"\n class=\"mr-1\"\n />\n <div>{{ t('common.damImage.upload.uploading') }} {{ queueProcessedCount + 1 }}/{{ queueTotalCount }}</div>\n </div>\n <div class=\"d-flex align-center\">\n <VDivider\n v-show=\"isUploading\"\n vertical\n class=\"mx-4 my-2\"\n />\n <ABtnPrimary\n v-if=\"isFinished\"\n :height=\"36\"\n class=\"mr-2\"\n rounded=\"pill\"\n :loading=\"saveAndCloseButtonLoading\"\n :disabled=\"saveButtonLoading\"\n @click.stop=\"onSaveAndApply\"\n >\n {{ t('common.damImage.upload.saveAndApply') }}\n </ABtnPrimary>\n <VBtn\n variant=\"text\"\n :height=\"36\"\n :width=\"36\"\n class=\"mr-2\"\n icon\n :loading=\"saveButtonLoading\"\n :disabled=\"saveAndCloseButtonLoading\"\n @click.stop=\"onSave\"\n >\n <VIcon icon=\"mdi-content-save\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.save') }}\n </VTooltip>\n </VBtn>\n <AFileInput\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n @files-input=\"emit('onFilesInput', $event)\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n tabindex=\"-1\"\n icon\n variant=\"text\"\n :height=\"34\"\n :width=\"34\"\n v-bind=\"fileInputProps\"\n >\n <VIcon icon=\"mdi-plus\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.upload.add') }}\n </VTooltip>\n </VBtn>\n </template>\n </AFileInput>\n <VDivider\n vertical\n class=\"mx-4 my-2\"\n />\n <VBtn\n :height=\"36\"\n :width=\"36\"\n :active=\"uploadQueueSidebar\"\n :variant=\"uploadQueueSidebar ? 'flat' : 'text'\"\n :color=\"uploadQueueSidebar ? 'secondary' : ''\"\n class=\"mr-2\"\n icon\n @click.stop=\"toggleUploadQueueSidebar\"\n >\n <VIcon icon=\"mdi-tag-text-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.damImage.asset.massOperations.title') }}\n </VTooltip>\n </VBtn>\n <UploadQueueButtonStop\n data-cy=\"button-close\"\n :button-size=\"36\"\n :is-uploading=\"isUploading\"\n @confirm=\"onStopConfirm\"\n />\n </div>\n </VToolbar>\n <UploadQueueEditable\n :queue-key=\"queueKey\"\n :ext-system=\"extSystem\"\n :mass-operations=\"uploadQueueSidebar\"\n @show-detail=\"showDetail\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n transparent\n hover-only\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n @on-drop=\"emit('onDrop', $event)\"\n />\n </div>\n </VCard>\n </VDialog>\n</template>\n","<script lang=\"ts\" setup>\nimport type { DocId, IntegerId } from '@/types/common'\nimport { computed, inject, nextTick, onMounted, ref, type ShallowRef, toRaw } from 'vue'\nimport { isNull, isString, isUndefined } from '@/utils/common'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { ImageWidgetExtSystemConfigs } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport type { DamExtSystemConfig } from '@/types/coreDam/DamConfig'\nimport { useImageStore } from '@/components/damImage/uploadQueue/composables/imageStore'\nimport ImageWidgetMultipleItem from '@/components/damImage/uploadQueue/components/ImageWidgetMultipleItem.vue'\nimport { storeToRefs } from 'pinia'\nimport { bulkUpdateImages, deleteImage, fetchImageListByIds } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { type AssetSearchListItemDto, DamAssetType } from '@/types/coreDam/Asset'\nimport AAssetSelect from '@/components/dam/assetSelect/AAssetSelect.vue'\nimport AFileInput from '@/components/file/AFileInput.vue'\nimport AImageDropzone from '@/components/file/AFileDropzone.vue'\nimport { useDamAcceptTypeAndSizeHelper } from '@/components/damImage/uploadQueue/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/components/damImage/uploadQueue/composables/uploadQueuesStore'\nimport type { AssetSelectReturnData } from '@/types/coreDam/AssetSelect'\nimport UploadQueueDialog from '@/components/damImage/uploadQueue/components/UploadQueueDialog.vue'\nimport { useUploadQueueDialog } from '@/components/damImage/uploadQueue/composables/uploadQueueDialog'\nimport AssetDetailDialog from '@/components/damImage/uploadQueue/components/AssetDetailDialog.vue'\nimport { fetchAssetByFileId, fetchAssetListByIds } from '@/components/damImage/uploadQueue/api/damAssetApi'\nimport { useAssetDetailStore } from '@/components/damImage/uploadQueue/composables/assetDetailStore'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { ImageCreateUpdateAware, ImageWidgetSelectConfig, ImageWidgetUploadConfig } from '@/types/ImageAware'\nimport { generateUUIDv1 } from '@/utils/generator'\nimport { CHOSEN_CLASS, DRAG_CLASS, GHOST_CLASS, GROUP_CLASS, HANDLE_CLASS } from '@/components/sortable/sortableActions'\nimport { useSortable, type UseSortableReturn } from '@vueuse/integrations/useSortable'\nimport type { SortableEvent } from 'sortablejs'\nimport { WIDGET_HTML_ID_PREFIX } from '@/components/sortable/sortableUtils'\nimport { fetchAuthorListByIds } from '@/components/damImage/uploadQueue/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport useVuelidate from '@vuelidate/core'\nimport { AImageMetadataValidationScopeSymbol } from '@/components/damImage/uploadQueue/composables/uploadValidations'\nimport { useExtSystemIdForCached } from '@/components/damImage/uploadQueue/composables/extSystemIdForCached'\nimport { fetchDamAssetLicence } from '@/components/damImage/uploadQueue/api/damAssetLicenceApi'\nimport { useAssetSelectStore } from '@/services/stores/coreDam/assetSelectStore'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[]\n queueKey: UploadQueueKey\n uploadConfig: ImageWidgetUploadConfig\n selectConfig: ImageWidgetSelectConfig[]\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n width?: number | undefined\n disableDraggable?: boolean\n widgetIdentifierId?: string | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n width: undefined,\n disableDraggable: false,\n widgetIdentifierId: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId[]): void\n}>()\n\nconst assetSelectDialog = ref(false)\n\nconst imageWidgetExtSystemConfigs = inject<ShallowRef<Map<IntegerId, DamExtSystemConfig>> | undefined>(\n ImageWidgetExtSystemConfigs,\n undefined\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageWidgetExtSystemConfig = imageWidgetExtSystemConfigs?.value?.get(props.uploadConfig.extSystem)\n\nif (isUndefined(imageWidgetExtSystemConfigs) || isUndefined(imageWidgetExtSystemConfig)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\nconst { showErrorsDefault, showValidationError } = useAlerts()\nconst uploadButtonComponent = ref<InstanceType<any> | null>(null)\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(DamAssetType.Image, imageWidgetExtSystemConfig)\n\nconst { t } = useI18n()\n\nconst imagesLoading = ref(false)\n\nconst imageStore = useImageStore()\nconst { images, maxPosition } = storeToRefs(imageStore)\n\nconst fetchImagesOnLoad = async () => {\n try {\n imagesLoading.value = true\n const imagesRes = await fetchImageListByIds(imageClient, props.modelValue)\n imageStore.setImages(\n imagesRes.map((imageRes) => {\n imageStore.updateMaxPositionIfGreater(imageRes.position)\n return {\n key: generateUUIDv1(),\n ...imageRes,\n }\n })\n )\n emit('update:modelValue', images.value.map((image) => image.id).filter((id) => id !== undefined) as IntegerId[])\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n imagesLoading.value = false\n }\n}\n\nconst uploadQueuesStore = useUploadQueuesStore()\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst { cachedExtSystemId } = useExtSystemIdForCached()\n\nconst { uploadQueueDialog } = useUploadQueueDialog()\n\nconst onFileInput = (files: File[]) => {\n cachedExtSystemId.value = props.uploadConfig.extSystem\n uploadQueuesStore.addByFiles(props.queueKey, props.uploadConfig.extSystem, props.uploadConfig.licence, files)\n uploadQueueDialog.value = props.queueKey\n}\n\nconst onDrop = (files: File[]) => {\n cachedExtSystemId.value = props.uploadConfig.extSystem\n uploadQueuesStore.addByFiles(props.queueKey, props.uploadConfig.extSystem, props.uploadConfig.licence, files)\n uploadQueueDialog.value = props.queueKey\n}\n\nconst assetSelectConfirmMap = async (items: AssetSearchListItemDto[]) => {\n const assetSelectStore = useAssetSelectStore()\n const ids = items.map((item) => item.id)\n const assetMetadataMap = new Map<DocId, { description: string; authorIds: DocId[] }>()\n const authorIdsToFetch = new Set<DocId>()\n const authorsMap = new Map<DocId, string>()\n try {\n const assetDetails = await fetchAssetListByIds(damClient, ids, assetSelectStore.selectedLicenceId)\n assetDetails.forEach((assetDetail) => {\n assetMetadataMap.set(assetDetail.id, {\n description: isString(assetDetail.metadata.customData?.description)\n ? assetDetail.metadata.customData.description.trim()\n : '',\n authorIds: assetDetail.authors,\n })\n })\n assetMetadataMap.forEach((assetMeta) => {\n assetMeta.authorIds.forEach((authorId) => {\n authorIdsToFetch.add(authorId)\n })\n })\n if (authorIdsToFetch.size > 0) {\n const authorsRes = await fetchAuthorListByIds(damClient, assetSelectStore.selectedSelectConfig.extSystem, [\n ...authorIdsToFetch,\n ])\n authorsRes.forEach((author) => {\n authorsMap.set(author.id, author.name)\n })\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n\n return items.map((asset) => {\n maxPosition.value++\n const description = assetMetadataMap.get(asset.id)?.description\n const authorNames: string[] = []\n assetMetadataMap.get(asset.id)?.authorIds.forEach((authorId) => {\n const name = authorsMap.get(authorId)\n if (!isUndefined(name) && name.trim().length > 0) {\n authorNames.push(name)\n }\n })\n return {\n key: generateUUIDv1(),\n texts: {\n description: description ?? '',\n source: authorNames.join(', '),\n },\n dam: {\n damId: asset.mainFile!.id,\n regionPosition: 0,\n licenceId: asset.licence,\n },\n position: maxPosition.value,\n }\n })\n}\n\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n if (data.type === 'asset') {\n if (data.value.length === 0) return\n const items = await assetSelectConfirmMap(data.value.filter((asset) => !isNull(asset.mainFile)))\n imageStore.addImages(items)\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { loading: assetLoading, dialog: assetDialog } = storeToRefs(assetDetailStore)\nconst { damClient } = useCommonAdminCoreDamOptions()\n\nconst onEditAsset = async (assetFileId: DocId) => {\n assetLoading.value = true\n assetDialog.value = props.queueKey\n try {\n const asset = await fetchAssetByFileId(damClient, assetFileId)\n const licence = await fetchDamAssetLicence(damClient, asset.licence)\n if (licence.extSystem) {\n cachedExtSystemId.value = licence.extSystem\n }\n assetDetailStore.setAsset(asset)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n assetLoading.value = false\n }\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (items.length === 0) return\n imageStore.addImages(\n items.map((item) => {\n maxPosition.value++\n return {\n key: generateUUIDv1(),\n ...item,\n position: maxPosition.value,\n }\n })\n )\n uploadQueueDialog.value = null\n uploadQueuesStore.stopUpload(props.queueKey)\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst v$ = useVuelidate({}, {}, { $scope: AImageMetadataValidationScopeSymbol })\n\nconst saveImages = async () => {\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return false\n }\n try {\n const resItems = await bulkUpdateImages(imageClient, toRaw(images.value))\n const ids: IntegerId[] = []\n const items = resItems.map((resItem) => {\n ids.push(resItem.id)\n return {\n key: generateUUIDv1(),\n ...resItem,\n }\n })\n imageStore.setImages(items)\n emit('update:modelValue', ids)\n return true\n } catch (e) {\n return false\n }\n}\n\nconst removeItem = async (index: number) => {\n const image = images.value[index]\n if (!image) return\n if (isUndefined(image.id)) {\n imageStore.removeImageByIndex(index)\n return\n }\n if (props.callDeleteApiOnRemove) {\n try {\n await deleteImage(imageClient, image.id)\n imageStore.removeImageByIndex(index)\n } catch (e) {\n showErrorsDefault(e)\n }\n return\n }\n imageStore.removeImageByIndex(index)\n}\n\nconst widgetEl = ref<HTMLElement | null>(null)\nconst randomUuid = ref<string>(generateUUIDv1())\nconst sortableInstance = ref<UseSortableReturn | null>(null)\nconst forceRerender = ref(0)\n\nconst widgetHtmlId = computed(() => {\n return isUndefined(props.widgetIdentifierId) ? WIDGET_HTML_ID_PREFIX + randomUuid.value : props.widgetIdentifierId\n})\n\nconst forceRerenderWidgetHtml = () => {\n forceRerender.value++\n nextTick(() => {\n initSortable()\n })\n}\n\nconst updateAllPositions = () => {\n let pos = 0\n images.value.forEach((image) => {\n pos++\n image.position = pos\n })\n imageStore.maxPosition = pos\n}\nconst moveImagePositions = (from: number, to: number) => {\n if (to >= 0 && to < images.value.length) {\n const element = images.value.splice(from, 1)[0]\n images.value.splice(to, 0, element)\n updateAllPositions()\n forceRerenderWidgetHtml()\n }\n}\n\nconst initSortable = () => {\n if (props.disableDraggable) return\n if (!widgetEl.value) return\n const nestedSortable = widgetEl.value.querySelector<HTMLElement>('.' + GROUP_CLASS)\n if (!nestedSortable) return\n sortableInstance.value = useSortable(nestedSortable, [], {\n handle: '.' + HANDLE_CLASS,\n ghostClass: GHOST_CLASS,\n dragClass: DRAG_CLASS,\n chosenClass: CHOSEN_CLASS,\n onEnd: async (event: SortableEvent) => {\n if (isUndefined(event.oldIndex) || isUndefined(event.newIndex)) return\n moveImagePositions(event.oldIndex, event.newIndex)\n },\n })\n}\n\nnextTick(() => {\n widgetEl.value = document.querySelector('#' + widgetHtmlId.value)\n initSortable()\n})\n\ndefineExpose({\n saveImages,\n})\n\nonMounted(() => {\n fetchImagesOnLoad()\n})\n</script>\n\n<template>\n <div :id=\"widgetHtmlId\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-subtitle-2\"\n >\n {{ label }}\n </h4>\n <div class=\"pb-2\">\n <AFileInput\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n ref=\"uploadButtonComponent\"\n v-bind=\"fileInputProps\"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInput>\n <VBtn\n class=\"mr-2\"\n @click=\"actionLibrary\"\n >\n {{ t('common.damImage.image.button.addFromDam') }}\n </VBtn>\n </div>\n <AAssetSelect\n v-model=\"assetSelectDialog\"\n :select-config=\"selectConfig\"\n :min-count=\"1\"\n :max-count=\"50\"\n :asset-type=\"DamAssetType.Image\"\n return-type=\"asset\"\n @on-confirm=\"onAssetSelectConfirm\"\n />\n\n <div\n class=\"position-relative w-100\"\n style=\"min-height: 140px\"\n >\n <div\n :key=\"forceRerender\"\n :class=\"GROUP_CLASS\"\n class=\"asset-list-tiles asset-list-tiles--thumbnail\"\n >\n <ImageWidgetMultipleItem\n v-for=\"(image, index) in images\"\n :key=\"image.key\"\n :index=\"index\"\n :disable-draggable=\"disableDraggable\"\n @edit-asset=\"onEditAsset\"\n @remove-item=\"removeItem\"\n />\n </div>\n <AImageDropzone\n variant=\"fill\"\n :hover-only=\"modelValue.length > 0 || images.length > 0\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @on-drop=\"onDrop\"\n @on-click=\"uploadButtonComponent?.$el.click()\"\n />\n </div>\n <UploadQueueDialog\n v-if=\"uploadQueueDialog === queueKey\"\n :queue-key=\"queueKey\"\n :ext-system=\"uploadConfig.extSystem\"\n :licence-id=\"uploadConfig.licence\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n multiple\n @on-apply=\"onAssetUploadConfirm\"\n />\n <AssetDetailDialog\n v-if=\"assetDialog === queueKey\"\n :queue-key=\"queueKey\"\n :ext-system=\"cachedExtSystemId\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId } from '@/types/common'\nimport { onMounted, provide, ref } from 'vue'\nimport { useDamConfigState } from '@/components/damImage/uploadQueue/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\nimport type { UploadQueueKey } from '@/types/coreDam/UploadQueue'\nimport { ImageWidgetExtSystemConfigs } from '@/components/damImage/composables/imageWidgetInkectionKeys'\nimport ImageWidgetMultipleInner from '@/components/damImage/uploadQueue/components/ImageWidgetMultipleInner.vue'\nimport { isUndefined } from '@/utils/common'\nimport type { ImageWidgetSelectConfig, ImageWidgetUploadConfig } from '@/types/ImageAware'\nimport { isImageWidgetUploadConfigAllowed } from '@/components/damImage/composables/damFilterUserAllowedUploadConfigs'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[] // initial ids, updated only when save is called\n queueKey: UploadQueueKey\n uploadConfig: ImageWidgetUploadConfig\n selectConfig: ImageWidgetSelectConfig[]\n configName?: string\n label?: string | undefined\n readonly?: boolean\n dataCy?: string | undefined\n width?: number | undefined\n callDeleteApiOnRemove?: boolean\n }>(),\n {\n configName: 'default',\n label: undefined,\n image: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n width: undefined,\n callDeleteApiOnRemove: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerId[]): void\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error' | 'uploadNotAllowed'>('loading')\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { damClient } = useCommonAdminCoreDamOptions(props.configName)\nconst {\n initialized,\n loadDamConfigExtSystem,\n damConfigExtSystem,\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigExtSystem,\n getDamConfigAssetCustomFormElements,\n} = useDamConfigState(damClient)\n\nonMounted(async () => {\n if (!isImageWidgetUploadConfigAllowed(props.uploadConfig)) {\n status.value = 'uploadNotAllowed'\n return\n }\n const promises: Promise<any>[] = []\n if (!initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n const configExtSystem = getDamConfigExtSystem(props.uploadConfig.extSystem)\n if (isUndefined(configExtSystem)) {\n promises.push(loadDamConfigExtSystem(props.uploadConfig.extSystem))\n }\n const configAssetCustomFormElements = getDamConfigAssetCustomFormElements(props.uploadConfig.extSystem)\n if (isUndefined(configAssetCustomFormElements)) {\n promises.push(loadDamConfigAssetCustomFormElements(props.uploadConfig.extSystem))\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n if (status.value !== 'error') status.value = 'ready'\n})\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetMultipleInner> | null>(null)\n\nconst saveImages = async () => {\n if (!innerComponent.value) return false\n return (await innerComponent.value.saveImages()) as boolean\n}\n\nprovide(ImageWidgetExtSystemConfigs, damConfigExtSystem)\n\ndefineExpose({\n saveImages,\n})\n</script>\n\n<template>\n <ImageWidgetMultipleInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-bind=\"props\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n <div\n v-else-if=\"status === 'error'\"\n class=\"text-error\"\n >\n Loading DAM config error\n </div>\n <div\n v-else-if=\"status === 'uploadNotAllowed'\"\n class=\"text-error\"\n >\n DAM access rights error\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { IntegerId } from '@/types/common'\nimport type { ImageAware } from '@/types/ImageAware'\nimport AImageWidgetSimple from '@/components/damImage/AImageWidgetSimple.vue'\nimport { ref, toRefs, watch } from 'vue'\nimport { cloneDeep } from '@/utils/common'\nimport { fetchImageListByIds } from '@/components/damImage/uploadQueue/api/imageApi'\nimport { useAlerts } from '@/composables/system/alerts'\nimport { useCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerId[]\n images?: ImageAware[]\n configName?: string\n label?: string | undefined\n width?: number | undefined\n disableAspectRatio?: boolean\n aspectRatio?: number | string\n showDescription?: boolean\n showSource?: boolean\n }>(),\n {\n images: () => [],\n configName: 'default',\n label: undefined,\n image: undefined,\n width: undefined,\n disableAspectRatio: false,\n aspectRatio: 1.777, // 16/9\n showDescription: false,\n showSource: false,\n }\n)\n\nconst { images, modelValue } = toRefs(props)\n\nconst resImages = ref<ImageAware[]>([])\n\nconst { showErrorsDefault } = useAlerts()\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst imageOptions = useCommonAdminImageOptions(props.configName)\nconst { imageClient } = imageOptions\n\nwatch(\n [images, modelValue],\n async ([newImages, newImageIds]) => {\n resImages.value = []\n if (newImages && newImages.length > 0) {\n resImages.value = cloneDeep(newImages)\n return\n }\n if (newImageIds && newImageIds.length > 0) {\n try {\n resImages.value = await fetchImageListByIds(imageClient, newImageIds)\n } catch (error) {\n showErrorsDefault(error)\n }\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div class=\"asset-list-tiles asset-list-tiles--thumbnail\">\n <div\n v-for=\"image in resImages\"\n :key=\"image.id\"\n class=\"asset-list-tiles__item\"\n >\n <div class=\"asset-list-tiles__item-card\">\n <div class=\"ma-2\">\n <AImageWidgetSimple\n :model-value=\"image.id\"\n :image=\"image\"\n :config-name=\"configName\"\n :width=\"width\"\n :disable-aspect-ratio=\"disableAspectRatio\"\n :aspect-ratio=\"aspectRatio\"\n :show-description=\"showDescription\"\n :show-source=\"showSource\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","import { computed, type Ref } from 'vue'\nimport { i18n } from '@/plugins/i18n'\nimport type { Pagination } from '@/types/Pagination'\nimport { usePagination } from '@/composables/system/pagination'\nimport { isUndefined } from '@/utils/common'\n\nexport const DATETIME_AUTO_LABEL_TRACKING = ['createdAt', 'modifiedAt']\n\nexport type DatatableSortBy =\n | {\n key: string\n order: 'asc' | 'desc'\n }\n | null\n | undefined\n\nexport type DatatableOrderingOption = { id: number; titleT: string; sortBy?: DatatableSortBy; customData?: any }\n\nexport type DatatableOrderingOptions = Array<DatatableOrderingOption>\n\nexport type ColumnConfig = {\n key: string\n title?: string\n sortable?: boolean\n fixed?: boolean\n}\n\nexport type ColumnInternalValues = {\n key: string\n title?: string\n sortable: boolean\n fixed: boolean\n}\n\nconst defaultColumn: ColumnInternalValues = {\n key: '',\n title: undefined,\n sortable: false,\n fixed: false,\n}\n\nexport function createDatatableColumnsConfig(\n config: ColumnConfig[],\n columnsHidden: Ref<Array<string>>,\n system: string | undefined = undefined,\n subject: string | undefined = undefined,\n disableActions: boolean = false,\n customPagination: Pagination | undefined = undefined,\n customI18n: undefined | any = undefined\n) {\n const localI18n = customI18n ?? i18n\n const { t } = localI18n.global || localI18n\n const pagination: Pagination = usePagination()\n if (customPagination) {\n for (const prop of Object.keys(pagination)) {\n if (prop in customPagination) {\n // @ts-ignore\n pagination[prop] = customPagination[prop]\n }\n }\n }\n\n const columnsAll = config.map((item) => {\n const obj = { ...defaultColumn, ...item }\n if (!isUndefined(obj.title)) {\n // do not modify\n } else if (isUndefined(obj.title) && DATETIME_AUTO_LABEL_TRACKING.includes(obj.key)) {\n obj.title = t('common.model.tracking.' + obj.key)\n } else if (isUndefined(obj.title) && system && subject) {\n obj.title = t(system + '.' + subject + '.model.' + obj.key)\n } else {\n obj.title = ''\n }\n return obj\n })\n\n const columnsVisible = computed(() => {\n const columns: any = []\n columnsAll.forEach((column) => {\n if (!columnsHidden.value.includes(column.key)) {\n columns.push(column)\n }\n })\n if (!disableActions) columns.push({ key: 'actions', sortable: false, fixed: true })\n return columns\n })\n\n const updateSortBy = (sortBy: any) => {\n if (sortBy) {\n pagination.sortBy = sortBy.key\n pagination.descending = sortBy.order === 'desc' ? true : false\n return\n }\n pagination.sortBy = null\n }\n\n return {\n columnsAll,\n columnsVisible,\n columnsHidden,\n updateSortBy,\n pagination,\n }\n}\n","import { createDatatableColumnsConfig, type DatatableOrderingOption } from '@/composables/system/datatableColumns'\nimport type { Ref } from 'vue'\nimport { ref } from 'vue'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport { useFilterHelpers } from '@/composables/filter/filterHelpers'\nimport { useAlerts } from '@/composables/system/alerts'\n\nexport function useSubjectSelect<TItem>(\n datatableConfig: any,\n datatableHiddenColumns: any,\n system: string,\n subject: string,\n fetch: (pag: Pagination, fb: FilterBag) => Promise<Array<TItem>>,\n filter: FilterBag\n) {\n const filterTouched: Ref<boolean> = ref(false)\n const items: Ref<Array<TItem>> = ref([])\n const selected: Ref<Array<TItem>> = ref([])\n const loading = ref(false)\n\n const { resetFilter, submitFilter } = useFilterHelpers()\n const { showErrorsDefault } = useAlerts()\n\n const { columnsVisible, pagination, updateSortBy, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n datatableConfig,\n datatableHiddenColumns,\n system,\n subject\n )\n\n const onOpen = () => {\n resetState()\n getList()\n }\n\n const sortByChange = (option: DatatableOrderingOption) => {\n updateSortBy(option.sortBy)\n getList()\n }\n\n const onFetchNextPage = async () => {\n loading.value = true\n pagination.page++\n try {\n items.value.push(...(await fetch(pagination, filter)))\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const resetState = () => {\n items.value = []\n selected.value = []\n }\n\n const getList = async () => {\n loading.value = true\n try {\n items.value = await fetch(pagination, filter)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n loading.value = false\n }\n }\n\n const onRowClick = (event: Event) => {\n const eventTarget = event.target as HTMLElement | null\n if (!eventTarget) return\n const parent = eventTarget.parentElement\n if (!parent || !parent.classList.contains('v-data-table__tr')) return\n const firstTd = parent.firstElementChild\n if (!firstTd || !firstTd.classList.contains('v-data-table__td')) return\n const input = firstTd.querySelector('input')\n if (!input) return\n input.click()\n }\n\n return {\n items,\n selected,\n pagination,\n columnsVisible,\n columnsHidden,\n columnsAll,\n filterTouched,\n loading,\n onRowClick,\n onFetchNextPage,\n onOpen,\n sortByChange,\n getList,\n resetFilter: () => resetFilter(filter, pagination, getList),\n submitFilter: () => submitFilter(filter, pagination, getList),\n }\n}\n","export interface VDatatableSelectableItem {\n value: any\n selectable: boolean\n}\n\ninterface DataTableSelectStrategy {\n showSelectAll: boolean\n allSelected: (data: {\n allItems: VDatatableSelectableItem[]\n currentPage: VDatatableSelectableItem[]\n }) => VDatatableSelectableItem[]\n select: (data: { items: VDatatableSelectableItem[]; value: boolean; selected: Set<unknown> }) => Set<unknown>\n selectAll: (data: {\n value: boolean\n allItems: VDatatableSelectableItem[]\n currentPage: VDatatableSelectableItem[]\n selected: Set<unknown>\n }) => Set<unknown>\n}\n\nexport const generateDatatableMinMaxSelectStrategy = (min: number, max: number): DataTableSelectStrategy => {\n return {\n showSelectAll: false,\n allSelected: () => [],\n select: ({ items, value, selected }) => {\n if (min === max && min === 1) {\n return new Set(value ? [items[0]?.value] : [])\n }\n for (const item of items) {\n if (selected.size >= max && value) break\n else if (value) selected.add(item.value)\n else selected.delete(item.value)\n }\n return selected\n },\n selectAll: ({ selected }) => selected,\n }\n}\n","export const booleanToInteger = (value: boolean) => {\n return value ? 1 : 0\n}\n","import { dateTimeNow } from '@/utils/datetime'\nimport { isString } from '@/utils/common'\nimport type { AnzuUser } from '@/types/AnzuUser'\n\nexport function useAnzuUserFactory(system = '', resourceName = 'user') {\n let _system = system\n let _resourceName = resourceName\n const createAnzuUser = (system?: string, resourceName?: string): AnzuUser => {\n if (isString(system)) _system = system\n if (isString(resourceName)) _resourceName = resourceName\n\n return {\n id: 0,\n createdAt: dateTimeNow(),\n createdBy: 0,\n email: '',\n avatar: {\n color: '',\n text: '',\n },\n person: {\n firstName: '',\n fullName: '',\n lastName: '',\n },\n enabled: false,\n modifiedAt: dateTimeNow(),\n modifiedBy: 0,\n permissionGroups: [],\n permissions: {},\n resolvedPermissions: {},\n roles: [],\n _system: _system,\n _resourceName: _resourceName,\n }\n }\n\n return {\n createAnzuUser,\n }\n}\n","import type { PermissionConfig } from '@/types/PermissionConfig'\n\nexport function usePermissionConfigFactory() {\n const createPermissionConfig = (): PermissionConfig => {\n return {\n config: {},\n defaultGrants: [],\n roles: [],\n translation: {\n actions: {},\n subjects: {},\n roles: {},\n },\n }\n }\n\n return {\n createPermissionConfig,\n }\n}\n","import { dateTimeNow } from '@/utils/datetime'\nimport type { PermissionGroup } from '@/types/PermissionGroup'\n\nexport function usePermissionGroupFactory() {\n const createPermissionGroup = (): PermissionGroup => {\n return {\n id: 0,\n title: '',\n description: '',\n permissions: {},\n createdBy: 0,\n modifiedBy: 0,\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n _resourceName: 'permissionGroup',\n _system: '',\n }\n }\n\n return {\n createPermissionGroup,\n }\n}\n","import { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport { isNull } from '@/utils/common'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport type { AxiosInstance, AxiosRequestConfig, Method } from 'axios'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\n/**\n * @template T Type used for request payload, by default same as Response type\n * @template R Response type override, optional\n */\nexport const apiAnyRequest = <T, R = T>(\n client: () => AxiosInstance,\n method: Method,\n urlTemplate = '',\n urlParams: UrlParams = {},\n object: T | null = null,\n system: string,\n entity: string,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n return new Promise((resolve, reject) => {\n const axiosConfig: AxiosRequestConfig = { method: method }\n if (urlTemplate !== '') {\n axiosConfig.url = replaceUrlParameters(urlTemplate, urlParams)\n }\n if (!isNull(object)) {\n axiosConfig.data = JSON.stringify(object)\n }\n client()\n .request({ ...options, ...axiosConfig })\n .then((res) => {\n if (!isValidHTTPStatus(res.status)) {\n return reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n return resolve(res.data)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return resolve(null as R)\n }\n return reject(new AnzuFatalError())\n })\n .catch((err) => {\n if (axiosErrorResponseIsForbidden(err)) {\n return reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return reject(new AnzuFatalError(err))\n })\n })\n}\n","import { replaceUrlParameters, type UrlParams } from '@/services/api/apiHelper'\nimport type { FilterBag } from '@/types/Filter'\nimport type { Pagination } from '@/types/Pagination'\nimport { isDefined } from '@/utils/common'\nimport type { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport { useApiQueryBuilder } from '@/services/api/queryBuilder'\nimport { usePagination } from '@/composables/system/pagination'\nimport { AnzuApiForbiddenError, axiosErrorResponseIsForbidden } from '@/model/error/AnzuApiForbiddenError'\nimport { AnzuApiValidationError, axiosErrorResponseHasValidationData } from '@/model/error/AnzuApiValidationError'\nimport {\n AnzuApiForbiddenOperationError,\n axiosErrorResponseHasForbiddenOperationData,\n} from '@/model/error/AnzuApiForbiddenOperationError'\nimport { AnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isValidHTTPStatus } from '@/utils/response'\nimport { AnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\nimport {\n type ApiInfiniteResponseList,\n type ApiResponseList,\n isApiInfiniteResponseList,\n isApiResponseList,\n} from '@/types/ApiResponse'\nimport { HTTP_STATUS_NO_CONTENT } from '@/composables/statusCodes'\n\nconst generateListApiQuery = (pagination: Pagination, filterBag: FilterBag | undefined = undefined): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(pagination.rowsPerPage)\n querySetOffset(pagination.page, pagination.rowsPerPage)\n querySetOrder(pagination.sortBy, pagination.descending)\n if (isDefined(filterBag)) querySetFilters(filterBag)\n return queryBuild()\n}\n\nconst generateListApiQueryWithoutPagination = (\n rowsPerPage: number,\n page: number,\n orderField: string,\n orderDesc: boolean,\n filterBag: FilterBag | undefined = undefined\n): string => {\n const { querySetLimit, querySetOffset, querySetOrder, queryBuild, querySetFilters } = useApiQueryBuilder()\n querySetLimit(rowsPerPage)\n querySetOffset(page, rowsPerPage)\n querySetOrder(orderField, orderDesc)\n if (isDefined(filterBag)) querySetFilters(filterBag)\n return queryBuild()\n}\n// todo: alpha version\n/**\n * Used to fetch all items from list api.\n *\n * @template R Response type override, optional\n */\nexport const apiFetchListBatch = async <R>(\n client: () => AxiosInstance,\n urlTemplate: string,\n urlParams: UrlParams = {},\n sortBy = 'id',\n sortDesc = true,\n filterBag: FilterBag | undefined = undefined,\n batchSize = 100,\n system: string,\n entity: string,\n forceElastic = false,\n options: AxiosRequestConfig = {}\n): Promise<R> => {\n const searchApi = (isDefined(filterBag?._elastic) || forceElastic) ? '/search' : ''\n const pagination = usePagination(sortBy)\n pagination.rowsPerPage = batchSize\n pagination.sortBy = sortBy\n pagination.descending = sortDesc\n const urlPart = replaceUrlParameters(urlTemplate, urlParams) + searchApi\n const results = [] as unknown as R\n\n try {\n const res = await client().get(urlPart + generateListApiQuery(pagination, filterBag), options)\n if (!isValidHTTPStatus(res.status)) {\n return Promise.reject(new AnzuApiResponseCodeError(res.status))\n }\n if (res.data) {\n const resData = res.data as unknown as ApiResponseList<R> | ApiInfiniteResponseList<R>\n // @ts-ignore\n results.push(...resData.data)\n if (isApiInfiniteResponseList(resData)) {\n pagination.hasNextPage = res.data.hasNextPage\n if (pagination.hasNextPage) {\n while (pagination.hasNextPage) {\n pagination.page++\n const nextPageResponse = await client().get(urlPart + generateListApiQuery(pagination, filterBag), options)\n const nextPageData = nextPageResponse.data\n // @ts-ignore\n results.push(...nextPageData.data)\n pagination.hasNextPage = nextPageData.hasNextPage\n }\n }\n } else if (isApiResponseList(resData)) {\n pagination.totalCount = resData.totalCount\n if (pagination.totalCount <= pagination.rowsPerPage) {\n return Promise.resolve(results as R)\n }\n const promises: Promise<any>[] = []\n const numPages = Math.ceil(pagination.totalCount / pagination.rowsPerPage)\n for (let i = 0; i < numPages; i++) {\n promises.push(\n client().get(\n urlPart +\n generateListApiQueryWithoutPagination(\n pagination.rowsPerPage,\n i,\n pagination.sortBy,\n pagination.descending,\n filterBag\n ),\n options\n )\n )\n }\n const allResponses = await Promise.all(promises)\n allResponses.forEach((pageResponse) => {\n // @ts-ignore\n results.push(...pageResponse.data.data)\n })\n }\n pagination.currentViewCount = res.data.data.length\n return Promise.resolve(results as R)\n }\n if (res.status === HTTP_STATUS_NO_CONTENT) {\n return Promise.resolve([] as R)\n }\n\n return results\n } catch (err: any) {\n if (axiosErrorResponseIsForbidden(err)) {\n return Promise.reject(new AnzuApiForbiddenError(err))\n }\n if (axiosErrorResponseHasValidationData(err)) {\n return Promise.reject(new AnzuApiValidationError(err, system, entity, err))\n }\n if (axiosErrorResponseHasForbiddenOperationData(err)) {\n return Promise.reject(new AnzuApiForbiddenOperationError(err, err))\n }\n return Promise.reject(new AnzuFatalError(err))\n }\n}\n","import { isAnzuApiValidationError } from '@/model/error/AnzuApiValidationError'\nimport { isAnzuFatalError } from '@/model/error/AnzuFatalError'\nimport { isAnzuApiForbiddenError } from '@/model/error/AnzuApiForbiddenError'\nimport { isAnzuApiResponseCodeError } from '@/model/error/AnzuApiResponseCodeError'\n\nexport function useErrors() {\n return {\n isAnzuFatalError,\n isAnzuApiForbiddenError,\n isAnzuApiValidationError,\n isAnzuApiResponseCodeError,\n }\n}\n","import type { AxiosInstance } from 'axios'\nimport type { Pagination } from '@/types/Pagination'\nimport type { FilterBag } from '@/types/Filter'\nimport type { JobBase } from '@/types/Job'\nimport { apiFetchList } from '@/services/api/apiFetchList'\nimport { apiFetchOne } from '@/services/api/apiFetchOne'\nimport { apiCreateOne } from '@/services/api/apiCreateOne'\nimport { apiDeleteOne } from '@/services/api/apiDeleteOne'\nimport { stringToKebabCase } from '@/utils/string'\n\nconst END_POINT = '/adm/v1/job'\nexport const ENTITY = 'job'\n\nexport function useJobApi<JobType extends JobBase = JobBase>(client: () => AxiosInstance, system: string) {\n const fetchJobList = (pagination: Pagination, filterBag: FilterBag) =>\n apiFetchList<JobType[]>(client, END_POINT, {}, pagination, filterBag, system, ENTITY)\n\n const fetchJob = (id: number) => apiFetchOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n const createJob = (data: JobType) => {\n const type = stringToKebabCase(data._resourceName)\n .slice(4) // remove \"job-\" prefix\n .replace('-kind-', '-kind/') // replace \"-kind-\" with \"-kind/\" if the needle is found\n\n return apiCreateOne<JobType>(client, data, END_POINT + '/:type', { type }, system, ENTITY)\n }\n\n const deleteJob = (id: number) => apiDeleteOne<JobType>(client, END_POINT + '/:id', { id }, system, ENTITY)\n\n return {\n fetchJobList,\n fetchJob,\n createJob,\n deleteJob,\n }\n}\n","import { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { ValueObjectOption } from '@/types/ValueObject'\n\nexport const JOB_RESOURCE_USER_DATA_DELETE = 'jobUserDataDelete'\n\nexport type JobBaseResource = typeof JOB_RESOURCE_USER_DATA_DELETE | `job${string}`\n\nexport function useJobBaseResource<T extends JobBaseResource = JobBaseResource>(\n customJobs: ValueObjectOption<T>[] = []\n) {\n const { t } = useI18n()\n\n const jobResourceOptions = ref<ValueObjectOption<T>[]>([\n ...([\n {\n value: 'jobUserDataDelete',\n title: t('common.job.jobResource.jobUserDataDelete'),\n },\n ] as unknown as ValueObjectOption<T>[]),\n ...customJobs,\n ])\n\n const getJobResourceOption = (value: T): ValueObjectOption<T> => {\n return jobResourceOptions.value.find((item) => item.value === value) as ValueObjectOption<T>\n }\n\n return {\n jobResourceOptions,\n getJobResourceOption,\n }\n}\n","import type { App, DeepReadonly, Ref, UnwrapRef } from 'vue'\nimport type { AnzuUser } from '@/types/AnzuUser'\nimport type { AclValue } from '@/types/Permission'\nimport Acl from '@/components/permission/Acl.vue'\nimport Notification from '@kyvg/vue3-notification'\nimport type { LanguageCode } from '@/composables/languageSettings'\nimport {\n AvailableLanguagesSymbol,\n CurrentUserSymbol,\n CustomAclResolverSymbol,\n DefaultLanguageSymbol,\n} from '@/components/injectionKeys'\nimport type { AxiosInstance } from 'axios'\nimport { initCommonAdminImageOptions } from '@/components/damImage/composables/commonAdminImageOptions'\nimport { initCommonAdminCoreDamOptions } from '@/components/dam/assetSelect/composables/commonAdminCoreDamOptions'\n\nexport type PluginOptions<T extends AclValue = AclValue> = {\n currentUser: CurrentUserType\n languages: { available: LanguageCode[]; default: LanguageCode }\n customAclResolver?: CustomAclResolver<T>\n coreDam?: CommonAdminCoreDamOptions\n image?: CommonAdminImageOptions\n}\n\nexport type CustomAclResolver<T extends AclValue = AclValue> =\n | undefined\n | {\n can?: (acl: T, subject?: object) => boolean\n canOwner?: (subject: object) => boolean\n }\n\nexport type CurrentUserType = DeepReadonly<Ref<UnwrapRef<AnzuUser | undefined>>>\n\nexport interface CommonAdminImageConfig {\n imageClient: () => AxiosInstance\n previewDomain: string\n width: number\n height: number\n}\n\nexport type CommonAdminImageOptions =\n | undefined\n | {\n configs: { [key: string]: CommonAdminImageConfig }\n }\n\nexport interface CommonAdminCoreDamConfig {\n damClient: () => AxiosInstance\n}\n\nexport type CommonAdminCoreDamOptions =\n | undefined\n | {\n configs: { [key: string]: CommonAdminCoreDamConfig }\n apiTimeout: number\n uploadStatusFallback: boolean\n notification: {\n enabled: boolean\n webSocketUrl: string\n }\n }\n\nexport default {\n install<T extends AclValue = AclValue>(app: App, options: PluginOptions<T>): void {\n app.provide(CurrentUserSymbol, options.currentUser)\n app.provide(CustomAclResolverSymbol, options.customAclResolver)\n app.provide(AvailableLanguagesSymbol, options.languages.available)\n app.provide(DefaultLanguageSymbol, options.languages.default)\n app.component('Acl', Acl)\n app.use(Notification, { componentName: 'Notifications' })\n initCommonAdminImageOptions(options.image)\n initCommonAdminCoreDamOptions(options.coreDam)\n },\n}\n","export const arrayItemToggle = <T>(array: Array<T>, value: T) => {\n const index = array.indexOf(value)\n if (index === -1) {\n array.push(value)\n return\n }\n array.splice(index, 1)\n}\n\nexport const arrayToString = (values: Array<string | number>, separator = ', ') => values.join(separator)\n\nexport const arrayFromArgs = <T>(...args: [T[]]) => Array.from(...args)\n\nexport type NestedArray<T> = Array<NestedArray<T> | T>\n\nexport const arrayFlatten = <T>(input: NestedArray<T>, acc: T[] = []): T[] => {\n return input.reduce((_: T[], current) => {\n if (Array.isArray(current)) return arrayFlatten(current, acc)\n acc.push(current)\n return acc\n }, [])\n}\n\nexport const arraysHaveSameElements = <T>(array1: T[], array2: T[]): boolean => {\n if (array1.length !== array2.length) {\n return false\n }\n\n // Sort both arrays\n const sortedArray1 = array1.slice().sort()\n const sortedArray2 = array2.slice().sort()\n\n // Compare the sorted arrays\n for (let i = 0; i < sortedArray1.length; i++) {\n if (sortedArray1[i] !== sortedArray2[i]) {\n return false\n }\n }\n\n return true\n}\n","import type { RouteLocationRaw, Router } from 'vue-router'\n\nexport const browserHistoryReplaceUrlByString = (path: string) => {\n history.replaceState(history.state, '', path)\n}\n\nexport const browserHistoryReplaceUrlByRouter = (router: Router, to: RouteLocationRaw) => {\n const resolved = router.resolve(to)\n browserHistoryReplaceUrlByString(resolved.href)\n}\n","import alert from '@/locales/cs/common/alert.json'\nimport button from '@/locales/cs/common/button.json'\nimport model from '@/locales/cs/common/model.json'\nimport system from '@/locales/cs/common/system.json'\nimport anzuUser from '@/locales/cs/common/anzuUser.json'\nimport job from '@/locales/cs/common/job.json'\nimport log from '@/locales/cs/common/log.json'\nimport permission from '@/locales/cs/common/permission.json'\nimport permissionGroup from '@/locales/cs/common/permissionGroup.json'\nimport vuetify from '@/locales/cs/vuetify.json'\nimport apiValidation from '@/locales/cs/error/apiValidation.json'\nimport apiForbiddenOperation from '@/locales/cs/error/apiForbiddenOperation.json'\nimport jsValidation from '@/locales/cs/error/jsValidation.json'\nimport assetSelect from '@/locales/cs/common/assetSelect.json'\nimport subjectSelect from '@/locales/cs/common/subjectSelect.json'\nimport time from '@/locales/cs/common/time.json'\nimport sortable from '@/locales/cs/common/sortable.json'\nimport damImage from '@/locales/cs/common/damImage.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n jsValidation: {\n ...jsValidation,\n },\n },\n}\n","import vuetify from '@/locales/en/vuetify.json'\nimport alert from '@/locales/en/common/alert.json'\nimport button from '@/locales/en/common/button.json'\nimport model from '@/locales/en/common/model.json'\nimport system from '@/locales/en/common/system.json'\nimport anzuUser from '@/locales/en/common/anzuUser.json'\nimport job from '@/locales/en/common/job.json'\nimport log from '@/locales/en/common/log.json'\nimport permission from '@/locales/en/common/permission.json'\nimport permissionGroup from '@/locales/en/common/permissionGroup.json'\nimport apiValidation from '@/locales/en/error/apiValidation.json'\nimport jsValidation from '@/locales/en/error/jsValidation.json'\nimport apiForbiddenOperation from '@/locales/en/error/apiForbiddenOperation.json'\nimport assetSelect from '@/locales/en/common/assetSelect.json'\nimport subjectSelect from '@/locales/en/common/subjectSelect.json'\nimport time from '@/locales/en/common/time.json'\nimport sortable from '@/locales/en/common/sortable.json'\nimport damImage from '@/locales/en/common/damImage.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n jsValidation: {\n ...jsValidation,\n },\n },\n}\n","import alert from '@/locales/sk/common/alert.json'\nimport button from '@/locales/sk/common/button.json'\nimport model from '@/locales/sk/common/model.json'\nimport system from '@/locales/sk/common/system.json'\nimport anzuUser from '@/locales/sk/common/anzuUser.json'\nimport job from '@/locales/sk/common/job.json'\nimport log from '@/locales/sk/common/log.json'\nimport permission from '@/locales/sk/common/permission.json'\nimport permissionGroup from '@/locales/sk/common/permissionGroup.json'\nimport vuetify from '@/locales/sk/vuetify.json'\nimport apiValidation from '@/locales/sk/error/apiValidation.json'\nimport apiForbiddenOperation from '@/locales/sk/error/apiForbiddenOperation.json'\nimport jsValidation from '@/locales/sk/error/jsValidation.json'\nimport assetSelect from '@/locales/sk/common/assetSelect.json'\nimport subjectSelect from '@/locales/sk/common/subjectSelect.json'\nimport time from '@/locales/sk/common/time.json'\nimport sortable from '@/locales/sk/common/sortable.json'\nimport damImage from '@/locales/sk/common/damImage.json'\n\nexport default {\n common: {\n alert,\n button,\n model,\n system,\n anzuUser,\n job,\n log,\n permission,\n permissionGroup,\n assetSelect,\n subjectSelect,\n time,\n sortable,\n damImage,\n },\n $vuetify: vuetify,\n error: {\n apiValidation: {\n ...apiValidation,\n },\n apiForbiddenOperation: {\n ...apiForbiddenOperation,\n },\n jsValidation: {\n ...jsValidation,\n },\n },\n}\n","import { VBtn, VChip } from 'vuetify/components'\n\nexport const useCommonVuetifyConfig = () => {\n const commonTheme = () => {\n return {\n defaultTheme: 'light',\n variations: {\n colors: [],\n lighten: 0,\n darken: 0,\n },\n themes: {\n light: {\n dark: false,\n colors: {\n background: '#ffffff',\n surface: '#ffffff',\n 'on-surface': '#333',\n primary: '#3f6ad8',\n secondary: '#E0E0E0',\n 'on-secondary': '#333',\n success: '#3ac47d',\n 'on-success': '#fff',\n warning: '#FB8C00',\n error: '#d92550',\n info: '#78c3fb',\n },\n variables: {},\n },\n dark: {\n dark: true,\n colors: {\n background: '#1A1A1A',\n surface: '#1A1A1A',\n primary: '#3f6ad8',\n secondary: '#E0E0E0',\n 'on-secondary': '#333',\n success: '#3ac47d',\n warning: '#FB8C00',\n error: '#d92550',\n info: '#78c3fb',\n },\n variables: {},\n },\n },\n }\n }\n\n const commonDefaults = () => {\n return {\n global: {},\n VTextField: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VTextarea: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VSelect: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VAutocomplete: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VCombobox: {\n variant: 'underlined',\n density: 'compact',\n color: 'primary',\n },\n VSwitch: {\n color: 'success',\n density: 'compact',\n },\n VCard: {\n variant: 'flat',\n },\n VDialog: {\n noClickAnimation: true,\n persistent: true,\n },\n VProgressCircular: {\n color: 'primary',\n },\n VBtn: {\n variant: 'flat',\n },\n ABtnPrimary: {\n variant: 'flat',\n color: 'primary',\n },\n ABtnSecondary: {\n variant: 'outlined',\n color: 'primary',\n },\n ABtnTertiary: {\n variant: 'text',\n color: 'primary',\n },\n ABtnIcon: {\n variant: 'text',\n icon: true,\n },\n }\n }\n\n const commonAliases = () => {\n return {\n ABtnPrimary: VBtn as any,\n ABtnSecondary: VBtn as any,\n ABtnTertiary: VBtn as any,\n ABtnIcon: VBtn as any,\n AChipNoLink: VChip as any,\n }\n }\n\n return {\n commonAliases,\n commonDefaults,\n commonTheme,\n }\n}\n","export async function loadCommonFonts() {\n const webfontloader = await import('webfontloader')\n\n webfontloader.load({\n google: {\n families: ['Roboto:100,300,400,500,700,900&display=swap'],\n },\n // urls: ['https://cdn.jsdelivr.net/npm/@mdi/font@5.x/css/materialdesignicons.min.css']\n })\n}\n","import type { JobBase, JobUserDataDelete } from '@/types/Job'\nimport { JobStatus } from '@/model/valueObject/JobStatus'\nimport { dateTimeNow } from '@/utils/datetime'\nimport type { JobBaseResource } from '@/model/valueObject/JobBaseResource'\n\nexport function useCommonJobFactory() {\n const createBase = (resourceName: JobBaseResource, system: string): JobBase => {\n return {\n id: 0,\n status: JobStatus.Default,\n result: '',\n batchProcessedIterationCount: 0,\n finishedAt: null,\n startedAt: null,\n lastBatchProcessedRecord: '',\n createdAt: dateTimeNow(),\n modifiedAt: dateTimeNow(),\n createdBy: null,\n modifiedBy: null,\n _resourceName: resourceName,\n _system: system,\n }\n }\n\n const createUserDataDelete = (system: string): JobUserDataDelete => {\n return {\n ...createBase('jobUserDataDelete', system),\n ...{\n targetUserId: null,\n anonymizeUser: false,\n },\n }\n }\n\n return {\n createBase,\n createUserDataDelete,\n }\n}\n","import { readonly, ref } from 'vue'\nimport type { RouteLocationNormalized } from 'vue-router'\nimport { isNull } from '@/utils/common'\n\nenum LoginState {\n Success = 'success',\n FailureSsoCommunicationFailed = 'failure-sso-communication',\n FailureInternalError = 'failure-internal-error',\n FailureUnauthorized = 'failure-unauthorized',\n}\n\nconst status = ref<string | null>(null)\n\nexport function useLoginStatus(to: RouteLocationNormalized) {\n if (to.query.loginState) {\n status.value = to.query.loginState.toString()\n }\n\n const isStatusNotDefined = () => isNull(status.value)\n const isStatusLoginSuccess = () => status.value === LoginState.Success\n const isStatusSsoCommunicationFailure = () => status.value === LoginState.FailureSsoCommunicationFailed\n const isStatusInternalErrorFailure = () => status.value === LoginState.FailureInternalError\n const isStatusUnauthorized = () => status.value === LoginState.FailureUnauthorized\n\n return {\n status: readonly(status),\n isStatusNotDefined,\n isStatusLoginSuccess,\n isStatusSsoCommunicationFailure,\n isStatusInternalErrorFailure,\n isStatusUnauthorized,\n }\n}\n"],"names":["props","__props","t","useI18n","booleanValue","computed","text","color","loadingComputed","isUndefined","value","isDefined","isNull","isNumber","isString","isArray","isFunction","isBoolean","isDocId","isInt","x","isObject","isEmptyObject","isEmptyArray","isEmpty","cloneDeep","object","isProxy","toRaw","isRef","unref","stringToInt","fallbackValue","check","stringToFloat","stringSplitOnFirstOccurrence","delimiter","index","stringToSlug","stringToKebabCase","stringTrimLength","maxLength","stringUrlTemplateReplace","template","params","newParts","part","key","stringUrlTemplateReplaceVueRouter","regex","match","stringNormalizeForSlotName","name","stringIsValidEmail","email","SystemScopeSymbol","SubjectScopeSymbol","CurrentUserSymbol","CustomAclResolverSymbol","AvailableLanguagesSymbol","DefaultLanguageSymbol","emit","__emit","system","inject","subject","onUpdate","newValue","onBlur","_a","errorMessageComputed","_b","item","labelComputed","path","requiredComputed","provide","modelValueComputed","lastPage","displayedFrom","displayedTo","disabledFirstAndPrev","disabledLast","disabledNext","computedTotalCountText","rowsPerPageComputed","watch","oldValue","pageComputed","onClickFirst","onClickLast","onClickPrev","onClickNext","isVisible","toggleVisibility","cloned","active","ref","defaultItems","defaultItemsMostRelevant","activeTitle","found","options","onItemClick","onCancel","computedData","o","e","i","R","it","n","ot","s","T","b","M","at","rt","k","st","lt","ct","E","ut","D","c","u","h","l","H","ft","dt","nt","pt","$","g","j","f","N","A","r","d","m","w","B","y","Y","G","q","K","Q","U","X","p","Z","v","tt","L","_","W","F","P","I","O","z","et","C","S","yt","mt","xt","REQUIRED_LOCALES","i18n","createI18n","locale","isAnzuFatalError","error","AnzuFatalError","cause","message","HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_NO_CONTENT","HTTP_STATUS_BAD_REQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_FORBIDDEN","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_VALID_ALL","axiosErrorResponseIsForbidden","axios","isAnzuApiForbiddenError","AnzuApiForbiddenError","ERROR_VALIDATION","axiosErrorResponseHasValidationData","_c","isAnzuApiValidationError","AnzuApiValidationError","resolveResponseData","axiosError","entity","data","items","values","__publicField","isAnzuApiResponseCodeError","AnzuApiResponseCodeError","code","ERROR_FORBIDDEN_OPERATION","axiosErrorResponseHasForbiddenOperationData","isAnzuApiForbiddenOperationError","AnzuApiForbiddenOperationError","DEFAULT_DURATION_SECONDS","NEW_LINE_MARK","useAlerts","showSuccess","duration","notify","showSuccessT","translation","showError","showErrorT","showInfo","showInfoT","showWarning","showWarningT","showValidationError","showRecordWas","variant","showApiValidationError","errors","fieldIsTranslated","te","texts","fieldText","errorsTexts","showApiForbiddenOperationError","detail","showUnknownError","showForbiddenError","buttonLoading","onOpen","onClose","router","useRouter","showErrorsDefault","onConfirm","res","config","onMounted","useFetch","module","this","a","dayjs","utc","SUFFIX","FORMAT","DATETIME_MIN","DATETIME_MAX","dateNow","dateTimeToDate","isoDate","timestampCurrent","dateTimeNow","ignoreFractionalSeconds","ignoreSeconds","dateTimeStartOfDay","days","dateTimeEndOfDay","dateModifyMinutes","minutes","date","dateToUtc","yearNow","dateTimePretty","edgeDateValue","dateTimeFriendly","displayYear","displayDayMonth","now","datePretty","timePretty","dateDiff","date1","date2","unit","date1dayjs","date2dayjs","createdAt","modifiedAt","makeFilterHelper","defaultValue","titleT","useFilterHelpers","clearOne","filter","clearAll","filterBag","filterName","clearAllErrors","pagination","callback","label","placeholderComputed","model","filterId","filterText","filterDocId","filterUrl","filterOverrides","toRefs","filterActive","clearIfActive","clearAllActiveExcept","exceptFilter","_d","_e","_f","_g","_h","_i","overrideFilter","currentFilter","setFilters","newModel","autodetectFilter","filterLabels","currentFilterModel","eventClickBlur","event","onClick","icon","resetFilter","advancedFilter","toggleAdvancedFilter","Grant","useGrant","grantOptions","selectedGrant","newGrant","getGrantOption","GrantOrigin","useGrantOrigin","grantOriginOptions","grantOption","getGrantOriginOption","grantOriginOption","objectDeepFreeze","obj","propNames","objectGetValues","objectGetValueByPath","splitChar","objectSetValueByPath","objectDeletePropertyByPath","pathParts","lastIndex","recurse","isOwnerAware","isCreatedByAware","ROLE_SUPER_ADMIN","useAcl","shouldInject","currentUser","customAclProvider","can","acl","permission","canOwner","acls","allowed","pretty","HOOKS","defaults","err","givenDate","week1","english","nth","pad","number","length","int","bool","debounce","fn","wait","_this","args","arrayify","toggleClass","elem","className","createElement","tag","content","clearNode","node","findParent","condition","createNumberInput","inputClassName","opts","wrapper","numInput","arrowUp","arrowDown","getEventTarget","doNothing","monthToStr","monthNumber","shorthand","revFormat","dateObj","monthName","hour","day","amPM","shortMonth","seconds","unixSeconds","weekNum","weekNumber","year","ISODate","month","unixMillSeconds","tokenRegex","formats","createDateFormatter","l10n","isMobile","frmt","overrideLocale","arr","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","format","datestr","matched","ops","matchIndex","regexStr","token","isBackSlash","escaped","val","compareDates","isBetween","ts","ts1","ts2","calculateSecondsSinceMidnight","hours","parseSeconds","secondsSinceMidnight","getDefaultHours","minHour","minMinutes","minSeconds","maxHr","maxMinutes","target","_loop_1","source","args_1","__assign","__spreadArrays","il","jl","DEBOUNCED_CHANGE_MS","FlatpickrInstance","element","instanceConfig","self","defaultOptions","flatpickr","English","bind","setHoursFromDate","positionCalendar","changeMonth","changeYear","clear","close","onMouseOver","createDay","destroy","isEnabled","jumpToDate","updateValue","open","redraw","set","setDate","toggle","setupHelperFunctions","yr","init","parseConfig","setupLocale","setupInputs","setupDates","build","bindEvents","setCalendarWidth","isSafari","triggerEvent","getClosestActiveElement","bindToInstance","daysWidth","updateTime","defaultDate","timeWrapper","prevValue","setHoursFromInputs","ampm2military","military2ampm","limitMinHours","limitMaxHours","minBound","maxBound","currentTime","result","maxTime","minTime","setHours","onYearInput","eventTarget","handler","ev","el","triggerChange","evt","setupMobile","debouncedResize","onResize","onKeyDown","documentClick","onMonthNavClick","selectDate","selText","timeIncrement","jumpDate","jumpTo","oldYear","oldMonth","buildMonthSwitch","incrementNumInput","delta","inputElem","input","createEvent","fragment","buildMonthNav","buildWeeks","weekWrapper","weekNumbers","buildWeekdays","buildDays","buildTime","customAppend","_dayNumber","dateIsEnabled","dayElement","isDateSelected","isDateInRange","focusOnDayElem","targetNode","getFirstAvailableDay","startMonth","endMonth","startIndex","endIndex","getNextAvailableDay","current","givenMonth","loopDelta","numMonthDays","focusOnDay","offset","activeElement","dayFocused","isInView","startElem","buildMonthDays","firstOfMonth","prevMonthDays","daysInMonth","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayNumber","dayIndex","dayNum","dayContainer","frag","shouldBuildMonth","buildMonth","container","monthNavFragment","monthElement","selectedMonth","yearInput","yearElement","currentMonth","buildMonths","updateNavigationCurrentMonth","separator","hourInput","minuteInput","secondInput","updateWeekdays","firstDayOfWeek","weekdays","isOffset","triggerChangeEvent","toInitial","isCalendarElem","eventTarget_1","isCalendarElement","isInput","lostFocus","isIgnored","newYear","newYearNum","isNewYear","dateToCheck","array","parsed","valueChanged","getDateStr","allowInput","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","delta_1","elems","cellClass","hoverDate","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","hoverableCells","dayElem","timestamp","outOfRange","positionElement","wasOpen","minMaxDateSetter","type","inverseDateObj","boolOpts","userConfig","dates","parseDateRules","timeMode","defaultDateFormat","defaultAltFormat","minMaxTimeSetter","hook","pluginConf","getInputElem","customPositionElement","calendarHeight","acc","child","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","showOnTop","top","left","isCenter","isRight","right","rightMost","centerMost","doc","getDocumentStyleSheet","bodyWidth","centerLeft","centerBefore","centerAfter","centerIndex","centerStyle","editableSheet","sheet","createStyleSheet","style","isSelectable","selectedDate","shouldChangeMonth","selectedIndex","single","range","CALLBACKS","updatePositionElement","option","setSelectedDate","inputDate","rule","preloadedDate","inputType","hooks","specificFormat","dObj","isPrevMonth","isNextMonth","isKeyDown","min","max","step","curValue","isHourElem","isMinuteElem","_flatpickr","nodeList","nodes","instances","selector","includedEvents","excludedEvents","camelToKebab","string","nullify","allEvents","configCallbacks","Component","defineComponent","safeConfig","globalCallbacks","localCallback","onCloseCb","nextTick","selectedDates","dateStr","newState","newConfig","global","factory","exports","fp","Slovak","sk","Czech","cs","useValidateRequiredIf","createI18nMessage","requiredIf","ALL_LANGUAGES","storedSettings","useStorage","modifyLanguageSettings","configAvailableLanguages","configDefaultLanguage","addMessages","language","messages","setLanguage","readonly","useLanguageSettings","shortcutButtonsPlugin","pluginsImported","flatickrRefIsInitialized","flatickrRef","textFieldRef","isOpened","textFieldValue","flatpickrValue","initialized","fixFormat","checkIfReallyEmitChange","onFlatpickrUpdate","onFlatpickrOpen","onTextFieldBlur","onFlatpickrClose","onFlatpickrChange","filtered","altFormat","v$","onClear","enableComputed","defaultValueComputed","pluginsComputed","languages","currentLanguageCode","flatpickrConfig","onCalendarClick","rules","useVuelidate","checkboxModel","onCheckboxClick","usePagination","sortBy","reactive","usePaginationAutoHide","modelValue","search","isFocused","autoFetchTimer","innerFilter","multipleComputedVuetifyTypeFix","fetchedItems","selectedItemsCache","allItems","final","loadingLocal","apiSearch","query","filterField","findLocalDataByValues","tryToLoadFromLocalData","count","foundItems","autoFetched","clearAutoFetchTimer","autoFetch","onFocus","singleItemSelectedTitle","onSearchUpdate","onClickClear","watchDebounced","loading","hasError","uniqueId","internalModelValue","success","returnValue","JobStatus","useJobStatus","jobStatusOptions","getJobStatusOption","commonConfig","COMMON_CONFIG","cached","shallowRef","loaded","containerClassComputed","displayTitle","LogLevel","useLogLevel","logLevelOptions","getLogLevelOption","levelOption","numberToString","copy","isSupported","useClipboard","customColorClass","routerToComputed","variantComputed","dialog","closeDialog","__expose","ThemeSettings","Theme","QUERY","settings","theme","systemHasDarkPreference","setTheme","setThemeSettings","toolbarColor","useTheme","setThemeAuto","setThemeDark","setThemeLight","toggleTheme","isOpen","_hoisted_1","_hoisted_6","_sfc_render","_ctx","_cache","_hoisted_2","_createElementVNode","_hoisted_3","currentFlagComponent","FlagSk","FlagEn","FlagEmpty","onLanguageChange","currentLocale","availableLocales","reloadAdmin","AnzuNewVersionFetchError","showSystemBar","checkNewVersion","contentType","json","systemBarComponent","ASystemBarNewVersion","pause","useIntervalFn","onBeforeUnmount","fontSize","firstNameLastName","swatches","generatedColor","generateRandomColor","randomRow","buttonColorComputed","onColorPickerChange","newColor","logoutDialog","fetch","add","addManualMinimal","fetchedItemsMinimal","tryToAddFromFetchedItems","ids","resolve","deleteWasPressedTime","onKeydownDelete","idsToFetch","DamAssetStatus","DamAssetType","damAssetTypeValueToEnum","makeFilter","useAssetListFilter","AssetSelectReturnType","assetSelectReturnTypeValuesToEnum","useAssetSelectStore","defineStore","assetListItems","loader","selectedLicenceId","selectConfig","assetType","AssetTypeValue","selectedAssets","singleMode","minCount","maxCount","showLoader","hideLoader","setSelectConfig","setSingleMode","setAssetType","setMinCount","setMaxCount","setList","appendList","assets","asset","toggleSelectedByIndex","isSelectedMax","unselectAllExcept","clearSelected","addToSelected","removeFromSelected","ignoreIndex","assetItem","assetId","getSelectedMainFileIds","fileIds","getSelectedAssetIds","getSelectedAssets","getSelectedData","selectedCount","reset","selectedSelectConfig","configItem","commonAdminCoreDamOptions","initCommonAdminCoreDamOptions","useCommonAdminCoreDamOptions","configName","useCommonAdminCoreDamOptionsGlobal","replaceUrlParameters","urlTemplate","urlParams","overrideUrlTemplate","isValidHTTPStatus","statusCode","apiFetchOne","client","reject","useApiQueryBuilder","querySetLimit","queryAdd","querySetOffset","page","limit","querySetOrder","field","desc","formatValue","queryAddFilter","filterVariant","getValue","isSearchApi","isApiResponseList","isApiInfiniteResponseList","generateListApiQuery","queryBuild","querySetFilters","apiFetchList","searchApi","resData","DamDistributionRequirementStrategy","DamDistributionServiceType","DamDistributionStatus","UserAuthType","END_POINT","PUB_END_POINT_PREFIX","PUB_END_POINT","ENTITY","fetchPubConfiguration","damClient","SYSTEM_CORE_DAM","fetchConfiguration","fetchExtSystemConfiguration","extSystem","fetchAssetCustomFormElements","fetchDistributionCustomFormElements","distributionService","damPubConfig","damPrvConfig","damConfigExtSystem","damConfigAssetCustomFormElements","damConfigDistributionCustomFormElements","useDamConfigState","onConfigError","loadDamPubConfig","setDamPubConfig","isDamPubConfigLoaded","loadDamPrvConfig","setDamPrvConfig","isDamPrvConfigLoaded","loadDamConfigExtSystem","extSystemId","setDamConfigExtSystem","getDamConfigExtSystem","loadDamConfigAssetCustomFormElements","promises","responses","setDamConfigAssetCustomFormElements","getDamConfigAssetCustomFormElements","loadDamConfigDistributionCustomFormElements","distributionServiceName","BULK_METADATA_LIMIT","FETCH_BY_IDS_MAX_LIMIT","fetchAssetList","licenceId","fetchAsset","id","fetchAssetByFileId","assetFileId","bulkUpdateAssetsMetadata","bulkItems","listItemsToMetadataBulkItems","updateMetadataSequence","bulkItemsRes","response","fetchAssetListByIdsSequence","totalCalls","reduced","fetchAssetListByIds","dtoItems","handleMetadataValidationError","configAssetCustomFormElements","updateAssetMetadata","filterIsTouched","useAssetSelectActions","assetSelectStore","storeToRefs","apiFetchAssetList","fetchNextPage","resetAssetList","filterTouch","filterUnTouch","initStoreContext","IMAGE_HEIGHT","IMAGE_BG_COLOR_DEFAULT","useAssetItemActions","assetStatus","imageProperties","tableImageProperties","imagePlaceholderPath","onError","srcComputed","placeholder16x9","showIconComputed","prettyBytes","bytes","decimals","dm","sizes","IMAGE_WIDTH","toRef","AssetSelectGridView","gridView","useGridView","setGridView","sidebarLeft","useSidebar","toggleSidebar","closeSidebar","openSidebar","onAnyFilterUpdate","submitFilter","componentComputed","AssetSelectFilterFormImage","AssetSelectFilterFormDefault","fetchDamCurrentUser","damCurrentUser","damCurrentUserIsSuperAdmin","updateDamCurrentUser","useDamCurrentUser","filterAllowedImageWidgetSelectConfigs","adminToExtSystems","extSystemValue","assetLicences","assetLicenceValue","isImageWidgetUploadConfigAllowed","dialogLocal","selectConfigLocal","autoloadOnIntersect","isIntersecting","AssetSelectListTable","AssetSelectListTiles","disabledSubmit","ownKeys","enumerableOnly","keys","symbols","sym","_objectSpread2","_defineProperty","_typeof","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","off","matches","getParentOrHost","closest","ctx","includeCTX","R_SPACE","state","css","prop","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","list","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","bottom","height","width","containerRect","elMatrix","scaleX","scaleY","getContentRect","rect","paddingLeft","paddingTop","paddingRight","paddingBottom","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","includeDragEl","currentChild","children","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","includeSelf","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","throttle","ms","cancelThrottle","scrollBy","clone","Polymer","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","translateX","translateY","repaint","plugins","PluginManager","plugin","eventName","sortable","eventNameGlobal","pluginName","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","touch","originalTarget","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","order","_generateId","useAnimation","store","willInsertAfter","onMoveFn","retVal","firstElRect","sortableContentRect","spacer","lastElRect","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","useSortable","document","defaultDocument","resetOptions","moveArrayElement","start","unrefElement","stop","tryOnMounted","tryOnScopeDispose","_valueIsRef","toValue","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","buf","clockseq","seedBytes","msecs","nsecs","tl","tmh","randomUUID","native","v4","rnds","generateUUIDv1","uuidv1","generateUUIDv4","uuidv4","HANDLE_CLASS","GHOST_CLASS","DRAG_CLASS","CHOSEN_CLASS","GROUP_CLASS","useSortableActions","initSortableCallback","removeDialog","itemToRemove","widgetEl","randomUuid","sortableInstance","forceRerender","dirtyLocal","transformItem","forceRerenderWidgetHtml","emitData","touchDirty","untouchDirty","updatePositions","updatedPositions","position","clonedData","returnData","findItemIndexById","updateDataCommon","dirty","updateData","foundIndex","updateDataAtIndex","addAfterIndex","targetIndex","addAfterId","targetId","removeById","removeByIndex","WIDGET_HTML_ID_PREFIX","onAddAfterClick","onDeleteClick","onEditClick","onAddLastClick","widgetHtmlId","initSortable","nestedSortable","needsRefresh","refresh","onRemoveDialogConfirm","NESTED_HANDLE_CLASS","NESTED_GHOST_CLASS","NESTED_DRAG_CLASS","NESTED_CHOSEN_CLASS","NESTED_GROUP_CLASS","SortableLevel","useSortableNestedActions","initSortablesCallback","sortableInstances","dragging","nestedData","updatePositionsSameParent","updatePositionsDifferentParent","itemsTarget","itemsSource","indexTarget","indexSource","calculateParentDepth","depth","parentItem","calculateChildDepth","childDepth","currentDepth","calculateNodeMaxDepth","parentDepth","findItemById","foundInChildren","currentId","maxDepth","itemToMove","itemToMoveParentItem","targetItem","childrenAllowed","insertData","targetItemParentItem","itemFound","onAddChildClick","level","showAddChildButtonComputed","widgetClass","initSortables","nestedSortables","parentId","addChildToId","paginationComputed","filterTouched","selectedItemsCount","onPageChange","hasNextPage","showAll","useCustomDataForm","CustomDataFormElementType","CustomDataFormElementTypeDefault","useCustomDataFormElementType","customDataFormElementTypeOptions","useValidateBetween","between","useValidateEmail","useValidateMaxLength","useValidateMaxValue","maxValue","useValidateMinLength","minLength","useValidateMinValue","minValue","useValidateNumeric","numeric","useValidateRequired","required","useValidateSlug","helpers","useValidateStringArrayItemLength","withI18nMessage","stringArrayItemLengthValidator","useValidateUrl","url","useValidate","fixValue","updateModelValue","stringArrayItemLength","dynamicRules","counter","toggleForm","updated","elementsPinned","elementsOther","showHideButtonText","showHideButtonIcon","enableShowHide","isDraggingFile","draggingTimer","useDropzoneGlobalDragState","dragoverHandler","checkReallyDraggingEnded","dragleaveHandler","dropHandler","dragEventContainsFiles","damFileTypeFix","file","useFormatAndSizeCheck","accept","maxSizes","acceptKeys","maxSizeKeys","checkFormatsAndSizes","files","disableAlert","incorrectFileNames","validFiles","isFileValid","checkFormats","checkSizes","accepts","splitType","dropZoneRef","onDrop","isOverDropZone","useDropZone","imageOptions","initCommonAdminImageOptions","useCommonAdminImageOptions","useImageActions","image","random","useDamAcceptTypeAndSizeHelper","createSizesByAssetType","uploadSizes","uploadAccept","UploadQueueItemType","UploadQueueItemStatus","AssetFileProcessStatus","AssetFileFailReason","AssetFileLinkType","assetFileIsImageFile","assetFileIsVideoFile","assetFileIsAudioFile","assetFileIsDocumentFile","useUploadQueueItemFactory","status","chunkSize","getAssetTypeByMimeType","mimeType","useDamUploadChunkSize","apiTimeout","lastChunkSize","minUploadTimeThreshold","idealUploadTimeThreshold","maxUploadTimeThreshold","updateChunkSize","expectedChunkUploadSpeed","returnFromRange","CHUNK_UPLOAD_TIMEOUT","imageUploadStart","imageUploadChunk","imageId","buffer","size","onUploadProgressCallback","formData","imageUploadFinish","sha","rotateImage","angle","NOTIFICATION_FALLBACK_TIMER_CHECK_SECONDS","NOTIFICATION_FALLBACK_MAX_TRIES","damUploadStart","damUploadChunk","damUploadFinish","uploadStatusFallback","notificationFallbackCallback","calculateFallbackTime","uploadQueuesStore","useUploadQueuesStore","modules","installedModules","__webpack_require__","moduleId","getter","property","_classCallCheck","instance","Constructor","RushaCore","_require","toHex","ceilHeapSize","conv","padlen","len","padZeroes","bin","h8","om","align","padData","chunkLen","msgLen","getRawDigest","heap","padMaxChunkLen","io","out","Rusha","padMsgLen","padChunkLen","view","chunkOffset","finalize","chunk","turnOffset","inputLen","precomputedHex","arrayBuffer","binarray","isRunningInWorker","isRunningInSharedWorker","isRunningInServiceWorker","hashData","hasher","cb","hashFile","readTotal","blockSize","reader","workerBehaviourEnabled","done","hash","work","createHash","runWorker","isDedicatedWorkerScope","isRunningInDedicatedWorker","worker","terminate","webpackBootstrapFunc","moduleNameReqExp","dependencyRegExp","quoteRegExp","getModuleDependencies","sources","queueName","retval","fnString","wrapperSignature","webpackRequireName","re","hasValuesInQueues","queues","hasValues","getRequiredModules","modulesQueue","requiredModules","seenModules","queue","moduleToCheck","newModules","newModulesKeys","entryModule","blob","URL","workerUrl","stdlib$840","foreign$841","heap$842","H$843","hash$844","k$845","x$846","i$847","j$848","y0$849","z0$850","y1$851","z1$852","y2$853","z2$854","y3$855","z3$856","y4$857","z4$858","t0$859","t1$860","convStr","H8","H32","lm","convBuf","convBlob","_createClass","defineProperties","descriptor","protoProps","staticProps","Hash","encoding","digest","CHUNK_MAX_RETRY","SPEED_CHECK_INTERVAL","CHUNK_RETRY_INTERVAL","CHUNK_RETRY_MULTIPLY","failUpload","queueItem","finishUpload","handleValidationErrorMessage","errorMessages","readFile","partial","sleep","useUpload","uploadCallback","fileSize","progress","speedStack","lastTimestamp","endTimestamp","lastLoaded","rusha","getCurrentTimestamp","progressCallback","progressEvent","currentStamp","dataSent","uploadChunk","chunkFile","exception","processAndUploadChunk","cancelToken","sleepTime","attempt","speedCheck","speedCheckRun","avgSpeed","remainingBytes","filesize","uploadedChunk","uploadStop","cancelTokenSource","damNotificationsEventBusKey","useDamNotificationsEventBus","useEventBus","DamNotificationName","damNotificationsInitialized","initDamNotifications","notification","enabled","ws","useWebSocket","eventBus","useDamNotifications","useAssetSuggestions","suggestions","newNames","conflicts","defineCached","mapFullToMinimal","mapIdToMinimal","fetchCallback","idProp","cache","toFetch","toAdd","arg","addManual","updateMap","updateToFetch","apiFetch","debouncedFetch","useDebounceFn","generateByIdsApiQuery","apiFetchByIds","apiCreateOne","END_POINT_LIST","fetchKeywordListByIds","fetchKeywordList","createKeyword","cachedExtSystemId","useExtSystemIdForCached","keyword","has","get","isLoaded","useDamCachedKeywords","fetchAuthorListByIds","fetchAuthorList","createAuthor","author","useDamCachedAuthors","useDamCachedAuthorsForRemoteAutocomplete","QUEUE_MAX_PARALLEL_UPLOADS","QUEUE_CHUNK_SIZE","addToCachedKeywords","fetchCachedKeywords","addToCachedAuthors","fetchCachedAuthors","createDefault","addDamNotificationListener","queueItemProcessed","queueItemFailed","queueItemDuplicate","queueItemMetadataProcessed","getQueue","queueKey","getQueueItems","addByFiles","assetLicence","configExtSystem","createQueue","addQueueItem","recalculateQueueCounts","processUpload","getQueueItemsByStatus","waitingItems","queueItemUploadStart","upload","uploadInit","estimate","setUploadSpeed","originAssetFile","updateNewNames","getAuthorConflicts","assetRes","failReason","stopItemUpload","updateFromDetail","getQueueTotalCount","getQueueProcessedCount","stopUpload","currentItems","clearQueue","forceReloadFileInput","getQueueFileInputKey","getQueueItemsTypes","types","BLOCK_DOUBLE_CLICK_MS","inputRef","fileInputKeyLocal","blockDoubleClick","clickInput","validateData","checked","onDropzoneDrop","onInputFileChange","payload","onFileDropzoneClick","ImageWidgetExtSystemConfigs","apiUpdateOne","apiDeleteOne","SYSTEM_CMS","fetchImageListByIds","fetchImage","createImage","updateImage","deleteImage","bulkUpdateImages","updateImagesSequence","images","reqData","imageClient","widgetImageToDamImageUrl","resImage","resolvedSrc","newImage","newImageId","useImageStore","imageDetail","maxPosition","setImageDetail","setImages","addImages","updateMaxPositionIfGreater","newPosition","removeImageByIndex","ADamAssetMetadataValidationScopeSymbol","AImageMetadataValidationScopeSymbol","ADamKeywordCreateValidationScopeSymbol","ADamAuthorCreateValidationScopeSymbol","useImageValidation","validationScope","imageStore","onDialogModelUpdate","onEditAsset","AssetDetailTabImageWithRoi","useAssetDetailStore","authorConflicts","metadataAreTouched","activeTab","updateUploadStore","setAsset","MINUTE_IN_SECONDS","HOUR_IN_SECONDS","DAY_IN_SECONDS","useRemainingTime","remainingTime","short","prefix","svg2k","svg4k","svg8k","svgqhd","svgfhd","svgslot","svglow","svgrss","DIMENSIONS_CONFIG","ICON_SLOTS","ICON_RSS","ICON_LOW","LOW_DIMENSION","checkDimensions","icons","titles","checkDistributions","iconPath","onLoad","uploadingPercentage","backgroundColorComputed","iconColor","remainingTimeShort","useAssetFileFailReason","assetFileFailReasonOptions","getAssetFileFailReasonOption","reasonOption","CLASS_PREFIX","mountedDivClasses","useAssetDetailSidebarActionbar","uploadKey","mounted","unMounted","canTeleport","divClassName","elements","pinnedCount","getCachedAuthor","displayNewIcon","clickClose","useAuthorSelectActions","mapToMinimal","mapToValueObject","mapToValueObjects","authors","mapToMinimals","useAuthorFilter","DamAuthorType","useDamAuthorType","authorTypeOptions","useAuthorValidation","useDamAuthorFactory","reviewed","fetchItemsMinimal","addAuthor","addNewAuthorText","searchChange","addManualToCachedAuthors","afterCreate","itemSlotIsSelected","useKeywordSelectActions","keywords","useKeywordFilter","getCachedKeyword","useDamKeywordFactory","useKeywordValidation","addNewKeywordText","addManualToCachedKeywords","useDamKeywordAssetTypeConfig","keywordEnabled","keywordRequired","useDamAuthorAssetTypeConfig","authorEnabled","authorRequired","panels","assetDetailStore","isTypeImage","assetMainFile","onAnyMetadataChange","uploadQueueStore","saveButtonLoading","onSave","useImageRoiStore","roi","rotate","END_POINT_IMAGE_ROI","fetchRoi","updateRoi","fetchImageRoiList","imageRoiStore","loadRois","afterRotate","PRECISION","regionToCrop","cropper","regionOfInterest","originalImageWidth","originalImageHeight","imageData","ratio","cropToRegion","pointX","pointY","percentageWidth","validateWidth","percentageHeight","validateHeight","_defineProperties","_toPropertyKey","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","arr2","_toPrimitive","hint","prim","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","TEMPLATE","isNaN","isPositiveNumber","hasOwnProperty","isPlainObject","_constructor","prototype","slice","toArray","forEach","assign","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","styles","hasClass","addClass","removeClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","setData","removeData","REGEXP_SPACES","onceSupported","supported","once","listener","removeListener","listeners","addListener","_handler","_element$listeners","_len2","_key2","getOffset","box","location","REGEXP_ORIGINS","isCrossOriginURL","parts","addTimestamp","getTransforms","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","y1","x2","y2","z1","z2","getPointer","endOnly","pageX","pageY","end","getPointersCenter","startX","startY","getAdjustedSizes","aspectRatio","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","sinArc","cosArc","newWidth","newHeight","getSourceCanvas","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","naturalWidth","naturalHeight","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","context","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","param","fromCharCode","getStringFromCharCode","dataView","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","uint8","arrayBufferToDataURL","chunks","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","render","containerData","viewMode","rotated","canvasWidth","canvasHeight","canvasData","sizeLimited","positionLimited","cropBoxData","cropped","minCanvasWidth","minCanvasHeight","_getAdjustedSizes","newCanvasLeft","newCanvasTop","transformed","_getRotatedSizes","autoCropArea","limited","minCropBoxWidth","minCropBoxHeight","maxCropBoxWidth","maxCropBoxHeight","preview","crossOrigin","alt","previews","img","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","events","handlers","ratioX","ratioY","buttons","button","action","change","minLeft","minTop","renderable","side","methods","hasSameSize","offsetX","offsetY","_this$canvasData","_originalEvent","pivot","center","_scaleX","_scaleY","rounded","widthChanged","heightChanged","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","sourceWidth","sourceHeight","srcX","srcY","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","scale","mode","dragBox","face","croppable","movable","AnotherCropper","Cropper","xhr","_parseOrientation","crossOriginUrl","_this2","isIOSWebKit","sizingImage","body","cropBox","parentNode","cropperInstance","imgEl","enable","disable","containerStyle","imgStyle","propsOptions","onUnmounted","DAM_IMAGE_ASPECT_RATIO","cropperContainerStyle","imageUrl","enableCropper","disableCropper","applyRegionOfInterest","saveRoi","cropperReady","cropperEnd","showCropper","sidebar","onImageLoad","isTypeVideo","isTypeAudio","isTypeDocument","toolbarTitle","uploadQueueDialog","uploadQueueSidebar","useUploadQueueDialog","onSaveAndApply","IMAGE_ASPECT_RATIO","assetDetail","enableRoiTab","isDone","processing","waiting","showDone","uploading","uploadProgress","onStopConfirm","queueTotalCount","queueProcessedCount","isUploading","description","assetsMetadataRes","fetchDamAssetLicence","imageWidgetExtSystemConfigs","imageWidgetExtSystemConfig","clickMenuOpened","assetSelectDialog","metadataDialog","metadataDialogSaving","metadataDialogLoading","withoutImage","uploadQueue","enabledInteractionComputed","imageLoaded","actionEditMeta","actionLibrary","onFileInput","reload","force","onAssetSelectConfirm","forceReloadViewWithExpandMetadata","assetLoading","assetDialog","licence","onMetadataDialogClose","onMetadataDialogConfirm","onImageDelete","onAssetUploadConfirm","expandedUploadButton","onDropzoneClick","detailDialogMetadataComponent","innerComponent","removeItem","customData","imageSrc","cancelItem","showCancel","showDetail","fillEmptyField","elementProperty","replaceField","useUploadQueueMassOperations","forceReplace","massOperationsData","massOperationsKeywords","massOperationsAuthors","replaceEmptyCustomDataValue","replaceEmptyAuthors","replaceEmptyKeywords","fillEmptyKeywords","replaceKeywords","fillEmptyAuthors","replaceAuthors","fillAll","clearForm","assetTypes","toggleUploadQueueSidebar","isFinished","saveAndCloseButtonLoading","itemsRaw","metadataMap","queueItems","assetMetadataMap","authorIdsToFetch","authorsMap","bulkItem","assetMeta","authorId","authorNames","mapped","uploadButtonComponent","imagesLoading","fetchImagesOnLoad","imagesRes","imageRes","assetSelectConfirmMap","saveImages","resItems","resItem","updateAllPositions","pos","moveImagePositions","resImages","newImages","newImageIds","DATETIME_AUTO_LABEL_TRACKING","defaultColumn","createDatatableColumnsConfig","columnsHidden","disableActions","customPagination","customI18n","localI18n","columnsAll","columnsVisible","columns","column","useSubjectSelect","datatableConfig","datatableHiddenColumns","selected","updateSortBy","resetState","getList","sortByChange","onFetchNextPage","firstTd","generateDatatableMinMaxSelectStrategy","booleanToInteger","useAnzuUserFactory","resourceName","_system","_resourceName","usePermissionConfigFactory","usePermissionGroupFactory","apiAnyRequest","method","axiosConfig","generateListApiQueryWithoutPagination","rowsPerPage","orderField","orderDesc","apiFetchListBatch","sortDesc","batchSize","forceElastic","urlPart","results","nextPageData","numPages","pageResponse","useErrors","useJobApi","JOB_RESOURCE_USER_DATA_DELETE","useJobBaseResource","customJobs","jobResourceOptions","AnzuSystemsCommonAdmin","app","Acl","Notification","arrayItemToggle","arrayToString","arrayFromArgs","arrayFlatten","arraysHaveSameElements","array1","array2","sortedArray1","sortedArray2","browserHistoryReplaceUrlByString","browserHistoryReplaceUrlByRouter","resolved","alert","anzuUser","job","log","permissionGroup","assetSelect","subjectSelect","damImage","vuetify","apiValidation","apiForbiddenOperation","jsValidation","en","useCommonVuetifyConfig","VBtn","VChip","loadCommonFonts","useCommonJobFactory","createBase","useLoginStatus","isStatusNotDefined","isStatusLoginSuccess","isStatusSsoCommunicationFailure","isStatusInternalErrorFailure","isStatusUnauthorized"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,UAAMA,IAAQC,GAYR,EAAE,GAAAC,MAAMC,MAERC,IAAeC,EAAS,MACrBL,EAAM,UAAU,MAAQA,EAAM,UAAU,KAAKA,EAAM,UAAU,MACrE,GAEKM,IAAOD,EAAS,MAChBD,EAAa,QACRF,EAAE,2BAA2B,IAE/BA,EAAE,4BAA4B,CACtC,GAEKK,IAAQF,EAAS,MACjBL,EAAM,cACDI,EAAa,QAAQ,UAAU,YAEjCA,EAAa,QAAQ,YAAY,OACzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BD,UAAMJ,IAAQC,GAWRO,IAAkBH,EAAS,MACxBL,EAAM,UAAU,YAAY,EACpC;;;;;;;;;;;;;ICdYS,IAAc,CAACC,MACnB,OAAOA,IAAU,KAGbC,KAAY,CAAID,MACpB,CAACD,EAAYC,CAAK,GAGdE,KAAS,CAACF,MACdA,MAAU,MAGNG,KAAW,CAACH,MAChB,OAAOA,KAAU,UAGbI,KAAW,CAACJ,MAChB,OAAOA,KAAU,UAObK,KAAU,CAAcL,MAC5B,MAAM,QAAQA,CAAK,GAGfM,KAAa,CAAoCN,MACrD,OAAOA,KAAU,YAGbO,KAAY,CAACP,MACjB,OAAOA,KAAU,WAGbQ,KAAU,CAACR,MACfI,GAASJ,CAAK,KAAK,gFAAgF,KAAKA,CAAK,GAGzGS,KAAQ,CAACT,MAAgC;AAC9C,QAAAU,IAAI,WAAWV,CAAK;AAE1B,SAAO,CAAC,MAAMA,CAAK,MAAMU,IAAI,OAAOA;AACtC,GAEaC,KAAW,CAACX,MAChB,OAAOA,KAAU,YAAY,CAACK,GAAQL,CAAK,KAAK,CAACE,GAAOF,CAAK,GAGzDY,KAAgB,CAAIZ,MAC3BW,GAASX,CAAK,IACT,OAAO,KAAKA,CAAK,EAAE,WAAW,IAEhC,IAGIa,KAAe,CAACb,MACpBK,GAAQL,CAAK,KAAKA,EAAM,WAAW,GAG/Bc,KAAU,CAACd,MAEpBE,GAAOF,CAAK,KAAKD,EAAYC,CAAK,KAAKA,MAAU,MAAMA,MAAU,KAAKa,GAAab,CAAK,KAAKY,GAAcZ,CAAK,GAOvGe,KAAY,CAAIC,MAAc;AACrC,MAAA,OAAO,mBAAoB;AACzB,QAAA;AACE,aAAAC,GAAQD,CAAM,IACT,gBAAgBE,GAAMF,CAAM,CAAC,IAElCG,GAAMH,CAAM,IACP,gBAAgBI,EAAMJ,CAAM,CAAC,IAE/B,gBAAgBA,CAAM;AAAA,YACf;AACd,aAAO,KAAK,MAAM,KAAK,UAAUA,CAAM,CAAC;AAAA,IAC1C;AAEF,SAAO,KAAK,MAAM,KAAK,UAAUA,CAAM,CAAC;AAC1C,GCrFaK,KAAc,CAACrB,GAAYsB,IAAgB,MAAc;AACpE,MAAIC,IAAQD;AACR,MAAA;AACM,IAAAC,IAAA,OAAO,SAASvB,GAAO,EAAE;AAAA,EAAA,QAC3B;AACC,WAAAsB;AAAA,EACT;AAEI,SAAA,OAAO,MAAMC,CAAK,IACbD,IAGFC;AACT,GAEaC,KAAgB,CAACxB,GAAYsB,IAAgB,MAAc;AACtE,MAAIC,IAAQD;AACR,MAAA;AACM,IAAAC,IAAA,OAAO,WAAWvB,CAAK;AAAA,EAAA,QACzB;AACC,WAAAsB;AAAA,EACT;AAEI,SAAA,OAAO,MAAMC,CAAK,IACbD,IAGFC;AACT,GAEaE,KAA+B,CAACzB,GAAe0B,IAAY,OAAO;AACvE,QAAAC,IAAQ3B,EAAM,QAAQ0B,CAAS;AAE9B,SAAA;AAAA,IACL,OAAO1B,EAAM,MAAM,GAAG2B,CAAK;AAAA,IAC3B,KAAK3B,EAAM,MAAM2B,IAAQD,EAAU,MAAM;AAAA,EAAA;AAE7C,GAEaE,KAAe,CAAC5B,MACpBA,EACJ,SAAS,EACT,YAAY,EACZ,KACA,EAAA,UAAU,KAAK,EACf,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,QAAQ,GAAG,EACnB,QAAQ,MAAM,GAAG,EACjB,QAAQ,YAAY,EAAE,EACtB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,OAAO,EAAE,EACjB,QAAQ,OAAO,EAAE,GAOT6B,KAAoB,CAAmB7B,MAClDA,EAAM,QAAQ,gCAAgC,OAAO,EAAE,YAAY,GAExD8B,KAAmB,CAAC9B,GAAe+B,IAAY,OACtD/B,EAAM,SAAS+B,IACV/B,EAAM,UAAU,GAAG+B,CAAS,IAAI,QAGlC/B,GASIgC,KAA2B,CAACC,GAAkBC,MAAsB;AAC3E,MAAAD,EAAS,QAAQ,GAAG,MAAM;AAAW,WAAAA;AACzC,QAAME,IAAqB,CAAA;AAErB,SADQF,EAAS,MAAM,GAAG,EAC1B,QAAQ,CAACG,GAAMT,MAAU;AAEzB,QADJQ,EAASR,CAAK,IAAIS,GACd,CAACA,EAAK,WAAW,GAAG;AAAG;AACrB,UAAAC,IAAMD,EAAK,UAAU,CAAC;AAC5B,IAAKrC,EAAYmC,EAAOG,CAAG,CAAC,MAAGF,EAASR,CAAK,IAAIO,EAAOE,EAAK,UAAU,CAAC,CAAC,IAAI;AAAA,EAAA,CAC9E,GACMD,EAAS,KAAK,GAAG;AAC1B,GAQaG,KAAoC,CAACL,GAAkBC,MAAsB;AACpF,MAAAD,EAAS,QAAQ,GAAG,MAAM;AAAW,WAAAA;AACzC,QAAME,IAAqB,CAAA;AAErB,SADQF,EAAS,MAAM,GAAG,EAC1B,QAAQ,CAACG,GAAcT,MAAkB;AAEzC,QADJQ,EAASR,CAAK,IAAIS,GACd,CAACA,EAAK,WAAW,GAAG;AAAG;AAC3B,IAAAD,EAASR,CAAK,IAAIS,EAAK,UAAU,CAAC;AAClC,UAAMG,IAAQ,wBACRC,IAAQJ,EAAK,MAAMG,CAAK;AAC9B,IAAIrC,GAAOsC,CAAK,KAAK,CAACA,EAAM,CAAC,KACxBzC,EAAYmC,EAAOM,EAAM,CAAC,CAAC,CAAC,MAAGL,EAASR,CAAK,IAAIO,EAAOM,EAAM,CAAC,CAAC,IAAI;AAAA,EAAA,CAC1E,GACML,EAAS,KAAK,GAAG;AAC1B,GAKaM,KAA6B,CAACC,MAAiBA,EAAK,QAAQ,KAAK,GAAG,GAEpEC,KAAqB,CAACC,MACd,mDACD,KAAKA,CAAK,GCpHjBC,KAAsD,OAAO,IAAI,kBAAkB,GACnFC,KAAuD,OAAO,IAAI,mBAAmB,GACrFC,KAA+D,OAAO,IAAI,kBAAkB,GAC5FC,KAAuE,OAAO,IAAI,wBAAwB,GAC1GC,KAAqE,OAAO,IAAI,yBAAyB,GACzGC,KAAgE,OAAO,IAAI,sBAAsB;;;;;;;;;;;;;;;;;;;;;ACA9G,UAAM5D,IAAQC,GA6BR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEU,IAAW,CAACC,MAAqB;AACrC,MAAAN,EAAK,qBAAqBM,CAAQ;AAAA,IAAA,GAE9BC,IAAS,MAAM;;AACd,MAAAP,EAAA,QAAQ7D,EAAM,UAAU,IAC7BqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAe,CAACvE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,IAC3B,IAAAqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS,cAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,cADnBvE,EAAM;AAAA,IAExC,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjED,UAAMA,IAAQC,GA0BR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEU,IAAW,CAACC,MAAqB;AACrC,MAAAN,EAAK,qBAAqBM,CAAQ;AAAA,IAAA,GAE9BC,IAAS,MAAM;;AACd,MAAAP,EAAA,QAAQ7D,EAAM,UAAU,IAC7BqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAe,CAACvE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,IAC3B,IAAAqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS,cAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,cADnBvE,EAAM;AAAA,IAExC,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnED,UAAMA,IAAQC;AAQE,WAAA2E,GAAArB,IAAmBvD,EAAM,MAAM,GAE/B4E,GAAApB,IAAoBxD,EAAM,OAAO;;;;;;;;;;;;;;ACRjD,UAAMA,IAAQC,GAWR4D,IAAOC,GAKPe,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAsB;AACnB,QAAAN,EAAA,qBAAqBpC,GAAU0C,CAAQ,CAAC;AAAA,MAC/C;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAER2E,IAAWzE,EAAS,MACjB,KAAK,KAAKwE,EAAmB,MAAM,aAAaA,EAAmB,MAAM,WAAW,CAC5F,GAEKE,IAAgB1E,EAAS,MACtBwE,EAAmB,MAAM,OAAOA,EAAmB,MAAM,cAAcA,EAAmB,MAAM,cAAc,CACtH,GAEKG,IAAc3E,EAAS,MAEzBwE,EAAmB,MAAM,OAAOA,EAAmB,MAAM,cACzDA,EAAmB,MAAM,cACzBA,EAAmB,MAAM,gBAE5B,GAEKI,IAAuB5E,EAAS,MAC7BwE,EAAmB,MAAM,SAAS,CAC1C,GAEKK,IAAe7E,EAAS,MACrB,CAACO,GAAOiE,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAASC,EAAS,KACpG,GAEKK,IAAe9E,EAAS,MAEzBO,GAAOiE,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAASC,EAAS,SAC5FD,EAAmB,MAAM,gBAAgB,EAE5C,GAEKO,IAAyB/E,EAAS,MACjCO,GAAOiE,EAAmB,MAAM,WAAW,IAGzCA,EAAmB,MAAM,aAFvBA,EAAmB,MAAM,cAAcG,EAAY,QAAQ,IAAI,MAAMA,EAAY,KAG3F,GAEKK,IAAsBhF,EAAS,MAC5BwE,EAAmB,MAAM,WACjC;AACK,IAAAS,GAAAD,GAAqB,CAAClB,GAAUoB,MAAa;AACjD,MAAIpB,MAAaoB,MACfV,EAAmB,MAAM,OAAO,GAChChB,EAAK,QAAQ;AAAA,IACf,CACD;AACK,UAAA2B,IAAenF,EAAS,MACrBwE,EAAmB,MAAM,IACjC;AACK,IAAAS,GAAAE,GAAc,CAACrB,GAAUoB,MAAa;AAC1C,MAAIpB,MAAaoB,KACf1B,EAAK,QAAQ;AAAA,IACf,CACD;AAED,UAAM4B,IAAe,MAAM;AACzB,MAAAZ,EAAmB,MAAM,OAAO;AAAA,IAAA,GAG5Ba,IAAc,MAAM;AACL,MAAAb,EAAA,MAAM,OAAOC,EAAS;AAAA,IAAA,GAGrCa,IAAc,MAAM;AACxB,MAAAd,EAAmB,MAAM,OAAOA,EAAmB,MAAM,OAAO;AAAA,IAAA,GAG5De,IAAc,MAAM;AACxB,MAAAf,EAAmB,MAAM,OAAOA,EAAmB,MAAM,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjGlE,UAAM7E,IAAQC,GAcR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAER0F,IAAY,CAAC9C,MACV,CAAC/C,EAAM,cAAc,SAAS+C,CAAG,GAGpC+C,IAAmB,CAAC/C,MAAgB;AAClC,YAAAgD,IAAStE,GAAUzB,EAAM,aAAa,GACtCqC,IAAQ0D,EAAO,QAAQhD,CAAG;AAChC,UAAIV,IAAQ,IAAI;AACP,QAAA0D,EAAA,OAAO1D,GAAO,CAAC,GACtBwB,EAAK,wBAAwBkC,CAAM;AACnC;AAAA,MACF;AACA,MAAAA,EAAO,KAAKhD,CAAG,GACfc,EAAK,wBAAwBkC,CAAM;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCrC,UAAM/F,IAAQC,GAYR4D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAGR6F,IAASC,EAAIjG,EAAM,UAAU,GAE7B6E,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAkB;AACpB,QAAA6B,EAAO,QAAQ7B,GACfN,EAAK,qBAAqBM,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEK+B,IAAyC;AAAA,MAC7C,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,aAAa,OAAO,SAAS;AAAA,MAC5G,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,aAAa,OAAO,QAAQ;AAAA,IAAA,GAGnGC,IAAqD;AAAA,MACzD,EAAE,IAAI,GAAG,QAAQ,gDAAgD;AAAA,MACjE,EAAE,IAAI,GAAG,QAAQ,+CAA+C,QAAQ,EAAE,KAAK,aAAa,OAAO,SAAS;AAAA,MAC5G,EAAE,IAAI,GAAG,QAAQ,2CAA2C,QAAQ,EAAE,KAAK,aAAa,OAAO,QAAQ;AAAA,IAAA,GAGnGC,IAAc/F,EAAS,MAAM;AAC3B,YAAAgG,IAAQC,EAAQ,MAAM,KAAK,CAAC9B,MAAcA,EAAK,OAAOwB,EAAO,KAAK;AACpE,aAAAK,IAAcnG,EAAEmG,EAAM,MAAM,IACzB;AAAA,IAAA,CACR,GAEKC,IAAUjG,EAAS,MACnBL,EAAM,gBAAsBA,EAAM,gBAClCA,EAAM,YAAY,kBAAwBmG,IACvCD,CACR,GAEKK,IAAc,CAAC/B,MAAkC;AACrD,MAAAK,EAAmB,QAAQL,EAAK;AAAA,IAAA;AAGlC,WAAAc;AAAA,MACEU;AAAA,MACA,CAAC7B,GAAUoB,MAAa;AAClB,YAAA9E,EAAY8E,CAAQ,KAAKpB,MAAaoB;AAAU;AAC9C,cAAAc,IAAQC,EAAQ,MAAM,KAAK,CAAC9B,MAAcA,EAAK,OAAOL,CAAQ;AAChE,QAAAkC,KAAOxC,EAAK,gBAAgBwC,CAAK;AAAA,MACvC;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBf;AAAA,MACET;AAAA,MACA,CAACV,GAAUoB,MAAa;AAClB,QAAA9E,EAAY8E,CAAQ,KAAKpB,MAAaoB,MAC1CS,EAAO,QAAQ7B;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChFpB,UAAMN,IAAOC,GAIP0C,IAAW,MAAM;AACrB,MAAA3C,EAAK,UAAU;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHjB,UAAM7D,IAAQC,GAORwG,IAAepG,EAAS,MACrBL,EAAM,IACd;AAED,WAAAsF;AAAA,MACEmB;AAAA,MACA,CAACtC,MAAa;AACZ,gBAAQ,IAAIA,CAAQ;AAAA,MACtB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;CCnBnB,WAAU;AAAC,MAAIuC;AAAe,MAAG;AAAC,QAAG,OAAO,WAAS,KAAI;AAAC,UAAIC,IAAE,SAAS,cAAc,OAAO;AAAE,MAAAA,EAAE,SAAOD,IAAE,SAAS,KAAK,cAAc,0BAA0B,MAAI,OAAK,SAAOA,EAAE,SAAQC,EAAE,YAAY,SAAS,eAAe,0xBAA0xB,CAAC,GAAE,SAAS,KAAK,YAAYA,CAAC;AAAA,IAAC;AAAA,EAAC,SAAOC,GAAE;AAAC,YAAQ,MAAM,kCAAiCA,CAAC;AAAA,EAAC;AAAC;AAExlC,MAAMC,KAAoB,oBAAI;AAC9B,MAAMC,GAAG;AAAA,EACP,YAAYC,GAAGL,GAAG,GAAG;AACnB,SAAK,YAAYA,GAAG,KAAK,WAAWK,GAAG,KAAK,aAAa,GAAG,KAAK,OAAM;AAAA,EACxE;AAAA,EACD,QAAQ;AACN,iBAAa,KAAK,WAAW,KAAK,GAAG,KAAK,aAAa,KAAK,QAAQ,KAAK;AAAA,EAC1E;AAAA,EACD,SAAS;AACP,SAAK,QAAQ,KAAK,IAAK,GAAE,aAAa,KAAK,WAAW,KAAK,GAAG,KAAK,WAAW,QAAQ,WAAW,KAAK,UAAU,KAAK,SAAS;AAAA,EAC/H;AACH;AACA,SAASC,GAAG,GAAG;AACb,SAAO,EAAE,KAAK,IAAI,KAAqB,oBAAI,IAAG,GAAI,IAAI,SAASD,GAAGL,GAAG;AACnE,QAAI,IAAI,EAAE,IAAIK,CAAC;AACf,QAAI,EAAE,KAAKL,CAAC,IAAI,EAAE,IAAIK,GAAG,CAACL,CAAC,CAAC;AAAA,EAChC,GAAK,KAAK,SAASK,GAAGL,GAAG;AACrB,QAAI,IAAI,EAAE,IAAIK,CAAC;AACf,UAAML,IAAI,EAAE,OAAO,EAAE,QAAQA,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAIK,GAAG,CAAE,CAAA;AAAA,EAC3D,GAAK,MAAM,SAASA,GAAGL,GAAG;AACtB,QAAI,IAAI,EAAE,IAAIK,CAAC;AACf,SAAK,EAAE,MAAO,EAAC,IAAI,SAASE,GAAG;AAC7B,MAAAA,EAAEP,CAAC;AAAA,IACJ,CAAA,IAAI,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,MAAK,EAAG,IAAI,SAASO,GAAG;AAChD,MAAAA,EAAEF,GAAGL,CAAC;AAAA,IACZ,CAAK;AAAA,EACL;AACA;AACA,MAAMQ,KAAIF,GAAI,GAAEG,KAAI,uBAAuBC,KAAI;AAAA,EAC7C;AAAA,IACE,MAAM;AAAA,IACN,QAAQ,IAAI,OAAO,IAAID,EAAC,KAAK;AAAA,EAC9B;AAAA,EACD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ,IAAI,OAAO,IAAIA,EAAC,IAAI;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD;AAAA,IACE,MAAM;AAAA,IACN,QAAQ,IAAI,OAAO,IAAIA,EAAC,GAAG;AAAA,EAC5B;AACH,GAAGE,KAAK,CAAC,MAAM;AACb,MAAI,MAAM;AACR,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,IACb;AACE,WAASN,IAAI,GAAGA,IAAIK,GAAE,QAAQL,KAAK;AACjC,UAAML,IAAIU,GAAEL,CAAC;AACb,QAAIL,EAAE,OAAO,KAAK,CAAC;AACjB,aAAO;AAAA,QACL,MAAMA,EAAE;AAAA,QACR,OAAO,WAAW,CAAC;AAAA,MAC3B;AAAA,EACG;AACD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,EACX;AACA,GAAGY,KAAK,CAAC,MAAM;AACb,UAAQ,OAAO,GAAC;AAAA,IACd,KAAK;AACH,aAAO,EAAE,MAAM,MAAM,OAAO,EAAC;AAAA,IAC/B,KAAK;AACH,aAAOD,GAAG,CAAC;AAAA,IACb;AACE,aAAO,EAAE,MAAM,IAAI,OAAO,EAAC;AAAA,EAC9B;AACH,GAAGE,KAAI;AAAA,EACL,GAAmB,oBAAI,IAAI,CAAC,QAAQ,UAAU,OAAO,CAAC;AAAA,EACtD,GAAmB,oBAAI,IAAI,CAAC,OAAO,QAAQ,CAAC;AAC9C,GAAGC,KAAM,kBAAC,MAAM,MAAM,KAAK,CAAC,GAAGC,KAAK,CAAC,MAAM,OAAO,KAAK,WAAW,CAAE,IAAG,EAAE,MAAM,OAAO,EAAE,OAAO,OAAO,GAAGC,KAAK,CAAC,MAAM;AACnH,SAAO,KAAK,aAAa,IAAID,GAAG,CAAC;AACjC,MAAIV,IAAI,MAAML,IAAI;AAClB,SAAO,EAAE,QAAQ,CAAC,MAAM;AACtB,IAAAa,GAAE,EAAE,IAAI,CAAC,MAAMb,IAAI,IAAIa,GAAE,EAAE,IAAI,CAAC,MAAMR,IAAI;AAAA,EAC3C,CAAA,GAAG,EAAE,GAAGA,GAAG,GAAGL,EAAC;AAClB,GAAGiB,KAAI;AAAA,EACL,UAAU,CAAC,OAAO,OAAO;AAAA,EACzB,cAAc;AAAA,EACd,mBAAmB;AAAA,IACjB,OAAO,CAAC,OAAO;AAAA,MACb,QAAQ,CAAC,EAAE,cAAc,CAAC;AAAA,MAC1B,SAAS,CAAC,GAAG,CAAC;AAAA,IACpB;AAAA,IACI,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,CAAC,GAAG,CAAC;AAAA,IACf;AAAA,EACF;AACH,GAAGC,KAAqBC,gBAAAA,EAAE;AAAA,EACxB,MAAM;AAAA,EACN,cAAc;AAAA,EACd,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,OAAO;AAAA;AAAA,IAEL,OAAO,CAAC,GAAGd,MAAM;AAAA,IACjB,OAAO,CAAC,GAAGA,MAAM;AAAA,IACjB,YAAY,MAAM;AAAA;AAAA,EAEnB;AAAA,EACD,OAAO,CAAC,GAAG;AAAA,IACT,OAAOA;AAAA,IACP,MAAML;AAAA,EACV,MAAQ;AACJ,UAAM,IAAI,CAACoB,GAAGC,MAAM;AAClB,MAAArB,EAAE,SAASoB,GAAGC,CAAC;AAAA,IACrB,GAAOd,IAAI,CAACa,GAAGC,MAAM;AACf,MAAArB,EAAE,SAASoB,GAAGC,CAAC;AAAA,IAChB,GAAEC,IAAI,MAAM;AACX,MAAAtB,EAAE,YAAY;AAAA,IACpB;AACI,WAAO,MAAMuB,EAAEC,IAAG;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM,EAAE;AAAA,MACR,SAAS;AAAA,MACT,SAASjB;AAAA,MACT,cAAce;AAAA,IACpB,GAAO;AAAA,MACD,SAAS,MAAM;AACb,YAAIF;AACJ,eAAO,EAAEA,IAAIf,EAAE,YAAY,OAAO,SAASe,EAAE,KAAKf,CAAC,CAAC;AAAA,MACrD;AAAA,IACP,CAAK;AAAA,EACF;AACH,CAAC,GAAGoB,KAAqBN,gBAAAA,EAAE;AAAA,EACzB,MAAM;AAAA,EACN,cAAc;AAAA,EACd,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,OAAO,CAAC,GAAG;AAAA,IACT,OAAOd;AAAA,EACX,MAAQ,MAAMkB,EAAEC,IAAG;AAAA,IACf,KAAK;AAAA,IACL,MAAM,EAAE;AAAA,EACZ,GAAK;AAAA,IACD,SAAS,MAAM;AACb,UAAIxB;AACJ,aAAO,EAAEA,IAAIK,EAAE,YAAY,OAAO,SAASL,EAAE,KAAKK,CAAC,CAAC;AAAA,IACrD;AAAA,EACL,CAAG;AACH,CAAC;AACD,SAASqB,GAAG,GAAG;AACb,SAAO,OAAO,KAAK,cAAc,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM,qBAAqB,CAACC,GAAG,CAAC;AACnG;AACA,MAAMjH,KAAI;AAAA,EACR,MAAM;AAAA,EACN,WAAW;AACb,GAAGkH,KAAqBT,gBAAAA,EAAE;AAAA;AAAA,EAExB,MAAM;AAAA,EACN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM,CAAC,QAAQ,KAAK;AAAA,MACpB,SAAS,MAAMF,GAAE;AAAA,IAClB;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU,GAAG;AACX,eAAO,MAAM,SAAS,MAAM;AAAA,MAC7B;AAAA,IACF;AAAA,IACD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AACR,eAAOA,GAAE;AAAA,MACV;AAAA,IACF;AAAA,IACD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAASA,GAAE;AAAA,IACZ;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA,IAED,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA,IAED,yBAAyB;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACF;AAAA,EACD,OAAO;AAAA;AAAA,IAEL,OAAO,CAAC,MAAM;AAAA,IACd,SAAS,CAAC,MAAM;AAAA,IAChB,OAAO,CAAC,MAAM;AAAA;AAAA,EAEf;AAAA,EACD,OAAO,CAAC,GAAG;AAAA,IACT,MAAMZ;AAAA,IACN,OAAOL;AAAA,IACP,QAAQ;AAAA,EACZ,MAAQ;AACJ,UAAMO,IAAIsB,EAAE,CAAA,CAAE,GAAGP,IAAIO,EAAE,IAAI,GAAGT,IAAIjB,GAAE,IAAI,UAAU,GAAGkB,IAAIS,EAAE,MAAM,EAAE,kBAAkB,UAAU,GAAGC,IAAID,EAAE,MAAMT,EAAE,QAAQH,KAAKO,EAAE,GAAGO,IAAIF,EAAE,MAAMvB,EAAE,MAAM,OAAO,CAACN,MAAMA,EAAE,UAAUvF,GAAE,SAAS,CAAC,GAAGuH,IAAIH,EAAE,MAAMlB,GAAG,EAAE,KAAK,CAAC,GAAGsB,IAAIJ,EAAE,MAAM;AACnO,YAAM;AAAA,QACJ,GAAG7B;AAAA,QACH,GAAGC;AAAA,MACJ,IAAGc,GAAG,EAAE,QAAQ,GAAGmB,IAAIF,EAAE,MAAM,OAAOG,IAAIH,EAAE,MAAM,MAAMI,IAAI;AAAA,QAC3D,OAAOF,IAAIC;AAAA,MACnB;AACM,aAAOlC,MAAMmC,EAAEnC,CAAC,IAAI,QAAQD,MAAMA,MAAM,WAAWoC,EAAE,OAAO,cAAc,CAACF,IAAI,CAAC,GAAGC,CAAC,MAAMC,EAAEpC,CAAC,IAAI,QAAQoC;AAAA,IAC/G,CAAK,GAAGC,IAAIR,EAAE,MAAM,YAAYI,EAAE,KAAK,GAAGK,IAAI,CAACtC,MAAM;AAC/C,MAAAI,EAAE,SAASJ,CAAC,GAAG,EAAE,gBAAgBuC,EAAEvC,CAAC;AAAA,IACrC,GAAE,IAAI,MAAM;AACX,UAAIA;AACJ,QAAE,kBAAkBA,IAAIqB,EAAE,UAAU,QAAQrB,EAAE,MAAK;AAAA,IACpD,GAAEwC,IAAI,MAAM;AACX,UAAIxC;AACJ,QAAE,kBAAkBA,IAAIqB,EAAE,UAAU,QAAQrB,EAAE,OAAM;AAAA,IAC1D,GAAOyC,IAAI,CAACzC,IAAI,OAAO;AACjB,UAAIA,EAAE,UAAUA,EAAE,QAAQ,KAAKA,EAAE,SAASA,EAAE,OAAO,CAAE,IAAG,EAAE,UAAUA,EAAE;AACpE;AACF,UAAIA,EAAE,SAASA,EAAE,OAAO;AACtB,QAAA0C;AACA;AAAA,MACD;AACD,YAAMzC,IAAI,OAAOD,EAAE,YAAY,WAAWA,EAAE,WAAW,EAAE,UAAUkC,IAAI,OAAOlC,EAAE,SAAS,WAAWA,EAAE,QAAQ,EAAE,OAAOmC,IAAI,OAAOnC,EAAE,oBAAoB,YAAYA,EAAE,mBAAmB,EAAE,kBAAkB;AAAA,QAC3M,OAAOoC;AAAA,QACP,MAAMO;AAAA,QACN,MAAMC;AAAA,QACN,MAAMC;AAAA,QACN,IAAIC;AAAA,MACZ,IAAU9C,GAAG+C,IAAI;AAAA,QACT,IAAID,KAAKjC,GAAI;AAAA,QACb,OAAOuB;AAAA,QACP,MAAMO;AAAA,QACN,MAAMC;AAAA,QACN,OAAOnI,GAAE;AAAA,QACT,OAAOyH;AAAA,QACP,QAAQjC,IAAI,IAAIiC;AAAA,QAChB,MAAMW;AAAA,MACd;AACM,MAAA5C,KAAK,MAAMoB,EAAE,QAAQ,IAAIlB,GAAG,MAAMoC,EAAEQ,CAAC,GAAGA,EAAE,QAAQA,CAAC;AACnD,YAAMC,KAAI,EAAE,UAAU,CAACX,EAAE,QAAQA,EAAE;AACnC,UAAIY,KAAI;AACR,YAAMC,KAAKnB,EAAE,MAAM,KAAK,CAACoB,OAAMA,GAAE,UAAUnD,EAAE,SAASmD,GAAE,SAASnD,EAAE,IAAI;AACvE,OAAC,CAACmC,KAAK,CAACe,QAAQF,MAAK1C,EAAE,MAAM,KAAKyC,CAAC,GAAG3C,EAAE,SAAS2C,CAAC,GAAGhB,EAAE,MAAM,SAAS,EAAE,QAAQkB,KAAI,OAAO3C,EAAE,MAAM,QAAQyC,CAAC,GAAG3C,EAAE,SAAS2C,CAAC,GAAGhB,EAAE,MAAM,SAAS,EAAE,QAAQkB,KAAIlB,EAAE,MAAM,SAAS,KAAKkB,OAAM,MAAMV,EAAER,EAAE,MAAMkB,EAAC,CAAC;AAAA,IACjN,GAAOG,IAAI,CAACpD,MAAM;AACZ,MAAAqD,EAAErD,CAAC;AAAA,IACT,GAAOsD,IAAI,CAACtD,MAAM,CAAC,6BAA6B,EAAE,SAASA,EAAE,QAAQ,EAAE,GAAGuD,IAAI,CAACvD,MAAMoB,EAAE,QAAQ,SAAS;AAAA,MAClG,YAAY,OAAOpB,EAAE,KAAK;AAAA,IAChC,GAAOuC,IAAI,CAACvC,MAAM;AACZ,mBAAaA,EAAE,KAAK,GAAGA,EAAE,QAAQvF,GAAE,WAAW+I,GAAC,GAAIpD,EAAE,WAAWJ,CAAC;AAAA,IACvE,GAAOqD,IAAI,CAACrD,MAAM;AACZ,YAAMC,IAAIK,EAAE,MAAM,KAAK,CAAC4B,MAAMA,EAAE,OAAOlC,CAAC;AACxC,MAAAC,KAAKsC,EAAEtC,CAAC;AAAA,IACT,GAAEyC,IAAI,MAAM;AACX,MAAAX,EAAE,MAAM,QAAQQ,CAAC;AAAA,IACvB,GAAOkB,IAAI,CAACzD,GAAGC,MAAM;AACf,UAAIkC;AACJ,YAAMD,KAAKC,IAAI,EAAE,cAAc,OAAO,SAASA,EAAEnC,CAAC;AAClD,aAAO,OAAOkC,KAAK,aAAaA,EAAEjC,CAAC,IAAIiC;AAAA,IAC7C,GAAOwB,IAAI,CAAC1D,GAAGC,MAAM;AACf,UAAI,CAACmB,EAAE;AACL;AACF,YAAMc,IAAIuB,EAAE,SAASzD,CAAC;AACtB,MAAAmB,EAAEnB,GAAGkC,GAAG;AAAA,QACN,UAAU,EAAE;AAAA,QACZ,UAAUjC;AAAA,MAClB,CAAO;AAAA,IACP,GAAO,IAAI,CAACD,GAAGC,MAAM;AACf,UAAI,CAACmB,EAAE;AACL;AACF,YAAMc,IAAIuB,EAAE,SAASzD,CAAC;AACtB,MAAAmB,EAAEnB,GAAGkC,GAAG;AAAA,QACN,UAAU,EAAE;AAAA,QACZ,UAAUjC;AAAA,MAClB,CAAO;AAAA,IACP;AACI,aAASuD,KAAI;AACX,MAAAlD,EAAE,QAAQA,EAAE,MAAM,OAAO,CAACN,MAAMA,EAAE,UAAUvF,GAAE,SAAS;AAAA,IACxD;AACD,WAAOkJ,GAAG,MAAM;AACd,MAAApD,GAAE,GAAG,OAAOkC,CAAC,GAAGlC,GAAE,GAAG,SAAS6C,CAAC;AAAA,IAChC,CAAA,GAAG,MAAM;AACR,UAAIpD;AACJ,aAAOsB,EAAE,OAAO;AAAA,QACd,OAAO;AAAA,QACP,OAAOW,EAAE;AAAA,MACjB,GAAS,CAACX,EAAEQ,EAAE,OAAO;AAAA,QACb,MAAM,EAAE;AAAA,QACR,SAAS4B;AAAA,QACT,SAAS;AAAA,QACT,cAAcF;AAAA,MACtB,GAAS/B,GAAGzB,IAAI+B,EAAE,MAAM,IAAI,CAAC9B,MAAMqB,EAAE,OAAO;AAAA,QACpC,KAAKrB,EAAE;AAAA,QACP,OAAO;AAAA,QACP,OAAOsD,EAAEtD,CAAC;AAAA,QACV,WAAWA,EAAE;AAAA,QACb,cAAc;AAAA,QACd,cAAcuC;AAAA,MACf,GAAE,CAACzC,EAAE,OAAOA,EAAE,KAAK;AAAA,QAClB,MAAME;AAAA,QACN,OAAO,CAAC,EAAE,SAASA,EAAE,IAAI,EAAE,KAAK,EAAE;AAAA,QAClC,OAAO,MAAMsC,EAAEtC,CAAC;AAAA,MACxB,CAAO,IAAIqB,EAAE,OAAO;AAAA,QACZ,OAAOgC,EAAErD,CAAC;AAAA,QACV,SAAS,MAAMqC,EAAErC,CAAC;AAAA,MACnB,GAAE,CAAC,EAAE,0BAA0BqB,EAAEsC,IAAG,MAAM,CAAC3D,EAAE,QAAQqB,EAAE,OAAO;AAAA,QAC7D,OAAO;AAAA,QACP,WAAWrB,EAAE;AAAA,MACd,GAAE,IAAI,IAAI,MAAMqB,EAAE,OAAO;AAAA,QACxB,OAAO;AAAA,QACP,WAAWrB,EAAE;AAAA,MACd,GAAE,IAAI,CAAC,CAAC,IAAIqB,EAAEsC,IAAG,MAAM,CAAC3D,EAAE,QAAQqB,EAAE,OAAO;AAAA,QAC1C,OAAO;AAAA,MACf,GAAS,CAACrB,EAAE,KAAK,CAAC,IAAI,MAAMqB,EAAE,OAAO;AAAA,QAC7B,OAAO;AAAA,MACf,GAAS,CAACrB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAID,IAAI;AAAA,QACzB,SAAS,MAAM,CAACA,CAAC;AAAA,MAClB,CAAA,CAAC,CAAC;AAAA,IACT;AAAA,EACG;AACH,CAAC,GAAG6D,KAAI,CAAC,MAAM;AACb,SAAO,KAAK,aAAa,IAAI,EAAE,OAAO,IAAI,MAAM,EAAG,IAAG,OAAO,KAAK,YAAYtD,GAAE,KAAK,OAAO,CAAC;AAC/F;AACAsD,GAAE,QAAQ,CAAC,MAAM;AACf,EAAAtD,GAAE,KAAK,SAAS,CAAC;AACnB;AACK,MAA6BuD,KAAK;AACvC,SAASC,GAAG,GAAG3D,IAAI,IAAI;AACrB,SAAO,QAAQA,CAAC,EAAE,QAAQ,CAAC,MAAMF,GAAE,IAAI,GAAG,CAAC,CAAC;AAC5C,QAAMH,IAAIK,EAAE,QAAQ;AACpB,IAAE,OAAO,iBAAiB,MAAML,CAAC,IAAI8D,IAAG,EAAE,UAAUzD,EAAE,iBAAiB0D,IAAInC,EAAE;AAC/E;AACA,MAAMqC,KAAK;AAAA,EACT,SAASD;AACX,GChYME,KAAmB,CAAC,MAAM,IAAI,GAEvBC,KAAOC,GAA4B;AAAA,EAC9C,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,QAAQF,GAAiB,CAAC;AAAA,EAC1B,gBAAgB;AAAA,EAChB,SAAS,CAACG,GAAgBhI,MAAc;AAClC,IAAA6H,GAAiB,SAASG,CAAM,KAClC,QAAQ,KAAK,WAAWA,CAAM,iBAAiBhI,CAAG,EAAE;AAAA,EAExD;AACF,CAAC,GClBYiI,KAAmB,CAACC,MACxBA,aAAiBC;AAGnB,MAAMA,WAAuB,MAAM;AAAA,EACxC,YAAYC,GAAeC,IAAU,IAAI;AACvC,UAAMA,CAAO,GACb,KAAK,OAAO,kBACZ,KAAK,QAAQD,GACb,KAAK,UAAUC;AAAA,EACjB;AACF;ACXO,MAAMC,KAAiB,KACjBC,KAAsB,KACtBC,KAAyB,KACzBC,KAA0B,KAC1BC,KAA2B,KAC3BC,KAAwB,KACxBC,KAAmC,KAEnCC,KAAwB,CAACP,IAAgBC,IAAqBC,EAAsB,GCLpFM,KAAgC,CAACZ,MAAiB;;AAC7D,SAAOa,GAAM,aAAab,CAAK,OAAK5G,IAAA4G,EAAM,aAAN,gBAAA5G,EAAgB,YAAWqH;AACjE,GAEaK,KAA0B,CAACd,MAC/BA,aAAiBe;AAGnB,MAAMA,WAA8B,MAAM;AAAA,EAC/C,YAAYb,GAAeC,IAAU,IAAI;AACvC,UAAMA,CAAO,GACb,KAAK,OAAO,yBACZ,KAAK,QAAQD,GACb,KAAK,UAAUC;AAAA,EACjB;AACF;ACAA,MAAMa,KAAmB,qBAEZC,KAAsC,CAACjB,MAAiB;;AACnE,SACEa,GAAM,aAAab,CAAK,OACxB5G,IAAA4G,EAAM,aAAN,gBAAA5G,EAAgB,YAAWsH,QAC3BpH,IAAA0G,EAAM,SAAS,SAAf,gBAAA1G,EAAqB,WAAU0H,QAC/BE,IAAAlB,EAAM,SAAS,SAAf,gBAAAkB,EAAqB;AAEzB,GAEaC,KAA2B,CAACnB,MAChCA,aAAiBoB;AAG1B,SAASC,GAAoBC,GAAwBxI,GAAgByI,GAAgB;;AAC7E,QAAAC,KAAOpI,IAAAkI,EAAW,aAAX,gBAAAlI,EAAqB,MAC5BqI,IAAQ,CAAA;AACH,aAAA,CAAC3J,GAAK4J,CAAM,KAAK,OAAO,QAAQF,EAAK,MAAM;AACpD,IAAAC,EAAM,KAAK;AAAA,MACT,OAAO3I,IAAS,MAAMyI,IAAS,YAAYzJ;AAAA,MAC3C,QAAQ4J;AAAA,IAAA,CACT;AAEI,SAAAD;AACT;AAEO,MAAML,WAA+B,MAAM;AAAA,EAGhD,YAAYE,GAAwBxI,GAAgByI,GAAgBrB,GAAeC,IAAU,IAAI;AAC/F,UAAMA,CAAO;AAHf,IAAAwB,GAAA;AAIE,SAAK,OAAO,0BACZ,KAAK,QAAQzB,GACb,KAAK,UAAUC,GACf,KAAK,SAASkB,GAAoBC,GAAYxI,GAAQyI,CAAM;AAAA,EAC9D;AACF;ACvDa,MAAAK,KAA6B,CAAC5B,MAClCA,aAAiB6B;AAGnB,MAAMA,WAAiC,MAAM;AAAA,EAGlD,YAAYC,GAAc5B,GAAeC,GAAkB;AACzD,UAAMA,CAAO;AAHf,IAAAwB,GAAA;AAIE,SAAK,OAAO,4BACZ,KAAK,QAAQzB,GACb,KAAK,OAAO4B;AAAA,EACd;AACF;ACJA,MAAMC,KAA4B,6BAErBC,KAA8C,CAAChC,MAAiB;;AAC3E,SACEa,GAAM,aAAab,CAAK,OACxB5G,IAAA4G,EAAM,aAAN,gBAAA5G,EAAgB,YAAWsH,QAC3BpH,IAAA0G,EAAM,SAAS,SAAf,gBAAA1G,EAAqB,WAAUyI,QAC/Bb,IAAAlB,EAAM,SAAS,SAAf,gBAAAkB,EAAqB;AAEzB,GAEae,KAAmC,CAACjC,MACxCA,aAAiBkC;AAG1B,SAASb,GAAoBC,GAAwB;;AAEnD,WADalI,IAAAkI,EAAW,aAAX,gBAAAlI,EAAqB,MACtB;AACd;AAEO,MAAM8I,WAAuC,MAAM;AAAA,EAGxD,YAAYZ,GAAwBpB,GAAeC,IAAU,IAAI;AAC/D,UAAMA,CAAO;AAHf,IAAAwB,GAAA;AAIE,SAAK,OAAO,kCACZ,KAAK,QAAQzB,GACb,KAAK,UAAUC,GACV,KAAA,SAASkB,GAAoBC,CAAU;AAAA,EAC9C;AACF;AC/BA,MAAMa,KAA2B,GAEpBC,KAAgB;AAAA;AAItB,SAASC,KAAY;AAC1B,QAAMC,IAAc,CAACnC,GAAiBoC,IAAWJ,OAA6B;AACrEK,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMrC;AAAA,MACN,UAAUoC,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGE,IAAe,CAACC,GAAqBH,IAAWJ,OAA6B;AAC3E,UAAA,EAAE,GAAAlN,EAAE,IAAI2K,GAAK;AACP,IAAA0C,EAAArN,EAAEyN,CAAW,GAAGH,CAAQ;AAAA,EAAA,GAGhCI,IAAY,CAACxC,GAAiBoC,IAAWJ,OAA6B;AACnEK,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMrC;AAAA,MACN,UAAUoC,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGK,IAAa,CAACF,GAAqBH,IAAWJ,OAA6B;AACzE,UAAA,EAAE,GAAAlN,EAAE,IAAI2K,GAAK;AACT,IAAA+C,EAAA1N,EAAEyN,CAAW,GAAGH,CAAQ;AAAA,EAAA,GAG9BM,IAAW,CAAC1C,GAAiBoC,IAAWJ,OAA6B;AAClEK,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMrC;AAAA,MACN,UAAUoC,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGO,IAAY,CAACJ,GAAqBH,IAAWJ,OAA6B;AACxE,UAAA,EAAE,GAAAlN,EAAE,IAAI2K,GAAK;AACV,IAAAiD,EAAA5N,EAAEyN,CAAW,GAAGH,CAAQ;AAAA,EAAA,GAG7BQ,IAAc,CAAC5C,GAAiBoC,IAAWJ,OAA6B;AACrEK,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMrC;AAAA,MACN,UAAUoC,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGS,IAAe,CAACN,GAAqBH,IAAWJ,OAA6B;AAC3E,UAAA,EAAE,GAAAlN,EAAE,IAAI2K,GAAK;AACP,IAAAmD,EAAA9N,EAAEyN,CAAW,GAAGH,CAAQ;AAAA,EAAA,GAGhCU,IAAsB,CAACV,IAAWJ,OAA6B;AAC7D,UAAA,EAAE,GAAAlN,EAAE,IAAI2K,GAAK;AACZ4C,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMvN,EAAE,kCAAkC;AAAA,MAC1C,UAAUsN,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGW,IAAgB,CAACC,GAAwBZ,IAAWJ,OAA6B;AAC/E,UAAA,EAAE,GAAAlN,EAAE,IAAI2K,GAAK;AACZ4C,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMvN,EAAE,4BAA4BkO,CAAO;AAAA,MAC3C,UAAUZ,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGa,IAAyB,CAACC,GAA2Bd,IAAW,IAAIe,IAAoB,OAAU;AACtG,UAAM,EAAE,GAAArO,GAAG,IAAAsO,MAAO3D,GAAK,QACjB4D,IAAQ,CAACvO,EAAE,qCAAqC,CAAC;AAEvD,aAAS0G,IAAI,GAAGA,IAAI0H,EAAO,QAAQ1H,KAAK;AACtC,UAAI8H,IAAY;AAChB,MAAIH,IACWG,KAAAJ,EAAO1H,CAAC,EAAE,QACd4H,EAAGF,EAAO1H,CAAC,EAAE,KAAK,MAC3B8H,KAAaxO,EAAEoO,EAAO1H,CAAC,EAAE,KAAK;AAE1B,YAAA+H,wBAAkB;AACf,eAAAlG,IAAI,GAAGA,IAAI6F,EAAO1H,CAAC,EAAE,OAAO,QAAQ6B,KAAK;AAC5C,YAAA+F,EAAG,yBAAyBF,EAAO1H,CAAC,EAAE,OAAO6B,CAAC,CAAC,GAAG;AACxC,UAAAkG,EAAA,IAAIzO,EAAE,yBAAyBoO,EAAO1H,CAAC,EAAE,OAAO6B,CAAC,CAAC,CAAC;AAC/D;AAAA,QACF;AACY,QAAAkG,EAAA,IAAIzO,EAAE,mCAAmC,CAAC;AAAA,MACxD;AACI,MAAAwO,EAAU,SAAS,KACfD,EAAA,KAAKC,IAAY,OAAO,MAAM,KAAKC,CAAW,EAAE,KAAK,IAAI,CAAC;AAAA,IAEpE;AACOlB,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMgB,EAAM,KAAKpB,EAAa;AAAA,MAC9B,UAAUG,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGoB,IAAiC,CAACC,GAAgBrB,IAAW,OAAO;AACxE,UAAM,EAAE,GAAAtN,GAAG,IAAAsO,MAAO3D,GAAK;AACnB,QAAAvK,IAAOJ,EAAE,2CAA2C;AACpD,IAAAsO,EAAG,iCAAiCK,CAAM,MACrCvO,IAAAJ,EAAE,iCAAiC2O,CAAM,IAE3CpB,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAAnN;AAAA,MACA,UAAUkN,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGsB,IAAmB,CAACtB,IAAW,OAAO;AACpC,UAAA,EAAE,GAAAtN,EAAE,IAAI2K,GAAK;AACZ4C,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMvN,EAAE,2BAA2B;AAAA,MACnC,UAAUsN,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA,GAGGuB,IAAqB,CAACvB,IAAWJ,OAA6B;AAC5D,UAAA,EAAE,GAAAlN,EAAE,IAAI2K,GAAK;AACZ4C,IAAAA,GAAA;AAAA,MACL,OAAO;AAAA,MACP,MAAMvN,EAAE,6BAA6B;AAAA,MACrC,UAAUsN,IAAW;AAAA,MACrB,MAAM;AAAA,IAAA,CACP;AAAA,EAAA;AA2BI,SAAA;AAAA,IACL,aAAAD;AAAA,IACA,cAAAG;AAAA,IACA,WAAAE;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,wBAAAE;AAAA,IACA,gCAAAO;AAAA,IACA,kBAAAE;AAAA,IACA,oBAAAC;AAAA,IACA,mBAvCwB,CAAC9D,MACrBc,GAAwBd,CAAK,KACZ8D,KACZ,MAEL3C,GAAyBnB,CAAK,KAChCoD,EAAuBpD,EAAM,MAAM,GAC5B,MAELiC,GAAiCjC,CAAK,KACxC2D,EAA+B3D,EAAM,MAAM,GACpC,MAELD,GAAiBC,CAAK,KAItB4B,GAA2B5B,CAAK,KACjB6D,KACV,MAEF;AAAA,EAkBP;AAEJ;;;;;;;;;;;;;;;;AC7LA,UAAM9O,IAAQC,GAuBR4D,IAAOC,GASP,EAAE,GAAA5D,MAAMC,MAER6O,IAAgB/I,EAAI,EAAK,GAEzBgJ,IAAS,MAAM;AACnB,MAAApL,EAAK,qBAAqB,EAAI,GAC9BA,EAAK,QAAQ;AAAA,IAAA,GAGTqL,IAAU,MAAM;AACpB,MAAArL,EAAK,qBAAqB,EAAK,GAC/BA,EAAK,SAAS;AAAA,IAAA,GAGVsL,IAASC,MACT,EAAE,qBAAAlB,GAAqB,eAAAC,GAAe,mBAAAkB,MAAsB/B,GAAU,GAEtEgC,IAAY,YAAY;;AAC5B,MAAAzL,EAAK,WAAW;AACZ,UAAA;AAGF,YAFAmL,EAAc,QAAQ,KACtB3K,IAAArE,EAAM,MAAN,QAAAqE,EAAS,UACL,CAAC5D,EAAYT,EAAM,CAAC,KAAKA,EAAM,EAAE,UAAU;AACzB,UAAAkO,KACpBc,EAAc,QAAQ;AACtB;AAAA,QACF;AACM,cAAAO,IAAM,MAAMvP,EAAM;AACxB,QAAA6D,EAAK,aAAa0L,CAAG,GACrBpB,EAAc,SAAS,GACfe,KACJ,CAACzO,EAAY8O,EAAI,EAAE,KAAK,CAACvP,EAAM,mBAAmBA,EAAM,qBAC1DmP,EAAO,KAAK;AAAA,UACV,MAAMnP,EAAM;AAAA,UACZ,QAAQ,EAAE,CAACA,EAAM,iBAAiB,GAAGuP,EAAIvP,EAAM,iBAAiB,EAAE;AAAA,QAAA,CACnE;AAAA,eAEIiL,GAAO;AACd,QAAAoE,EAAkBpE,CAAK,GACvBpH,EAAK,WAAWoH,CAAK;AAAA,MAAA,UACrB;AACA,QAAA+D,EAAc,QAAQ;AAAA,MACxB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7EF,UAAMhP,IAAQC,GASR,EAAE,GAAAC,MAAMC,MASRqP,IAASvJ,EAAuB,CAAA,CAAE;AAExC,WAAAwJ,GAAU,YAAY;AACpB,UAAIzP,EAAM,aAAaA,EAAM,UAAU,SAAS;AAC1C,YAAA;AACI,gBAAA,EAAE,MAAAyM,MAAS,MAAMiD,GAA4B1P,EAAM,SAAS,EAAE,MAAM;AAC1E,UAAAwP,EAAO,QAAQ/C,EAAK;AAAA,gBACV;AAAA,QAEZ;AAAA,IACF,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCD,GAAC,SAASvM,GAAEyG,GAAE;AAAsD,IAAAgJ,YAAehJ,EAAmH;AAAA,EAAA,GAAEiJ,IAAM,WAAU;AAAc,QAAI1P,IAAE,KAAIyG,IAAE,KAAII,IAAE,MAAK8B,IAAE,eAAcjC,IAAE,UAASK,IAAE,UAASc,IAAE,QAAO8H,IAAE,OAAMnJ,IAAE,QAAOoB,IAAE,SAAQY,IAAE,WAAUV,IAAE,QAAOc,IAAE,QAAOb,IAAE,gBAAeM,IAAE,8FAA6FW,IAAE,uFAAsF9B,IAAE,EAAC,MAAK,MAAK,UAAS,2DAA2D,MAAM,GAAG,GAAE,QAAO,wFAAwF,MAAM,GAAG,GAAE,SAAQ,SAASlH,GAAE;AAAC,UAAIyG,IAAE,CAAC,MAAK,MAAK,MAAK,IAAI,GAAEI,IAAE7G,IAAE;AAAI,aAAM,MAAIA,KAAGyG,GAAGI,IAAE,MAAI,EAAE,KAAGJ,EAAEI,CAAC,KAAGJ,EAAE,CAAC,KAAG;AAAA,IAAG,EAAC,GAAEoC,IAAE,SAAS7I,GAAEyG,GAAEI,GAAE;AAAC,UAAI8B,IAAE,OAAO3I,CAAC;AAAE,aAAM,CAAC2I,KAAGA,EAAE,UAAQlC,IAAEzG,IAAE,KAAG,MAAMyG,IAAE,IAAEkC,EAAE,MAAM,EAAE,KAAK9B,CAAC,IAAE7G;AAAA,IAAC,GAAE0J,IAAE,EAAC,GAAEb,GAAE,GAAE,SAAS7I,GAAE;AAAC,UAAIyG,IAAE,CAACzG,EAAE,UAAS,GAAG6G,IAAE,KAAK,IAAIJ,CAAC,GAAEkC,IAAE,KAAK,MAAM9B,IAAE,EAAE,GAAEH,IAAEG,IAAE;AAAG,cAAOJ,KAAG,IAAE,MAAI,OAAKoC,EAAEF,GAAE,GAAE,GAAG,IAAE,MAAIE,EAAEnC,GAAE,GAAE,GAAG;AAAA,IAAC,GAAE,GAAE,SAAS1G,EAAEyG,GAAEI,GAAE;AAAC,UAAGJ,EAAE,KAAM,IAACI,EAAE,KAAM;AAAC,eAAM,CAAC7G,EAAE6G,GAAEJ,CAAC;AAAE,UAAIkC,IAAE,MAAI9B,EAAE,KAAM,IAACJ,EAAE,KAAI,MAAKI,EAAE,MAAK,IAAGJ,EAAE,MAAK,IAAIC,IAAED,EAAE,MAAK,EAAG,IAAIkC,GAAEf,CAAC,GAAEb,IAAEF,IAAEH,IAAE,GAAEmB,IAAEpB,EAAE,MAAO,EAAC,IAAIkC,KAAG5B,IAAE,KAAG,IAAGa,CAAC;AAAE,aAAM,EAAE,EAAEe,KAAG9B,IAAEH,MAAIK,IAAEL,IAAEmB,IAAEA,IAAEnB,OAAK;AAAA,IAAE,GAAE,GAAE,SAAS1G,GAAE;AAAC,aAAOA,IAAE,IAAE,KAAK,KAAKA,CAAC,KAAG,IAAE,KAAK,MAAMA,CAAC;AAAA,IAAC,GAAE,GAAE,SAASA,GAAE;AAAC,aAAM,EAAC,GAAE4H,GAAE,GAAEE,GAAE,GAAEtB,GAAEmJ,GAAI,GAAE/G,GAAE,GAAEf,GAAE,GAAEd,GAAE,GAAEL,GAAE,IAAGiC,GAAE,GAAEH,EAAC,EAAExI,CAAC,KAAG,OAAOA,KAAG,EAAE,EAAE,YAAa,EAAC,QAAQ,MAAK,EAAE;AAAA,IAAC,GAAE,GAAE,SAASA,GAAE;AAAC,aAAgBA,MAAT;AAAA,IAAU,EAAC,GAAEsI,IAAE,MAAKX,IAAE,CAAE;AAAC,IAAAA,EAAEW,CAAC,IAAEpB;AAAE,QAAIsC,IAAE,kBAAiBc,IAAE,SAAStK,GAAE;AAAC,aAAOA,aAAa6J,KAAG,EAAE,CAAC7J,KAAG,CAACA,EAAEwJ,CAAC;AAAA,IAAE,GAAEV,IAAE,SAAS9I,EAAEyG,GAAEI,GAAE8B,GAAE;AAAC,UAAIjC;AAAE,UAAG,CAACD;AAAE,eAAO6B;AAAE,UAAa,OAAO7B,KAAjB,UAAmB;AAAC,YAAIM,IAAEN,EAAE,YAAa;AAAC,QAAAkB,EAAEZ,CAAC,MAAIL,IAAEK,IAAGF,MAAIc,EAAEZ,CAAC,IAAEF,GAAEH,IAAEK;AAAG,YAAIc,IAAEpB,EAAE,MAAM,GAAG;AAAE,YAAG,CAACC,KAAGmB,EAAE,SAAO;AAAE,iBAAO7H,EAAE6H,EAAE,CAAC,CAAC;AAAA,MAAC,OAAK;AAAC,YAAI8H,KAAElJ,EAAE;AAAK,QAAAkB,EAAEgI,EAAC,IAAElJ,GAAEC,IAAEiJ;AAAA,MAAC;AAAC,aAAM,CAAChH,KAAGjC,MAAI4B,IAAE5B,IAAGA,KAAG,CAACiC,KAAGL;AAAA,IAAC,GAAE4B,KAAE,SAASlK,GAAEyG,GAAE;AAAC,UAAG6D,EAAEtK,CAAC;AAAE,eAAOA,EAAE,MAAO;AAAC,UAAI6G,IAAY,OAAOJ,KAAjB,WAAmBA,IAAE;AAAG,aAAOI,EAAE,OAAK7G,GAAE6G,EAAE,OAAK,WAAU,IAAIgD,EAAEhD,CAAC;AAAA,IAAC,GAAEI,IAAEyC;AAAE,IAAAzC,EAAE,IAAE6B,GAAE7B,EAAE,IAAEqD,GAAErD,EAAE,IAAE,SAASjH,GAAEyG,GAAE;AAAC,aAAOyD,GAAElK,GAAE,EAAC,QAAOyG,EAAE,IAAG,KAAIA,EAAE,IAAG,GAAEA,EAAE,IAAG,SAAQA,EAAE,QAAO,CAAC;AAAA,IAAC;AAAE,QAAIoD,IAAE,WAAU;AAAC,eAAS3C,EAAElH,GAAE;AAAC,aAAK,KAAG8I,EAAE9I,EAAE,QAAO,MAAK,EAAE,GAAE,KAAK,MAAMA,CAAC,GAAE,KAAK,KAAG,KAAK,MAAIA,EAAE,KAAG,CAAA,GAAG,KAAKwJ,CAAC,IAAE;AAAA,MAAE;AAAC,UAAIX,IAAE3B,EAAE;AAAU,aAAO2B,EAAE,QAAM,SAAS7I,GAAE;AAAC,aAAK,KAAG,SAASA,GAAE;AAAC,cAAIyG,IAAEzG,EAAE,MAAK6G,IAAE7G,EAAE;AAAI,cAAUyG,MAAP;AAAS,mBAAO,oBAAI,KAAK,GAAG;AAAE,cAAGQ,EAAE,EAAER,CAAC;AAAE,mBAAO,oBAAI;AAAK,cAAGA,aAAa;AAAK,mBAAO,IAAI,KAAKA,CAAC;AAAE,cAAa,OAAOA,KAAjB,YAAoB,CAAC,MAAM,KAAKA,CAAC,GAAE;AAAC,gBAAIkC,IAAElC,EAAE,MAAM4B,CAAC;AAAE,gBAAGM,GAAE;AAAC,kBAAIjC,KAAEiC,EAAE,CAAC,IAAE,KAAG,GAAE5B,MAAG4B,EAAE,CAAC,KAAG,KAAK,UAAU,GAAE,CAAC;AAAE,qBAAO9B,IAAE,IAAI,KAAK,KAAK,IAAI8B,EAAE,CAAC,GAAEjC,IAAEiC,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAE5B,EAAC,CAAC,IAAE,IAAI,KAAK4B,EAAE,CAAC,GAAEjC,IAAEiC,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAEA,EAAE,CAAC,KAAG,GAAE5B,EAAC;AAAA,YAAC;AAAA,UAAC;AAAC,iBAAO,IAAI,KAAKN,CAAC;AAAA,QAAC,EAAEzG,CAAC,GAAE,KAAK,KAAM;AAAA,MAAA,GAAE6I,EAAE,OAAK,WAAU;AAAC,YAAI7I,IAAE,KAAK;AAAG,aAAK,KAAGA,EAAE,eAAc,KAAK,KAAGA,EAAE,SAAQ,GAAG,KAAK,KAAGA,EAAE,QAAO,GAAG,KAAK,KAAGA,EAAE,UAAS,KAAK,KAAGA,EAAE,SAAQ,GAAG,KAAK,KAAGA,EAAE,WAAY,GAAC,KAAK,KAAGA,EAAE,WAAY,GAAC,KAAK,MAAIA,EAAE;MAAiB,GAAE6I,EAAE,SAAO,WAAU;AAAC,eAAO5B;AAAA,MAAC,GAAE4B,EAAE,UAAQ,WAAU;AAAC,eAAQ,KAAK,GAAG,eAAad;AAAA,MAAE,GAAEc,EAAE,SAAO,SAAS7I,GAAEyG,GAAE;AAAC,YAAII,IAAEqD,GAAElK,CAAC;AAAE,eAAO,KAAK,QAAQyG,CAAC,KAAGI,KAAGA,KAAG,KAAK,MAAMJ,CAAC;AAAA,MAAC,GAAEoC,EAAE,UAAQ,SAAS7I,GAAEyG,GAAE;AAAC,eAAOyD,GAAElK,CAAC,IAAE,KAAK,QAAQyG,CAAC;AAAA,MAAC,GAAEoC,EAAE,WAAS,SAAS7I,GAAEyG,GAAE;AAAC,eAAO,KAAK,MAAMA,CAAC,IAAEyD,GAAElK,CAAC;AAAA,MAAC,GAAE6I,EAAE,KAAG,SAAS7I,GAAEyG,GAAEI,GAAE;AAAC,eAAOI,EAAE,EAAEjH,CAAC,IAAE,KAAKyG,CAAC,IAAE,KAAK,IAAII,GAAE7G,CAAC;AAAA,MAAC,GAAE6I,EAAE,OAAK,WAAU;AAAC,eAAO,KAAK,MAAM,KAAK,QAAO,IAAG,GAAG;AAAA,MAAC,GAAEA,EAAE,UAAQ,WAAU;AAAC,eAAO,KAAK,GAAG,QAAS;AAAA,MAAA,GAAEA,EAAE,UAAQ,SAAS7I,GAAEyG,GAAE;AAAC,YAAII,IAAE,MAAK8B,IAAE,CAAC,CAAC1B,EAAE,EAAER,CAAC,KAAGA,GAAE+B,IAAEvB,EAAE,EAAEjH,CAAC,GAAE+H,KAAE,SAAS/H,IAAEyG,IAAE;AAAC,cAAIC,KAAEO,EAAE,EAAEJ,EAAE,KAAG,KAAK,IAAIA,EAAE,IAAGJ,IAAEzG,EAAC,IAAE,IAAI,KAAK6G,EAAE,IAAGJ,IAAEzG,EAAC,GAAE6G,CAAC;AAAE,iBAAO8B,IAAEjC,KAAEA,GAAE,MAAMiJ,CAAC;AAAA,QAAC,GAAEtH,KAAE,SAASrI,IAAEyG,IAAE;AAAC,iBAAOQ,EAAE,EAAEJ,EAAE,OAAM,EAAG7G,EAAC,EAAE,MAAM6G,EAAE,OAAO,GAAG,IAAG8B,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,IAAG,GAAG,GAAG,MAAMlC,EAAC,CAAC,GAAEI,CAAC;AAAA,QAAC,GAAEmC,KAAE,KAAK,IAAG9B,KAAE,KAAK,IAAG2B,KAAE,KAAK,IAAGa,KAAE,SAAO,KAAK,KAAG,QAAM;AAAI,gBAAOlB;UAAG,KAAKV;AAAE,mBAAOa,IAAEZ,GAAE,GAAE,CAAC,IAAEA,GAAE,IAAG,EAAE;AAAA,UAAE,KAAKH;AAAE,mBAAOe,IAAEZ,GAAE,GAAEb,EAAC,IAAEa,GAAE,GAAEb,KAAE,CAAC;AAAA,UAAE,KAAKV;AAAE,gBAAI8B,KAAE,KAAK,UAAU,aAAW,GAAEX,MAAGqB,KAAEV,KAAEU,KAAE,IAAEA,MAAGV;AAAE,mBAAOP,GAAEY,IAAEE,KAAElB,KAAEkB,MAAG,IAAElB,KAAGT,EAAC;AAAA,UAAE,KAAKyI;AAAA,UAAE,KAAK/G;AAAE,mBAAOP,GAAEqB,KAAE,SAAQ,CAAC;AAAA,UAAE,KAAK7B;AAAE,mBAAOQ,GAAEqB,KAAE,WAAU,CAAC;AAAA,UAAE,KAAK3C;AAAE,mBAAOsB,GAAEqB,KAAE,WAAU,CAAC;AAAA,UAAE,KAAKhD;AAAE,mBAAO2B,GAAEqB,KAAE,gBAAe,CAAC;AAAA,UAAE;AAAQ,mBAAO,KAAK,MAAO;AAAA,QAAA;AAAA,MAAC,GAAEb,EAAE,QAAM,SAAS7I,GAAE;AAAC,eAAO,KAAK,QAAQA,GAAE,EAAE;AAAA,MAAC,GAAE6I,EAAE,OAAK,SAAS7I,GAAEyG,GAAE;AAAC,YAAII,GAAEL,IAAES,EAAE,EAAEjH,CAAC,GAAEwI,IAAE,SAAO,KAAK,KAAG,QAAM,KAAIT,MAAGlB,IAAE,CAAA,GAAGA,EAAE8I,CAAC,IAAEnH,IAAE,QAAO3B,EAAE+B,CAAC,IAAEJ,IAAE,QAAO3B,EAAEe,CAAC,IAAEY,IAAE,SAAQ3B,EAAEiB,CAAC,IAAEU,IAAE,YAAW3B,EAAEgB,CAAC,IAAEW,IAAE,SAAQ3B,EAAEE,CAAC,IAAEyB,IAAE,WAAU3B,EAAEH,CAAC,IAAE8B,IAAE,WAAU3B,EAAE8B,CAAC,IAAEH,IAAE,gBAAe3B,GAAGL,CAAC,GAAE6B,KAAE7B,MAAImJ,IAAE,KAAK,MAAIlJ,IAAE,KAAK,MAAIA;AAAE,YAAGD,MAAIoB,KAAGpB,MAAIsB,GAAE;AAAC,cAAIkB,KAAE,KAAK,QAAQ,IAAIJ,GAAE,CAAC;AAAE,UAAAI,GAAE,GAAGjB,EAAC,EAAEM,EAAC,GAAEW,GAAE,KAAI,GAAG,KAAK,KAAGA,GAAE,IAAIJ,GAAE,KAAK,IAAI,KAAK,IAAGI,GAAE,YAAW,CAAE,CAAC,EAAE;AAAA,QAAE;AAAM,UAAAjB,MAAG,KAAK,GAAGA,EAAC,EAAEM,EAAC;AAAE,eAAO,KAAK,KAAM,GAAC;AAAA,MAAI,GAAEQ,EAAE,MAAI,SAAS7I,GAAEyG,GAAE;AAAC,eAAO,KAAK,MAAO,EAAC,KAAKzG,GAAEyG,CAAC;AAAA,MAAC,GAAEoC,EAAE,MAAI,SAAS7I,GAAE;AAAC,eAAO,KAAKiH,EAAE,EAAEjH,CAAC,CAAC;MAAG,GAAE6I,EAAE,MAAI,SAASF,GAAEH,GAAE;AAAC,YAAII,GAAEb,IAAE;AAAK,QAAAY,IAAE,OAAOA,CAAC;AAAE,YAAIN,IAAEpB,EAAE,EAAEuB,CAAC,GAAEQ,KAAE,SAAShJ,IAAE;AAAC,cAAIyG,KAAEyD,GAAEnC,CAAC;AAAE,iBAAOd,EAAE,EAAER,GAAE,KAAKA,GAAE,KAAM,IAAC,KAAK,MAAMzG,KAAE2I,CAAC,CAAC,GAAEZ,CAAC;AAAA,QAAC;AAAE,YAAGM,MAAIT;AAAE,iBAAO,KAAK,IAAIA,GAAE,KAAK,KAAGe,CAAC;AAAE,YAAGN,MAAIP;AAAE,iBAAO,KAAK,IAAIA,GAAE,KAAK,KAAGa,CAAC;AAAE,YAAGN,MAAIsH;AAAE,iBAAO3G,GAAE,CAAC;AAAE,YAAGX,MAAI7B;AAAE,iBAAOwC,GAAE,CAAC;AAAE,YAAI9B,MAAG0B,IAAE,CAAE,GAACA,EAAE7B,CAAC,IAAEN,GAAEmC,EAAEf,CAAC,IAAEhB,GAAE+B,EAAElC,CAAC,IAAE1G,GAAE4I,GAAGP,CAAC,KAAG,GAAEQ,KAAE,KAAK,GAAG,QAAS,IAACF,IAAEzB;AAAE,eAAOD,EAAE,EAAE4B,IAAE,IAAI;AAAA,MAAC,GAAEA,EAAE,WAAS,SAAS7I,GAAEyG,GAAE;AAAC,eAAO,KAAK,IAAI,KAAGzG,GAAEyG,CAAC;AAAA,MAAC,GAAEoC,EAAE,SAAO,SAAS7I,GAAE;AAAC,YAAIyG,IAAE,MAAKI,IAAE,KAAK,QAAO;AAAG,YAAG,CAAC,KAAK,QAAO;AAAG,iBAAOA,EAAE,eAAakB;AAAE,YAAIY,IAAE3I,KAAG,wBAAuB0G,IAAEO,EAAE,EAAE,IAAI,GAAEF,KAAE,KAAK,IAAGc,KAAE,KAAK,IAAG8H,KAAE,KAAK,IAAGnJ,KAAEK,EAAE,UAASe,KAAEf,EAAE,QAAO2B,KAAE3B,EAAE,UAASiB,KAAE,SAAS9H,IAAE6G,IAAEH,IAAEK,IAAE;AAAC,iBAAO/G,OAAIA,GAAE6G,EAAC,KAAG7G,GAAEyG,GAAEkC,CAAC,MAAIjC,GAAEG,EAAC,EAAE,MAAM,GAAEE,EAAC;AAAA,QAAC,GAAE6B,KAAE,SAAS5I,IAAE;AAAC,iBAAOiH,EAAE,EAAEF,KAAE,MAAI,IAAG/G,IAAE,GAAG;AAAA,QAAC,GAAEqI,KAAEG,MAAG,SAASxI,IAAEyG,IAAEI,IAAE;AAAC,cAAI8B,KAAE3I,KAAE,KAAG,OAAK;AAAK,iBAAO6G,KAAE8B,GAAE,YAAa,IAACA;AAAA,QAAC;AAAE,eAAOA,EAAE,QAAQK,GAAG,SAAShJ,IAAE2I,IAAE;AAAC,iBAAOA,MAAG,SAAS3I,IAAE;AAAC,oBAAOA,IAAC;AAAA,cAAE,KAAI;AAAK,uBAAO,OAAOyG,EAAE,EAAE,EAAE,MAAM,EAAE;AAAA,cAAE,KAAI;AAAO,uBAAOQ,EAAE,EAAER,EAAE,IAAG,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAOkJ,KAAE;AAAA,cAAE,KAAI;AAAK,uBAAO1I,EAAE,EAAE0I,KAAE,GAAE,GAAE,GAAG;AAAA,cAAE,KAAI;AAAM,uBAAO7H,GAAEjB,EAAE,aAAY8I,IAAE/H,IAAE,CAAC;AAAA,cAAE,KAAI;AAAO,uBAAOE,GAAEF,IAAE+H,EAAC;AAAA,cAAE,KAAI;AAAI,uBAAOlJ,EAAE;AAAA,cAAG,KAAI;AAAK,uBAAOQ,EAAE,EAAER,EAAE,IAAG,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAO,OAAOA,EAAE,EAAE;AAAA,cAAE,KAAI;AAAK,uBAAOqB,GAAEjB,EAAE,aAAYJ,EAAE,IAAGD,IAAE,CAAC;AAAA,cAAE,KAAI;AAAM,uBAAOsB,GAAEjB,EAAE,eAAcJ,EAAE,IAAGD,IAAE,CAAC;AAAA,cAAE,KAAI;AAAO,uBAAOA,GAAEC,EAAE,EAAE;AAAA,cAAE,KAAI;AAAI,uBAAO,OAAOM,EAAC;AAAA,cAAE,KAAI;AAAK,uBAAOE,EAAE,EAAEF,IAAE,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAO6B,GAAE,CAAC;AAAA,cAAE,KAAI;AAAK,uBAAOA,GAAE,CAAC;AAAA,cAAE,KAAI;AAAI,uBAAOP,GAAEtB,IAAEc,IAAE,EAAE;AAAA,cAAE,KAAI;AAAI,uBAAOQ,GAAEtB,IAAEc,IAAE,EAAE;AAAA,cAAE,KAAI;AAAI,uBAAO,OAAOA,EAAC;AAAA,cAAE,KAAI;AAAK,uBAAOZ,EAAE,EAAEY,IAAE,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAO,OAAOpB,EAAE,EAAE;AAAA,cAAE,KAAI;AAAK,uBAAOQ,EAAE,EAAER,EAAE,IAAG,GAAE,GAAG;AAAA,cAAE,KAAI;AAAM,uBAAOQ,EAAE,EAAER,EAAE,KAAI,GAAE,GAAG;AAAA,cAAE,KAAI;AAAI,uBAAOC;AAAA,YAAC;AAAC,mBAAO;AAAA,UAAI,EAAE1G,EAAC,KAAG0G,EAAE,QAAQ,KAAI,EAAE;AAAA,QAAC,CAAC;AAAA,MAAE,GAAEmC,EAAE,YAAU,WAAU;AAAC,eAAO,KAAG,CAAC,KAAK,MAAM,KAAK,GAAG,kBAAmB,IAAC,EAAE;AAAA,MAAC,GAAEA,EAAE,OAAK,SAASF,GAAEC,GAAEb,GAAE;AAAC,YAAIM,GAAEW,IAAE,MAAK9B,KAAED,EAAE,EAAE2B,CAAC,GAAEC,KAAEqB,GAAEvB,CAAC,GAAEe,MAAGb,GAAE,UAAS,IAAG,KAAK,eAAapC,GAAE6B,KAAE,OAAKO,IAAElB,KAAE,WAAU;AAAC,iBAAOV,EAAE,EAAE+B,GAAEH,EAAC;AAAA,QAAC;AAAE,gBAAO3B,IAAG;AAAA,UAAA,KAAKY;AAAE,YAAAO,IAAEV,GAAC,IAAG;AAAG;AAAA,UAAM,KAAKC;AAAE,YAAAS,IAAEV;AAAI;AAAA,UAAM,KAAKa;AAAE,YAAAH,IAAEV,GAAC,IAAG;AAAE;AAAA,UAAM,KAAKnB;AAAE,YAAA6B,KAAGC,KAAEoB,MAAG;AAAO;AAAA,UAAM,KAAKiG;AAAE,YAAAtH,KAAGC,KAAEoB,MAAG;AAAM;AAAA,UAAM,KAAK7B;AAAE,YAAAQ,IAAEC,KAAEzB;AAAE;AAAA,UAAM,KAAKE;AAAE,YAAAsB,IAAEC,KAAE7B;AAAE;AAAA,UAAM,KAAKC;AAAE,YAAA2B,IAAEC,KAAEtI;AAAE;AAAA,UAAM;AAAQ,YAAAqI,IAAEC;AAAA,QAAC;AAAC,eAAOP,IAAEM,IAAEpB,EAAE,EAAEoB,CAAC;AAAA,MAAC,GAAEQ,EAAE,cAAY,WAAU;AAAC,eAAO,KAAK,MAAMjB,CAAC,EAAE;AAAA,MAAE,GAAEiB,EAAE,UAAQ,WAAU;AAAC,eAAOlB,EAAE,KAAK,EAAE;AAAA,MAAC,GAAEkB,EAAE,SAAO,SAAS7I,GAAEyG,GAAE;AAAC,YAAG,CAACzG;AAAE,iBAAO,KAAK;AAAG,YAAI6G,IAAE,KAAK,SAAQ8B,IAAEG,EAAE9I,GAAEyG,GAAE,EAAE;AAAE,eAAOkC,MAAI9B,EAAE,KAAG8B,IAAG9B;AAAA,MAAC,GAAEgC,EAAE,QAAM,WAAU;AAAC,eAAO5B,EAAE,EAAE,KAAK,IAAG,IAAI;AAAA,MAAC,GAAE4B,EAAE,SAAO,WAAU;AAAC,eAAO,IAAI,KAAK,KAAK,SAAS;AAAA,MAAC,GAAEA,EAAE,SAAO,WAAU;AAAC,eAAO,KAAK,QAAS,IAAC,KAAK,gBAAc;AAAA,MAAI,GAAEA,EAAE,cAAY,WAAU;AAAC,eAAO,KAAK,GAAG,YAAa;AAAA,MAAA,GAAEA,EAAE,WAAS,WAAU;AAAC,eAAO,KAAK,GAAG,YAAa;AAAA,MAAA,GAAE3B;AAAA,IAAC,KAAIG,IAAEwC,EAAE;AAAU,WAAOK,GAAE,YAAU7C,GAAE,CAAC,CAAC,OAAMsB,CAAC,GAAE,CAAC,MAAKjC,CAAC,GAAE,CAAC,MAAKK,CAAC,GAAE,CAAC,MAAKc,CAAC,GAAE,CAAC,MAAK8H,CAAC,GAAE,CAAC,MAAK/H,CAAC,GAAE,CAAC,MAAKE,CAAC,GAAE,CAAC,MAAKc,CAAC,CAAC,EAAE,QAAS,SAAS5I,GAAE;AAAC,MAAAqH,EAAErH,EAAE,CAAC,CAAC,IAAE,SAASyG,GAAE;AAAC,eAAO,KAAK,GAAGA,GAAEzG,EAAE,CAAC,GAAEA,EAAE,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC,IAAIkK,GAAE,SAAO,SAASlK,GAAEyG,GAAE;AAAC,aAAOzG,EAAE,OAAKA,EAAEyG,GAAEoD,GAAEK,EAAC,GAAElK,EAAE,KAAG,KAAIkK;AAAA,IAAC,GAAEA,GAAE,SAAOpB,GAAEoB,GAAE,UAAQI,GAAEJ,GAAE,OAAK,SAASlK,GAAE;AAAC,aAAOkK,GAAE,MAAIlK,CAAC;AAAA,IAAC,GAAEkK,GAAE,KAAGvC,EAAEW,CAAC,GAAE4B,GAAE,KAAGvC,GAAEuC,GAAE,IAAE,IAAGA;AAAA,EAAC,CAAC;;;;;;ACAr/N,GAAC,SAASlK,GAAE0G,GAAE;AAAsD,IAAA+I,EAAA,UAAe/I,EAA8H;AAAA,EAAA,GAAEgJ,IAAM,WAAU;AAAc,QAAI1P,IAAE,UAAS0G,IAAE,wBAAuBD,IAAE;AAAe,WAAO,SAAS,GAAE+B,GAAE3B,GAAE;AAAC,UAAIgB,IAAEW,EAAE;AAAU,MAAA3B,EAAE,MAAI,SAAS7G,GAAE;AAAC,YAAI0G,IAAE,EAAC,MAAK1G,GAAE,KAAI,IAAG,MAAK,UAAS;AAAE,eAAO,IAAIwI,EAAE9B,CAAC;AAAA,MAAC,GAAEmB,EAAE,MAAI,SAASnB,GAAE;AAAC,YAAID,IAAEI,EAAE,KAAK,OAAQ,GAAC,EAAC,QAAO,KAAK,IAAG,KAAI,GAAE,CAAC;AAAE,eAAOH,IAAED,EAAE,IAAI,KAAK,UAAS,GAAGzG,CAAC,IAAEyG;AAAA,MAAC,GAAEoB,EAAE,QAAM,WAAU;AAAC,eAAOhB,EAAE,KAAK,OAAQ,GAAC,EAAC,QAAO,KAAK,IAAG,KAAI,GAAE,CAAC;AAAA,MAAC;AAAE,UAAIL,IAAEqB,EAAE;AAAM,MAAAA,EAAE,QAAM,SAAS7H,GAAE;AAAC,QAAAA,EAAE,QAAM,KAAK,KAAG,KAAI,KAAK,OAAM,EAAG,EAAEA,EAAE,OAAO,MAAI,KAAK,UAAQA,EAAE,UAASwG,EAAE,KAAK,MAAKxG,CAAC;AAAA,MAAC;AAAE,UAAI2I,IAAEd,EAAE;AAAK,MAAAA,EAAE,OAAK,WAAU;AAAC,YAAG,KAAK,IAAG;AAAC,cAAI7H,IAAE,KAAK;AAAG,eAAK,KAAGA,EAAE,eAAgB,GAAC,KAAK,KAAGA,EAAE,YAAa,GAAC,KAAK,KAAGA,EAAE,WAAY,GAAC,KAAK,KAAGA,EAAE,UAAW,GAAC,KAAK,KAAGA,EAAE,YAAa,GAAC,KAAK,KAAGA,EAAE,cAAe,GAAC,KAAK,KAAGA,EAAE,iBAAgB,KAAK,MAAIA,EAAE,mBAAkB;AAAA,QAAE;AAAM,UAAA2I,EAAE,KAAK,IAAI;AAAA,MAAC;AAAE,UAAIgH,IAAE9H,EAAE;AAAU,MAAAA,EAAE,YAAU,SAASd,GAAEyB,GAAE;AAAC,YAAI3B,IAAE,KAAK,OAAM,EAAG;AAAE,YAAGA,EAAEE,CAAC;AAAE,iBAAO,KAAK,KAAG,IAAEF,EAAE,KAAK,OAAO,IAAE8I,EAAE,KAAK,IAAI,IAAE,KAAK;AAAQ,YAAa,OAAO5I,KAAjB,aAAqBA,IAAE,SAAS/G,GAAE;AAAC,UAASA,MAAT,WAAaA,IAAE;AAAI,cAAI+G,IAAE/G,EAAE,MAAM0G,CAAC;AAAE,cAAG,CAACK;AAAE,mBAAO;AAAK,cAAIyB,KAAG,KAAGzB,EAAE,CAAC,GAAG,MAAMN,CAAC,KAAG,CAAC,KAAI,GAAE,CAAC,GAAEI,IAAE2B,EAAE,CAAC,GAAEX,IAAE,KAAG,CAACW,EAAE,CAAC,IAAG,CAACA,EAAE,CAAC;AAAE,iBAAWX,MAAJ,IAAM,IAAQhB,MAAN,MAAQgB,IAAE,CAACA;AAAA,QAAC,EAAEd,CAAC,GAASA,MAAP;AAAU,iBAAO;AAAK,YAAIc,IAAE,KAAK,IAAId,CAAC,KAAG,KAAG,KAAGA,IAAEA,GAAEP,IAAE;AAAK,YAAGgC;AAAE,iBAAOhC,EAAE,UAAQqB,GAAErB,EAAE,KAAOO,MAAJ,GAAMP;AAAE,YAAOO,MAAJ,GAAM;AAAC,cAAI4B,IAAE,KAAK,KAAG,KAAK,OAAM,EAAG,sBAAoB,KAAG,KAAK,UAAW;AAAC,WAACnC,IAAE,KAAK,MAAK,EAAG,IAAIqB,IAAEc,GAAE3I,CAAC,GAAG,UAAQ6H,GAAErB,EAAE,GAAG,eAAamC;AAAA,QAAC;AAAM,UAAAnC,IAAE,KAAK;AAAM,eAAOA;AAAA,MAAC;AAAE,UAAIsB,IAAED,EAAE;AAAO,MAAAA,EAAE,SAAO,SAAS7H,GAAE;AAAC,YAAI0G,IAAE1G,MAAI,KAAK,KAAG,2BAAyB;AAAI,eAAO8H,EAAE,KAAK,MAAKpB,CAAC;AAAA,MAAC,GAAEmB,EAAE,UAAQ,WAAU;AAAC,YAAI7H,IAAE,KAAK,SAAS,EAAE,KAAK,OAAO,IAAE,IAAE,KAAK,WAAS,KAAK,GAAG,gBAAc,KAAK,GAAG,kBAAmB;AAAE,eAAO,KAAK,GAAG,YAAU,MAAIA;AAAA,MAAC,GAAE6H,EAAE,QAAM,WAAU;AAAC,eAAM,CAAC,CAAC,KAAK;AAAA,MAAE,GAAEA,EAAE,cAAY,WAAU;AAAC,eAAO,KAAK,OAAM,EAAG;MAAa,GAAEA,EAAE,WAAS,WAAU;AAAC,eAAO,KAAK,OAAM,EAAG,YAAW;AAAA,MAAE;AAAE,UAAIE,IAAEF,EAAE;AAAO,MAAAA,EAAE,SAAO,SAAS7H,GAAE;AAAC,eAAYA,MAAN,OAAS,KAAK,UAAQ6G,EAAE,KAAK,OAAO,yBAAyB,CAAC,EAAE,OAAM,IAAGkB,EAAE,KAAK,IAAI;AAAA,MAAC;AAAE,UAAIH,IAAEC,EAAE;AAAK,MAAAA,EAAE,OAAK,SAAS7H,GAAE0G,GAAED,GAAE;AAAC,YAAGzG,KAAG,KAAK,OAAKA,EAAE;AAAG,iBAAO4H,EAAE,KAAK,MAAK5H,GAAE0G,GAAED,CAAC;AAAE,YAAIM,IAAE,KAAK,MAAK,GAAGyB,IAAE3B,EAAE7G,CAAC,EAAE;AAAQ,eAAO4H,EAAE,KAAKb,GAAEyB,GAAE9B,GAAED,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC,CAAC;;;;ACO1sEmJ,GAAM,OAAOC,EAAG;AAEhB,MAAMC,KAAS,YACTC,KAAS,uBAEFC,KAAe,+BACfC,KAAe,+BAEfC,KAAU,MACdN,GAAM,EAAE,IAAI,EAAE,OAAO,GAGjBO,KAAiB,CAACC,MACtBR,GAAMQ,CAAO,EAAE,UAEXC,KAAmB,MACvBxO,GAAY+N,GAAM,EAAE,IAAI,EAAE,KAAM,CAAA,GAG5BU,KAAc,CAACC,IAA0B,IAAMC,IAAgB,OACtED,KAA2B,CAACC,IAAsBZ,GAAQ,EAAA,IAAA,EAAM,OAAO,qBAAqB,IAAIE,KAChGS,KAA2BC,IAAsBZ,GAAQ,EAAA,IAAA,EAAM,OAAO,qBAAqB,IAAIE,KAC/F,CAACS,KAA2BC,IAAsBZ,GAAQ,EAAA,IAAA,EAAM,OAAO,4BAA4B,IAAI,MACpGA,GAAQ,EAAA,IAAA,EAAM,OAAO,4BAA4B,IAAI,KAGjDa,KAAqB,CAACC,IAAO,MACpCA,MAAS,IACJd,GAAA,EAAQ,QAAQ,KAAK,EAAE,IAAI,EAAE,OAAOG,EAAM,IAAID,KAEhDF,GAAM,EAAE,IAAIc,GAAM,MAAM,EAAE,QAAQ,KAAK,EAAE,IAAM,EAAA,OAAOX,EAAM,IAAID,IAG5Da,KAAmB,CAACD,IAAO,MAClCA,MAAS,IACJd,GAAA,EAAQ,MAAM,KAAK,EAAE,IAAI,EAAE,OAAOG,EAAM,IAAID,KAE9CF,GAAM,EAAE,IAAIc,GAAM,MAAM,EAAE,MAAM,KAAK,EAAE,IAAM,EAAA,OAAOX,EAAM,IAAID,IAG1Dc,KAAoB,CAACC,IAAU,GAAGC,IAAoB,UAC7DA,MAAS,SAAMA,wBAAW,SAC1BD,MAAY,IAAUC,IACtBD,IAAU,IAAUjB,GAAMkB,CAAI,EAAE,IAAID,GAAS,SAAS,EAAE,WACxDA,IAAU,IAAUjB,GAAMkB,CAAI,EAAE,SAAS,KAAK,IAAID,CAAO,GAAG,SAAS,EAAE,WACpEC,IAGIC,KAAY,CAACD,MACjBlB,GAAMkB,CAAI,EAAE,IAAM,EAAA,OAAO,qBAAqB,IAAIhB,IAG9CkB,KAAU,MACdpB,GAAM,EAAE,IAAI,EAAE,OAAO,MAAM,GAGvBqB,KAAiB,CAC5Bb,GACAc,IAAgB,OAEZd,MAAYH,MAAgBG,MAAYJ,MAAgBI,MAAY,MAAM1P,GAAO0P,CAAO,KAAK7P,EAAY6P,CAAO,IAC3Gc,IACFtB,GAAMQ,CAAO,EAAE,OAAO,kBAAkB,GAGpCe,KAAmB,CAACf,GAA4Dc,IAAgB,OAAO;AAEhH,MAAAd,MAAYH,MACZG,MAAYJ,MACZI,MAAY,MACZ1P,GAAO0P,CAAO,KACd7P,EAAY6P,CAAO;AAEZ,WAAAc;AAET,MAAIE,IAAc,IACdC,IAAkB;AAChB,QAAAP,IAAOlB,GAAMQ,CAAO,GACpBkB,IAAM1B;AAOR,SANA0B,EAAI,OAAO,MAAM,MAAMR,EAAK,OAAO,MAAM,MAC7BM,IAAA,KAEZE,EAAI,OAAO,YAAY,MAAMR,EAAK,OAAO,YAAY,MACrCO,IAAA,KAEhB,CAACD,KAAe,CAACC,IAAwBzB,GAAMkB,CAAI,EAAE,OAAO,MAAM,IACjEM,IACExB,GAAMkB,CAAI,EAAE,OAAO,eAAe,IADhBlB,GAAMkB,CAAI,EAAE,OAAO,WAAW;AAEzD,GAEaS,KAAa,CAACnB,GAA4Dc,IAAgB,OACjGd,MAAYH,MAAgBG,MAAYJ,MAAgBI,MAAY,MAAM1P,GAAO0P,CAAO,KAAK7P,EAAY6P,CAAO,IAC3Gc,IACFtB,GAAMQ,CAAO,EAAE,OAAO,YAAY,GAG9BoB,KAAa,CAACpB,GAA4Dc,IAAgB,OACjGd,MAAYH,MAAgBG,MAAYJ,MAAgBI,MAAY,MAAM1P,GAAO0P,CAAO,KAAK7P,EAAY6P,CAAO,IAC3Gc,IACFtB,GAAMQ,CAAO,EAAE,OAAO,OAAO,GAGzBqB,KAAW,CAACC,GAAaC,GAAaC,IAA+B,SAAS;AACnF,QAAAC,IAAajC,GAAM8B,CAAK,GACxBI,IAAalC,GAAM+B,CAAK;AACvB,SAAAE,EAAW,KAAKC,GAAYF,CAAI;AACzC;;;;;;;;;;;;;;AC1GA,UAAM9R,IAAQC,GAYRgS,IAAY5R,EAAS,MAClB8Q,GAAenR,EAAM,KAAK,SAAS,CAC3C,GACKkS,IAAa7R,EAAS,MACnB8Q,GAAenR,EAAM,KAAK,UAAU,CAC5C,GAEK,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;ACXE,SAAAgS,GAA0BpO,GAAiBE,GAAkB;AACpE,SAAA,CAACqC,IAAyC,OAAkB;AACjE,UAAM8H,IAAU3N,EAAY6F,EAAQ,OAAO,IAAI,OAAOA,EAAQ;AAE9D,QAAI8L,IAAe3R,EAAY6F,EAAQ,OAAO,IAAI,OAAOA,EAAQ;AACjE,IAAI7F,EAAY6F,EAAQ,OAAO,KAAK8H,MAAY,SAC9CgE,IAAe,CAAA;AAEjB,QAAIC,IAAS/L,EAAQ;AACrB,WAAI7F,EAAY4R,CAAM,KAAKtO,KAAUE,KAAWqC,EAAQ,SACtD+L,IAAStO,IAAS,MAAME,IAAU,aAAaqC,EAAQ,OAGlD;AAAA,MACL,SAAA8H;AAAA,MACA,QAAAiE;AAAA,MACA,SAASD;AAAA,MACT,OAAO3R,EAAY6F,EAAQ,KAAK,IAAI,KAAKA,EAAQ;AAAA,MACjD,UAAUvF,GAAQqR,CAAY;AAAA,MAC9B,WAAW3R,EAAY6F,EAAQ,SAAS,IAAI,KAAQA,EAAQ;AAAA,MAC5D,SAAS7F,EAAY6F,EAAQ,OAAO,IAAI,KAAQA,EAAQ;AAAA,MACxD,OAAO7E,GAAU2Q,CAAY;AAAA,MAC7B,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ;AAEO,SAASE,KAAmB;AAC3B,QAAAC,IAAW,CAACC,MAAmB;AACnC,IAAAA,EAAO,QAAQA,EAAO,SACtBA,EAAO,QAAQ;AAAA,EAAA,GAGXC,IAAW,CAACC,MAAyB;AACzC,eAAWC,KAAcD;AACd,MAAAH,EAAAG,EAAUC,CAAU,CAAC;AAAA,EAChC,GAGIC,IAAiB,CAACF,MAAyB;AAC/C,eAAWC,KAAcD;AACb,MAAAA,EAAAC,CAAU,EAAE,QAAQ;AAAA,EAChC;AAeK,SAAA;AAAA,IACL,gBAAAC;AAAA,IACA,UAAAH;AAAA,IACA,UAAAF;AAAA,IACA,aAhBkB,CAACG,GAAsBG,GAAwBC,MAAmB;AACpF,MAAAL,EAASC,CAAS,GAClBG,EAAW,OAAO,GACdC,KAAmBA;IAAA;AAAA,IAcvB,cAXmB,CAACJ,GAAsBG,GAAwBC,MAAwB;AAC1F,MAAAF,EAAeF,CAAS,GACxBG,EAAW,OAAO,GACTC;IAAA;AAAA,EAQT;AAEJ;;;;;;;;;;ACxEA,UAAM9S,IAAQC,GAWR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOmE,EAAS,CAAG;AAAA,MAC3E;AAAA,IAAA,CACD,GAEK,EAAE,UAAAoO,MAAaD,MAEf,EAAE,GAAApS,MAAMC,MAER4S,IAAQ1S,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEKgT,IAAsB3S,EAAS,MAC9BI,EAAYT,EAAM,WAAW,IAC9BA,EAAM,WAAW,YAAY,eAAqBE,EAAE,2CAA2C,IAC/FF,EAAM,WAAW,YAAY,OAAaE,EAAE,mCAAmC,IAC/EF,EAAM,WAAW,YAAY,cAAcA,EAAM,WAAW,YAAY,WACnEE,EAAE,yCAAyC,IAC7C,KALqCF,EAAM,WAMnD;;;;;;;;;;;;;;;;;;;;;;;ACtCD,UAAMA,IAAQC,GAoBRgT,IAAQhN,EAAI,EAAE,GACd,EAAE,UAAAiN,GAAU,YAAAC,GAAY,aAAAC,GAAa,WAAAC,GAAW,iBAAAC,EAAgB,IAAIC,GAAOvT,CAAK,GAChF,EAAE,GAAAE,MAAMC,MAERqT,IAAe,CAAChB,MACb,CAAC/R,EAAY+R,CAAM,KAAK,CAAC/R,EAAY+R,EAAO,KAAK,GAEpD,EAAE,UAAAD,MAAaD,MACfmB,IAAgB,CAACjB,MAAgD;AACjE,MAAAgB,EAAahB,CAAM,KACrBD,EAASC,EAAO,KAAK;AAAA,IACvB,GAEIkB,IAAuB,CAACC,IAAoD,WAAc;;AAC9F,QAAItP,IAAAsP,KAAA,gBAAAA,EAAc,UAAd,gBAAAtP,EAAqB,cAAWE,IAAA2O,KAAA,gBAAAA,EAAU,UAAV,gBAAA3O,EAAiB,WACnDkP,EAAcP,CAAQ,KAEpB/G,IAAAwH,KAAA,gBAAAA,EAAc,UAAd,gBAAAxH,EAAqB,cAAWyH,IAAAR,KAAA,gBAAAA,EAAa,UAAb,gBAAAQ,EAAoB,WACtDH,EAAcL,CAAW,KAEvBS,IAAAF,KAAA,gBAAAA,EAAc,UAAd,gBAAAE,EAAqB,cAAWC,KAAAX,KAAA,gBAAAA,EAAY,UAAZ,gBAAAW,GAAmB,WACrDL,EAAcN,CAAU,KAEtBY,IAAAJ,KAAA,gBAAAA,EAAc,UAAd,gBAAAI,EAAqB,cAAWC,IAAAX,KAAA,gBAAAA,EAAW,UAAX,gBAAAW,EAAkB,WACpDP,EAAcJ,CAAS,GAEpB5S,EAAY6S,CAAe,MACdW,IAAAX,EAAA,UAAA,QAAAW,EAAO,QAAQ,CAACzB,MAAgB;;AAC9C,UAAInO,IAAAsP,KAAA,gBAAAA,EAAc,UAAd,gBAAAtP,EAAqB,YAAWmO,EAAO,UACzCD,EAASC,CAAM;AAAA,MACjB;AAAA,IAEJ,GAEI0B,IAA0CjO,EAAI,MAAS;AAC7D,IAAAX,GAAM4O,GAAgB,MAAM;AACtB,UAAAV,EAAaU,CAAc,GAAG;AACjB,QAAAA,EAAA,MAAM,QAAQjB,EAAM,OACnCkB,EAAc,QAAQD,EAAe,OACrCR,EAAqBQ,CAAc;AACnC;AAAA,MACF;AACA,MAAAE,EAAWnB,EAAM,KAAK;AAAA,IAAA,CACvB;AACK,UAAAkB,IAAyClO,EAAI,MAAS;AACtD,IAAAX,GAAA2N,GAAO,CAACoB,MAAqB;AACjC,MAAAD,EAAWC,CAAQ;AAAA,IAAA,CACpB;AACK,UAAAD,IAAa,CAACC,MAAqB;AACnC,UAAAb,EAAaU,CAAc,GAAG;AAChC,QAAAA,EAAe,MAAM,QAAQG;AAC7B;AAAA,MACF;AACM,YAAA7B,IAAS8B,EAAiBD,CAAQ;AACpC,MAAC5T,EAAY+R,CAAM,MACrBA,EAAO,QAAQ6B,IAEjBF,EAAc,QAAQ3B,GACtBkB,EAAqBS,CAAa;AAAA,IAAA,GAE9BG,IAAmB,CAACD,MAAyC;AAC7D,UAAAlT,GAAMkT,CAAQ,KACZb,EAAaN,CAAQ;AACvB,eAAOA,EAAS;AAGhB,UAAAhS,GAAQmT,CAAQ,KACdb,EAAaJ,CAAW;AAC1B,eAAOA,EAAY;AAGvB,UAAItS,GAASuT,CAAQ,KAAKA,EAAS,SAAS,GAAG;AAC7C,YAAIb,EAAaH,CAAS,KAAKgB,EAAS,WAAW,MAAM;AACvD,iBAAOhB,EAAU;AAEf,YAAAG,EAAaL,CAAU;AACzB,iBAAOA,EAAW;AAAA,MAEtB;AAAA,IACO,GAGHJ,IAAQ1S,EAAS,MAAM;AACvB,UAAAmT,EAAaU,CAAc;AAC7B,eAAOhU,EAAEgU,EAAe,MAAM,UAAU,EAAE;AAExC,UAAAV,EAAaW,CAAa;AAC5B,eAAOjU,EAAEiU,EAAc,MAAM,UAAU,EAAE;AAE3C,YAAMI,IAAe,CAAA;AACjB,aAAAf,EAAaN,CAAQ,KACvBqB,EAAa,KAAKrU,EAAEgT,EAAS,MAAM,UAAU,EAAE,CAAC,GAE9CM,EAAaJ,CAAW,KAC1BmB,EAAa,KAAKrU,EAAEkT,EAAY,MAAM,UAAU,EAAE,CAAC,GAEjDI,EAAaH,CAAS,KACxBkB,EAAa,KAAKrU,EAAEmT,EAAU,MAAM,UAAU,EAAE,CAAC,GAE/CG,EAAaL,CAAU,KACzBoB,EAAa,KAAKrU,EAAEiT,EAAW,MAAM,UAAU,EAAE,CAAC,GAE7CoB,EAAa,KAAK,GAAG;AAAA,IAAA,CAC7B,GAEKC,IAAqBnU,EAAS,MAAM;;AACxC,cAAOgE,IAAA8P,EAAc,UAAd,gBAAA9P,EAAqB;AAAA,IAAA,CAC7B;AACK,IAAAiB,GAAAkP,GAAoB,CAACH,MAAa;AACtC,MAAI,CAAC7S,GAAQyR,EAAM,KAAK,KAAKzR,GAAQ6S,CAAQ,MAC3CpB,EAAM,QAAQ;AAAA,IAChB,CACD;AAEK,UAAAD,IAAsB3S,EAAS,MAAM;;AACrC,aAACI,EAAYT,EAAM,WAAW,MAC9BqE,IAAA8P,EAAc,UAAd,gBAAA9P,EAAqB,aAAY,eAAqBnE,EAAE,2CAA2C,MACnGqE,IAAA4P,EAAc,UAAd,gBAAA5P,EAAqB,aAAY,OAAarE,EAAE,mCAAmC,MACnFiM,IAAAgI,EAAc,UAAd,gBAAAhI,EAAqB,aAAY,gBAAcyH,IAAAO,EAAc,UAAd,gBAAAP,EAAqB,aAAY,WAC3E1T,EAAE,yCAAyC,IAC7C,KALqCF,EAAM;AAAA,IAK3C,CACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9ID,UAAMA,IAAQC,GASR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAO+B,GAAYoC,IAAW,EAAE,EAAK,CAAA;AAAA,MAC7F;AAAA,IAAA,CACD,GAEK,EAAE,UAAAoO,MAAaD,MAEf,EAAE,GAAApS,MAAMC,MAER4S,IAAQ1S,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D;;;;;;;;;;ICnCYyU,KAAiB,CAACC,MAAwB;AACjD,GAAAA,KAAA,gBAAAA,EAAO,0BAAyB,eAClCA,EAAM,cAAc;AAExB;;;;;;;;;ACaA,UAAM7Q,IAAOC,GAIPkC,IAASC,EAAI,EAAK,GAElB0O,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACb1O,EAAA,QAAQ,CAACA,EAAO,OACvBnC,EAAK,gBAAgB;AAAA,IAAA,GAGjB+Q,IAAOvU,EAAS,MACb2F,EAAO,QAAQ,0BAA0B,yBACjD,GAEK,EAAE,GAAA9F,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfd,UAAM0D,IAAOC,GAIP6Q,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB7Q,EAAK,QAAQ;AAAA,IAAA,GAGT,EAAE,GAAA3D,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;ACXd,UAAM0D,IAAOC,GAIP6Q,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB7Q,EAAK,OAAO;AAAA,IAAA,GAGR,EAAE,GAAA3D,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLd,UAAM0D,IAAOC,GAIP+Q,IAAc,MAAM;AACxB,MAAAhR,EAAK,aAAa;AAAA,IAAA,GAGdiR,IAAiB7O,EAAI,EAAK,GAE1B8O,IAAuB,MAAM;AAClB,MAAAD,EAAA,QAAQ,CAACA,EAAe;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3B7B,IAAAE,uBAAAA,OACVA,EAAAA,EAAA,OAAO,CAAP,IAAA,QACAA,EAAAA,EAAA,aAAa,CAAb,IAAA,cACAA,EAAAA,EAAA,QAAQ,CAAR,IAAA,SACAA;AAAAA,EAAAA,EAAA,UAAU;AAAA;AAAV,IAAA,WAJUA,IAAAA,MAAA,CAAA,CAAA;AAOL,SAASC,KAAW;AACnB,QAAA,EAAE,MAAM9U,MAER+U,IAAejP,EAAgC;AAAA,IACnD;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,8BAA8B;AAAA,MACvC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,oCAAoC;AAAA,MAC7C,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,+BAA+B;AAAA,MACxC,OAAO;AAAA,IACT;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,cAAAiP;AAAA,IACA,gBANqB,CAACxU,MACfwU,EAAa,MAAM,KAAK,CAAC1Q,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAK7D;AAEJ;;;;;;;;;ACpCA,UAAMV,IAAQC,GAIR4D,IAAOC,GAGPqR,IAAgB9U,EAAS;AAAA,MAC7B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAIoV,GAAU;AACZ,QAAAvR,EAAK,UAAUuR,CAAQ;AAAA,MACzB;AAAA,IAAA,CACD,GACK,EAAE,gBAAAC,MAAmBJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACff,IAAAK,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,QAAQ,SACRA,EAAA,OAAO,QACPA,EAAA,eAAe,WACfA,EAAA,UAAU,WALAA,IAAAA,MAAA,CAAA,CAAA;AAQL,SAASC,KAAiB;AACzB,QAAA,EAAE,MAAMpV,MAERqV,IAAqBvP,EAAsC;AAAA,IAC/D;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,oCAAoC;AAAA,IAC/C;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,qCAAqC;AAAA,IAChD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,oCAAoC;AAAA,IAC/C;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,4CAA4C;AAAA,IACvD;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,oBAAAuP;AAAA,IACA,sBAN2B,CAAC9U,MACrB8U,EAAmB,MAAM,KAAK,CAAChR,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKnE;AAEJ;;;;;;;;;;;ACrCA,UAAMV,IAAQC,GAKR,EAAE,gBAAAoV,MAAmBJ,MACrBQ,IAAcpV,EAAS,MAAMgV,EAAerV,EAAM,KAAK,CAAC,GAExD,EAAE,sBAAA0V,MAAyBH,MAC3BI,IAAoBtV,EAAS,MAAMqV,EAAqB1V,EAAM,WAAW,CAAC;;;;;;;;;;;;;;;;;ICZnE4V,KAAmB,CAAIC,MAAW;AACvC,QAAAC,IAAY,OAAO,oBAAoBD,CAAG;AAChD,aAAWzS,KAAQ0S,GAAW;AACtB,UAAApV,IAASmV,EAAYzS,CAAI;AAC3B,IAAA1C,KAAS,OAAOA,KAAU,YAC5BkV,GAAiBlV,CAAK;AAAA,EAE1B;AACO,SAAA,OAAO,OAAOmV,CAAG;AAC1B,GAEaE,KAAkB,CAAIF,MAC1B,OAAO,KAAKA,CAAG,EAAE,IAAI,CAACtO,MAAMsO,EAAItO,CAAC,CAAC,GAG9ByO,KAAuB,CAAUH,GAAUnR,GAAcuR,IAAY,QAAQ;AAClF,QAAA,IAAIvR,EAAK,MAAMuR,CAAS;AAC9B,MAAIvP,IAAImP;AACR,SAAO,EAAE,UAAQ;AACT,UAAA9O,IAAI,EAAE;AACZ,QAAItG,EAAYsG,CAAC,KAAK,EAAEA,KAAKL;AAAI;AACjC,IAAAA,IAAIA,EAAEK,CAAC;AAAA,EACT;AACO,SAAAL;AACT,GAEawP,KAAuB,CAACL,GAAUnR,GAAchE,GAAYuV,IAAY,QAAQ;AACrF,QAAApG,IAAInL,EAAK,MAAMuR,CAAS;AAC9B,MAAIvP,IAAImP;AACD,SAAAhG,EAAE,SAAS,KAAG;AACb,UAAA,IAAIA,EAAE;AACZ,QAAIpP,EAAY,CAAC;AAAG;AACpB,IAAM,KAAKiG,MAAMA,EAAA,CAAC,IAAI,KACtBA,IAAIA,EAAE,CAAC;AAAA,EACT;AACE,EAAAA,EAAAmJ,EAAE,CAAC,CAAC,IAAInP;AACZ;AAEO,SAASyV,GAA8BN,GAAQnR,GAAcuR,IAAY,KAAQ;AAChF,QAAAG,IAAY1R,EAAK,MAAMuR,CAAS,GAChCI,IAAYD,EAAU,SAAS;AAE5B,WAAAE,EAAQT,GAAUxT,IAAQ,GAAG;AAC9B,UAAAU,IAAMqT,EAAU/T,CAAK;AAE3B,QAAIA,MAAUgU,GAAW;AACvB,aAAOR,EAAI9S,CAAG;AACd;AAAA,IACF;AAEA,IAAAuT,EAAQT,EAAI9S,CAAG,GAAGV,IAAQ,CAAC;AAAA,EAC7B;AAEA,SAAAiU,EAAQT,CAAG,GACJA;AACT;AClDa,MAAAU,KAAe,CAAC7V,MACpBW,GAASX,CAAK,KAAK,OAAO,OAAOA,GAAO,QAAQ,GCF5C8V,KAAmB,CAAC9V,MACxB,OAAO,OAAOA,GAAO,WAAW,GCG5B+V,KAAmB;AAQzB,SAASC,GAAsCpQ,GAA6B;AACjF,QAAMqQ,IAAelW,EAAY6F,CAAO,KAAK7F,EAAY6F,EAAQ,aAAa,GACxEsQ,KACJtQ,KAAA,gBAAAA,EAAS,iBACRqQ,IAAgB3S,GAAOP,IAAmB,MAAS,IAAoC,SACpFoT,KACJvQ,KAAA,gBAAAA,EAAS,uBACRqQ,IAAgB3S,GAAON,IAAyB,MAAS,IAA0B,SAEhFoT,IAAM,CAACC,GAAQ9S,MAA8B;AACjD,QAAIxD,EAAYmW,CAAW;AACnB,YAAA,IAAI,MAAM,gGAAgG;AAClH,QAAIjW,GAAUkW,CAAiB,KAAKlW,GAAUkW,EAAkB,GAAG;AAAU,aAAAA,EAAkB,IAAIE,GAAK9S,CAAO;AAC/G,QAAIxD,EAAYmW,EAAY,KAAK,KAAKA,EAAY,MAAM,OAAO;AAAU,aAAA;AACzE,QAAIA,EAAY,MAAM,MAAM,SAASH,EAAgB;AAAU,aAAA;AAC/D,UAAMO,IAAahB,GAAqBY,EAAY,OAAO,yBAAyBG,CAAG;AACvF,QAAItW,EAAYuW,CAAU;AAAU,aAAA;AACpC,YAAQA,GAAY;AAAA,MAClB,KAAKhC,GAAM;AACF,eAAA;AAAA,MACT,KAAKA,GAAM;AACF,eAAA;AAAA,MACT,KAAKA,GAAM;AACT,YAAIvU,EAAYwD,CAAO;AACrB,gBAAM,IAAI,MAAM,6BAA6B8S,CAAG,mDAAmD;AACrG,eAAOE,EAAShT,CAAO;AAAA,MACzB;AACS,eAAA;AAAA,IACX;AAAA,EAAA;AAGF,WAASgT,EAAShT,GAAiB;AACjC,QAAIxD,EAAYmW,CAAW;AACnB,YAAA,IAAI,MAAM,gGAAgG;AAClH,QAAI,CAACnW,EAAYoW,CAAiB,KAAK,CAACpW,EAAYoW,EAAkB,QAAQ;AACrE,aAAAA,EAAkB,SAAS5S,CAAO;AAC3C,QAAI2S,EAAY,OAAO;AACjB,UAAAL,GAAatS,CAAO;AACtB,eAAOA,EAAQ,OAAO,SAAS2S,EAAY,MAAM,EAAE;AAEjD,UAAAJ,GAAiBvS,CAAO;AACnB,eAAAA,EAAQ,cAAc2S,EAAY,MAAM;AAAA,IAEnD;AACO,WAAA;AAAA,EACT;AAoBO,SAAA;AAAA,IACL,KAAAE;AAAA,IACA,WApBgB,CAACI,GAAWjT,MACxBiT,EAAK,WAAW,IACX,KAEFA,EAAK,MAAM,CAACH,MACVD,EAAIC,GAAK9S,CAAO,CACxB;AAAA,IAeD,YAZiB,CAACiT,GAAWjT,MACzBiT,EAAK,WAAW,IACX,KAEFA,EAAK,KAAK,CAACH,MACTD,EAAIC,GAAK9S,CAAO,CACxB;AAAA,EAMD;AAEJ;;;;;;;;ACjFA,UAAMjE,IAAQC,GAUR2W,IAAc5S,GAAOP,EAAiB,GACtC,EAAE,KAAAqT,MAAQJ,MAEVS,IAAUlR,EAAa6Q,EAAI9W,EAAM,YAAYA,EAAM,OAAO,CAAC;AAEjE,WAAAsF,GAAMsR,GAAa,MAAM;AACvB,MAAAO,EAAQ,QAAQL,EAAI9W,EAAM,YAAYA,EAAM,OAAO;AAAA,IAAA,CACpD;;;;;;;;;ACnBD,UAAMA,IAAQC,GAURmX,IAAS/W,EAAS,MACf8Q,GAAenR,EAAM,UAAUA,EAAM,aAAa,CAC1D;;;;ACjBM,IAAIqX,KAAQ;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GACWC,KAAW;AAAA,EAClB,UAAU,CAAE;AAAA,EACZ,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,eAAe;AAAA,EACf,SAAS,OAAO,UAAW,YACvB,OAAO,UAAU,UAAU,QAAQ,MAAM,MAAM;AAAA,EACnD,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,SAAS,CAAE;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,cAAc,SAAUC,GAAK;AACzB,WAAO,OAAO,UAAY,OAAe,QAAQ,KAAKA,CAAG;AAAA,EAC5D;AAAA,EACD,SAAS,SAAUC,GAAW;AAC1B,QAAIxG,IAAO,IAAI,KAAKwG,EAAU,QAAS,CAAA;AACvC,IAAAxG,EAAK,SAAS,GAAG,GAAG,GAAG,CAAC,GACxBA,EAAK,QAAQA,EAAK,QAAS,IAAG,KAAMA,EAAK,OAAQ,IAAG,KAAK,CAAE;AAC3D,QAAIyG,IAAQ,IAAI,KAAKzG,EAAK,eAAe,GAAG,CAAC;AAC7C,WAAQ,IACJ,KAAK,QAAQA,EAAK,QAAO,IAAKyG,EAAM,QAAO,KAAM,QAC7C,KACEA,EAAM,WAAW,KAAK,KACxB,CAAC;AAAA,EACZ;AAAA,EACD,eAAe;AAAA,EACf,sBAAsB,CAAE;AAAA,EACxB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,KAAK,oBAAI,KAAM;AAAA,EACf,UAAU,CAAE;AAAA,EACZ,SAAS,CAAE;AAAA,EACX,aAAa,CAAE;AAAA,EACf,WAAW,CAAE;AAAA,EACb,WAAW,CAAE;AAAA,EACb,eAAe,CAAE;AAAA,EACjB,QAAQ,CAAE;AAAA,EACV,eAAe,CAAE;AAAA,EACjB,SAAS,CAAE;AAAA,EACX,eAAe,CAAE;AAAA,EACjB,cAAc,CAAE;AAAA,EAChB,uBAAuB,CAAE;AAAA,EACzB,SAAS,CAAE;AAAA,EACX,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,uBAAuB;AAAA,EACvB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,aAAa;AAAA,EACb,MAAM;AACV,GClFWC,KAAU;AAAA,EACjB,UAAU;AAAA,IACN,WAAW,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,IAC3D,UAAU;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,EACJ;AAAA,EACD,QAAQ;AAAA,IACJ,WAAW;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,IACD,UAAU;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,EACJ;AAAA,EACD,aAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,EAC5D,gBAAgB;AAAA,EAChB,SAAS,SAAUC,GAAK;AACpB,QAAI1Q,IAAI0Q,IAAM;AACd,QAAI1Q,IAAI,KAAKA,IAAI;AACb,aAAO;AACX,YAAQA,IAAI,IAAE;AAAA,MACV,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IACd;AAAA,EACJ;AAAA,EACD,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,MAAM,CAAC,MAAM,IAAI;AAAA,EACjB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,WAAW;AACf,GCtEW2Q,KAAM,SAAUC,GAAQC,GAAQ;AACvC,SAAIA,MAAW,WAAUA,IAAS,KAC1B,QAAQD,GAAQ,MAAMC,IAAS,EAAE;AAC7C,GACWC,KAAM,SAAUC,GAAM;AAAE,SAAQA,MAAS,KAAO,IAAI;;AACxD,SAASC,GAASC,GAAIC,GAAM;AAC/B,MAAIjY;AACJ,SAAO,WAAY;AACf,QAAIkY,IAAQ,MACRC,IAAO;AACX,iBAAanY,CAAC,GACdA,IAAI,WAAW,WAAY;AAAE,aAAOgY,EAAG,MAAME,GAAOC,CAAI;AAAA,OAAMF,CAAI;AAAA,EAC1E;AACA;AACO,IAAIG,KAAW,SAAUzC,GAAK;AACjC,SAAOA,aAAe,QAAQA,IAAM,CAACA,CAAG;AAC5C;AChBO,SAAS0C,GAAYC,GAAMC,GAAWT,GAAM;AAC/C,MAAIA,MAAS;AACT,WAAOQ,EAAK,UAAU,IAAIC,CAAS;AACvC,EAAAD,EAAK,UAAU,OAAOC,CAAS;AACnC;AACO,SAASC,GAAcC,GAAKF,GAAWG,GAAS;AACnD,MAAIjS,IAAI,OAAO,SAAS,cAAcgS,CAAG;AACzC,SAAAF,IAAYA,KAAa,IACzBG,IAAUA,KAAW,IACrBjS,EAAE,YAAY8R,GACVG,MAAY,WACZjS,EAAE,cAAciS,IACbjS;AACX;AACO,SAASkS,GAAUC,GAAM;AAC5B,SAAOA,EAAK;AACR,IAAAA,EAAK,YAAYA,EAAK,UAAU;AACxC;AACO,SAASC,GAAWD,GAAME,GAAW;AACxC,MAAIA,EAAUF,CAAI;AACd,WAAOA;AACN,MAAIA,EAAK;AACV,WAAOC,GAAWD,EAAK,YAAYE,CAAS;AAEpD;AACO,SAASC,GAAkBC,GAAgBC,GAAM;AACpD,MAAIC,IAAUV,GAAc,OAAO,iBAAiB,GAAGW,IAAWX,GAAc,SAAS,cAAcQ,CAAc,GAAGI,IAAUZ,GAAc,QAAQ,SAAS,GAAGa,IAAYb,GAAc,QAAQ,WAAW;AAQjN,MAPI,UAAU,UAAU,QAAQ,UAAU,MAAM,KAC5CW,EAAS,OAAO,YAGhBA,EAAS,OAAO,QAChBA,EAAS,UAAU,SAEnBF,MAAS;AACT,aAASpW,KAAOoW;AACZ,MAAAE,EAAS,aAAatW,GAAKoW,EAAKpW,CAAG,CAAC;AAC5C,SAAAqW,EAAQ,YAAYC,CAAQ,GAC5BD,EAAQ,YAAYE,CAAO,GAC3BF,EAAQ,YAAYG,CAAS,GACtBH;AACX;AACO,SAASI,GAAe9E,GAAO;AAClC,MAAI;AACA,QAAI,OAAOA,EAAM,gBAAiB,YAAY;AAC1C,UAAIhQ,IAAOgQ,EAAM;AACjB,aAAOhQ,EAAK,CAAC;AAAA,IAChB;AACD,WAAOgQ,EAAM;AAAA,EAChB,QACa;AACV,WAAOA,EAAM;AAAA,EAChB;AACL;ACpDA,IAAI+E,KAAY,WAAY;GACjBC,KAAa,SAAUC,GAAaC,GAAW7O,GAAQ;AAAE,SAAOA,EAAO,OAAO6O,IAAY,cAAc,UAAU,EAAED,CAAW;AAAE,GACjIE,KAAY;AAAA,EACnB,GAAGJ;AAAA,EACH,GAAG,SAAUK,GAASC,GAAWhP,GAAQ;AACrC,IAAA+O,EAAQ,SAAS/O,EAAO,OAAO,SAAS,QAAQgP,CAAS,CAAC;AAAA,EAC7D;AAAA,EACD,GAAG,SAAUD,GAASE,GAAM;AACxB,IAAAF,EAAQ,UAAUA,EAAQ,SAAU,KAAI,KAAK,KAAK,KAAK,WAAWE,CAAI,CAAC;AAAA,EAC1E;AAAA,EACD,GAAG,SAAUF,GAASE,GAAM;AACxB,IAAAF,EAAQ,SAAS,WAAWE,CAAI,CAAC;AAAA,EACpC;AAAA,EACD,GAAG,SAAUF,GAASG,GAAK;AACvB,IAAAH,EAAQ,QAAQ,WAAWG,CAAG,CAAC;AAAA,EAClC;AAAA,EACD,GAAG,SAAUH,GAASI,GAAMnP,GAAQ;AAChC,IAAA+O,EAAQ,SAAUA,EAAQ,SAAU,IAAG,KACnC,KAAK/B,GAAI,IAAI,OAAOhN,EAAO,KAAK,CAAC,GAAG,GAAG,EAAE,KAAKmP,CAAI,CAAC,CAAC;AAAA,EAC3D;AAAA,EACD,GAAG,SAAUJ,GAASK,GAAYpP,GAAQ;AACtC,IAAA+O,EAAQ,SAAS/O,EAAO,OAAO,UAAU,QAAQoP,CAAU,CAAC;AAAA,EAC/D;AAAA,EACD,GAAG,SAAUL,GAASM,GAAS;AAC3B,IAAAN,EAAQ,WAAW,WAAWM,CAAO,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAUrQ,GAAGsQ,GAAa;AAAE,WAAO,IAAI,KAAK,WAAWA,CAAW,IAAI,GAAI;AAAA,EAAI;AAAA,EACjF,GAAG,SAAUP,GAASQ,GAASvP,GAAQ;AACnC,QAAIwP,IAAa,SAASD,CAAO,GAC7BtJ,IAAO,IAAI,KAAK8I,EAAQ,YAAW,GAAI,GAAG,KAAKS,IAAa,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAClF,WAAAvJ,EAAK,QAAQA,EAAK,QAAS,IAAGA,EAAK,OAAQ,IAAGjG,EAAO,cAAc,GAC5DiG;AAAA,EACV;AAAA,EACD,GAAG,SAAU8I,GAASU,GAAM;AACxB,IAAAV,EAAQ,YAAY,WAAWU,CAAI,CAAC;AAAA,EACvC;AAAA,EACD,GAAG,SAAUzQ,GAAG0Q,GAAS;AAAE,WAAO,IAAI,KAAKA,CAAO;AAAA,EAAI;AAAA,EACtD,GAAG,SAAUX,GAASG,GAAK;AACvB,IAAAH,EAAQ,QAAQ,WAAWG,CAAG,CAAC;AAAA,EAClC;AAAA,EACD,GAAG,SAAUH,GAASE,GAAM;AACxB,IAAAF,EAAQ,UAAUA,EAAQ,SAAU,KAAI,KAAK,KAAK,KAAK,WAAWE,CAAI,CAAC;AAAA,EAC1E;AAAA,EACD,GAAG,SAAUF,GAAS/I,GAAS;AAC3B,IAAA+I,EAAQ,WAAW,WAAW/I,CAAO,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAU+I,GAASG,GAAK;AACvB,IAAAH,EAAQ,QAAQ,WAAWG,CAAG,CAAC;AAAA,EAClC;AAAA,EACD,GAAGR;AAAA,EACH,GAAG,SAAUK,GAASY,GAAO;AACzB,IAAAZ,EAAQ,SAAS,WAAWY,CAAK,IAAI,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAUZ,GAASY,GAAO;AACzB,IAAAZ,EAAQ,SAAS,WAAWY,CAAK,IAAI,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAUZ,GAASM,GAAS;AAC3B,IAAAN,EAAQ,WAAW,WAAWM,CAAO,CAAC;AAAA,EACzC;AAAA,EACD,GAAG,SAAUrQ,GAAG4Q,GAAiB;AAC7B,WAAO,IAAI,KAAK,WAAWA,CAAe,CAAC;AAAA,EAC9C;AAAA,EACD,GAAGlB;AAAA,EACH,GAAG,SAAUK,GAASU,GAAM;AACxB,IAAAV,EAAQ,YAAY,MAAO,WAAWU,CAAI,CAAC;AAAA,EAC9C;AACL,GACWI,KAAa;AAAA,EACpB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACP,GACWC,KAAU;AAAA,EACjB,GAAG,SAAU7J,GAAM;AAAE,WAAOA,EAAK,YAAa;AAAA,EAAG;AAAA,EACjD,GAAG,SAAUA,GAAMjG,GAAQzE,GAAS;AAChC,WAAOyE,EAAO,SAAS,UAAU8P,GAAQ,EAAE7J,GAAMjG,GAAQzE,CAAO,CAAC;AAAA,EACpE;AAAA,EACD,GAAG,SAAU0K,GAAMjG,GAAQzE,GAAS;AAChC,WAAOoT,GAAWmB,GAAQ,EAAE7J,GAAMjG,GAAQzE,CAAO,IAAI,GAAG,IAAOyE,CAAM;AAAA,EACxE;AAAA,EACD,GAAG,SAAUiG,GAAMjG,GAAQzE,GAAS;AAChC,WAAOsR,GAAIiD,GAAQ,EAAE7J,GAAMjG,GAAQzE,CAAO,CAAC;AAAA,EAC9C;AAAA,EACD,GAAG,SAAU0K,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,SAAU,CAAA;AAAA,EAAI;AAAA,EACnD,GAAG,SAAUA,GAAMjG,GAAQ;AACvB,WAAOA,EAAO,YAAY,SACpBiG,EAAK,QAAO,IAAKjG,EAAO,QAAQiG,EAAK,SAAS,IAC9CA,EAAK,QAAO;AAAA,EACrB;AAAA,EACD,GAAG,SAAUA,GAAMjG,GAAQ;AAAE,WAAOA,EAAO,KAAKgN,GAAI/G,EAAK,SAAQ,IAAK,EAAE,CAAC;AAAA,EAAI;AAAA,EAC7E,GAAG,SAAUA,GAAMjG,GAAQ;AACvB,WAAO2O,GAAW1I,EAAK,SAAU,GAAE,IAAMjG,CAAM;AAAA,EAClD;AAAA,EACD,GAAG,SAAUiG,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,WAAY,CAAA;AAAA,EAAI;AAAA,EACrD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,QAAO,IAAK;AAAA,EAAO;AAAA,EACpD,GAAG,SAAUA,GAAMjH,GAAGzD,GAAS;AAC3B,WAAOA,EAAQ,QAAQ0K,CAAI;AAAA,EAC9B;AAAA,EACD,GAAG,SAAUA,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,YAAW,GAAI,CAAC;AAAA,EAAI;AAAA,EACzD,GAAG,SAAUA,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,QAAS,CAAA;AAAA,EAAI;AAAA,EAClD,GAAG,SAAUA,GAAM;AAAE,WAAQA,EAAK,SAAQ,IAAK,KAAKA,EAAK,SAAQ,IAAK,KAAK;AAAA,EAAM;AAAA,EACjF,GAAG,SAAUA,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,WAAY,CAAA;AAAA,EAAI;AAAA,EACrD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,QAAS;AAAA,EAAG;AAAA,EAC7C,GAAG,SAAUA,GAAMjG,GAAQ;AACvB,WAAOA,EAAO,SAAS,SAASiG,EAAK,OAAQ,CAAA;AAAA,EAChD;AAAA,EACD,GAAG,SAAUA,GAAM;AAAE,WAAO4G,GAAI5G,EAAK,SAAQ,IAAK,CAAC;AAAA,EAAI;AAAA,EACvD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,SAAQ,IAAK;AAAA,EAAI;AAAA,EAClD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,WAAY;AAAA,EAAG;AAAA,EAChD,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,QAAS;AAAA,EAAG;AAAA,EAC7C,GAAG,SAAUA,GAAM;AAAE,WAAOA,EAAK,OAAQ;AAAA,EAAG;AAAA,EAC5C,GAAG,SAAUA,GAAM;AAAE,WAAO,OAAOA,EAAK,YAAW,CAAE,EAAE,UAAU,CAAC;AAAA,EAAI;AAC1E,GClIW8J,KAAsB,SAAUzW,GAAI;AAC3C,MAAIE,IAAKF,EAAG,QAAQmL,IAASjL,MAAO,SAAS+S,KAAW/S,GAAI4H,IAAK9H,EAAG,MAAM0W,IAAO5O,MAAO,SAASuL,KAAUvL,GAAIyH,IAAKvP,EAAG,UAAU2W,IAAWpH,MAAO,SAAS,KAAQA;AACpK,SAAO,SAAUkG,GAASmB,GAAMC,GAAgB;AAC5C,QAAInQ,IAASmQ,KAAkBH;AAC/B,WAAIvL,EAAO,eAAe,UAAa,CAACwL,IAC7BxL,EAAO,WAAWsK,GAASmB,GAAMlQ,CAAM,IAE3CkQ,EACF,MAAM,EAAE,EACR,IAAI,SAAUnT,GAAGlB,GAAGuU,GAAK;AAC1B,aAAON,GAAQ/S,CAAC,KAAKqT,EAAIvU,IAAI,CAAC,MAAM,OAC9BiU,GAAQ/S,CAAC,EAAEgS,GAAS/O,GAAQyE,CAAM,IAClC1H,MAAM,OACFA,IACA;AAAA,IACtB,CAAS,EACI,KAAK,EAAE;AAAA,EACpB;AACA,GACWsT,KAAmB,SAAU/W,GAAI;AACxC,MAAIE,IAAKF,EAAG,QAAQmL,IAASjL,MAAO,SAAS+S,KAAW/S,GAAI4H,IAAK9H,EAAG,MAAM0W,IAAO5O,MAAO,SAASuL,KAAUvL;AAC3G,SAAO,SAAU6E,GAAMqK,GAAaC,GAAUC,GAAc;AACxD,QAAI,EAAAvK,MAAS,KAAK,CAACA,IAEnB;AAAA,UAAIjG,IAASwQ,KAAgBR,GACzBS,GACAC,IAAWzK;AACf,UAAIA,aAAgB;AAChB,QAAAwK,IAAa,IAAI,KAAKxK,EAAK,QAAS,CAAA;AAAA,eAC/B,OAAOA,KAAS,YACrBA,EAAK,YAAY;AACjB,QAAAwK,IAAa,IAAI,KAAKxK,CAAI;AAAA,eACrB,OAAOA,KAAS,UAAU;AAC/B,YAAI0K,IAASL,MAAgB7L,KAAU8H,IAAU,YAC7CqE,IAAU,OAAO3K,CAAI,EAAE,KAAI;AAC/B,YAAI2K,MAAY;AACZ,UAAAH,IAAa,oBAAI,QACjBF,IAAW;AAAA,iBAEN9L,KAAUA,EAAO;AACtB,UAAAgM,IAAahM,EAAO,UAAUwB,GAAM0K,CAAM;AAAA,iBAErC,KAAK,KAAKC,CAAO,KACtB,OAAO,KAAKA,CAAO;AACnB,UAAAH,IAAa,IAAI,KAAKxK,CAAI;AAAA,aAEzB;AAED,mBADI4K,IAAU,QAAQC,IAAM,CAAA,GACnBjV,IAAI,GAAGkV,IAAa,GAAGC,IAAW,IAAInV,IAAI8U,EAAO,QAAQ9U,KAAK;AACnE,gBAAIoV,IAAQN,EAAO9U,CAAC,GAChBqV,IAAcD,MAAU,MACxBE,IAAUR,EAAO9U,IAAI,CAAC,MAAM,QAAQqV;AACxC,gBAAIrB,GAAWoB,CAAK,KAAK,CAACE,GAAS;AAC/B,cAAAH,KAAYnB,GAAWoB,CAAK;AAC5B,kBAAI9Y,IAAQ,IAAI,OAAO6Y,CAAQ,EAAE,KAAK/K,CAAI;AAC1C,cAAI9N,MAAU0Y,IAAU,OACpBC,EAAIG,MAAU,MAAM,SAAS,SAAS,EAAE;AAAA,gBACpC,IAAInC,GAAUmC,CAAK;AAAA,gBACnB,KAAK9Y,EAAM,EAAE4Y,CAAU;AAAA,cACvD,CAA6B;AAAA,YAER;AACI,cAAKG,MACNF,KAAY;AAAA,UACnB;AACD,UAAAP,IACI,CAAChM,KAAU,CAACA,EAAO,aACb,IAAI,MAAK,oBAAI,KAAM,GAAC,YAAa,GAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,IACnD,IAAI,MAAK,oBAAI,KAAI,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,GAClDqM,EAAI,QAAQ,SAAUxX,GAAI;AACtB,gBAAI6T,IAAK7T,EAAG,IAAI8X,IAAM9X,EAAG;AACzB,mBAAQmX,IAAatD,EAAGsD,GAAYW,GAAKpR,CAAM,KAAKyQ;AAAA,UACxE,CAAiB,GACDA,IAAaI,IAAUJ,IAAa;AAAA,QACvC;AAAA,MACJ;AACD,UAAI,EAAEA,aAAsB,QAAQ,CAAC,MAAMA,EAAW,QAAS,CAAA,IAAI;AAC/D,QAAAhM,EAAO,aAAa,IAAI,MAAM,4BAA4BiM,CAAQ,CAAC;AACnE;AAAA,MACH;AACD,aAAIH,MAAa,MACbE,EAAW,SAAS,GAAG,GAAG,GAAG,CAAC,GAC3BA;AAAA;AAAA,EACf;AACA;AACO,SAASY,GAAaxK,GAAOC,GAAOyJ,GAAU;AAEjD,SADIA,MAAa,WAAUA,IAAW,KAClCA,MAAa,KACL,IAAI,KAAK1J,EAAM,QAAS,CAAA,EAAE,SAAS,GAAG,GAAG,GAAG,CAAC,IACjD,IAAI,KAAKC,EAAM,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,CAAC,IAE9CD,EAAM,QAAO,IAAKC,EAAM,QAAO;AAC1C;AAOO,IAAIwK,KAAY,SAAUC,GAAIC,GAAKC,GAAK;AAC3C,SAAOF,IAAK,KAAK,IAAIC,GAAKC,CAAG,KAAKF,IAAK,KAAK,IAAIC,GAAKC,CAAG;AAC5D,GACWC,KAAgC,SAAUC,GAAO3L,GAASqJ,GAAS;AAC1E,SAAOsC,IAAQ,OAAO3L,IAAU,KAAKqJ;AACzC,GACWuC,KAAe,SAAUC,GAAsB;AACtD,MAAIF,IAAQ,KAAK,MAAME,IAAuB,IAAI,GAAG7L,KAAW6L,IAAuBF,IAAQ,QAAQ;AACvG,SAAO,CAACA,GAAO3L,GAAS6L,IAAuBF,IAAQ,OAAO3L,IAAU,EAAE;AAC9E,GACWvD,KAAW;AAAA,EAClB,KAAK;AACT;AACO,SAASqP,GAAgBrN,GAAQ;AACpC,MAAIkN,IAAQlN,EAAO,aACfuB,IAAUvB,EAAO,eACjB4K,IAAU5K,EAAO;AACrB,MAAIA,EAAO,YAAY,QAAW;AAC9B,QAAIsN,IAAUtN,EAAO,QAAQ,SAAQ,GACjCuN,IAAavN,EAAO,QAAQ,WAAU,GACtCwN,IAAaxN,EAAO,QAAQ,WAAU;AAC1C,IAAIkN,IAAQI,MACRJ,IAAQI,IAERJ,MAAUI,KAAW/L,IAAUgM,MAC/BhM,IAAUgM,IAEVL,MAAUI,KAAW/L,MAAYgM,KAAc3C,IAAU4C,MACzD5C,IAAU5K,EAAO,QAAQ;EAChC;AACD,MAAIA,EAAO,YAAY,QAAW;AAC9B,QAAIyN,IAAQzN,EAAO,QAAQ,SAAQ,GAC/B0N,IAAa1N,EAAO,QAAQ,WAAU;AAC1C,IAAAkN,IAAQ,KAAK,IAAIA,GAAOO,CAAK,GACzBP,MAAUO,MACVlM,IAAU,KAAK,IAAImM,GAAYnM,CAAO,IACtC2L,MAAUO,KAASlM,MAAYmM,MAC/B9C,IAAU5K,EAAO,QAAQ;EAChC;AACD,SAAO,EAAE,OAAOkN,GAAO,SAAS3L,GAAS,SAASqJ;AACtD;AC7II,OAAO,OAAO,UAAW,eACzB,OAAO,SAAS,SAAU+C,GAAQ;AAE9B,WADI9E,IAAO,CAAA,GACFpE,IAAK,GAAGA,IAAK,UAAU,QAAQA;AACpC,IAAAoE,EAAKpE,IAAK,CAAC,IAAI,UAAUA,CAAE;AAE/B,MAAI,CAACkJ;AACD,UAAM,UAAU,4CAA4C;AAOhE,WALIC,IAAU,SAAUC,GAAQ;AAC5B,IAAIA,KACA,OAAO,KAAKA,CAAM,EAAE,QAAQ,SAAUta,GAAK;AAAE,aAAQoa,EAAOpa,CAAG,IAAIsa,EAAOta,CAAG;AAAA,IAAK,CAAA;AAAA,EAElG,GACiBsB,IAAK,GAAGiZ,IAASjF,GAAMhU,IAAKiZ,EAAO,QAAQjZ,KAAM;AACtD,QAAIgZ,IAASC,EAAOjZ,CAAE;AACtB,IAAA+Y,EAAQC,CAAM;AAAA,EACjB;AACD,SAAOF;AACf;ACpBA,IAAII,KAAsC,WAAY;AAClD,SAAAA,KAAW,OAAO,UAAU,SAAS,GAAG;AACpC,aAAStW,GAAGL,IAAI,GAAGG,IAAI,UAAU,QAAQH,IAAIG,GAAGH,KAAK;AACjD,MAAAK,IAAI,UAAUL,CAAC;AACf,eAAS8C,KAAKzC;AAAG,QAAI,OAAO,UAAU,eAAe,KAAKA,GAAGyC,CAAC,MAC1D,EAAEA,CAAC,IAAIzC,EAAEyC,CAAC;AAAA,IACjB;AACD,WAAO;AAAA,EACf,GACW6T,GAAS,MAAM,MAAM,SAAS;AACzC,GACIC,KAAkD,WAAY;AAC9D,WAASvW,IAAI,GAAG,IAAI,GAAGwW,IAAK,UAAU,QAAQ,IAAIA,GAAI;AAAK,IAAAxW,KAAK,UAAU,CAAC,EAAE;AAC7E,WAAS4B,IAAI,MAAM5B,CAAC,GAAGM,IAAI,GAAG,IAAI,GAAG,IAAIkW,GAAI;AACzC,aAAS5N,IAAI,UAAU,CAAC,GAAGpH,IAAI,GAAGiV,IAAK7N,EAAE,QAAQpH,IAAIiV,GAAIjV,KAAKlB;AAC1D,MAAAsB,EAAEtB,CAAC,IAAIsI,EAAEpH,CAAC;AAClB,SAAOI;AACX,GAQI8U,KAAsB;AAC1B,SAASC,GAAkBC,GAASC,GAAgB;AAChD,MAAIC,IAAO;AAAA,IACP,QAAQR,GAASA,GAAS,CAAA,GAAIS,EAAc,GAAGC,GAAU,aAAa;AAAA,IACtE,MAAMC;AAAAA,EACd;AACI,EAAAH,EAAK,YAAY3C,GAAiB,EAAE,QAAQ2C,EAAK,QAAQ,MAAMA,EAAK,KAAI,CAAE,GAC1EA,EAAK,YAAY,IACjBA,EAAK,iBAAiB,IACtBA,EAAK,gBAAgB,IACrBA,EAAK,QAAQI,GACbJ,EAAK,oBAAoBK,GACzBL,EAAK,oBAAoBM,IACzBN,EAAK,cAAcO,IACnBP,EAAK,aAAaQ,IAClBR,EAAK,QAAQS,IACbT,EAAK,QAAQU,IACbV,EAAK,cAAcW,IACnBX,EAAK,iBAAiBrF,IACtBqF,EAAK,YAAYY,GACjBZ,EAAK,UAAUa,IACfb,EAAK,YAAYc,IACjBd,EAAK,aAAae,GAClBf,EAAK,cAAcgB,IACnBhB,EAAK,OAAOiB,IACZjB,EAAK,SAASkB,IACdlB,EAAK,MAAMmB,IACXnB,EAAK,UAAUoB,IACfpB,EAAK,SAASqB;AACd,WAASC,IAAuB;AAC5B,IAAAtB,EAAK,QAAQ;AAAA,MACT,gBAAgB,SAAUrD,GAAO4E,GAAI;AAGjC,eAFI5E,MAAU,WAAUA,IAAQqD,EAAK,eACjCuB,MAAO,WAAUA,IAAKvB,EAAK,cAC3BrD,MAAU,MAAO4E,IAAK,MAAM,KAAKA,IAAK,QAAQ,KAAMA,IAAK,QAAQ,KAC1D,KACJvB,EAAK,KAAK,YAAYrD,CAAK;AAAA,MACrC;AAAA,IACb;AAAA,EACK;AACD,WAAS6E,IAAO;AACZ,IAAAxB,EAAK,UAAUA,EAAK,QAAQF,GAC5BE,EAAK,SAAS,IACdyB,MACAC,MACAC,MACAC,MACAN,KACKtB,EAAK,YACN6B,KACJC,MACI9B,EAAK,cAAc,UAAUA,EAAK,OAAO,gBACrCA,EAAK,OAAO,cACZK,EAAiBL,EAAK,OAAO,aAAaA,EAAK,wBAAwB,MAAS,GAEpFgB,GAAY,EAAK,IAErBe;AACA,QAAIC,IAAW,iCAAiC,KAAK,UAAU,SAAS;AACxE,IAAI,CAAChC,EAAK,YAAYgC,KAClB1B,MAEJ2B,GAAa,SAAS;AAAA,EACzB;AACD,WAASC,IAA0B;AAC/B,QAAI5b;AACJ,aAAUA,IAAK0Z,EAAK,uBAAuB,QAAQ1Z,MAAO,SAAS,SAASA,EAAG,YAAa,GACvF,iBAAiB,SAAS;AAAA,EAClC;AACD,WAAS6b,EAAehI,GAAI;AACxB,WAAOA,EAAG,KAAK6F,CAAI;AAAA,EACtB;AACD,WAAS+B,IAAmB;AACxB,QAAItQ,IAASuO,EAAK;AAClB,IAAIvO,EAAO,gBAAgB,MAASA,EAAO,eAAe,KAGjDA,EAAO,eAAe,MAC3B,OAAO,sBAAsB,WAAY;AAKrC,UAJIuO,EAAK,sBAAsB,WAC3BA,EAAK,kBAAkB,MAAM,aAAa,UAC1CA,EAAK,kBAAkB,MAAM,UAAU,UAEvCA,EAAK,kBAAkB,QAAW;AAClC,YAAIoC,KAAapC,EAAK,KAAK,cAAc,KAAKvO,EAAO;AACrD,QAAAuO,EAAK,cAAc,MAAM,QAAQoC,IAAY,MAC7CpC,EAAK,kBAAkB,MAAM,QACzBoC,KACKpC,EAAK,gBAAgB,SAChBA,EAAK,YAAY,cACjB,KACN,MACRA,EAAK,kBAAkB,MAAM,eAAe,YAAY,GACxDA,EAAK,kBAAkB,MAAM,eAAe,SAAS;AAAA,MACxD;AAAA,IACjB,CAAa;AAAA,EAER;AACD,WAASqC,EAAWzZ,GAAG;AACnB,QAAIoX,EAAK,cAAc,WAAW,GAAG;AACjC,UAAIsC,IAActC,EAAK,OAAO,YAAY,UACtC3B,GAAa,oBAAI,KAAM,GAAE2B,EAAK,OAAO,OAAO,KAAK,IAC/C,oBAAI,KAAM,IACV,IAAI,KAAKA,EAAK,OAAO,QAAQ,QAAS,CAAA,GACxCzG,IAAWuF,GAAgBkB,EAAK,MAAM;AAC1C,MAAAsC,EAAY,SAAS/I,EAAS,OAAOA,EAAS,SAASA,EAAS,SAAS+I,EAAY,gBAAiB,CAAA,GACtGtC,EAAK,gBAAgB,CAACsC,CAAW,GACjCtC,EAAK,wBAAwBsC;AAAA,IAChC;AACD,IAAI1Z,MAAM,UAAaA,EAAE,SAAS,UAC9B2Z,GAAY3Z,CAAC;AAEjB,QAAI4Z,IAAYxC,EAAK,OAAO;AAC5B,IAAAyC,KACAzB,MACIhB,EAAK,OAAO,UAAUwC,KACtBxC,EAAK,iBAAgB;AAAA,EAE5B;AACD,WAAS0C,EAAczG,GAAME,GAAM;AAC/B,WAAQF,IAAO,KAAM,KAAKjC,GAAImC,MAAS6D,EAAK,KAAK,KAAK,CAAC,CAAC;AAAA,EAC3D;AACD,WAAS2C,EAAc1G,GAAM;AACzB,YAAQA,IAAO,IAAE;AAAA,MACb,KAAK;AAAA,MACL,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAOA,IAAO;AAAA,IACrB;AAAA,EACJ;AACD,WAASwG,IAAqB;AAC1B,QAAI,EAAAzC,EAAK,gBAAgB,UAAaA,EAAK,kBAAkB,SAE7D;AAAA,UAAIrB,KAAS,SAASqB,EAAK,YAAY,MAAM,MAAM,EAAE,GAAG,EAAE,KAAK,KAAK,IAAIhN,KAAW,SAASgN,EAAK,cAAc,OAAO,EAAE,KAAK,KAAK,IAAI3D,IAAU2D,EAAK,kBAAkB,UAChK,SAASA,EAAK,cAAc,OAAO,EAAE,KAAK,KAAK,KAChD;AACN,MAAIA,EAAK,SAAS,WACdrB,IAAQ+D,EAAc/D,GAAOqB,EAAK,KAAK,WAAW;AAEtD,UAAI4C,IAAgB5C,EAAK,OAAO,YAAY,UACvCA,EAAK,OAAO,WACTA,EAAK,kBACLA,EAAK,yBACL3B,GAAa2B,EAAK,uBAAuBA,EAAK,OAAO,SAAS,EAAI,MAC9D,GACR6C,KAAgB7C,EAAK,OAAO,YAAY,UACvCA,EAAK,OAAO,WACTA,EAAK,kBACLA,EAAK,yBACL3B,GAAa2B,EAAK,uBAAuBA,EAAK,OAAO,SAAS,EAAI,MAC9D;AACZ,UAAIA,EAAK,OAAO,YAAY,UACxBA,EAAK,OAAO,YAAY,UACxBA,EAAK,OAAO,UAAUA,EAAK,OAAO,SAAS;AAC3C,YAAI8C,KAAWpE,GAA8BsB,EAAK,OAAO,QAAQ,SAAQ,GAAIA,EAAK,OAAO,QAAQ,WAAU,GAAIA,EAAK,OAAO,QAAQ,WAAU,CAAE,GAC3I+C,KAAWrE,GAA8BsB,EAAK,OAAO,QAAQ,SAAQ,GAAIA,EAAK,OAAO,QAAQ,WAAU,GAAIA,EAAK,OAAO,QAAQ,WAAU,CAAE,GAC3IgD,KAActE,GAA8BC,GAAO3L,GAASqJ,CAAO;AACvE,YAAI2G,KAAcD,MAAYC,KAAcF,IAAU;AAClD,cAAIG,KAASrE,GAAakE,EAAQ;AAClC,UAAAnE,IAAQsE,GAAO,CAAC,GAChBjQ,IAAUiQ,GAAO,CAAC,GAClB5G,IAAU4G,GAAO,CAAC;AAAA,QACrB;AAAA,MACJ,OACI;AACD,YAAIJ,IAAe;AACf,cAAIK,KAAUlD,EAAK,OAAO,YAAY,SAChCA,EAAK,OAAO,UACZA,EAAK,OAAO;AAClB,UAAArB,IAAQ,KAAK,IAAIA,GAAOuE,GAAQ,SAAQ,CAAE,GACtCvE,MAAUuE,GAAQ,SAAU,MAC5BlQ,IAAU,KAAK,IAAIA,GAASkQ,GAAQ,WAAU,CAAE,IAChDlQ,MAAYkQ,GAAQ,WAAY,MAChC7G,IAAU,KAAK,IAAIA,GAAS6G,GAAQ,WAAU,CAAE;AAAA,QACvD;AACD,YAAIN,GAAe;AACf,cAAIO,KAAUnD,EAAK,OAAO,YAAY,SAChCA,EAAK,OAAO,UACZA,EAAK,OAAO;AAClB,UAAArB,IAAQ,KAAK,IAAIA,GAAOwE,GAAQ,SAAQ,CAAE,GACtCxE,MAAUwE,GAAQ,SAAU,KAAInQ,IAAUmQ,GAAQ,WAAY,MAC9DnQ,IAAUmQ,GAAQ,eAClBnQ,MAAYmQ,GAAQ,WAAY,MAChC9G,IAAU,KAAK,IAAIA,GAAS8G,GAAQ,WAAU,CAAE;AAAA,QACvD;AAAA,MACJ;AACD,MAAAC,EAASzE,GAAO3L,GAASqJ,CAAO;AAAA;AAAA,EACnC;AACD,WAASgE,EAAiBtE,GAAS;AAC/B,QAAI9I,IAAO8I,KAAWiE,EAAK;AAC3B,IAAI/M,KAAQA,aAAgB,QACxBmQ,EAASnQ,EAAK,YAAYA,EAAK,cAAcA,EAAK,WAAU,CAAE;AAAA,EAErE;AACD,WAASmQ,EAASzE,GAAO3L,GAASqJ,GAAS;AAIvC,IAHI2D,EAAK,0BAA0B,UAC/BA,EAAK,sBAAsB,SAASrB,IAAQ,IAAI3L,GAASqJ,KAAW,GAAG,CAAC,GAExE,GAAC2D,EAAK,eAAe,CAACA,EAAK,iBAAiBA,EAAK,cAErDA,EAAK,YAAY,QAAQnG,GAAKmG,EAAK,OAAO,YAEpCrB,KADE,KAAKA,KAAS,KAAM,KAAK3E,GAAI2E,IAAQ,OAAO,CAAC,CAC1C,GACXqB,EAAK,cAAc,QAAQnG,GAAI7G,CAAO,GAClCgN,EAAK,SAAS,WACdA,EAAK,KAAK,cAAcA,EAAK,KAAK,KAAKhG,GAAI2E,KAAS,EAAE,CAAC,IACvDqB,EAAK,kBAAkB,WACvBA,EAAK,cAAc,QAAQnG,GAAIwC,CAAO;AAAA,EAC7C;AACD,WAASgH,EAAY1M,GAAO;AACxB,QAAI2M,IAAc7H,GAAe9E,CAAK,GAClC8F,IAAO,SAAS6G,EAAY,KAAK,KAAK3M,EAAM,SAAS;AACzD,KAAI8F,IAAO,MAAO,KACb9F,EAAM,QAAQ,WAAW,CAAC,QAAQ,KAAK8F,EAAK,SAAU,CAAA,MACvD+D,GAAW/D,CAAI;AAAA,EAEtB;AACD,WAAS2D,EAAKN,GAASnJ,GAAO4M,GAAShb,GAAS;AAC5C,QAAIoO,aAAiB;AACjB,aAAOA,EAAM,QAAQ,SAAU6M,IAAI;AAAE,eAAOpD,EAAKN,GAAS0D,IAAID,GAAShb,CAAO;AAAA,MAAI,CAAA;AACtF,QAAIuX,aAAmB;AACnB,aAAOA,EAAQ,QAAQ,SAAU2D,IAAI;AAAE,eAAOrD,EAAKqD,IAAI9M,GAAO4M,GAAShb,CAAO;AAAA,MAAI,CAAA;AACtF,IAAAuX,EAAQ,iBAAiBnJ,GAAO4M,GAAShb,CAAO,GAChDyX,EAAK,UAAU,KAAK;AAAA,MAChB,QAAQ,WAAY;AAAE,eAAOF,EAAQ,oBAAoBnJ,GAAO4M,GAAShb,CAAO;AAAA,MAAI;AAAA,IAChG,CAAS;AAAA,EACJ;AACD,WAASmb,IAAgB;AACrB,IAAAzB,GAAa,UAAU;AAAA,EAC1B;AACD,WAASH,IAAa;AAQlB,QAPI9B,EAAK,OAAO,QACZ,CAAC,QAAQ,SAAS,UAAU,OAAO,EAAE,QAAQ,SAAU2D,GAAK;AACxD,YAAM,UAAU,QAAQ,KAAK3D,EAAK,QAAQ,iBAAiB,WAAW2D,IAAM,GAAG,GAAG,SAAUF,GAAI;AAC5F,eAAOrD,EAAKqD,GAAI,SAASzD,EAAK2D,CAAG,CAAC;AAAA,MACtD,CAAiB;AAAA,IACjB,CAAa,GAED3D,EAAK,UAAU;AACf,MAAA4D;AACA;AAAA,IACH;AACD,QAAIC,IAAkB3J,GAAS4J,IAAU,EAAE;AA2B3C,QA1BA9D,EAAK,mBAAmB9F,GAASwJ,GAAe9D,EAAmB,GAC/DI,EAAK,iBAAiB,CAAC,oBAAoB,KAAK,UAAU,SAAS,KACnEI,EAAKJ,EAAK,eAAe,aAAa,SAAUpX,GAAG;AAC/C,MAAIoX,EAAK,OAAO,SAAS,WACrBW,GAAYlF,GAAe7S,CAAC,CAAC;AAAA,IACjD,CAAa,GACLwX,EAAKJ,EAAK,QAAQ,WAAW+D,EAAS,GAClC/D,EAAK,sBAAsB,UAC3BI,EAAKJ,EAAK,mBAAmB,WAAW+D,EAAS,GAEjD,CAAC/D,EAAK,OAAO,UAAU,CAACA,EAAK,OAAO,UACpCI,EAAK,QAAQ,UAAUyD,CAAe,GACtC,OAAO,iBAAiB,SACxBzD,EAAK,OAAO,UAAU,cAAc4D,EAAa,IAEjD5D,EAAK,OAAO,UAAU,aAAa4D,EAAa,GACpD5D,EAAK,OAAO,UAAU,SAAS4D,IAAe,EAAE,SAAS,GAAI,CAAE,GAC3DhE,EAAK,OAAO,eAAe,OAC3BI,EAAKJ,EAAK,QAAQ,SAASA,EAAK,IAAI,GACpCI,EAAKJ,EAAK,QAAQ,SAASA,EAAK,IAAI,IAEpCA,EAAK,kBAAkB,WACvBI,EAAKJ,EAAK,UAAU,SAASiE,EAAe,GAC5C7D,EAAKJ,EAAK,UAAU,CAAC,SAAS,WAAW,GAAGqD,CAAW,GACvDjD,EAAKJ,EAAK,eAAe,SAASkE,EAAU,IAE5ClE,EAAK,kBAAkB,UACvBA,EAAK,kBAAkB,UACvBA,EAAK,gBAAgB,QAAW;AAChC,UAAImE,IAAU,SAAUvb,GAAG;AACvB,eAAO6S,GAAe7S,CAAC,EAAE;MACzC;AACY,MAAAwX,EAAKJ,EAAK,eAAe,CAAC,WAAW,GAAGqC,CAAU,GAClDjC,EAAKJ,EAAK,eAAe,QAAQqC,GAAY,EAAE,SAAS,GAAI,CAAE,GAC9DjC,EAAKJ,EAAK,eAAe,SAASoE,CAAa,GAC/ChE,EAAK,CAACJ,EAAK,aAAaA,EAAK,aAAa,GAAG,CAAC,SAAS,OAAO,GAAGmE,CAAO,GACpEnE,EAAK,kBAAkB,UACvBI,EAAKJ,EAAK,eAAe,SAAS,WAAY;AAAE,eAAOA,EAAK,iBAAiBA,EAAK,cAAc,OAAQ;AAAA,MAAG,CAAA,GAC3GA,EAAK,SAAS,UACdI,EAAKJ,EAAK,MAAM,SAAS,SAAUpX,GAAG;AAClC,QAAAyZ,EAAWzZ,CAAC;AAAA,MAChC,CAAiB;AAAA,IAER;AACD,IAAIoX,EAAK,OAAO,cACZI,EAAKJ,EAAK,QAAQ,QAAQ3Z,EAAM;AAAA,EAEvC;AACD,WAAS0a,EAAWsD,GAAUX,GAAe;AACzC,QAAIY,IAASD,MAAa,SACpBrE,EAAK,UAAUqE,CAAQ,IACvBrE,EAAK,0BACFA,EAAK,OAAO,WAAWA,EAAK,OAAO,UAAUA,EAAK,MAC7CA,EAAK,OAAO,UACZA,EAAK,OAAO,WAAWA,EAAK,OAAO,UAAUA,EAAK,MAC9CA,EAAK,OAAO,UACZA,EAAK,MACnBuE,IAAUvE,EAAK,aACfwE,KAAWxE,EAAK;AACpB,QAAI;AACA,MAAIsE,MAAW,WACXtE,EAAK,cAAcsE,EAAO,eAC1BtE,EAAK,eAAesE,EAAO;IAElC,SACM1b,IAAG;AACN,MAAAA,GAAE,UAAU,4BAA4B0b,GACxCtE,EAAK,OAAO,aAAapX,EAAC;AAAA,IAC7B;AACD,IAAI8a,KAAiB1D,EAAK,gBAAgBuE,MACtCtC,GAAa,cAAc,GAC3BwC,MAEAf,MACC1D,EAAK,gBAAgBuE,KAAWvE,EAAK,iBAAiBwE,OACvDvC,GAAa,eAAe,GAEhCjC,EAAK,OAAM;AAAA,EACd;AACD,WAASoE,EAAcxb,GAAG;AACtB,QAAI0a,IAAc7H,GAAe7S,CAAC;AAClC,IAAI,CAAC0a,EAAY,UAAU,QAAQ,OAAO,KACtCoB,EAAkB9b,GAAG0a,EAAY,UAAU,SAAS,SAAS,IAAI,IAAI,EAAE;AAAA,EAC9E;AACD,WAASoB,EAAkB9b,GAAG+b,GAAOC,GAAW;AAC5C,QAAIxF,IAASxW,KAAK6S,GAAe7S,CAAC,GAC9Bic,KAAQD,KACPxF,KAAUA,EAAO,cAAcA,EAAO,WAAW,YAClDzI,KAAQmO,GAAY,WAAW;AACnC,IAAAnO,GAAM,QAAQgO,GACdE,MAASA,GAAM,cAAclO,EAAK;AAAA,EACrC;AACD,WAASkL,IAAQ;AACb,QAAIkD,IAAW,OAAO,SAAS,uBAAsB;AAGrD,QAFA/E,EAAK,oBAAoBrF,GAAc,OAAO,oBAAoB,GAClEqF,EAAK,kBAAkB,WAAW,IAC9B,CAACA,EAAK,OAAO,YAAY;AAGzB,UAFA+E,EAAS,YAAYC,EAAa,CAAE,GACpChF,EAAK,iBAAiBrF,GAAc,OAAO,0BAA0B,GACjEqF,EAAK,OAAO,aAAa;AACzB,YAAI1Z,IAAK2e,EAAU,GAAIC,IAAc5e,EAAG,aAAa6e,IAAc7e,EAAG;AACtE,QAAA0Z,EAAK,eAAe,YAAYkF,CAAW,GAC3ClF,EAAK,cAAcmF,GACnBnF,EAAK,cAAckF;AAAA,MACtB;AACD,MAAAlF,EAAK,aAAarF,GAAc,OAAO,sBAAsB,GAC7DqF,EAAK,WAAW,YAAYoF,EAAe,CAAA,GACtCpF,EAAK,kBACNA,EAAK,gBAAgBrF,GAAc,OAAO,gBAAgB,GAC1DqF,EAAK,cAAc,WAAW,KAElCqF,KACArF,EAAK,WAAW,YAAYA,EAAK,aAAa,GAC9CA,EAAK,eAAe,YAAYA,EAAK,UAAU,GAC/C+E,EAAS,YAAY/E,EAAK,cAAc;AAAA,IAC3C;AACD,IAAIA,EAAK,OAAO,cACZ+E,EAAS,YAAYO,EAAS,CAAE,GAEpC9K,GAAYwF,EAAK,mBAAmB,aAAaA,EAAK,OAAO,SAAS,OAAO,GAC7ExF,GAAYwF,EAAK,mBAAmB,WAAWA,EAAK,OAAO,YAAY,EAAI,GAC3ExF,GAAYwF,EAAK,mBAAmB,cAAcA,EAAK,OAAO,aAAa,CAAC,GAC5EA,EAAK,kBAAkB,YAAY+E,CAAQ;AAC3C,QAAIQ,KAAevF,EAAK,OAAO,aAAa,UACxCA,EAAK,OAAO,SAAS,aAAa;AACtC,SAAIA,EAAK,OAAO,UAAUA,EAAK,OAAO,YAClCA,EAAK,kBAAkB,UAAU,IAAIA,EAAK,OAAO,SAAS,WAAW,QAAQ,GACzEA,EAAK,OAAO,WACR,CAACuF,MAAgBvF,EAAK,QAAQ,aAC9BA,EAAK,QAAQ,WAAW,aAAaA,EAAK,mBAAmBA,EAAK,OAAO,WAAW,IAC/EA,EAAK,OAAO,aAAa,UAC9BA,EAAK,OAAO,SAAS,YAAYA,EAAK,iBAAiB,IAE3DA,EAAK,OAAO,SAAQ;AACpB,UAAI3E,KAAUV,GAAc,OAAO,mBAAmB;AACtD,MAAIqF,EAAK,QAAQ,cACbA,EAAK,QAAQ,WAAW,aAAa3E,IAAS2E,EAAK,OAAO,GAC9D3E,GAAQ,YAAY2E,EAAK,OAAO,GAC5BA,EAAK,YACL3E,GAAQ,YAAY2E,EAAK,QAAQ,GACrC3E,GAAQ,YAAY2E,EAAK,iBAAiB;AAAA,IAC7C;AAEL,IAAI,CAACA,EAAK,OAAO,UAAU,CAACA,EAAK,OAAO,WACnCA,EAAK,OAAO,aAAa,SACpBA,EAAK,OAAO,WACZ,OAAO,SAAS,MAAM,YAAYA,EAAK,iBAAiB;AAAA,EACrE;AACD,WAASY,EAAUlG,GAAWzH,GAAMuS,GAAY3c,GAAG;AAC/C,QAAI4c,KAAgB3E,GAAU7N,GAAM,EAAI,GAAGyS,KAAa/K,GAAc,QAAQD,GAAWzH,EAAK,QAAO,EAAG,SAAU,CAAA;AAClH,WAAAyS,GAAW,UAAUzS,GACrByS,GAAW,KAAK7c,GAChB6c,GAAW,aAAa,cAAc1F,EAAK,WAAW/M,GAAM+M,EAAK,OAAO,cAAc,CAAC,GACnFtF,EAAU,QAAQ,QAAQ,MAAM,MAChC2D,GAAapL,GAAM+M,EAAK,GAAG,MAAM,MACjCA,EAAK,gBAAgB0F,IACrBA,GAAW,UAAU,IAAI,OAAO,GAChCA,GAAW,aAAa,gBAAgB,MAAM,IAE9CD,MACAC,GAAW,WAAW,IAClBC,GAAe1S,CAAI,MACnByS,GAAW,UAAU,IAAI,UAAU,GACnC1F,EAAK,mBAAmB0F,IACpB1F,EAAK,OAAO,SAAS,YACrBxF,GAAYkL,IAAY,cAAc1F,EAAK,cAAc,CAAC,KACtD3B,GAAapL,GAAM+M,EAAK,cAAc,CAAC,GAAG,EAAI,MAAM,CAAC,GACzDxF,GAAYkL,IAAY,YAAY1F,EAAK,cAAc,CAAC,KACpD3B,GAAapL,GAAM+M,EAAK,cAAc,CAAC,GAAG,EAAI,MAAM,CAAC,GACrDtF,MAAc,kBACdgL,GAAW,UAAU,IAAI,SAAS,OAK9CA,GAAW,UAAU,IAAI,oBAAoB,GAE7C1F,EAAK,OAAO,SAAS,WACjB4F,GAAc3S,CAAI,KAAK,CAAC0S,GAAe1S,CAAI,KAC3CyS,GAAW,UAAU,IAAI,SAAS,GAEtC1F,EAAK,eACLA,EAAK,OAAO,eAAe,KAC3BtF,MAAc,kBACd7R,IAAI,MAAM,KACVmX,EAAK,YAAY,mBAAmB,aAAa,iCAAiCA,EAAK,OAAO,QAAQ/M,CAAI,IAAI,SAAS,GAE3HgP,GAAa,eAAeyD,EAAU,GAC/BA;AAAA,EACV;AACD,WAASG,EAAeC,GAAY;AAChC,IAAAA,EAAW,MAAK,GACZ9F,EAAK,OAAO,SAAS,WACrBW,GAAYmF,CAAU;AAAA,EAC7B;AACD,WAASC,EAAqBpB,GAAO;AAGjC,aAFIqB,IAAarB,IAAQ,IAAI,IAAI3E,EAAK,OAAO,aAAa,GACtDiG,IAAWtB,IAAQ,IAAI3E,EAAK,OAAO,aAAa,IAC3ChV,IAAIgb,GAAYhb,KAAKib,GAAUjb,KAAK2Z;AAIzC,eAHIhI,KAAQqD,EAAK,cAAc,SAAShV,CAAC,GACrCkb,KAAavB,IAAQ,IAAI,IAAIhI,GAAM,SAAS,SAAS,GACrDwJ,KAAWxB,IAAQ,IAAIhI,GAAM,SAAS,SAAS,IAC1C9T,KAAIqd,IAAYrd,MAAKsd,IAAUtd,MAAK8b,GAAO;AAChD,YAAI5a,KAAI4S,GAAM,SAAS9T,EAAC;AACxB,YAAIkB,GAAE,UAAU,QAAQ,QAAQ,MAAM,MAAM+W,GAAU/W,GAAE,OAAO;AAC3D,iBAAOA;AAAA,MACd;AAAA,EAGR;AACD,WAASqc,EAAoBC,GAAS1B,GAAO;AAMzC,aALI2B,IAAaD,EAAQ,UAAU,QAAQ,OAAO,MAAM,KAClDA,EAAQ,QAAQ,SAAU,IAC1BrG,EAAK,cACPiG,IAAWtB,IAAQ,IAAI3E,EAAK,OAAO,aAAa,IAChDuG,KAAY5B,IAAQ,IAAI,IAAI,IACvB3Z,KAAIsb,IAAatG,EAAK,cAAchV,MAAKib,GAAUjb,MAAKub;AAQ7D,eAPI5J,KAAQqD,EAAK,cAAc,SAAShV,EAAC,GACrCkb,KAAaI,IAAatG,EAAK,iBAAiBhV,KAC9Cqb,EAAQ,KAAK1B,IACbA,IAAQ,IACJhI,GAAM,SAAS,SAAS,IACxB,GACN6J,KAAe7J,GAAM,SAAS,QACzB9T,KAAIqd,IAAYrd,MAAK,KAAKA,KAAI2d,MAAgB3d,OAAM8b,IAAQ,IAAI6B,KAAe,KAAK3d,MAAK0d,IAAW;AACzG,YAAIxc,KAAI4S,GAAM,SAAS9T,EAAC;AACxB,YAAIkB,GAAE,UAAU,QAAQ,QAAQ,MAAM,MAClC+W,GAAU/W,GAAE,OAAO,KACnB,KAAK,IAAIsc,EAAQ,KAAKxd,EAAC,KAAK,KAAK,IAAI8b,CAAK;AAC1C,iBAAOkB,EAAe9b,EAAC;AAAA,MAC9B;AAEL,IAAAiW,EAAK,YAAYuG,EAAS,GAC1BE,GAAWV,EAAqBQ,EAAS,GAAG,CAAC;AAAA,EAEhD;AACD,WAASE,GAAWJ,GAASK,GAAQ;AACjC,QAAIC,IAAgBzE,KAChB0E,IAAaC,GAASF,KAAiB,SAAS,IAAI,GACpDG,KAAYT,MAAY,SACtBA,IACAO,IACID,IACA3G,EAAK,qBAAqB,UAAa6G,GAAS7G,EAAK,gBAAgB,IACjEA,EAAK,mBACLA,EAAK,kBAAkB,UAAa6G,GAAS7G,EAAK,aAAa,IAC3DA,EAAK,gBACL+F,EAAqBW,IAAS,IAAI,IAAI,EAAE;AAC1D,IAAII,OAAc,SACd9G,EAAK,OAAO,UAEN4G,IAINR,EAAoBU,IAAWJ,CAAM,IAHrCb,EAAeiB,EAAS;AAAA,EAK/B;AACD,WAASC,EAAetK,GAAME,GAAO;AAKjC,aAJIqK,KAAgB,IAAI,KAAKvK,GAAME,GAAO,CAAC,EAAE,OAAM,IAAKqD,EAAK,KAAK,iBAAiB,KAAK,GACpFiH,IAAgBjH,EAAK,MAAM,gBAAgBrD,IAAQ,IAAI,MAAM,IAAIF,CAAI,GACrEyK,KAAclH,EAAK,MAAM,eAAerD,GAAOF,CAAI,GAAG5J,KAAO,OAAO,SAAS,uBAAsB,GAAIsU,KAAenH,EAAK,OAAO,aAAa,GAAGoH,KAAoBD,KAAe,wBAAwB,gBAAgBE,KAAoBF,KAAe,wBAAwB,gBACxRG,KAAYL,IAAgB,IAAID,GAAcO,KAAW,GACtDD,MAAaL,GAAeK,MAAaC;AAC5C,MAAA1U,GAAK,YAAY+N,EAAU,mBAAmBwG,IAAmB,IAAI,KAAK3K,GAAME,IAAQ,GAAG2K,EAAS,GAAGA,IAAWC,EAAQ,CAAC;AAE/H,SAAKD,KAAY,GAAGA,MAAaJ,IAAaI,MAAaC;AACvD,MAAA1U,GAAK,YAAY+N,EAAU,iBAAiB,IAAI,KAAKnE,GAAME,GAAO2K,EAAS,GAAGA,IAAWC,EAAQ,CAAC;AAEtG,aAASC,KAASN,KAAc,GAAGM,MAAU,KAAKR,MAC7ChH,EAAK,OAAO,eAAe,KAAKuH,KAAW,MAAM,IAAIC,MAAUD;AAChE,MAAA1U,GAAK,YAAY+N,EAAU,mBAAmByG,IAAmB,IAAI,KAAK5K,GAAME,IAAQ,GAAG6K,KAASN,EAAW,GAAGM,IAAQD,EAAQ,CAAC;AAEvI,QAAIE,KAAe9M,GAAc,OAAO,cAAc;AACtD,WAAA8M,GAAa,YAAY5U,EAAI,GACtB4U;AAAA,EACV;AACD,WAASpC,IAAY;AACjB,QAAIrF,EAAK,kBAAkB,QAG3B;AAAA,MAAAlF,GAAUkF,EAAK,aAAa,GACxBA,EAAK,eACLlF,GAAUkF,EAAK,WAAW;AAE9B,eADI0H,IAAO,SAAS,0BACX7e,IAAI,GAAGA,IAAImX,EAAK,OAAO,YAAYnX,KAAK;AAC7C,YAAIkC,IAAI,IAAI,KAAKiV,EAAK,aAAaA,EAAK,cAAc,CAAC;AACvD,QAAAjV,EAAE,SAASiV,EAAK,eAAenX,CAAC,GAChC6e,EAAK,YAAYX,EAAehc,EAAE,YAAW,GAAIA,EAAE,SAAU,CAAA,CAAC;AAAA,MACjE;AACD,MAAAiV,EAAK,cAAc,YAAY0H,CAAI,GACnC1H,EAAK,OAAOA,EAAK,cAAc,YAC3BA,EAAK,OAAO,SAAS,WAAWA,EAAK,cAAc,WAAW,KAC9DW;;EAEP;AACD,WAAS8D,IAAmB;AACxB,QAAI,EAAAzE,EAAK,OAAO,aAAa,KACzBA,EAAK,OAAO,sBAAsB,aAEtC;AAAA,UAAI2H,IAAmB,SAAUhL,GAAO;AACpC,eAAIqD,EAAK,OAAO,YAAY,UACxBA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAa,KACtDrD,IAAQqD,EAAK,OAAO,QAAQ,SAAQ,IAC7B,KAEJ,EAAEA,EAAK,OAAO,YAAY,UAC7BA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAa,KACtDrD,IAAQqD,EAAK,OAAO,QAAQ,SAAU;AAAA,MACtD;AACQ,MAAAA,EAAK,wBAAwB,WAAW,IACxCA,EAAK,wBAAwB,YAAY;AACzC,eAASnX,IAAI,GAAGA,IAAI,IAAIA;AACpB,YAAK8e,EAAiB9e,CAAC,GAEvB;AAAA,cAAI8T,IAAQhC,GAAc,UAAU,+BAA+B;AACnE,UAAAgC,EAAM,QAAQ,IAAI,KAAKqD,EAAK,aAAanX,CAAC,EAAE,WAAW,YACvD8T,EAAM,cAAchB,GAAW9S,GAAGmX,EAAK,OAAO,uBAAuBA,EAAK,IAAI,GAC9ErD,EAAM,WAAW,IACbqD,EAAK,iBAAiBnX,MACtB8T,EAAM,WAAW,KAErBqD,EAAK,wBAAwB,YAAYrD,CAAK;AAAA;AAAA;AAAA,EAErD;AACD,WAASiL,IAAa;AAClB,QAAIC,IAAYlN,GAAc,OAAO,iBAAiB,GAClDmN,IAAmB,OAAO,SAAS,uBAAsB,GACzDC;AACJ,IAAI/H,EAAK,OAAO,aAAa,KACzBA,EAAK,OAAO,sBAAsB,WAClC+H,IAAepN,GAAc,QAAQ,WAAW,KAGhDqF,EAAK,0BAA0BrF,GAAc,UAAU,gCAAgC,GACvFqF,EAAK,wBAAwB,aAAa,cAAcA,EAAK,KAAK,cAAc,GAChFI,EAAKJ,EAAK,yBAAyB,UAAU,SAAUpX,IAAG;AACtD,UAAIwW,KAAS3D,GAAe7S,EAAC,GACzBof,KAAgB,SAAS5I,GAAO,OAAO,EAAE;AAC7C,MAAAY,EAAK,YAAYgI,KAAgBhI,EAAK,YAAY,GAClDiC,GAAa,eAAe;AAAA,IAC5C,CAAa,GACDwC,KACAsD,IAAe/H,EAAK;AAExB,QAAIiI,IAAY/M,GAAkB,YAAY,EAAE,UAAU,KAAI,CAAE,GAC5DgN,KAAcD,EAAU,qBAAqB,OAAO,EAAE,CAAC;AAC3D,IAAAC,GAAY,aAAa,cAAclI,EAAK,KAAK,aAAa,GAC1DA,EAAK,OAAO,WACZkI,GAAY,aAAa,OAAOlI,EAAK,OAAO,QAAQ,YAAW,EAAG,SAAQ,CAAE,GAE5EA,EAAK,OAAO,YACZkI,GAAY,aAAa,OAAOlI,EAAK,OAAO,QAAQ,YAAW,EAAG,SAAQ,CAAE,GAC5EkI,GAAY,WACR,CAAC,CAAClI,EAAK,OAAO,WACVA,EAAK,OAAO,QAAQ,YAAW,MAAOA,EAAK,OAAO,QAAQ;AAEtE,QAAImI,KAAexN,GAAc,OAAO,yBAAyB;AACjE,WAAAwN,GAAa,YAAYJ,CAAY,GACrCI,GAAa,YAAYF,CAAS,GAClCH,EAAiB,YAAYK,EAAY,GACzCN,EAAU,YAAYC,CAAgB,GAC/B;AAAA,MACH,WAAWD;AAAA,MACX,aAAaK;AAAA,MACb,cAAcH;AAAA,IAC1B;AAAA,EACK;AACD,WAASK,IAAc;AACnB,IAAAtN,GAAUkF,EAAK,QAAQ,GACvBA,EAAK,SAAS,YAAYA,EAAK,YAAY,GACvCA,EAAK,OAAO,eACZA,EAAK,eAAe,IACpBA,EAAK,gBAAgB;AAEzB,aAAShV,IAAIgV,EAAK,OAAO,YAAYhV,OAAM;AACvC,UAAI2R,IAAQiL;AACZ,MAAA5H,EAAK,aAAa,KAAKrD,EAAM,WAAW,GACxCqD,EAAK,cAAc,KAAKrD,EAAM,YAAY,GAC1CqD,EAAK,SAAS,YAAYrD,EAAM,SAAS;AAAA,IAC5C;AACD,IAAAqD,EAAK,SAAS,YAAYA,EAAK,YAAY;AAAA,EAC9C;AACD,WAASgF,IAAgB;AACrB,WAAAhF,EAAK,WAAWrF,GAAc,OAAO,kBAAkB,GACvDqF,EAAK,eAAe,IACpBA,EAAK,gBAAgB,IACrBA,EAAK,eAAerF,GAAc,QAAQ,sBAAsB,GAChEqF,EAAK,aAAa,YAAYA,EAAK,OAAO,WAC1CA,EAAK,eAAerF,GAAc,QAAQ,sBAAsB,GAChEqF,EAAK,aAAa,YAAYA,EAAK,OAAO,WAC1CoI,KACA,OAAO,eAAepI,GAAM,uBAAuB;AAAA,MAC/C,KAAK,WAAY;AAAE,eAAOA,EAAK;AAAA,MAAuB;AAAA,MACtD,KAAK,SAAU/F,GAAM;AACjB,QAAI+F,EAAK,yBAAyB/F,MAC9BO,GAAYwF,EAAK,cAAc,sBAAsB/F,CAAI,GACzD+F,EAAK,uBAAuB/F;AAAA,MAEnC;AAAA,IACb,CAAS,GACD,OAAO,eAAe+F,GAAM,uBAAuB;AAAA,MAC/C,KAAK,WAAY;AAAE,eAAOA,EAAK;AAAA,MAAuB;AAAA,MACtD,KAAK,SAAU/F,GAAM;AACjB,QAAI+F,EAAK,yBAAyB/F,MAC9BO,GAAYwF,EAAK,cAAc,sBAAsB/F,CAAI,GACzD+F,EAAK,uBAAuB/F;AAAA,MAEnC;AAAA,IACb,CAAS,GACD+F,EAAK,qBAAqBA,EAAK,aAAa,CAAC,GAC7CqI,MACOrI,EAAK;AAAA,EACf;AACD,WAASsF,IAAY;AACjB,IAAAtF,EAAK,kBAAkB,UAAU,IAAI,SAAS,GAC1CA,EAAK,OAAO,cACZA,EAAK,kBAAkB,UAAU,IAAI,YAAY;AACrD,QAAIzG,IAAWuF,GAAgBkB,EAAK,MAAM;AAC1C,IAAAA,EAAK,gBAAgBrF,GAAc,OAAO,gBAAgB,GAC1DqF,EAAK,cAAc,WAAW;AAC9B,QAAIsI,IAAY3N,GAAc,QAAQ,4BAA4B,GAAG,GACjE4N,IAAYrN,GAAkB,kBAAkB;AAAA,MAChD,cAAc8E,EAAK,KAAK;AAAA,IACpC,CAAS;AACD,IAAAA,EAAK,cAAcuI,EAAU,qBAAqB,OAAO,EAAE,CAAC;AAC5D,QAAIC,IAActN,GAAkB,oBAAoB;AAAA,MACpD,cAAc8E,EAAK,KAAK;AAAA,IACpC,CAAS;AAwBD,QAvBAA,EAAK,gBAAgBwI,EAAY,qBAAqB,OAAO,EAAE,CAAC,GAChExI,EAAK,YAAY,WAAWA,EAAK,cAAc,WAAW,IAC1DA,EAAK,YAAY,QAAQnG,GAAImG,EAAK,wBAC5BA,EAAK,sBAAsB,SAAU,IACrCA,EAAK,OAAO,YACRzG,EAAS,QACToJ,EAAcpJ,EAAS,KAAK,CAAC,GACvCyG,EAAK,cAAc,QAAQnG,GAAImG,EAAK,wBAC9BA,EAAK,sBAAsB,WAAY,IACvCzG,EAAS,OAAO,GACtByG,EAAK,YAAY,aAAa,QAAQA,EAAK,OAAO,cAAc,SAAQ,CAAE,GAC1EA,EAAK,cAAc,aAAa,QAAQA,EAAK,OAAO,gBAAgB,SAAQ,CAAE,GAC9EA,EAAK,YAAY,aAAa,OAAOA,EAAK,OAAO,YAAY,MAAM,GAAG,GACtEA,EAAK,YAAY,aAAa,OAAOA,EAAK,OAAO,YAAY,OAAO,IAAI,GACxEA,EAAK,YAAY,aAAa,aAAa,GAAG,GAC9CA,EAAK,cAAc,aAAa,OAAO,GAAG,GAC1CA,EAAK,cAAc,aAAa,OAAO,IAAI,GAC3CA,EAAK,cAAc,aAAa,aAAa,GAAG,GAChDA,EAAK,cAAc,YAAYuI,CAAS,GACxCvI,EAAK,cAAc,YAAYsI,CAAS,GACxCtI,EAAK,cAAc,YAAYwI,CAAW,GACtCxI,EAAK,OAAO,aACZA,EAAK,cAAc,UAAU,IAAI,UAAU,GAC3CA,EAAK,OAAO,eAAe;AAC3B,MAAAA,EAAK,cAAc,UAAU,IAAI,YAAY;AAC7C,UAAIyI,KAAcvN,GAAkB,kBAAkB;AACtD,MAAA8E,EAAK,gBAAgByI,GAAY,qBAAqB,OAAO,EAAE,CAAC,GAChEzI,EAAK,cAAc,QAAQnG,GAAImG,EAAK,wBAC9BA,EAAK,sBAAsB,WAAY,IACvCzG,EAAS,OAAO,GACtByG,EAAK,cAAc,aAAa,QAAQA,EAAK,cAAc,aAAa,MAAM,CAAC,GAC/EA,EAAK,cAAc,aAAa,OAAO,GAAG,GAC1CA,EAAK,cAAc,aAAa,OAAO,IAAI,GAC3CA,EAAK,cAAc,aAAa,aAAa,GAAG,GAChDA,EAAK,cAAc,YAAYrF,GAAc,QAAQ,4BAA4B,GAAG,CAAC,GACrFqF,EAAK,cAAc,YAAYyI,EAAW;AAAA,IAC7C;AACD,WAAKzI,EAAK,OAAO,cACbA,EAAK,OAAOrF,GAAc,QAAQ,mBAAmBqF,EAAK,KAAK,KAAKhG,IAAKgG,EAAK,wBACxEA,EAAK,YAAY,QACjBA,EAAK,OAAO,eAAe,EAAE,CAAC,CAAC,GACrCA,EAAK,KAAK,QAAQA,EAAK,KAAK,aAC5BA,EAAK,KAAK,WAAW,IACrBA,EAAK,cAAc,YAAYA,EAAK,IAAI,IAErCA,EAAK;AAAA,EACf;AACD,WAASoF,IAAgB;AACrB,IAAKpF,EAAK,mBAGNlF,GAAUkF,EAAK,gBAAgB,IAF/BA,EAAK,mBAAmBrF,GAAc,OAAO,oBAAoB;AAGrE,aAAS9R,IAAImX,EAAK,OAAO,YAAYnX,OAAM;AACvC,UAAIgf,IAAYlN,GAAc,OAAO,4BAA4B;AACjE,MAAAqF,EAAK,iBAAiB,YAAY6H,CAAS;AAAA,IAC9C;AACD,WAAAa,KACO1I,EAAK;AAAA,EACf;AACD,WAAS0I,IAAiB;AACtB,QAAK1I,EAAK,kBAGV;AAAA,UAAI2I,IAAiB3I,EAAK,KAAK,gBAC3B4I,IAAWnJ,GAAeO,EAAK,KAAK,SAAS,SAAS;AAC1D,MAAI2I,IAAiB,KAAKA,IAAiBC,EAAS,WAChDA,IAAWnJ,GAAemJ,EAAS,OAAOD,GAAgBC,EAAS,MAAM,GAAGA,EAAS,OAAO,GAAGD,CAAc,CAAC;AAElH,eAAS9f,IAAImX,EAAK,OAAO,YAAYnX;AACjC,QAAAmX,EAAK,iBAAiB,SAASnX,CAAC,EAAE,YAAY;AAAA;AAAA,YAAuD+f,EAAS,KAAK,yCAAyC,IAAI;AAAA;AAAA;AAAA;AAAA,EAEvK;AACD,WAAS3D,IAAa;AAClB,IAAAjF,EAAK,kBAAkB,UAAU,IAAI,UAAU;AAC/C,QAAIkF,IAAcvK,GAAc,OAAO,uBAAuB;AAC9D,IAAAuK,EAAY,YAAYvK,GAAc,QAAQ,qBAAqBqF,EAAK,KAAK,gBAAgB,CAAC;AAC9F,QAAImF,IAAcxK,GAAc,OAAO,iBAAiB;AACxD,WAAAuK,EAAY,YAAYC,CAAW,GAC5B;AAAA,MACH,aAAaD;AAAA,MACb,aAAaC;AAAA,IACzB;AAAA,EACK;AACD,WAAS5E,GAAY5d,GAAOkmB,GAAU;AAClC,IAAIA,MAAa,WAAUA,IAAW;AACtC,QAAIlE,IAAQkE,IAAWlmB,IAAQA,IAAQqd,EAAK;AAC5C,IAAK2E,IAAQ,KAAK3E,EAAK,wBAAwB,MAC1C2E,IAAQ,KAAK3E,EAAK,wBAAwB,OAE/CA,EAAK,gBAAgB2E,IACjB3E,EAAK,eAAe,KAAKA,EAAK,eAAe,QAC7CA,EAAK,eAAeA,EAAK,eAAe,KAAK,IAAI,IACjDA,EAAK,gBAAgBA,EAAK,eAAe,MAAM,IAC/CiC,GAAa,cAAc,GAC3BwC,MAEJY,KACApD,GAAa,eAAe,GAC5BoG;EACH;AACD,WAAS5H,GAAMqI,GAAoBC,GAAW;AAc1C,QAbID,MAAuB,WAAUA,IAAqB,KACtDC,MAAc,WAAUA,IAAY,KACxC/I,EAAK,MAAM,QAAQ,IACfA,EAAK,aAAa,WAClBA,EAAK,SAAS,QAAQ,KACtBA,EAAK,gBAAgB,WACrBA,EAAK,YAAY,QAAQ,KAC7BA,EAAK,gBAAgB,IACrBA,EAAK,wBAAwB,QACzB+I,MAAc,OACd/I,EAAK,cAAcA,EAAK,aAAa,YAAW,GAChDA,EAAK,eAAeA,EAAK,aAAa,SAAQ,IAE9CA,EAAK,OAAO,eAAe,IAAM;AACjC,UAAI1Z,IAAKwY,GAAgBkB,EAAK,MAAM,GAAGrB,IAAQrY,EAAG,OAAO0M,KAAU1M,EAAG,SAAS+V,KAAU/V,EAAG;AAC5F,MAAA8c,EAASzE,GAAO3L,IAASqJ,EAAO;AAAA,IACnC;AACD,IAAA2D,EAAK,OAAM,GACP8I,KACA7G,GAAa,UAAU;AAAA,EAC9B;AACD,WAASvB,KAAQ;AACb,IAAAV,EAAK,SAAS,IACTA,EAAK,aACFA,EAAK,sBAAsB,UAC3BA,EAAK,kBAAkB,UAAU,OAAO,MAAM,GAE9CA,EAAK,WAAW,UAChBA,EAAK,OAAO,UAAU,OAAO,QAAQ,IAG7CiC,GAAa,SAAS;AAAA,EACzB;AACD,WAASpB,KAAU;AACf,IAAIb,EAAK,WAAW,UAChBiC,GAAa,WAAW;AAC5B,aAASpZ,IAAImX,EAAK,UAAU,QAAQnX;AAChC,MAAAmX,EAAK,UAAUnX,CAAC,EAAE,OAAM;AAG5B,QADAmX,EAAK,YAAY,IACbA,EAAK;AACL,MAAIA,EAAK,YAAY,cACjBA,EAAK,YAAY,WAAW,YAAYA,EAAK,WAAW,GAC5DA,EAAK,cAAc;AAAA,aAEdA,EAAK,qBAAqBA,EAAK,kBAAkB;AACtD,UAAIA,EAAK,OAAO,UAAUA,EAAK,kBAAkB,YAAY;AACzD,YAAI3E,IAAU2E,EAAK,kBAAkB;AAErC,YADA3E,EAAQ,aAAaA,EAAQ,YAAYA,EAAQ,SAAS,GACtDA,EAAQ,YAAY;AACpB,iBAAOA,EAAQ;AACX,YAAAA,EAAQ,WAAW,aAAaA,EAAQ,YAAYA,CAAO;AAC/D,UAAAA,EAAQ,WAAW,YAAYA,CAAO;AAAA,QACzC;AAAA,MACJ;AAEG,QAAA2E,EAAK,kBAAkB,WAAW,YAAYA,EAAK,iBAAiB;AAE5E,IAAIA,EAAK,aACLA,EAAK,MAAM,OAAO,QACdA,EAAK,SAAS,cACdA,EAAK,SAAS,WAAW,YAAYA,EAAK,QAAQ,GACtD,OAAOA,EAAK,WAEZA,EAAK,UACLA,EAAK,MAAM,OAAOA,EAAK,MAAM,OAC7BA,EAAK,MAAM,UAAU,OAAO,iBAAiB,GAC7CA,EAAK,MAAM,gBAAgB,UAAU,IAEzC;AAAA,MACI;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACZ,EAAU,QAAQ,SAAUxW,GAAG;AACnB,UAAI;AACA,eAAOwW,EAAKxW,CAAC;AAAA,MAChB,QACS;AAAA,MAAG;AAAA,IACzB,CAAS;AAAA,EACJ;AACD,WAASwf,GAAevO,GAAM;AAC1B,WAAOuF,EAAK,kBAAkB,SAASvF,CAAI;AAAA,EAC9C;AACD,WAASuJ,GAAcpb,GAAG;AACtB,QAAIoX,EAAK,UAAU,CAACA,EAAK,OAAO,QAAQ;AACpC,UAAIiJ,IAAgBxN,GAAe7S,CAAC,GAChCsgB,IAAoBF,GAAeC,CAAa,GAChDE,IAAUF,MAAkBjJ,EAAK,SACjCiJ,MAAkBjJ,EAAK,YACvBA,EAAK,QAAQ,SAASiJ,CAAa,KAClCrgB,EAAE,QACCA,EAAE,KAAK,YACN,CAACA,EAAE,KAAK,QAAQoX,EAAK,KAAK,KACvB,CAACpX,EAAE,KAAK,QAAQoX,EAAK,QAAQ,IACrCoJ,KAAY,CAACD,KACb,CAACD,KACD,CAACF,GAAepgB,EAAE,aAAa,GAC/BygB,KAAY,CAACrJ,EAAK,OAAO,qBAAqB,KAAK,SAAUvF,IAAM;AACnE,eAAOA,GAAK,SAASwO,CAAa;AAAA,MAClD,CAAa;AACD,MAAIG,MAAaC,OACTrJ,EAAK,OAAO,cACZA,EAAK,QAAQA,EAAK,OAAO,OAAO,IAAOA,EAAK,OAAO,WAC7CA,EAAK,OAAO,YACZA,EAAK,OAAO,UAAU,GAE5BA,EAAK,kBAAkB,UACvBA,EAAK,kBAAkB,UACvBA,EAAK,gBAAgB,UACrBA,EAAK,MAAM,UAAU,MACrBA,EAAK,MAAM,UAAU,UACrBqC,KAEJrC,EAAK,MAAK,GACNA,EAAK,UACLA,EAAK,OAAO,SAAS,WACrBA,EAAK,cAAc,WAAW,KAC9BA,EAAK,MAAM,EAAK;AAAA,IAE3B;AAAA,EACJ;AACD,WAASQ,GAAW8I,GAAS;AACzB,QAAI,GAACA,KACAtJ,EAAK,OAAO,WAAWsJ,IAAUtJ,EAAK,OAAO,QAAQ,iBACrDA,EAAK,OAAO,WAAWsJ,IAAUtJ,EAAK,OAAO,QAAQ,gBAE1D;AAAA,UAAIuJ,IAAaD,GAASE,IAAYxJ,EAAK,gBAAgBuJ;AAC3D,MAAAvJ,EAAK,cAAcuJ,KAAcvJ,EAAK,aAClCA,EAAK,OAAO,WACZA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAW,IACpDA,EAAK,eAAe,KAAK,IAAIA,EAAK,OAAO,QAAQ,SAAQ,GAAIA,EAAK,YAAY,IAEzEA,EAAK,OAAO,WACjBA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAW,MACpDA,EAAK,eAAe,KAAK,IAAIA,EAAK,OAAO,QAAQ,SAAQ,GAAIA,EAAK,YAAY,IAE9EwJ,MACAxJ,EAAK,OAAM,GACXiC,GAAa,cAAc,GAC3BwC;;EAEP;AACD,WAAS3D,GAAU7N,GAAMsK,GAAU;AAC/B,QAAIjX;AACJ,IAAIiX,MAAa,WAAUA,IAAW;AACtC,QAAIkM,IAAczJ,EAAK,UAAU/M,GAAM,QAAWsK,CAAQ;AAC1D,QAAKyC,EAAK,OAAO,WACbyJ,KACApL,GAAaoL,GAAazJ,EAAK,OAAO,SAASzC,MAAa,SAAYA,IAAW,CAACyC,EAAK,cAAc,IAAI,KAC1GA,EAAK,OAAO,WACTyJ,KACApL,GAAaoL,GAAazJ,EAAK,OAAO,SAASzC,MAAa,SAAYA,IAAW,CAACyC,EAAK,cAAc,IAAI;AAC/G,aAAO;AACX,QAAI,CAACA,EAAK,OAAO,UAAUA,EAAK,OAAO,QAAQ,WAAW;AACtD,aAAO;AACX,QAAIyJ,MAAgB;AAChB,aAAO;AAEX,aADIxP,KAAO,CAAC,CAAC+F,EAAK,OAAO,QAAQ0J,MAASpjB,IAAK0Z,EAAK,OAAO,YAAY,QAAQ1Z,MAAO,SAASA,IAAK0Z,EAAK,OAAO,SACvGnX,KAAI,GAAGkC,KAAI,QAAQlC,KAAI6gB,GAAM,QAAQ7gB,MAAK;AAE/C,UADAkC,KAAI2e,GAAM7gB,EAAC,GACP,OAAOkC,MAAM,cACbA,GAAE0e,CAAW;AACb,eAAOxP;AACN,UAAIlP,cAAa,QAClB0e,MAAgB,UAChB1e,GAAE,QAAO,MAAO0e,EAAY,QAAS;AACrC,eAAOxP;AACN,UAAI,OAAOlP,MAAM,UAAU;AAC5B,YAAI4e,KAAS3J,EAAK,UAAUjV,IAAG,QAAW,EAAI;AAC9C,eAAO4e,MAAUA,GAAO,QAAO,MAAOF,EAAY,QAAS,IACrDxP,KACA,CAACA;AAAA,MACV,WACQ,OAAOlP,MAAM,YAClB0e,MAAgB,UAChB1e,GAAE,QACFA,GAAE,MACF0e,EAAY,QAAS,KAAI1e,GAAE,KAAK,QAAS,KACzC0e,EAAY,QAAS,KAAI1e,GAAE,GAAG,QAAS;AACvC,eAAOkP;AAAA,IACd;AACD,WAAO,CAACA;AAAA,EACX;AACD,WAAS4M,GAASpM,GAAM;AACpB,WAAIuF,EAAK,kBAAkB,SACfvF,EAAK,UAAU,QAAQ,QAAQ,MAAM,MACzCA,EAAK,UAAU,QAAQ,oBAAoB,MAAM,MACjDuF,EAAK,cAAc,SAASvF,CAAI,IACjC;AAAA,EACV;AACD,WAASpU,GAAOuC,GAAG;AACf,QAAIugB,IAAUvgB,EAAE,WAAWoX,EAAK,QAC5B4J,IAAe5J,EAAK,OAAO,MAAM,QAAO,MAAO6J;AACnD,IAAIV,KACAS,KACA,EAAEhhB,EAAE,iBAAiBogB,GAAepgB,EAAE,aAAa,MACnDoX,EAAK,QAAQA,EAAK,OAAO,OAAO,IAAMpX,EAAE,WAAWoX,EAAK,WAClDA,EAAK,OAAO,YACZA,EAAK,OAAO,UAAU;AAAA,EAEnC;AACD,WAAS+D,GAAUnb,GAAG;AAClB,QAAI0a,IAAc7H,GAAe7S,CAAC,GAC9BugB,IAAUnJ,EAAK,OAAO,OACpBF,EAAQ,SAASwD,CAAW,IAC5BA,MAAgBtD,EAAK,QACvB8J,IAAa9J,EAAK,OAAO,YACzB+J,KAAe/J,EAAK,WAAW,CAAC8J,KAAc,CAACX,IAC/Ca,KAAqBhK,EAAK,OAAO,UAAUmJ,KAAW,CAACW;AAC3D,QAAIlhB,EAAE,YAAY,MAAMugB,GAAS;AAC7B,UAAIW;AACA,eAAA9J,EAAK,QAAQA,EAAK,OAAO,OAAO,IAAMsD,MAAgBtD,EAAK,WACrDA,EAAK,OAAO,YACZA,EAAK,OAAO,UAAU,GAC5BA,EAAK,MAAK,GACHsD,EAAY;AAGnB,MAAAtD,EAAK,KAAI;AAAA,IAEhB,WACQgJ,GAAe1F,CAAW,KAC/ByG,MACAC,IAAoB;AACpB,UAAIC,KAAY,CAAC,CAACjK,EAAK,iBACnBA,EAAK,cAAc,SAASsD,CAAW;AAC3C,cAAQ1a,EAAE,SAAO;AAAA,QACb,KAAK;AACD,UAAIqhB,MACArhB,EAAE,eAAc,GAChByZ,KACA6H,QAGAhG,GAAWtb,CAAC;AAChB;AAAA,QACJ,KAAK;AACD,UAAAA,EAAE,eAAc,GAChBshB;AACA;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,UAAIf,KAAW,CAACnJ,EAAK,OAAO,eACxBpX,EAAE,eAAc,GAChBoX,EAAK,MAAK;AAEd;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,cAAI,CAACiK,MAAa,CAACd,GAAS;AACxB,YAAAvgB,EAAE,eAAc;AAChB,gBAAI+d,KAAgBzE;AACpB,gBAAIlC,EAAK,kBAAkB,WACtB8J,MAAe,MACXnD,MAAiBE,GAASF,EAAa,IAAK;AACjD,kBAAIwD,KAAUvhB,EAAE,YAAY,KAAK,IAAI;AACrC,cAAKA,EAAE,WAGHA,EAAE,gBAAe,GACjB2X,GAAY4J,EAAO,GACnB1D,GAAWV,EAAqB,CAAC,GAAG,CAAC,KAJrCU,GAAW,QAAW0D,EAAO;AAAA,YAMpC;AAAA,UACJ;AACI,YAAInK,EAAK,eACVA,EAAK,YAAY;AACrB;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,UAAApX,EAAE,eAAc;AAChB,cAAI+b,KAAQ/b,EAAE,YAAY,KAAK,IAAI;AACnC,UAAKoX,EAAK,iBACNsD,EAAY,OAAO,UACnBA,MAAgBtD,EAAK,SACrBsD,MAAgBtD,EAAK,WACjBpX,EAAE,WACFA,EAAE,gBAAe,GACjB4X,GAAWR,EAAK,cAAc2E,EAAK,GACnC8B,GAAWV,EAAqB,CAAC,GAAG,CAAC,KAE/BkE,MACNxD,GAAW,QAAW9B,KAAQ,CAAC,IAE9BrB,MAAgBtD,EAAK,qBAC1BQ,GAAWR,EAAK,cAAc2E,EAAK,IAE9B3E,EAAK,OAAO,eACb,CAACiK,MAAajK,EAAK,eACnBA,EAAK,YAAY,SACrBqC,EAAWzZ,CAAC,GACZoX,EAAK,iBAAgB;AAEzB;AAAA,QACJ,KAAK;AACD,cAAIiK,IAAW;AACX,gBAAIG,KAAQ;AAAA,cACRpK,EAAK;AAAA,cACLA,EAAK;AAAA,cACLA,EAAK;AAAA,cACLA,EAAK;AAAA,YACR,EACI,OAAOA,EAAK,cAAc,EAC1B,OAAO,SAAU3c,IAAG;AAAE,qBAAOA;AAAA,YAAI,CAAA,GAClCwF,KAAIuhB,GAAM,QAAQ9G,CAAW;AACjC,gBAAIza,OAAM,IAAI;AACV,kBAAIuW,KAASgL,GAAMvhB,MAAKD,EAAE,WAAW,KAAK,EAAE;AAC5C,cAAAA,EAAE,eAAc,IACfwW,MAAUY,EAAK,QAAQ,MAAK;AAAA,YAChC;AAAA,UACJ;AACI,YAAI,CAACA,EAAK,OAAO,cAClBA,EAAK,iBACLA,EAAK,cAAc,SAASsD,CAAW,KACvC1a,EAAE,aACFA,EAAE,eAAc,GAChBoX,EAAK,OAAO;AAEhB;AAAA,MAGP;AAAA,IACJ;AACD,QAAIA,EAAK,SAAS,UAAasD,MAAgBtD,EAAK;AAChD,cAAQpX,EAAE,KAAG;AAAA,QACT,KAAKoX,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC;AAAA,QAC/B,KAAKA,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,YAAa;AAC1C,UAAAA,EAAK,KAAK,cAAcA,EAAK,KAAK,KAAK,CAAC,GACxCyC,KACAzB;AACA;AAAA,QACJ,KAAKhB,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC;AAAA,QAC/B,KAAKA,EAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,YAAa;AAC1C,UAAAA,EAAK,KAAK,cAAcA,EAAK,KAAK,KAAK,CAAC,GACxCyC,KACAzB;AACA;AAAA,MACP;AAEL,KAAImI,KAAWH,GAAe1F,CAAW,MACrCrB,GAAa,aAAarZ,CAAC;AAAA,EAElC;AACD,WAAS+X,GAAYlG,GAAM4P,GAAW;AAElC,QADIA,MAAc,WAAUA,IAAY,kBACpC,EAAArK,EAAK,cAAc,WAAW,KAC7BvF,MACI,CAACA,EAAK,UAAU,SAAS4P,CAAS,KAC/B5P,EAAK,UAAU,SAAS,oBAAoB,KAOxD;AAAA,eALI6P,IAAY7P,IACVA,EAAK,QAAQ,QAAS,IACtBuF,EAAK,KAAK,kBAAkB,QAAQ,QAAS,GAAEuK,IAAcvK,EAAK,UAAUA,EAAK,cAAc,CAAC,GAAG,QAAW,EAAI,EAAE,QAAO,GAAIwK,KAAiB,KAAK,IAAIF,GAAWtK,EAAK,cAAc,CAAC,EAAE,QAAO,CAAE,GAAGyK,KAAe,KAAK,IAAIH,GAAWtK,EAAK,cAAc,CAAC,EAAE,QAAO,CAAE,GAC1Q0K,KAAmB,IACnBC,KAAW,GAAGC,KAAW,GACpBzoB,KAAIqoB,IAAgBroB,KAAIsoB,IAActoB,MAAKsN,GAAS;AACzD,QAAKqR,GAAU,IAAI,KAAK3e,EAAC,GAAG,EAAI,MAC5BuoB,KACIA,MAAqBvoB,KAAIqoB,MAAkBroB,KAAIsoB,IAC/CtoB,KAAIooB,MAAgB,CAACI,MAAYxoB,KAAIwoB,MACrCA,KAAWxoB,KACNA,KAAIooB,MAAgB,CAACK,MAAYzoB,KAAIyoB,QAC1CA,KAAWzoB;AAGvB,UAAI0oB,KAAiB,MAAM,KAAK7K,EAAK,WAAW,iBAAiB,oBAAoBA,EAAK,OAAO,aAAa,UAAUqK,CAAS,CAAC;AAClI,MAAAQ,GAAe,QAAQ,SAAUC,IAAS;AACtC,YAAI7X,KAAO6X,GAAQ,SACfC,KAAY9X,GAAK,WACjB+X,KAAcL,KAAW,KAAKI,KAAYJ,MACzCC,KAAW,KAAKG,KAAYH;AACjC,YAAII,IAAY;AACZ,UAAAF,GAAQ,UAAU,IAAI,YAAY,GAClC,CAAC,WAAW,cAAc,UAAU,EAAE,QAAQ,SAAU/gB,IAAG;AACvD,YAAA+gB,GAAQ,UAAU,OAAO/gB,EAAC;AAAA,UAC9C,CAAiB;AACD;AAAA,QACH,WACQ2gB,MAAoB,CAACM;AAC1B;AACJ,SAAC,cAAc,WAAW,YAAY,YAAY,EAAE,QAAQ,SAAUjhB,IAAG;AACrE,UAAA+gB,GAAQ,UAAU,OAAO/gB,EAAC;AAAA,QAC1C,CAAa,GACG0Q,MAAS,WACTA,EAAK,UAAU,IAAI6P,KAAatK,EAAK,cAAc,CAAC,EAAE,QAAS,IACzD,eACA,UAAU,GACZuK,IAAcD,KAAaS,OAAcR,IACzCO,GAAQ,UAAU,IAAI,YAAY,IAC7BP,IAAcD,KAAaS,OAAcR,KAC9CO,GAAQ,UAAU,IAAI,UAAU,GAChCC,MAAaJ,OACZC,OAAa,KAAKG,MAAaH,OAChCtM,GAAUyM,IAAWR,GAAaD,CAAS,KAC3CQ,GAAQ,UAAU,IAAI,SAAS;AAAA,MAEnD,CAAS;AAAA;AAAA,EACJ;AACD,WAAShH,KAAW;AAChB,IAAI9D,EAAK,UAAU,CAACA,EAAK,OAAO,UAAU,CAACA,EAAK,OAAO,UACnDM;EACP;AACD,WAASW,GAAKrY,GAAGqiB,GAAiB;AAE9B,QADIA,MAAoB,WAAUA,IAAkBjL,EAAK,mBACrDA,EAAK,aAAa,IAAM;AACxB,UAAIpX,GAAG;AACH,QAAAA,EAAE,eAAc;AAChB,YAAI0a,IAAc7H,GAAe7S,CAAC;AAClC,QAAI0a,KACAA,EAAY,KAAI;AAAA,MAEvB;AACD,MAAItD,EAAK,gBAAgB,WACrBA,EAAK,YAAY,SACjBA,EAAK,YAAY,UAErBiC,GAAa,QAAQ;AACrB;AAAA,IACH,WACQjC,EAAK,OAAO,YAAYA,EAAK,OAAO;AACzC;AAEJ,QAAIkL,IAAUlL,EAAK;AACnB,IAAAA,EAAK,SAAS,IACTkL,MACDlL,EAAK,kBAAkB,UAAU,IAAI,MAAM,GAC3CA,EAAK,OAAO,UAAU,IAAI,QAAQ,GAClCiC,GAAa,QAAQ,GACrB3B,GAAiB2K,CAAe,IAEhCjL,EAAK,OAAO,eAAe,MAAQA,EAAK,OAAO,eAAe,MAC1DA,EAAK,OAAO,eAAe,OAC1BpX,MAAM,UACH,CAACoX,EAAK,cAAc,SAASpX,EAAE,aAAa,MAChD,WAAW,WAAY;AAAE,aAAOoX,EAAK,YAAY;IAAS,GAAI,EAAE;AAAA,EAG3E;AACD,WAASmL,GAAiBC,GAAM;AAC5B,WAAO,SAAUnY,GAAM;AACnB,UAAI8I,IAAWiE,EAAK,OAAO,MAAMoL,IAAO,MAAM,IAAIpL,EAAK,UAAU/M,GAAM+M,EAAK,OAAO,UAAU,GACzFqL,IAAiBrL,EAAK,OAAO,OAAOoL,MAAS,QAAQ,QAAQ,SAAS,MAAM;AAChF,MAAIrP,MAAY,WACZiE,EAAKoL,MAAS,QAAQ,mBAAmB,gBAAgB,IACrDrP,EAAQ,SAAQ,IAAK,KACjBA,EAAQ,WAAU,IAAK,KACvBA,EAAQ,WAAY,IAAG,IAE/BiE,EAAK,kBACLA,EAAK,gBAAgBA,EAAK,cAAc,OAAO,SAAUjV,IAAG;AAAE,eAAO+V,GAAU/V,EAAC;AAAA,MAAI,CAAA,GAChF,CAACiV,EAAK,cAAc,UAAUoL,MAAS,SACvC/K,EAAiBtE,CAAO,GAC5BiF,OAEAhB,EAAK,kBACLkB,MACInF,MAAY,SACZiE,EAAK,mBAAmBoL,CAAI,IAAIrP,EAAQ,YAAW,EAAG,aAEtDiE,EAAK,mBAAmB,gBAAgBoL,CAAI,GAChDpL,EAAK,mBAAmB,WACpB,CAAC,CAACqL,KACEtP,MAAY,UACZsP,EAAe,YAAW,MAAOtP,EAAQ,YAAW;AAAA,IAE5E;AAAA,EACK;AACD,WAAS0F,KAAc;AACnB,QAAI6J,IAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACZ,GACYC,IAAa/L,GAASA,GAAS,CAAA,GAAI,KAAK,MAAM,KAAK,UAAUM,EAAQ,WAAW,CAAA,CAAE,CAAC,CAAC,GAAGC,CAAc,GACrGjD,IAAU,CAAA;AACd,IAAAkD,EAAK,OAAO,YAAYuL,EAAW,WACnCvL,EAAK,OAAO,aAAauL,EAAW,YACpC,OAAO,eAAevL,EAAK,QAAQ,UAAU;AAAA,MACzC,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAU;AAAA,MAChD,KAAK,SAAUwL,IAAO;AAClB,QAAAxL,EAAK,OAAO,UAAUyL,GAAeD,EAAK;AAAA,MAC7C;AAAA,IACb,CAAS,GACD,OAAO,eAAexL,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAK,SAAUwL,IAAO;AAClB,QAAAxL,EAAK,OAAO,WAAWyL,GAAeD,EAAK;AAAA,MAC9C;AAAA,IACb,CAAS;AACD,QAAIE,IAAWH,EAAW,SAAS;AACnC,QAAI,CAACA,EAAW,eAAeA,EAAW,cAAcG,IAAW;AAC/D,UAAIC,KAAoBzL,GAAU,cAAc,cAAcD,GAAe;AAC7E,MAAAnD,EAAQ,aACJyO,EAAW,cAAcG,IACnB,SAASH,EAAW,gBAAgB,OAAO,MAC3CI,KAAoB,UAAUJ,EAAW,gBAAgB,OAAO;AAAA,IAC7E;AACD,QAAIA,EAAW,aACVA,EAAW,cAAcG,MAC1B,CAACH,EAAW,WAAW;AACvB,UAAIK,KAAmB1L,GAAU,cAAc,aAAaD,GAAe;AAC3E,MAAAnD,EAAQ,YACJyO,EAAW,cAAcG,IACnB,SAASH,EAAW,gBAAgB,SAAS,QAC7CK,MAAoB,UAAUL,EAAW,gBAAgB,OAAO,MAAM;AAAA,IACnF;AACD,WAAO,eAAevL,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAKmL,GAAiB,KAAK;AAAA,IACvC,CAAS,GACD,OAAO,eAAenL,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAKmL,GAAiB,KAAK;AAAA,IACvC,CAAS;AACD,QAAIU,KAAmB,SAAUT,IAAM;AAAE,aAAO,SAAUhN,IAAK;AAC3D,QAAA4B,EAAK,OAAOoL,OAAS,QAAQ,aAAa,UAAU,IAAIpL,EAAK,UAAU5B,IAAK,OAAO;AAAA,MACtF;AAAA;AACD,WAAO,eAAe4B,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAK6L,GAAiB,KAAK;AAAA,IACvC,CAAS,GACD,OAAO,eAAe7L,EAAK,QAAQ,WAAW;AAAA,MAC1C,KAAK,WAAY;AAAE,eAAOA,EAAK,OAAO;AAAA,MAAW;AAAA,MACjD,KAAK6L,GAAiB,KAAK;AAAA,IACvC,CAAS,GACGN,EAAW,SAAS,WACpBvL,EAAK,OAAO,aAAa,IACzBA,EAAK,OAAO,aAAa,KAE7B,OAAO,OAAOA,EAAK,QAAQlD,GAASyO,CAAU;AAC9C,aAAS1iB,KAAI,GAAGA,KAAIyiB,EAAS,QAAQziB;AACjC,MAAAmX,EAAK,OAAOsL,EAASziB,EAAC,CAAC,IACnBmX,EAAK,OAAOsL,EAASziB,EAAC,CAAC,MAAM,MACzBmX,EAAK,OAAOsL,EAASziB,EAAC,CAAC,MAAM;AACzC,IAAAyQ,GAAM,OAAO,SAAUwS,IAAM;AAAE,aAAO9L,EAAK,OAAO8L,EAAI,MAAM;AAAA,IAAU,CAAE,EAAE,QAAQ,SAAUA,IAAM;AAC9F,MAAA9L,EAAK,OAAO8L,EAAI,IAAIvR,GAASyF,EAAK,OAAO8L,EAAI,KAAK,CAAE,CAAA,EAAE,IAAI3J,CAAc;AAAA,IACpF,CAAS,GACDnC,EAAK,WACD,CAACA,EAAK,OAAO,iBACT,CAACA,EAAK,OAAO,UACbA,EAAK,OAAO,SAAS,YACrB,CAACA,EAAK,OAAO,QAAQ,UACrB,CAACA,EAAK,OAAO,UACb,CAACA,EAAK,OAAO,eACb,iEAAiE,KAAK,UAAU,SAAS;AACjG,aAASnX,KAAI,GAAGA,KAAImX,EAAK,OAAO,QAAQ,QAAQnX,MAAK;AACjD,UAAIkjB,KAAa/L,EAAK,OAAO,QAAQnX,EAAC,EAAEmX,CAAI,KAAK;AACjD,eAAShb,MAAO+mB;AACZ,QAAIzS,GAAM,QAAQtU,EAAG,IAAI,KACrBgb,EAAK,OAAOhb,EAAG,IAAIuV,GAASwR,GAAW/mB,EAAG,CAAC,EACtC,IAAImd,CAAc,EAClB,OAAOnC,EAAK,OAAOhb,EAAG,CAAC,IAEvB,OAAOumB,EAAWvmB,EAAG,IAAM,QAChCgb,EAAK,OAAOhb,EAAG,IAAI+mB,GAAW/mB,EAAG;AAAA,IAE5C;AACD,IAAKumB,EAAW,kBACZvL,EAAK,OAAO,gBACRgM,GAAY,EAAG,YAAY,MAAMhM,EAAK,OAAO,gBAErDiC,GAAa,eAAe;AAAA,EAC/B;AACD,WAAS+J,KAAe;AACpB,WAAOhM,EAAK,OAAO,OACbF,EAAQ,cAAc,cAAc,IACpCA;AAAA,EACT;AACD,WAAS4B,KAAc;AACnB,IAAI,OAAO1B,EAAK,OAAO,UAAW,YAC9B,OAAOE,GAAU,MAAMF,EAAK,OAAO,MAAM,IAAM,OAC/CA,EAAK,OAAO,aAAa,IAAI,MAAM,+BAA+BA,EAAK,OAAO,MAAM,CAAC,GACzFA,EAAK,OAAOR,GAASA,GAAS,CAAE,GAAEU,GAAU,MAAM,OAAO,GAAI,OAAOF,EAAK,OAAO,UAAW,WACrFA,EAAK,OAAO,SACZA,EAAK,OAAO,WAAW,YACnBE,GAAU,MAAMF,EAAK,OAAO,MAAM,IAClC,SACVnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,SAAS,UAAU,KAAK,GAAG,IAAI,KAC9DnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,SAAS,SAAS,KAAK,GAAG,IAAI,KAC7DnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,OAAO,UAAU,KAAK,GAAG,IAAI,KAC5DnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,OAAO,SAAS,KAAK,GAAG,IAAI,KAC3DnD,GAAW,IAAI,MAAMmD,EAAK,KAAK,KAAK,CAAC,IAAI,MAAMA,EAAK,KAAK,KAAK,CAAC,IAAI,MAAMA,EAAK,KAAK,KAAK,CAAC,EAAE,YAAa,IAAG,MAAMA,EAAK,KAAK,KAAK,CAAC,EAAE,YAAW,IAAK;AACnJ,QAAIuL,IAAa/L,GAASA,GAAS,CAAA,GAAIO,CAAc,GAAG,KAAK,MAAM,KAAK,UAAUD,EAAQ,WAAW,CAAE,CAAA,CAAC,CAAC;AACzG,IAAIyL,EAAW,cAAc,UACzBrL,GAAU,cAAc,cAAc,WACtCF,EAAK,OAAO,YAAYA,EAAK,KAAK,YAEtCA,EAAK,aAAajD,GAAoBiD,CAAI,GAC1CA,EAAK,YAAY3C,GAAiB,EAAE,QAAQ2C,EAAK,QAAQ,MAAMA,EAAK,KAAI,CAAE;AAAA,EAC7E;AACD,WAASM,GAAiB2L,GAAuB;AAC7C,QAAI,OAAOjM,EAAK,OAAO,YAAa;AAChC,aAAO,KAAKA,EAAK,OAAO,SAASA,GAAMiM,CAAqB;AAEhE,QAAIjM,EAAK,sBAAsB,QAE/B;AAAA,MAAAiC,GAAa,uBAAuB;AACpC,UAAIgJ,IAAkBgB,KAAyBjM,EAAK,kBAChDkM,IAAiB,MAAM,UAAU,OAAO,KAAKlM,EAAK,kBAAkB,UAAW,SAAUmM,IAAKC,IAAO;AAAE,eAAOD,KAAMC,GAAM;AAAA,MAAe,GAAG,CAAC,GAAGC,IAAgBrM,EAAK,kBAAkB,aAAasM,KAAYtM,EAAK,OAAO,SAAS,MAAM,GAAG,GAAGuM,KAAoBD,GAAU,CAAC,GAAGE,KAAsBF,GAAU,SAAS,IAAIA,GAAU,CAAC,IAAI,MAAMG,KAAcxB,EAAgB,sBAAqB,GAAIyB,KAAqB,OAAO,cAAcD,GAAY,QAAQE,KAAYJ,OAAsB,WAC3eA,OAAsB,WACnBG,KAAqBR,KACrBO,GAAY,MAAMP,GACtBU,KAAM,OAAO,cACbH,GAAY,OACVE,KAA+C,CAACT,IAAiB,IAArDjB,EAAgB,eAAe;AAGjD,UAFAzQ,GAAYwF,EAAK,mBAAmB,YAAY,CAAC2M,EAAS,GAC1DnS,GAAYwF,EAAK,mBAAmB,eAAe2M,EAAS,GACxD,CAAA3M,EAAK,OAAO,QAEhB;AAAA,YAAI6M,KAAO,OAAO,cAAcJ,GAAY,MACxCK,KAAW,IACXC,KAAU;AACd,QAAIP,OAAwB,YACxBK,OAASR,IAAgBI,GAAY,SAAS,GAC9CK,KAAW,MAENN,OAAwB,YAC7BK,MAAQR,IAAgBI,GAAY,OACpCM,KAAU,KAEdvS,GAAYwF,EAAK,mBAAmB,aAAa,CAAC8M,MAAY,CAACC,EAAO,GACtEvS,GAAYwF,EAAK,mBAAmB,eAAe8M,EAAQ,GAC3DtS,GAAYwF,EAAK,mBAAmB,cAAc+M,EAAO;AACzD,YAAIC,KAAQ,OAAO,SAAS,KAAK,eAC5B,OAAO,cAAcP,GAAY,QAClCQ,KAAYJ,KAAOR,IAAgB,OAAO,SAAS,KAAK,aACxDa,KAAaF,KAAQX,IAAgB,OAAO,SAAS,KAAK;AAE9D,YADA7R,GAAYwF,EAAK,mBAAmB,aAAaiN,EAAS,GACtD,CAAAjN,EAAK,OAAO;AAGhB,cADAA,EAAK,kBAAkB,MAAM,MAAM4M,KAAM,MACrC,CAACK;AACD,YAAAjN,EAAK,kBAAkB,MAAM,OAAO6M,KAAO,MAC3C7M,EAAK,kBAAkB,MAAM,QAAQ;AAAA,mBAEhC,CAACkN;AACN,YAAAlN,EAAK,kBAAkB,MAAM,OAAO,QACpCA,EAAK,kBAAkB,MAAM,QAAQgN,KAAQ;AAAA,eAE5C;AACD,gBAAIG,KAAMC;AACV,gBAAID,OAAQ;AACR;AACJ,gBAAIE,KAAY,OAAO,SAAS,KAAK,aACjCC,KAAa,KAAK,IAAI,GAAGD,KAAY,IAAIhB,IAAgB,CAAC,GAC1DkB,KAAe,yCACfC,KAAc,wCACdC,KAAcN,GAAI,SAAS,QAC3BO,KAAc,WAAWjB,GAAY,OAAO;AAChDjS,YAAAA,GAAYwF,EAAK,mBAAmB,aAAa,EAAK,GACtDxF,GAAYwF,EAAK,mBAAmB,cAAc,EAAI,GACtDmN,GAAI,WAAWI,KAAe,MAAMC,KAAcE,IAAaD,EAAW,GAC1EzN,EAAK,kBAAkB,MAAM,OAAOsN,KAAa,MACjDtN,EAAK,kBAAkB,MAAM,QAAQ;AAAA,UACxC;AAAA;AAAA;AAAA,EACJ;AACD,WAASoN,KAAwB;AAE7B,aADIO,IAAgB,MACX9kB,IAAI,GAAGA,IAAI,SAAS,YAAY,QAAQA,KAAK;AAClD,UAAI+kB,IAAQ,SAAS,YAAY/kB,CAAC;AAClC,UAAK+kB,EAAM,UAEX;AAAA,YAAI;AACA,UAAAA,EAAM;AAAA,QACT,QACW;AACR;AAAA,QACH;AACD,QAAAD,IAAgBC;AAChB;AAAA;AAAA,IACH;AACD,WAAOD,KAAwCE,GAAgB;AAAA,EAClE;AACD,WAASA,KAAmB;AACxB,QAAIC,IAAQ,SAAS,cAAc,OAAO;AAC1C,oBAAS,KAAK,YAAYA,CAAK,GACxBA,EAAM;AAAA,EAChB;AACD,WAAS5M,KAAS;AACd,IAAIlB,EAAK,OAAO,cAAcA,EAAK,aAEnCyE,KACA4D,MACAhD;EACH;AACD,WAAS6E,KAAgB;AACrB,IAAAlK,EAAK,OAAO,SACR,OAAO,UAAU,UAAU,QAAQ,MAAM,MAAM,MAC/C,UAAU,qBAAqB,SAC/B,WAAWA,EAAK,OAAO,CAAC,IAGxBA,EAAK,MAAK;AAAA,EAEjB;AACD,WAASkE,GAAWtb,GAAG;AACnB,IAAAA,EAAE,eAAc,GAChBA,EAAE,gBAAe;AACjB,QAAImlB,IAAe,SAAU7R,IAAK;AAC9B,aAAOA,GAAI,aACPA,GAAI,UAAU,SAAS,eAAe,KACtC,CAACA,GAAI,UAAU,SAAS,oBAAoB,KAC5C,CAACA,GAAI,UAAU,SAAS,YAAY;AAAA,IACpD,GACY/Z,IAAI6Y,GAAWS,GAAe7S,CAAC,GAAGmlB,CAAY;AAClD,QAAI5rB,MAAM,QAEV;AAAA,UAAIid,IAASjd,GACT6rB,KAAgBhO,EAAK,wBAAwB,IAAI,KAAKZ,EAAO,QAAQ,QAAS,CAAA,GAC9E6O,MAAqBD,GAAa,SAAU,IAAGhO,EAAK,gBACpDgO,GAAa,SAAU,IACnBhO,EAAK,eAAeA,EAAK,OAAO,aAAa,MACjDA,EAAK,OAAO,SAAS;AAEzB,UADAA,EAAK,mBAAmBZ,GACpBY,EAAK,OAAO,SAAS;AACrB,QAAAA,EAAK,gBAAgB,CAACgO,EAAY;AAAA,eAC7BhO,EAAK,OAAO,SAAS,YAAY;AACtC,YAAIkO,KAAgBvI,GAAeqI,EAAY;AAC/C,QAAIE,KACAlO,EAAK,cAAc,OAAO,SAASkO,EAAa,GAAG,CAAC,IAEpDlO,EAAK,cAAc,KAAKgO,EAAY;AAAA,MAC3C;AACI,QAAIhO,EAAK,OAAO,SAAS,YACtBA,EAAK,cAAc,WAAW,KAC9BA,EAAK,MAAM,IAAO,EAAK,GAE3BA,EAAK,wBAAwBgO,IAC7BhO,EAAK,cAAc,KAAKgO,EAAY,GAChC3P,GAAa2P,IAAchO,EAAK,cAAc,CAAC,GAAG,EAAI,MAAM,KAC5DA,EAAK,cAAc,KAAK,SAAUlO,IAAG1I,IAAG;AAAE,iBAAO0I,GAAE,QAAO,IAAK1I,GAAE,QAAS;AAAA,QAAG,CAAA;AAGrF,UADAqZ,KACIwL,IAAmB;AACnB,YAAIzE,KAAYxJ,EAAK,gBAAgBgO,GAAa,YAAW;AAC7D,QAAAhO,EAAK,cAAcgO,GAAa,eAChChO,EAAK,eAAegO,GAAa,YAC7BxE,OACAvH,GAAa,cAAc,GAC3BwC,MAEJxC,GAAa,eAAe;AAAA,MAC/B;AAcD,UAbAoG,MACAhD,KACArE,MACI,CAACiN,MACDjO,EAAK,OAAO,SAAS,WACrBA,EAAK,OAAO,eAAe,IAC3B6F,EAAezG,CAAM,IAChBY,EAAK,qBAAqB,UAC/BA,EAAK,gBAAgB,UACrBA,EAAK,oBAAoBA,EAAK,iBAAiB,MAAK,GAEpDA,EAAK,gBAAgB,UACrBA,EAAK,gBAAgB,UAAaA,EAAK,YAAY,MAAK,GACxDA,EAAK,OAAO,eAAe;AAC3B,YAAImO,KAASnO,EAAK,OAAO,SAAS,YAAY,CAACA,EAAK,OAAO,YACvDoO,KAAQpO,EAAK,OAAO,SAAS,WAC7BA,EAAK,cAAc,WAAW,KAC9B,CAACA,EAAK,OAAO;AACjB,SAAImO,MAAUC,OACVlE;MAEP;AACD,MAAAxG;;EACH;AACD,MAAI2K,KAAY;AAAA,IACZ,QAAQ,CAAC3M,IAAagH,CAAc;AAAA,IACpC,YAAY,CAACN,GAAarG,GAAkBqD,CAAa;AAAA,IACzD,SAAS,CAACrE,CAAU;AAAA,IACpB,SAAS,CAACA,CAAU;AAAA,IACpB,iBAAiB,CAACuN,EAAqB;AAAA,IACvC,YAAY;AAAA,MACR,WAAY;AACR,QAAItO,EAAK,OAAO,eAAe,MAC3BI,EAAKJ,EAAK,QAAQ,SAASA,EAAK,IAAI,GACpCI,EAAKJ,EAAK,QAAQ,SAASA,EAAK,IAAI,MAGpCA,EAAK,OAAO,oBAAoB,SAASA,EAAK,IAAI,GAClDA,EAAK,OAAO,oBAAoB,SAASA,EAAK,IAAI;AAAA,MAEzD;AAAA,IACJ;AAAA,EACT;AACI,WAASmB,GAAIoN,GAAQ5rB,GAAO;AACxB,QAAI4rB,MAAW,QAAQ,OAAOA,KAAW,UAAU;AAC/C,aAAO,OAAOvO,EAAK,QAAQuO,CAAM;AACjC,eAASvpB,KAAOupB;AACZ,QAAIF,GAAUrpB,CAAG,MAAM,UACnBqpB,GAAUrpB,CAAG,EAAE,QAAQ,SAAU3B,GAAG;AAAE,iBAAOA;QAAI,CAAE;AAAA,IAE9D;AAEG,MAAA2c,EAAK,OAAOuO,CAAM,IAAI5rB,GAClB0rB,GAAUE,CAAM,MAAM,SACtBF,GAAUE,CAAM,EAAE,QAAQ,SAAUlrB,GAAG;AAAE,eAAOA;MAAI,CAAE,IACjDiW,GAAM,QAAQiV,CAAM,IAAI,OAC7BvO,EAAK,OAAOuO,CAAM,IAAIhU,GAAS5X,CAAK;AAE5C,IAAAqd,EAAK,OAAM,GACXgB,GAAY,EAAI;AAAA,EACnB;AACD,WAASwN,GAAgBC,GAAW9Q,GAAQ;AACxC,QAAI6N,IAAQ,CAAA;AACZ,QAAIiD,aAAqB;AACrB,MAAAjD,IAAQiD,EAAU,IAAI,SAAU1jB,GAAG;AAAE,eAAOiV,EAAK,UAAUjV,GAAG4S,CAAM;AAAA,MAAI,CAAA;AAAA,aACnE8Q,aAAqB,QAAQ,OAAOA,KAAc;AACvD,MAAAjD,IAAQ,CAACxL,EAAK,UAAUyO,GAAW9Q,CAAM,CAAC;AAAA,aACrC,OAAO8Q,KAAc;AAC1B,cAAQzO,EAAK,OAAO,MAAI;AAAA,QACpB,KAAK;AAAA,QACL,KAAK;AACD,UAAAwL,IAAQ,CAACxL,EAAK,UAAUyO,GAAW9Q,CAAM,CAAC;AAC1C;AAAA,QACJ,KAAK;AACD,UAAA6N,IAAQiD,EACH,MAAMzO,EAAK,OAAO,WAAW,EAC7B,IAAI,SAAU/M,GAAM;AAAE,mBAAO+M,EAAK,UAAU/M,GAAM0K,CAAM;AAAA,UAAE,CAAE;AACjE;AAAA,QACJ,KAAK;AACD,UAAA6N,IAAQiD,EACH,MAAMzO,EAAK,KAAK,cAAc,EAC9B,IAAI,SAAU/M,GAAM;AAAE,mBAAO+M,EAAK,UAAU/M,GAAM0K,CAAM;AAAA,UAAE,CAAE;AACjE;AAAA,MAGP;AAAA;AAGD,MAAAqC,EAAK,OAAO,aAAa,IAAI,MAAM,4BAA4B,KAAK,UAAUyO,CAAS,CAAC,CAAC;AAC7F,IAAAzO,EAAK,gBAAiBA,EAAK,OAAO,sBAC5BwL,IACAA,EAAM,OAAO,SAAUzgB,GAAG;AAAE,aAAOA,aAAa,QAAQ+V,GAAU/V,GAAG,EAAK;AAAA,IAAE,CAAE,GAChFiV,EAAK,OAAO,SAAS,WACrBA,EAAK,cAAc,KAAK,SAAUlO,GAAG1I,IAAG;AAAE,aAAO0I,EAAE,QAAO,IAAK1I,GAAE,QAAS;AAAA,IAAG,CAAA;AAAA,EACpF;AACD,WAASgY,GAAQnO,GAAMyQ,GAAe/F,GAAQ;AAG1C,QAFI+F,MAAkB,WAAUA,IAAgB,KAC5C/F,MAAW,WAAUA,IAASqC,EAAK,OAAO,aACzC/M,MAAS,KAAK,CAACA,KAAUA,aAAgB,SAASA,EAAK,WAAW;AACnE,aAAO+M,EAAK,MAAM0D,CAAa;AACnC,IAAA8K,GAAgBvb,GAAM0K,CAAM,GAC5BqC,EAAK,wBACDA,EAAK,cAAcA,EAAK,cAAc,SAAS,CAAC,GACpDA,EAAK,OAAM,GACXe,EAAW,QAAW2C,CAAa,GACnCrD,KACIL,EAAK,cAAc,WAAW,KAC9BA,EAAK,MAAM,EAAK,GAEpBgB,GAAY0C,CAAa,GACrBA,KACAzB,GAAa,UAAU;AAAA,EAC9B;AACD,WAASwJ,GAAerO,GAAK;AACzB,WAAOA,EACF,MAAO,EACP,IAAI,SAAUsR,GAAM;AACrB,aAAI,OAAOA,KAAS,YAChB,OAAOA,KAAS,YAChBA,aAAgB,OACT1O,EAAK,UAAU0O,GAAM,QAAW,EAAI,IAEtCA,KACL,OAAOA,KAAS,YAChBA,EAAK,QACLA,EAAK,KACE;AAAA,QACH,MAAM1O,EAAK,UAAU0O,EAAK,MAAM,MAAS;AAAA,QACzC,IAAI1O,EAAK,UAAU0O,EAAK,IAAI,MAAS;AAAA,MACzD,IACmBA;AAAA,IACnB,CAAS,EACI,OAAO,SAAUrrB,GAAG;AAAE,aAAOA;AAAA,IAAI,CAAA;AAAA,EACzC;AACD,WAASue,KAAa;AAClB,IAAA5B,EAAK,gBAAgB,IACrBA,EAAK,MAAMA,EAAK,UAAUA,EAAK,OAAO,GAAG,KAAK,oBAAI;AAClD,QAAI2O,IAAgB3O,EAAK,OAAO,iBAC1BA,EAAK,MAAM,aAAa,WACtBA,EAAK,MAAM,aAAa,eACxBA,EAAK,MAAM,eACXA,EAAK,MAAM,UAAUA,EAAK,MAAM,cAC9B,OACAA,EAAK,MAAM;AACrB,IAAI2O,KACAH,GAAgBG,GAAe3O,EAAK,OAAO,UAAU,GACzDA,EAAK,eACDA,EAAK,cAAc,SAAS,IACtBA,EAAK,cAAc,CAAC,IACpBA,EAAK,OAAO,WACVA,EAAK,OAAO,QAAQ,QAAS,IAAGA,EAAK,IAAI,QAAS,IAChDA,EAAK,OAAO,UACZA,EAAK,OAAO,WACVA,EAAK,OAAO,QAAQ,QAAS,IAAGA,EAAK,IAAI,QAAS,IAChDA,EAAK,OAAO,UACZA,EAAK,KACvBA,EAAK,cAAcA,EAAK,aAAa,YAAW,GAChDA,EAAK,eAAeA,EAAK,aAAa,SAAQ,GAC1CA,EAAK,cAAc,SAAS,MAC5BA,EAAK,wBAAwBA,EAAK,cAAc,CAAC,IACjDA,EAAK,OAAO,YAAY,WACxBA,EAAK,OAAO,UAAUA,EAAK,UAAUA,EAAK,OAAO,SAAS,KAAK,IAC/DA,EAAK,OAAO,YAAY,WACxBA,EAAK,OAAO,UAAUA,EAAK,UAAUA,EAAK,OAAO,SAAS,KAAK,IACnEA,EAAK,iBACD,CAAC,CAACA,EAAK,OAAO,YACTA,EAAK,OAAO,QAAQ,SAAU,IAAG,KAC9BA,EAAK,OAAO,QAAQ,WAAY,IAAG,KACnCA,EAAK,OAAO,QAAQ,WAAY,IAAG,IAC/CA,EAAK,iBACD,CAAC,CAACA,EAAK,OAAO,YACTA,EAAK,OAAO,QAAQ,SAAU,IAAG,KAC9BA,EAAK,OAAO,QAAQ,WAAY,IAAG,KACnCA,EAAK,OAAO,QAAQ,WAAY,IAAG;AAAA,EAClD;AACD,WAAS2B,KAAc;AAEnB,QADA3B,EAAK,QAAQgM,MACT,CAAChM,EAAK,OAAO;AACb,MAAAA,EAAK,OAAO,aAAa,IAAI,MAAM,iCAAiC,CAAC;AACrE;AAAA,IACH;AACD,IAAAA,EAAK,MAAM,QAAQA,EAAK,MAAM,MAC9BA,EAAK,MAAM,OAAO,QAClBA,EAAK,MAAM,UAAU,IAAI,iBAAiB,GAC1CA,EAAK,SAASA,EAAK,OACfA,EAAK,OAAO,aACZA,EAAK,WAAWrF,GAAcqF,EAAK,MAAM,UAAUA,EAAK,OAAO,aAAa,GAC5EA,EAAK,SAASA,EAAK,UACnBA,EAAK,SAAS,cAAcA,EAAK,MAAM,aACvCA,EAAK,SAAS,WAAWA,EAAK,MAAM,UACpCA,EAAK,SAAS,WAAWA,EAAK,MAAM,UACpCA,EAAK,SAAS,WAAWA,EAAK,MAAM,UACpCA,EAAK,SAAS,OAAO,QACrBA,EAAK,MAAM,aAAa,QAAQ,QAAQ,GACpC,CAACA,EAAK,OAAO,UAAUA,EAAK,MAAM,cAClCA,EAAK,MAAM,WAAW,aAAaA,EAAK,UAAUA,EAAK,MAAM,WAAW,IAE3EA,EAAK,OAAO,cACbA,EAAK,OAAO,aAAa,YAAY,UAAU,GACnDsO;EACH;AACD,WAASA,KAAwB;AAC7B,IAAAtO,EAAK,mBAAmBA,EAAK,OAAO,mBAAmBA,EAAK;AAAA,EAC/D;AACD,WAAS4D,KAAc;AACnB,QAAIgL,IAAY5O,EAAK,OAAO,aACtBA,EAAK,OAAO,aACR,SACA,mBACJ;AACN,IAAAA,EAAK,cAAcrF,GAAc,SAASqF,EAAK,MAAM,YAAY,mBAAmB,GACpFA,EAAK,YAAY,WAAW,GAC5BA,EAAK,YAAY,OAAO4O,GACxB5O,EAAK,YAAY,WAAWA,EAAK,MAAM,UACvCA,EAAK,YAAY,WAAWA,EAAK,MAAM,UACvCA,EAAK,YAAY,cAAcA,EAAK,MAAM,aAC1CA,EAAK,kBACD4O,MAAc,mBACR,kBACAA,MAAc,SACV,UACA,SACV5O,EAAK,cAAc,SAAS,MAC5BA,EAAK,YAAY,eAAeA,EAAK,YAAY,QAAQA,EAAK,WAAWA,EAAK,cAAc,CAAC,GAAGA,EAAK,eAAe,IAEpHA,EAAK,OAAO,YACZA,EAAK,YAAY,MAAMA,EAAK,WAAWA,EAAK,OAAO,SAAS,OAAO,IACnEA,EAAK,OAAO,YACZA,EAAK,YAAY,MAAMA,EAAK,WAAWA,EAAK,OAAO,SAAS,OAAO,IACnEA,EAAK,MAAM,aAAa,MAAM,MAC9BA,EAAK,YAAY,OAAO,OAAOA,EAAK,MAAM,aAAa,MAAM,CAAC,IAClEA,EAAK,MAAM,OAAO,UACdA,EAAK,aAAa,WAClBA,EAAK,SAAS,OAAO;AACzB,QAAI;AACA,MAAIA,EAAK,MAAM,cACXA,EAAK,MAAM,WAAW,aAAaA,EAAK,aAAaA,EAAK,MAAM,WAAW;AAAA,IAClF,QACU;AAAA,IAAG;AACd,IAAAI,EAAKJ,EAAK,aAAa,UAAU,SAAUpX,GAAG;AAC1C,MAAAoX,EAAK,QAAQvE,GAAe7S,CAAC,EAAE,OAAO,IAAOoX,EAAK,eAAe,GACjEiC,GAAa,UAAU,GACvBA,GAAa,SAAS;AAAA,IAClC,CAAS;AAAA,EACJ;AACD,WAASZ,GAAOzY,GAAG;AACf,QAAIoX,EAAK,WAAW;AAChB,aAAOA,EAAK;AAChB,IAAAA,EAAK,KAAKpX,CAAC;AAAA,EACd;AACD,WAASqZ,GAAatL,GAAOjI,GAAM;AAC/B,QAAIsR,EAAK,WAAW,QAEpB;AAAA,UAAI6O,IAAQ7O,EAAK,OAAOrJ,CAAK;AAC7B,UAAIkY,MAAU,UAAaA,EAAM,SAAS;AACtC,iBAAShmB,IAAI,GAAGgmB,EAAMhmB,CAAC,KAAKA,IAAIgmB,EAAM,QAAQhmB;AAC1C,UAAAgmB,EAAMhmB,CAAC,EAAEmX,EAAK,eAAeA,EAAK,MAAM,OAAOA,GAAMtR,CAAI;AAEjE,MAAIiI,MAAU,eACVqJ,EAAK,MAAM,cAAc8E,GAAY,QAAQ,CAAC,GAC9C9E,EAAK,MAAM,cAAc8E,GAAY,OAAO,CAAC;AAAA;AAAA,EAEpD;AACD,WAASA,GAAYzf,GAAM;AACvB,QAAIuD,IAAI,SAAS,YAAY,OAAO;AACpC,WAAAA,EAAE,UAAUvD,GAAM,IAAM,EAAI,GACrBuD;AAAA,EACV;AACD,WAAS+c,GAAe1S,GAAM;AAC1B,aAASpK,IAAI,GAAGA,IAAImX,EAAK,cAAc,QAAQnX,KAAK;AAChD,UAAImlB,IAAehO,EAAK,cAAcnX,CAAC;AACvC,UAAImlB,aAAwB,QACxB3P,GAAa2P,GAAc/a,CAAI,MAAM;AACrC,eAAO,KAAKpK;AAAA,IACnB;AACD,WAAO;AAAA,EACV;AACD,WAAS+c,GAAc3S,GAAM;AACzB,WAAI+M,EAAK,OAAO,SAAS,WAAWA,EAAK,cAAc,SAAS,IACrD,KACH3B,GAAapL,GAAM+M,EAAK,cAAc,CAAC,CAAC,KAAK,KACjD3B,GAAapL,GAAM+M,EAAK,cAAc,CAAC,CAAC,KAAK;AAAA,EACpD;AACD,WAASqI,KAA+B;AACpC,IAAIrI,EAAK,OAAO,cAAcA,EAAK,YAAY,CAACA,EAAK,aAErDA,EAAK,aAAa,QAAQ,SAAUkI,GAAarf,GAAG;AAChD,UAAIkC,IAAI,IAAI,KAAKiV,EAAK,aAAaA,EAAK,cAAc,CAAC;AACvD,MAAAjV,EAAE,SAASiV,EAAK,eAAenX,CAAC,GAC5BmX,EAAK,OAAO,aAAa,KACzBA,EAAK,OAAO,sBAAsB,WAClCA,EAAK,cAAcnX,CAAC,EAAE,cAClB8S,GAAW5Q,EAAE,SAAQ,GAAIiV,EAAK,OAAO,uBAAuBA,EAAK,IAAI,IAAI,MAG7EA,EAAK,wBAAwB,QAAQjV,EAAE,SAAQ,EAAG,YAEtDmd,EAAY,QAAQnd,EAAE,YAAa,EAAC,SAAQ;AAAA,IACxD,CAAS,GACDiV,EAAK,sBACDA,EAAK,OAAO,YAAY,WACnBA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAa,IACjDA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,SAAU,IACnDA,EAAK,cAAcA,EAAK,OAAO,QAAQ,YAAW,IAChEA,EAAK,sBACDA,EAAK,OAAO,YAAY,WACnBA,EAAK,gBAAgBA,EAAK,OAAO,QAAQ,YAAa,IACjDA,EAAK,eAAe,IAAIA,EAAK,OAAO,QAAQ,SAAU,IACtDA,EAAK,cAAcA,EAAK,OAAO,QAAQ,YAAW;AAAA,EACnE;AACD,WAAS6J,GAAWiF,GAAgB;AAChC,QAAInR,IAASmR,MACR9O,EAAK,OAAO,WAAWA,EAAK,OAAO,YAAYA,EAAK,OAAO;AAChE,WAAOA,EAAK,cACP,IAAI,SAAU+O,GAAM;AAAE,aAAO/O,EAAK,WAAW+O,GAAMpR,CAAM;AAAA,KAAI,EAC7D,OAAO,SAAU5S,GAAGlC,GAAGuU,IAAK;AAC7B,aAAO4C,EAAK,OAAO,SAAS,WACxBA,EAAK,OAAO,cACZ5C,GAAI,QAAQrS,CAAC,MAAMlC;AAAA,IACnC,CAAS,EACI,KAAKmX,EAAK,OAAO,SAAS,UACzBA,EAAK,OAAO,cACZA,EAAK,KAAK,cAAc;AAAA,EACjC;AACD,WAASgB,GAAY0C,GAAe;AAChC,IAAIA,MAAkB,WAAUA,IAAgB,KAC5C1D,EAAK,gBAAgB,UAAaA,EAAK,oBACvCA,EAAK,YAAY,QACbA,EAAK,0BAA0B,SACzBA,EAAK,WAAWA,EAAK,uBAAuBA,EAAK,eAAe,IAChE,KAEdA,EAAK,MAAM,QAAQ6J,GAAW7J,EAAK,OAAO,UAAU,GAChDA,EAAK,aAAa,WAClBA,EAAK,SAAS,QAAQ6J,GAAW7J,EAAK,OAAO,SAAS,IAEtD0D,MAAkB,MAClBzB,GAAa,eAAe;AAAA,EACnC;AACD,WAASgC,GAAgBrb,GAAG;AACxB,QAAI0a,IAAc7H,GAAe7S,CAAC,GAC9BomB,IAAchP,EAAK,aAAa,SAASsD,CAAW,GACpD2L,IAAcjP,EAAK,aAAa,SAASsD,CAAW;AACxD,IAAI0L,KAAeC,IACf1O,GAAYyO,IAAc,KAAK,CAAC,IAE3BhP,EAAK,aAAa,QAAQsD,CAAW,KAAK,IAC/CA,EAAY,OAAM,IAEbA,EAAY,UAAU,SAAS,SAAS,IAC7CtD,EAAK,WAAWA,EAAK,cAAc,CAAC,IAE/BsD,EAAY,UAAU,SAAS,WAAW,KAC/CtD,EAAK,WAAWA,EAAK,cAAc,CAAC;AAAA,EAE3C;AACD,WAASuC,GAAY3Z,GAAG;AACpB,IAAAA,EAAE,eAAc;AAChB,QAAIsmB,IAAYtmB,EAAE,SAAS,WAAW0a,IAAc7H,GAAe7S,CAAC,GAAGic,IAAQvB;AAC/E,IAAItD,EAAK,SAAS,UAAasD,MAAgBtD,EAAK,SAChDA,EAAK,KAAK,cACNA,EAAK,KAAK,KAAKhG,GAAIgG,EAAK,KAAK,gBAAgBA,EAAK,KAAK,KAAK,CAAC,CAAC,CAAC;AAEvE,QAAImP,KAAM,WAAWtK,EAAM,aAAa,KAAK,CAAC,GAAGuK,KAAM,WAAWvK,EAAM,aAAa,KAAK,CAAC,GAAGwK,KAAO,WAAWxK,EAAM,aAAa,MAAM,CAAC,GAAGyK,KAAW,SAASzK,EAAM,OAAO,EAAE,GAAGF,KAAQ/b,EAAE,UACxLsmB,IAAatmB,EAAE,UAAU,KAAK,IAAI,KAAM,IACzCxC,KAAWkpB,KAAWD,KAAO1K;AACjC,QAAI,OAAOE,EAAM,QAAU,OAAeA,EAAM,MAAM,WAAW,GAAG;AAChE,UAAI0K,KAAa1K,MAAU7E,EAAK,aAAawP,KAAe3K,MAAU7E,EAAK;AAC3E,MAAI5Z,KAAW+oB,MACX/oB,KACIgpB,KACIhpB,KACA4T,GAAI,CAACuV,EAAU,KACdvV,GAAIuV,EAAU,KAAKvV,GAAI,CAACgG,EAAK,IAAI,IACtCwP,MACA9K,EAAkB,QAAW,IAAI1E,EAAK,WAAW,KAEhD5Z,KAAWgpB,OAChBhpB,KACIye,MAAU7E,EAAK,cAAc5Z,KAAWgpB,KAAMpV,GAAI,CAACgG,EAAK,IAAI,IAAImP,IAChEK,MACA9K,EAAkB,QAAW,GAAG1E,EAAK,WAAW,IAEpDA,EAAK,QACLuP,OACCF,OAAS,IACJjpB,KAAWkpB,OAAa,KACxB,KAAK,IAAIlpB,KAAWkpB,EAAQ,IAAID,QACtCrP,EAAK,KAAK,cACNA,EAAK,KAAK,KAAKhG,GAAIgG,EAAK,KAAK,gBAAgBA,EAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAEvE6E,EAAM,QAAQhL,GAAIzT,EAAQ;AAAA,IAC7B;AAAA,EACJ;AACD,SAAAob,KACOxB;AACX;AACA,SAASyP,GAAWC,GAAUje,GAAQ;AAKlC,WAJIke,IAAQ,MAAM,UAAU,MACvB,KAAKD,CAAQ,EACb,OAAO,SAAUrsB,GAAG;AAAE,WAAOA,aAAa;AAAA,EAAY,CAAE,GACzDusB,IAAY,CAAA,GACP/mB,IAAI,GAAGA,IAAI8mB,EAAM,QAAQ9mB,KAAK;AACnC,QAAIkS,IAAO4U,EAAM9mB,CAAC;AAClB,QAAI;AACA,UAAIkS,EAAK,aAAa,cAAc,MAAM;AACtC;AACJ,MAAIA,EAAK,eAAe,WACpBA,EAAK,WAAW,WAChBA,EAAK,aAAa,SAEtBA,EAAK,aAAa8E,GAAkB9E,GAAMtJ,KAAU,CAAE,CAAA,GACtDme,EAAU,KAAK7U,EAAK,UAAU;AAAA,IACjC,SACMnS,GAAG;AACN,cAAQ,MAAMA,CAAC;AAAA,IAClB;AAAA,EACJ;AACD,SAAOgnB,EAAU,WAAW,IAAIA,EAAU,CAAC,IAAIA;AACnD;AACI,OAAO,cAAgB,OACvB,OAAO,iBAAmB,OAC1B,OAAO,WAAa,QACpB,eAAe,UAAU,YAAY,SAAS,UAAU,YAAY,SAAUne,GAAQ;AAClF,SAAOge,GAAW,MAAMhe,CAAM;AACtC,GACI,YAAY,UAAU,YAAY,SAAUA,GAAQ;AAChD,SAAOge,GAAW,CAAC,IAAI,GAAGhe,CAAM;AACxC;AAEA,IAAIyO,KAAY,SAAU2P,GAAUpe,GAAQ;AACxC,SAAI,OAAOoe,KAAa,WACbJ,GAAW,OAAO,SAAS,iBAAiBI,CAAQ,GAAGpe,CAAM,IAE/Doe,aAAoB,OAClBJ,GAAW,CAACI,CAAQ,GAAGpe,CAAM,IAG7Bge,GAAWI,GAAUpe,CAAM;AAE1C;AACAyO,GAAU,gBAAgB,CAAA;AAC1BA,GAAU,QAAQ;AAAA,EACd,IAAIV,GAAS,CAAE,GAAEW,EAAO;AAAA,EACxB,SAASX,GAAS,CAAE,GAAEW,EAAO;AACjC;AACAD,GAAU,WAAW,SAAUlD,GAAM;AACjC,EAAAkD,GAAU,MAAM,UAAUV,GAASA,GAAS,IAAIU,GAAU,MAAM,OAAO,GAAGlD,CAAI;AAClF;AACAkD,GAAU,cAAc,SAAUzO,GAAQ;AACtC,EAAAyO,GAAU,gBAAgBV,GAASA,GAAS,CAAE,GAAEU,GAAU,aAAa,GAAGzO,CAAM;AACpF;AACAyO,GAAU,YAAY7C,GAAiB,CAAA,CAAE;AACzC6C,GAAU,aAAanD,GAAoB,CAAA,CAAE;AAC7CmD,GAAU,eAAe7B;AACrB,OAAO,SAAW,OAAe,OAAO,OAAO,KAAO,QACtD,OAAO,GAAG,YAAY,SAAU5M,GAAQ;AACpC,SAAOge,GAAW,MAAMhe,CAAM;AACtC;AAEA,KAAK,UAAU,UAAU,SAAUoB,GAAM;AACrC,SAAO,IAAI,KAAK,KAAK,YAAa,GAAE,KAAK,SAAU,GAAE,KAAK,QAAS,KAAI,OAAOA,KAAS,WAAW,SAASA,GAAM,EAAE,IAAIA,EAAK;AAChI;AACI,OAAO,SAAW,QAClB,OAAO,YAAYqN;AC3/DvB,MAAM4P,KAAiB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAEMC,KAAiB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AChBA,SAASC,GAAaC,GAAQ;AAC1B,SAAOA,EAAO,QAAQ,mBAAmB,OAAO,EAAE,YAAW;AACjE;AACA,SAAS1V,GAASzC,GAAK;AACnB,SAAOA,aAAe,QAChBA,IACA,CAACA,CAAG;AACd;AACA,SAASoY,GAAQvtB,GAAO;AACpB,SAAQA,KAASA,EAAM,SACjBA,IACA;AACV;ACPA,MAAMwtB,KAAY,CAAC,GAAGL,IAAgB,GAAGC,EAAc,GAEjDK,KAAkB,CAAC,UAAU,YAAY,GAC/CC,KAAeC,EAAgB;AAAA,EAC3B,MAAM;AAAA,EACN,cAAc;AAAA,IACV,MAAM;AAAA,EACT;AAAA,EACD,SAAS;AACL,WAAOrmB,GAAE,SAAS;AAAA,MACd,MAAM;AAAA,MACN,cAAc;AAAA,MACd,UAAU,KAAK;AAAA,MACf,SAAS,KAAK;AAAA,IAC1B,CAAS;AAAA,EACJ;AAAA,EACD,OAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA,GAAGkmB,GAAU,IAAIH,EAAY;AAAA,EAChC;AAAA,EACD,OAAO;AAAA,IACH,YAAY;AAAA,MACR,MAAM,CAAC,QAAQ,QAAQ,MAAM,OAAO,IAAI;AAAA,MACxC,UAAU;AAAA,IACb;AAAA;AAAA,IAED,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO;AAAA,QACZ,aAAa;AAAA,QACb,MAAM;AAAA,MACtB;AAAA,IACS;AAAA,IACD,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,MAAMF;AAAA,IAClB;AAAA,IACD,UAAU;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACZ;AAAA,EACJ;AAAA,EACD,OAAO;AACH,WAAO;AAAA,MACH,IAAI;AAAA;AAAA,IAChB;AAAA,EACK;AAAA,EACD,UAAU;AAGN,IAAI,KAAK,OAGT,KAAK,KAAK5P,GAAU,KAAK,QAAO,GAAI,KAAK,cAAa,CAAE,GAExD,KAAK,QAAO,EAAG,iBAAiB,QAAQ,KAAK,MAAM,GAGnD,KAAK,OAAO,YAAY,KAAK,eAAe;AAAA,MACxC,WAAW;AAAA,IACvB,CAAS;AAAA,EACJ;AAAA,EACD,SAAS;AAAA,IACL,gBAAgB;AAEZ,UAAIqQ,IAAa,OAAO,OAAO,CAAA,GAAI,KAAK,MAAM;AAC9C,WAAK,OAAO,QAAQ,CAACzE,MAAS;AAE1B,YAAI0E,IAAkBtQ,GAAU,cAAc4L,CAAI,KAAK,CAAA,GAEnD2E,IAAgB,IAAInW,MAAS;AAC7B,eAAK,MAAM0V,GAAalE,CAAI,GAAG,GAAGxR,CAAI;AAAA,QAC1D;AAEgB,QAAAiW,EAAWzE,CAAI,IAAIvR,GAASgW,EAAWzE,CAAI,KAAK,CAAA,CAAE,EAAE,OAAO0E,GAAiBC,CAAa;AAAA,MACzG,CAAa;AACD,YAAMC,IAAY,KAAK,QAAQ,KAAK,IAAI;AACxC,aAAAH,EAAW,UAAahW,GAASgW,EAAW,WAAc,EAAE,EAAE,OAAOG,CAAS,GAE9EH,EAAW,cAAc,KAAK,cAAcA,EAAW,aAChDA;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,UAAU;AACN,aAAO,KAAK,OAAO,OAAO,KAAK,IAAI,aAAa,KAAK;AAAA,IACxD;AAAA;AAAA;AAAA;AAAA,IAID,QAAQ5Z,GAAO;AACX,YAAMkO,IAAQlO,EAAM;AAEpB,MAAAga,GAAQ,EAAG,KAAK,MAAM;AAClB,aAAK,MAAM,qBAAqBT,GAAQrL,EAAM,KAAK,CAAC;AAAA,MACpE,CAAa;AAAA,IACJ;AAAA,IACD,UAAU;AACN,aAAO,KAAK,GAAG,YAAY,KAAK,GAAG;AAAA,IACtC;AAAA;AAAA;AAAA;AAAA,IAID,OAAOlO,GAAO;AACV,WAAK,MAAM,QAAQuZ,GAAQvZ,EAAM,OAAO,KAAK,CAAC;AAAA,IACjD;AAAA;AAAA;AAAA;AAAA,IAID,QAAQia,GAAeC,GAAS;AAC5B,WAAK,MAAM,qBAAqBA,CAAO;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA,IAID,cAAcC,GAAU;AACpB,MAAIA,IACA,KAAK,QAAS,EAAC,aAAa,YAAY,EAAE,IAG1C,KAAK,QAAO,EAAG,gBAAgB,UAAU;AAAA,IAEhD;AAAA,EACJ;AAAA,EACD,OAAO;AAAA;AAAA;AAAA;AAAA,IAIH,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,QAAQC,GAAW;AACf,YAAI,CAAC,KAAK;AACN;AACJ,YAAIR,IAAa,OAAO,OAAO,CAAE,GAAEQ,CAAS;AAK5C,QAAAZ,GAAU,QAAQ,CAACrE,MAAS;AACxB,iBAAOyE,EAAWzE,CAAI;AAAA,QAC1C,CAAiB,GACD,KAAK,GAAG,IAAIyE,CAAU,GAEtBH,GAAgB,QAAQ,CAAC/qB,MAAS;AAC9B,UAAI,OAAOkrB,EAAWlrB,CAAI,IAAM,OAC5B,KAAK,GAAG,IAAIA,GAAMkrB,EAAWlrB,CAAI,CAAC;AAAA,QAE1D,CAAiB;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA,IAID,WAAWe,GAAU;AACjB,UAAIE;AAEJ,MAAI,CAAC,KAAK,OAAOF,MAAa8pB,GAAQ,KAAK,IAAI,KAAK,MAGnD5pB,IAAK,KAAK,QAAQ,QAAQA,MAAO,UAAkBA,EAAG,QAAQF,GAAU,EAAI;AAAA,IAChF;AAAA,EACJ;AAAA,EACD,gBAAgB;AAEZ,IAAK,KAAK,OAEV,KAAK,QAAO,EAAG,oBAAoB,QAAQ,KAAK,MAAM,GACtD,KAAK,GAAG,WACR,KAAK,KAAK;AAAA,EACb;AACL,CAAC;;;AClLD,GAAC,SAAU4qB,GAAQC,GAAS;AACqC,IAAAA,EAAQC,CAAO;AAAA,KAG9Erf,IAAO,SAAUqf,GAAS;AAE1B,QAAIC,IAAK,OAAO,SAAW,OAAe,OAAO,cAAc,SACzD,OAAO,YACP;AAAA,MACE,OAAO,CAAE;AAAA,IACnB,GACMC,IAAS;AAAA,MACT,UAAU;AAAA,QACN,WAAW,CAAC,OAAO,OAAO,MAAM,OAAO,OAAO,OAAO,KAAK;AAAA,QAC1D,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,QAAQ;AAAA,QACJ,WAAW;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,QACD,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,SAAS,WAAY;AACjB,eAAO;AAAA,MACV;AAAA,IACP;AACE,IAAAD,EAAG,MAAM,KAAKC;AACd,QAAIC,IAAKF,EAAG;AAEZ,IAAAD,EAAQ,SAASE,GACjBF,EAAQ,UAAUG,GAElB,OAAO,eAAeH,GAAS,cAAc,EAAE,OAAO,GAAI,CAAE;AAAA,EAE9D;;;;ACrEA,GAAC,SAAUF,GAAQC,GAAS;AACqC,IAAAA,EAAQC,CAAO;AAAA,KAG9Erf,IAAO,SAAUqf,GAAS;AAE1B,QAAIC,IAAK,OAAO,SAAW,OAAe,OAAO,cAAc,SACzD,OAAO,YACP;AAAA,MACE,OAAO,CAAE;AAAA,IACnB,GACMG,IAAQ;AAAA,MACR,UAAU;AAAA,QACN,WAAW,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,QACpD,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,QAAQ;AAAA,QACJ,WAAW;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,QACD,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,gBAAgB;AAAA,MAChB,SAAS,WAAY;AACjB,eAAO;AAAA,MACV;AAAA,MACD,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,eAAe;AAAA,MACf,WAAW;AAAA,IACjB;AACE,IAAAH,EAAG,MAAM,KAAKG;AACd,QAAIC,IAAKJ,EAAG;AAEZ,IAAAD,EAAQ,QAAQI,GAChBJ,EAAQ,UAAUK,GAElB,OAAO,eAAeL,GAAS,cAAc,EAAE,OAAO,GAAI,CAAE;AAAA,EAE9D;;;;AC1EA,GAAC,SAAUF,GAAQC,GAAS;AACqC,IAAAA,EAAQC,CAAO;AAAA,KAG9Erf,IAAO,SAAUqf,GAAS;AAE1B,QAAIvX,IAAU;AAAA,MACV,UAAU;AAAA,QACN,WAAW,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,QAC3D,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,QAAQ;AAAA,QACJ,WAAW;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,QACD,UAAU;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAAA,MACJ;AAAA,MACD,aAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC5D,gBAAgB;AAAA,MAChB,SAAS,SAAUC,GAAK;AACpB,YAAI,IAAIA,IAAM;AACd,YAAI,IAAI,KAAK,IAAI;AACb,iBAAO;AACX,gBAAQ,IAAI,IAAE;AAAA,UACV,KAAK;AACD,mBAAO;AAAA,UACX,KAAK;AACD,mBAAO;AAAA,UACX,KAAK;AACD,mBAAO;AAAA,UACX;AACI,mBAAO;AAAA,QACd;AAAA,MACJ;AAAA,MACD,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,MAAM,CAAC,MAAM,IAAI;AAAA,MACjB,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,WAAW;AAAA,IACjB;AAEE,IAAAsX,EAAQ,UAAUvX,GAClBuX,EAAQ,UAAUvX,GAElB,OAAO,eAAeuX,GAAS,cAAc,EAAE,OAAO,GAAI,CAAE;AAAA,EAE9D;;;AChFA,MAAM,KAAE/uB,GAAE,IAAI2K,GAAK;AAEZ,SAAS0kB,KAAwB;AAGtC,SAFwBC,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExBuvB,IAAY;AAAA,IACjC,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACEO,MAAMC,KAAgB;AAAA,EAC3B;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AACF,GAEMC,KAAiBC,GAAqC,YAAY,SAAS;AAEjE,SAAAC,GAAuBC,GAA0CC,GAAqC;AACpH,EAAIJ,GAAe,UAAU,cAAWA,GAAe,QAAQI;AAGtD,WAAAC,EAAYC,GAAwBC,GAAe;AACtD,IAAA,CAACrlB,MAAQ,CAACA,GAAK,UAEdA,GAAA,OAAO,iBAAiBolB,GAAUC,CAAQ;AAAA,EACjD;AAEM,QAAAC,IAAc,CAACpjB,MACf,CAAClC,MAAQ,CAACA,GAAK,SAAe,KAC9BilB,EAAyB,SAAS/iB,CAAI,KAAKA,MAAS,QAEtD4iB,GAAe,QAAQ5iB,GAElBlC,GAAA,OAAO,OAAO,QAAQkC,GAEpBA,KAEF;AAiBF,SAAA;AAAA,IACL,aAAAijB;AAAA,IACA,oBAhByB,MAAM;AAC/B,UAAI,GAACnlB,MAAQ,CAACA,GAAK,UAAU8kB,GAAe,UAAU,YACtD;AAAA,YAAIG,EAAyB,SAASH,GAAe,KAAK,KAAKA,GAAe,UAAU,MAAM;AAGvF,UAAA9kB,GAAA,OAAO,OAAO,QAAQ8kB,GAAe;AAC1C;AAAA,QACF;AACAA,QAAAA,GAAe,QAAQI,GAGlBllB,GAAA,OAAO,OAAO,QAAQklB;AAAA;AAAA,IAAA;AAAA,IAM3B,qBAAqBK,GAAST,EAAc;AAAA,IAC5C,aAAAQ;AAAA,IACA,cAAcT;AAAA,EAAA;AAElB;AAEO,SAASW,KAAsB;AAC7B,SAAA;AAAA,IACL,qBAAqBD,GAAST,EAAc;AAAA,EAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;AC/DA,UAAM3vB,IAAQC,GAqCR4D,IAAOC,GAQPwsB,IAAwBrqB,EAAS,MAAS,GAC1CsqB,IAAkBtqB,EAAI,EAAK,GAE3BuqB,IAA2B,CAC/BvqB,MAEOA,MAAQ,QAAQ,OAAOA,EAAI,KAAO,KAGrCwqB,IAAcxqB,EAAkB,IAAI,GACpCyqB,IAAezqB,EAAkB,IAAI,GACrC0qB,IAAW1qB,EAAI,EAAK,GACpB2qB,IAAiB3qB,EAAI,EAAE,GACvB4qB,IAAiB5qB,EAAmB,IAAI,GACxC6qB,IAAc7qB,EAAI,EAAK,GAEvB,EAAE,GAAA/F,MAAMC,MAER4wB,IAAY,CAACrwB,MACVA,EAAM,QAAQ,KAAK,MAAM,GAG5BswB,IAA0B,CAACtwB,MAAe;AAC9C,MAAIA,MAAUV,EAAM,eACpB6D,EAAK,qBAAqBnD,CAAK,GAC/BmD,EAAK,QAAQ;AAAA,IAAA,GAGTotB,IAAoB,CAACvwB,MAAe;AACxC,UAAIA,MAAU,QAAQD,EAAYC,CAAK,GAAG;AACxC,QAAAswB,EAAwB,IAAI;AAC5B;AAAA,MACF;AACI,UAAAtwB,KAASA,EAAM,MAAM;AACvB,QAAAswB,EAAwBD,EAAUrwB,EAAM,OAAO,EAAE,CAAC;AAClD;AAAA,MACF;AACwB,MAAAswB,EAAAD,EAAUrwB,IAAQ,EAAE,CAAC;AAAA,IAAA,GAGzCwwB,IAAkB,MAAM;AACZ,MAAAC,KAChBR,EAAS,QAAQ,IACjB9sB,EAAK,QAAQ;AAAA,IAAA,GAGTutB,IAAmB,MAAM;AAC7B,MAAAT,EAAS,QAAQ,IACjB9sB,EAAK,SAAS;AAAA,IAAA,GAGVwtB,IAAoB,MAAM;AAC1B,MAACb,EAAyBC,EAAY,KAAK,MAC/CG,EAAe,QAAQH,EAAY,MAAM,QAAA,EAAU;AAAA,IAAA,GAG/CU,IAAkB,MAAM;;AACxB,UAAA,CAACX,EAAyBC,EAAY,KAAK;AAAG;AAClD,YAAMa,IAAWV,EAAe,MAAM,QAAQ,cAAc,EAAE,GACxD5f,IAAOyf,EAAY,MAAM,GAAG,UAAUa,GAAUC,EAAU,KAAK;AACjE,UAAA9wB,EAAYuQ,CAAI,GAAG;AACjB,QAAApQ,GAAOZ,EAAM,YAAY,KACfqE,KAAAosB,EAAA,UAAA,QAAApsB,GAAO,GAAG,MAAM,OAE5BE,KAAAksB,EAAY,UAAZ,QAAAlsB,GAAmB,GAAG,QAAQvE,EAAM,cAAc,KAEjDwxB,EAAA,MAAM,eAAe,UACxB3tB,EAAK,MAAM;AACX;AAAA,MACF;AACA,OAAAsI,KAAAskB,EAAY,UAAZ,QAAAtkB,GAAmB,GAAG,QAAQ6E,GAAM,KACjCwgB,EAAA,MAAM,eAAe,UACxB3tB,EAAK,MAAM;AAAA,IAAA,GAGP4tB,IAAU,MAAM;AACpB,MAAAZ,EAAe,QAAQ7wB,EAAM,cAC7B6D,EAAK,qBAAqB/B,EAAM9B,EAAM,YAAY,CAAC;AAAA,IAAA,GAG/CuxB,IAAYlxB,EAAS,MAClBL,EAAM,SAAS,aAAa,cAAc,OAClD,GAEKgT,IAAsB3S,EAAS,MAC5BL,EAAM,SAAS,aAAa,qBAAqB,YACzD,GAEK0xB,IAAiBrxB,EAAS,MAC1BL,EAAM,UAAUA,EAAM,OAAO,SAAS,IACjCA,EAAM,SAER;AAAA,MACL;AAAA,QACE,MAAM,IAAI,KAAK,MAAM,CAAC;AAAA,QACtB,IAAI,IAAI,KAAK,MAAM,EAAE;AAAA,MACvB;AAAA,IAAA,CAEH,GAEK2xB,IAAuBtxB,EAAS,MAC7BO,GAAOZ,EAAM,YAAY,IAAI,SAAYA,EAAM,YACvD,GAEK4xB,KAAkBvxB,EAAS,MAC3BL,EAAM,gBAAgBS,EAAY6vB,EAAsB,KAAK,IACxD,KAEF;AAAA,MACLA,EAAsB,MAAM;AAAA,QAC1B,QAAQ;AAAA,UACN;AAAA,YACE,OAAOpwB,EAAE,mBAAmB;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,SAAS,CAACmC,GAAe6sB,MAA2B;AAClD,gBAAM1d,KAAMpB;AACT,UAAA8e,EAAA,QAAQ1d,IAAK,EAAI,GACFyf,EAAAhgB,GAAUO,EAAG,CAAC;AAAA,QAClC;AAAA,MAAA,CACD;AAAA,IAAA,CAEJ,GAGKqgB,IAAY;AAAA,MAChB,IAAI1C,GAAA;AAAA,MACJ,IAAIjR,GAAA;AAAA,MACJ,IAAImR,GAAA;AAAA,IAAA,GAGA,EAAE,qBAAAyC,MAAwBzB,MAE1B0B,IAAkB1xB,EAAS,MAAM;;AACrC,YAAM2oB,KAAkB3kB,IAAAqsB,EAAa,UAAb,gBAAArsB,EAAoB,IAAI,cAAc;AACvD,aAAA;AAAA,QACL,YAAYrE,EAAM,SAAS;AAAA,QAC3B,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAWuxB,EAAU;AAAA,QACrB,aAAaI,EAAqB;AAAA,QAClC,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,eAAe;AAAA,QACf,iBAAiB3I,KAAmB;AAAA;AAAA,QAEpC,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,UAAU;AAAA;AAAA,QAEV,QAAQ,EAAE,GAAG6I,EAAUC,EAAoB,KAAK,EAAE;AAAA,QAClD,QAAQJ,EAAe;AAAA,QACvB,aAAa1xB,EAAM;AAAA;AAAA,QAEnB,SAASA,EAAM,UAAS,oBAAI,QAAO,QAAQ,EAAE,IAAI;AAAA,QACjD,SAAS4xB,GAAgB;AAAA,MAAA;AAAA,IAC3B,CACD,GAEKI,IAAkB,MAAM;AAC5B,iBAAW,MAAM;AACX,YAACxB,EAAyBC,EAAY,KAAK,GAC/C;AAAA,cAAIE,EAAS,OAAO;AACN,YAAAF,EAAA,MAAM,GAAG;AACrB;AAAA,UACF;AACgB,UAAAU,KACJV,EAAA,MAAM,GAAG,QACTA,EAAA,MAAM,QAAQ,EAAE,MAAM;AAAA;AAAA,SACjC,CAAC;AAAA,IAAA,GAGAhB,IAAaF,MAEb0C,IAAQ5xB,EAAS,OACd;AAAA,MACL,gBAAgB;AAAA,QACd,UAAUovB,EAAWzvB,EAAM,QAAQ;AAAA,MACrC;AAAA,IAAA,EAEH,GAEKwxB,IAAKU,GAAaD,GAAO,EAAE,gBAAArB,EAAgB,CAAA,GAE3CtsB,IAAuBjE,EAAS,MAC/BI,EAAYT,EAAM,aAAa,IAChCwxB,EAAG,MAAM,eAAe,QAAQ,SAC3B,CAACA,EAAG,MAAM,eAAe,QAAQ,IAAI,CAAChtB,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IACtF,KAHuCxE,EAAM,aAIrD;AAED,WAAAsF;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,CAACmE,GAAUoB,MAAa;AACtB,YAAIpB,MAAaoB,GACZ;AAAA,eAAA3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,MAAM,CAACvD,GAAOZ,EAAM,YAAY,GAAG;AAC9E,YAAA6wB,EAAe,QAAQ7wB,EAAM;AAC7B;AAAA,UACF;AACA,UAAA6wB,EAAe,QAAQpwB,EAAY0D,CAAQ,IAAI,OAAOA;AAAA;AAAA,MACxD;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBmB;AAAA,MACEmrB;AAAA,MACA,CAACtsB,GAAUoB,MAAa;AACtB,QAAIurB,EAAY,UAAU,MACtB3sB,MAAaoB,MACb3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,MAC1BktB,KAClBP,EAAY,QAAQ;AAAA,MACtB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBrhB,GAAU,MAAM;AAEd,aAAO,0CAA4B,EAAA,KAAA,CAAA1I,MAAAA,EAAA,CAAA,EAAE,KAAK,CAAC4I,MAAW;AACpD,QAAA2gB,EAAsB,QAAQ3gB,EAAO,SACrC4gB,EAAgB,QAAQ;AAAA,MAAA,CACzB;AAAA,IAAA,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzRD,UAAMvwB,IAAQC,GAmBR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEqB,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAA2C;AAC7C,QAAAN,EAAK,qBAAqBM,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEKC,IAAS,MAAM;;AACnB,MAAAP,EAAK,QAAQpD,EAAYT,EAAM,UAAU,IAAI,OAAOA,EAAM,UAAU,IACpEqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAe,CAACvE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,IAC3B,IAAAqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS,cAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,cADnBvE,EAAM;AAAA,IAExC,CACR;;;;;;;;;;;;;;;;;;;;;;;;;AC5DD,UAAMA,IAAQC,GAmBR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElE2uB,IAAgBlsB,EAAI,EAAK,GAEzBpB,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAA2C;AAC7C,QAAAN,EAAK,qBAAqBM,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEKC,IAAS,MAAM;;AACnB,MAAAP,EAAK,QAAQpD,EAAYT,EAAM,UAAU,IAAI,OAAOA,EAAM,UAAU,IACpEqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAe,CAACvE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD;AAED,IAAAY;AAAA,MACET;AAAA,MACA,CAACV,GAAUoB,MAAa;AACtB,YAAIpB,MAAaoB,GACjB;AAAA,cAAI3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,GAAG;AAC7C,YAAAguB,EAAc,QAAQ;AACtB;AAAA,UACF;AACA,UAAAA,EAAc,QAAQ;AAAA;AAAA,MACxB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;AAGd,UAAAC,IAAkB,CAAC1xB,MAAmB;AAC1C,UAAIA,GAAO;AACT,QAAAmE,EAAmB,QAAQ;AAC3B;AAAA,MACF;AACI,UAAA7E,EAAM,2BAA2B,OAAO;AAC1C,QAAA6E,EAAmB,QAAQ2L;AAC3B;AAAA,MACF;AACI,UAAAxP,GAAWhB,EAAM,sBAAsB,GAAG;AACzB,QAAA6E,EAAA,QAAQ7E,EAAM;AACjC;AAAA,MACF;AACA,MAAA6E,EAAmB,QAAQ7E,EAAM;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FnC,UAAMA,IAAQC,GASR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOmE,EAAS,CAAG;AAAA,MAC3E;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAER4S,IAAQ1S,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D;;;;;;;;;;;AC7Be,SAAAqyB,GAAcC,IAAwB,MAAM;AAC1D,SAAOC,GAAqB;AAAA,IAC1B,QAAAD;AAAA,IACA,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,YAAY;AAAA,EAAA,CACb;AACH;AAEO,SAASE,GAAsB3f,GAAwB;AAMrD,SAAA;AAAA,IACL,gBANqBxS,EAAS,MAC1B,EAAAwS,EAAW,SAAS,KAAKA,EAAW,mBAAmBA,EAAW,YAEvE;AAAA,EAGC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA,UAAM7S,IAAQC,GAkCR4D,IAAOC,GAOP2uB,IAAapyB,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAA4D;AACzD,QAAAN,EAAA,qBAAqBpC,GAA4D0C,CAAQ,CAAC;AAAA,MACjG;AAAA,IAAA,CACD,GAEKuuB,IAASzsB,EAAI,EAAE,GACf0sB,IAAY1sB,EAAI,EAAK,GACrB2sB,IAAiE3sB,EAAI,MAAS,GAE9E,EAAE,GAAA/F,MAAMC,MAER,EAAE,aAAA0yB,EAAA,IAAgBtf,GAAOvT,CAAK,GAE9B+D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEY,IAAS,MAAM;;AACnB,MAAAuuB,EAAU,QAAQ,IACb9uB,EAAA,QAAQ7D,EAAM,UAAU,IAC7BqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAevE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,IACtF,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,MACxBqE,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,eAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,aADtBvE,EAAM;AAAA,IACgB,CAChE,GAEK8yB,IAAiCzyB,EAAS,MAC1CL,EAAM,aAAa,EAExB,GAGK6S,IAAawf,GAAcryB,EAAM,YAAY,GAC7C+yB,IAAe9sB,EAA0C,CAAA,CAAE,GAC3D+sB,IAAqB/sB,EAA0C,CAAA,CAAE,GAEjEgtB,IAAW5yB,EAAiD,MAAM;AAChE,YAAA6yB,wBAAY;AACC,aAAAF,EAAA,MAAM,QAAQ,CAACtyB,MAAU;AACpC,QAAAwyB,EAAA,IAAIxyB,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAO,CAAA;AAAA,MAAA,CAClE,GACYqyB,EAAA,MAAM,QAAQ,CAACryB,MAAU;AAC9B,QAAAwyB,EAAA,IAAIxyB,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAO,CAAA;AAAA,MAAA,CAClE,GACM,MAAM,KAAKwyB,GAAO,CAAC,CAACnwB,GAAKrC,CAAK,OAC5B,EAAE,OAAOqC,GAAK,OAAOrC,EAAM,MAAM,EACzC;AAAA,IAAA,CACF,GAEKyyB,IAAeltB,EAAI,EAAK,GACxBzF,IAAkBH,EAAS,MAC3B8yB,EAAa,QAAc,KACxBnzB,EAAM,OACd,GAEKozB,IAAY,OAAOC,MAAkB;AACzC,MAAAF,EAAa,QAAQ;AACrB,YAAMG,IAAcT,EAAY,MAAM7yB,EAAM,aAAa;AACzD,MAAAszB,EAAY,QAAQD,GACpBN,EAAa,QAAQ,MAAM/yB,EAAM,WAAW6S,GAAYggB,EAAY,KAAK,GACzEM,EAAa,QAAQ;AAAA,IAAA,GAGjBI,IAAwB,CAAC5mB,MAAqC;AAC5D,YAAAtG,IAAQ4sB,EAAS,MAAM,OAAO,CAACzuB,MAA6CmI,EAAO,SAASnI,EAAK,KAAK,CAAC;AACrG,aAAA,CAA4C,EAAA,OAAO6B,CAAK;AAAA,IAAA,GAG5DmtB,IAAyB,OAAO9yB,MAAiD;AACrF,UAAI+yB,IAAQ,GACRC,IAAa,CAAA;AACb,aAAA3yB,GAAQL,CAAK,KACf+yB,IAAQ/yB,EAAM,QACdgzB,IAAaH,EAAsB7yB,CAAK,KAE3BgzB,IAAAH,EAAsB,CAAC7yB,CAAK,CAAC,GAE5CsyB,EAAmB,QAAQU,GACpBA,EAAW,WAAWD;AAAA,IAAA,GAGzBE,KAAc1tB,EAAI,EAAK,GACvB2tB,IAAsB,MAAM;AAChC,mBAAahB,EAAe,KAAK,GACjCA,EAAe,QAAQ;AAAA,IAAA,GAEnBiB,IAAY,YAAY;AAE5B,MADoBD,KAChBD,GAAY,UAAU,OAC1BA,GAAY,QAAQ,IAMpBR,EAAa,QAAQ,IACrBJ,EAAa,QAAQ,MAAM/yB,EAAM,WAAW6S,GAAYggB,EAAY,KAAK,GACzEM,EAAa,QAAQ;AAAA,IAAA,GAGjBW,IAAU,MAAM;AACpB,MAAAnB,EAAU,QAAQ,IACEiB,KACVC;IAAA,GAGNE,IAA0B1zB,EAAS,MAAM;AAC7C,UAAI,CAACL,EAAM,YAAYgzB,EAAmB,MAAM,CAAC;AACxC,eAAAA,EAAmB,MAAM,CAAC,EAAE;AAAA,IAE9B,CACR,GAEKgB,IAAiB,CAACX,MAAkB;AACxC,MAAI,CAACrzB,EAAM,YAAY,CAAC2yB,EAAU,SAASU,EAAM,WAAW,KACxDU,EAAwB,UAAUV,MACtCX,EAAO,QAAQW;AAAA,IAAA,GAGXY,IAAe,YAAY;AAE/B,UADAlB,EAAa,QAAQ,MAAM/yB,EAAM,WAAW6S,GAAYggB,EAAY,KAAK,GACrE7yB,EAAM,UAAU;AAClB,QAAAyyB,EAAW,QAAQ;AACnB;AAAA,MACF;AACA,MAAAA,EAAW,QAAQ;AAAA,IAAA;AAGrB,WAAAntB;AAAA,MACEmtB;AAAA,MACA,OAAOtuB,GAAUoB,MAAa;AAC5B,YAAIpB,MAAaoB;AAAU;AACvB,YAAA3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,KAAMpD,GAAQoD,CAAQ,KAAKA,EAAS,WAAW,GAAI;AAEzF,cADJ6uB,EAAmB,QAAQ,IACvBhzB,EAAM,oBAAoB2zB,GAAY,UAAU;AAAM;AAC3C,UAAAf,EAAA,QAAQ,WAAW,MAAM;AAC5B,YAAAiB;aACT,GAAI;AACP;AAAA,QACF;AAEI,YADU,OAAML,EAAuBrvB,CAAQ,GAE/C;AAAA,cAAApD,GAA2BoD,CAAQ,GAAG;AACxC,YAAAgvB,EAAa,QAAQ,IACrBH,EAAmB,QAAQ,MAAMhzB,EAAM,gBAAgBmE,CAAoC,GAC3FgvB,EAAa,QAAQ;AACrB;AAAA,UACF;AACA,UAAAA,EAAa,QAAQ,IACrBH,EAAmB,QAAQ,MAAMhzB,EAAM,gBAAgB,CAACmE,CAA6B,CAAC,GACtFgvB,EAAa,QAAQ;AAAA;AAAA,MACvB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBe;AAAA,MACExB;AAAA,MACA,CAACvuB,GAAUoB,MAAa;AACtB,QAAIpB,MAAaoB,MACf6tB,EAAUjvB,CAAQ,GAClBN,EAAK,yBAAyBM,CAAQ;AAAA,MAE1C;AAAA,MACA,EAAE,UAAU,KAAK,SAAS,IAAK;AAAA,IAAA,GAG3BmB,GAAAotB,GAAQ,CAACvuB,GAAUoB,MAAa;AACpC,MAAIpB,MAAaoB,KACf1B,EAAK,gBAAgBM,CAAQ;AAAA,IAC/B,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjPD,UAAMnE,IAAQC,GAiBR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEiB,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKyvB,IAAUluB,EAAI,EAAK,GACnBmuB,IAAWnuB,EAAI,EAAK,GACpBouB,IAAWpuB,EAAI,EAAE,GAEjBpB,IAAqBxE,EAAS,MAC3BL,EAAM,UACd,GAGKs0B,IAAqBruB,EAAIjG,EAAM,UAAU,GAEzC2U,IAAU,YAAY;AAC1B,UAAIwf,EAAQ;AAAO;AAGf,UAFJA,EAAQ,QAAQ,IAChBC,EAAS,QAAQ,IACbE,EAAmB,UAAU,IAAM;AAC/BC,cAAAA,IAAU,MAAMv0B,EAAM;AACvB,QAAA6D,EAAA,qBAAqB,CAAC0wB,CAAO,GAClCD,EAAmB,QAAQ,CAACC,GACvBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAChB;AAAA,MACF;AACM,YAAAI,IAAU,MAAMv0B,EAAM;AAC5B,MAAA6D,EAAK,qBAAqB0wB,CAAO,GACjCD,EAAmB,QAAQC,GACtBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAAA,IAAA;AAGZ,WAAA7uB,GAAAT,GAAoB,CAACV,GAAUoB,MAAa;AAChD,MAAIpB,MAAaoB,MACf+uB,EAAmB,QAAQnwB,GAC3BiwB,EAAS,QAAQ;AAAA,IACnB,CACD,GAED3kB,GAAU,MAAM;AACL,MAAA4kB,EAAA,QAAQ,mBAAmB,KAAK,IAAI;AAAA,IAAA,CAC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxED,UAAMr0B,IAAQC,GAiBR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAER4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEiB,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKyvB,IAAUluB,EAAI,EAAK,GACnBmuB,IAAWnuB,EAAI,EAAK,GACpBouB,IAAWpuB,EAAI,EAAE,GAEjBpB,IAAqBxE,EAAS,MAC3BL,EAAM,UACd,GAGKs0B,IAAqBruB,EAAIjG,EAAM,UAAU,GAEzC2U,IAAU,YAAY;AAC1B,UAAIwf,EAAQ;AAAO;AAGf,UAFJA,EAAQ,QAAQ,IAChBC,EAAS,QAAQ,IACbE,EAAmB,UAAU,IAAM;AAC/BC,cAAAA,IAAU,MAAMv0B,EAAM;AACvB,QAAA6D,EAAA,qBAAqB,CAAC0wB,CAAO,GAClCD,EAAmB,QAAQ,CAACC,GACvBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAChB;AAAA,MACF;AACM,YAAAI,IAAU,MAAMv0B,EAAM;AAC5B,MAAA6D,EAAK,qBAAqB0wB,CAAO,GACjCD,EAAmB,QAAQC,GACtBA,MAASH,EAAS,QAAQ,KAC/BD,EAAQ,QAAQ;AAAA,IAAA;AAGZ,WAAA7uB,GAAAT,GAAoB,CAACV,GAAUoB,MAAa;AAChD,MAAIpB,MAAaoB,MACf+uB,EAAmB,QAAQnwB,GAC3BiwB,EAAS,QAAQ;AAAA,IACnB,CACD,GAED3kB,GAAU,MAAM;AACL,MAAA4kB,EAAA,QAAQ,qBAAqB,KAAK,IAAI;AAAA,IAAA,CAChD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvED,UAAMr0B,IAAQC,GA0BR4D,IAAOC,GAKP2uB,IAAapyB,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqBpC,GAAe0C,CAAQ,CAAC;AAAA,MACpD;AAAA,IAAA,CACD,GAEKJ,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElE,EAAE,GAAAtD,MAAMC,MAERiE,IAAS,MAAM;;AACd,MAAAP,EAAA,QAAQ7D,EAAM,UAAU,IAC7BqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS;AAAA,IAAO,GAGZC,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAevE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,IACtF,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,IAC3B,IAAAqE,IAAArE,EAAM,MAAN,QAAAqE,EAAS,cAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,cADnBvE,EAAM;AAAA,IAExC,CACR,GAEK8yB,IAAiCzyB,EAAS,MAC1CL,EAAM,aAAa,EAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzED,UAAMA,IAAQC,GAOR4D,IAAOC,GAIP,EAAE,UAAAyO,MAAaD,MAEf5R,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOmE,EAAS,CAAG,GACzEN,EAAK,QAAQ;AAAA,MACf;AAAA,IAAA,CACD,GAEK,EAAE,GAAA3D,MAAMC,MAER4S,IAAQ1S,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEK8yB,IAAiCzyB,EAAS,MAC1CL,EAAM,WAAW,aAAa,EAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBD,UAAMA,IAAQC,GAkBR4D,IAAOC,GAIPe,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAA4D;AAC9D,QAAAN,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOyB,GAAU0C,CAAQ,EAAK,CAAA;AAAA,MACtF;AAAA,IAAA,CACD,GAEKuuB,IAASzsB,EAAI,EAAE,GACf0sB,IAAY1sB,EAAI,EAAK,GACrB2sB,IAAiE3sB,EAAI,MAAS,GAE9E,EAAE,GAAA/F,MAAMC,MAER,EAAE,aAAA0yB,EAAA,IAAgBtf,GAAOvT,CAAK,GAE9BoE,IAAS,MAAM;AACnB,MAAAuuB,EAAU,QAAQ;AAAA,IAAA,GAGd5f,IAAQ1S,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEK8yB,IAAiCzyB,EAAS,MAC1CL,EAAM,WAAW,aAAa,EAEnC,GAGK6S,IAAawf,GAAcryB,EAAM,YAAY,GAC7C+yB,IAAe9sB,EAA0C,CAAA,CAAE,GAC3D+sB,IAAqB/sB,EAA0C,CAAA,CAAE,GAEjEgtB,IAAW5yB,EAAiD,MAAM;AAChE,YAAA6yB,wBAAY;AACC,aAAAF,EAAA,MAAM,QAAQ,CAACtyB,MAAU;AACpC,QAAAwyB,EAAA,IAAIxyB,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAO,CAAA;AAAA,MAAA,CAClE,GACYqyB,EAAA,MAAM,QAAQ,CAACryB,MAAU;AAC9B,QAAAwyB,EAAA,IAAIxyB,EAAM,OAAO,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAO,CAAA;AAAA,MAAA,CAClE,GACM,MAAM,KAAKwyB,GAAO,CAAC,CAACnwB,GAAKrC,CAAK,OAC5B,EAAE,OAAOqC,GAAK,OAAOrC,EAAM,MAAM,EACzC;AAAA,IAAA,CACF,GAEKyzB,IAAUluB,EAAI,EAAK,GAEnBmtB,IAAY,OAAOC,MAAkB;AACzC,MAAAc,EAAQ,QAAQ;AAChB,YAAMb,IAAcT,EAAY,MAAM7yB,EAAM,aAAa;AACzD,MAAAszB,EAAY,QAAQD,GACpBN,EAAa,QAAQ,MAAM/yB,EAAM,WAAW6S,GAAYggB,EAAY,KAAK,GACzEsB,EAAQ,QAAQ;AAAA,IAAA,GAGZZ,IAAwB,CAAC5mB,MAAqC;AAC5D,YAAAtG,IAAQ4sB,EAAS,MAAM,OAAO,CAACzuB,MAA6CmI,EAAO,SAASnI,EAAK,KAAK,CAAC;AACrG,aAAA,CAA4C,EAAA,OAAO6B,CAAK;AAAA,IAAA,GAG5DmtB,IAAyB,OAAO9yB,MAAiD;AACrF,UAAI+yB,IAAQ,GACRC,IAAa,CAAA;AACb,aAAA3yB,GAAQL,CAAK,KACf+yB,IAAQ/yB,EAAM,QACdgzB,IAAaH,EAAsB7yB,CAAK,KAE3BgzB,IAAAH,EAAsB,CAAC7yB,CAAK,CAAC,GAE5CsyB,EAAmB,QAAQU,GACpBA,EAAW,WAAWD;AAAA,IAAA,GAGzBE,IAAc1tB,EAAI,EAAK,GACvB2tB,IAAsB,MAAM;AAChC,mBAAahB,EAAe,KAAK,GACjCA,EAAe,QAAQ;AAAA,IAAA,GAEnBiB,IAAY,YAAY;AAE5B,MADoBD,KAChBD,EAAY,UAAU,OAC1BA,EAAY,QAAQ,IAMpBQ,EAAQ,QAAQ,IAChBpB,EAAa,QAAQ,MAAM/yB,EAAM,WAAW6S,GAAYggB,EAAY,KAAK,GACzEsB,EAAQ,QAAQ;AAAA,IAAA,GAGZL,IAAU,MAAM;AACpB,MAAAnB,EAAU,QAAQ,IACEiB,KACVC;IAAA,GAGNE,IAA0B1zB,EAAS,MAAM;AAC7C,UAAI,CAACL,EAAM,WAAW,YAAYgzB,EAAmB,MAAM,CAAC;AACnD,eAAAA,EAAmB,MAAM,CAAC,EAAE;AAAA,IAE9B,CACR,GAEKgB,KAAiB,CAACX,MAAkB;AACpC,MAAA,CAACrzB,EAAM,WAAW,YAAY,CAAC2yB,EAAU,SAASU,EAAM,WAAW,KACnEU,EAAwB,UAAUV,MACtCX,EAAO,QAAQW;AAAA,IAAA,GAGXY,IAAe,YAAY;AAE3B,UADJlB,EAAa,QAAQ,MAAM/yB,EAAM,WAAW6S,GAAYggB,EAAY,KAAK,GACrE7yB,EAAM,WAAW,UAAU;AAC7B,QAAA6E,EAAmB,QAAQ;AAC3B;AAAA,MACF;AACA,MAAAA,EAAmB,QAAQ;AAAA,IAAA,GAGvBmO,IAAsB3S,EAAS,MAC9BI,EAAYT,EAAM,WAAW,IAC9BA,EAAM,WAAW,YAAY,eAAqBE,EAAE,2CAA2C,IAC/FF,EAAM,WAAW,YAAY,OAAaE,EAAE,mCAAmC,IAC/EF,EAAM,WAAW,YAAY,cAAcA,EAAM,WAAW,YAAY,WACnEE,EAAE,yCAAyC,IAC7C,KALqCF,EAAM,WAMnD;AAED,WAAAsF;AAAA,MACET;AAAA,MACA,OAAOV,GAAUoB,MAAa;AAC5B,YAAIpB,MAAaoB;AAAU;AACvB,YAAA3E,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,KAAMpD,GAAQoD,CAAQ,KAAKA,EAAS,WAAW,GAAI;AAEzF,cADJ6uB,EAAmB,QAAQ,IACvBhzB,EAAM,oBAAoB2zB,EAAY,UAAU;AAAM;AAC3C,UAAAf,EAAA,QAAQ,WAAW,MAAM;AAC5B,YAAAiB;aACT,GAAI;AACP;AAAA,QACF;AAEI,YADU,OAAML,EAAuBrvB,CAAQ,GAE/C;AAAA,cAAApD,GAA2BoD,CAAQ,GAAG;AACxC,YAAAgwB,EAAQ,QAAQ,IAChBnB,EAAmB,QAAQ,MAAMhzB,EAAM,gBAAgBmE,CAAoC,GAC3FgwB,EAAQ,QAAQ;AAChB;AAAA,UACF;AACA,UAAAA,EAAQ,QAAQ,IAChBnB,EAAmB,QAAQ,MAAMhzB,EAAM,gBAAgB,CAACmE,CAA6B,CAAC,GACtFgwB,EAAQ,QAAQ;AAAA;AAAA,MAClB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBD;AAAA,MACExB;AAAA,MACA,CAACvuB,GAAUoB,MAAa;AACtB,QAAIpB,MAAaoB,KACf6tB,EAAUjvB,CAAQ;AAAA,MAEtB;AAAA,MACA,EAAE,UAAU,KAAK,SAAS,IAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACrMjC,UAAMnE,IAAQC,GAWR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACJ,eAAOL,EAAM,WAAW;AAAA,MAC1B;AAAA,MACA,IAAImE,GAAU;AACP,QAAAN,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOmE,EAAS,CAAG;AAAA,MAC3E;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAER4S,IAAQ1S,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BD,UAAMA,IAAQC,GASR4D,IAAOC,GAIPpD,IAAQL,EAAS;AAAA,MACrB,MAAM;AACA,eAAAI,EAAYT,EAAM,WAAW,KAAK,KAAKY,GAAOZ,EAAM,WAAW,KAAK,IAAU,KAC3EA,EAAM,WAAW,QAAQ,IAAI;AAAA,MACtC;AAAA,MACA,IAAImE,GAAU;AACZ,YAAIqwB,IAA8B;AAClC,QAAIrwB,MAAa,MAAiBqwB,IAAA,KAC9BrwB,MAAa,MAAiBqwB,IAAA,KAC7B3wB,EAAA,qBAAqB,EAAE,GAAG7D,EAAM,YAAiB,OAAOw0B,EAAY,CAAG;AAAA,MAC9E;AAAA,IAAA,CACD,GAEK,EAAE,GAAAt0B,MAAMC,MAER4S,IAAQ1S,EAAS,MACdL,EAAM,WAAW,SAASE,EAAEF,EAAM,WAAW,MAAM,IAAI,MAC/D,GAEK0M,IAAQrM,EAAS,MACd;AAAA,MACL,EAAE,OAAO,IAAI,OAAOH,EAAE,0BAA0B,EAAE;AAAA,MAClD,EAAE,OAAO,GAAG,OAAOA,EAAE,2BAA2B,EAAE;AAAA,MAClD,EAAE,OAAO,GAAG,OAAOA,EAAE,4BAA4B,EAAE;AAAA,IAAA,CAEtD;;;;;;;;;;ACxCW,IAAAu0B,uBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,aAAa,cACbA,EAAA,uBAAuB,0BACvBA,EAAA,OAAO,QACPA,EAAA,QAAQ,SACRA,EAAA,UAAU,WANAA,IAAAA,MAAA,CAAA,CAAA;AASL,SAASC,KAAe;AACvB,QAAA,EAAE,MAAMv0B,MAERw0B,IAAmB1uB,EAAoC;AAAA,IAC3D;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,2BAA2B;AAAA,MACpC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,8BAA8B;AAAA,MACvC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,wCAAwC;AAAA,MACjD,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,wBAAwB;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,yBAAyB;AAAA,MAClC,OAAO;AAAA,IACT;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,kBAAA0uB;AAAA,IACA,oBANyB,CAACj0B,MACnBi0B,EAAiB,MAAM,KAAK,CAACnwB,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKjE;AAEJ;;;;;;;AChDA,UAAMV,IAAQC,GAIR,EAAE,oBAAA20B,MAAuBF,MACzBpI,IAASjsB,EAAS,MAAMu0B,EAAmB50B,EAAM,KAAK,CAAC;;;;;;;;;;;;;;;;;;ICNvD60B,KAAe;AAAA,EACnB,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,eAAe;AAAA,IACjB;AAAA,EACF;AACF,GAEaC,KAAgDlf,GAAiBif,EAAY;;;;;;;;;;;;;;;;;;ACP1F,UAAM70B,IAAQC,GA8BRkP,IAASC,MACT2lB,IAASC,GAA4B,MAAS,GAC9CC,IAASD,GAAoB,EAAK,GAElCxwB,IAAOnE,EAAS,MACbL,EAAM,YAAYA,EAAM,EAAS,CACzC,GAEKk1B,IAAyB70B,EAAS,MAC/BL,EAAM,WAAWA,EAAM,iBAAiB,kBAAkBA,EAAM,cACxE,GAEKm1B,IAAe90B,EAAS,MACxBL,EAAM,MAAM,SAAS,IAAUA,EAAM,QACrC+0B,EAAO,QACF/e,GAAqB+e,EAAO,OAAO/0B,EAAM,eAAe,IAE1DA,EAAM,iBAAiBA,EAAM,KAAK,EAC1C,GAEK2U,IAAU,MAAM;AACb,MAAAxF,EAAA,KAAK,EAAE,MAAMnP,EAAM,OAAO,QAAQ,EAAE,IAAIA,EAAM,GAAG,EAAG,CAAA;AAAA,IAAA;AAG7D,WAAAsF;AAAA,MACEd;AAAA,MACA,OAAOL,MAAa;AAClB,QAAI8wB,EAAO,SACPx0B,EAAY0D,CAAQ,KAAKA,EAAS,YAAY,OAClD4wB,EAAO,QAAQ5wB,GACf8wB,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnER,IAAAG,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,OAAO,QACPA,EAAA,SAAS,UACTA,EAAA,UAAU,WACVA,EAAA,QAAQ,SACRA,EAAA,WAAW,YACXA,EAAA,QAAQ,SACRA,EAAA,YAAY,aACZA,EAAA,UAAU,QATAA,IAAAA,MAAA,CAAA,CAAA;AAYL,SAASC,KAAc;AAC5B,QAAMC,IAAkBrvB,EAAmC;AAAA,IACzD;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,iBAAAqvB;AAAA,IACA,mBANwB,CAAC50B,MAClB40B,EAAgB,MAAM,KAAK,CAAC9wB,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKhE;AAEJ;;;;;;;AC/DA,UAAMV,IAAQC,GAOR,EAAE,mBAAAs1B,MAAsBF,MACxBG,IAAcn1B,EAAS,MACpBk1B,EAAkBv1B,EAAM,KAAK,CACrC;;;;;;;;;;;;;ICdYy1B,KAAiB,CAAC/0B,MACtB,KAAKA;;;;;;;;ACOd,UAAMV,IAAQC,GAYR,EAAE,MAAAy1B,GAAM,aAAAC,EAAY,IAAIC,GAAa,GACrC,EAAE,aAAAroB,MAAgBD,MAClB,EAAE,GAAApN,MAAMC,MAERwU,IAAU,CAACD,MAAiB;AAEhC,MADAD,GAAeC,CAAK,GACfihB,MACD90B,GAASb,EAAM,KAAK,IACtB01B,EAAKD,GAAez1B,EAAM,KAAK,CAAC,EAAE,KAAK,MAAM;AAC/B,QAAAuN,EAAArN,EAAEF,EAAM,OAAO,CAAC;AAAA,MAAA,CAC7B,IACQc,GAASd,EAAM,KAAK,KAAKA,EAAM,MAAM,UAC9C01B,EAAK11B,EAAM,KAAK,EAAE,KAAK,MAAM;AACf,QAAAuN,EAAArN,EAAEF,EAAM,OAAO,CAAC;AAAA,MAAA,CAC7B;AAAA,IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BF,UAAMA,IAAQC,GAaR41B,IAAmBx1B,EAAS,MACzBI,EAAYT,EAAM,KAAK,IAAI,iCAAiC,EACpE;;;;;;;;;;;;;;;;;;;;;;;;ACKK,UAAA,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBd,UAAMH,IAAQC,GAmBR,EAAE,GAAAC,MAAMC,MAER21B,IAAmBz1B,EAAS,MAAM;AAClC,UAAAI,CAAAA,EAAYT,EAAM,SAAS;AAG/B,eAAKS,EAAYT,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,cAFZ,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,YAAA;IAEtB,CAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BD,UAAMA,IAAQC,GAkBR,EAAE,GAAAC,MAAMC,MAER41B,IAAkB11B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BD,UAAMA,IAAQC,GAmCR4D,IAAOC,GAIPkyB,IAAS/vB,EAAI,EAAK,GAElB0O,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpBshB,EAAO,QAAQ;AAAA,IAAA,GAEX1mB,IAAY,MAAM;AACtB,MAAAzL,EAAK,cAAc,GACd7D,EAAM,4BAAsCi2B;IAAA,GAG7CA,IAAc,MAAM;AACxB,MAAAD,EAAO,QAAQ;AAAA,IAAA,GAGXxvB,IAAW,MAAM;AACT,MAAAyvB;IAAA,GAGR,EAAE,GAAA/1B,MAAMC;AAED,IAAA+1B,EAAA;AAAA,MACX,aAAAD;AAAA,IAAA,CACD;AAEK,UAAAF,IAAkB11B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzED,UAAMA,IAAQC,GAuBR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAERgP,IAASC,MAETuF,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB7Q,EAAK,YAAY,GACVsL,EAAA,KAAK2mB,EAAiB,KAAK;AAAA,IAAA,GAG9BA,IAAmBz1B,EAAS,MAC3BI,EAAYT,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,SAAA,MAF3C,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,YAAA,GAGtD,GAEK+1B,IAAkB11B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCD,UAAM6D,IAAOC,GAIP6Q,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB7Q,EAAK,oBAAoB;AAAA,IAAA,GAGrB,EAAE,GAAA3D,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBd,UAAMH,IAAQC,GAoBR4D,IAAOC,GAIP6Q,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB7Q,EAAK,YAAY;AAAA,IAAA,GAGb,EAAE,GAAA3D,MAAMC,MAER41B,IAAkB11B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCD,UAAMA,IAAQC,GAoBR,EAAE,GAAAC,MAAMC,MACR,EAAE,MAAAu1B,GAAM,aAAAC,EAAY,IAAIC,GAAa,GACrC,EAAE,aAAAroB,MAAgBD,MAElBqH,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GAChB7T,GAASb,EAAM,EAAE,KAAKA,EAAM,KAAK,IACnC01B,EAAKD,GAAez1B,EAAM,EAAE,CAAC,EAAE,KAAK,MAAM;AAC5B,QAAAuN,EAAArN,EAAEF,EAAM,OAAO,CAAC;AAAA,MAAA,CAC7B,IACQc,GAASd,EAAM,EAAE,KAAKA,EAAM,GAAG,UACxC01B,EAAK11B,EAAM,EAAE,EAAE,KAAK,MAAM;AACZ,QAAAuN,EAAArN,EAAEF,EAAM,OAAO,CAAC;AAAA,MAAA,CAC7B;AAAA,IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCF,UAAMA,IAAQC,GAkBR,EAAE,GAAAC,MAAMC,MAER21B,IAAmBz1B,EAAS,MAC3BI,EAAYT,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,SAAA,MAF3C,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,YAAA,GAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBD,UAAMA,IAAQC,GAkBR,EAAE,GAAAC,MAAMC,MAER21B,IAAmBz1B,EAAS,MAC3BI,EAAYT,EAAM,WAAW,IAG3B,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,IAAIA,EAAM,SAAA,MAF3C,EAAE,MAAMA,EAAM,WAAW,QAAQ,EAAE,GAAGA,EAAM,YAAA,GAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBD,UAAMA,IAAQC,GA0BR4D,IAAOC,GAIP6Q,IAAU,CAACD,MAAiB;AAChC,MAAAD,GAAeC,CAAK,GACpB7Q,EAAK,SAAS;AAAA,IAAA,GAGVkyB,IAAkB11B,EAAS,MAAM;AACrC,cAAQL,EAAM,SAAS;AAAA,QACrB,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEKQ,IAAkBH,EAAS,MAAM;AACrC,UAAI,CAACL,EAAM;AAAgB,eAAA;AAC3B,cAAQ+1B,EAAgB,OAAO;AAAA,QAC7B,KAAK;AACI,iBAAA;AAAA,QACT;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEK,EAAE,GAAA71B,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DF,IAAAg2B,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,OAAO,QACPA,EAAA,OAAO,QAHGA,IAAAA,MAAA,CAAA,CAAA,GAMAC,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,OAAO,QAFGA,IAAAA,MAAA,CAAA,CAAA;AAKZ,MAAMzG,KAAiBC;AAAA,EAAW;AAAA,EAAS;AAAA;GAErCyG,KAAQ,gCAERC,KAAWrwB;AAAA,EACf,OAAO,OAAOkwB,EAAa,EAAE,KAAK,CAACha,MAAQA,MAAQwT,GAAe,KAAK,IACpDA,GAAe,QAC9B;AAAA;AACN,GACM4G,KAAQtwB;AAAA,EAAW;AAAA;GACnBuwB,KAA0BvwB,EAAI,OAAO,cAAc,OAAO,WAAWowB,EAAK,EAAE,OAAO,GAEnFI,KAAW,MAAM;AACrB,UAAQH,GAAS,OAAO;AAAA,IACtB,KAAK;AACGC,MAAAA,GAAA,QAAQC,GAAwB,QAAQ,SAAa;AAC3D;AAAA,IACF,KAAK;AACHD,MAAAA,GAAM,QAAQ;AACd;AAAA,IACF,KAAK;AACHA,MAAAA,GAAM,QAAQ;AACd;AAAA,EACJ;AACF;AACAE;AAEA,MAAMC,KAAmB,CAACh2B,MAAyB;AACjD,EAAA41B,GAAS,QAAQ51B,GACjBivB,GAAe,QAAQjvB;AACzB;AAEA,OAAO,WAAW21B,EAAK,EAAE,iBAAiB,UAAU,CAAC3hB,MAAU;AAC7D,EAAA8hB,GAAwB,QAAQ9hB,EAAM,SAC7B+hB;AACX,CAAC;AAED,MAAME,KAAet2B,EAAS,MACrBk2B,GAAM,UAAU,UAAc,UAAU,SAChD;AAEM,SAASK,KAAW;AACzB,QAAMC,IAAe,MAAM;AACzB,IAAAH;AAAA,MAAiB;AAAA;AAAA,IAAkB,GAC1BD;EAAA,GAGLK,IAAe,MAAM;AACzB,IAAAJ;AAAA,MAAiB;AAAA;AAAA,IAAkB,GAC1BD;EAAA,GAGLM,IAAgB,MAAM;AAC1B,IAAAL;AAAA,MAAiB;AAAA;AAAA,IAAmB,GAC3BD;EAAA,GAGLO,IAAc,MAAM;AACxB,YAAQV,GAAS,OAAO;AAAA,MACtB,KAAK;AACU,QAAAQ;AACb;AAAA,MACF,KAAK;AACU,QAAAD;AACb;AAAA,MACF;AACgB,QAAAE;AACd;AAAA,IACJ;AAAA,EAAA;AAGK,SAAA;AAAA,IACL,UAAU3G,GAASkG,EAAQ;AAAA,IAC3B,OAAOlG,GAASmG,EAAK;AAAA,IACrB,cAAcnG,GAASuG,EAAY;AAAA,IACnC,aAAAK;AAAA,IACA,cAAAH;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,EAAA;AAEJ;;;;ACzFA,UAAM,EAAE,cAAAD,GAAc,cAAAD,GAAc,eAAAE,GAAe,UAAAT,EAAA,IAAaM,MAE1D,EAAE,GAAA12B,MAAMC,MAER82B,IAAShxB,EAAI,EAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aCPpBixB,KAAkC;AAAA,EAClC,OAAA;AAAA,EACA,eAAuB;AAAA;4tBAKrBC,KAAA;AAAA;;AARJ,SAAAC,GAAAC,GAAAC,GAAA;;;8DCCEJ,KAAkC;AAAA,EAClC,OAAO;AAAA;GAGLK,KAAWC,gBAAAA,EAAA,QAAA;AAAA,EACX;EACA,QAAc;AAAA;cACdC,KAAA;AAAA;;AARJ,SAAAL,GAAAC,GAAAC,GAAA;;;;;;;;;;ACQF,UAAMt3B,IAAQC,GAWRy3B,IAAuBr3B,EAAS,MAAM;AAC1C,cAAQL,EAAM,MAAM;AAAA,QAClB,KAAK;AACI,iBAAA23B;AAAAA,QACT,KAAK;AACI,iBAAAC;AAAA,QACT;AACS,iBAAAC;AAAA,MACX;AAAA,IAAA,CACD;;;;;;;;;ACnBD,UAAMh0B,IAAOC,GAIP8S,IAAc5S,GAAOP,EAAiB,GACtCqsB,IAA2B9rB,GAAOL,EAAwB,GAC1DosB,IAAwB/rB,GAAOJ,EAAqB,GAEpD,EAAE,aAAAusB,EAAgB,IAAAN,GAAuBC,GAA0BC,CAAqB,GACxF,EAAE,qBAAA+B,MAAwBzB,MAE1ByH,IAAmB,CAAC/qB,MAAuB;AAE3C,MADWojB,EAAYpjB,CAAI,KACnBlJ,EAAK,eAAekJ,CAAI;AAAA,IAAA,GAGhCgrB,IAAgB13B,EAAS,MAAM;AAC7B,YAAAgG,IAAQqpB,GAAc,KAAK,CAAClrB,MAASA,EAAK,SAASstB,EAAoB,KAAK;AAC9E,aAAArxB,EAAY4F,CAAK,IACZqpB,GAAc,CAAC,IAEjBrpB;AAAA,IAAA,CACR,GAEK2xB,IAAmB33B,EAAS,MACzBqvB,GAAc;AAAA,MACnB,CAAClrB,MACE;;AAAA,gBAAAsrB,EAAyB,SAAStrB,EAAK,IAAI,KAAKA,EAAK,SAAS,UAC9D,CAACA,EAAK,eAAaH,IAAAuS,EAAY,UAAZ,gBAAAvS,EAAmB,MAAM,SAASoS;AAAA;AAAA,IAAgB,CAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrCK,UAAA,EAAE,GAAAvW,MAAMC,MAER83B,IAAc,MAAM;AACxB,aAAO,SAAS;IAAO;;;;;;;;;;ACFlB,MAAMC,WAAiC,MAAM;AAAA,EAClD,YAAY9sB,IAAU,IAAI;AACxB,UAAMA,CAAO,GACb,KAAK,OAAO,4BACZ,KAAK,UAAUA;AAAA,EACjB;AACF;;;;;;;;;ACHA,UAAMpL,IAAQC,GAYRk4B,IAAgBlyB,EAAI,EAAK,GAEzBmyB,IAAkB,YAAY;AAC9B,UAAA;AACI,cAAA7oB,IAAM,MAAM,MAAM,IAAIvP,EAAM,gBAAgB,WAAW,KAAK,IAAK,CAAA,EAAE;AACzE,YAAIuP,EAAI,IAAI;AACV,gBAAM8oB,IAAc9oB,EAAI,QAAQ,IAAI,cAAc;AAClD,cAAI,CAAC8oB,KAAe,CAACA,EAAY,SAAS,kBAAkB;AACpD,kBAAA,IAAIH,GAAyB,oDAAoD;AAEnF,gBAAAI,IAAO,MAAM/oB,EAAI;AACvB,cAAI,OAAO,KAAK+oB,CAAI,EAAE,SAAS;AACvB,kBAAA,IAAIJ,GAAyB,qDAAqD;AAE5E,UAAAC,EAAA,QAAQ,CAAC13B,EAAY63B,EAAK,UAAU,KAAKA,EAAK,eAAet4B,EAAM;AAEjF;AAAA,QACF;AACM,cAAA,IAAIk4B,GAAyB,qDAAqD;AAAA,eACjFjtB,GAAO;AACd,YAAIA,aAAiBitB,IAA0B;AACrC,kBAAA,IAAIjtB,EAAM,OAAO;AACzB;AAAA,QACF;AACA,YAAIA,aAAiB,aAAa;AACxB,kBAAA,IAAI,2BAA2BA,CAAK;AAC5C;AAAA,QACF;AACQ,gBAAA,IAAI,2CAA2CA,CAAK;AAAA,MAC9D;AAAA,IAAA,GAGIstB,IAAqBl4B,EAAS,MAC3Bm4B,EACR,GAGK,EAAE,OAAAC,MAAUC,GAAc,MAAM;AACpB,MAAAN;IAAA,GACfp4B,EAAM,aAAa;AAEtB,WAAA24B,GAAgB,MAAM;AACd,MAAAF;IAAA,CACP;;;;;;;;;;;;;;;;;;;;;;;AC1DD,UAAMz4B,IAAQC,GAaRM,IAAQF,EAAS,MAAM;;AACvB,cAAAgE,IAAArE,EAAM,SAAN,QAAAqE,EAAY,OAAO,SAASrE,EAAM,KAAK,OAAO,MAAM,WAAW,IAC1DA,EAAM,KAAK,OAAO,QAEpB;AAAA,IAAA,CACR,GAEK44B,IAAWv4B,EAAS,MACjBL,EAAM,OAAO,MAAM,IAC3B,GAEKM,IAAOD,EAAS,MAAM;AAC1B,UAAI,CAACL,EAAM;AAAa,eAAA;AACxB,UAAIA,EAAM,KAAK,OAAO,KAAK,SAAS;AAAU,eAAAA,EAAM,KAAK,OAAO;AAChE,YAAM64B,IAAoB74B,EAAM,KAAK,OAAO,UAAU,OAAO,CAAC,IAAIA,EAAM,KAAK,OAAO,SAAS,OAAO,CAAC;AACrG,aAAI64B,EAAkB,SAAS,IAAUA,IAClC74B,EAAM,KAAK,MAAM,MAAM,GAAG,CAAC;AAAA,IAAA,CACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BD,UAAMA,IAAQC,GAmBR4D,IAAOC,GAIPg1B,IAAW;AAAA,MACf,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,MAC3C,CAAC,WAAW,WAAW,SAAS;AAAA,IAAA,GAE5BC,IAAiB9yB,EAAI,EAAE,GAEvB+yB,IAAsB,MAAM;AAChC,YAAMC,IAAY,KAAK,MAAM,KAAK,WAAWH,EAAS,MAAM;AAC5D,aAAAC,EAAe,QAAQD,EAASG,CAAS,EAAE,KAAK,MAAM,KAAK,OAAW,IAAAH,EAASG,CAAS,EAAE,MAAM,CAAC,GAC1FF,EAAe;AAAA,IAAA,GAGlBhD,IAAkB11B,EAAS,MACxBL,EAAM,WAAW,SAAS,IAAI,SAAS,OAC/C,GAEKk5B,IAAsB74B,EAAS,MAC5BL,EAAM,WAAW,SAAS,IAAIA,EAAM,aAAa,MACzD,GAEKm5B,IAAsB,CAACC,MAAqB;AAChD,MAAAv1B,EAAK,qBAAqBu1B,CAAQ;AAAA,IAAA;AAGpC,WAAA9zB;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,CAACmE,GAAUoB,MAAa;AACtB,YAAIpB,MAAaoB,KACbpB,EAAS,WAAW,KACpBA,EAAS,WAAW,KAAKnE,EAAM,aAAa;AAC1C,cAAA+4B,EAAe,UAAU,IAAI;AAC1B,YAAAl1B,EAAA,qBAAqBm1B,GAAqB;AAC/C;AAAA,UACF;AACK,UAAAn1B,EAAA,qBAAqBk1B,EAAe,KAAK;AAAA,QAChD;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChDd,UAAA,EAAE,GAAA74B,MAAMC,MAERk5B,IAAepzB,EAAI,EAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACM9B,UAAMjG,IAAQC,GAkCR4D,IAAOC,GASP,EAAE,OAAAw1B,GAAO,KAAAC,GAAK,kBAAAC,EAAiB,IAAIx5B,EAAM,aAEzCyyB,IAAapyB,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAwE;AACrE,QAAAN,EAAA,qBAAqBpC,GAAwE0C,CAAQ,CAAC;AAAA,MAC7G;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MACR4D,IAASC,GAA2BT,IAAmB,MAAS,GAChEU,IAAUD,GAA2BR,IAAoB,MAAS,GAElEmvB,IAAY1sB,EAAI,EAAK,GACrBysB,IAASzsB,EAAI,EAAE,GACfktB,IAAeltB,EAAI,EAAK,GACxB,EAAE,aAAA4sB,EAAA,IAAgBtf,GAAOvT,CAAK,GAE9B6S,IAAawf,GAAcryB,EAAM,YAAY,GAE7Cy5B,IAAsBxzB,EAAqC,oBAAA,IAAK,CAAA,GAGhE6tB,IAAU,MAAM;AACpB,MAAAnB,EAAU,QAAQ,IACb9uB,EAAA,SAAS4uB,EAAW,KAAK;AAAA,IAAA,GAG1BruB,IAAS,MAAM;;AACnB,MAAAuuB,EAAU,QAAQ,KAClBtuB,IAAArE,EAAM,MAAN,QAAAqE,EAAS,UACJR,EAAA,QAAQ4uB,EAAW,KAAK;AAAA,IAAA,GAGzBnuB,IAAuBjE,EAAS,MAAM;;AACtC,aAACI,EAAYT,EAAM,YAAY,KAC/BuE,KAAAF,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,YAAT,QAAAE,EAAkB,SAAevE,EAAM,EAAE,QAAQ,IAAI,CAACwE,MAAsBA,EAAK,QAAQ,IACtF,KAFsC,CAACxE,EAAM,YAAY;AAAA,IAExD,CACT,GAEKyE,IAAgBpE,EAAS,MAAM;;AAC/B,UAAA,CAACI,EAAYT,EAAM,KAAK;AAAG,eAAOA,EAAM;AACxC,UAAAS,EAAYsD,CAAM,KAAKtD,EAAYwD,CAAO,KAAKxD,GAAY4D,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,KAAK;AAAU,eAAA;AACjF,YAAA,EAAE,KAAKK,MAASvC,IAA6BoC,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,OAAO,GAAG;AACtE,aAAOrE,EAAE6D,IAAS,MAAME,IAAU,YAAYS,CAAI;AAAA,IAAA,CACnD,GAEKC,IAAmBtE,EAAS,MAAM;;AAClC,aAACI,EAAYT,EAAM,QAAQ,MACxBqE,IAAArE,EAAM,MAAN,gBAAAqE,EAAS,eAAYE,IAAAvE,EAAM,MAAN,gBAAAuE,EAAS,SAAS,QAAQ,UAAS,aADtBvE,EAAM;AAAA,IACgB,CAChE,GAEK8yB,IAAiCzyB,EAAS,MAC1CL,EAAM,aAAa,EAExB,GAEKg0B,IAAiB,CAACX,MAAkB;AACxC,MAAI,CAACrzB,EAAM,YAAY,CAAC2yB,EAAU,SAASU,EAAM,WAAW,MAC5DX,EAAO,QAAQW;AAAA,IAAA,GAGXD,IAAY,OAAOC,MAAkB;AACzC,MAAAF,EAAa,QAAQ;AACrB,YAAMG,IAAcT,EAAY,MAAM7yB,EAAM,aAAa;AACzD,MAAAszB,EAAY,QAAQD,GACpBoG,EAAoB,MAAM,UACd,MAAMz5B,EAAM,kBAAkB6S,GAAYggB,EAAY,KAAK,GACnE,QAAQ,CAACruB,MAAc;AACzB,QAAAi1B,EAAoB,MAAM,IAAIj1B,EAAKxE,EAAM,SAAS,GAAGwE,CAAI;AAAA,MAAA,CAC1D,GACD2uB,EAAa,QAAQ;AAAA,IAAA,GAGjBF,IAAW5yB,EAAiD,MAAM;AAChE,YAAA6yB,wBAA4C;AAC9C,aAAAnyB,GAAQ0xB,EAAW,KAAK,IACfA,EAAA,MAAM,QAAQ,CAAC/xB,MAAU;AAC5B,QAAAwyB,EAAA,IAAIxyB,GAAO,EAAE;AAAA,MAAA,CACpB,IACQ+xB,EAAW,SACdS,EAAA,IAAIT,EAAW,OAAO,EAAE,GAEZgH,EAAA,MAAM,QAAQ,CAAC/4B,MAAU;AACrC,QAAAwyB,EAAA,IAAIxyB,EAAMV,EAAM,SAAS,GAAGU,EAAMV,EAAM,SAAS,CAAC;AAAA,MAAA,CACzD,GACM,MAAM,KAAKkzB,GAAO,CAAC,CAACnwB,GAAKrC,CAAK,OAC5B,EAAE,OAAOqC,GAAK,OAAOrC,EAAM,EACnC;AAAA,IAAA,CACF,GAEKg5B,KAA2B,CAACC,MACzB,IAAI,QAAiB,CAACC,OAC3BH,EAAoB,MAAM,QAAQ,CAAC/4B,GAAOqC,MAAQ;AAC5C,MAAA42B,EAAI,IAAI52B,CAAG,KACIy2B,EAAA/3B,GAAUf,CAAK,CAAC;AAAA,IACnC,CACD,GACMk5B,EAAQ,EAAI,EACpB,GAGG3F,IAAe,MAAM;AAEzB,UADAb,EAAU,EAAE,GACRpzB,EAAM,UAAU;AAClB,QAAAyyB,EAAW,QAAQ;AACnB;AAAA,MACF;AACA,MAAAA,EAAW,QAAQ;AAAA,IAAA,GAGfoH,IAAuB5zB,EAAI,CAAC,GAC5B6zB,IAAkB,MAAM;AACP,MAAAD,EAAA,QAAQ,KAAK;IAAI;AAGxC,WAAA3F;AAAA,MACExB;AAAA,MACA,CAACvuB,GAAUoB,MAAa;AACtB,QAAIpB,MAAaoB,MACf6tB,EAAUjvB,CAAQ,GAClBN,EAAK,yBAAyBM,CAAQ;AAAA,MAE1C;AAAA,MACA,EAAE,UAAU,KAAK,SAAS,IAAK;AAAA,IAAA,GAG3BmB,GAAAotB,GAAQ,CAACvuB,GAAUoB,MAAa;AACpC,UAAIpB,EAAS,WAAW,KAAKwuB,EAAU,UAAU,MACnC,KAAK,QACPkH,EAAqB,QAAQ,KAAK;AAC1C,QAAAnH,EAAO,QAAQntB;AACf;AAAA,MACF;AAEF,MAAIpB,MAAaoB,KACf1B,EAAK,gBAAgBM,CAAQ;AAAA,IAC/B,CACD,GAEDmB;AAAA,MACEmtB;AAAA,MACA,OAAOtuB,MAAa;AACd,YAAAvD,GAAOuD,CAAQ,KAAK1D,EAAY0D,CAAQ,KAAMpD,GAAQoD,CAAQ,KAAKA,EAAS,WAAW;AACzF;AAEF,cAAMwI,IAAS5L,GAAQoD,CAAQ,IAAIA,IAAW,CAACA,CAAQ,GACjD41B,IAAa,IAAI,IAAIptB,CAAM;AACjC,cAAM+sB,GAAyBK,CAAU,GAErCA,EAAW,OAAO,MAChBR,EAAA,MAAM,KAAKQ,CAAU,CAA6B,GAChDT;MAEV;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChNd,UAAA,EAAE,GAAAp5B,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfd,UAAMH,IAAQC;AASd,WAAAwP,GAAU,MAAM;AACd,MAAKzP,EAAM,cACJ,OAAA,SAAS,OAAOA,EAAM,UAAU;AAAA,IAAA,CACxC;;;;;;;;ACLK,UAAA,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAR,UAAA,EAAE,GAAAD,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACOR,UAAA,EAAE,GAAAD,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNF,IAAA65B,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,WAAW,aACXA,EAAA,WAAW,YACXA,EAAA,UAAU,SAJAA,IAAAA,MAAA,CAAA,CAAA,GAOAC,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SACRA,EAAA,WAAW,YACXA,EAAA,UAAU,SALAA,IAAAA,MAAA,CAAA,CAAA;AAUC,MAAAC,KAA0B,CAACx5B,MAA8B;AACpE,UAAQA,GAAO;AAAA,IACb,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF,GCtCMy5B,KAAahoB,GAAiB,UAAU,aAAa,GAErDK,KAAS+f,GAAS;AAAA,EACtB,UAAU;AAAA,IACR,GAAG4H,GAAW,EAAE,SAAS,IAAM;AAAA,EACjC;AAAA,EACA,MAAM;AAAA,IACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ,SAAS,UAAU;AAAA,EACnD;AAAA,EACA,MAAM;AAAA,IACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ,SAAS,IAAI;AAAA,EAC7C;AAAA,EACA,QAAQ;AAAA,IACN,GAAGA,GAAW,EAAE,MAAM,UAAU,SAAS,CAAC,WAAW,GAAG;AAAA,EAC1D;AAAA,EACA,mBAAmB;AAAA,IACjB,GAAGA,GAAW,EAAE,MAAM,qBAAqB,SAAS,IAAI;AAAA,EAC1D;AAAA,EACA,0BAA0B;AAAA,IACxB,GAAGA,GAAW,EAAE,MAAM,4BAA4B,SAAS,IAAI;AAAA,EACjE;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,IAAI;AAAA,EAClD;AAAA,EACA,aAAa;AAAA,IACX,GAAGA,GAAW,EAAE,MAAM,eAAe,SAAS,IAAI;AAAA,EACpD;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,MAAM;AAAA,EACpD;AAAA,EACA,SAAS;AAAA,IACP,GAAGA,GAAW,EAAE,MAAM,WAAW,SAAS,IAAM;AAAA,EAClD;AAAA,EACA,mBAAmB;AAAA,IACjB,GAAGA,GAAW,EAAE,MAAM,qBAAqB,SAAS,IAAO;AAAA,EAC7D;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,MAAM;AAAA,EACpD;AAAA,EACA,SAAS;AAAA,IACP,GAAGA,GAAW,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,EAClD;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,IAAI;AAAA,EAClD;AAAA,EACA,uBAAuB;AAAA,IACrB,GAAGA,GAAW,EAAE,MAAM,yBAAyB,SAAS,IAAI,UAAU,IAAM;AAAA,EAC9E;AAAA,EACA,UAAU;AAAA,IACR,GAAGA,GAAW,EAAE,MAAM,YAAY,SAAS,IAAI;AAAA,EACjD;AAAA,EACA,uBAAuB;AAAA,IACrB,GAAGA,GAAW,EAAE,MAAM,yBAAyB,SAAS,MAAM;AAAA,EAChE;AAAA,EACA,wBAAwB;AAAA,IACtB,GAAGA,GAAW,EAAE,MAAM,0BAA0B,SAAS,MAAM;AAAA,EACjE;AAAA,EACA,eAAe;AAAA,IACb,GAAGA,GAAW,EAAE,MAAM,iBAAiB,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,gBAAgB;AAAA,IACd,GAAGA,GAAW,EAAE,MAAM,kBAAkB,SAAS,MAAM;AAAA,EACzD;AAAA,EACA,WAAW;AAAA,IACT,GAAGA,GAAW,EAAE,MAAM,aAAa,SAAS,MAAM;AAAA,EACpD;AAAA,EACA,YAAY;AAAA,IACV,GAAGA,GAAW,EAAE,MAAM,cAAc,SAAS,MAAM;AAAA,EACrD;AAAA,EACA,YAAY;AAAA,IACV,GAAGA,GAAW,EAAE,MAAM,cAAc,SAAS,MAAM;AAAA,EACrD;AAAA,EACA,aAAa;AAAA,IACX,GAAGA,GAAW,EAAE,MAAM,eAAe,SAAS,MAAM;AAAA,EACtD;AAAA,EACA,gBAAgB;AAAA,IACd,GAAGA,GAAW,EAAE,MAAM,kBAAkB,SAAS,MAAM;AAAA,EACzD;AAAA,EACA,iBAAiB;AAAA,IACf,GAAGA,GAAW,EAAE,MAAM,mBAAmB,SAAS,MAAM;AAAA,EAC1D;AAAA,EACA,iBAAiB;AAAA,IACf,GAAGA,GAAW,EAAE,MAAM,mBAAmB,SAAS,MAAM;AAAA,EAC1D;AAAA,EACA,kBAAkB;AAAA,IAChB,GAAGA,GAAW,EAAE,MAAM,oBAAoB,SAAS,MAAM;AAAA,EAC3D;AAAA,EACA,cAAc;AAAA,IACZ,GAAGA,GAAW,EAAE,MAAM,gBAAgB,SAAS,MAAM;AAAA,EACvD;AAAA,EACA,eAAe;AAAA,IACb,GAAGA,GAAW,EAAE,MAAM,iBAAiB,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,cAAc;AAAA,IACZ,GAAGA,GAAW,EAAE,MAAM,gBAAgB,SAAS,MAAM;AAAA,EACvD;AAAA,EACA,eAAe;AAAA,IACb,GAAGA,GAAW,EAAE,MAAM,iBAAiB,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACX,GAAGA,GAAW,EAAE,MAAM,eAAe,SAAS,MAAM;AAAA,EACtD;AAAA,EACA,cAAc;AAAA,IACZ,GAAGA,GAAW,EAAE,MAAM,gBAAgB,SAAS,MAAM;AAAA,EACvD;AAAA,EACA,gBAAgB;AAAA,IACd,GAAGA,GAAW,EAAE,MAAM,kBAAkB,SAAS,MAAM;AAAA,EACzD;AAAA,EACA,iBAAiB;AAAA,IACf,GAAGA,GAAW,EAAE,MAAM,mBAAmB,SAAS,MAAM;AAAA,EAC1D;AAAA,EACA,eAAe;AAAA,IACb,GAAGA,GAAW,EAAE,MAAM,iBAAiB,SAAS,MAAM;AAAA,EACxD;AAAA,EACA,gBAAgB;AAAA,IACd,GAAGA,GAAW,EAAE,MAAM,kBAAkB,SAAS,MAAM;AAAA,EACzD;AACF,CAAC;AAEM,SAASC,KAAqB;AAC5B,SAAA5nB;AACT;ACzHY,IAAA6nB,uBAAAA,OACVA,EAAA,aAAa,cACbA,EAAA,UAAU,WACVA,EAAA,QAAQ,SAHEA,IAAAA,MAAA,CAAA,CAAA;AAyBC,MAAAC,KAAoC,CAAC55B,MAAuC;AACvF,UAAQA,GAAO;AAAA,IACb,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL;AACS,aAAA;AAAA,EACX;AACF,GCxBa65B,KAAsBC,GAAY,sCAAsC,MAAM;AACnF,QAAAC,IAAiBx0B,EAAgC,CAAA,CAAE,GACnDy0B,IAASz0B,EAAI,EAAK,GAClB00B,IAAoB10B,EAAe,CAAC,GACpC20B,IAAe30B,EAA+B,CAAA,CAAE,GAChD40B,IAAY50B,EAAoB60B,GAAe,OAAO,GACtDC,IAAiB90B,EAAyC,oBAAA,IAAK,CAAA,GAC/D+0B,IAAa/0B,EAAI,EAAK,GACtBg1B,IAAWh1B,EAAI,CAAC,GAChBi1B,IAAWj1B,EAAI,CAAC;AAEtB,WAASk1B,IAAa;AACpB,IAAAT,EAAO,QAAQ;AAAA,EACjB;AAEA,WAASU,IAAa;AACpB,IAAAV,EAAO,QAAQ;AAAA,EACjB;AAEA,WAASW,EAAgB36B,GAAkC;AACzD,IAAIA,EAAM,WAAW,MACRk6B,EAAA,QAAQn5B,GAAUf,CAAK,GAClBi6B,EAAA,QAAQj6B,EAAM,CAAC,EAAE;AAAA,EACrC;AAEA,WAAS46B,EAAc56B,GAAgB;AACrC,IAAAs6B,EAAW,QAAQt6B;AAAA,EACrB;AAEA,WAAS66B,EAAa76B,GAAqB;AACzC,IAAAm6B,EAAU,QAAQn6B;AAAA,EACpB;AAEA,WAAS86B,EAAY96B,GAAe;AAClC,IAAAu6B,EAAS,QAAQv6B;AAAA,EACnB;AAEA,WAAS+6B,EAAY/6B,GAAe;AAClC,IAAAw6B,EAAS,QAAQx6B;AAAA,EACnB;AAEA,WAASg7B,EAAQhvB,GAAiC;AAChD,IAAA+tB,EAAe,QAAQ/tB,EAAM,IAAI,CAAClI,OACzB;AAAA,MACL,OAAOA;AAAA,MACP,UAAU;AAAA,IAAA,EAEb;AAAA,EACH;AAEA,WAASm3B,EAAWjvB,GAAiC;AACnD,UAAMkvB,IAASlvB,EAAM,IAAI,CAACmvB,OACjB;AAAA,MACL,OAAAA;AAAA,MACA,UAAU;AAAA,IAAA,EAEb;AACD,IAAApB,EAAe,QAAQA,EAAe,MAAM,OAAOmB,CAAM;AAAA,EAC3D;AAEA,WAASE,EAAsBz5B,GAAe;AACxC,QAACo4B,EAAe,MAAMp4B,CAAK,KAE3B,GAAC24B,EAAW,SAASe,EAAc,SAAS,CAACtB,EAAe,MAAMp4B,CAAK,EAAE,WAM7E;AAAA,UAFeo4B,EAAA,MAAMp4B,CAAK,EAAE,WAAW,CAACo4B,EAAe,MAAMp4B,CAAK,EAAE,UAEhE24B,EAAW,SAASP,EAAe,MAAMp4B,CAAK,EAAE,UAAU;AAC5D,QAAA25B,EAAkB35B,CAAK,GACT45B,KACAC,EAAAzB,EAAe,MAAMp4B,CAAK,CAAC;AACzC;AAAA,MACF;AAEA,UAAI,CAAC24B,EAAW,SAASP,EAAe,MAAMp4B,CAAK,EAAE,UAAU;AAC/C,QAAA65B,EAAAzB,EAAe,MAAMp4B,CAAK,CAAC;AACzC;AAAA,MACF;AAEA,MAAA85B,EAAmB1B,EAAe,MAAMp4B,CAAK,EAAE,MAAM,EAAE;AAAA;AAAA,EACzD;AAEA,WAAS25B,EAAkBI,GAAqB;AAC9C,UAAM1vB,IAAQ+tB,EAAe;AAC7B,aAAS7zB,IAAI,GAAGA,IAAI8F,EAAM,QAAQ9F;AAChC,MAAI8F,EAAM9F,CAAC,EAAE,YAAYA,MAAMw1B,MACvB1vB,EAAA9F,CAAC,EAAE,WAAW;AAAA,EAG1B;AAEA,WAASq1B,IAAgB;AACvB,IAAAlB,EAAe,MAAM;EACvB;AAEA,WAASmB,EAAcG,GAAgC;AACrD,IAAKtB,EAAe,MAAM,IAAIsB,EAAU,MAAM,EAAE,KAC9CtB,EAAe,MAAM,IAAIsB,EAAU,MAAM,IAAIA,CAAS;AAAA,EAE1D;AAEA,WAASF,EAAmBG,GAAgB;AAC1C,IAAIvB,EAAe,MAAM,IAAIuB,CAAO,KACnBvB,EAAA,MAAM,OAAOuB,CAAO;AAAA,EAEvC;AAEA,WAASC,IAAkC;;AACnC,UAAAC,wBAA0B;AAChC,eAAW97B,KAASq6B,EAAe,MAAM,OAAA;AACnC,OAAA12B,IAAA3D,EAAM,MAAM,aAAZ,QAAA2D,EAAsB,MACxBm4B,EAAQ,IAAI97B,EAAM,MAAM,SAAS,EAAE;AAGhC,WAAA,MAAM,KAAK87B,CAAO;AAAA,EAC3B;AAEA,WAASC,IAA+B;AACtC,WAAO,MAAM,KAAK1B,EAAe,MAAM,KAAM,CAAA;AAAA,EAC/C;AAEA,WAAS2B,IAA8C;AACrD,UAAMd,IAAwC,CAAA;AAC9C,eAAWl7B,KAASq6B,EAAe,MAAM,OAAA;AACvC,MAAAa,EAAO,KAAKh6B,GAAMlB,EAAM,KAAK,CAAC;AAEzB,WAAAk7B;AAAA,EACT;AAEA,WAASe,GAAgBxT,GAAoD;AAC3E,YAAQA,GAAM;AAAA,MACZ,KAAKkR,GAAsB;AAClB,eAAA;AAAA,UACL,MAAMA,GAAsB;AAAA,UAC5B,OAAOoC,EAAoB;AAAA,QAAA;AAAA,MAE/B,KAAKpC,GAAsB;AAClB,eAAA;AAAA,UACL,MAAMA,GAAsB;AAAA,UAC5B,OAAOqC,EAAkB;AAAA,QAAA;AAAA,MAE7B,KAAKrC,GAAsB;AAAA,MAC3B;AACS,eAAA;AAAA,UACL,MAAMA,GAAsB;AAAA,UAC5B,OAAOkC,EAAuB;AAAA,QAAA;AAAA,IAEpC;AAAA,EACF;AAEM,QAAAR,IAAgB17B,EAAS,MACtBu8B,EAAc,SAAS1B,EAAS,KACxC,GAEK0B,IAAgBv8B,EAAS,MACtB06B,EAAe,MAAM,IAC7B;AAED,WAAS8B,IAAQ;AACf,IAAApC,EAAe,QAAQ,IACvBC,EAAO,QAAQ,IACDuB;EAChB;AAEM,QAAAa,IAAuBz8B,EAAS,MAAM;AACpC,UAAAgG,IAAQu0B,EAAa,MAAM,KAAK,CAACmC,MAAgBA,EAAW,YAAYpC,EAAkB,KAAK;AACjG,WAAAt0B,KACGu0B,EAAa,MAAM,CAAC;AAAA,EAAA,CAC5B;AAEM,SAAA;AAAA,IACL,mBAAAD;AAAA,IACA,cAAAC;AAAA,IACA,WAAAC;AAAA,IACA,YAAAG;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAA0B;AAAA,IACA,gBAAA7B;AAAA,IACA,QAAAL;AAAA,IACA,gBAAAD;AAAA,IACA,iBAAAkC;AAAA,IACA,cAAApB;AAAA,IACA,iBAAAF;AAAA,IACA,eAAAC;AAAA,IACA,aAAAE;AAAA,IACA,aAAAC;AAAA,IACA,YAAAN;AAAA,IACA,YAAAC;AAAA,IACA,SAAAM;AAAA,IACA,YAAAC;AAAA,IACA,uBAAAG;AAAA,IACA,eAAAG;AAAA,IACA,OAAAY;AAAA,IACA,sBAAAC;AAAA,EAAA;AAEJ,CAAC,GC/MKE,KAA4B/2B,EAA2C,MAAS;AAE/E,SAASg3B,GAA8BxwB,GAAiC;AAC7E,EAAAuwB,GAA0B,QAAQvwB;AACpC;AAEgB,SAAAywB,GAA6BC,IAAqB,WAAW;AAC3E,MACE18B,EAAYu8B,GAA0B,KAAK,KAC3Cv8B,EAAYu8B,GAA0B,MAAM,OAAO,KACnDv8B,EAAYu8B,GAA0B,MAAM,QAAQG,CAAU,CAAC;AAEzD,UAAA,IAAI,MAAM,oEAAoE;AAG/E,SAAA;AAAA,IACL,WAAWH,GAA0B,MAAM,QAAQG,CAAU,EAAE;AAAA,EAAA;AAEnE;AAEO,SAASC,KAAqC;AAEjD,MAAA38B,EAAYu8B,GAA0B,KAAK,KAC3Cv8B,EAAYu8B,GAA0B,MAAM,OAAO;AAE7C,UAAA,IAAI,MAAM,oEAAoE;AAG/E,SAAA;AAAA,IACL,YAAYA,GAA0B,MAAM;AAAA,IAC5C,sBAAsBA,GAA0B,MAAM;AAAA,IACtD,cAAcA,GAA0B,MAAM;AAAA,EAAA;AAElD;AC/BO,MAAMK,KAAuB,CAACC,GAAqBC,GAAsBC,IAAsB,OAChGl8B,GAAci8B,CAAS,IAAUD,IAC9B56B,GAAyB86B,MAAwB,KAAKF,IAAcE,GAAqBD,CAAS,GCP9FE,KAAoB,CAACC,MACzB9xB,GAAsB,SAAS8xB,CAAU,GCarCC,KAAc,CACzBC,GACAN,GACAC,IAAuB,CAAC,GACxBx5B,GACAyI,GACAlG,IAA8B,OAEvB,IAAI,QAAQ,CAACszB,GAASiE,MAAW;AAC/B,EAAAD,EAAA,EACJ,IAAIP,GAAqBC,GAAaC,CAAS,GAAGj3B,CAAO,EACzD,KAAK,CAACiJ,MACAkuB,GAAkBluB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnBiE,EAAO,IAAI3yB,GAAA,CAAgB,IARzB2yB,EAAO,IAAI/wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BsmB,EAAO,IAAI7xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCsmB,EAAO,IAAIxxB,GAAuBkL,GAAKxT,GAAQyI,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CsmB,EAAO,IAAI1wB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDsmB,EAAO,IAAI3yB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ;AC5CI,SAASumB,KAAqB;AAC7B,QAAAz0B,IAAIpD,EAAc,CAAA,CAAE,GAEpB83B,IAAgB,CAACr9B,MAAwB;AAC7C,IAAAs9B,EAAS,SAASt9B,CAAK;AAAA,EAAA,GAGnBu9B,IAAiB,CAACC,GAAcC,MAAwB;AACnD,IAAAH,EAAA,UAAUE,IAAOC,IAAQA,CAAK;AAAA,EAAA,GAGnCC,IAAgB,CAACC,GAAsBC,MAAwB;AACnE,IAAI,CAAC19B,GAAOy9B,CAAK,KAAKA,EAAM,SAAS,KAAGL,EAAS,WAAWK,IAAQ,KAAKC,IAAO,SAAS,KAAK;AAAA,EAAA,GAG1FC,IAAc,CAAC79B,MACfO,GAAUP,CAAK,IACVA,IAAQ,MAAM,MAEhBA,GAGH89B,IAAiB,CAACC,GAA8BJ,GAAe39B,MAA2C;AAC9G,IAAII,GAASJ,CAAK,KAAKA,EAAM,WAAW,KACtC2I,EAAA,MAAM,KAAK,YAAYo1B,IAAgB,MAAMJ,IAAQ,OAAOE,EAAY79B,CAAK,CAAC;AAAA,EAAA,GAG5Eg+B,IAAW,CAAClsB,MAAqD;AACrE,UAAMS,IAAQT,EAAO;AACjB,WAAA5R,GAAOqS,CAAK,IACVT,EAAO,aACTA,EAAO,QAAQA,EAAO,SACfA,EAAO,WAET,OAEL1R,GAASmS,CAAK,IACZA,EAAM,WAAW,IACfT,EAAO,aACTA,EAAO,QAAQA,EAAO,SACfA,EAAO,WAET,OAEF,mBAAmBS,CAAK,IAE7BlS,GAAQkS,CAAK,IACXA,EAAM,WAAW,IACfT,EAAO,aACTA,EAAO,QAAQA,EAAO,SACfA,EAAO,WAET,OAEFS,EAAM,IAAI,CAACzO,MAAU1D,GAAS0D,CAAI,IAAI,mBAAmBA,CAAI,IAAIA,CAAK,EAAE,KAAK,GAAG,IAErF3D,GAASoS,CAAK,KAAKhS,GAAUgS,CAAK,IAC7BA,IAGF;AAAA,EAAA,GAGH+qB,IAAW,CAACj7B,GAAarC,MAAqB;AAClD,IAAA2I,EAAE,MAAM,KAAKtG,IAAM,MAAMrC,CAAK;AAAA,EAAA;AA2BzB,SAAA;AAAA,IACL,eAAAq9B;AAAA,IACA,gBAAAE;AAAA,IACA,eAAAG;AAAA,IACA,gBAAAI;AAAA,IACA,iBAzBsB,CAAC9rB,MAA+B;AACtD,YAAMisB,IAAc,CAACl+B,EAAYiS,EAAU,QAAQ;AACnD,iBAAWC,KAAcD,GAAW;AAC5B,cAAAF,IAASE,EAAUC,CAAU,GAC7B0rB,IAAQ7rB,EAAO,SAASG;AAC9B,YAAIH,EAAO;AACT;AAEI,cAAA9R,IAAQg+B,EAASlsB,CAAM;AACzB,YAAA,CAAA5R,GAAOF,CAAK,GAGhB;AAAA,cAAIi+B,GAAa;AACf,YAAAX,EAASK,GAAO39B,CAAK;AACrB;AAAA,UACF;AACe,UAAA89B,EAAAhsB,EAAO,SAAS6rB,GAAO39B,CAAK;AAAA;AAAA,MAC7C;AAAA,IAAA;AAAA,IASA,UAAAs9B;AAAA,IACA,YA/BiB,MACV,MAAM30B,EAAE,MAAM,KAAK,GAAG;AAAA,EA8B7B;AAEJ;AC/Fa,MAAAu1B,KAAoB,CAAIl+B,MAC5BW,GAASX,CAAK,KAAK,OAAO,OAAOA,GAAO,YAAY,GAGhDm+B,KAA4B,CAAIn+B,MACpCW,GAASX,CAAK,KAAK,OAAO,OAAOA,GAAO,aAAa,GCExDo+B,KAAuB,CAACjsB,GAAwBH,MAAiC;AACrF,QAAM,EAAE,eAAAqrB,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAW,GAAY,iBAAAC,EAAA,IAAoBlB;AACtF,SAAAC,EAAclrB,EAAW,WAAW,GACrBorB,EAAAprB,EAAW,MAAMA,EAAW,WAAW,GACxCurB,EAAAvrB,EAAW,QAAQA,EAAW,UAAU,GACtDmsB,EAAgBtsB,CAAS,GAClBqsB,EAAW;AACpB,GAKaE,KAAe,CAC1BrB,GACAN,GACAC,IAAuB,CACvB,GAAA1qB,GACAH,GACA3O,GACAyI,GACAlG,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACszB,GAASiE,MAAW;AACtC,QAAMqB,IAAYz+B,EAAYiS,EAAU,QAAQ,IAAI,KAAK;AACzD,EAAAkrB,EACG,EAAA;AAAA,IACCP,GAAqBC,GAAaC,CAAS,IAAI2B,IAAYJ,GAAqBjsB,GAAYH,CAAS;AAAA,IACrGpM;AAAA,EAAA,EAED,KAAK,CAACiJ,MAAQ;AACb,QAAI,CAACkuB,GAAkBluB,EAAI,MAAM;AAC/B,aAAOsuB,EAAO,IAAI/wB,GAAyByC,EAAI,MAAM,CAAC;AAExD,QAAIA,EAAI,MAAM;AACZ,YAAM4vB,IAAU5vB,EAAI;AAChB,aAAAsvB,GAA0BM,CAAO,IACxBtsB,EAAA,cAActD,EAAI,KAAK,cACzBqvB,GAAkBO,CAAO,MAClCtsB,EAAW,aAAassB,EAAQ,aAEvBtsB,EAAA,mBAAmBtD,EAAI,KAAK,KAAK,QACrCqqB,EAAQrqB,EAAI,KAAK,IAAI;AAAA,IAC9B;AACI,WAAAA,EAAI,WAAWhE,KACVquB,EAAQ,CAAA,CAAO,IAEjBiE,EAAO,IAAI3yB,GAAA,CAAgB;AAAA,EAAA,CACnC,EACA,MAAM,CAACqM,MACF1L,GAA8B0L,CAAG,IAC5BsmB,EAAO,IAAI7xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCsmB,EAAO,IAAIxxB,GAAuBkL,GAAKxT,GAAQyI,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CsmB,EAAO,IAAI1wB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDsmB,EAAO,IAAI3yB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ;ACJS,IAAA6nB,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,aAAa,gBACbA,EAAA,cAAc,iBACdA,EAAA,aAAa,gBACbA,EAAA,UAAU,QALAA,IAAAA,MAAA,CAAA,CAAA,GAkBAC,uBAAAA,OACVA,EAAA,UAAU,uBACVA,EAAA,KAAK,kBACLA,EAAA,SAAS,sBAHCA,IAAAA,MAAA,CAAA,CAAA,GAMAC,uBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,eAAe,gBACfA,EAAA,mBAAmB,qBACnBA,EAAA,cAAc,eACdA,EAAA,SAAS,UACTA,EAAA,UAAU,WANAA,IAAAA,MAAA,CAAA,CAAA,GAaAC,uBAAAA,OACVA,EAAA,kBAAkB,oBAClBA,EAAA,SAAS,UACTA,EAAA,UAAU,oBAHAA,IAAAA,MAAA,CAAA,CAAA;AC1GZ,MAAMC,KAAY,yBACZC,KAAuB,QACvBC,KAAgBD,KAAuB,qBACvCE,KAAS,YAEFC,KAAwB,CAACC,MACpClC,GAA0BkC,GAAWH,IAAe,CAAI,GAAAI,IAAiBH,EAAM,GAEpEI,KAAqB,CAACF,MACjClC,GAA0BkC,GAAWL,IAAW,CAAI,GAAAM,IAAiBH,EAAM,GAEhEK,KAA8B,CAACC,GAAsBJ,MAChElC,GAAgCkC,GAAWL,KAAY,iBAAiBS,GAAW,IAAIH,IAAiBH,EAAM,GCV1GH,KAAY,6BACZG,KAAS,mBAGFO,KAA+B,CAC1CL,GACAI,GACApF,MAEA8C;AAAA,EACEkC;AAAA,EACAL,KAAY;AAAA,EACZ,EAAE,WAAAS,GAAW,WAAApF,EAAU;AAAA,EACvBiF;AAAA,EACAH;AACF,GAGWQ,KAAsC,CACjDN,GACAO,MAEAzC;AAAA,EACEkC;AAAA,EACAL,KAAY;AAAA,EACZ,EAAE,qBAAAY,EAAoB;AAAA,EACtBN;AAAA,EACAH;AACF,GCUI7O,KAAcyB,GAGjB;AAAA,EACD,cAAc;AAAA,EACd,cAAc;AAChB,CAAC,GAEK8N,KAAerL,GAAyB;AAAA,EAC5C,cAAcuK,GAAa;AAC7B,CAAC,GAEKe,KAAetL,GAAyB;AAAA,EAC5C,UAAU,CAAC;AAAA,EACX,wBAAwB,CAAC;AAAA,EACzB,sBAAsB,CAAC;AAAA,EACvB,UAAU;AAAA,IACR,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,MAChB,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,kBAAkB;AAAA,EACpB;AACF,CAAC,GAEKuL,KAAqBvL,GAAe,oBAAA,IAAA,CAAoC,GAExEwL,KAAmCxL;AAAA,sBACnC,IAAmE;AACzE,GAEMyL,KAA0CzL;AAAA,sBAC1C,IAAyD;AAC/D;AAEgB,SAAA0L,GAAkB9C,IAA4C,QAAW;AACvF,WAAS+C,EAAc11B,GAAc;AACnC,YAAQ,MAAMA,CAAK;AAAA,EACrB;AAEA,WAAS21B,IAAmB;AAC1B,WAAO,IAAI,QAAQ,CAAChH,GAASiE,MAAW;AAElC,UADJ/M,GAAY,eAAe,IACvBrwB,EAAYm9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACA,MAAA+B,GAAsBhC,CAAM,EACzB,KAAK,CAACpuB,MAAW;AAChB,YAAI,OAAO,KAAKA,CAAM,EAAE,SAAS;AACzB,gBAAA,IAAI,MAAM,qDAAqD;AAEvE,QAAAqxB,EAAgBrxB,CAAM,GACtBoqB,EAAQ,EAAI;AAAA,MAAA,CACb,EACA,MAAM,CAACriB,MAAQ;AACd,QAAAopB,EAAcppB,CAAG,GACjBsmB,EAAO,EAAK;AAAA,MAAA,CACb;AAAA,IAAA,CACJ;AAAA,EACH;AAEA,WAASgD,EAAgBp0B,GAAoB;AACvC,QAAA;AACW,MAAA4zB,GAAA,MAAM,eAAe5zB,EAAK,cAEvCqkB,GAAY,eAAe;AAAA,YACf;AACN,YAAA,IAAI,MAAM,0DAA0D;AAAA,IAC5E;AAAA,EACF;AAEA,WAASgQ,IAAuB;AAC9B,WAAOhQ,GAAY;AAAA,EACrB;AAEA,WAASiQ,IAAmB;AAC1B,WAAO,IAAI,QAAQ,CAACnH,GAASiE,MAAW;AAElC,UADJ/M,GAAY,eAAe,IACvBrwB,EAAYm9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACA,MAAAkC,GAAmBnC,CAAM,EACtB,KAAK,CAACpuB,MAAW;AAChB,YAAI,OAAO,KAAKA,CAAM,EAAE,SAAS;AACzB,gBAAA,IAAI,MAAM,yDAAyD;AAE3E,QAAAwxB,EAAgBxxB,CAAM,GACtBoqB,EAAQ,EAAI;AAAA,MAAA,CACb,EACA,MAAM,CAACriB,MAAQ;AACd,QAAAopB,EAAcppB,CAAG,GACjBsmB,EAAO,EAAK;AAAA,MAAA,CACb;AAAA,IAAA,CACJ;AAAA,EACH;AAEA,WAASmD,EAAgBv0B,GAAoB;AACvC,QAAA;AACW,MAAA6zB,GAAA,MAAM,WAAW7zB,EAAK,UACtB6zB,GAAA,MAAM,WAAW7zB,EAAK,UACtB6zB,GAAA,MAAM,yBAAyB7zB,EAAK,wBACpC6zB,GAAA,MAAM,uBAAuB7zB,EAAK,sBAE/CqkB,GAAY,eAAe;AAAA,YACf;AACN,YAAA,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAAA,EACF;AAEA,WAASmQ,IAAuB;AAC9B,WAAOnQ,GAAY;AAAA,EACrB;AAEA,WAASoQ,EAAuBC,GAAwB;AACtD,WAAO,IAAI,QAAQ,CAACvH,GAASiE,MAAW;AAClC,UAAAp9B,EAAYm9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACA,MAAAmC,GAA4BmB,GAAavD,CAAM,EAC5C,KAAK,CAACpuB,MAAW;AAChB,YAAI,OAAO,KAAKA,CAAM,EAAE,SAAS;AACzB,gBAAA,IAAI,MAAM,gEAAgE;AAElF,QAAA4xB,EAAsB5xB,GAAQ2xB,CAAW,GACzCvH,EAAQ,EAAI;AAAA,MAAA,CACb,EACA,MAAM,CAACriB,MAAQ;AACd,QAAAopB,EAAcppB,CAAG,GACjBsmB,EAAO,EAAK;AAAA,MAAA,CACb;AAAA,IAAA,CACJ;AAAA,EACH;AAES,WAAAuD,EAAsB30B,GAA0B00B,GAAwB;AAC3E,QAAA;AACF,YAAM3xB,IAAS;AAAA,QACb,wBAAwB/C,EAAK;AAAA,QAC7B,OAAOA,EAAK;AAAA,QACZ,UAAUA,EAAK;AAAA,QACf,OAAOA,EAAK;AAAA,QACZ,OAAOA,EAAK;AAAA,MAAA;AAEK,MAAA8zB,GAAA,MAAM,IAAIY,GAAa3xB,CAAM;AAAA,YACpC;AACN,YAAA,IAAI,MAAM,iEAAiE;AAAA,IACnF;AAAA,EACF;AAEA,WAAS6xB,EAAsBF,GAAwB;AAC9C,WAAAZ,GAAmB,MAAM,IAAIY,CAAW;AAAA,EACjD;AAGA,WAASG,EAAqCH,GAAwB;AACpE,WAAO,IAAI,QAAQ,CAACvH,GAASiE,MAAW;AAClC,UAAAp9B,EAAYm9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACA,YAAM0D,IAAW;AAAA,QACfrB,GAA6BtC,GAAQuD,GAAalH,GAAa,KAAK;AAAA,QACpEiG,GAA6BtC,GAAQuD,GAAalH,GAAa,KAAK;AAAA,QACpEiG,GAA6BtC,GAAQuD,GAAalH,GAAa,KAAK;AAAA,QACpEiG,GAA6BtC,GAAQuD,GAAalH,GAAa,QAAQ;AAAA,MAAA;AAGzE,cAAQ,IAAIsH,CAAQ,EACjB,KAAK,CAACC,MAAc;AACnB,YACEA,EAAU,WAAW,KACrB,OAAO,KAAKA,EAAU,CAAC,CAAC,EAAE,SAAS,KACnC,OAAO,KAAKA,EAAU,CAAC,CAAC,EAAE,SAAS,KACnC,OAAO,KAAKA,EAAU,CAAC,CAAC,EAAE,SAAS,KACnC,OAAO,KAAKA,EAAU,CAAC,CAAC,EAAE,SAAS;AAE7B,gBAAA,IAAI,MAAM,mEAAmE;AAErF,QAAAC,EAAoCD,GAAWL,CAAW,GAC1DvH,EAAQ,EAAI;AAAA,MAAA,CACb,EACA,MAAM,CAACriB,MAAQ;AACd,QAAAopB,EAAcppB,CAAG,GACjBsmB,EAAO,EAAK;AAAA,MAAA,CACb;AAAA,IAAA,CACJ;AAAA,EACH;AAES,WAAA4D,EACPD,GAGAL,GACA;AACI,QAAA;AACF,YAAM3xB,IAAS;AAAA,QACb,OAAOgyB,EAAU,CAAC,EAAE;AAAA,QACpB,OAAOA,EAAU,CAAC,EAAE;AAAA,QACpB,OAAOA,EAAU,CAAC,EAAE;AAAA,QACpB,UAAUA,EAAU,CAAC,EAAE;AAAA,MAAA;AAEQ,MAAAhB,GAAA,MAAM,IAAIW,GAAa3xB,CAAM;AAAA,YAClD;AACN,YAAA,IAAI,MAAM,oEAAoE;AAAA,IACtF;AAAA,EACF;AAEA,WAASkyB,EAAoCP,GAAwB;AAC5D,WAAAX,GAAiC,MAAM,IAAIW,CAAW;AAAA,EAC/D;AAEA,WAASQ,EAA6CC,GAAqD;AACzG,WAAO,IAAI,QAAQ,CAAChI,GAASiE,MAAW;AAClC,UAAAp9B,EAAYm9B,CAAM,GAAG;AACvB,QAAAC,EAAO,EAAK;AACZ;AAAA,MACF;AACA,UAAI4C,GAAwC,MAAM,IAAImB,CAAuB,GAAG;AAC9E,QAAAhI,EAAQ,EAAI;AACZ;AAAA,MACF;AACA,MAAAuG,GAAoCvC,GAAQgE,CAAuB,EAChE,KAAK,CAACryB,MAAQ;AACb,QAAAkxB,GAAwC,MAAM,IAAImB,GAA0BryB,EAAI,IAAI,GACpFqqB,EAAQ,EAAI;AAAA,MACZ,CACD,EACA,MAAM,CAAC3uB,MAAU;AAChB,QAAA4yB,EAAO5yB,CAAK;AAAA,MACZ,CACD;AAAA,IAAA,CACJ;AAAA,EACH;AAEO,SAAA;AAAA,IACL,aAAA6lB;AAAA,IACA,cAAAuP;AAAA,IACA,cAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,kCAAAC;AAAA,IACA,yCAAAC;AAAA,IACA,kBAAAM;AAAA,IACA,kBAAAH;AAAA,IACA,wBAAAM;AAAA,IACA,sCAAAI;AAAA,IACA,6CAAAK;AAAA,IACA,sBAAAb;AAAA,IACA,sBAAAG;AAAA,IACA,uBAAAI;AAAA,IACA,qCAAAK;AAAA,EAAA;AAEJ;ACxRA,MAAMlC,KAAY,iBACZqC,KAAsB,IACflC,KAAS,SACTG,KAAkB,WACzBgC,KAAyB,IAYlBC,KAAiB,CAC5BnE,GACAoE,GACAnvB,GACAH,MAEAusB;AAAA,EACErB;AAAA,EACA4B,KAAY;AAAA,EACZ,EAAE,WAAAwC,EAAU;AAAA,EACZnvB;AAAA,EACAH;AAAA,EACAotB;AAAA,EACAH;AACF,GAEWsC,KAAa,CAACrE,GAA6BsE,MACtDvE,GAAgCC,GAAQ4B,KAAY,QAAQ,EAAE,IAAA0C,EAAA,GAAMpC,IAAiBH,EAAM,GAEhFwC,KAAqB,CAACvE,GAA6BwE,MAC9DzE,GAAgCC,GAAQ4B,KAAY,mBAAmB,EAAE,IAAI4C,EAAY,GAAGtC,IAAiBH,EAAM,GAExG0C,KAA2B,CAACzE,GAA6BlxB,MAC7D,IAAI,QAAiC,CAACktB,GAASiE,MAAW;AACzD,QAAAyE,IAAYC,GAA6B71B,CAAK;AACpD,EAAA81B,GAAuB5E,GAAQ0E,CAAS,EACrC,KAAK,CAACd,MAAc;AACf,QAAAc,EAAU,WAAW;AAChB,aAAA1I,EAAQ,CAAA,CAAE;AACnB,QAAW4H,EAAU,WAAW;AAC9B,aAAO3D,EAAO2D,CAAS;AAEvB,QAAAA,EAAU,MAAM,CAACjyB,MACRA,EAAI,WAAWlE,EACvB,GACD;AACA,YAAMo3B,IAAwCjB,EAAU,QAAQ,CAAAkB,MAAYA,EAAS,IAAI;AACzF,aAAO9I,EAAQ6I,CAAY;AAAA,IAAA;AAE3B,aAAO5E,EAAO2D,CAAS;AAAA,EACzB,CACD,EACA,MAAM,CAACjqB,MAECsmB,EAAOtmB,CAAG,CAClB;AAAA,CACJ;AAGH,eAAeorB,GAA4B/E,GAA6BjE,GAAcqI,GAAmB;AACvG,MAAIrI,EAAI,WAAW;AAAU,WAAA,QAAQ,QAAQ,CAAA,CAAE;AAC/C,QAAMiJ,IAAa,KAAK,KAAKjJ,EAAI,SAASmI,EAAsB,GAC1DN,IAAY,CAAA;AAElB,WAAS56B,IAAI,GAAGA,IAAIg8B,GAAYh8B,KAAK;AACnC,UAAM6d,IAAS7d,IAAIk7B,IACbe,IAAUlJ,EAAI,MAAMlV,GAAQA,IAASqd,EAAsB,GAC3DvyB,IAAM,MAAMquB,EAAO,EAAE,IAAI4B,KAAY,YAAYwC,CAAS,QAAQa,EAAQ,KAAK,GAAG,CAAC,EAAE;AAC3F,IAAArB,EAAU,KAAKjyB,CAAG;AAAA,EACpB;AACO,SAAAiyB;AACT;AAEO,MAAMsB,KAIwB,CAAClF,GAA6BjE,GAAcqI,MACxE,IAAI,QAAQ,CAACpI,GAASiE,MAAW;AACtC,EAAA8E,GAA4B/E,GAAQjE,GAAKqI,CAAS,EAC/C,KAAK,CAACR,MAAc;AACf,QAAA7H,EAAI,WAAW;AACV,aAAAC,EAAQ,CAAA,CAAE;AACnB,QAAW4H,EAAU,WAAW;AAC9B,MAAA3D,EAAO2D,CAAS;AAAA,aAEhBA,EAAU,MAAM,CAACjyB,MACRA,EAAI,WAAWlE,EACvB,GACD;AACA,YAAM6nB,IAAQ,CAAA;AACd,eAAStsB,IAAI,GAAGA,IAAI46B,EAAU,QAAQ56B;AACpC,QAAAssB,EAAM,KAAK,GAAGsO,EAAU56B,CAAC,EAAE,KAAK,IAAI;AAEtC,MAAAgzB,EAAQ1G,CAA6B;AAAA,IAAA;AAErC,MAAA2K,EAAO2D,CAAS;AAAA,EAClB,CACD,EACA,MAAM,CAACjqB,MAAQ;AAEd,IAAAsmB,EAAOtmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ;AAGH,eAAeirB,GAAuB5E,GAA6B0E,GAAoC;AACrG,QAAMM,IAAa,KAAK,KAAKN,EAAU,SAAST,EAAmB,GAC7DL,IAA6B,CAAA;AACnC,MAAIc,EAAU,WAAW;AAAU,WAAA,QAAQ,QAAQ,CAAA,CAAE;AAErD,WAAS17B,IAAI,GAAGA,IAAIg8B,GAAYh8B,KAAK;AACnC,UAAM6d,IAAS7d,IAAIi7B,IACbgB,IAAUP,EAAU,MAAM7d,GAAQA,IAASod,EAAmB,GAC9DtyB,IAAM,MAAMquB,EAAS,EAAA,MAAM4B,KAAY,yBAAyB,KAAK,UAAUqD,CAAO,CAAC;AAC7F,IAAArB,EAAU,KAAKjyB,CAAG;AAAA,EACpB;AACO,SAAAiyB;AACT;AAEA,SAASe,GAA8B71B,GAA0B;AAC/D,QAAMq2B,IAAoC,CAAA;AACpC,SAAAr2B,EAAA,QAAQ,CAAClI,MAAS;AACtB,IAAI,CAAC5D,GAAO4D,EAAK,OAAO,KAAKA,EAAK,mBAChCu+B,EAAS,KAAK;AAAA,MACZ,IAAIv+B,EAAK;AAAA,MACT,UAAUA,EAAK;AAAA,MACf,SAASA,EAAK;AAAA,MACd,WAAW;AAAA,MACX,YAAYA,EAAK;AAAA,IAAA,CAClB;AAAA,EACH,CACD,GAEMu+B;AACT;AAEA,MAAM,EAAE,kBAAAj0B,IAAkB,wBAAAT,OAA2Bf,MAE/C01B,KAAgC,CAAC/3B,GAAY4vB,GAAyBoF,MAAyB;AAC7F,QAAA,EAAE,qCAAAyB,MAAwChB,MAC1CuC,IAAgCvB,EAAoCzB,CAAS;AAC/E,MAAAx/B,EAAYwiC,CAA6B;AACrC,UAAA,IAAI,MAAM,2CAA2C;AAE7D,MAAI,CAACh4B,KAAS,CAACA,EAAM,YAAY,CAACA,EAAM,SAAS;AAAM;AACjD,QAAAwB,IAAOxB,EAAM,SAAS,MACtByB,IAAQ,CAAA;AACH,aAAA,CAAC3J,GAAK4J,CAAM,KAAK,OAAO,QAAQF,EAAK,MAAM,GAAG;AACvD,UAAM4xB,IAAQt7B,EAAI,MAAM,GAAG,EAAE,IAAI,GAC3BsD,IAAQ48B,EAA8BpI,CAAS,EAAE,KAAK,CAACr2B,MAASA,EAAK,aAAa65B,CAAK;AAC7F,IAAIh4B,KACFqG,EAAM,KAAK;AAAA,MACT,OAAOrG,EAAM;AAAA,MACb,QAAQsG;AAAA,IAAA,CACT;AAAA,EAEL;AACA,MAAID,EAAM,QAAQ;AACO,IAAA2B,GAAA3B,GAAO,IAAI,EAAI;AACtC;AAAA,EACF;AACiB,EAAAoC;AACnB,GAEao0B,KAAsB,CAACtF,GAA6B/B,GAA2BoE,MACnF,IAAI,QAAQ,CAACrG,GAASiE,MAAW;AACtC,QAAMpxB,IAAO;AAAA,IACX,IAAIovB,EAAM;AAAA,IACV,UAAUA,EAAM;AAAA,IAChB,SAASA,EAAM;AAAA,IACf,WAAW;AAAA,IACX,YAAYA,EAAM,SAAS;AAAA,EAAA;AAE7B,EAAA+B,IACG,MAAM4B,KAAY,yBAAyB,KAAK,UAAU,CAAC/yB,CAAI,CAAC,CAAC,EACjE,KAAK,CAAC8C,MAAQ;AACT,IAAAA,EAAI,WAAWlE,KACjBuuB,EAAQrqB,EAAI,IAAI,IAGTsuB;EACT,CACD,EACA,MAAM,CAACtmB,MACF1L,GAA8B0L,CAAG,IAC5BsmB,EAAO,IAAI7xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,KACzCyrB,GAA8BzrB,GAAKskB,EAAM,WAAW,WAAWoE,CAAS,GACjEpC,EAAO,IAAIxxB,GAAuBkL,GAAKuoB,IAAiBH,IAAQpoB,CAAG,CAAC,KAEzEtK,GAA4CsK,CAAG,IAC1CsmB,EAAO,IAAI1wB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDsmB,EAAO,IAAI3yB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GCtNG/E,KAAS4nB,GAAmB,GAC5BvnB,KAAawf,GAAc,GAC3B8Q,KAAkBl9B,EAAI,EAAK;AAEjB,SAAAm9B,GAAsBjG,IAAa,WAAW;AAC5D,QAAM,EAAE,WAAA0C,EAAA,IAAc3C,GAA6BC,CAAU,GAEvDkG,IAAmB9I,MACnB,EAAE,eAAAqC,GAAe,gBAAA7B,GAAgB,gBAAAN,GAAgB,QAAAC,MAAW4I,GAAYD,CAAgB,GAExF,EAAE,aAAAxuB,MAAgBvC,MAClB,EAAE,mBAAAjD,MAAsB/B,MAExBy0B,IAAiB,YAAY;AACjClvB,IAAAA,GAAW,OAAO;AACd,QAAA;AACF,MAAAwwB,EAAiB,WAAW,GACXA,EAAA;AAAA,QACf,MAAME,GAAkB1D,GAAWwD,EAAiB,mBAAmBxwB,IAAYL,EAAM;AAAA,MAAA;AAAA,aAEpFvH,GAAO;AACd,MAAAoE,EAAkBpE,CAAK;AAAA,IAAA,UACvB;AACA,MAAAo4B,EAAiB,WAAW;AAAA,IAC9B;AAAA,EAAA,GAEIG,IAAgB,YAAY;AACrB3wB,IAAAA,GAAA,OAAOA,GAAW,OAAO;AAChC,QAAA;AACF,MAAAwwB,EAAiB,WAAW,GACXA,EAAA;AAAA,QACf,MAAME,GAAkB1D,GAAWwD,EAAiB,mBAAmBxwB,IAAYL,EAAM;AAAA,MAAA;AAAA,aAEpFvH,GAAO;AACd,MAAAoE,EAAkBpE,CAAK;AAAA,IAAA,UACvB;AACA,MAAAo4B,EAAiB,WAAW;AAAA,IAC9B;AAAA,EAAA,GAGI98B,IAAc,CAACkG,MAA4C;AAC9C,IAAA42B,EAAA,sBAAsB52B,EAAK,KAAK;AAAA,EAAA,GAG7Cg3B,IAAiB,YAAY;AACjC,IAAAJ,EAAiB,MAAM,GACvB7wB,GAAO,KAAK,UAAU,CAAC6wB,EAAiB,SAAS,GACrCxuB,EAAArC,IAAQK,IAAYkvB,CAAc;AAAA,EAAA,GAG1C2B,IAAc,MAAM;AACxB,IAAAP,GAAgB,QAAQ;AAAA,EAAA,GAEpBQ,IAAgB,MAAM;AAC1B,IAAAR,GAAgB,QAAQ;AAAA,EAAA,GAGpBS,IAAmB,CACvBhJ,GACAC,GACAG,GACAC,GACAC,MACS;AACT,IAAAmI,EAAiB,cAAc,GAC/BA,EAAiB,aAAaxI,CAAS,GACvCwI,EAAiB,gBAAgBzI,CAAY,GAC7CyI,EAAiB,cAAcrI,CAAU,GACzCqI,EAAiB,YAAYpI,CAAQ,GACrCoI,EAAiB,YAAYnI,CAAQ;AAAA,EAAA;AAGhC,SAAA;AAAA,IACL,iBAAAiI;AAAA,IAAA,QACA3wB;AAAAA,IACA,eAAAoqB;AAAA,IACA,gBAAA7B;AAAA,IAAA,YACAloB;AAAAA,IACA,QAAA6nB;AAAA,IACA,gBAAAD;AAAA,IACA,iBAAiB4I,EAAiB;AAAA,IAClC,aAAA98B;AAAA,IAAA,gBACAw7B;AAAAA,IACA,eAAAyB;AAAA,IACA,gBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,eAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA;AAEJ;ACnGA,MAAMC,KAAe,KACfC,KAAyB;AAExB,SAASC,GAAoBv/B,GAA0C;AACtE,QAAAq3B,IAAQx7B,EAAiC,MACtCmE,EAAK,MAAM,KACnB,GAEKq2B,IAAYx6B,EAAS,MAClBw7B,EAAM,MAAM,WAAW,SAC/B,GAEKmI,IAAc3jC,EAAS,MACpBw7B,EAAM,MAAM,WAAW,WAC/B,GAEKoI,IAAkB5jC,EAAS,MAC3Bw7B,EAAM,MAAM,YAAYA,EAAM,MAAM,SAAS,SAASA,EAAM,MAAM,SAAS,MAAM,aAC5E;AAAA,IACL,KAAKA,EAAM,MAAM,SAAS,MAAM,WAAW;AAAA,IAC3C,OAAOA,EAAM,MAAM,SAAS,MAAM,WAAW;AAAA,IAC7C,QAAQA,EAAM,MAAM,SAAS,MAAM,WAAW;AAAA,IAC9C,SAASiI;AAAA,EAAA,IAGN;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQD;AAAAA,IACR,SAASC;AAAA,EAAA,CAEZ,GAEKI,IAAuB7jC,EAAS,MAChCw7B,EAAM,MAAM,YAAYA,EAAM,MAAM,SAAS,SAASA,EAAM,MAAM,SAAS,MAAM,cAC5E;AAAA,IACL,KAAKA,EAAM,MAAM,SAAS,MAAM,YAAY;AAAA,IAC5C,OAAOA,EAAM,MAAM,SAAS,MAAM,YAAY;AAAA,IAC9C,QAAQA,EAAM,MAAM,SAAS,MAAM,YAAY;AAAA,IAC/C,SAASiI;AAAA,EAAA,IAGN;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQD;AAAAA,IACR,SAASC;AAAA,EAAA,CAEZ;AAEM,SAAA;AAAA,IACL,OAAAjI;AAAA,IACA,WAAAhB;AAAA,IACA,aAAAmJ;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA;AAEJ;AC7DA,MAAeC,KAAA;;;;;;;;;;;;;;;;;;;;;ACMf,UAAMnkC,IAAQC,GAwBR4D,IAAOC,GAIPsgC,IAAU,MAAM;AACpB,MAAAvgC,EAAK,OAAO;AAAA,IAAA,GAGR+Q,IAAOvU,EAAS,MAAM;AACtB,UAAAL,EAAM,gBAAgBg6B,GAAe;AAAiB,eAAA;AAC1D,cAAQh6B,EAAM,WAAW;AAAA,QACvB,KAAKi6B,GAAa;AAChB,iBAAOj6B,EAAM,gBAAgBg6B,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKC,GAAa;AAChB,iBAAOj6B,EAAM,gBAAgBg6B,GAAe,WAAW,aAAa;AAAA,QACtE,KAAKC,GAAa;AAChB,iBAAOj6B,EAAM,gBAAgBg6B,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKC,GAAa;AAChB,iBAAOj6B,EAAM,gBAAgBg6B,GAAe,WAAW,cAAc;AAAA,QACvE;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEKqK,IAAchkC,EAAS,MACpBI,EAAYT,EAAM,GAAG,IAAIskC,KAAkBtkC,EAAM,GACzD,GAEKukC,IAAmBlkC,EAAS,MAC5B,EAAAL,EAAM,cAAci6B,GAAa,SAASj6B,EAAM,IAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC7DYwkC,KAAc,CAACC,GAAeC,IAAW,MAAM;AAC1D,MAAID,MAAU;AACL,WAAA;AAGT,QAAMl9B,IAAI,MACJo9B,IAAKD,IAAW,IAAI,IAAIA,GACxBE,IAAQ,CAAC,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAChEh+B,IAAI,KAAK,MAAM,KAAK,IAAI69B,CAAK,IAAI,KAAK,IAAIl9B,CAAC,CAAC;AAElD,SAAO,YAAYk9B,IAAQ,KAAK,IAAIl9B,GAAGX,CAAC,GAAG,QAAQ+9B,CAAE,CAAC,IAAI,MAAMC,EAAMh+B,CAAC;AACzE,GCgBMi9B,KAAe,IACfgB,KAAc;;;;;;;;;AAlBpB,UAAM7kC,IAAQC,GAWR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAKRqE,IAAOsgC,GAAM9kC,GAAO,MAAM,GAE1B,EAAE,OAAA67B,GAAO,sBAAAqI,GAAsB,WAAArJ,GAAW,aAAAmJ,MAAgBD,GAAoBv/B,CAAI,GAElF+B,IAAc,MAAM;AACnB,MAAA1C,EAAA,aAAa,EAAE,SAASg4B,EAAM,MAAM,IAAI,OAAO77B,EAAM,MAAA,CAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9B7D,UAAA,EAAE,GAAAE,MAAMC,MAER,EAAE,aAAAoG,GAAa,gBAAAk0B,GAAgB,QAAAC,MAAW0I,GAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACL1D,IAAA2B,uBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,YAAY,aACZA,EAAA,QAAQ,SACRA,EAAA,UAAU,WAJAA,IAAAA,MAAA,CAAA,CAAA;AAOZ,MAAMC,KAAW/+B;AAAA,EAAyB;AAAA;;AAEnC,SAASg/B,KAAc;AACtB,QAAAC,IAAc,CAACxkC,MAA+B;AAClD,IAAAskC,GAAS,QAAQtkC;AAAA,EAAA;AAGZ,SAAA;AAAA,IACL,UAAU0vB,GAAS4U,EAAQ;AAAA,IAC3B,aAAAE;AAAA,EAAA;AAEJ;AClBA,MAAMC,KAAcl/B,EAAI,EAAK;AAEtB,SAASm/B,KAAa;AAC3B,QAAMC,IAAgB,MAAM;AACd,IAAAF,GAAA,QAAQG,EAAa,IAAIC,EAAY;AAAA,EAAA,GAG7CA,IAAc,MAAM;AACxB,IAAAJ,GAAY,QAAQ;AAAA,EAAA,GAGhBG,IAAe,MAAM;AACzB,IAAAH,GAAY,QAAQ;AAAA,EAAA;AAGf,SAAA;AAAA,IACL,aAAAA;AAAA,IACA,eAAAE;AAAA,IACA,aAAAE;AAAA,EAAA;AAEJ;;;;ACjBM,UAAA,EAAE,GAAArlC,MAAMC,MACR,EAAE,aAAA+kC,MAAgBD,MAClB,EAAE,eAAAI,MAAkBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uRCkBpBvB,KAAe;;;;;;;;;AAjBrB,UAAM7jC,IAAQC,GAWR4D,IAAOC,GAIP,EAAE,GAAA5D,MAAMC,MAIRoG,IAAc,MAAM;AACnB,MAAA1C,EAAA,aAAa,EAAE,SAASg4B,EAAM,MAAM,IAAI,OAAO77B,EAAM,MAAA,CAAO;AAAA,IAAA,GAG7DwE,IAAOsgC,GAAM9kC,GAAO,MAAM,GAE1B,EAAE,OAAA67B,GAAO,WAAAhB,GAAW,aAAAmJ,GAAa,iBAAAC,MAAoBF,GAAoBv/B,CAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3B7E,UAAA,EAAE,UAAAwgC,MAAaC,MACf,EAAE,aAAA1+B,GAAa,gBAAAk0B,GAAgB,QAAAC,MAAW0I,GAAsB,GAEhE,EAAE,GAAAljC,MAAMC;;;;;;;;;;;;;;;;;;ACJd,UAAM,EAAE,QAAAqS,GAAQ,aAAAkxB,GAAa,eAAAC,GAAe,gBAAA5B,EAAA,IAAmBqB,MAEzDoC,IAAoB,MAAM;AAClB,MAAA9B;IAAA,GAGR+B,IAAe,MAAM;AACX,MAAA9B,KACC5B;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTjB,UAAM,EAAE,QAAAvvB,GAAQ,gBAAAuvB,GAAgB,aAAA2B,GAAa,eAAAC,EAAA,IAAkBP,MAEzDqC,IAAe,MAAM;AACX,MAAA9B,KACC5B;IAAA,GAGXyD,IAAoB,MAAM;AAClB,MAAA9B;IAAA;;;;;;;;;;;;;;;;;;;;;;;ACFR,UAAA,EAAE,GAAAxjC,MAAMC,MACR,EAAE,gBAAA4hC,GAAgB,gBAAA0B,GAAgB,eAAAE,GAAe,iBAAAR,EAAA,IAAoBC,MAErEC,IAAmB9I,MACnB,EAAE,mBAAAI,GAAmB,cAAAC,EAAa,IAAI0I,GAAYD,CAAgB,GAElEoC,IAAe,MAAM;AACX,MAAA9B,KACC5B;IAAA,GAGXltB,IAAc,MAAM;AACT,MAAA4uB,KACDE;IAAA,GAGV+B,IAAoBrlC,EAAS,MAAM;AACvC,cAAQgjC,EAAiB,WAAW;AAAA,QAClC,KAAKvI,GAAe;AACX,iBAAA6K;AAAAA,QACT;AACS,iBAAAC;AAAAA,MACX;AAAA,IAAA,CACD;AAED,WAAAtgC;AAAA,MACEq1B;AAAA,MACA,CAACx2B,GAAUoB,MAAa;AACtB,QAAIpB,MAAaoB,KACJkgC;MACf;AAAA,MACA,EAAE,WAAW,GAAM;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrCfjG,KAAY,wBAELqG,KAAsB,CAACjI,MAClCD,GAA+BC,GAAQ4B,IAAW,CAAA,GAAI,WAAW,MAAM,GCD5DsG,KAAiB7/B,EAAmC,MAAS,GAC7D8/B,KAA6B9/B,EAAI,EAAK;AAE5C,SAAS+/B,GAAqBpI,GAA6B;AAChE,SAAO,IAAI,QAAQ,CAAChE,GAASiE,MAAW;AACtC,IAAAgI,GAAoBjI,CAAM,EACvB,KAAK,CAACruB,MAA2B;AAChC,MAAAu2B,GAAe,QAAQv2B,GACnBA,EAAI,MAAM,SAASkH,EAAgB,MACrCsvB,GAA2B,QAAQ,KAErCnM,EAAQkM,EAAc;AAAA,IAAA,CACvB,EACA,MAAM,CAACvuB,MAAQ;AACd,MAAAsmB,EAAOtmB,CAAG;AAAA,IAAA,CACX;AAAA,EAAA,CACJ;AACH;AAEO,SAAS0uB,KAAoB;AAC3B,SAAA;AAAA,IACL,gBAAAH;AAAA,IACA,4BAAAC;AAAA,EAAA;AAEJ;AC1BO,SAASG,GAAsCv5B,GAAmC;AACvF,QAAM,EAAE,gBAAAm5B,GAAgB,4BAAAC,EAA2B,IAAIE,GAAkB;AACzE,MAAIF,EAA2B;AAAO,WAAOtkC,GAAUkL,CAAM;AAC7D,QAAMiK,IAAckvB,EAAe;AACnC,MAAIrlC,EAAYmW,CAAW;AAAG,WAAO;AAErC,QAAMuvB,IAAoBvvB,EAAY,kBAAkB,IAAI,CAACwvB,MAAmBA,EAAe,EAAE,GAC3FC,IAAgBzvB,EAAY,cAAc,IAAI,CAAC0vB,MAAsBA,EAAkB,EAAE,GACzFnvB,IAAqC,CAAA;AACpC,SAAAxK,EAAA,QAAQ,CAACjM,MAAU;AACxB,QAAIylC,EAAkB,SAASzlC,EAAM,SAAS,GAAG;AAC/C,MAAAyW,EAAQ,KAAKzW,CAAK;AAClB;AAAA,IACF;AACA,IAAI2lC,EAAc,SAAS3lC,EAAM,OAAO,KACtCyW,EAAQ,KAAKzW,CAAK;AAAA,EACpB,CACD,GACMyW;AACT;AAEO,SAASovB,GAAiC7lC,GAAgC;AAC/E,QAAM,EAAE,gBAAAolC,GAAgB,4BAAAC,EAA2B,IAAIE,GAAkB;AACzE,MAAIF,EAA2B;AAAc,WAAA;AAE7C,QAAMnvB,IAAckvB,EAAe;AACnC,SAAIrlC,EAAYmW,CAAW,IAAU,KAGjC,GADsBA,EAAY,kBAAkB,IAAI,CAACwvB,MAAmBA,EAAe,EAAE,EAC3E,SAAS1lC,EAAM,SAAS,KAIxBkW,EAAY,cAAc,IAAI,CAAC0vB,MAAsBA,EAAkB,EAAE,EAC7E,SAAS5lC,EAAM,OAAO;AAK1C;;;;;;;;;;;;;;;ACjBA,UAAMV,IAAQC,GAmBR4D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAERqmC,IAAcvgC,EAAI,EAAK,GACvB+vB,IAAS31B,EAAS;AAAA,MACtB,MAAM;AACA,eAAAI,EAAYT,EAAM,UAAU,IAAUwmC,EAAY,QAC/CxmC,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAmB;AACrB,QAAAqiC,EAAY,QAAQriC,GACpBN,EAAK,qBAAqBM,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEK,EAAE,eAAAy4B,GAAe,QAAAlC,GAAQ,YAAA7nB,GAAY,eAAA2wB,GAAe,gBAAAC,GAAgB,iBAAA9G,GAAiB,kBAAAiH,MACzFR,MAEI,EAAE,aAAAmC,GAAa,aAAAJ,EAAY,IAAIC,GAAW,GAC1C,EAAE,YAAAv3B,MAAeP,MAEjB2B,IAAS,MAAM;AACnB,UAAIw3B,IAAoBzmC,EAAM;AAI1B,UAHCA,EAAM,yBACWymC,IAAAP,GAAsClmC,EAAM,YAAY,IAE1EymC,EAAkB,WAAW,GAAG;AAClC,QAAA54B,EAAW,2CAA2C;AACtD;AAAA,MACF;AAEA,MAAA+1B;AAAA,QACE6C;AAAA,QACAvM,GAAwBl6B,EAAM,SAAS;AAAA,QACjCA,EAAM,aAAZ,KAAwBA,EAAM,aAAaA,EAAM;AAAA,QACjDA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA,GAEOyjC,KACH8B,KACZvP,EAAO,QAAQ;AAAA,IAAA;AAGjB,IAAA1wB;AAAA,MACE0wB;AAAA,MACA,OAAO7xB,GAAUoB,OAAa;AACxB,QAAApB,MAAaoB,MAAY,CAACpB,KACvB8K;MACT;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;AAGpB,UAAMC,IAAU,MAAM;AACpB,MAAA8mB,EAAO,QAAQ;AAAA,IAAA,GAGX1mB,IAAY,MAAM;AACtB,MAAAzL,EAAK,aAAa84B,EAAgBrC,GAAkCt6B,EAAM,UAAU,CAAC,CAAC,GAC9EkP;IAAA,GAGJw3B,IAAsB,CAACC,MAA4B;AACnD,MAAAA,KAAkB9zB,EAAW,gBAAgB,MACjC2wB;IAChB,GAGI,EAAE,UAAAwB,MAAaC,MAEfS,IAAoBrlC,EAAS,MAAM;AACvC,cAAQ2kC,EAAS,OAAO;AAAA,QACtB,KAAKD,GAAoB;AAChB,iBAAA6B;AAAAA,QACT;AAAA,QACA,KAAK7B,GAAoB;AAAA,QACzB,KAAKA,GAAoB;AAChB,iBAAA8B;AAAAA,MACX;AAAA,IAAA,CACD,GAEKC,IAAiBzmC,EAAS,MACvBu8B,EAAc,QAAQ58B,EAAM,YAAY48B,EAAc,QAAQ58B,EAAM,QAC5E;AAEY,WAAAk2B,EAAA;AAAA,MACX,MAAMjnB;AAAA,IAAA,CACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvID;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS83B,GAAQrlC,GAAQslC,GAAgB;AACvC,MAAIC,IAAO,OAAO,KAAKvlC,CAAM;AAC7B,MAAI,OAAO,uBAAuB;AAChC,QAAIwlC,IAAU,OAAO,sBAAsBxlC,CAAM;AACjD,IAAIslC,MACFE,IAAUA,EAAQ,OAAO,SAAUC,GAAK;AACtC,aAAO,OAAO,yBAAyBzlC,GAAQylC,CAAG,EAAE;AAAA,IAC5D,CAAO,IAEHF,EAAK,KAAK,MAAMA,GAAMC,CAAO;AAAA,EAC9B;AACD,SAAOD;AACT;AACA,SAASG,GAAejqB,GAAQ;AAC9B,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,QAAIE,IAAS,UAAU,CAAC,KAAK,OAAO,UAAU,CAAC,IAAI;AACnD,IAAI,IAAI,IACN0pB,GAAQ,OAAO1pB,CAAM,GAAG,EAAI,EAAE,QAAQ,SAAUta,GAAK;AACnDskC,MAAAA,GAAgBlqB,GAAQpa,GAAKsa,EAAOta,CAAG,CAAC;AAAA,IAChD,CAAO,IACQ,OAAO,4BAChB,OAAO,iBAAiBoa,GAAQ,OAAO,0BAA0BE,CAAM,CAAC,IAExE0pB,GAAQ,OAAO1pB,CAAM,CAAC,EAAE,QAAQ,SAAUta,GAAK;AAC7C,aAAO,eAAeoa,GAAQpa,GAAK,OAAO,yBAAyBsa,GAAQta,CAAG,CAAC;AAAA,IACvF,CAAO;AAAA,EAEJ;AACD,SAAOoa;AACT;AACA,SAASmqB,GAAQzxB,GAAK;AACpB;AAEA,SAAI,OAAO,UAAW,cAAc,OAAO,OAAO,YAAa,WAC7DyxB,KAAU,SAAUzxB,GAAK;AACvB,WAAO,OAAOA;AAAA,EACpB,IAEIyxB,KAAU,SAAUzxB,GAAK;AACvB,WAAOA,KAAO,OAAO,UAAW,cAAcA,EAAI,gBAAgB,UAAUA,MAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,EAC/H,GAESyxB,GAAQzxB,CAAG;AACpB;AACA,SAASwxB,GAAgBxxB,GAAK9S,GAAKrC,GAAO;AACxC,SAAIqC,KAAO8S,IACT,OAAO,eAAeA,GAAK9S,GAAK;AAAA,IAC9B,OAAOrC;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EAChB,CAAK,IAEDmV,EAAI9S,CAAG,IAAIrC,GAENmV;AACT;AACA,SAAS0xB,KAAW;AAClB,SAAAA,KAAW,OAAO,UAAU,SAAUpqB,GAAQ;AAC5C,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAIE,IAAS,UAAU,CAAC;AACxB,eAASta,KAAOsa;AACd,QAAI,OAAO,UAAU,eAAe,KAAKA,GAAQta,CAAG,MAClDoa,EAAOpa,CAAG,IAAIsa,EAAOta,CAAG;AAAA,IAG7B;AACD,WAAOoa;AAAA,EACX,GACSoqB,GAAS,MAAM,MAAM,SAAS;AACvC;AACA,SAASC,GAA8BnqB,GAAQoqB,GAAU;AACvD,MAAIpqB,KAAU;AAAM,WAAO;AAC3B,MAAIF,IAAS,CAAA,GACTuqB,IAAa,OAAO,KAAKrqB,CAAM,GAC/Bta,GAAK6D;AACT,OAAKA,IAAI,GAAGA,IAAI8gC,EAAW,QAAQ9gC;AAEjC,IADA7D,IAAM2kC,EAAW9gC,CAAC,GACd,EAAA6gC,EAAS,QAAQ1kC,CAAG,KAAK,OAC7Boa,EAAOpa,CAAG,IAAIsa,EAAOta,CAAG;AAE1B,SAAOoa;AACT;AACA,SAASwqB,GAAyBtqB,GAAQoqB,GAAU;AAClD,MAAIpqB,KAAU;AAAM,WAAO;AAC3B,MAAIF,IAASqqB,GAA8BnqB,GAAQoqB,CAAQ,GACvD1kC,GAAK6D;AACT,MAAI,OAAO,uBAAuB;AAChC,QAAIghC,IAAmB,OAAO,sBAAsBvqB,CAAM;AAC1D,SAAKzW,IAAI,GAAGA,IAAIghC,EAAiB,QAAQhhC;AAEvC,MADA7D,IAAM6kC,EAAiBhhC,CAAC,GACpB,EAAA6gC,EAAS,QAAQ1kC,CAAG,KAAK,MACxB,OAAO,UAAU,qBAAqB,KAAKsa,GAAQta,CAAG,MAC3Doa,EAAOpa,CAAG,IAAIsa,EAAOta,CAAG;AAAA,EAE3B;AACD,SAAOoa;AACT;AA2BA,IAAI0qB,KAAU;AAEd,SAASC,GAAUC,GAAS;AAC1B,MAAI,OAAO,SAAW,OAAe,OAAO;AAC1C,WAAO,CAAC,CAAe,0BAAU,UAAU,MAAMA,CAAO;AAE5D;AACA,IAAIC,KAAaF,GAAU,uDAAuD,GAC9EG,KAAOH,GAAU,OAAO,GACxBI,KAAUJ,GAAU,UAAU,GAC9BK,KAASL,GAAU,SAAS,KAAK,CAACA,GAAU,SAAS,KAAK,CAACA,GAAU,UAAU,GAC/EM,KAAMN,GAAU,iBAAiB,GACjCO,KAAmBP,GAAU,SAAS,KAAKA,GAAU,UAAU,GAE/DQ,KAAc;AAAA,EAChB,SAAS;AAAA,EACT,SAAS;AACX;AACA,SAASC,GAAG/mB,GAAI9M,GAAOwD,GAAI;AACzB,EAAAsJ,EAAG,iBAAiB9M,GAAOwD,GAAI,CAAC8vB,MAAcM,EAAW;AAC3D;AACA,SAASE,GAAIhnB,GAAI9M,GAAOwD,GAAI;AAC1B,EAAAsJ,EAAG,oBAAoB9M,GAAOwD,GAAI,CAAC8vB,MAAcM,EAAW;AAC9D;AACA,SAASG,GAAyBjnB,GAAeoM,GAAU;AACzD,MAAKA,GAEL;AAAA,QADAA,EAAS,CAAC,MAAM,QAAQA,IAAWA,EAAS,UAAU,CAAC,IACnDpM;AACF,UAAI;AACF,YAAIA,EAAG;AACL,iBAAOA,EAAG,QAAQoM,CAAQ;AACrB,YAAIpM,EAAG;AACZ,iBAAOA,EAAG,kBAAkBoM,CAAQ;AAC/B,YAAIpM,EAAG;AACZ,iBAAOA,EAAG,sBAAsBoM,CAAQ;AAAA,MAE3C,QAAW;AACV,eAAO;AAAA,MACR;AAEH,WAAO;AAAA;AACT;AACA,SAAS8a,GAAgBlnB,GAAI;AAC3B,SAAOA,EAAG,QAAQA,MAAO,YAAYA,EAAG,KAAK,WAAWA,EAAG,OAAOA,EAAG;AACvE;AACA,SAASmnB,GAAyBnnB,GAAeoM,GAA0Bgb,GAAKC,GAAY;AAC1F,MAAIrnB,GAAI;AACN,IAAAonB,IAAMA,KAAO;AACb,OAAG;AACD,UAAIhb,KAAY,SAASA,EAAS,CAAC,MAAM,MAAMpM,EAAG,eAAeonB,KAAOH,GAAQjnB,GAAIoM,CAAQ,IAAI6a,GAAQjnB,GAAIoM,CAAQ,MAAMib,KAAcrnB,MAAOonB;AAC7I,eAAOpnB;AAET,UAAIA,MAAOonB;AAAK;AAAA,IAEtB,SAAapnB,IAAKknB,GAAgBlnB,CAAE;AAAA,EACjC;AACD,SAAO;AACT;AACA,IAAIsnB,KAAU;AACd,SAASvwB,GAAYiJ,GAAIpe,GAAM2lC,GAAO;AACpC,MAAIvnB,KAAMpe;AACR,QAAIoe,EAAG;AACL,MAAAA,EAAG,UAAUunB,IAAQ,QAAQ,QAAQ,EAAE3lC,CAAI;AAAA,SACtC;AACL,UAAIqV,KAAa,MAAM+I,EAAG,YAAY,KAAK,QAAQsnB,IAAS,GAAG,EAAE,QAAQ,MAAM1lC,IAAO,KAAK,GAAG;AAC9F,MAAAoe,EAAG,aAAa/I,KAAaswB,IAAQ,MAAM3lC,IAAO,KAAK,QAAQ0lC,IAAS,GAAG;AAAA,IAC5E;AAEL;AACA,SAASE,GAAIxnB,GAAIynB,GAAM9sB,GAAK;AAC1B,MAAI0P,IAAQrK,KAAMA,EAAG;AACrB,MAAIqK,GAAO;AACT,QAAI1P,MAAQ;AACV,aAAI,SAAS,eAAe,SAAS,YAAY,mBAC/CA,IAAM,SAAS,YAAY,iBAAiBqF,GAAI,EAAE,IACzCA,EAAG,iBACZrF,IAAMqF,EAAG,eAEJynB,MAAS,SAAS9sB,IAAMA,EAAI8sB,CAAI;AAEvC,IAAI,EAAEA,KAAQpd,MAAUod,EAAK,QAAQ,QAAQ,MAAM,OACjDA,IAAO,aAAaA,IAEtBpd,EAAMod,CAAI,IAAI9sB,KAAO,OAAOA,KAAQ,WAAW,KAAK;AAAA,EAEvD;AACH;AACA,SAAS+sB,GAAO1nB,GAAI2nB,GAAU;AAC5B,MAAIC,IAAoB;AACxB,MAAI,OAAO5nB,KAAO;AAChB,IAAA4nB,IAAoB5nB;AAAA;AAEpB,OAAG;AACD,UAAI6nB,IAAYL,GAAIxnB,GAAI,WAAW;AACnC,MAAI6nB,KAAaA,MAAc,WAC7BD,IAAoBC,IAAY,MAAMD;AAAA,IAGzC,SAAQ,CAACD,MAAa3nB,IAAKA,EAAG;AAEjC,MAAI8nB,IAAW,OAAO,aAAa,OAAO,mBAAmB,OAAO,aAAa,OAAO;AAExF,SAAOA,KAAY,IAAIA,EAASF,CAAiB;AACnD;AACA,SAASG,GAAKX,GAAKY,GAASC,GAAU;AACpC,MAAIb,GAAK;AACP,QAAIc,IAAOd,EAAI,qBAAqBY,CAAO,GACzC5iC,IAAI,GACJG,IAAI2iC,EAAK;AACX,QAAID;AACF,aAAO7iC,IAAIG,GAAGH;AACZ,QAAA6iC,EAASC,EAAK9iC,CAAC,GAAGA,CAAC;AAGvB,WAAO8iC;AAAA,EACR;AACD,SAAO;AACT;AACA,SAASC,KAA4B;AACnC,MAAIC,IAAmB,SAAS;AAChC,SAAIA,KAGK,SAAS;AAEpB;AAWA,SAASC,GAAQroB,GAAIsoB,GAA2BC,GAA2BC,GAAWpkB,GAAW;AAC/F,MAAI,GAACpE,EAAG,yBAAyBA,MAAO,SACxC;AAAA,QAAIyoB,GAAQtf,GAAKC,GAAMsf,GAAQnf,GAAOof,GAAQC;AAiB9C,QAhBI5oB,MAAO,UAAUA,EAAG,cAAcA,MAAOmoB,QAC3CM,IAASzoB,EAAG,yBACZmJ,IAAMsf,EAAO,KACbrf,IAAOqf,EAAO,MACdC,IAASD,EAAO,QAChBlf,IAAQkf,EAAO,OACfE,IAASF,EAAO,QAChBG,IAAQH,EAAO,UAEftf,IAAM,GACNC,IAAO,GACPsf,IAAS,OAAO,aAChBnf,IAAQ,OAAO,YACfof,IAAS,OAAO,aAChBC,IAAQ,OAAO,cAEZN,KAA6BC,MAA8BvoB,MAAO,WAErEoE,IAAYA,KAAapE,EAAG,YAIxB,CAACwmB;AACH;AACE,YAAIpiB,KAAaA,EAAU,0BAA0BojB,GAAIpjB,GAAW,WAAW,MAAM,UAAUmkB,KAA6Bf,GAAIpjB,GAAW,UAAU,MAAM,WAAW;AACpK,cAAIykB,IAAgBzkB,EAAU;AAG9B,UAAA+E,KAAO0f,EAAc,MAAM,SAASrB,GAAIpjB,GAAW,kBAAkB,CAAC,GACtEgF,KAAQyf,EAAc,OAAO,SAASrB,GAAIpjB,GAAW,mBAAmB,CAAC,GACzEskB,IAASvf,IAAMsf,EAAO,QACtBlf,IAAQH,IAAOqf,EAAO;AACtB;AAAA,QACD;AAAA,aAEMrkB,IAAYA,EAAU;AAGnC,QAAIokB,KAAaxoB,MAAO,QAAQ;AAE9B,UAAI8oB,IAAWpB,GAAOtjB,KAAapE,CAAE,GACnC+oB,IAASD,KAAYA,EAAS,GAC9BE,IAASF,KAAYA,EAAS;AAChC,MAAIA,MACF3f,KAAO6f,GACP5f,KAAQ2f,GACRH,KAASG,GACTJ,KAAUK,GACVN,IAASvf,IAAMwf,GACfpf,IAAQH,IAAOwf;AAAA,IAElB;AACD,WAAO;AAAA,MACL,KAAKzf;AAAA,MACL,MAAMC;AAAA,MACN,QAAQsf;AAAA,MACR,OAAOnf;AAAA,MACP,OAAOqf;AAAA,MACP,QAAQD;AAAA,IACZ;AAAA;AACA;AAMA,SAASM,GAAejpB,GAAI;AAC1B,MAAIkpB,IAAOb,GAAQroB,CAAE,GACjBmpB,IAAc,SAAS3B,GAAIxnB,GAAI,cAAc,CAAC,GAChDopB,IAAa,SAAS5B,GAAIxnB,GAAI,aAAa,CAAC,GAC5CqpB,IAAe,SAAS7B,GAAIxnB,GAAI,eAAe,CAAC,GAChDspB,IAAgB,SAAS9B,GAAIxnB,GAAI,gBAAgB,CAAC;AACpD,SAAAkpB,EAAK,OAAOE,IAAa,SAAS5B,GAAIxnB,GAAI,kBAAkB,CAAC,GAC7DkpB,EAAK,QAAQC,IAAc,SAAS3B,GAAIxnB,GAAI,mBAAmB,CAAC,GAEhEkpB,EAAK,QAAQlpB,EAAG,cAAcmpB,IAAcE,GAC5CH,EAAK,SAASlpB,EAAG,eAAeopB,IAAaE,GAC7CJ,EAAK,SAASA,EAAK,MAAMA,EAAK,QAC9BA,EAAK,QAAQA,EAAK,OAAOA,EAAK,OACvBA;AACT;AASA,SAASK,GAAevpB,GAAIwpB,GAAQC,GAAY;AAK9C,WAJIC,IAASC,GAA2B3pB,GAAI,EAAI,GAC9C4pB,IAAYvB,GAAQroB,CAAE,EAAEwpB,CAAM,GAGzBE,KAAQ;AACb,QAAIG,IAAgBxB,GAAQqB,CAAM,EAAED,CAAU,GAC5CK,IAAU;AAMZ,QALIL,MAAe,SAASA,MAAe,SACzCK,IAAUF,KAAaC,IAEvBC,IAAUF,KAAaC,GAErB,CAACC;AAAS,aAAOJ;AACrB,QAAIA,MAAWvB,GAAyB;AAAI;AAC5C,IAAAuB,IAASC,GAA2BD,GAAQ,EAAK;AAAA,EAClD;AACD,SAAO;AACT;AAUA,SAASK,GAAS/pB,GAAIgqB,GAAUllC,GAASmlC,GAAe;AAItD,WAHIC,IAAe,GACjB9kC,IAAI,GACJ+kC,IAAWnqB,EAAG,UACT5a,IAAI+kC,EAAS,UAAQ;AAC1B,QAAIA,EAAS/kC,CAAC,EAAE,MAAM,YAAY,UAAU+kC,EAAS/kC,CAAC,MAAMglC,GAAS,UAAUH,KAAiBE,EAAS/kC,CAAC,MAAMglC,GAAS,YAAYjD,GAAQgD,EAAS/kC,CAAC,GAAGN,EAAQ,WAAWkb,GAAI,EAAK,GAAG;AACvL,UAAIkqB,MAAiBF;AACnB,eAAOG,EAAS/kC,CAAC;AAEnB,MAAA8kC;AAAA,IACD;AACD,IAAA9kC;AAAA,EACD;AACD,SAAO;AACT;AAQA,SAASilC,GAAUrqB,GAAIoM,GAAU;AAE/B,WADIke,IAAOtqB,EAAG,kBACPsqB,MAASA,MAASF,GAAS,SAAS5C,GAAI8C,GAAM,SAAS,MAAM,UAAUle,KAAY,CAAC6a,GAAQqD,GAAMle,CAAQ;AAC/G,IAAAke,IAAOA,EAAK;AAEd,SAAOA,KAAQ;AACjB;AASA,SAASzpC,GAAMmf,GAAIoM,GAAU;AAC3B,MAAIvrB,IAAQ;AACZ,MAAI,CAACmf,KAAM,CAACA,EAAG;AACb,WAAO;AAIT,SAAOA,IAAKA,EAAG;AACb,IAAIA,EAAG,SAAS,YAAW,MAAO,cAAcA,MAAOoqB,GAAS,UAAU,CAAChe,KAAY6a,GAAQjnB,GAAIoM,CAAQ,MACzGvrB;AAGJ,SAAOA;AACT;AAQA,SAAS0pC,GAAwBvqB,GAAI;AACnC,MAAIwqB,IAAa,GACfC,IAAY,GACZC,IAAcvC,GAAyB;AACzC,MAAInoB;AACF,OAAG;AACD,UAAI8oB,IAAWpB,GAAO1nB,CAAE,GACtB+oB,IAASD,EAAS,GAClBE,IAASF,EAAS;AACpB,MAAA0B,KAAcxqB,EAAG,aAAa+oB,GAC9B0B,KAAazqB,EAAG,YAAYgpB;AAAA,IAC7B,SAAQhpB,MAAO0qB,MAAgB1qB,IAAKA,EAAG;AAE1C,SAAO,CAACwqB,GAAYC,CAAS;AAC/B;AAQA,SAASE,GAAchxB,GAAKtF,GAAK;AAC/B,WAASjP,KAAKuU;AACZ,QAAKA,EAAI,eAAevU,CAAC;AACzB,eAAS7D,KAAO8S;AACd,YAAIA,EAAI,eAAe9S,CAAG,KAAK8S,EAAI9S,CAAG,MAAMoY,EAAIvU,CAAC,EAAE7D,CAAG;AAAG,iBAAO,OAAO6D,CAAC;AAAA;AAG5E,SAAO;AACT;AACA,SAASukC,GAA2B3pB,GAAI4qB,GAAa;AAEnD,MAAI,CAAC5qB,KAAM,CAACA,EAAG;AAAuB,WAAOmoB,GAAyB;AACtE,MAAInxB,IAAOgJ,GACP6qB,IAAU;AACd;AAEE,QAAI7zB,EAAK,cAAcA,EAAK,eAAeA,EAAK,eAAeA,EAAK,cAAc;AAChF,UAAI8zB,IAAUtD,GAAIxwB,CAAI;AACtB,UAAIA,EAAK,cAAcA,EAAK,gBAAgB8zB,EAAQ,aAAa,UAAUA,EAAQ,aAAa,aAAa9zB,EAAK,eAAeA,EAAK,iBAAiB8zB,EAAQ,aAAa,UAAUA,EAAQ,aAAa,WAAW;AACpN,YAAI,CAAC9zB,EAAK,yBAAyBA,MAAS,SAAS;AAAM,iBAAOmxB;AAClE,YAAI0C,KAAWD;AAAa,iBAAO5zB;AACnC,QAAA6zB,IAAU;AAAA,MACX;AAAA,IACF;AAAA,SAEM7zB,IAAOA,EAAK;AACrB,SAAOmxB,GAAyB;AAClC;AACA,SAAS4C,GAAOC,GAAKC,GAAK;AACxB,MAAID,KAAOC;AACT,aAAS1pC,KAAO0pC;AACd,MAAIA,EAAI,eAAe1pC,CAAG,MACxBypC,EAAIzpC,CAAG,IAAI0pC,EAAI1pC,CAAG;AAIxB,SAAOypC;AACT;AACA,SAASE,GAAYC,GAAOC,GAAO;AACjC,SAAO,KAAK,MAAMD,EAAM,GAAG,MAAM,KAAK,MAAMC,EAAM,GAAG,KAAK,KAAK,MAAMD,EAAM,IAAI,MAAM,KAAK,MAAMC,EAAM,IAAI,KAAK,KAAK,MAAMD,EAAM,MAAM,MAAM,KAAK,MAAMC,EAAM,MAAM,KAAK,KAAK,MAAMD,EAAM,KAAK,MAAM,KAAK,MAAMC,EAAM,KAAK;AAC5N;AACA,IAAIC;AACJ,SAASC,GAASh6B,GAAUi6B,GAAI;AAC9B,SAAO,WAAY;AACjB,QAAI,CAACF,IAAkB;AACrB,UAAIx0B,IAAO,WACTD,IAAQ;AACV,MAAIC,EAAK,WAAW,IAClBvF,EAAS,KAAKsF,GAAOC,EAAK,CAAC,CAAC,IAE5BvF,EAAS,MAAMsF,GAAOC,CAAI,GAE5Bw0B,KAAmB,WAAW,WAAY;AACxC,QAAAA,KAAmB;AAAA,MACpB,GAAEE,CAAE;AAAA,IACN;AAAA,EACL;AACA;AACA,SAASC,KAAiB;AACxB,eAAaH,EAAgB,GAC7BA,KAAmB;AACrB;AACA,SAASI,GAASzrB,GAAIpgB,GAAG8H,GAAG;AAC1B,EAAAsY,EAAG,cAAcpgB,GACjBogB,EAAG,aAAatY;AAClB;AACA,SAASgkC,GAAM1rB,GAAI;AACjB,MAAI2rB,IAAU,OAAO,SACjB5kC,IAAI,OAAO,UAAU,OAAO;AAChC,SAAI4kC,KAAWA,EAAQ,MACdA,EAAQ,IAAI3rB,CAAE,EAAE,UAAU,EAAI,IAC5BjZ,IACFA,EAAEiZ,CAAE,EAAE,MAAM,EAAI,EAAE,CAAC,IAEnBA,EAAG,UAAU,EAAI;AAE5B;AAeA,IAAI4rB,KAAU,cAAa,oBAAI,KAAM,GAAC,QAAO;AAE7C,SAASC,KAAwB;AAC/B,MAAIC,IAAkB,CAAE,GACtBC;AACF,SAAO;AAAA,IACL,uBAAuB,WAAiC;AAEtD,UADAD,IAAkB,CAAA,GACd,EAAC,KAAK,QAAQ,WAClB;AAAA,YAAI3B,IAAW,CAAA,EAAG,MAAM,KAAK,KAAK,GAAG,QAAQ;AAC7C,QAAAA,EAAS,QAAQ,SAAUxhB,GAAO;AAChC,cAAI,EAAA6e,GAAI7e,GAAO,SAAS,MAAM,UAAUA,MAAUyhB,GAAS,QAC3D;AAAA,YAAA0B,EAAgB,KAAK;AAAA,cACnB,QAAQnjB;AAAA,cACR,MAAM0f,GAAQ1f,CAAK;AAAA,YAC7B,CAAS;AACD,gBAAIqjB,IAAWpG,GAAe,CAAA,GAAIkG,EAAgBA,EAAgB,SAAS,CAAC,EAAE,IAAI;AAGlF,gBAAInjB,EAAM,uBAAuB;AAC/B,kBAAIsjB,IAAcvE,GAAO/e,GAAO,EAAI;AACpC,cAAIsjB,MACFD,EAAS,OAAOC,EAAY,GAC5BD,EAAS,QAAQC,EAAY;AAAA,YAEhC;AACD,YAAAtjB,EAAM,WAAWqjB;AAAA;AAAA,QACzB,CAAO;AAAA;AAAA,IACF;AAAA,IACD,mBAAmB,SAA2BzE,GAAO;AACnD,MAAAuE,EAAgB,KAAKvE,CAAK;AAAA,IAC3B;AAAA,IACD,sBAAsB,SAA8B5rB,GAAQ;AAC1D,MAAAmwB,EAAgB,OAAOnB,GAAcmB,GAAiB;AAAA,QACpD,QAAQnwB;AAAA,MAChB,CAAO,GAAG,CAAC;AAAA,IACN;AAAA,IACD,YAAY,SAAoBrK,GAAU;AACxC,UAAIsF,IAAQ;AACZ,UAAI,CAAC,KAAK,QAAQ,WAAW;AAC3B,qBAAam1B,CAAmB,GAC5B,OAAOz6B,KAAa,cAAYA;AACpC;AAAA,MACD;AACD,UAAI46B,IAAY,IACdC,IAAgB;AAClB,MAAAL,EAAgB,QAAQ,SAAUvE,GAAO;AACvC,YAAI6E,IAAO,GACTzwB,IAAS4rB,EAAM,QACfyE,IAAWrwB,EAAO,UAClB0wB,IAAShE,GAAQ1sB,CAAM,GACvB2wB,IAAe3wB,EAAO,cACtB4wB,IAAa5wB,EAAO,YACpB6wB,IAAgBjF,EAAM,MACtBkF,IAAe/E,GAAO/rB,GAAQ,EAAI;AACpC,QAAI8wB,MAEFJ,EAAO,OAAOI,EAAa,GAC3BJ,EAAO,QAAQI,EAAa,IAE9B9wB,EAAO,SAAS0wB,GACZ1wB,EAAO,yBAELuvB,GAAYoB,GAAcD,CAAM,KAAK,CAACnB,GAAYc,GAAUK,CAAM;AAAA,SAErEG,EAAc,MAAMH,EAAO,QAAQG,EAAc,OAAOH,EAAO,WAAWL,EAAS,MAAMK,EAAO,QAAQL,EAAS,OAAOK,EAAO,UAE9HD,IAAOM,GAAkBF,GAAeF,GAAcC,GAAY31B,EAAM,OAAO,IAK9Es0B,GAAYmB,GAAQL,CAAQ,MAC/BrwB,EAAO,eAAeqwB,GACtBrwB,EAAO,aAAa0wB,GACfD,MACHA,IAAOx1B,EAAM,QAAQ,YAEvBA,EAAM,QAAQ+E,GAAQ6wB,GAAeH,GAAQD,CAAI,IAE/CA,MACFF,IAAY,IACZC,IAAgB,KAAK,IAAIA,GAAeC,CAAI,GAC5C,aAAazwB,EAAO,mBAAmB,GACvCA,EAAO,sBAAsB,WAAW,WAAY;AAClD,UAAAA,EAAO,gBAAgB,GACvBA,EAAO,eAAe,MACtBA,EAAO,WAAW,MAClBA,EAAO,aAAa,MACpBA,EAAO,wBAAwB;AAAA,QAChC,GAAEywB,CAAI,GACPzwB,EAAO,wBAAwBywB;AAAA,MAEzC,CAAO,GACD,aAAaL,CAAmB,GAC3BG,IAGHH,IAAsB,WAAW,WAAY;AAC3C,QAAI,OAAOz6B,KAAa,cAAYA;MACrC,GAAE66B,CAAa,IAJZ,OAAO76B,KAAa,cAAYA,KAMtCw6B,IAAkB,CAAA;AAAA,IACnB;AAAA,IACD,SAAS,SAAiBnwB,GAAQgxB,GAAaN,GAAQrgC,GAAU;AAC/D,UAAIA,GAAU;AACZ,QAAAw7B,GAAI7rB,GAAQ,cAAc,EAAE,GAC5B6rB,GAAI7rB,GAAQ,aAAa,EAAE;AAC3B,YAAImtB,IAAWpB,GAAO,KAAK,EAAE,GAC3BqB,IAASD,KAAYA,EAAS,GAC9BE,IAASF,KAAYA,EAAS,GAC9B8D,KAAcD,EAAY,OAAON,EAAO,SAAStD,KAAU,IAC3D8D,KAAcF,EAAY,MAAMN,EAAO,QAAQrD,KAAU;AAC3D,QAAArtB,EAAO,aAAa,CAAC,CAACixB,GACtBjxB,EAAO,aAAa,CAAC,CAACkxB,GACtBrF,GAAI7rB,GAAQ,aAAa,iBAAiBixB,IAAa,QAAQC,IAAa,OAAO,GACnF,KAAK,kBAAkBC,GAAQnxB,CAAM,GAErC6rB,GAAI7rB,GAAQ,cAAc,eAAe3P,IAAW,QAAQ,KAAK,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,GAAG,GACjHw7B,GAAI7rB,GAAQ,aAAa,oBAAoB,GAC7C,OAAOA,EAAO,YAAa,YAAY,aAAaA,EAAO,QAAQ,GACnEA,EAAO,WAAW,WAAW,WAAY;AACvC,UAAA6rB,GAAI7rB,GAAQ,cAAc,EAAE,GAC5B6rB,GAAI7rB,GAAQ,aAAa,EAAE,GAC3BA,EAAO,WAAW,IAClBA,EAAO,aAAa,IACpBA,EAAO,aAAa;AAAA,QACrB,GAAE3P,CAAQ;AAAA,MACZ;AAAA,IACF;AAAA,EACL;AACA;AACA,SAAS8gC,GAAQnxB,GAAQ;AACvB,SAAOA,EAAO;AAChB;AACA,SAAS+wB,GAAkBF,GAAeR,GAAUK,GAAQvnC,GAAS;AACnE,SAAO,KAAK,KAAK,KAAK,IAAIknC,EAAS,MAAMQ,EAAc,KAAK,CAAC,IAAI,KAAK,IAAIR,EAAS,OAAOQ,EAAc,MAAM,CAAC,CAAC,IAAI,KAAK,KAAK,KAAK,IAAIR,EAAS,MAAMK,EAAO,KAAK,CAAC,IAAI,KAAK,IAAIL,EAAS,OAAOK,EAAO,MAAM,CAAC,CAAC,IAAIvnC,EAAQ;AAC7N;AAEA,IAAIioC,KAAU,CAAA,GACVj3B,KAAW;AAAA,EACb,qBAAqB;AACvB,GACIk3B,KAAgB;AAAA,EAClB,OAAO,SAAeC,GAAQ;AAE5B,aAASniB,KAAUhV;AACjB,MAAIA,GAAS,eAAegV,CAAM,KAAK,EAAEA,KAAUmiB,OACjDA,EAAOniB,CAAM,IAAIhV,GAASgV,CAAM;AAGpC,IAAAiiB,GAAQ,QAAQ,SAAU7kC,GAAG;AAC3B,UAAIA,EAAE,eAAe+kC,EAAO;AAC1B,cAAM,iCAAiC,OAAOA,EAAO,YAAY,iBAAiB;AAAA,IAE1F,CAAK,GACDF,GAAQ,KAAKE,CAAM;AAAA,EACpB;AAAA,EACD,aAAa,SAAqBC,GAAWC,GAAUjtB,GAAK;AAC1D,QAAItJ,IAAQ;AACZ,SAAK,gBAAgB,IACrBsJ,EAAI,SAAS,WAAY;AACvB,MAAAtJ,EAAM,gBAAgB;AAAA,IAC5B;AACI,QAAIw2B,IAAkBF,IAAY;AAClC,IAAAH,GAAQ,QAAQ,SAAUE,GAAQ;AAChC,MAAKE,EAASF,EAAO,UAAU,MAE3BE,EAASF,EAAO,UAAU,EAAEG,CAAe,KAC7CD,EAASF,EAAO,UAAU,EAAEG,CAAe,EAAExH,GAAe;AAAA,QAC1D,UAAUuH;AAAA,MACpB,GAAWjtB,CAAG,CAAC,GAKLitB,EAAS,QAAQF,EAAO,UAAU,KAAKE,EAASF,EAAO,UAAU,EAAEC,CAAS,KAC9EC,EAASF,EAAO,UAAU,EAAEC,CAAS,EAAEtH,GAAe;AAAA,QACpD,UAAUuH;AAAA,MACpB,GAAWjtB,CAAG,CAAC;AAAA,IAEf,CAAK;AAAA,EACF;AAAA,EACD,mBAAmB,SAA2BitB,GAAUntB,GAAIlK,GAAUhR,GAAS;AAC7E,IAAAioC,GAAQ,QAAQ,SAAUE,GAAQ;AAChC,UAAII,IAAaJ,EAAO;AACxB,UAAI,GAACE,EAAS,QAAQE,CAAU,KAAK,CAACJ,EAAO,sBAC7C;AAAA,YAAI3d,IAAc,IAAI2d,EAAOE,GAAUntB,GAAImtB,EAAS,OAAO;AAC3D,QAAA7d,EAAY,WAAW6d,GACvB7d,EAAY,UAAU6d,EAAS,SAC/BA,EAASE,CAAU,IAAI/d,GAGvByW,GAASjwB,GAAUwZ,EAAY,QAAQ;AAAA;AAAA,IAC7C,CAAK;AACD,aAASxE,KAAUqiB,EAAS;AAC1B,UAAKA,EAAS,QAAQ,eAAeriB,CAAM,GAC3C;AAAA,YAAIwiB,IAAW,KAAK,aAAaH,GAAUriB,GAAQqiB,EAAS,QAAQriB,CAAM,CAAC;AAC3E,QAAI,OAAOwiB,IAAa,QACtBH,EAAS,QAAQriB,CAAM,IAAIwiB;AAAA;AAAA,EAGhC;AAAA,EACD,oBAAoB,SAA4B1rC,GAAMurC,GAAU;AAC9D,QAAII,IAAkB,CAAA;AACtB,WAAAR,GAAQ,QAAQ,SAAUE,GAAQ;AAChC,MAAI,OAAOA,EAAO,mBAAoB,cACtClH,GAASwH,GAAiBN,EAAO,gBAAgB,KAAKE,EAASF,EAAO,UAAU,GAAGrrC,CAAI,CAAC;AAAA,IAC9F,CAAK,GACM2rC;AAAA,EACR;AAAA,EACD,cAAc,SAAsBJ,GAAUvrC,GAAM1C,GAAO;AACzD,QAAIsuC;AACJ,WAAAT,GAAQ,QAAQ,SAAUE,GAAQ;AAEhC,MAAKE,EAASF,EAAO,UAAU,KAG3BA,EAAO,mBAAmB,OAAOA,EAAO,gBAAgBrrC,CAAI,KAAM,eACpE4rC,IAAgBP,EAAO,gBAAgBrrC,CAAI,EAAE,KAAKurC,EAASF,EAAO,UAAU,GAAG/tC,CAAK;AAAA,IAE5F,CAAK,GACMsuC;AAAA,EACR;AACH;AAEA,SAASC,GAAcC,GAAM;AAC3B,MAAIP,IAAWO,EAAK,UAClBC,IAASD,EAAK,QACd9rC,IAAO8rC,EAAK,MACZE,IAAWF,EAAK,UAChBG,IAAUH,EAAK,SACfI,IAAOJ,EAAK,MACZK,IAASL,EAAK,QACdM,IAAWN,EAAK,UAChBO,IAAWP,EAAK,UAChBQ,IAAoBR,EAAK,mBACzBS,IAAoBT,EAAK,mBACzBU,IAAgBV,EAAK,eACrBW,IAAcX,EAAK,aACnBY,IAAuBZ,EAAK;AAE9B,MADAP,IAAWA,KAAYQ,KAAUA,EAAO/B,EAAO,GAC3C,EAACuB,GACL;AAAA,QAAIjtB,GACFpb,IAAUqoC,EAAS,SACnBoB,IAAS,OAAO3sC,EAAK,OAAO,CAAC,EAAE,YAAW,IAAKA,EAAK,OAAO,CAAC;AAE9D,IAAI,OAAO,eAAe,CAAC4kC,MAAc,CAACC,KACxCvmB,IAAM,IAAI,YAAYte,GAAM;AAAA,MAC1B,SAAS;AAAA,MACT,YAAY;AAAA,IAClB,CAAK,KAEDse,IAAM,SAAS,YAAY,OAAO,GAClCA,EAAI,UAAUte,GAAM,IAAM,EAAI,IAEhCse,EAAI,KAAK4tB,KAAQH,GACjBztB,EAAI,OAAO6tB,KAAUJ,GACrBztB,EAAI,OAAO0tB,KAAYD,GACvBztB,EAAI,QAAQ2tB,GACZ3tB,EAAI,WAAW8tB,GACf9tB,EAAI,WAAW+tB,GACf/tB,EAAI,oBAAoBguB,GACxBhuB,EAAI,oBAAoBiuB,GACxBjuB,EAAI,gBAAgBkuB,GACpBluB,EAAI,WAAWmuB,IAAcA,EAAY,cAAc;AACvD,QAAIG,IAAqB5I,GAAeA,GAAe,IAAI0I,CAAoB,GAAGtB,GAAc,mBAAmBprC,GAAMurC,CAAQ,CAAC;AAClI,aAASriB,KAAU0jB;AACjB,MAAAtuB,EAAI4K,CAAM,IAAI0jB,EAAmB1jB,CAAM;AAEzC,IAAI6iB,KACFA,EAAO,cAAcztB,CAAG,GAEtBpb,EAAQypC,CAAM,KAChBzpC,EAAQypC,CAAM,EAAE,KAAKpB,GAAUjtB,CAAG;AAAA;AAEtC;AAEA,IAAIuuB,KAAY,CAAC,KAAK,GAClBC,KAAc,SAAqBxB,GAAWC,GAAU;AAC1D,MAAIO,IAAO,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAE,GAC/EU,IAAgBV,EAAK,KACrBziC,IAAOk7B,GAAyBuH,GAAMe,EAAS;AACjD,EAAAzB,GAAc,YAAY,KAAK5C,EAAQ,EAAE8C,GAAWC,GAAUvH,GAAe;AAAA,IAC3E,QAAQ+I;AAAA,IACR,UAAUC;AAAA,IACV,SAASC;AAAA,IACT,QAAQlB;AAAA,IACR,QAAQmB;AAAA,IACR,YAAYC;AAAA,IACZ,SAASlB;AAAA,IACT,aAAamB;AAAA,IACb,aAAaC;AAAA,IACb,aAAaZ;AAAA,IACb,gBAAgBjE,GAAS;AAAA,IACzB,eAAegE;AAAA,IACf,UAAUJ;AAAA,IACV,mBAAmBE;AAAA,IACnB,UAAUD;AAAA,IACV,mBAAmBE;AAAA,IACnB,oBAAoBe;AAAA,IACpB,sBAAsBC;AAAA,IACtB,gBAAgB,WAA0B;AACxC,MAAAH,KAAc;AAAA,IACf;AAAA,IACD,eAAe,WAAyB;AACtC,MAAAA,KAAc;AAAA,IACf;AAAA,IACD,uBAAuB,SAA+BptC,GAAM;AAC1D,MAAAwtC,GAAe;AAAA,QACb,UAAUjC;AAAA,QACV,MAAMvrC;AAAA,QACN,eAAewsC;AAAA,MACvB,CAAO;AAAA,IACF;AAAA,EACL,GAAKnjC,CAAI,CAAC;AACV;AACA,SAASmkC,GAAeC,GAAM;AAC5B5B,EAAAA,GAAc7H,GAAe;AAAA,IAC3B,aAAayI;AAAA,IACb,SAASR;AAAA,IACT,UAAUc;AAAA,IACV,QAAQhB;AAAA,IACR,UAAUK;AAAA,IACV,mBAAmBE;AAAA,IACnB,UAAUD;AAAA,IACV,mBAAmBE;AAAA,EACvB,GAAKkB,CAAI,CAAC;AACV;AACA,IAAIV,IACFC,IACAC,IACAlB,IACAmB,IACAC,IACAlB,IACAmB,IACAhB,IACAC,IACAC,IACAC,IACAmB,IACAjB,IACAkB,KAAsB,IACtBC,KAAkB,IAClBC,KAAY,CAAE,GACdC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAd,IACAe,IACAC,IACAC,KAAwB,IACxBC,KAAyB,IACzBC,IAEAC,IACAC,KAAmC,CAAE,GAGrCC,KAAU,IACVC,KAAoB,CAAA,GAGlBC,KAAiB,OAAO,WAAa,KACvCC,KAA0B9J,IAC1B+J,KAAmBlK,MAAQD,KAAa,aAAa,SAErDoK,KAAmBH,MAAkB,CAAC5J,MAAoB,CAACD,MAAO,eAAe,SAAS,cAAc,KAAK,GAC7GiK,KAA0B,WAAY;AACpC,MAAKJ,IAEL;AAAA,QAAIjK;AACF,aAAO;AAET,QAAIxmB,IAAK,SAAS,cAAc,GAAG;AACnC,WAAAA,EAAG,MAAM,UAAU,uBACZA,EAAG,MAAM,kBAAkB;AAAA;AACtC,EAAK,GACH8wB,KAAmB,SAA0B9wB,GAAIlb,GAAS;AACxD,MAAIisC,IAAQvJ,GAAIxnB,CAAE,GAChBgxB,IAAU,SAASD,EAAM,KAAK,IAAI,SAASA,EAAM,WAAW,IAAI,SAASA,EAAM,YAAY,IAAI,SAASA,EAAM,eAAe,IAAI,SAASA,EAAM,gBAAgB,GAChKE,IAASlH,GAAS/pB,GAAI,GAAGlb,CAAO,GAChCosC,IAASnH,GAAS/pB,GAAI,GAAGlb,CAAO,GAChCqsC,IAAgBF,KAAUzJ,GAAIyJ,CAAM,GACpCG,IAAiBF,KAAU1J,GAAI0J,CAAM,GACrCG,IAAkBF,KAAiB,SAASA,EAAc,UAAU,IAAI,SAASA,EAAc,WAAW,IAAI9I,GAAQ4I,CAAM,EAAE,OAC9HK,IAAmBF,KAAkB,SAASA,EAAe,UAAU,IAAI,SAASA,EAAe,WAAW,IAAI/I,GAAQ6I,CAAM,EAAE;AACpI,MAAIH,EAAM,YAAY;AACpB,WAAOA,EAAM,kBAAkB,YAAYA,EAAM,kBAAkB,mBAAmB,aAAa;AAErG,MAAIA,EAAM,YAAY;AACpB,WAAOA,EAAM,oBAAoB,MAAM,GAAG,EAAE,UAAU,IAAI,aAAa;AAEzE,MAAIE,KAAUE,EAAc,SAAYA,EAAc,UAAa,QAAQ;AACzE,QAAII,IAAqBJ,EAAc,UAAa,SAAS,SAAS;AACtE,WAAOD,MAAWE,EAAe,UAAU,UAAUA,EAAe,UAAUG,KAAsB,aAAa;AAAA,EAClH;AACD,SAAON,MAAWE,EAAc,YAAY,WAAWA,EAAc,YAAY,UAAUA,EAAc,YAAY,WAAWA,EAAc,YAAY,UAAUE,KAAmBL,KAAWD,EAAMJ,EAAgB,MAAM,UAAUO,KAAUH,EAAMJ,EAAgB,MAAM,UAAUU,IAAkBC,IAAmBN,KAAW,aAAa;AACtV,GACDQ,KAAqB,SAA4BC,GAAUC,GAAYC,GAAU;AAC/E,MAAIC,IAAcD,IAAWF,EAAS,OAAOA,EAAS,KACpDI,IAAcF,IAAWF,EAAS,QAAQA,EAAS,QACnDK,IAAkBH,IAAWF,EAAS,QAAQA,EAAS,QACvDM,IAAcJ,IAAWD,EAAW,OAAOA,EAAW,KACtDM,IAAcL,IAAWD,EAAW,QAAQA,EAAW,QACvDO,IAAkBN,IAAWD,EAAW,QAAQA,EAAW;AAC7D,SAAOE,MAAgBG,KAAeF,MAAgBG,KAAeJ,IAAcE,IAAkB,MAAMC,IAAcE,IAAkB;AAC5I,GAODC,KAA8B,SAAqCtyC,GAAG8H,GAAG;AACvE,MAAIyqC;AACJ,SAAA1C,GAAU,KAAK,SAAUtC,GAAU;AACjC,QAAIiF,IAAYjF,EAASvB,EAAO,EAAE,QAAQ;AAC1C,QAAI,GAACwG,KAAa/H,GAAU8C,CAAQ,IACpC;AAAA,UAAIjE,IAAOb,GAAQ8E,CAAQ,GACzBkF,IAAqBzyC,KAAKspC,EAAK,OAAOkJ,KAAaxyC,KAAKspC,EAAK,QAAQkJ,GACrEE,IAAmB5qC,KAAKwhC,EAAK,MAAMkJ,KAAa1qC,KAAKwhC,EAAK,SAASkJ;AACrE,UAAIC,KAAsBC;AACxB,eAAOH,IAAMhF;AAAA;AAAA,EAErB,CAAK,GACMgF;AACR,GACDI,KAAgB,SAAuBztC,GAAS;AAC9C,WAAS0tC,EAAKtzC,GAAOuzC,GAAM;AACzB,WAAO,SAAUC,GAAIC,GAAMhE,GAAQzuB,GAAK;AACtC,UAAI0yB,IAAYF,EAAG,QAAQ,MAAM,QAAQC,EAAK,QAAQ,MAAM,QAAQD,EAAG,QAAQ,MAAM,SAASC,EAAK,QAAQ,MAAM;AACjH,UAAIzzC,KAAS,SAASuzC,KAAQG;AAG5B,eAAO;AACF,UAAI1zC,KAAS,QAAQA,MAAU;AACpC,eAAO;AACF,UAAIuzC,KAAQvzC,MAAU;AAC3B,eAAOA;AACF,UAAI,OAAOA,KAAU;AAC1B,eAAOszC,EAAKtzC,EAAMwzC,GAAIC,GAAMhE,GAAQzuB,CAAG,GAAGuyB,CAAI,EAAEC,GAAIC,GAAMhE,GAAQzuB,CAAG;AAErE,UAAI2yB,KAAcJ,IAAOC,IAAKC,GAAM,QAAQ,MAAM;AAClD,aAAOzzC,MAAU,MAAQ,OAAOA,KAAU,YAAYA,MAAU2zC,KAAc3zC,EAAM,QAAQA,EAAM,QAAQ2zC,CAAU,IAAI;AAAA,IAElI;AAAA,EACK;AACD,MAAIC,IAAQ,CAAA,GACRC,IAAgBjuC,EAAQ;AAC5B,GAAI,CAACiuC,KAAiBjN,GAAQiN,CAAa,KAAK,cAC9CA,IAAgB;AAAA,IACd,MAAMA;AAAA,EACd,IAEID,EAAM,OAAOC,EAAc,MAC3BD,EAAM,YAAYN,EAAKO,EAAc,MAAM,EAAI,GAC/CD,EAAM,WAAWN,EAAKO,EAAc,GAAG,GACvCD,EAAM,cAAcC,EAAc,aAClCjuC,EAAQ,QAAQguC;AACjB,GACD5D,KAAsB,WAA+B;AACnD,EAAI,CAAC2B,MAA2BhC,MAC9BrH,GAAIqH,IAAS,WAAW,MAAM;AAEjC,GACDM,KAAwB,WAAiC;AACvD,EAAI,CAAC0B,MAA2BhC,MAC9BrH,GAAIqH,IAAS,WAAW,EAAE;AAEhC;AAGI4B,MAAkB,CAAC5J,MACrB,SAAS,iBAAiB,SAAS,SAAU3mB,GAAK;AAChD,MAAIsvB;AACF,WAAAtvB,EAAI,eAAc,GAClBA,EAAI,mBAAmBA,EAAI,mBAC3BA,EAAI,4BAA4BA,EAAI,4BACpCsvB,KAAkB,IACX;AAEV,GAAE,EAAI;AAET,IAAIwD,KAAgC,SAAuC9yB,GAAK;AAC9E,MAAIyuB,IAAQ;AACV,IAAAzuB,IAAMA,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA;AACrC,QAAI+yB,IAAUf,GAA4BhyB,EAAI,SAASA,EAAI,OAAO;AAClE,QAAI+yB,GAAS;AAEX,UAAI//B,IAAQ,CAAA;AACZ,eAAS9N,KAAK8a;AACZ,QAAIA,EAAI,eAAe9a,CAAC,MACtB8N,EAAM9N,CAAC,IAAI8a,EAAI9a,CAAC;AAGpB,MAAA8N,EAAM,SAASA,EAAM,SAAS+/B,GAC9B//B,EAAM,iBAAiB,QACvBA,EAAM,kBAAkB,QACxB+/B,EAAQrH,EAAO,EAAE,YAAY14B,CAAK;AAAA,IACnC;AAAA,EACF;AACH,GACIggC,KAAwB,SAA+BhzB,GAAK;AAC9D,EAAIyuB,MACFA,GAAO,WAAW/C,EAAO,EAAE,iBAAiB1rB,EAAI,MAAM;AAE1D;AAOA,SAASkqB,GAASpqB,GAAIlb,GAAS;AAC7B,MAAI,EAAEkb,KAAMA,EAAG,YAAYA,EAAG,aAAa;AACzC,UAAM,8CAA8C,OAAO,CAAE,EAAC,SAAS,KAAKA,CAAE,CAAC;AAEjF,OAAK,KAAKA,GACV,KAAK,UAAUlb,IAAUihC,GAAS,CAAE,GAAEjhC,CAAO,GAG7Ckb,EAAG4rB,EAAO,IAAI;AACd,MAAI91B,IAAW;AAAA,IACb,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW,WAAW,KAAKkK,EAAG,QAAQ,IAAI,QAAQ;AAAA,IAClD,eAAe;AAAA;AAAA,IAEf,YAAY;AAAA;AAAA,IAEZ,uBAAuB;AAAA;AAAA,IAEvB,mBAAmB;AAAA,IACnB,WAAW,WAAqB;AAC9B,aAAO8wB,GAAiB9wB,GAAI,KAAK,OAAO;AAAA,IACzC;AAAA,IACD,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS,SAAiBmzB,GAAcxE,GAAQ;AAC9C,MAAAwE,EAAa,QAAQ,QAAQxE,EAAO,WAAW;AAAA,IAChD;AAAA,IACD,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,kBAAkB;AAAA,IAClB,sBAAsB,OAAO,WAAW,SAAS,QAAQ,SAAS,OAAO,kBAAkB,EAAE,KAAK;AAAA,IAClG,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,MACd,GAAG;AAAA,MACH,GAAG;AAAA,IACJ;AAAA,IACD,gBAAgBvE,GAAS,mBAAmB,MAAS,kBAAkB,UAAU,CAACzD;AAAA,IAClF,sBAAsB;AAAA,EAC1B;AACE,EAAAqG,GAAc,kBAAkB,MAAMhtB,GAAIlK,CAAQ;AAGlD,WAASlU,KAAQkU;AACf,MAAElU,KAAQkD,OAAaA,EAAQlD,CAAI,IAAIkU,EAASlU,CAAI;AAEtD,EAAA2wC,GAAcztC,CAAO;AAGrB,WAAS4R,KAAM;AACb,IAAIA,EAAG,OAAO,CAAC,MAAM,OAAO,OAAO,KAAKA,CAAE,KAAM,eAC9C,KAAKA,CAAE,IAAI,KAAKA,CAAE,EAAE,KAAK,IAAI;AAKjC,OAAK,kBAAkB5R,EAAQ,gBAAgB,KAAQ8rC,IACnD,KAAK,oBAEP,KAAK,QAAQ,sBAAsB,IAIjC9rC,EAAQ,iBACViiC,GAAG/mB,GAAI,eAAe,KAAK,WAAW,KAEtC+mB,GAAG/mB,GAAI,aAAa,KAAK,WAAW,GACpC+mB,GAAG/mB,GAAI,cAAc,KAAK,WAAW,IAEnC,KAAK,oBACP+mB,GAAG/mB,GAAI,YAAY,IAAI,GACvB+mB,GAAG/mB,GAAI,aAAa,IAAI,IAE1ByvB,GAAU,KAAK,KAAK,EAAE,GAGtB3qC,EAAQ,SAASA,EAAQ,MAAM,OAAO,KAAK,KAAKA,EAAQ,MAAM,IAAI,IAAI,KAAK,CAAE,CAAA,GAG7EihC,GAAS,MAAM8F,GAAqB,CAAE;AACxC;AACAzB,GAAS;AAA4C;AAAA,EACnD,aAAaA;AAAA,EACb,kBAAkB,SAA0BzuB,GAAQ;AAClD,IAAI,CAAC,KAAK,GAAG,SAASA,CAAM,KAAKA,MAAW,KAAK,OAC/Cq0B,KAAa;AAAA,EAEhB;AAAA,EACD,eAAe,SAAuB9vB,GAAKvE,GAAQ;AACjD,WAAO,OAAO,KAAK,QAAQ,aAAc,aAAa,KAAK,QAAQ,UAAU,KAAK,MAAMuE,GAAKvE,GAAQgzB,EAAM,IAAI,KAAK,QAAQ;AAAA,EAC7H;AAAA,EACD,aAAa,SAA6CzuB,GAAK;AAC7D,QAAKA,EAAI,YACT;AAAA,UAAItJ,IAAQ,MACVoJ,IAAK,KAAK,IACVlb,IAAU,KAAK,SACfsuC,IAAkBtuC,EAAQ,iBAC1B6iB,IAAOzH,EAAI,MACXmzB,IAAQnzB,EAAI,WAAWA,EAAI,QAAQ,CAAC,KAAKA,EAAI,eAAeA,EAAI,gBAAgB,WAAWA,GAC3FvE,KAAU03B,KAASnzB,GAAK,QACxBozB,IAAiBpzB,EAAI,OAAO,eAAeA,EAAI,QAAQA,EAAI,KAAK,CAAC,KAAKA,EAAI,gBAAgBA,EAAI,aAAY,EAAG,CAAC,MAAMvE,GACpH3K,IAASlM,EAAQ;AAInB,UAHAyuC,GAAuBvzB,CAAE,GAGrB,CAAA2uB,MAGA,0BAAwB,KAAKhnB,CAAI,KAAKzH,EAAI,WAAW,KAAKpb,EAAQ,aAKlE,CAAAwuC,EAAe,qBAKf,GAAC,KAAK,mBAAmB3M,MAAUhrB,KAAUA,EAAO,QAAQ,YAAa,MAAK,cAGlFA,IAASwrB,GAAQxrB,GAAQ7W,EAAQ,WAAWkb,GAAI,EAAK,GACjD,EAAArE,KAAUA,EAAO,aAGjBozB,OAAepzB,IAUnB;AAAA,YAJAqyB,KAAWntC,GAAM8a,CAAM,GACvBuyB,KAAoBrtC,GAAM8a,GAAQ7W,EAAQ,SAAS,GAG/C,OAAOkM,KAAW;AACpB,cAAIA,EAAO,KAAK,MAAMkP,GAAKvE,GAAQ,IAAI,GAAG;AACxC,YAAAyzB,GAAe;AAAA,cACb,UAAUx4B;AAAA,cACV,QAAQ08B;AAAA,cACR,MAAM;AAAA,cACN,UAAU33B;AAAA,cACV,MAAMqE;AAAA,cACN,QAAQA;AAAA,YAClB,CAAS,GACD0uB,GAAY,UAAU93B,GAAO;AAAA,cAC3B,KAAKsJ;AAAA,YACf,CAAS,GACDkzB,KAAmBlzB,EAAI,cAAcA,EAAI,eAAc;AACvD;AAAA,UACD;AAAA,mBACQlP,MACTA,IAASA,EAAO,MAAM,GAAG,EAAE,KAAK,SAAUwiC,GAAU;AAElD,cADAA,IAAWrM,GAAQmM,GAAgBE,EAAS,QAAQxzB,GAAI,EAAK,GACzDwzB;AACF,mBAAApE,GAAe;AAAA,cACb,UAAUx4B;AAAA,cACV,QAAQ48B;AAAA,cACR,MAAM;AAAA,cACN,UAAU73B;AAAA,cACV,QAAQqE;AAAA,cACR,MAAMA;AAAA,YAClB,CAAW,GACD0uB,GAAY,UAAU93B,GAAO;AAAA,cAC3B,KAAKsJ;AAAA,YACjB,CAAW,GACM;AAAA,QAEjB,CAAO,GACGlP,IAAQ;AACV,UAAAoiC,KAAmBlzB,EAAI,cAAcA,EAAI,eAAc;AACvD;AAAA,QACD;AAEH,QAAIpb,EAAQ,UAAU,CAACqiC,GAAQmM,GAAgBxuC,EAAQ,QAAQkb,GAAI,EAAK,KAKxE,KAAK,kBAAkBE,GAAKmzB,GAAO13B,CAAM;AAAA;AAAA;AAAA,EAC1C;AAAA,EACD,mBAAmB,SAAwCuE,GAAiBmzB,GAAyB13B,GAAQ;AAC3G,QAAI/E,IAAQ,MACVoJ,IAAKpJ,EAAM,IACX9R,IAAU8R,EAAM,SAChB68B,IAAgBzzB,EAAG,eACnB0zB;AACF,QAAI/3B,KAAU,CAACgzB,MAAUhzB,EAAO,eAAeqE,GAAI;AACjD,UAAIyxB,IAAWpJ,GAAQ1sB,CAAM;AAoE7B,UAnEAgyB,KAAS3tB,GACT2uB,KAAShzB,GACTizB,KAAWD,GAAO,YAClBG,KAASH,GAAO,aAChBI,KAAapzB,GACb2zB,KAAcxqC,EAAQ,OACtBslC,GAAS,UAAUuE,IACnBe,KAAS;AAAA,QACP,QAAQf;AAAA,QACR,UAAU0E,KAASnzB,GAAK;AAAA,QACxB,UAAUmzB,KAASnzB,GAAK;AAAA,MAChC,GACM4vB,KAAkBJ,GAAO,UAAU+B,EAAS,MAC5C1B,KAAiBL,GAAO,UAAU+B,EAAS,KAC3C,KAAK,UAAU4B,KAASnzB,GAAK,SAC7B,KAAK,UAAUmzB,KAASnzB,GAAK,SAC7ByuB,GAAO,MAAM,aAAa,IAAI,OAC9B+E,IAAc,WAAuB;AAInC,YAHAhF,GAAY,cAAc93B,GAAO;AAAA,UAC/B,KAAKsJ;AAAA,QACf,CAAS,GACGkqB,GAAS,eAAe;AAC1B,UAAAxzB,EAAM,QAAO;AACb;AAAA,QACD;AAGD,QAAAA,EAAM,0BAAyB,GAC3B,CAAC8vB,MAAW9vB,EAAM,oBACpB+3B,GAAO,YAAY,KAIrB/3B,EAAM,kBAAkBsJ,GAAKmzB,CAAK,GAGlCjE,GAAe;AAAA,UACb,UAAUx4B;AAAA,UACV,MAAM;AAAA,UACN,eAAesJ;AAAA,QACzB,CAAS,GAGDnJ,GAAY43B,IAAQ7pC,EAAQ,aAAa,EAAI;AAAA,MACrD,GAGMA,EAAQ,OAAO,MAAM,GAAG,EAAE,QAAQ,SAAU0uC,GAAU;AACpD,QAAAzL,GAAK4G,IAAQ6E,EAAS,KAAM,GAAEG,EAAiB;AAAA,MACvD,CAAO,GACD5M,GAAG0M,GAAe,YAAYT,EAA6B,GAC3DjM,GAAG0M,GAAe,aAAaT,EAA6B,GAC5DjM,GAAG0M,GAAe,aAAaT,EAA6B,GAC5DjM,GAAG0M,GAAe,WAAW78B,EAAM,OAAO,GAC1CmwB,GAAG0M,GAAe,YAAY78B,EAAM,OAAO,GAC3CmwB,GAAG0M,GAAe,eAAe78B,EAAM,OAAO,GAG1C8vB,MAAW,KAAK,oBAClB,KAAK,QAAQ,sBAAsB,GACnCiI,GAAO,YAAY,KAErBD,GAAY,cAAc,MAAM;AAAA,QAC9B,KAAKxuB;AAAA,MACb,CAAO,GAGGpb,EAAQ,UAAU,CAACA,EAAQ,oBAAoBuuC,OAAW,CAAC,KAAK,mBAAmB,EAAE5M,MAAQD,MAAc;AAC7G,YAAI4D,GAAS,eAAe;AAC1B,eAAK,QAAO;AACZ;AAAA,QACD;AAID,QAAArD,GAAG0M,GAAe,WAAW78B,EAAM,mBAAmB,GACtDmwB,GAAG0M,GAAe,YAAY78B,EAAM,mBAAmB,GACvDmwB,GAAG0M,GAAe,eAAe78B,EAAM,mBAAmB,GAC1DmwB,GAAG0M,GAAe,aAAa78B,EAAM,4BAA4B,GACjEmwB,GAAG0M,GAAe,aAAa78B,EAAM,4BAA4B,GACjE9R,EAAQ,kBAAkBiiC,GAAG0M,GAAe,eAAe78B,EAAM,4BAA4B,GAC7FA,EAAM,kBAAkB,WAAW88B,GAAa5uC,EAAQ,KAAK;AAAA,MACrE;AACQ,QAAA4uC;IAEH;AAAA,EACF;AAAA,EACD,8BAA8B,SAAsEvuC,GAAG;AACrG,QAAIkuC,IAAQluC,EAAE,UAAUA,EAAE,QAAQ,CAAC,IAAIA;AACvC,IAAI,KAAK,IAAI,KAAK,IAAIkuC,EAAM,UAAU,KAAK,MAAM,GAAG,KAAK,IAAIA,EAAM,UAAU,KAAK,MAAM,CAAC,KAAK,KAAK,MAAM,KAAK,QAAQ,uBAAuB,KAAK,mBAAmB,OAAO,oBAAoB,EAAE,KAChM,KAAK,oBAAmB;AAAA,EAE3B;AAAA,EACD,qBAAqB,WAA+B;AAClD,IAAA1E,MAAUgF,GAAkBhF,EAAM,GAClC,aAAa,KAAK,eAAe,GACjC,KAAK,0BAAyB;AAAA,EAC/B;AAAA,EACD,2BAA2B,WAAqC;AAC9D,QAAI8E,IAAgB,KAAK,GAAG;AAC5B,IAAAzM,GAAIyM,GAAe,WAAW,KAAK,mBAAmB,GACtDzM,GAAIyM,GAAe,YAAY,KAAK,mBAAmB,GACvDzM,GAAIyM,GAAe,eAAe,KAAK,mBAAmB,GAC1DzM,GAAIyM,GAAe,aAAa,KAAK,4BAA4B,GACjEzM,GAAIyM,GAAe,aAAa,KAAK,4BAA4B,GACjEzM,GAAIyM,GAAe,eAAe,KAAK,4BAA4B;AAAA,EACpE;AAAA,EACD,mBAAmB,SAAwCvzB,GAAiBmzB,GAAO;AACjF,IAAAA,IAAQA,KAASnzB,EAAI,eAAe,WAAWA,GAC3C,CAAC,KAAK,mBAAmBmzB,IACvB,KAAK,QAAQ,iBACftM,GAAG,UAAU,eAAe,KAAK,YAAY,IACpCsM,IACTtM,GAAG,UAAU,aAAa,KAAK,YAAY,IAE3CA,GAAG,UAAU,aAAa,KAAK,YAAY,KAG7CA,GAAG4H,IAAQ,WAAW,IAAI,GAC1B5H,GAAG4G,IAAQ,aAAa,KAAK,YAAY;AAE3C,QAAI;AACF,MAAI,SAAS,YAEXiG,GAAU,WAAY;AACpB,iBAAS,UAAU;MAC7B,CAAS,IAED,OAAO,eAAe;IAE9B,QAAkB;AAAA,IAAE;AAAA,EACjB;AAAA,EACD,cAAc,SAAsBC,GAAU3zB,GAAK;AAEjD,QADAqvB,KAAsB,IAClB5B,MAAUgB,IAAQ;AACpB,MAAAD,GAAY,eAAe,MAAM;AAAA,QAC/B,KAAKxuB;AAAA,MACb,CAAO,GACG,KAAK,mBACP6mB,GAAG,UAAU,YAAYmM,EAAqB;AAEhD,UAAIpuC,IAAU,KAAK;AAGnB,OAAC+uC,KAAY98B,GAAY43B,IAAQ7pC,EAAQ,WAAW,EAAK,GACzDiS,GAAY43B,IAAQ7pC,EAAQ,YAAY,EAAI,GAC5CslC,GAAS,SAAS,MAClByJ,KAAY,KAAK,gBAGjBzE,GAAe;AAAA,QACb,UAAU;AAAA,QACV,MAAM;AAAA,QACN,eAAelvB;AAAA,MACvB,CAAO;AAAA,IACP;AACM,WAAK,SAAQ;AAAA,EAEhB;AAAA,EACD,kBAAkB,WAA4B;AAC5C,QAAIyvB,IAAU;AACZ,WAAK,SAASA,GAAS,SACvB,KAAK,SAASA,GAAS,SACvBT;AAGA,eAFIvzB,IAAS,SAAS,iBAAiBg0B,GAAS,SAASA,GAAS,OAAO,GACrEjG,IAAS/tB,GACNA,KAAUA,EAAO,eACtBA,IAASA,EAAO,WAAW,iBAAiBg0B,GAAS,SAASA,GAAS,OAAO,GAC1Eh0B,MAAW+tB;AACf,QAAAA,IAAS/tB;AAGX,UADAgzB,GAAO,WAAW/C,EAAO,EAAE,iBAAiBjwB,CAAM,GAC9C+tB;AACF,WAAG;AACD,cAAIA,EAAOkC,EAAO,GAAG;AACnB,gBAAIkI,IAAW;AAOf,gBANAA,IAAWpK,EAAOkC,EAAO,EAAE,YAAY;AAAA,cACrC,SAAS+D,GAAS;AAAA,cAClB,SAASA,GAAS;AAAA,cAClB,QAAQh0B;AAAA,cACR,QAAQ+tB;AAAA,YACtB,CAAa,GACGoK,KAAY,CAAC,KAAK,QAAQ;AAC5B;AAAA,UAEH;AACD,UAAAn4B,IAAS+tB;AAAA,QACV,SAC6BA,IAASA,EAAO;AAEhD,MAAAyF;IACD;AAAA,EACF;AAAA,EACD,cAAc,SAAsCjvB,GAAK;AACvD,QAAIwvB,IAAQ;AACV,UAAI5qC,IAAU,KAAK,SACjBivC,IAAoBjvC,EAAQ,mBAC5BkvC,IAAiBlvC,EAAQ,gBACzBuuC,IAAQnzB,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GACvC+zB,IAAcpF,MAAWnH,GAAOmH,IAAS,EAAI,GAC7C9F,IAAS8F,MAAWoF,KAAeA,EAAY,GAC/CjL,IAAS6F,MAAWoF,KAAeA,EAAY,GAC/CC,IAAuBxD,MAA2BL,MAAuB9F,GAAwB8F,EAAmB,GACpH8D,KAAMd,EAAM,UAAU3D,GAAO,UAAUsE,EAAe,MAAMjL,KAAU,MAAMmL,IAAuBA,EAAqB,CAAC,IAAI5D,GAAiC,CAAC,IAAI,MAAMvH,KAAU,IACnLqL,KAAMf,EAAM,UAAU3D,GAAO,UAAUsE,EAAe,MAAMhL,KAAU,MAAMkL,IAAuBA,EAAqB,CAAC,IAAI5D,GAAiC,CAAC,IAAI,MAAMtH,KAAU;AAGrL,UAAI,CAACoB,GAAS,UAAU,CAACmF,IAAqB;AAC5C,YAAIwE,KAAqB,KAAK,IAAI,KAAK,IAAIV,EAAM,UAAU,KAAK,MAAM,GAAG,KAAK,IAAIA,EAAM,UAAU,KAAK,MAAM,CAAC,IAAIU;AAChH;AAEF,aAAK,aAAa7zB,GAAK,EAAI;AAAA,MAC5B;AACD,UAAI2uB,IAAS;AACX,QAAIoF,KACFA,EAAY,KAAKE,KAAMvE,MAAU,IACjCqE,EAAY,KAAKG,KAAMvE,MAAU,MAEjCoE,IAAc;AAAA,UACZ,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAGE;AAAA,UACH,GAAGC;AAAA,QACf;AAEQ,YAAIC,IAAY,UAAU,OAAOJ,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG,EAAE,OAAOA,EAAY,GAAG,GAAG;AAC1L,QAAAzM,GAAIqH,IAAS,mBAAmBwF,CAAS,GACzC7M,GAAIqH,IAAS,gBAAgBwF,CAAS,GACtC7M,GAAIqH,IAAS,eAAewF,CAAS,GACrC7M,GAAIqH,IAAS,aAAawF,CAAS,GACnCzE,KAASuE,GACTtE,KAASuE,GACTzE,KAAW0D;AAAA,MACZ;AACD,MAAAnzB,EAAI,cAAcA,EAAI;IACvB;AAAA,EACF;AAAA,EACD,cAAc,WAAwB;AAGpC,QAAI,CAAC2uB,IAAS;AACZ,UAAIzqB,IAAY,KAAK,QAAQ,iBAAiB,SAAS,OAAOupB,IAC5DzE,IAAOb,GAAQsG,IAAQ,IAAM+B,IAAyB,IAAMtsB,CAAS,GACrEtf,IAAU,KAAK;AAGjB,UAAI4rC,IAAyB;AAG3B,aADAL,KAAsBjsB,GACfojB,GAAI6I,IAAqB,UAAU,MAAM,YAAY7I,GAAI6I,IAAqB,WAAW,MAAM,UAAUA,OAAwB;AACtI,UAAAA,KAAsBA,GAAoB;AAE5C,QAAIA,OAAwB,SAAS,QAAQA,OAAwB,SAAS,mBACxEA,OAAwB,aAAUA,KAAsBlI,GAAyB,IACrFe,EAAK,OAAOmH,GAAoB,WAChCnH,EAAK,QAAQmH,GAAoB,cAEjCA,KAAsBlI,GAAyB,GAEjDmI,KAAmC/F,GAAwB8F,EAAmB;AAAA,MAC/E;AACD,MAAAxB,KAAUF,GAAO,UAAU,EAAI,GAC/B53B,GAAY83B,IAAS/pC,EAAQ,YAAY,EAAK,GAC9CiS,GAAY83B,IAAS/pC,EAAQ,eAAe,EAAI,GAChDiS,GAAY83B,IAAS/pC,EAAQ,WAAW,EAAI,GAC5C0iC,GAAIqH,IAAS,cAAc,EAAE,GAC7BrH,GAAIqH,IAAS,aAAa,EAAE,GAC5BrH,GAAIqH,IAAS,cAAc,YAAY,GACvCrH,GAAIqH,IAAS,UAAU,CAAC,GACxBrH,GAAIqH,IAAS,OAAO3F,EAAK,GAAG,GAC5B1B,GAAIqH,IAAS,QAAQ3F,EAAK,IAAI,GAC9B1B,GAAIqH,IAAS,SAAS3F,EAAK,KAAK,GAChC1B,GAAIqH,IAAS,UAAU3F,EAAK,MAAM,GAClC1B,GAAIqH,IAAS,WAAW,KAAK,GAC7BrH,GAAIqH,IAAS,YAAY6B,KAA0B,aAAa,OAAO,GACvElJ,GAAIqH,IAAS,UAAU,QAAQ,GAC/BrH,GAAIqH,IAAS,iBAAiB,MAAM,GACpCzE,GAAS,QAAQyE,IACjBzqB,EAAU,YAAYyqB,EAAO,GAG7BrH,GAAIqH,IAAS,oBAAoBiB,KAAkB,SAASjB,GAAQ,MAAM,KAAK,IAAI,MAAM,OAAOkB,KAAiB,SAASlB,GAAQ,MAAM,MAAM,IAAI,MAAM,GAAG;AAAA,IAC5J;AAAA,EACF;AAAA,EACD,cAAc,SAAiC3uB,GAAiB2zB,GAAU;AACxE,QAAIj9B,IAAQ,MACRu8B,IAAejzB,EAAI,cACnBpb,IAAU8R,EAAM;AAIpB,QAHA83B,GAAY,aAAa,MAAM;AAAA,MAC7B,KAAKxuB;AAAA,IACX,CAAK,GACGkqB,GAAS,eAAe;AAC1B,WAAK,QAAO;AACZ;AAAA,IACD;AACD,IAAAsE,GAAY,cAAc,IAAI,GACzBtE,GAAS,kBACZyD,KAAUnC,GAAMiD,EAAM,GACtBd,GAAQ,gBAAgB,IAAI,GAC5BA,GAAQ,YAAY,IACpBA,GAAQ,MAAM,aAAa,IAAI,IAC/B,KAAK,WAAU,GACf92B,GAAY82B,IAAS,KAAK,QAAQ,aAAa,EAAK,GACpDzD,GAAS,QAAQyD,KAInBj3B,EAAM,UAAUg9B,GAAU,WAAY;AAEpC,MADAlF,GAAY,SAAS93B,CAAK,GACtB,CAAAwzB,GAAS,kBACRxzB,EAAM,QAAQ,qBACjB+2B,GAAO,aAAaE,IAASc,EAAM,GAErC/3B,EAAM,WAAU,GAChBw4B,GAAe;AAAA,QACb,UAAUx4B;AAAA,QACV,MAAM;AAAA,MACd,CAAO;AAAA,IACP,CAAK,GACD,CAACi9B,KAAY98B,GAAY43B,IAAQ7pC,EAAQ,WAAW,EAAI,GAGpD+uC,KACFrE,KAAkB,IAClB54B,EAAM,UAAU,YAAYA,EAAM,kBAAkB,EAAE,MAGtDowB,GAAI,UAAU,WAAWpwB,EAAM,OAAO,GACtCowB,GAAI,UAAU,YAAYpwB,EAAM,OAAO,GACvCowB,GAAI,UAAU,eAAepwB,EAAM,OAAO,GACtCu8B,MACFA,EAAa,gBAAgB,QAC7BruC,EAAQ,WAAWA,EAAQ,QAAQ,KAAK8R,GAAOu8B,GAAcxE,EAAM,IAErE5H,GAAG,UAAU,QAAQnwB,CAAK,GAG1B4wB,GAAImH,IAAQ,aAAa,eAAe,IAE1CY,KAAsB,IACtB34B,EAAM,eAAeg9B,GAAUh9B,EAAM,aAAa,KAAKA,GAAOi9B,GAAU3zB,CAAG,CAAC,GAC5E6mB,GAAG,UAAU,eAAenwB,CAAK,GACjCq4B,KAAQ,IACJtI,MACFa,GAAI,SAAS,MAAM,eAAe,MAAM;AAAA,EAE3C;AAAA;AAAA,EAED,aAAa,SAAgCtnB,GAAK;AAChD,QAAIF,IAAK,KAAK,IACZrE,IAASuE,EAAI,QACbuxB,GACAC,GACA4C,GACAxvC,IAAU,KAAK,SACfguC,IAAQhuC,EAAQ,OAChByvC,IAAiBnK,GAAS,QAC1BoK,IAAUlF,OAAgBwD,GAC1B2B,IAAU3vC,EAAQ,MAClB4vC,IAAerG,MAAekG,GAC9B5C,GACA/6B,IAAQ,MACR+9B,IAAiB;AACnB,QAAIpE;AAAS;AACb,aAASqE,EAAchzC,GAAMizC,GAAO;AAClC,MAAAnG,GAAY9sC,GAAMgV,GAAOgvB,GAAe;AAAA,QACtC,KAAK1lB;AAAA,QACL,SAASs0B;AAAA,QACT,MAAM7C,IAAW,aAAa;AAAA,QAC9B,QAAQ2C;AAAA,QACR,UAAU7C;AAAA,QACV,YAAYC;AAAA,QACZ,SAAS+C;AAAA,QACT,cAAcC;AAAA,QACd,QAAQ/4B;AAAA,QACR,WAAWm5B;AAAA,QACX,QAAQ,SAAgBn5B,IAAQo5B,IAAO;AACrC,iBAAOC,GAAQrH,IAAQ3tB,GAAI2uB,IAAQ8C,GAAU91B,IAAQ0sB,GAAQ1sB,EAAM,GAAGuE,GAAK60B,EAAK;AAAA,QACjF;AAAA,QACD,SAASE;AAAA,MACjB,GAASJ,CAAK,CAAC;AAAA,IACV;AAGD,aAASK,IAAU;AACjB,MAAAN,EAAc,0BAA0B,GACxCh+B,EAAM,sBAAqB,GACvBA,MAAU89B,KACZA,EAAa,sBAAqB;AAAA,IAErC;AAGD,aAASI,EAAUK,GAAW;AAC5B,aAAAP,EAAc,qBAAqB;AAAA,QACjC,WAAWO;AAAA,MACnB,CAAO,GACGA,MAEEX,IACFD,EAAe,WAAU,IAEzBA,EAAe,WAAW39B,CAAK,GAE7BA,MAAU89B,MAEZ39B,GAAY43B,IAAQN,KAAcA,GAAY,QAAQ,aAAakG,EAAe,QAAQ,YAAY,EAAK,GAC3Gx9B,GAAY43B,IAAQ7pC,EAAQ,YAAY,EAAI,IAE1CupC,OAAgBz3B,KAASA,MAAUwzB,GAAS,SAC9CiE,KAAcz3B,IACLA,MAAUwzB,GAAS,UAAUiE,OACtCA,KAAc,OAIZqG,MAAiB99B,MACnBA,EAAM,wBAAwB+E,IAEhC/E,EAAM,WAAW,WAAY;AAC3B,QAAAg+B,EAAc,2BAA2B,GACzCh+B,EAAM,wBAAwB;AAAA,MACxC,CAAS,GACGA,MAAU89B,MACZA,EAAa,WAAU,GACvBA,EAAa,wBAAwB,SAKrC/4B,MAAWgzB,MAAU,CAACA,GAAO,YAAYhzB,MAAWqE,KAAM,CAACrE,EAAO,cACpEq0B,KAAa,OAIX,CAAClrC,EAAQ,kBAAkB,CAACob,EAAI,UAAUvE,MAAW,aACvDgzB,GAAO,WAAW/C,EAAO,EAAE,iBAAiB1rB,EAAI,MAAM,GAGtD,CAACi1B,KAAanC,GAA8B9yB,CAAG,IAEjD,CAACpb,EAAQ,kBAAkBob,EAAI,mBAAmBA,EAAI,mBAC/Cy0B,IAAiB;AAAA,IACzB;AAGD,aAASM,IAAU;AACjB,MAAAhH,KAAWptC,GAAM8tC,EAAM,GACvBR,KAAoBttC,GAAM8tC,IAAQ7pC,EAAQ,SAAS,GACnDsqC,GAAe;AAAA,QACb,UAAUx4B;AAAA,QACV,MAAM;AAAA,QACN,MAAMoJ;AAAA,QACN,UAAUiuB;AAAA,QACV,mBAAmBE;AAAA,QACnB,eAAejuB;AAAA,MACvB,CAAO;AAAA,IACF;AAMD,QALIA,EAAI,mBAAmB,UACzBA,EAAI,cAAcA,EAAI,kBAExBvE,IAASwrB,GAAQxrB,GAAQ7W,EAAQ,WAAWkb,GAAI,EAAI,GACpD40B,EAAc,UAAU,GACpBxK,GAAS;AAAe,aAAOuK;AACnC,QAAIhG,GAAO,SAASzuB,EAAI,MAAM,KAAKvE,EAAO,YAAYA,EAAO,cAAcA,EAAO,cAAc/E,EAAM,0BAA0B+E;AAC9H,aAAOm5B,EAAU,EAAK;AAGxB,QADAtF,KAAkB,IACd+E,KAAkB,CAACzvC,EAAQ,aAAa0vC,IAAUC,MAAYH,IAAS1F,OAAajB,MACtFU,OAAgB,SAAS,KAAK,cAAciB,GAAY,UAAU,MAAMiF,GAAgB5F,IAAQzuB,CAAG,MAAM4yB,EAAM,SAAS,MAAMyB,GAAgB5F,IAAQzuB,CAAG,IAAI;AAI7J,UAHAyxB,IAAW,KAAK,cAAczxB,GAAKvE,CAAM,MAAM,YAC/C81B,IAAWpJ,GAAQsG,EAAM,GACzBiG,EAAc,eAAe,GACzBxK,GAAS;AAAe,eAAOuK;AACnC,UAAIL;AACF,eAAA1F,KAAWjB,IACXuH,KACA,KAAK,WAAU,GACfN,EAAc,QAAQ,GACjBxK,GAAS,kBACR0E,KACFnB,GAAO,aAAagB,IAAQG,EAAM,IAElCnB,GAAO,YAAYgB,EAAM,IAGtBmG,EAAU,EAAI;AAEvB,UAAIM,IAAc/K,GAAUrqB,GAAIlb,EAAQ,SAAS;AACjD,UAAI,CAACswC,KAAeC,GAAan1B,GAAKyxB,GAAU,IAAI,KAAK,CAACyD,EAAY,UAAU;AAI9E,YAAIA,MAAgBzG;AAClB,iBAAOmG,EAAU,EAAK;AAUxB,YANIM,KAAep1B,MAAOE,EAAI,WAC5BvE,IAASy5B,IAEPz5B,MACF+1B,IAAarJ,GAAQ1sB,CAAM,IAEzBq5B,GAAQrH,IAAQ3tB,GAAI2uB,IAAQ8C,GAAU91B,GAAQ+1B,GAAYxxB,GAAK,CAAC,CAACvE,CAAM,MAAM;AAC/E,iBAAAu5B,KACIE,KAAeA,EAAY,cAE7Bp1B,EAAG,aAAa2uB,IAAQyG,EAAY,WAAW,IAE/Cp1B,EAAG,YAAY2uB,EAAM,GAEvBC,KAAW5uB,GAEXi1B,KACOH,EAAU,EAAI;AAAA,MAE/B,WAAiBM,KAAeE,GAAcp1B,GAAKyxB,GAAU,IAAI,GAAG;AAE5D,YAAI4D,IAAaxL,GAAS/pB,GAAI,GAAGlb,GAAS,EAAI;AAC9C,YAAIywC,MAAe5G;AACjB,iBAAOmG,EAAU,EAAK;AAIxB,YAFAn5B,IAAS45B,GACT7D,IAAarJ,GAAQ1sB,CAAM,GACvBq5B,GAAQrH,IAAQ3tB,GAAI2uB,IAAQ8C,GAAU91B,GAAQ+1B,GAAYxxB,GAAK,EAAK,MAAM;AAC5E,iBAAAg1B,KACAl1B,EAAG,aAAa2uB,IAAQ4G,CAAU,GAClC3G,KAAW5uB,GAEXi1B,KACOH,EAAU,EAAI;AAAA,MAE/B,WAAiBn5B,EAAO,eAAeqE,GAAI;AACnC,QAAA0xB,IAAarJ,GAAQ1sB,CAAM;AAC3B,YAAI65B,IAAY,GACdC,GACAC,IAAiB/G,GAAO,eAAe3uB,GACvC21B,IAAkB,CAACnE,GAAmB7C,GAAO,YAAYA,GAAO,UAAU8C,GAAU91B,EAAO,YAAYA,EAAO,UAAU+1B,GAAYC,CAAQ,GAC5IiE,KAAQjE,IAAW,QAAQ,QAC3BkE,IAAkBtM,GAAe5tB,GAAQ,OAAO,KAAK,KAAK4tB,GAAeoF,IAAQ,OAAO,KAAK,GAC7FmH,IAAeD,IAAkBA,EAAgB,YAAY;AAC/D,QAAI7F,OAAer0B,MACjB85B,IAAwB/D,EAAWkE,EAAK,GACxC1F,KAAwB,IACxBC,KAAyB,CAACwF,KAAmB7wC,EAAQ,cAAc4wC,IAErEF,IAAYO,GAAkB71B,GAAKvE,GAAQ+1B,GAAYC,GAAUgE,IAAkB,IAAI7wC,EAAQ,eAAeA,EAAQ,yBAAyB,OAAOA,EAAQ,gBAAgBA,EAAQ,uBAAuBqrC,IAAwBH,OAAer0B,CAAM;AAC1P,YAAIq6B;AACJ,YAAIR,MAAc,GAAG;AAEnB,cAAIS,IAAYp1C,GAAM8tC,EAAM;AAC5B;AACE,YAAAsH,KAAaT,GACbQ,IAAUpH,GAAS,SAASqH,CAAS;AAAA,iBAC9BD,MAAYxO,GAAIwO,GAAS,SAAS,MAAM,UAAUA,MAAYnH;AAAA,QACxE;AAED,YAAI2G,MAAc,KAAKQ,MAAYr6B;AACjC,iBAAOm5B,EAAU,EAAK;AAExB,QAAA9E,KAAar0B,GACbs0B,KAAgBuF;AAChB,YAAIU,IAAcv6B,EAAO,oBACvBo5B,IAAQ;AACV,QAAAA,IAAQS,MAAc;AACtB,YAAIW,IAAanB,GAAQrH,IAAQ3tB,GAAI2uB,IAAQ8C,GAAU91B,GAAQ+1B,GAAYxxB,GAAK60B,CAAK;AACrF,YAAIoB,MAAe;AACjB,kBAAIA,MAAe,KAAKA,MAAe,QACrCpB,IAAQoB,MAAe,IAEzB5F,KAAU,IACV,WAAW6F,IAAW,EAAE,GACxBlB,KACIH,KAAS,CAACmB,IACZl2B,EAAG,YAAY2uB,EAAM,IAErBhzB,EAAO,WAAW,aAAagzB,IAAQoG,IAAQmB,IAAcv6B,CAAM,GAIjEk6B,KACFpK,GAASoK,GAAiB,GAAGC,IAAeD,EAAgB,SAAS,GAEvEjH,KAAWD,GAAO,YAGd8G,MAA0B,UAAa,CAACtF,OAC1CC,KAAqB,KAAK,IAAIqF,IAAwBpN,GAAQ1sB,CAAM,EAAEi6B,EAAK,CAAC,IAE9EX,KACOH,EAAU,EAAI;AAAA,MAExB;AACD,UAAI90B,EAAG,SAAS2uB,EAAM;AACpB,eAAOmG,EAAU,EAAK;AAAA,IAEzB;AACD,WAAO;AAAA,EACR;AAAA,EACD,uBAAuB;AAAA,EACvB,gBAAgB,WAA0B;AACxC,IAAA9N,GAAI,UAAU,aAAa,KAAK,YAAY,GAC5CA,GAAI,UAAU,aAAa,KAAK,YAAY,GAC5CA,GAAI,UAAU,eAAe,KAAK,YAAY,GAC9CA,GAAI,UAAU,YAAYgM,EAA6B,GACvDhM,GAAI,UAAU,aAAagM,EAA6B,GACxDhM,GAAI,UAAU,aAAagM,EAA6B;AAAA,EACzD;AAAA,EACD,cAAc,WAAwB;AACpC,QAAIS,IAAgB,KAAK,GAAG;AAC5B,IAAAzM,GAAIyM,GAAe,WAAW,KAAK,OAAO,GAC1CzM,GAAIyM,GAAe,YAAY,KAAK,OAAO,GAC3CzM,GAAIyM,GAAe,aAAa,KAAK,OAAO,GAC5CzM,GAAIyM,GAAe,eAAe,KAAK,OAAO,GAC9CzM,GAAI,UAAU,eAAe,IAAI;AAAA,EAClC;AAAA,EACD,SAAS,SAA4B9mB,GAAK;AACxC,QAAIF,IAAK,KAAK,IACZlb,IAAU,KAAK;AAajB,QAVAmpC,KAAWptC,GAAM8tC,EAAM,GACvBR,KAAoBttC,GAAM8tC,IAAQ7pC,EAAQ,SAAS,GACnD4pC,GAAY,QAAQ,MAAM;AAAA,MACxB,KAAKxuB;AAAA,IACX,CAAK,GACD0uB,KAAWD,MAAUA,GAAO,YAG5BV,KAAWptC,GAAM8tC,EAAM,GACvBR,KAAoBttC,GAAM8tC,IAAQ7pC,EAAQ,SAAS,GAC/CslC,GAAS,eAAe;AAC1B,WAAK,SAAQ;AACb;AAAA,IACD;AACD,IAAAmF,KAAsB,IACtBY,KAAyB,IACzBD,KAAwB,IACxB,cAAc,KAAK,OAAO,GAC1B,aAAa,KAAK,eAAe,GACjCmG,GAAgB,KAAK,OAAO,GAC5BA,GAAgB,KAAK,YAAY,GAG7B,KAAK,oBACPrP,GAAI,UAAU,QAAQ,IAAI,GAC1BA,GAAIhnB,GAAI,aAAa,KAAK,YAAY,IAExC,KAAK,eAAc,GACnB,KAAK,aAAY,GACb2mB,MACFa,GAAI,SAAS,MAAM,eAAe,EAAE,GAEtCA,GAAImH,IAAQ,aAAa,EAAE,GACvBzuB,MACE+uB,OACF/uB,EAAI,cAAcA,EAAI,kBACtB,CAACpb,EAAQ,cAAcob,EAAI,gBAAe,IAE5C2uB,MAAWA,GAAQ,cAAcA,GAAQ,WAAW,YAAYA,EAAO,IACnElB,OAAWiB,MAAYP,MAAeA,GAAY,gBAAgB,YAEpER,MAAWA,GAAQ,cAAcA,GAAQ,WAAW,YAAYA,EAAO,GAErEc,OACE,KAAK,mBACP3H,GAAI2H,IAAQ,WAAW,IAAI,GAE7BgF,GAAkBhF,EAAM,GACxBA,GAAO,MAAM,aAAa,IAAI,IAI1BM,MAAS,CAACM,MACZx4B,GAAY43B,IAAQN,KAAcA,GAAY,QAAQ,aAAa,KAAK,QAAQ,YAAY,EAAK,GAEnGt3B,GAAY43B,IAAQ,KAAK,QAAQ,aAAa,EAAK,GAGnDS,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,UAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,eAAe1uB;AAAA,IACzB,CAAS,GACGytB,OAAWiB,MACTX,MAAY,MAEdmB,GAAe;AAAA,MACb,QAAQR;AAAA,MACR,MAAM;AAAA,MACN,MAAMA;AAAA,MACN,QAAQjB;AAAA,MACR,eAAeztB;AAAA,IAC7B,CAAa,GAGDkvB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAe1uB;AAAA,IAC7B,CAAa,GAGDkvB,GAAe;AAAA,MACb,QAAQR;AAAA,MACR,MAAM;AAAA,MACN,MAAMA;AAAA,MACN,QAAQjB;AAAA,MACR,eAAeztB;AAAA,IAC7B,CAAa,GACDkvB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAe1uB;AAAA,IAC7B,CAAa,IAEHmuB,MAAeA,GAAY,UAEvBJ,OAAaD,MACXC,MAAY,MAEdmB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAe1uB;AAAA,IAC/B,CAAe,GACDkvB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAe1uB;AAAA,IAC/B,CAAe,IAIHkqB,GAAS,YAEP6D,MAAY,QAAQA,OAAa,QACnCA,KAAWD,IACXG,KAAoBD,KAEtBkB,GAAe;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAMR;AAAA,MACN,eAAe1uB;AAAA,IAC3B,CAAW,GAGD,KAAK,KAAI,MAIf,KAAK,SAAQ;AAAA,EACd;AAAA,EACD,UAAU,WAAoB;AAC5B,IAAAwuB,GAAY,WAAW,IAAI,GAC3Bf,KAASgB,KAASC,KAAWC,KAAUC,KAASjB,KAAUkB,KAAaC,KAAcU,KAASC,KAAWV,KAAQhB,KAAWE,KAAoBH,KAAWE,KAAoB8B,KAAaC,KAAgB5B,KAAciB,KAAclF,GAAS,UAAUA,GAAS,QAAQA,GAAS,QAAQA,GAAS,SAAS,MAC/SoG,GAAkB,QAAQ,SAAUxwB,GAAI;AACtC,MAAAA,EAAG,UAAU;AAAA,IACnB,CAAK,GACDwwB,GAAkB,SAASZ,KAASC,KAAS;AAAA,EAC9C;AAAA,EACD,aAAa,SAAgC3vB,GAAK;AAChD,YAAQA,EAAI,MAAI;AAAA,MACd,KAAK;AAAA,MACL,KAAK;AACH,aAAK,QAAQA,CAAG;AAChB;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAIyuB,OACF,KAAK,YAAYzuB,CAAG,GACpBo2B,GAAgBp2B,CAAG;AAErB;AAAA,MACF,KAAK;AACH,QAAAA,EAAI,eAAc;AAClB;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,SAAS,WAAmB;AAO1B,aANIq2B,IAAQ,CAAE,GACZv2B,GACAmqB,IAAW,KAAK,GAAG,UACnB/kC,IAAI,GACJG,IAAI4kC,EAAS,QACbrlC,IAAU,KAAK,SACVM,IAAIG,GAAGH;AACZ,MAAA4a,IAAKmqB,EAAS/kC,CAAC,GACX+hC,GAAQnnB,GAAIlb,EAAQ,WAAW,KAAK,IAAI,EAAK,KAC/CyxC,EAAM,KAAKv2B,EAAG,aAAalb,EAAQ,UAAU,KAAK0xC,GAAYx2B,CAAE,CAAC;AAGrE,WAAOu2B;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,MAAM,SAAcA,GAAOE,GAAc;AACvC,QAAIvrC,IAAQ,CAAE,GACZyiC,IAAS,KAAK;AAChB,SAAK,QAAS,EAAC,QAAQ,SAAUjN,GAAIt7B,GAAG;AACtC,UAAI4a,IAAK2tB,EAAO,SAASvoC,CAAC;AAC1B,MAAI+hC,GAAQnnB,GAAI,KAAK,QAAQ,WAAW2tB,GAAQ,EAAK,MACnDziC,EAAMw1B,CAAE,IAAI1gB;AAAA,IAEf,GAAE,IAAI,GACPy2B,KAAgB,KAAK,yBACrBF,EAAM,QAAQ,SAAU7V,GAAI;AAC1B,MAAIx1B,EAAMw1B,CAAE,MACViN,EAAO,YAAYziC,EAAMw1B,CAAE,CAAC,GAC5BiN,EAAO,YAAYziC,EAAMw1B,CAAE,CAAC;AAAA,IAEpC,CAAK,GACD+V,KAAgB,KAAK;EACtB;AAAA;AAAA;AAAA;AAAA,EAID,MAAM,WAAgB;AACpB,QAAIC,IAAQ,KAAK,QAAQ;AACzB,IAAAA,KAASA,EAAM,OAAOA,EAAM,IAAI,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,SAAS,SAAmB12B,GAAIoM,GAAU;AACxC,WAAO+a,GAAQnnB,GAAIoM,KAAY,KAAK,QAAQ,WAAW,KAAK,IAAI,EAAK;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,QAAQ,SAAgBxqB,GAAM1C,GAAO;AACnC,QAAI4F,IAAU,KAAK;AACnB,QAAI5F,MAAU;AACZ,aAAO4F,EAAQlD,CAAI;AAEnB,QAAI4rC,IAAgBR,GAAc,aAAa,MAAMprC,GAAM1C,CAAK;AAChE,IAAI,OAAOsuC,IAAkB,MAC3B1oC,EAAQlD,CAAI,IAAI4rC,IAEhB1oC,EAAQlD,CAAI,IAAI1C,GAEd0C,MAAS,WACX2wC,GAAcztC,CAAO;AAAA,EAG1B;AAAA;AAAA;AAAA;AAAA,EAID,SAAS,WAAmB;AAC1B,IAAA4pC,GAAY,WAAW,IAAI;AAC3B,QAAI1uB,IAAK,KAAK;AACd,IAAAA,EAAG4rB,EAAO,IAAI,MACd5E,GAAIhnB,GAAI,aAAa,KAAK,WAAW,GACrCgnB,GAAIhnB,GAAI,cAAc,KAAK,WAAW,GACtCgnB,GAAIhnB,GAAI,eAAe,KAAK,WAAW,GACnC,KAAK,oBACPgnB,GAAIhnB,GAAI,YAAY,IAAI,GACxBgnB,GAAIhnB,GAAI,aAAa,IAAI,IAG3B,MAAM,UAAU,QAAQ,KAAKA,EAAG,iBAAiB,aAAa,GAAG,SAAUA,GAAI;AAC7E,MAAAA,EAAG,gBAAgB,WAAW;AAAA,IACpC,CAAK,GACD,KAAK,QAAO,GACZ,KAAK,0BAAyB,GAC9ByvB,GAAU,OAAOA,GAAU,QAAQ,KAAK,EAAE,GAAG,CAAC,GAC9C,KAAK,KAAKzvB,IAAK;AAAA,EAChB;AAAA,EACD,YAAY,WAAsB;AAChC,QAAI,CAACgvB,IAAa;AAEhB,UADAN,GAAY,aAAa,IAAI,GACzBtE,GAAS;AAAe;AAC5B,MAAA5C,GAAIqG,IAAS,WAAW,MAAM,GAC1B,KAAK,QAAQ,qBAAqBA,GAAQ,cAC5CA,GAAQ,WAAW,YAAYA,EAAO,GAExCmB,KAAc;AAAA,IACf;AAAA,EACF;AAAA,EACD,YAAY,SAAoBX,GAAa;AAC3C,QAAIA,EAAY,gBAAgB,SAAS;AACvC,WAAK,WAAU;AACf;AAAA,IACD;AACD,QAAIW,IAAa;AAEf,UADAN,GAAY,aAAa,IAAI,GACzBtE,GAAS;AAAe;AAG5B,MAAIuE,GAAO,cAAchB,MAAU,CAAC,KAAK,QAAQ,MAAM,cACrDA,GAAO,aAAaE,IAASc,EAAM,IAC1BG,KACTnB,GAAO,aAAaE,IAASiB,EAAM,IAEnCnB,GAAO,YAAYE,EAAO,GAExB,KAAK,QAAQ,MAAM,eACrB,KAAK,QAAQc,IAAQd,EAAO,GAE9BrG,GAAIqG,IAAS,WAAW,EAAE,GAC1BmB,KAAc;AAAA,IACf;AAAA,EACF;AACH;AACA,SAASsH,GAA2Bp2B,GAAK;AACvC,EAAIA,EAAI,iBACNA,EAAI,aAAa,aAAa,SAEhCA,EAAI,cAAcA,EAAI;AACxB;AACA,SAAS80B,GAAQjH,GAAQD,GAAMa,GAAQ8C,GAAU7D,GAAU8D,GAAYtD,GAAeuI,GAAiB;AACrG,MAAIz2B,GACFitB,IAAWY,EAAOnC,EAAO,GACzBgL,IAAWzJ,EAAS,QAAQ,QAC5B0J;AAEF,SAAI,OAAO,eAAe,CAACrQ,MAAc,CAACC,KACxCvmB,IAAM,IAAI,YAAY,QAAQ;AAAA,IAC5B,SAAS;AAAA,IACT,YAAY;AAAA,EAClB,CAAK,KAEDA,IAAM,SAAS,YAAY,OAAO,GAClCA,EAAI,UAAU,QAAQ,IAAM,EAAI,IAElCA,EAAI,KAAK4tB,GACT5tB,EAAI,OAAO6tB,GACX7tB,EAAI,UAAUyuB,GACdzuB,EAAI,cAAcuxB,GAClBvxB,EAAI,UAAU0tB,KAAYE,GAC1B5tB,EAAI,cAAcwxB,KAAcrJ,GAAQyF,CAAI,GAC5C5tB,EAAI,kBAAkBy2B,GACtBz2B,EAAI,gBAAgBkuB,GACpBL,EAAO,cAAc7tB,CAAG,GACpB02B,MACFC,IAASD,EAAS,KAAKzJ,GAAUjtB,GAAKkuB,CAAa,IAE9CyI;AACT;AACA,SAASlD,GAAkB3zB,GAAI;AAC7B,EAAAA,EAAG,YAAY;AACjB;AACA,SAASo2B,KAAY;AACnB,EAAA7F,KAAU;AACZ;AACA,SAAS+E,GAAcp1B,GAAKyxB,GAAUxE,GAAU;AAC9C,MAAI2J,IAAczO,GAAQ0B,GAASoD,EAAS,IAAI,GAAGA,EAAS,SAAS,EAAI,CAAC,GACtE4J,IAAsB9N,GAAekE,EAAS,EAAE,GAChD6J,IAAS;AACb,SAAOrF,IAAWzxB,EAAI,UAAU62B,EAAoB,OAAOC,KAAU92B,EAAI,UAAU42B,EAAY,OAAO52B,EAAI,UAAU42B,EAAY,QAAQ52B,EAAI,UAAU62B,EAAoB,MAAMC,KAAU92B,EAAI,UAAU42B,EAAY,UAAU52B,EAAI,UAAU42B,EAAY;AAC1P;AACA,SAASzB,GAAan1B,GAAKyxB,GAAUxE,GAAU;AAC7C,MAAI8J,IAAa5O,GAAQgC,GAAU8C,EAAS,IAAIA,EAAS,QAAQ,SAAS,CAAC,GACvE4J,IAAsB9N,GAAekE,EAAS,EAAE,GAChD6J,IAAS;AACb,SAAOrF,IAAWzxB,EAAI,UAAU62B,EAAoB,QAAQC,KAAU92B,EAAI,UAAU+2B,EAAW,UAAU/2B,EAAI,UAAU+2B,EAAW,OAAO/2B,EAAI,UAAU62B,EAAoB,SAASC,KAAU92B,EAAI,UAAU+2B,EAAW,SAAS/2B,EAAI,UAAU+2B,EAAW;AAC3P;AACA,SAASlB,GAAkB71B,GAAKvE,GAAQ+1B,GAAYC,GAAUuF,GAAeC,GAAuBC,GAAYC,GAAc;AAC5H,MAAIC,IAAc3F,IAAWzxB,EAAI,UAAUA,EAAI,SAC7Cq3B,IAAe5F,IAAWD,EAAW,SAASA,EAAW,OACzD8F,IAAW7F,IAAWD,EAAW,MAAMA,EAAW,MAClD+F,IAAW9F,IAAWD,EAAW,SAASA,EAAW,OACrDgG,IAAS;AACX,MAAI,CAACN;AAEH,QAAIC,KAAgBjH,KAAqBmH,IAAeL;AAOtD,UAJI,CAAChH,OAA0BD,OAAkB,IAAIqH,IAAcE,IAAWD,IAAeJ,IAAwB,IAAIG,IAAcG,IAAWF,IAAeJ,IAAwB,OAEvLjH,KAAwB,KAErBA;AAOH,QAAAwH,IAAS;AAAA,eALLzH,OAAkB,IAAIqH,IAAcE,IAAWpH,KACjDkH,IAAcG,IAAWrH;AACzB,eAAO,CAACH;AAAA,eAORqH,IAAcE,IAAWD,KAAgB,IAAIL,KAAiB,KAAKI,IAAcG,IAAWF,KAAgB,IAAIL,KAAiB;AACnI,aAAOS,GAAoBh8B,CAAM;AAAA;AAKvC,SADA+7B,IAASA,KAAUN,GACfM,MAEEJ,IAAcE,IAAWD,IAAeJ,IAAwB,KAAKG,IAAcG,IAAWF,IAAeJ,IAAwB,KAChIG,IAAcE,IAAWD,IAAe,IAAI,IAAI,KAGpD;AACT;AAQA,SAASI,GAAoBh8B,GAAQ;AACnC,SAAI9a,GAAM8tC,EAAM,IAAI9tC,GAAM8a,CAAM,IACvB,IAEA;AAEX;AAQA,SAAS66B,GAAYx2B,GAAI;AAIvB,WAHI43B,IAAM53B,EAAG,UAAUA,EAAG,YAAYA,EAAG,MAAMA,EAAG,OAAOA,EAAG,aAC1D5a,IAAIwyC,EAAI,QACRC,IAAM,GACDzyC;AACL,IAAAyyC,KAAOD,EAAI,WAAWxyC,CAAC;AAEzB,SAAOyyC,EAAI,SAAS,EAAE;AACxB;AACA,SAAStE,GAAuBuE,GAAM;AACpC,EAAAtH,GAAkB,SAAS;AAG3B,WAFIuH,IAASD,EAAK,qBAAqB,OAAO,GAC1CE,IAAMD,EAAO,QACVC,OAAO;AACZ,QAAIh4B,IAAK+3B,EAAOC,CAAG;AACnB,IAAAh4B,EAAG,WAAWwwB,GAAkB,KAAKxwB,CAAE;AAAA,EACxC;AACH;AACA,SAAS4zB,GAAUl9B,GAAI;AACrB,SAAO,WAAWA,GAAI,CAAC;AACzB;AACA,SAAS2/B,GAAgB3V,GAAI;AAC3B,SAAO,aAAaA,CAAE;AACxB;AAGI+P,MACF1J,GAAG,UAAU,aAAa,SAAU7mB,GAAK;AACvC,GAAKkqB,GAAS,UAAUmF,OAAwBrvB,EAAI,cAClDA,EAAI,eAAc;AAExB,CAAG;AAIHkqB,GAAS,QAAQ;AAAA,EACf,IAAIrD;AAAA,EACJ,KAAKC;AAAA,EACL,KAAKQ;AAAA,EACL,MAAMO;AAAA,EACN,IAAI,SAAY/nB,GAAIoM,GAAU;AAC5B,WAAO,CAAC,CAAC+a,GAAQnnB,GAAIoM,GAAUpM,GAAI,EAAK;AAAA,EACzC;AAAA,EACD,QAAQ+qB;AAAA,EACR,UAAUO;AAAA,EACV,SAASnE;AAAA,EACT,aAAapwB;AAAAA,EACb,OAAO20B;AAAA,EACP,OAAO7qC;AAAA,EACP,UAAU+yC;AAAA,EACV,gBAAgByC;AAAA,EAChB,iBAAiBvF;AAAA,EACjB,UAAU/G;AACZ;AAOAK,GAAS,MAAM,SAAU/tB,GAAS;AAChC,SAAOA,EAAQuvB,EAAO;AACxB;AAMAxB,GAAS,QAAQ,WAAY;AAC3B,WAAS6N,IAAO,UAAU,QAAQlL,IAAU,IAAI,MAAMkL,CAAI,GAAGC,IAAO,GAAGA,IAAOD,GAAMC;AAClF,IAAAnL,EAAQmL,CAAI,IAAI,UAAUA,CAAI;AAEhC,EAAInL,EAAQ,CAAC,EAAE,gBAAgB,UAAOA,IAAUA,EAAQ,CAAC,IACzDA,EAAQ,QAAQ,SAAUE,GAAQ;AAChC,QAAI,CAACA,EAAO,aAAa,CAACA,EAAO,UAAU;AACzC,YAAM,gEAAgE,OAAO,CAAE,EAAC,SAAS,KAAKA,CAAM,CAAC;AAEvG,IAAIA,EAAO,UAAO7C,GAAS,QAAQxE,GAAeA,GAAe,CAAE,GAAEwE,GAAS,KAAK,GAAG6C,EAAO,KAAK,IAClGD,GAAc,MAAMC,CAAM;AAAA,EAC9B,CAAG;AACH;AAOA7C,GAAS,SAAS,SAAUpqB,GAAIlb,GAAS;AACvC,SAAO,IAAIslC,GAASpqB,GAAIlb,CAAO;AACjC;AAGAslC,GAAS,UAAU/D;AAEnB,IAAI8R,KAAc,CAAE,GAClBC,IACAC,IACAC,KAAY,IACZC,IACAC,IACAC,IACAC;AACF,SAASC,KAAmB;AAC1B,WAASC,IAAa;AACpB,SAAK,WAAW;AAAA,MACd,QAAQ;AAAA,MACR,yBAAyB;AAAA,MACzB,mBAAmB;AAAA,MACnB,aAAa;AAAA,MACb,cAAc;AAAA,IACpB;AAGI,aAASliC,KAAM;AACb,MAAIA,EAAG,OAAO,CAAC,MAAM,OAAO,OAAO,KAAKA,CAAE,KAAM,eAC9C,KAAKA,CAAE,IAAI,KAAKA,CAAE,EAAE,KAAK,IAAI;AAAA,EAGlC;AACD,SAAAkiC,EAAW,YAAY;AAAA,IACrB,aAAa,SAAqBlL,GAAM;AACtC,UAAIU,IAAgBV,EAAK;AACzB,MAAI,KAAK,SAAS,kBAChB3G,GAAG,UAAU,YAAY,KAAK,iBAAiB,IAE3C,KAAK,QAAQ,iBACfA,GAAG,UAAU,eAAe,KAAK,yBAAyB,IACjDqH,EAAc,UACvBrH,GAAG,UAAU,aAAa,KAAK,yBAAyB,IAExDA,GAAG,UAAU,aAAa,KAAK,yBAAyB;AAAA,IAG7D;AAAA,IACD,mBAAmB,SAA2B8R,GAAO;AACnD,UAAIzK,IAAgByK,EAAM;AAE1B,MAAI,CAAC,KAAK,QAAQ,kBAAkB,CAACzK,EAAc,UACjD,KAAK,kBAAkBA,CAAa;AAAA,IAEvC;AAAA,IACD,MAAM,WAAgB;AACpB,MAAI,KAAK,SAAS,kBAChBpH,GAAI,UAAU,YAAY,KAAK,iBAAiB,KAEhDA,GAAI,UAAU,eAAe,KAAK,yBAAyB,GAC3DA,GAAI,UAAU,aAAa,KAAK,yBAAyB,GACzDA,GAAI,UAAU,aAAa,KAAK,yBAAyB,IAE3D8R,MACAC,MACAvN;IACD;AAAA,IACD,SAAS,WAAmB;AAC1B,MAAAiN,KAAaJ,KAAeD,KAAWE,KAAYI,KAA6BH,KAAkBC,KAAkB,MACpHL,GAAY,SAAS;AAAA,IACtB;AAAA,IACD,2BAA2B,SAAmCj4B,GAAK;AACjE,WAAK,kBAAkBA,GAAK,EAAI;AAAA,IACjC;AAAA,IACD,mBAAmB,SAA2BA,GAAK2zB,GAAU;AAC3D,UAAIj9B,IAAQ,MACRhX,KAAKsgB,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GAAK,SAC3CxY,KAAKwY,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GAAK,SACzClJ,IAAO,SAAS,iBAAiBpX,GAAG8H,CAAC;AAOvC,UANA+wC,KAAav4B,GAMT2zB,KAAY,KAAK,QAAQ,2BAA2BpN,MAAQD,MAAcG,IAAQ;AACpF,QAAAqS,GAAW94B,GAAK,KAAK,SAASlJ,GAAM68B,CAAQ;AAG5C,YAAIoF,IAAiBtP,GAA2B3yB,GAAM,EAAI;AAC1D,QAAIshC,OAAc,CAACI,MAA8B94C,MAAM24C,MAAmB7wC,MAAM8wC,QAC9EE,MAA8BI,GAA+B,GAE7DJ,KAA6B,YAAY,WAAY;AACnD,cAAIQ,IAAUvP,GAA2B,SAAS,iBAAiB/pC,GAAG8H,CAAC,GAAG,EAAI;AAC9E,UAAIwxC,MAAYD,MACdA,IAAiBC,GACjBH,OAEFC,GAAW94B,GAAKtJ,EAAM,SAASsiC,GAASrF,CAAQ;AAAA,QACjD,GAAE,EAAE,GACL0E,KAAkB34C,GAClB44C,KAAkB9wC;AAAA,MAE5B,OAAa;AAEL,YAAI,CAAC,KAAK,QAAQ,gBAAgBiiC,GAA2B3yB,GAAM,EAAI,MAAMmxB,MAA6B;AACxG,UAAA4Q;AACA;AAAA,QACD;AACD,QAAAC,GAAW94B,GAAK,KAAK,SAASypB,GAA2B3yB,GAAM,EAAK,GAAG,EAAK;AAAA,MAC7E;AAAA,IACF;AAAA,EACL,GACS+uB,GAAS6S,GAAY;AAAA,IAC1B,YAAY;AAAA,IACZ,qBAAqB;AAAA,EACzB,CAAG;AACH;AACA,SAASG,KAAmB;AAC1B,EAAAZ,GAAY,QAAQ,SAAUa,GAAY;AACxC,kBAAcA,EAAW,GAAG;AAAA,EAChC,CAAG,GACDb,KAAc,CAAA;AAChB;AACA,SAASW,KAAkC;AACzC,gBAAcJ,EAA0B;AAC1C;AACA,IAAIM,KAAa1N,GAAS,SAAUprB,GAAKpb,GAAS6oC,GAAQwL,GAAY;AAEpE,MAAKr0C,EAAQ,QACb;AAAA,QAAIlF,KAAKsgB,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GAAK,SAC3CxY,KAAKwY,EAAI,UAAUA,EAAI,QAAQ,CAAC,IAAIA,GAAK,SACzCk5B,IAAOt0C,EAAQ,mBACfu0C,IAAQv0C,EAAQ,aAChB4lC,IAAcvC,GAAyB,GACrCmR,IAAqB,IACvBC;AAGF,IAAIlB,OAAiB1K,MACnB0K,KAAe1K,GACfoL,MACAX,KAAWtzC,EAAQ,QACnBy0C,IAAiBz0C,EAAQ,UACrBszC,OAAa,OACfA,KAAWzO,GAA2BgE,GAAQ,EAAI;AAGtD,QAAI6L,IAAY,GACZC,IAAgBrB;AACpB,OAAG;AACD,UAAIp4B,IAAKy5B,GACPvQ,IAAOb,GAAQroB,CAAE,GACjBmJ,IAAM+f,EAAK,KACXR,IAASQ,EAAK,QACd9f,IAAO8f,EAAK,MACZ3f,IAAQ2f,EAAK,OACbN,IAAQM,EAAK,OACbP,IAASO,EAAK,QACdwQ,IAAa,QACbC,IAAa,QACbC,IAAc55B,EAAG,aACjB65B,IAAe75B,EAAG,cAClB+wB,IAAQvJ,GAAIxnB,CAAE,GACd85B,KAAa95B,EAAG,YAChB+5B,IAAa/5B,EAAG;AAClB,MAAIA,MAAO0qB,KACTgP,IAAa9Q,IAAQgR,MAAgB7I,EAAM,cAAc,UAAUA,EAAM,cAAc,YAAYA,EAAM,cAAc,YACvH4I,IAAahR,IAASkR,MAAiB9I,EAAM,cAAc,UAAUA,EAAM,cAAc,YAAYA,EAAM,cAAc,eAEzH2I,IAAa9Q,IAAQgR,MAAgB7I,EAAM,cAAc,UAAUA,EAAM,cAAc,WACvF4I,IAAahR,IAASkR,MAAiB9I,EAAM,cAAc,UAAUA,EAAM,cAAc;AAE3F,UAAIiJ,IAAKN,MAAe,KAAK,IAAInwB,IAAQ3pB,CAAC,KAAKw5C,KAAQU,KAAalR,IAAQgR,MAAgB,KAAK,IAAIxwB,IAAOxpB,CAAC,KAAKw5C,KAAQ,CAAC,CAACU,KACxHG,IAAKN,MAAe,KAAK,IAAIjR,IAAShhC,CAAC,KAAK0xC,KAAQW,IAAapR,IAASkR,MAAiB,KAAK,IAAI1wB,IAAMzhB,CAAC,KAAK0xC,KAAQ,CAAC,CAACW;AAC9H,UAAI,CAAC5B,GAAYqB,CAAS;AACxB,iBAASp0C,IAAI,GAAGA,KAAKo0C,GAAWp0C;AAC9B,UAAK+yC,GAAY/yC,CAAC,MAChB+yC,GAAY/yC,CAAC,IAAI;AAIvB,OAAI+yC,GAAYqB,CAAS,EAAE,MAAMQ,KAAM7B,GAAYqB,CAAS,EAAE,MAAMS,KAAM9B,GAAYqB,CAAS,EAAE,OAAOx5B,OACtGm4B,GAAYqB,CAAS,EAAE,KAAKx5B,GAC5Bm4B,GAAYqB,CAAS,EAAE,KAAKQ,GAC5B7B,GAAYqB,CAAS,EAAE,KAAKS,GAC5B,cAAc9B,GAAYqB,CAAS,EAAE,GAAG,IACpCQ,KAAM,KAAKC,KAAM,OACnBX,IAAqB,IAErBnB,GAAYqB,CAAS,EAAE,MAAM,aAAY,WAAY;AAEnD,QAAIL,KAAc,KAAK,UAAU,KAC/B/O,GAAS,OAAO,aAAaqO,EAAU;AAEzC,YAAIyB,IAAgB/B,GAAY,KAAK,KAAK,EAAE,KAAKA,GAAY,KAAK,KAAK,EAAE,KAAKkB,IAAQ,GAClFc,IAAgBhC,GAAY,KAAK,KAAK,EAAE,KAAKA,GAAY,KAAK,KAAK,EAAE,KAAKkB,IAAQ;AACtF,QAAI,OAAOE,KAAmB,cACxBA,EAAe,KAAKnP,GAAS,QAAQ,WAAWwB,EAAO,GAAGuO,GAAeD,GAAeh6B,GAAKu4B,IAAYN,GAAY,KAAK,KAAK,EAAE,EAAE,MAAM,cAI/I1M,GAAS0M,GAAY,KAAK,KAAK,EAAE,IAAIgC,GAAeD,CAAa;AAAA,MAClE,GAAC,KAAK;AAAA,QACL,OAAOV;AAAA,MACjB,CAAS,GAAG,EAAE,KAGVA;AAAA,IACJ,SAAW10C,EAAQ,gBAAgB20C,MAAkB/O,MAAgB+O,IAAgB9P,GAA2B8P,GAAe,EAAK;AAClI,IAAAnB,KAAYgB;AAAA;AACd,GAAG,EAAE,GAEDc,KAAO,SAAc1M,GAAM;AAC7B,MAAIU,IAAgBV,EAAK,eACvBW,IAAcX,EAAK,aACnBiB,IAASjB,EAAK,QACd6G,IAAiB7G,EAAK,gBACtB2M,IAAwB3M,EAAK,uBAC7B4M,IAAqB5M,EAAK,oBAC1B6M,IAAuB7M,EAAK;AAC9B,MAAKU,GACL;AAAA,QAAIoM,IAAanM,KAAekG;AAChC,IAAA+F;AACA,QAAIjH,IAAQjF,EAAc,kBAAkBA,EAAc,eAAe,SAASA,EAAc,eAAe,CAAC,IAAIA,GAChHzyB,IAAS,SAAS,iBAAiB03B,EAAM,SAASA,EAAM,OAAO;AACnE,IAAAkH,KACIC,KAAc,CAACA,EAAW,GAAG,SAAS7+B,CAAM,MAC9C0+B,EAAsB,OAAO,GAC7B,KAAK,QAAQ;AAAA,MACX,QAAQ1L;AAAA,MACR,aAAaN;AAAA,IACnB,CAAK;AAAA;AAEL;AACA,SAASoM,KAAS;AAAE;AACpBA,GAAO,YAAY;AAAA,EACjB,YAAY;AAAA,EACZ,WAAW,SAAmB5B,GAAO;AACnC,QAAI3K,IAAoB2K,EAAM;AAC9B,SAAK,aAAa3K;AAAA,EACnB;AAAA,EACD,SAAS,SAAiBwM,GAAO;AAC/B,QAAI/L,IAAS+L,EAAM,QACjBrM,IAAcqM,EAAM;AACtB,SAAK,SAAS,yBACVrM,KACFA,EAAY,sBAAqB;AAEnC,QAAI6H,IAAcnM,GAAS,KAAK,SAAS,IAAI,KAAK,YAAY,KAAK,OAAO;AAC1E,IAAImM,IACF,KAAK,SAAS,GAAG,aAAavH,GAAQuH,CAAW,IAEjD,KAAK,SAAS,GAAG,YAAYvH,CAAM,GAErC,KAAK,SAAS,cACVN,KACFA,EAAY,WAAU;AAAA,EAEzB;AAAA,EACD,MAAM+L;AACR;AACArU,GAAS0U,IAAQ;AAAA,EACf,YAAY;AACd,CAAC;AACD,SAASE,KAAS;AAAE;AACpBA,GAAO,YAAY;AAAA,EACjB,SAAS,SAAiBC,GAAO;AAC/B,QAAIjM,IAASiM,EAAM,QACjBvM,IAAcuM,EAAM,aAClBC,IAAiBxM,KAAe,KAAK;AACzC,IAAAwM,EAAe,sBAAqB,GACpClM,EAAO,cAAcA,EAAO,WAAW,YAAYA,CAAM,GACzDkM,EAAe,WAAU;AAAA,EAC1B;AAAA,EACD,MAAMT;AACR;AACArU,GAAS4U,IAAQ;AAAA,EACf,YAAY;AACd,CAAC;AAwpBDvQ,GAAS,MAAM,IAAIuO,GAAgB,CAAE;AACrCvO,GAAS,MAAMuQ,IAAQF,EAAM;ACnxG7B,SAASK,GAAY96B,GAAIkoB,GAAMpjC,IAAU,CAAA,GAAI;AAC3C,MAAIqoC;AACJ,QAAM,EAAE,UAAA4N,IAAWC,IAAiB,GAAGC,EAAY,IAAKn2C,GAClD0X,IAAiB;AAAA,IACrB,UAAU,CAACrX,MAAM;AACf,MAAA+1C,GAAiBhT,GAAM/iC,EAAE,UAAUA,EAAE,QAAQ;AAAA,IAC9C;AAAA,EACL,GACQg2C,IAAQ,MAAM;AAClB,UAAMx/B,IAAS,OAAOqE,KAAO,WAAW+6B,KAAY,OAAO,SAASA,EAAS,cAAc/6B,CAAE,IAAIo7B,GAAap7B,CAAE;AAChH,IAAI,CAACrE,KAAUwxB,MAAa,WAE5BA,IAAW,IAAI/C,GAASzuB,GAAQ,EAAE,GAAGa,GAAgB,GAAGy+B,EAAY,CAAE;AAAA,EAC1E,GACQI,IAAO,MAAM;AACjB,IAAAlO,KAAY,QAAgBA,EAAS,QAAO,GAC5CA,IAAW;AAAA,EACf,GACQriB,IAAS,CAAClpB,GAAM1C,MAAU;AAC9B,QAAIA,MAAU;AACZ,MAAAiuC,KAAY,QAAgBA,EAAS,OAAOvrC,GAAM1C,CAAK;AAAA;AAEvD,aAAOiuC,KAAY,OAAO,SAASA,EAAS,OAAOvrC,CAAI;AAAA,EAC7D;AACE,SAAA05C,GAAaH,CAAK,GAClBI,GAAkBF,CAAI,GACf,EAAE,MAAAA,GAAM,OAAAF,GAAO,QAAArwB;AACxB;AACA,SAASowB,GAAiBhT,GAAMyK,GAAMD,GAAI;AACxC,QAAM8I,IAAcn7C,GAAM6nC,CAAI,GACxBjiB,IAAQu1B,IAAc,CAAC,GAAGC,GAAQvT,CAAI,CAAC,IAAIuT,GAAQvT,CAAI;AAC7D,MAAIwK,KAAM,KAAKA,IAAKzsB,EAAM,QAAQ;AAChC,UAAM5J,IAAU4J,EAAM,OAAO0sB,GAAM,CAAC,EAAE,CAAC;AACvC,IAAAzlB,GAAS,MAAM;AACb,MAAAjH,EAAM,OAAOysB,GAAI,GAAGr2B,CAAO,GACvBm/B,MACFtT,EAAK,QAAQjiB;AAAA,IACrB,CAAK;AAAA,EACF;AACH;ACxCA,IAAIy1B;AACJ,MAAMC,KAAQ,IAAI,WAAW,EAAE;AAChB,SAASC,KAAM;AAE5B,MAAI,CAACF,OAEHA,KAAkB,OAAO,SAAW,OAAe,OAAO,mBAAmB,OAAO,gBAAgB,KAAK,MAAM,GAE3G,CAACA;AACH,UAAM,IAAI,MAAM,0GAA0G;AAI9H,SAAOA,GAAgBC,EAAK;AAC9B;ACXA,MAAME,KAAY,CAAA;AAElB,SAASz2C,IAAI,GAAGA,IAAI,KAAK,EAAEA;AACzB,EAAAy2C,GAAU,MAAMz2C,IAAI,KAAO,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAG3C,SAAS02C,GAAgBniC,GAAKsJ,IAAS,GAAG;AAG/C,SAAO44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI,MAAM44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI,MAAM44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI,MAAM44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,CAAC,CAAC,IAAI,MAAM44B,GAAUliC,EAAIsJ,IAAS,EAAE,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,EAAE,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,EAAE,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,EAAE,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,EAAE,CAAC,IAAI44B,GAAUliC,EAAIsJ,IAAS,EAAE,CAAC;AACnf;ACVA,IAAI84B,IAEAC,IAGAC,KAAa,GACbC,KAAa;AAEjB,SAASC,GAAGr3C,GAASs3C,GAAKn5B,GAAQ;AAChC,MAAI7d,IAAIg3C,KAAOn5B,KAAU;AACzB,QAAMtd,IAAIy2C,KAAO,IAAI,MAAM,EAAE;AAC7B,EAAAt3C,IAAUA,KAAW;AACrB,MAAIwS,IAAOxS,EAAQ,QAAQi3C,IACvBM,IAAWv3C,EAAQ,aAAa,SAAYA,EAAQ,WAAWk3C;AAInE,MAAI1kC,KAAQ,QAAQ+kC,KAAY,MAAM;AACpC,UAAMC,IAAYx3C,EAAQ,WAAWA,EAAQ,OAAO82C;AAEpD,IAAItkC,KAAQ,SAEVA,IAAOykC,KAAU,CAACO,EAAU,CAAC,IAAI,GAAMA,EAAU,CAAC,GAAGA,EAAU,CAAC,GAAGA,EAAU,CAAC,GAAGA,EAAU,CAAC,GAAGA,EAAU,CAAC,CAAC,IAGzGD,KAAY,SAEdA,IAAWL,MAAaM,EAAU,CAAC,KAAK,IAAIA,EAAU,CAAC,KAAK;AAAA,EAE/D;AAMD,MAAIC,IAAQz3C,EAAQ,UAAU,SAAYA,EAAQ,QAAQ,KAAK,OAG3D03C,IAAQ13C,EAAQ,UAAU,SAAYA,EAAQ,QAAQo3C,KAAa;AAEvE,QAAMt1C,IAAK21C,IAAQN,MAAcO,IAAQN,MAAc;AAavD,MAXIt1C,IAAK,KAAK9B,EAAQ,aAAa,WACjCu3C,IAAWA,IAAW,IAAI,SAKvBz1C,IAAK,KAAK21C,IAAQN,OAAen3C,EAAQ,UAAU,WACtD03C,IAAQ,IAINA,KAAS;AACX,UAAM,IAAI,MAAM,iDAAiD;AAGnE,EAAAP,KAAaM,GACbL,KAAaM,GACbR,KAAYK,GAEZE,KAAS;AAET,QAAME,MAAOF,IAAQ,aAAa,MAAQC,KAAS;AACnD,EAAA72C,EAAEP,GAAG,IAAIq3C,MAAO,KAAK,KACrB92C,EAAEP,GAAG,IAAIq3C,MAAO,KAAK,KACrB92C,EAAEP,GAAG,IAAIq3C,MAAO,IAAI,KACpB92C,EAAEP,GAAG,IAAIq3C,IAAK;AAEd,QAAMC,IAAMH,IAAQ,aAAc,MAAQ;AAC1C,EAAA52C,EAAEP,GAAG,IAAIs3C,MAAQ,IAAI,KACrB/2C,EAAEP,GAAG,IAAIs3C,IAAM,KAEf/2C,EAAEP,GAAG,IAAIs3C,MAAQ,KAAK,KAAM,IAE5B/2C,EAAEP,GAAG,IAAIs3C,MAAQ,KAAK,KAEtB/2C,EAAEP,GAAG,IAAIi3C,MAAa,IAAI,KAE1B12C,EAAEP,GAAG,IAAIi3C,IAAW;AAEpB,WAAS92C,IAAI,GAAGA,IAAI,GAAG,EAAEA;AACvB,IAAAI,EAAEP,IAAIG,CAAC,IAAI+R,EAAK/R,CAAC;AAGnB,SAAO62C,KAAON,GAAgBn2C,CAAC;AACjC;AC5FA,MAAMg3C,KAAa,OAAO,SAAW,OAAe,OAAO,cAAc,OAAO,WAAW,KAAK,MAAM,GACvFC,KAAA;AAAA,EACb,YAAAD;AACF;ACCA,SAASE,GAAG/3C,GAASs3C,GAAKn5B,GAAQ;AAChC,MAAI25B,GAAO,cAAc,CAACR,KAAO,CAACt3C;AAChC,WAAO83C,GAAO;AAGhB,EAAA93C,IAAUA,KAAW;AACrB,QAAMg4C,IAAOh4C,EAAQ,WAAWA,EAAQ,OAAO82C;AAK/C,MAHAkB,EAAK,CAAC,IAAIA,EAAK,CAAC,IAAI,KAAO,IAC3BA,EAAK,CAAC,IAAIA,EAAK,CAAC,IAAI,KAAO,KAEvBV,GAAK;AACP,IAAAn5B,IAASA,KAAU;AAEnB,aAAS7d,IAAI,GAAGA,IAAI,IAAI,EAAEA;AACxB,MAAAg3C,EAAIn5B,IAAS7d,CAAC,IAAI03C,EAAK13C,CAAC;AAG1B,WAAOg3C;AAAA,EACR;AAED,SAAON,GAAgBgB,CAAI;AAC7B;ACvBO,MAAMC,KAAiB,MACrBC,GAAO,GAGHC,KAAiB,MACrBC,GAAO,GCAHC,KAAe,6BACfC,KAAc,4BACdC,KAAa,2BACbC,KAAe,6BACfC,KAAc;AAiCpB,SAASC,GACd/rC,GACAgsC,GACAj/C,GACA6D,GAoBA;AACM,QAAAq7C,IAAej5C,EAAI,EAAK,GACxBk5C,IAAel5C,EAAyB,IAAI,GAC5Cm5C,IAAWn5C,EAAwB,IAAI,GACvCo5C,IAAap5C,EAAYs4C,GAAA,CAAgB,GACzCe,IAAmBr5C,EAA8B,IAAI,GACrDs5C,IAAgBt5C,EAAI,CAAC,GACrBu5C,IAAav5C,EAAIjG,EAAM,KAAK;AAEzB,WAAAy/C,EAAcj7C,GAAwBnC,GAA6B;AACnE,WAAA;AAAA,MACL,KAAKmC,EAAKxE,EAAM,QAAQ;AAAA,MACxB,OAAAqC;AAAA,MACA,KAAKmC;AAAA,IAAA;AAAA,EAET;AAEM,QAAAkI,IAAQrM,EAAS,MACd4S,EAAM,MAAM,IAAI,CAACzO,GAAMnC,MAAUo9C,EAAcj7C,GAAMnC,CAAK,CAAC,CACnE,GAEKq9C,IAA0B,CAACC,IAA2C,WAAc;AAC1E,IAAAJ,EAAA,SACT9+C,EAAYk/C,CAAQ,KACvB97C,EAAK,qBAAqB87C,CAAQ,GAEpCjxB,GAAS,MAAM;AACQ,MAAAuwB;IAAA,CACtB;AAAA,EAAA,GAGGW,IAAa,CAAC1d,MAA0B;AACjC,IAAAsd,EAAA,MAAM,IAAItd,CAAE;AAAA,EAAA,GAGnB2d,IAAe,CAAC3d,MAA0B;AACnC,IAAAsd,EAAA,MAAM,OAAOtd,CAAE;AAAA,EAAA,GAGtB4d,IAAkB,CACtBpzC,GACA8iC,GACAC,GACAsQ,IAA6C,OAC1C;AACG,UAAApD,IAAQnN,IAAWC,IAAWA,IAAWD;AAC/C,QAAIwQ,IAAWrD,IAAQ;AACvB,aAAS/1C,IAAI+1C,GAAO/1C,IAAI8F,EAAM,QAAQ9F;AACpC,MAAAsP,GAAqBxJ,EAAM9F,CAAC,GAAG5G,EAAM,eAAeggD,CAAQ,GAC5DJ,EAAWlzC,EAAM9F,CAAC,EAAE5G,EAAM,QAAQ,CAAC,GACnCggD,KACAD,EAAiB,KAAK;AAAA,QACpB,IAAIrzC,EAAM9F,CAAC,EAAE;AAAA,QACb,UAAU8F,EAAM9F,CAAC,EAAE;AAAA,MAAA,CACpB;AAEI,WAAAm5C;AAAA,EAAA,GAGHrD,IAAmB,CAACvI,GAAcD,MAAyC;AACzE,UAAA+L,IAAax+C,GAAUwR,EAAM,KAAK;AACxC,QAAIihC,KAAM,KAAKA,IAAK+L,EAAW,QAAQ;AACrC,UAAIC,IAAuC,CAAA;AAC3C,YAAMriC,IAAUoiC,EAAW,OAAO9L,GAAM,CAAC,EAAE,CAAC;AACjC,aAAA8L,EAAA,OAAO/L,GAAI,GAAGr2B,CAAO,GAC3Bpd,EAAYT,EAAM,cAAc,MACtBkgD,IAAAJ,EAAgBG,GAAY9L,GAAMD,CAAE,IAE3BwL,KACxB77C,EAAK,qBAAqBo8C,CAAU,GAC7BC;AAAA,IACT;AACA,WAAO;EAAC,GAGJC,IAAoB,CAACje,GAAuBx1B,MAA8B;AACxE,UAAA8sC,IAAM9sC,EAAM,UAAU,CAAClI,MAASA,EAAKxE,EAAM,QAAQ,MAAMkiC,CAAE;AACjE,WAAIsX,MAAQ,KAAW,OAChBA;AAAA,EAAA,GAGH4G,IAAmB,CACvB57C,GACAiI,GACAuzC,GACAK,IAAwB,SACrB;AACE,IAAA77C,EAAA,OAAO/C,GAAUgL,CAAI,GACrB7L,GAAOo/C,CAAQ,MAAGx7C,EAAK,KAAK,WAAWw7C,IACvCp/C,GAAOy/C,CAAK,KAAGT,EAAWnzC,EAAK,EAAE;AAAA,EAAA,GASlC6zC,IAAa,CACjBpe,GACAz1B,GACAuzC,IAA0B,MAC1BK,IAAwB,SACrB;AACG,UAAAJ,IAAax+C,GAAUwR,EAAM,KAAK,GAClCstC,IAAaJ,EAAkBje,GAAI+d,CAAU;AACnD,IAAI,CAACr/C,GAAO2/C,CAAU,KAAKN,EAAWM,CAAU,MAC9CH,EAAiBH,EAAWM,CAAU,GAAG9zC,GAAMuzC,GAAUK,CAAK,GAC9DX,EAAwBO,CAAU;AAAA,EACpC,GAGIO,IAAoB,CACxBn+C,GACAoK,GACAuzC,GACAK,IAAwB,SACrB;AACG,UAAAJ,IAAax+C,GAAUwR,EAAM,KAAK;AACpC,IAAAgtC,EAAW59C,CAAK,MAClB+9C,EAAiBH,EAAW59C,CAAK,GAAGoK,GAAMuzC,GAAUK,CAAK,GACzDX,EAAwBO,CAAU;AAAA,EACpC,GAMIQ,IAAgB,CAACC,GAA4Bj0C,MAAqD;AAChG,UAAAwzC,IAAax+C,GAAUwR,EAAM,KAAK;AAEpC,QAAArS,GAAO8/C,CAAW;AACT,aAAAT,EAAA,KAAKx+C,GAAUgL,CAAI,CAAC,GAC/BizC,EAAwBO,CAAU,GAC3B;AAGT,UAAMC,IAAuC,CAAA;AAEzC,WAAAD,EAAWS,CAAW,KACxBT,EAAW,OAAOS,IAAc,GAAG,GAAGj0C,CAAI,GAC1CqzC,EAAgBG,GAAYS,IAAc,GAAGA,IAAc,GAAGR,CAAU,GACxER,EAAwBO,CAAU,GAC3BC,KAEF;EAAC,GAMJS,IAAa,CAACC,GAAoCn0C,MAAqD;AACrG,UAAAwzC,IAAax+C,GAAUwR,EAAM,KAAK;AAEpC,QAAArS,GAAOggD,CAAQ;AACN,aAAAX,EAAA,KAAKx+C,GAAUgL,CAAI,CAAC,GAC/BizC,EAAwBO,CAAU,GAC3B;AAGH,UAAAM,IAAaJ,EAAkBS,GAAUX,CAAU,GACnDC,IAAuC,CAAA;AAE7C,WAAI,CAACt/C,GAAO2/C,CAAU,KAAKN,EAAWM,CAAU,KAC9CN,EAAW,OAAOM,IAAa,GAAG,GAAG9zC,CAAI,GACzCqzC,EAAgBG,GAAYM,IAAa,GAAGA,IAAa,GAAGL,CAAU,GACtER,EAAwBO,CAAU,GAC3BC,KAGF;EAAC,GAGJW,IAAa,CAAC3e,MAAoD;AAChE,UAAA+d,IAAax+C,GAAUwR,EAAM,KAAK,GAClCstC,IAAaJ,EAAkBje,GAAI+d,CAAU,GAE7CC,IAAuC,CAAA;AAE7C,WAAI,CAACt/C,GAAO2/C,CAAU,KAAKN,EAAWM,CAAU,KACnCN,EAAA,OAAOM,GAAY,CAAC,GACfT,EAAAG,GAAYM,GAAYA,GAAYL,CAAU,GAC9DL,EAAa3d,CAAE,GACfwd,EAAwBO,CAAU,GAC3BC,KAEF;EAAC,GAGJY,IAAgB,CAACz+C,MAA4C;AAC3D,UAAA49C,IAAax+C,GAAUwR,EAAM,KAAK,GAElCitC,IAAuC,CAAA;AAEzC,QAAAD,EAAW59C,CAAK,GAAG;AACrB,YAAM6/B,IAAK+d,EAAW59C,CAAK,EAAErC,EAAM,QAAQ;AAChC,aAAAigD,EAAA,OAAO59C,GAAO,CAAC,GACVy9C,EAAAG,GAAY59C,GAAOA,GAAO69C,CAAU,GACpDL,EAAa3d,CAAE,GACfwd,EAAwBO,CAAU,GAC3BC;AAAA,IACT;AACA,WAAO;EAAC,GAGJthC,KAAU,MAAM;AACpB,IAAKwgC,EAAS,SACTE,EAAiB,UACtBA,EAAiB,MAAM,QACvBA,EAAiB,QAAQ;AAAA,EAAA;AAcpB,SAAA;AAAA,IACL,OAAA5yC;AAAA,IACA,eAAA6yC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAJ;AAAA,IACA,YAAAC;AAAA,IACA,cAAAH;AAAA,IACA,cAAAC;AAAA,IACA,kBAAAG;AAAA,IACA,SApBc,MAAM;AACZ,MAAA1gC,MACaqgC;IAAA;AAAA,IAmBrB,uBAhB4B,MAAM;AAC9B,MAAAr+C,GAAOu+C,EAAa,KAAK,MACxBt7C,EAAA,YAAYs7C,EAAa,KAAK,GACnCD,EAAa,QAAQ;AAAA,IAAA;AAAA,IAcrB,SAAAtgC;AAAA,IACA,kBAAA89B;AAAA,IACA,YAAAiE;AAAA,IACA,eAAAF;AAAA,IACA,YAAAI;AAAA,IACA,eAAAC;AAAA,IACA,YAAAR;AAAA,IACA,mBAAAE;AAAA,EAAA;AAEJ;ACtTO,MAAMO,KAAwB;;;;;;;;;;;;;;;;;;;;ACiBrC,UAAM/gD,IAAQC,GAiCR4D,IAAOC,GAEPmP,IAAQ6xB,GAAM,MAAM9kC,EAAM,UAAU,GAEpC,EAAE,GAAAE,MAAMC,MAER6gD,IAAkB,CAACv0C,MAAuB;AAC9C,MAAA5I,EAAK,cAAc4I,CAAI;AAAA,IAAA,GAGnBw0C,IAAgB,CAACx0C,MAAuB;AAC5C,MAAA0yC,EAAa,QAAQ1yC,GACrByyC,EAAa,QAAQ;AAAA,IAAA,GAGjBgC,IAAc,CAACz0C,MAAuB;AAC1C,MAAA5I,EAAK,UAAU4I,CAAI;AAAA,IAAA,GAGf00C,IAAiB,MAAM;AACvB,UAAAnhD,EAAM,WAAW,SAAS,GAAG;AAC1B,QAAA6D,EAAA,aAAapC,GAAUzB,EAAM,WAAWA,EAAM,WAAW,SAAS,CAAC,CAAC,CAAC;AAC1E;AAAA,MACF;AACA,MAAA6D,EAAK,aAAa,IAAI;AAAA,IAAA,GAGlBu9C,IAAe/gD,EAAS,MACrBI,EAAYT,EAAM,kBAAkB,IAAI+gD,KAAwB1B,EAAW,QAAQr/C,EAAM,kBACjG,GAEKqhD,IAAe,MAAM;AAEzB,UADIrhD,EAAM,oBACN,CAACo/C,EAAS;AAAO;AACrB,YAAMkC,IAAiBlC,EAAS,MAAM,cAA2B,MAAML,EAAW;AAClF,MAAKuC,MACLhC,EAAiB,QAAQhD,GAAYgF,GAAgB,CAAA,GAAI;AAAA,QACvD,QAAQ,MAAM3C;AAAA,QACd,YAAYC;AAAA,QACZ,WAAWC;AAAA,QACX,aAAaC;AAAA,QACb,OAAO,OAAOpqC,MAAyB;AACjC,cAAA1U,EAAM,sBAAsBS,EAAYiU,EAAM,QAAQ,KAAKjU,EAAYiU,EAAM,QAAQ;AAAG;AAC5F,gBAAM6sC,IAAe7E,EAAiBhoC,EAAM,UAAUA,EAAM,QAAQ;AACpE,UAAA7Q,EAAK,SAAS09C,CAAY;AAAA,QAC5B;AAAA,MAAA,CACD;AAAA,IAAA,GAGG;AAAA,MACJ,OAAA70C;AAAA,MACA,eAAA6yC;AAAA,MACA,YAAAC;AAAA,MACA,kBAAA9C;AAAA,MACA,cAAAyC;AAAA,MACA,cAAAD;AAAA,MACA,SAAAtgC;AAAA,MACA,SAAA4iC;AAAA,MACA,uBAAAC;AAAA,MACA,kBAAAnC;AAAA,MACA,UAAAF;AAAA,MACA,YAAAC;AAAA,MACA,YAAAsB;AAAA,MACA,YAAAE;AAAA,MACA,YAAAP;AAAA,MACA,eAAAG;AAAA,MACA,eAAAK;AAAA,MACA,mBAAAN;AAAA,IACE,IAAAxB,GAAmB/rC,GAAOouC,GAAcrhD,GAAO6D,CAAI;AAEvD,WAAA80B,GAAgB,MAAM;AACZ,MAAA/Z;IAAA,CACT,GAED8P,GAAS,MAAM;AACb,MAAA0wB,EAAS,QAAQ,SAAS,cAAc,MAAMgC,EAAa,KAAK,GACnDC;IAAA,CACd,GAED/7C;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,OAAOmE,MAAa;AACV,QAAAya,KACJza,MAAa,MAAoBk9C;MACvC;AAAA,IAAA,GAGF/7C;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,CAACmE,MAAa;AACZ,QAAAq7C,EAAW,QAAQr7C;AAAA,MACrB;AAAA,IAAA,GAGW+xB,EAAA;AAAA,MACX,SAAAsrB;AAAA,MACA,YAAAb;AAAA,MACA,eAAAF;AAAA,MACA,YAAAI;AAAA,MACA,eAAAC;AAAA,MACA,YAAAR;AAAA,MACA,mBAAAE;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IClJYkB,KAAsB,oCACtBC,KAAqB,mCACrBC,KAAoB,kCACpBC,KAAsB,oCACtBC,KAAqB,mCACrBC,KAAsC,OAAO,IAAI,oBAAoB;AAiClE,SAAAC,GACd/uC,GACAgvC,GACAp+C,GA8BA;AACM,QAAA,EAAE,cAAAoK,MAAiBX,MAEnB40C,IAAoBj8C,EAA8B,CAAA,CAAE,GACpDs5C,IAAgBt5C,EAAI,CAAC,GACrBi5C,IAAej5C,EAAI,EAAK,GACxBk5C,IAAel5C,EAA+B,IAAI,GAClDk8C,IAAWl8C,EAAI,EAAK,GACpBm5C,IAAWn5C,EAAwB,IAAI,GACvCo5C,IAAap5C,EAAYs4C,GAAA,CAAgB,GAEzCmB,IAA0B,CAACC,IAAuC,WAAc;AACtE,IAAAJ,EAAA,SACT9+C,EAAYk/C,CAAQ,KACvB97C,EAAK,qBAAqB87C,CAAQ,GAEpCjxB,GAAS,MAAM;AACS,MAAAuzB;IAAA,CACvB;AAAA,EAAA,GAGGT,IAAU,MAAM;AACZ,IAAA5iC,KACcqjC;EAAA,GAGlBR,IAAwB,MAAM;AAC9B,IAAA7gD,GAAOu+C,EAAa,KAAK,MACxBt7C,EAAA,YAAYs7C,EAAa,KAAK,GACnCD,EAAa,QAAQ;AAAA,EAAA,GAGjBtgC,IAAU,MAAM;AACpB,IAAKwgC,EAAS,UACI8C,EAAA,MAAM,QAAQ,CAAC19C,MAAS;AACxC,MAAAA,EAAK,KAAK;AAAA,IAAA,CACX,GACD09C,EAAkB,QAAQ;EAAC,GAGvBtC,IAAa,CAACp7C,GAA0B49C,MAA+B;AAC3E,IAAA59C,EAAK,KAAK,QAAQ,IAClB49C,EAAW,KAAK,QAAQ;AAAA,EAAA,GAGpBC,IAA4B,CAChC31C,GACA8iC,GACAC,GACAwQ,GACAF,IAA6C,OAC1C;AACG,UAAApD,IAAQnN,IAAWC,IAAWA,IAAWD;AAC/C,QAAIwQ,IAAWrD,IAAQ;AACvB,aAAS/1C,IAAI+1C,GAAO/1C,IAAI8F,EAAM,QAAQ9F;AACpC,MAAI8F,EAAM9F,CAAC,EAAE,KAAK,aAAao5C,MACvBtzC,EAAA9F,CAAC,EAAE,KAAK,WAAWo5C,GACdJ,EAAAlzC,EAAM9F,CAAC,GAAGq5C,CAAU,GAC/BF,EAAiB,KAAK;AAAA,QACpB,IAAIrzC,EAAM9F,CAAC,EAAE,KAAK;AAAA,QAClB,UAAU8F,EAAM9F,CAAC,EAAE,KAAK;AAAA,MAAA,CACzB,IAEHo5C;AAAA,EACF,GAEIsC,IAAiC,CACrCC,GACAC,GACAC,GACAC,GACAzC,GACAF,IAA6C,OAC1C;AACC,QAAAwC,EAAY,SAAS,GAAG;AAC1B,UAAIvC,IAAWyC,IAAc;AAC7B,eAAS77C,IAAI67C,GAAa77C,IAAI27C,EAAY,QAAQ37C;AAChD,QAAI27C,EAAY37C,CAAC,EAAE,KAAK,aAAao5C,MACvBuC,EAAA37C,CAAC,EAAE,KAAK,WAAWo5C,GACpBJ,EAAA2C,EAAY37C,CAAC,GAAGq5C,CAAU,GACrCF,EAAiB,KAAK;AAAA,UACpB,IAAIwC,EAAY37C,CAAC,EAAE,KAAK;AAAA,UACxB,UAAU27C,EAAY37C,CAAC,EAAE,KAAK;AAAA,QAAA,CAC/B,IAEHo5C;AAAA,IAEJ;AACI,QAAAwC,EAAY,SAAS,GAAG;AAC1B,UAAIxC,IAAW0C,IAAc;AAC7B,eAAS97C,IAAI87C,GAAa97C,IAAI47C,EAAY,QAAQ57C;AAChD,QAAI47C,EAAY57C,CAAC,EAAE,KAAK,aAAao5C,MACvBwC,EAAA57C,CAAC,EAAE,KAAK,WAAWo5C,GACpBJ,EAAA4C,EAAY57C,CAAC,GAAGq5C,CAAU,GACrCF,EAAiB,KAAK;AAAA,UACpB,IAAIyC,EAAY57C,CAAC,EAAE,KAAK;AAAA,UACxB,UAAU47C,EAAY57C,CAAC,EAAE,KAAK;AAAA,QAAA,CAC/B,IAEHo5C;AAAA,IAEJ;AAAA,EAAA,GAGI2C,IAAuB,CAC3BzX,GACAx+B,GACAk2C,IAAgB,MACL;AACX,QAAI1X,MAAW;AAAa,aAAA0X;AACtB,UAAAC,IAAan2C,EAAM,KAAK,CAAClI,MAASA,EAAK,KAAK,OAAO0mC,CAAM;AAC/D,WAAK2X,KACLD,KACOD,EAAqBE,EAAW,KAAK,QAAQn2C,GAAOk2C,CAAK,KAFxCA;AAAA,EAEwC,GAG5DE,IAAsB,CAACnX,GAAiDiX,IAAgB,MAAc;AAC1G,QAAIG,IAAaH;AACb,QAAAjX,KAAYA,EAAS,QAAQ;AAC/B,MAAAiX;AACA,iBAAWz4B,KAASwhB,GAAU;AAC5B,cAAMqX,IAAeF,EAAoB34B,EAAM,UAAUy4B,CAAK;AACjD,QAAAG,IAAA,KAAK,IAAIA,GAAYC,CAAY;AAAA,MAChD;AAAA,IACF;AACO,WAAAD;AAAA,EAAA,GAMHE,IAAwB,CAC5Bz+C,GACAkI,GACAk2C,IAAgB,MACL;AACX,UAAMM,IAAcP,EAAqBn+C,EAAK,KAAK,QAAQkI,CAAK,GAC1Dq2C,IAAaD,EAAoBt+C,EAAK,UAAUo+C,CAAK;AAC3D,WAAOM,IAAcH;AAAA,EAAA,GAGjBI,IAAe,CACnBjhB,GACA/mB,GACA+vB,IAAoC,SACgD;AACpF,eAAW1mC,KAAQ2W,GAAK;AAClB,UAAA3W,EAAK,KAAK,OAAO09B;AACZ,eAAA;AAAA,UACL,WAAW19B;AAAA,UACX,YAAY0mC;AAAA,QAAA;AAGhB,UAAI1mC,EAAK,UAAU;AACjB,cAAM4+C,IAAkBD,EAAajhB,GAAI19B,EAAK,UAAUA,CAAI;AACxD,YAAA4+C,EAAgB,cAAc;AACzB,iBAAAA;AAAA,MAEX;AAAA,IACF;AAEO,WAAA;AAAA,MACL,WAAW;AAAA,MACX,YAAY;AAAA,IAAA;AAAA,EACd;AA2QK,SAAA;AAAA,IACL,UAAAjB;AAAA,IACA,UAAA/C;AAAA,IACA,YAAAC;AAAA,IACA,cAAAH;AAAA,IACA,cAAAC;AAAA,IACA,mBAAA+C;AAAA,IACA,eAAA3C;AAAA,IACA,SAAAiC;AAAA,IACA,uBAAAC;AAAA,IACA,SAAA7iC;AAAA,IACA,kBAlRuB,CACvBykC,GACAzC,GACAnR,GACAD,GACA8T,MAC6B;AACvB,YAAArD,IAA6Bx+C,GAAUwR,EAAM,KAAK,GAElD,EAAE,WAAWswC,GAAY,YAAYC,MAAyBL,EAAaE,GAAWpD,EAAW,QAAQ;AAE/G,UAAI,CAACsD;AACH,uBAAQ,MAAM,wBAAwB,GAC/B;AAGT,YAAMrD,IAAuC,CAAA;AAG7C,UAAIU,MAAa,MAAM;AACrB,YAAIhgD,GAAO4iD,CAAoB,KAAK/T,MAAaD;AAE/C,iBAAO;AAEL,YAAA5uC,GAAO4iD,CAAoB,GAAG;AAEhC,gBAAMhK,KAAMyG,EAAW,SAAS,QAAQsD,CAAU;AAClD,cAAI/J,OAAQ,IAAI;AACd,kBAAM37B,KAAUoiC,EAAW,SAAS,OAAOzG,IAAK,CAAC,EAAE,CAAC;AACpD,mBAAAyG,EAAW,SAAS,OAAOxQ,GAAU,GAAG5xB,EAAO,GAC/CwkC,EAA0BpC,EAAW,UAAUzG,IAAK/J,GAAUwQ,GAAYC,CAAU,GACpFR,EAAwBO,CAAU,GAC3B;UACT;AACA,yBAAQ,MAAM,wBAAwB,GAC/B;QACT;AACA,YAAI,CAACr/C,GAAO4iD,CAAoB,KAAKA,EAAqB,UAAU;AAElE,gBAAMhK,KAAMgK,EAAqB,SAAS,QAAQD,CAAU;AAC5D,cAAI/J,OAAQ,IAAI;AACd,YAAA+J,EAAW,KAAK,SAAS;AACzB,kBAAM1lC,KAAU2lC,EAAqB,SAAS,OAAOhK,IAAK,CAAC,EAAE,CAAC;AAC9D,mBAAAyG,EAAW,SAAS,OAAOxQ,GAAU,GAAG5xB,EAAO,GAC/CykC;AAAA,cACErC,EAAW;AAAA,cACXuD,EAAqB;AAAA,cACrB/T;AAAA,cACA+J;AAAA,cACAyG;AAAA,cACAC;AAAA,YAAA,GAEFR,EAAwBO,CAAU,GAC3B;UACT;AACA,yBAAQ,MAAM,wBAAwB,GAC/B;QACT;AACA,uBAAQ,MAAM,wBAAwB,GAC/B;MACT;AAEA,YAAM,EAAE,WAAWwD,MAAeN,EAAavC,GAAUX,EAAW,QAAQ;AAE5E,UAAI,CAACwD,KAAc,CAACA,EAAW;AAGL,eAAA/D,KACjB;AAGL,UAAA,CAAC9+C,GAAO4iD,CAAoB,KAAKA,EAAqB,KAAK,OAAOC,EAAW,KAAK,MAAMhU,MAAaD;AAEvG,eAAO;AAGL,UAAAgU,KAAwBA,EAAqB,YAAYC,EAAW,KAAK,OAAOD,EAAqB,KAAK,IAAI;AAEhH,cAAMhK,KAAMgK,EAAqB,SAAS,QAAQD,CAAU;AAC5D,YAAI/J,OAAQ,IAAI;AACd,gBAAM37B,KAAU2lC,EAAqB,SAAS,OAAOhK,IAAK,CAAC,EAAE,CAAC;AAC9D,UAAAiK,EAAW,SAAS,OAAOhU,GAAU,GAAG5xB,EAAO,GAC/CwkC,EAA0BoB,EAAW,UAAUjK,IAAK/J,GAAUwQ,GAAYC,CAAU;AAAA,QACtF;AAAA,MAAA,WAEAsD,KACAA,EAAqB,YACrBC,EAAW,KAAK,OAAOD,EAAqB,KAAK,IACjD;AAEA,cAAMhK,KAAMgK,EAAqB,SAAS,QAAQD,CAAU;AAC5D,YAAI/J,OAAQ,IAAI;AACH,UAAA+J,EAAA,KAAK,SAASE,EAAW,KAAK;AACzC,gBAAM5lC,KAAU2lC,EAAqB,SAAS,OAAOhK,IAAK,CAAC,EAAE,CAAC;AAC9D,UAAAiK,EAAW,SAAS,OAAOhU,GAAU,GAAG5xB,EAAO,GAC/CykC;AAAA,YACEmB,EAAW;AAAA,YACXD,EAAqB;AAAA,YACrB/T;AAAA,YACA+J;AAAA,YACAyG;AAAA,YACAC;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA,OACK;AAEL,cAAM1G,KAAMyG,EAAW,SAAS,QAAQsD,CAAU;AAClD,YAAI/J,OAAQ,IAAI;AACH,UAAA+J,EAAA,KAAK,SAASE,EAAW,KAAK;AACzC,gBAAM5lC,KAAUoiC,EAAW,SAAS,OAAOzG,IAAK,CAAC,EAAE,CAAC;AACpD,UAAAiK,EAAW,SAAS,OAAOhU,GAAU,GAAG5xB,EAAO,GAC/CykC,EAA+BmB,EAAW,UAAUxD,EAAW,UAAUxQ,GAAU+J,IAAKyG,GAAYC,CAAU;AAAA,QAChH;AAAA,MACF;AAEA,aAAI+C,EAAsBQ,GAAYxD,EAAW,QAAQ,IAAIqD,KAC3Dr1C,EAAa,qCAAqC,GAC1ByxC,KACjB,OAETA,EAAwBO,CAAU,GAC3BC;AAAA,IAAA;AAAA,IA0JP,YA1FiB,CACjBU,GACAn0C,GACAi3C,MAC6B;AACvB,YAAAzD,IAA6Bx+C,GAAUwR,EAAM,KAAK,GAElD0wC,IAAiC;AAAA,QACrC,MAAMliD,GAAUgL,CAAI;AAAA,QACpB,UAAUi3C,IAAkB,CAAK,IAAA;AAAA,QACjC,MAAM;AAAA,UACJ,OAAO;AAAA,QACT;AAAA,MAAA;AAGE,UAAA9iD,GAAOggD,CAAQ;AACN,eAAAX,EAAA,SAAS,KAAK0D,CAAU,GACnCjE,EAAwBO,CAAU,GAC3B;AAGH,YAAA,EAAE,WAAWwD,GAAY,YAAYG,MAAyBT,EAAavC,GAAUX,EAAW,QAAQ;AAE9G,UAAI,CAACwD;AACH,eAAAx1C,EAAa,mCAAmC,GACzC;AAET,MAAA01C,EAAW,KAAK,WAAWF,EAAW,KAAK,WAAW,GAC3CE,EAAA,KAAK,SAASF,EAAW,KAAK;AAEzC,YAAMvD,IAAuC,CAAA;AAE7C,UAAI,CAACt/C,GAAOgjD,CAAoB,KAAKA,EAAqB,UAAU;AAClE,cAAMpK,IAAMoK,EAAqB,SAAS,QAAQH,CAAU,IAAI;AAChE,QAAIjK,MAAQ,OACVoK,EAAqB,SAAS,OAAOpK,GAAK,GAAGmK,CAAU,GACvDtB,EAA0BuB,EAAqB,UAAUpK,GAAKA,GAAKyG,GAAYC,CAAU;AAAA,MAC3F,OACK;AAEL,cAAM1G,IAAMyG,EAAW,SAAS,QAAQwD,CAAU,IAAI;AACtD,QAAIjK,MAAQ,OACVyG,EAAW,SAAS,OAAOzG,GAAK,GAAGmK,CAAU,GAC7CtB,EAA0BpC,EAAW,UAAUzG,GAAKA,GAAKyG,GAAYC,CAAU;AAAA,MAEnF;AAEA,aAAAR,EAAwBO,CAAU,GAC3BC;AAAA,IAAA;AAAA,IA2CP,cAxCmB,CAACU,GAA6Bn0C,GAAWi3C,MAA6B;AACnF,YAAAzD,IAA6Bx+C,GAAUwR,EAAM,KAAK,GAElD,EAAE,WAAWwwC,MAAeN,EAAavC,GAAUX,EAAW,QAAQ;AAE5E,UAAI,CAACwD,GAAY;AACf,QAAAx1C,EAAa,mCAAmC;AAChD;AAAA,MACF;AACA,YAAM01C,IAAiC;AAAA,QACrC,MAAMliD,GAAUgL,CAAI;AAAA,QACpB,UAAUi3C,IAAkB,CAAK,IAAA;AAAA,QACjC,MAAM;AAAA,UACJ,OAAO;AAAA,QACT;AAAA,MAAA;AAES,MAAAC,EAAA,KAAK,KAAKl3C,EAAK,IACfk3C,EAAA,KAAK,WACdF,EAAW,YAAYA,EAAW,SAAS,SAAS,IAAIA,EAAW,SAAS,SAAS,IAAI,GAChFE,EAAA,KAAK,SAASF,EAAW,KAAK,IAErC,CAAChjD,EAAYgjD,EAAW,QAAQ,KAAKA,EAAW,SAAS,WAAW,MAC3DA,EAAA,SAAS,KAAKE,CAAU,GACnCjE,EAAwBO,CAAU;AAAA,IACpC;AAAA,IAiBA,YAzJiB,CAAC/d,MAAoD;AAChE,YAAA+d,IAA6Bx+C,GAAUwR,EAAM,KAAK,GAClD,EAAE,WAAA4wC,GAAW,YAAAhB,MAAeM,EAAajhB,GAAI+d,EAAW,QAAQ;AACtE,UAAI,CAAC4D;AACH,eAAO;AAGT,YAAM3D,IAAuC,CAAA;AAEzC,UAAA2C,KAAcA,EAAW,UAAU;AACrC,cAAMrJ,IAAMqJ,EAAW,SAAS,QAAQgB,CAAS;AACjD,QAAIrK,MAAQ,OACCqJ,EAAA,SAAS,OAAOrJ,GAAK,CAAC,GACjC6I,EAA0BQ,EAAW,UAAUrJ,GAAKA,GAAKyG,GAAYC,CAAU;AAAA,MACjF,OACK;AACL,cAAM1G,IAAMyG,EAAW,SAAS,QAAQ4D,CAAS;AACjD,QAAIrK,MAAQ,OACCyG,EAAA,SAAS,OAAOzG,GAAK,CAAC,GACjC6I,EAA0BpC,EAAW,UAAUzG,GAAKA,GAAKyG,GAAYC,CAAU;AAAA,MAEnF;AAEA,aAAAR,EAAwBO,CAAU,GAC3BC;AAAA,IAAA;AAAA,IAkIP,YAvHiB,CACjBhe,GACAz1B,GACAk/B,IAAyD,MACzDqU,IAA0B,MAC1BK,IAAwB,MACxBnV,IAA+C,WAC5C;AACG,YAAA+U,IAA6Bx+C,GAAUwR,EAAM,KAAK,GAElD,EAAE,WAAA4wC,EAAU,IAAIV,EAAajhB,GAAI+d,EAAW,QAAQ;AAC1D,MAAK4D,MAGKA,EAAA,OAAOpiD,GAAUgL,CAAI,GAC1B7L,GAAO+qC,CAAQ,MAAGkY,EAAU,WAAWlY,IACvC/qC,GAAOo/C,CAAQ,MAAG6D,EAAU,KAAK,WAAW7D,IAC5Cp/C,GAAOy/C,CAAK,MAAGwD,EAAU,KAAK,QAAQxD,IACvC,CAACz/C,GAAOy/C,CAAK,KAAKA,MAAU,OAAMJ,EAAW,KAAK,QAAQ,KACzDx/C,EAAYyqC,CAAM,MAAG2Y,EAAU,KAAK,SAAS3Y,IAClDwU,EAAwBO,CAAU;AAAA,IAAA;AAAA,EAmGlC;AAEJ;;;;;;;;;;;;;;ACvgBA,UAAMjgD,IAAQC,GAYR4D,IAAOC,GAOPm9C,IAAgB,CAACz8C,MAA0D;AAC/E,UAAI,UAAUA,GAAM;AAClB,QAAAX,EAAK,YAAYW,CAAI;AACrB;AAAA,MACF;AACA,MAAAX,EAAK,YAAYpC,GAAUzB,EAAM,IAAI,CAAC;AAAA,IAAA,GAGlCkhD,IAAc,CAAC18C,MAA0D;AAC7E,UAAI,UAAUA,GAAM;AAClB,QAAAX,EAAK,UAAUW,CAAI;AACnB;AAAA,MACF;AACA,MAAAX,EAAK,UAAUpC,GAAUzB,EAAM,IAAI,CAAC;AAAA,IAAA,GAGhCghD,IAAkB,CAACx8C,MAA0D;AACjF,UAAI,UAAUA,GAAM;AAClB,QAAAX,EAAK,cAAcW,CAAI;AACvB;AAAA,MACF;AACA,MAAAX,EAAK,cAAcpC,GAAUzB,EAAM,IAAI,CAAC;AAAA,IAAA,GAGpC8jD,IAAkB,CAACt/C,MAA0D;AACjF,UAAI,UAAUA,GAAM;AAClB,QAAAX,EAAK,cAAcW,CAAI;AACvB;AAAA,MACF;AACA,MAAAX,EAAK,cAAcpC,GAAUzB,EAAM,IAAI,CAAC;AAAA,IAAA,GAGpC+jD,IAAQ//C,GAAe+9C,IAAe,CAAC;AAC7B,IAAAn9C,GAAAm9C,IAAegC,IAAQ,CAAC;AAElC,UAAAC,IAA6B3jD,EAAS,MAExCL,EAAM,sBACN,CAACS,EAAYT,EAAM,KAAK,QAAQ,KAChCA,EAAM,KAAK,SAAS,WAAW,KAC/B+jD,IAAQ/jD,EAAM,QAEjB,GAEK,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/Cd,UAAMH,IAAQC,GA0BR4D,IAAOC,GAEPmP,IAAQ6xB,GAAM,MAAM9kC,EAAM,UAAU,GAEpCghD,IAAkB,CAACv0C,MAA6B;AACpD,MAAA5I,EAAK,cAAc4I,CAAI;AAAA,IAAA,GAGnBq3C,IAAkB,CAACr3C,MAA6B;AACpD,MAAA5I,EAAK,cAAc4I,CAAI;AAAA,IAAA,GAGnBw0C,IAAgB,CAACx0C,MAA6B;AAClD,MAAA0yC,EAAa,QAAQ1yC,GACrByyC,EAAa,QAAQ;AAAA,IAAA,GAGjBgC,IAAc,CAACz0C,MAA6B;AAChD,MAAA5I,EAAK,UAAU4I,CAAI;AAAA,IAAA,GAGf00C,IAAiB,MAAM;AAC3B,UAAInhD,EAAM,WAAW,SAAS,SAAS,GAAG;AACnC,QAAA6D,EAAA,aAAapC,GAAUzB,EAAM,WAAW,SAASA,EAAM,WAAW,SAAS,SAAS,CAAC,CAAC,CAAC;AAC5F;AAAA,MACF;AACA,MAAA6D,EAAK,aAAa,IAAI;AAAA,IAAA,GAGlB,EAAE,GAAA3D,MAAMC,MAERihD,IAAe/gD,EAAS,MACrBI,EAAYT,EAAM,kBAAkB,IAAI+gD,KAAwB1B,EAAW,QAAQr/C,EAAM,kBACjG,GAEKikD,IAAc5jD,EAAS,MACpBL,EAAM,gBAAgB,OAAOmiD,EAAS,QAAQniD,EAAM,gBAAgB,eAAe,GAC3F,GAEKkkD,IAAgB,MAAM;AAE1B,UADIlkD,EAAM,oBACN,CAACo/C,EAAS;AAAO;AACf,YAAA+E,IAAkB,MAAM,KAAK/E,EAAS,MAAM,iBAA8B,MAAM0C,EAAkB,CAAC;AACzG,MAAAI,EAAkB,QAAQ;AAC1B,eAASt7C,IAAI,GAAGA,IAAIu9C,EAAgB,QAAQv9C;AACxB,QAAAs7C,EAAA,MAAMt7C,CAAC,IAAI01C,GAAY6H,EAAgBv9C,CAAC,GAAG,IAAI;AAAA,UAC/D,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,UACP;AAAA,UACA,QAAQ,MAAM86C;AAAA,UACd,YAAYC;AAAA,UACZ,WAAWC;AAAA,UACX,aAAaC;AAAA,UACb,gBAAgB;AAAA,UAChB,eAAe;AAAA,UACf,eAAe;AAAA,UACf,mBAAmB;AAAA,UACnB,UAAU,MAAM;AAAA,UAAC;AAAA,UACjB,SAAS,MAAM;AACb,YAAAM,EAAS,QAAQ;AAAA,UACnB;AAAA,UACA,OAAO,CAACztC,MAAyB;AAC/B,YAAAytC,EAAS,QAAQ,IACjBzzB,GAAS,MAAM;AACb,oBAAMwT,IAAKngC,GAAY2S,EAAM,KAAK,aAAa,SAAS,KAAK,GAAG;AAChE,kBAAIwtB,IAAK;AAAG;AACZ,oBAAMuN,IAAW/6B,EAAM;AACvB,kBAAIjU,EAAYgvC,CAAQ;AAAG;AAC3B,oBAAMD,IAAW96B,EAAM;AACvB,kBAAIjU,EAAY+uC,CAAQ;AAAG;AAC3B,kBAAI4U,IAA0B;AACxB,oBAAAhU,KAAW17B,EAAM,KAAK;AACxB,cAAC9T,GAAOwvC,EAAQ,MAClBgU,IAAWriD,GAAYquC,GAAS,aAAa,SAAS,KAAK,GAAG,GAC1DgU,MAAa,MAAcA,IAAA;AAEjC,oBAAM7C,KAAe7E,EAAiBxa,GAAIkiB,GAAU3U,GAAUD,GAAUxvC,EAAM,QAAQ;AACtF,cAAA6D,EAAK,SAAS09C,EAAY;AAAA,YAAA,CAC3B;AAAA,UACH;AAAA,QAAA,CACD;AAAA,IACH,GAGI;AAAA,MACJ,UAAAY;AAAA,MACA,UAAA/C;AAAA,MACA,YAAAC;AAAA,MACA,cAAAH;AAAA,MACA,cAAAC;AAAA,MACA,eAAAI;AAAA,MACA,kBAAA7C;AAAA,MACA,YAAAiE;AAAA,MACA,cAAA0D;AAAA,MACA,YAAAxD;AAAA,MACA,YAAAP;AAAA,MACA,SAAA1hC;AAAA,MACA,SAAA4iC;AAAA,MACA,uBAAAC;AAAA,MACA,mBAAAS;AAAA,IACE,IAAAF,GAAyB/uC,GAAOixC,GAAergD,CAAI;AAEvD,WAAA80B,GAAgB,MAAM;AACZ,MAAA/Z;IAAA,CACT,GAED8P,GAAS,MAAM;AACb,MAAA0wB,EAAS,QAAQ,SAAS,cAAc,MAAMgC,EAAa,KAAK,GAClD8C;IAAA,CACf,GAED5+C;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,OAAOmE,MAAa;AACV,QAAAya,MACJza,MAAa,MAAqB+/C;MACxC;AAAA,IAAA,GAGWhuB,EAAA;AAAA,MACX,SAAAsrB;AAAA,MACA,YAAAb;AAAA,MACA,cAAA0D;AAAA,MACA,YAAAxD;AAAA,MACA,YAAAP;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxKD,UAAMtgD,IAAQC,GAsBR4D,IAAOC,GASP0iC,IAAcvgC,EAAI,EAAK,GACvB+vB,IAAS31B,EAAS;AAAA,MACtB,MAAM;AACA,eAAAI,EAAYT,EAAM,UAAU,IAAUwmC,EAAY,QAC/CxmC,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAmB;AACrB,QAAAqiC,EAAY,QAAQriC,GACpBN,EAAK,qBAAqBM,CAAQ;AAAA,MACpC;AAAA,IAAA,CACD,GAEKmgD,IAAqBjkD,EAAS;AAAA,MAClC,KAAK,MAAML,EAAM;AAAA,MACjB,KAAK,CAACmE,MAAa;AACjB,QAAAN,EAAK,qBAAqB,EAAE,GAAGjC,GAAMuC,CAAQ,EAAG,CAAA;AAAA,MAClD;AAAA,IAAA,CACD,GAEKghC,IAAcl/B,EAAI,EAAI,GACtBs+C,IAAgBt+C,EAAI,EAAK,GAEzB,EAAE,GAAA/F,MAAMC,MAERqkD,IAAqBnkD,EAAS,MAC3BL,EAAM,cAAc,MAC5B,GAEK8mC,IAAiBzmC,EAAS,MACvBmkD,EAAmB,QAAQxkD,EAAM,YAAYwkD,EAAmB,QAAQxkD,EAAM,QACtF,GAEKiP,IAAS,MAAM;AACnB,MAAApL,EAAK,QAAQ,GACbshC,EAAY,QAAQ,IACpBnP,EAAO,QAAQ;AAAA,IAAA,GAGXqP,IAAgB,MAAM;AACd,MAAAF,EAAA,QAAQ,CAACA,EAAY;AAAA,IAAA,GAG7Bj2B,IAAU,MAAM;AACpB,MAAA8mB,EAAO,QAAQ;AAAA,IAAA,GAGX1mB,IAAY,MAAM;AACtB,MAAAzL;AAAA,QACE;AAAA,QACA7D,EAAM,cAAc,IAAI,CAACwE,MAAS5C,GAAM4C,CAAI,CAAC;AAAA,MAAA,GAEvC0K;IAAA,GAGJs0B,IAAgB,MAAM;AAC1B,MAAA3/B,EAAK,iBAAiB;AAAA,IAAA,GAGlB4gD,IAAe,MAAM;AACzB,MAAA5gD,EAAK,cAAc;AAAA,IAAA,GAGfiB,IAAWzE,EAAS,MACjB,KAAK,KAAKikD,EAAmB,MAAM,aAAaA,EAAmB,MAAM,WAAW,CAC5F,GAEKI,IAAcrkD,EAAS,MACpB,EACJO,GAAO0jD,EAAmB,MAAM,WAAW,KAAKA,EAAmB,MAAM,SAASx/C,EAAS,SAC5Fw/C,EAAmB,MAAM,gBAAgB,GAE5C,GAEK5d,IAAsB,CAACC,MAA4B;AACvD,MAAIA,KAAkB+d,EAAY,SAAS,CAAC1kD,EAAM,WAClCwjC;IAChB;AAGW,WAAAtN,EAAA;AAAA,MACX,MAAMjnB;AAAA,IAAA,CACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICvHK01C,KAAU1+C,EAAI,EAAK;AAElB,SAAS2+C,KAAoB;AAK3B,SAAA;AAAA,IACL,SAAAD;AAAA,IACA,YANiB,MAAM;AACf,MAAAA,GAAA,QAAQ,CAACA,GAAQ;AAAA,IAAA;AAAA,EAKzB;AAEJ;ACTO,MAAME,KAA4B;AAAA,EACvC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AACX,GACaC,KAAmCD,GAA0B;AAGnE,SAASE,KAA+B;AACvC,QAAA,EAAE,MAAM5kD,MACR6kD,IAAmC/+C,EAAwD;AAAA,IAC/F;AAAA,MACE,OAAO4+C,GAA0B;AAAA,MACjC,OAAO,EAAE,sCAAsC;AAAA,IACjD;AAAA,IACA;AAAA,MACE,OAAOA,GAA0B;AAAA,MACjC,OAAO,EAAE,uCAAuC;AAAA,IAClD;AAAA,IACA;AAAA,MACE,OAAOA,GAA0B;AAAA,MACjC,OAAO,EAAE,2CAA2C;AAAA,IACtD;AAAA,IACA;AAAA,MACE,OAAOA,GAA0B;AAAA,MACjC,OAAO,EAAE,uCAAuC;AAAA,IAClD;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,kCAAAG;AAAA,IACA,oCANyC,CAACtkD,MACnCskD,EAAiC,MAAM,KAAK,CAACxgD,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKjF;AAEJ;ACvCA,MAAM,KAAER,GAAE,IAAI2K,GAAK;AAEZ,SAASo6C,KAAqB;AAGnC,SAFwBz1B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExBglD,IAAS;AAAA,IAC9B,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAEhlD,GAAE,IAAI2K,GAAK;AAEZ,SAASs6C,KAAmB;AAGjC,SAFwB31B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExBoD,IAAO;AAAA,IAC5B,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACRA,MAAM,KAAEpD,GAAE,IAAI2K,GAAK;AAEZ,SAASu6C,KAAuB;AAGrC,SAFwB51B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExBuC,IAAW;AAAA,IAChC,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAEvC,GAAE,IAAI2K,GAAK;AAEZ,SAASw6C,KAAsB;AAGpC,SAFwB71B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExBolD,IAAU;AAAA,IAC/B,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAEplD,GAAE,IAAI2K,GAAK;AAEZ,SAAS06C,KAAuB;AAGrC,SAFwB/1B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExBslD,IAAW;AAAA,IAChC,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAEtlD,GAAE,IAAI2K,GAAK;AAEZ,SAAS46C,KAAsB;AAGpC,SAFwBj2B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExBwlD,IAAU;AAAA,IAC/B,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACTA,MAAM,KAAExlD,GAAE,IAAI2K,GAAK;AAEZ,SAAS86C,KAAqB;AAGnC,SAFwBn2B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExB0lD,IAAS;AAAA,IAC9B,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACRA,MAAM,KAAE1lD,GAAE,IAAI2K,GAAK;AAEZ,SAASg7C,KAAsB;AAGpC,SAFwBr2B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExB4lD,IAAU;AAAA,IAC/B,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACRA,MAAM,KAAE5lD,GAAE,IAAI2K,GAAK;AAEZ,SAASk7C,KAAkB;AAGhC,SAFwBv2B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExB8lD,GAAQ,MAAM,gBAAgB,GAAG;AAAA,IACtD,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACPA,MAAM,KAAE9lD,GAAE,IAAI2K,GAAK;AAEZ,SAASo7C,KAAmC;AACjD,QAAMC,IAAkB12B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,GAEzCimD,IAAiC,CAACj5B,GAAaC,MAC5C,CAACzsB,MACN,CAACslD,GAAQ,IAAItlD,CAAK,KAAKA,EAAM,MAAM,CAAC8D,MAASA,EAAK,UAAU1C,EAAMorB,CAAG,KAAK1oB,EAAK,UAAU1C,EAAMqrB,CAAG,CAAC;AAkBvG,SAAO+4B,EAhB6B,CAACh5B,GAAaC,OACzC;AAAA,IACL,YAAYg5B,EAA+Bj5B,GAAKC,CAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMnD,SAAS;AAAA,MACP,KAAAD;AAAA,MACA,KAAAC;AAAA,MACA,MAAM;AAAA,IACR;AAAA,EAAA,IAIgD;AAAA,IAClD,eAAe;AAAA,IACf,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;AC9BA,MAAM,KAAEjtB,GAAE,IAAI2K,GAAK;AAEZ,SAASu7C,KAAiB;AAG/B,SAFwB52B,GAAkB,EAAEtvB,GAAAA,GAAG,CAAA,EAExBmmD,IAAK;AAAA,IAC1B,aAAa,MAAM;AAAA,EAAA,CACpB;AACH;ACEO,SAASC,KAAc;AACrB,SAAA;AAAA,IACL,UAAUT,GAAoB;AAAA,IAC9B,YAAYt2B,GAAsB;AAAA,IAClC,WAAWg2B,GAAqB;AAAA,IAChC,WAAWH,GAAqB;AAAA,IAChC,UAAUK,GAAoB;AAAA,IAC9B,UAAUJ,GAAoB;AAAA,IAC9B,SAASJ,GAAmB;AAAA,IAC5B,OAAOE,GAAiB;AAAA,IACxB,SAASQ,GAAmB;AAAA,IAC5B,MAAMI,GAAgB;AAAA,IACtB,KAAKK,GAAe;AAAA,IACpB,uBAAuBH,GAAiC;AAAA,EAAA;AAE5D;;;;;;;;;;;;;;;;;;;AClBA,UAAMjmD,IAAQC,GAUR4D,IAAOC,GAKPyiD,IAAW,CAAC7lD,MACZV,EAAM,OAAO,WAAW,SAAS6kD,GAA0B,UACtD,SAASnkD,CAAK,IAEhBA,GAGH8lD,IAAmB,CAAC9lD,MAAe;AAClC,MAAAmD,EAAA,qBAAqB,EAAE,UAAU7D,EAAM,OAAO,UAAU,OAAOumD,EAAS7lD,CAAK,EAAG,CAAA;AAAA,IAAA,GAGjFmE,IAAqBxE,EAAS,MAAM;AAClC,YAAAK,IAAQiB,GAAQ3B,EAAM,UAAU,IAAI4B,GAAM5B,EAAM,UAAU,IAAIA,EAAM;AAC1E,aAAIA,EAAM,OAAO,WAAW,SAAS6kD,GAA0B,eAAevjD,GAAcZ,CAAK,IAAU,KACpGA;AAAA,IAAA,CACR,GAEK,EAAE,WAAA+B,GAAW,WAAA+iD,GAAW,YAAA/1B,GAAY,UAAAi2B,GAAU,UAAAJ,GAAU,uBAAAmB,MAA0BH,MAElFr0B,IAAQ5xB,EAAS,MAAM;AAC3B,YAAMqmD,IAAoC;AAAA,QACxC,oBAAoB;AAAA,UAClB,UAAUj3B,EAAWzvB,EAAM,OAAO,WAAW,QAAQ;AAAA,QACvD;AAAA,MAAA;AAEM,cAAAA,EAAM,OAAO,WAAW,MAAM;AAAA,QACpC,KAAK6kD,GAA0B;AAC7B,UAAA6B,EAAa,mBAAmB,YAAYlB;AAAA,YAC1CxlD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExE0mD,EAAa,mBAAmB,YAAYjkD;AAAA,YAC1CzC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA;AAExE;AAAA,QACF,KAAK6kD,GAA0B;AAC7B,UAAA6B,EAAa,mBAAmB,WAAWhB;AAAA,YACzC1lD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExE0mD,EAAa,mBAAmB,WAAWpB;AAAA,YACzCtlD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA;AAExE;AAAA,QACF,KAAK6kD,GAA0B;AAC7B,UAAA6B,EAAa,mBAAmB,YAAYlB;AAAA,YAC1CxlD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExE0mD,EAAa,mBAAmB,YAAYjkD;AAAA,YAC1CzC,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA,GAExE0mD,EAAa,mBAAmB,wBAAwBD;AAAA,YACtDzmD,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,YACtEA,EAAM,OAAO,WAAW,WAAWA,EAAM,OAAO,WAAW,WAAW;AAAA,UAAA;AAExE;AAAA,MACJ;AAEO,aAAA0mD;AAAA,IAAA,CACR,GAGKl1B,IAAKU,GAAaD,GAAO,EAAE,oBAAAptB,KAAsB,EAAE,QAAQ7E,EAAM,gBAAA,CAAiB,GAElFsE,IAAuBjE,EAAS,MAChCmxB,EAAG,MAAM,QAAQ,SAAe,CAACA,EAAG,MAAM,QAAQ,IAAI,CAAChtB,MAAsBA,EAAK,QAAQ,EAAE,KAAK,GAAG,CAAC,IAClG,EACR,GAEKmiD,IAAU1gD,EAAwB,MAAS;AACjD,IAAA0gD,EAAQ,QAAQ3mD,EAAM,OAAO,WAAW,YAAY;AAEpD,UAAMoE,IAAS,MAAM;AACd,MAAAP,EAAA,QAAQ7D,EAAM,UAAU,GAC7BwxB,EAAG,MAAM;IAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvFlB,UAAMxxB,IAAQC,GAeR4D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAER,EAAE,SAAAwkD,GAAS,YAAAiC,EAAW,IAAIhC,GAAkB,GAE5C4B,IAAmB,CAAC/5C,MAA2C;AACnE,YAAMo6C,IAAU,CAAA;AACR,MAAAA,EAAAp6C,EAAK,QAAQ,IAAIA,EAAK,OAC9B5I,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAY,GAAG6mD,GAAS,GAC7DhjD,EAAK,WAAW;AAAA,IAAA,GAGZijD,IAAiBzmD,EAAS,MACvBL,EAAM,SAAS,MAAM,GAAGA,EAAM,WAAW,CACjD,GAEK+mD,IAAgB1mD,EAAS,MACtBL,EAAM,SAAS,MAAMA,EAAM,WAAW,CAC9C,GAEKgnD,IAAqB3mD,EAAS,MAC3BskD,EAAQ,QACXzkD,EAAE,kDAAkD,IACpDA,EAAE,kDAAkD,CACzD,GACK+mD,IAAqB5mD,EAAS,MAC3BskD,EAAQ,QAAQ,cAAc,UACtC,GAEKuC,IAAiB7mD,EAAS,MACvBL,EAAM,SAAS,SAASA,EAAM,WACtC,GAGKwxB,IAAKU,GAAa,EAAE,QAAQlyB,EAAM,iBAAiB;AAM5C,WAAAk2B,EAAA;AAAA,MACX,UALe,MACR1E,EAAG,MAAM;IAIhB,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrEK21B,KAAiBlhD,EAAI,EAAK,GAC1BmhD,KAAgEnhD,EAAI,MAAS;AAE5E,SAASohD,KAA6B;AACrC,QAAAC,IAAkB,CAAC5yC,MAAqB;AAC5C,IAAAA,EAAM,eAAe,GACrB6yC,EAAyB7yC,GAAO,EAAI;AAAA,EAAA,GAEhC8yC,IAAmB,CAAC9yC,MAAqB;AAC7C,IAAAA,EAAM,eAAe,GACrB6yC,EAAyB7yC,GAAO,EAAK;AAAA,EAAA,GAEjC+yC,IAAc,CAAC/yC,MAAqB;AACxC,IAAAA,EAAM,eAAe,GACrB6yC,EAAyB7yC,GAAO,EAAK;AAAA,EAAA,GAEjC6yC,IAA2B,CAAC7yC,GAAkBytC,MAAsB;AACpE,IAACuF,EAAuBhzC,CAAK,MAG7BytC,KACFgF,GAAe,QAAQ,IACvB,aAAaC,GAAc,KAAK,MAEhC,aAAaA,GAAc,KAAK,GAClBA,GAAA,QAAQ,WAAW,MAAM;AACrC,MAAAD,GAAe,QAAQ;AAAA,OACtB,GAAG;AAAA,EACR,GAEIO,IAAyB,CAAChzC,MAAqB;;AAC/C,SAAArQ,IAAAqQ,EAAM,iBAAN,QAAArQ,EAAoB;AACtB,eAASuC,IAAI,GAAGA,IAAI8N,EAAM,aAAa,MAAM,QAAQ9N;AACnD,YAAI8N,EAAM,aAAa,MAAM9N,CAAC,MAAM;AAC3B,iBAAA;AAAA;AAKN,WAAA;AAAA,EAAA;AAeF,SAAA;AAAA,IACL,gBAAAugD;AAAA,IACA,qBAd0B,MAAM;AACzB,aAAA,SAAS,iBAAiB,YAAYG,CAAe,GACrD,OAAA,SAAS,iBAAiB,aAAaE,CAAgB,GACvD,OAAA,SAAS,iBAAiB,QAAQC,CAAW;AAAA,IAAA;AAAA,IAYpD,wBAT6B,MAAM;AAC5B,aAAA,SAAS,oBAAoB,YAAYH,CAAe,GACxD,OAAA,SAAS,oBAAoB,aAAaE,CAAgB,GAC1D,OAAA,SAAS,oBAAoB,QAAQC,CAAW;AAAA,IAAA;AAAA,EAMvD;AAEJ;AC7Da,MAAAE,KAAiB,CAACC,MAAkC;;AAC/D,MAAI,CAACA;AAAa,WAAA;AAClB,MAAIA,EAAK,QAAQA,EAAK,KAAK,SAAS;AAClC,WAAOA,EAAK;AAGd,WADkBvjD,IAAAujD,EAAK,KAAK,MAAM,GAAG,EAAE,UAArB,gBAAAvjD,EAA4B,eAC3B;AAAA,IACjB,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF;ACDgB,SAAAwjD,GAAsBC,GAA4BC,GAA8C;AACxG,QAAAC,IAAa3nD,EAAS,MACtBI,EAAYqnD,CAAM,IACb,KAEFA,EAAO,MAAM,GAAG,CACxB,GAEKG,IAAc5nD,EAAS,MACvBI,EAAYsnD,CAAQ,IACf,KAEF,OAAO,KAAKA,CAAQ,CAC5B,GAEKG,IAAuB,CAACC,GAAeC,IAAe,OAAU;AACpE,UAAMC,IAA+B,CAAA,GAC/BC,IAAaH,EAAM,OAAO,CAACP,MAAS;AAClC,YAAAW,IAAcC,EAAaZ,GAAMI,EAAW,KAAK,KAAKS,EAAWb,GAAMK,EAAY,OAAOF,CAAQ;AACxG,aAAKQ,KACgBF,EAAA,KAAKT,EAAK,IAAI,GAE5BW;AAAA,IAAA,CACR;AACG,QAAAF,EAAmB,UAAU,CAACD,GAAc;AACxC,YAAA,EAAE,aAAAp6C,MAAgBV,MAClB,EAAE,GAAApN,EAAE,IAAI2K,GAAK;AACnB,MAAAmD,EAAY9N,EAAE,mCAAmC,IAAI,MAAMmoD,EAAmB,KAAK,IAAI,CAAC;AAAA,IAC1F;AAEO,WAAAC;AAAA,EAAA,GAGHE,IAAe,CAACZ,GAAYc,MAAsB;AAClD,QAAAA,EAAQ,WAAW;AACd,aAAA;AAET,aAAS9hD,IAAI,GAAGA,IAAI8hD,EAAQ,QAAQ9hD;AAClC,UAAI8hD,EAAQ9hD,CAAC,EAAE,WAAW,GAAG;AAEvB,YAAAghD,EAAK,KAAK,YAAY,EAAE,SAASc,EAAQ9hD,CAAC,CAAC;AACtC,iBAAA;AAAA,aAEJ;AAEL,cAAM+hD,IAAYD,EAAQ9hD,CAAC,EAAE,MAAM,GAAG;AACtC,YAAI+hD,EAAU,CAAC,MAAM,OAAOhB,GAAeC,CAAI,EAAE,WAAWe,EAAU,CAAC,IAAI,GAAG;AACrE,iBAAA;YACED,EAAQ9hD,CAAC,MAAM+gD,GAAeC,CAAI;AACpC,iBAAA;AAAA,MAEX;AAEK,WAAA;AAAA,EAAA,GAGHa,IAAa,CAACb,GAAY3gB,GAAqBrC,MAA8C;AACjG,QAAIqC,EAAK,WAAW,KAAKxmC,EAAYmkC,CAAK;AACjC,aAAA;AAET,aAASn8B,IAAI,GAAGA,IAAIw+B,EAAK,QAAQx+B,KAAK;AAChC,UAAAw+B,EAAKx+B,CAAC,MAAM,OAAOm8B,EAAMqC,EAAKx+B,CAAC,CAAC,KAAKm/C,EAAK;AAErC,eAAA;AACE,UAAA3gB,EAAKx+B,CAAC,EAAE,WAAW,GAAG,KAAKm8B,EAAMqC,EAAKx+B,CAAC,CAAC,KAAKm/C,EAAK;AAEpD,eAAA;AACF;AAEL,cAAMe,IAAY1hB,EAAKx+B,CAAC,EAAE,MAAM,GAAG;AACnC,YAAIkgD,EAAU,CAAC,MAAM,OAAOhB,GAAeC,CAAI,EAAE,WAAWe,EAAU,CAAC,IAAI,GAAG,KAAK/jB,EAAMqC,EAAKx+B,CAAC,CAAC,IAAIm/C,EAAK;AAChG,iBAAA;AACE,YAAA3gB,EAAKx+B,CAAC,MAAMk/C,GAAeC,CAAI,KAAKhjB,EAAMqC,EAAKx+B,CAAC,CAAC,IAAIm/C,EAAK;AAC5D,iBAAA;AAAA,MAEX;AAAA,IACF;AACO,WAAA;AAAA,EAAA;AAGF,SAAA;AAAA,IACL,sBAAAM;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;ACnFA,UAAMloD,IAAQC,GAsBR4D,IAAOC,GAKP8kD,IAAc3iD,KAGd,EAAE,sBAAAiiD,EAAqB,IAAIL,GAAsB7nD,EAAM,QAAQA,EAAM,QAAQ;AAEnF,aAAS6oD,EAAOV,GAAsB;AACpC,MAAInoD,EAAM,YACNY,GAAOunD,CAAK,KAAKA,EAAM,WAAW,KACjCtkD,EAAA,UAAUqkD,EAAqBC,CAAK,CAAC;AAAA,IAC5C;AAEA,UAAM,EAAE,gBAAAW,EAAmB,IAAAC,GAAYH,GAAaC,CAAM,GAEpD,EAAE,gBAAA1B,MAAmBE,MACrB,EAAE,GAAAnnD,MAAMC;;;;;;;;;;;;;;;;;;IChDR6oD,KAAe/iD,EAA6B,MAAS;AAEpD,SAASgjD,GAA4Bx8C,GAA+B;AACzE,EAAAu8C,GAAa,QAAQv8C;AACvB;AAEgB,SAAAy8C,GAA2B/rB,IAAqB,WAAW;AACzE,MACE18B,EAAYuoD,GAAa,KAAK,KAC9BvoD,EAAYuoD,GAAa,MAAM,OAAO,KACtCvoD,EAAYuoD,GAAa,MAAM,QAAQ7rB,CAAU,CAAC;AAE5C,UAAA,IAAI,MAAM,oEAAoE;AAG/E,SAAA;AAAA,IACL,aAAa6rB,GAAa,MAAM,QAAQ7rB,CAAU,EAAE;AAAA,IACpD,eAAe6rB,GAAa,MAAM,QAAQ7rB,CAAU,EAAE;AAAA,IACtD,YAAY6rB,GAAa,MAAM,QAAQ7rB,CAAU,EAAE;AAAA,IACnD,aAAa6rB,GAAa,MAAM,QAAQ7rB,CAAU,EAAE;AAAA,EAAA;AAExD;ACtBO,SAASgsB,GAAgB35C,GAAuD;AAqB9E,SAAA;AAAA,IACL,0BArB+B,CAC/B45C,GACAhf,IAAQ56B,EAAO,YACf26B,IAAS36B,EAAO,aAChB65C,IAAS,OAGP75C,EAAO,gBACP,aACA46B,IACA,OACAD,KACCif,EAAM,IAAI,iBAAiB,IAAI,OAAOA,EAAM,IAAI,iBAAiB,MAClE,MACAA,EAAM,IAAI,QACV,UACCC,IAAS,aAAa,KAAK,IAAQ,IAAA;AAAA,EAKtC;AAEJ;ACvBgB,SAAAC,GACdzuB,IAAsC,QACtC0F,GACA;AACM,QAAAgpB,IAAyB,CAAC1uB,MAA4B;AAC1D,UAAM+J,IAAgC,CAAA;AAC7B,aAAAh+B,IAAI,GAAGA,IAAI25B,EAAmB1F,CAAS,EAAE,UAAU,QAAQj0B;AAC5D,MAAAg+B,EAAArE,EAAmB1F,CAAS,EAAE,UAAUj0B,CAAC,CAAC,IAAI25B,EAAmB1F,CAAS,EAAE;AAE7E,WAAA+J;AAAA,EAAA,GAGH4kB,IAAcnpD,EAAS,MACvBw6B,IACK;AAAA,IACL,GAAG0uB,EAAuB1uB,CAAS;AAAA,EAAA,IAGhC;AAAA,IACL,GAAG0uB,EAAuBtvB,GAAa,KAAK;AAAA,IAC5C,GAAGsvB,EAAuBtvB,GAAa,KAAK;AAAA,IAC5C,GAAGsvB,EAAuBtvB,GAAa,KAAK;AAAA,IAC5C,GAAGsvB,EAAuBtvB,GAAa,QAAQ;AAAA,EAAA,CAElD,GAEKwvB,IAAeppD,EAAS,MACrB,OAAO,KAAKmpD,EAAY,KAAK,EAAE,KAAK,GAAG,CAC/C;AAEM,SAAA;AAAA,IACL,aAAAA;AAAA,IACA,cAAAC;AAAA,EAAA;AAEJ;ACbY,IAAAC,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,QAAQ,SACRA,EAAA,wBAAwB,yBACxBA,EAAA,WAAW,YAJDA,IAAAA,MAAA,CAAA,CAAA,GAOAC,uBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,UAAU,WACVA,EAAA,YAAY,aACZA,EAAA,aAAa,cACbA,EAAA,SAAS,UACTA,EAAA,WAAW,YACXA,EAAA,OAAO,QAPGA,IAAAA,MAAA,CAAA,CAAA,GC7BAC,uBAAAA,OACVA,EAAA,YAAY,aACZA,EAAA,WAAW,YACXA,EAAA,SAAS,UACTA,EAAA,YAAY,aACZA,EAAA,YAAY,aACZA,EAAA,SAAS,UANCA,IAAAA,MAAA,CAAA,CAAA,GASAC,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,UAAU,WACVA,EAAA,kBAAkB,oBAClBA,EAAA,kBAAkB,qBAClBA,EAAA,iBAAiB,mBACjBA,EAAA,cAAc,gBACdA,EAAA,UAAU,QAPAA,IAAAA,MAAA,CAAA,CAAA,GAyBAC,uBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SACRA,EAAA,UAAU,SAHAA,IAAAA,MAAA,CAAA,CAAA;AAqFC,MAAAC,KAAuB,CAACrpD,MAC/B,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,aAGpBspD,KAAuB,CAACtpD,MAC/B,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,aAGpBupD,KAAuB,CAACvpD,MAC/B,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB,aAGpBwpD,KAA0B,CAACxpD,MAClC,CAACA,KAAS,CAACA,EAAM,gBAAsB,KACpCA,EAAM,kBAAkB;ACtI1B,SAASypD,KAA4B;AAoDnC,SAAA;AAAA,IACL,eApDoB,CACpBpnD,GACAomB,GACAihC,GACAvvB,GACAwvB,GACAroB,OAEO;AAAA,MACL,KAAAj/B;AAAA,MACA,MAAAomB;AAAA,MACA,MAAM;AAAA,MACN,QAAAihC;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,WAAAvvB;AAAA,MACA,aAAab,GAAe;AAAA,MAC5B,cAAc;AAAA,MACd,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,yBAAyB;AAAA,MACzB,sBAAsB;AAAA,MACtB,0BAA0B,CAAC;AAAA,MAC3B,UAAU,CAAC;AAAA,MACX,SAAS,CAAC;AAAA,MACV,iBAAiB,CAAC;AAAA,MAClB,YAAY,CAAC;AAAA,MACb,wBAAwB;AAAA,MACxB,WAAAqwB;AAAA,MACA,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,WAAAroB;AAAA,MACA,cAAc;AAAA,MACd,UAAU;AAAA,QACR,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,OAAO;AAAA,MACT;AAAA,MACA,iBAAiB;AAAA,MACjB,OAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,qBAAqB6nB,GAAoB;AAAA,MAC3C;AAAA,MACA,2BAA2B;AAAA,MAC3B,yBAAyB;AAAA,MACzB,UAAU;AAAA,MACV,OAAO;AAAA,IAAA;AAAA,EAKT;AAEJ;ACzDa,MAAAS,KAAyB,CACpCC,GACAhqB,MACwB;AACxB,aAAW,CAACx9B,GAAK4J,CAAM,KAAK,OAAO,QAAQ4zB,CAAkB;AAC3D,QAAK,OAAO,OAAOtG,EAAY,EAAE,SAASl3B,CAAmB;AAC7D,eAAS6D,IAAI,GAAGA,IAAI+F,EAAO,UAAU,QAAQ/F;AACvC,YAAA2jD,MAAa59C,EAAO,UAAU/F,CAAC;AAAU,iBAAA7D;AAAA;AAG1C,SAAA;AACT,GCVMsnD,KAAYpkD,EAAwB,MAAS;AAEnC,SAAAukD,GAAsBC,IAAqB,IAAI;AACvD,QAAA,EAAE,cAAAnqB,MAAiBI,MACnBgqB,IAAgBzkD,EAAIokD,GAAU,SAAS/pB,EAAa,MAAM,SAAS,iBAAiB,OAAO,GAE3FqqB,IAAyBF,IAAa,GACtCG,IAA2BH,IAAa,GACxCI,IAAyBJ,IAAa,GAEtCK,IAAkB,CAACjQ,MAAyB;AAC5C,QAAAj6C,GAAOi6C,CAAK;AACP,aAAA;AAGH,UAAAkQ,IAA2BL,EAAc,QAAQ7P;AACvD,WAAIkQ,IAA2BF,KACfH,EAAA,QAAQM,EAAgBH,IAAyBhQ,CAAK,GACpEwP,GAAU,QAAQK,EAAc,OAEzB,MAELK,IAA2BJ,KACfD,EAAA,QAAQM,EAAgBJ,IAA2B/P,CAAK,GACtEwP,GAAU,QAAQK,EAAc,OAEzB,MAGF;AAAA,EAAA,GAGHM,IAAkB,CAACtqD,MACnBA,IAAQ4/B,EAAa,MAAM,SAAS,iBAAiB,UAChDA,EAAa,MAAM,SAAS,iBAAiB,UAElD5/B,IAAQ4/B,EAAa,MAAM,SAAS,iBAAiB,UAChDA,EAAa,MAAM,SAAS,iBAAiB,UAG/C5/B;AAGF,SAAA;AAAA,IACL,eAAAgqD;AAAA,IACA,iBAAAI;AAAA,EAAA;AAEJ;ACzCA,MAAMtrB,KAAY,iBACZyrB,KAAuB,KAKhBC,KAAmB,CAACttB,GAA6Bp5B,MACrD,IAAI,QAAQ,CAACo1B,GAASiE,MAAW;;AAClC,MAAAwoB,IAAM7mB,KAAY,cAAch7B,EAAK;AACzC,EAAIA,EAAK,SAASklD,GAAoB,YAAYllD,EAAK,YAAYA,EAAK,YACtE6hD,IAAM7mB,KAAY,YAAYh7B,EAAK,UAAU,gBAAgBA,EAAK,WAEpEo5B,EACG,EAAA;AAAA,IACCyoB;AAAA,IACA,KAAK,UAAU;AAAA,MACb,UAAUsB,GAAenjD,EAAK,IAAI;AAAA,MAClC,OAAMH,IAAAG,EAAK,SAAL,gBAAAH,EAAW;AAAA,IAAA,CAClB;AAAA,EAAA,EAEF,KAAK,CAACkL,MAAQ;AACT,IAAAA,EAAI,WAAWjE,KACjBsuB,EAAQrqB,EAAI,IAAI,IAGTsuB;EACT,CACD,EACA,MAAM,CAACtmB,MAAQ;AAEd,IAAAsmB,EAAOtmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GAGU4zC,KAAmB,CAC9BvtB,GACAp5B,GACA4mD,GACAC,GACAC,GACA7mC,GACA8mC,IAAuE,WAEhE,IAAI,QAAQ,CAAC3xB,GAASiE,MAAW;AAChC,QAAA2tB,IAAW,IAAI,YACfnF,IAAM7mB,KAAY,MAAM4rB,IAAU;AAC/B,EAAAI,EAAA,OAAO,QAAQH,CAAM,GACrBG,EAAA;AAAA,IACP;AAAA,IACA,KAAK,UAAU;AAAA,MACb,QAAA/mC;AAAA,MACA,MAAA6mC;AAAA,IAAA,CACD;AAAA,EAAA,GAGH1tB,EAAOqtB,EAAoB,EACxB,KAAK5E,GAAKmF,GAAU;AAAA,IACnB,aAAahnD,EAAK,yBAAyBA,EAAK,uBAAuB,QAAQ;AAAA,IAC/E,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,kBAAkB+mD;AAAA,EAAA,CACnB,EACA,KAAK,CAACh8C,MAAQ;AACT,IAAAA,EAAI,WAAWjE,KACjBsuB,EAAQrqB,EAAI,IAAI,IAGTsuB;EACT,CACD,EACA,MAAM,CAACtmB,MAAQ;AAEd,IAAAsmB,EAAOtmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GAGUk0C,KAAoB,CAAC7tB,GAA6Bp5B,GAAuBknD,MAC7E,IAAI,QAAQ,CAAC9xB,GAASiE,MAAW;AACtC,QAAMwoB,IAAM7mB,KAAY,MAAMh7B,EAAK,SAAS;AAC5C,EAAAo5B,EACG,EAAA;AAAA,IACCyoB;AAAA,IACA,KAAK,UAAU;AAAA,MACb,UAAUqF;AAAA,IAAA,CACX;AAAA,EAAA,EAEF,KAAK,CAACn8C,MAAQ;AACT,IAAAA,EAAI,WAAWlE,KACjBuuB,EAAQrqB,EAAI,IAAI,IAGTsuB;EACT,CACD,EACA,MAAM,CAACtmB,MAAQ;AAEd,IAAAsmB,EAAOtmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GAGUo0C,KAAc,CAAC/tB,GAA6BwtB,GAAgBQ,MAChE,IAAI,QAAQ,CAAChyB,GAASiE,MAAW;AACtC,QAAMwoB,IAAM7mB,KAAY,MAAM4rB,IAAU,aAAaQ;AACrD,EAAAhuB,EAAA,EACG,MAAMyoB,CAAG,EACT,KAAK,CAAC92C,MAAQ;AACT,IAAAA,EAAI,WAAWlE,KACjBuuB,EAAQrqB,EAAI,IAAI,IAGTsuB;EACT,CACD,EACA,MAAM,CAACtmB,MAAQ;AAEd,IAAAsmB,EAAOtmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GCtHGs0C,KAA4C,IAC5CC,KAAkC,GAE3BC,KAA0G,CACrHnuB,GACAp5B,MAEO,IAAI,QAAQ,CAACo1B,GAASiE,MAAW;AAClC,MAAAr5B,EAAK,cAAcy1B,GAAa,OAAO;AAClC,IAAA4D;AACP;AAAA,EACF;AACA,EAAAqtB,GAAiBttB,GAAQp5B,CAAI,EAC1B,KAAK,CAAC+K,MAAQ;AACb,IAAAqqB,EAAQrqB,CAA6B;AAAA,EACrC,CACD,EACA,MAAM,CAACgI,MAAQsmB,EAAOtmB,CAAG,CAAC;AAAA,CAC9B,GAGUy0C,KAAiB,CAC5BpuB,GACAp5B,GACA4mD,GACAC,GACAC,GACA7mC,GACA8mC,MAEO,IAAI,QAAQ,CAAC3xB,GAASiE,MAAW;AAClC,MAAAr5B,EAAK,cAAcy1B,GAAa,OAAO;AAClC,IAAA4D;AACP;AAAA,EACF;AACiB,EAAAstB,GAAAvtB,GAAQp5B,GAAM4mD,GAASC,GAAQC,GAAM7mC,GAAQ8mC,CAAwB,EACnF,KAAK,CAACh8C,MAAQ;AACb,IAAAqqB,EAAQrqB,CAAG;AAAA,EAAA,CACZ,EACA,MAAM,CAACgI,MAAQ;AACd,IAAAsmB,EAAOtmB,CAAG;AAAA,EAAA,CACX;AAAA,CACJ,GAGU00C,KAAkB,CAC7BruB,GACAp5B,GACAknD,GACAQ,MAEO,IAAI,QAAQ,CAACtyB,GAASiE,MAAW;AAClC,MAAAr5B,EAAK,cAAcy1B,GAAa,OAAO;AAClC,IAAA4D;AACP;AAAA,EACF;AACA,EAAA4tB,GAAkB7tB,GAAQp5B,GAAMknD,CAAG,EAChC,KAAK,CAACn8C,MAAQ;AACb,IAAA/K,EAAK,SAASmlD,GAAsB,YAChCuC,MACG1nD,EAAA,4BAA4B,WAAW,WAAY;AACtD,MAAA2nD,GAA6BvuB,GAAQp5B,CAAI;AAAA,IAAA,GACxC4nD,GAAsB5nD,CAAI,CAAC,IAEhCo1B,EAAQrqB,CAAG;AAAA,EAAA,CACZ,EACA,MAAM,CAACgI,MAAQsmB,EAAOtmB,CAAG,CAAC;AAAA,CAC9B;AAGH,SAAS60C,GAAsB5nD,GAAuB;AACpD,SAAOqnD,KAA4C,MAAOrnD,EAAK,0BAA0BA,EAAK;AAChG;AAEA,eAAe2nD,GAA6BvuB,GAA6Bp5B,GAAuB;AAI9F,MAHA,aAAaA,EAAK,yBAAyB,GACvCA,EAAK,WAAWmlD,GAAsB,YACtCnlD,EAAK,0BAA0BsnD,MAC/B,CAACtnD,EAAK;AAAS;AACnB,QAAMq3B,IAAQ,MAAMoG,GAAWrE,GAAQp5B,EAAK,OAAO;AACnD,MAAIq3B,KAASA,EAAM,YAAYA,EAAM,SAAS,gBAAgB;AAC5D,UAAMwwB,IAAoBC;AAC1B,QAAIzwB,EAAM,SAAS,eAAe,WAAW+tB,GAAuB,WAAW;AAC3D,MAAAyC,EAAA,mBAAmBxwB,EAAM,EAAE;AAC7C;AAAA,IAAA,WACSA,EAAM,SAAS,eAAe,WAAW+tB,GAAuB,WAAW;AAClE,MAAAyC,EAAA,mBAAmBxwB,EAAM,EAAE;AAC7C;AAAA,IAAA,WACSA,EAAM,SAAS,eAAe,WAAW+tB,GAAuB,QAAQ;AACjF,MAAAyC,EAAkB,gBAAgBxwB,EAAM,IAAIA,EAAM,SAAS,eAAe,UAAU;AACpF;AAAA,IACF;AAAA,EACF;AACK,EAAAr3B,EAAA,2BACAA,EAAA,4BAA4B,WAAW,WAAY;AACtD,IAAA2nD,GAA6BvuB,GAAQp5B,CAAI;AAAA,EAAA,GACxC4nD,GAAsB5nD,CAAI,CAAC;AAChC;;;AC9GA,GAAC,SAA0C80C,GAAMtqB,GAAS;AAExD,IAAArf,EAAA,UAAiBqf;EAOlB,GAAE,OAAO,OAAS,MAAc,OAAOpf,IAAM,WAAW;AACzD;AAAA;AAAA,MAAiB,SAAS28C,GAAS;AAEzB,YAAIC,IAAmB,CAAA;AAGvB,iBAASC,EAAoBC,GAAU;AAGtC,cAAGF,EAAiBE,CAAQ;AAC3B,mBAAOF,EAAiBE,CAAQ,EAAE;AAGnC,cAAI/8C,IAAS68C,EAAiBE,CAAQ,IAAI;AAAA;AAAA,YACzC,GAAGA;AAAA;AAAA,YACH,GAAG;AAAA;AAAA,YACH,SAAS,CAAE;AAAA;AAAA,UACvB;AAGW,iBAAAH,EAAQG,CAAQ,EAAE,KAAK/8C,EAAO,SAASA,GAAQA,EAAO,SAAS88C,CAAmB,GAGlF98C,EAAO,IAAI,IAGJA,EAAO;AAAA,QACd;AAID,eAAA88C,EAAoB,IAAIF,GAGxBE,EAAoB,IAAID,GAGxBC,EAAoB,IAAI,SAASx9B,GAAS7rB,GAAMupD,GAAQ;AACvD,UAAIF,EAAoB,EAAEx9B,GAAS7rB,CAAI,KACtC,OAAO,eAAe6rB,GAAS7rB,GAAM;AAAA;AAAA,YACpC,cAAc;AAAA;AAAA,YACd,YAAY;AAAA;AAAA,YACZ,KAAKupD;AAAA;AAAA,UAClB,CAAa;AAAA,QAEb,GAGUF,EAAoB,IAAI,SAAS98C,GAAQ;AACxC,cAAIg9C,IAASh9C,KAAUA,EAAO;AAAA;AAAA,YAC7B,WAAsB;AAAE,qBAAOA,EAAO;AAAA,YAAa;AAAA;AAAA;AAAA,YACnD,WAA4B;AAAE,qBAAOA;AAAA;;AACtC,iBAAA88C,EAAoB,EAAEE,GAAQ,KAAKA,CAAM,GAClCA;AAAA,QAClB,GAGUF,EAAoB,IAAI,SAAS/qD,GAAQkrD,GAAU;AAAE,iBAAO,OAAO,UAAU,eAAe,KAAKlrD,GAAQkrD,CAAQ;AAAA,QAAE,GAGnHH,EAAoB,IAAI,IAGjBA,EAAoBA,EAAoB,IAAI,CAAC;AAAA,MACpD,EAEA;AAAA;AAAA;AAAA,QAEH,SAAS98C,GAAQsf,GAASw9B,GAAqB;AAEtD,mBAASI,EAAgBC,GAAUC,GAAa;AAAE,gBAAI,EAAED,aAAoBC;AAAgB,oBAAM,IAAI,UAAU,mCAAmC;AAAA,UAAM;AAIzJ,cAAIC,IAAYP,EAAoB,CAAC,GAEjCQ,IAAWR,EAAoB,CAAC,GAChCS,IAAQD,EAAS,OACjBE,IAAeF,EAAS,cAExBG,IAAOX,EAAoB,CAAC,GAI5BY,IAAS,SAAUC,GAAK;AAC1B,iBAAKA,KAAO,GAAGA,IAAM,KAAK,GAAGA,KAAO;AAAG;AACvC,mBAAOA;AAAA,UACT,GAEIC,IAAY,SAAUC,GAAKF,GAAK;AAClC,gBAAIG,IAAK,IAAI,WAAWD,EAAI,MAAM,GAC9BE,IAAKJ,IAAM,GACXK,IAAQL,IAAMI;AAClB,oBAAQA,GAAE;AAAA,cACR,KAAK;AACH,gBAAAD,EAAGE,IAAQ,CAAC,IAAI;AAAA,cAClB,KAAK;AACH,gBAAAF,EAAGE,IAAQ,CAAC,IAAI;AAAA,cAClB,KAAK;AACH,gBAAAF,EAAGE,IAAQ,CAAC,IAAI;AAAA,cAClB,KAAK;AACH,gBAAAF,EAAGE,IAAQ,CAAC,IAAI;AAAA,YACnB;AACD,qBAAS/mD,KAAK0mD,KAAO,KAAK,GAAG1mD,IAAI4mD,EAAI,QAAQ5mD;AAC3C,cAAA4mD,EAAI5mD,CAAC,IAAI;AAAA,UAEb,GAEIgnD,IAAU,SAAUJ,GAAKK,GAAUC,GAAQ;AAC7C,YAAAN,EAAIK,KAAY,CAAC,KAAK,OAAQ,MAAMA,IAAW,KAAK,IAGpDL,IAAMK,KAAY,KAAK,IAAI,OAAS,EAAE,IAAIC,KAAU,KAAK,MAAM,GAC/DN,IAAMK,KAAY,KAAK,IAAI,OAAS,EAAE,IAAIC,KAAU;AAAA,UACtD,GAEIC,IAAe,SAAUC,GAAMC,GAAgB;AACjD,gBAAIC,IAAK,IAAI,WAAWF,GAAMC,IAAiB,KAAK,CAAC,GACjDE,IAAM,IAAI,WAAW,CAAC,GACtBhzC,IAAM,IAAI,SAASgzC,EAAI,MAAM;AACjC,mBAAAhzC,EAAI,SAAS,GAAG+yC,EAAG,CAAC,GAAG,EAAK,GAC5B/yC,EAAI,SAAS,GAAG+yC,EAAG,CAAC,GAAG,EAAK,GAC5B/yC,EAAI,SAAS,GAAG+yC,EAAG,CAAC,GAAG,EAAK,GAC5B/yC,EAAI,SAAS,IAAI+yC,EAAG,CAAC,GAAG,EAAK,GAC7B/yC,EAAI,SAAS,IAAI+yC,EAAG,CAAC,GAAG,EAAK,GACtBC;AAAA,UACT,GAEIC,IAAQ,WAAY;AACtB,qBAASA,EAAM/D,GAAW;AAIxB,kBAHAwC,EAAgB,MAAMuB,CAAK,GAE3B/D,IAAYA,KAAa,KAAK,MAC1BA,IAAY,KAAK;AACnB,sBAAM,IAAI,MAAM,0CAA0C;AAE5D,mBAAK,UAAU,GACf,KAAK,eAAeA,GACpB,KAAK,kBAAkBgD,EAAOhD,CAAS,GAKvC,KAAK,QAAQ,IAAI,YAAY8C,EAAa,KAAK,kBAAkB,MAAM,EAAE,CAAC,GAC1E,KAAK,OAAO,IAAI,WAAW,KAAK,KAAK,GACrC,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,GACnC,KAAK,QAAQ,IAAIH,EAAU,EAAE,WAAsB,GAAI,CAAE,GAAE,KAAK,KAAK;AAAA,YACtE;AAED,mBAAAoB,EAAM,UAAU,aAAa,SAAoBJ,GAAMK,GAAW;AAChE,mBAAK,UAAU;AACf,kBAAIH,IAAK,IAAI,WAAWF,GAAMK,IAAY,KAAK,CAAC;AAChD,cAAAH,EAAG,CAAC,IAAI,YACRA,EAAG,CAAC,IAAI,YACRA,EAAG,CAAC,IAAI,aACRA,EAAG,CAAC,IAAI,WACRA,EAAG,CAAC,IAAI;AAAA,YACZ,GAEEE,EAAM,UAAU,YAAY,SAAmBP,GAAUC,GAAQ;AAC/D,kBAAIQ,IAAcjB,EAAOQ,CAAQ,GAC7BU,IAAO,IAAI,WAAW,KAAK,OAAO,GAAGD,KAAe,CAAC;AACzD,qBAAAf,EAAUgB,GAAMV,CAAQ,GACxBD,EAAQW,GAAMV,GAAUC,CAAM,GACvBQ;AAAA,YACX,GAEEF,EAAM,UAAU,SAAS,SAAgB3hD,GAAM+hD,GAAaX,GAAUrlB,GAAK;AACzE,cAAA4kB,EAAK3gD,GAAM,KAAK,KAAK,KAAK,MAAM+hD,GAAaX,GAAUrlB,KAAO,CAAC;AAAA,YACnE,GAEE4lB,EAAM,UAAU,YAAY,SAAmB3hD,GAAM+hD,GAAaX,GAAUC,GAAQW,GAAU;AAC5F,kBAAIH,IAAcT;AAClB,mBAAK,OAAOphD,GAAM+hD,GAAaX,CAAQ,GACnCY,MACFH,IAAc,KAAK,UAAUT,GAAUC,CAAM,IAE/C,KAAK,MAAM,KAAKQ,GAAa,KAAK,eAAe;AAAA,YACrD,GAEEF,EAAM,UAAU,YAAY,SAAmBhV,GAAK;AAClD,kBAAI0U,IAAS1U,EAAI,cAAcA,EAAI,UAAUA,EAAI,QAAQ;AACzD,mBAAK,WAAW,KAAK,OAAO,KAAK,eAAe;AAChD,kBAAIoV,IAAc,GACdX,IAAW,KAAK;AACpB,mBAAKW,IAAc,GAAGV,IAASU,IAAcX,GAAUW,KAAeX;AACpE,qBAAK,UAAUzU,GAAKoV,GAAaX,GAAUC,GAAQ,EAAK;AAE1D,0BAAK,UAAU1U,GAAKoV,GAAaV,IAASU,GAAaV,GAAQ,EAAI,GAC5DC,EAAa,KAAK,OAAO,KAAK,eAAe;AAAA,YACxD,GAEEK,EAAM,UAAU,SAAS,SAAgBhV,GAAK;AAC5C,qBAAO8T,EAAM,KAAK,UAAU9T,CAAG,EAAE,MAAM;AAAA,YAC3C,GAEEgV,EAAM,UAAU,mBAAmB,SAA0BhV,GAAK;AAChE,qBAAO,KAAK,OAAOA,CAAG;AAAA,YAC1B,GAEEgV,EAAM,UAAU,mBAAmB,SAA0BhV,GAAK;AAChE,qBAAO,KAAK,OAAOA,CAAG;AAAA,YAC1B,GAEEgV,EAAM,UAAU,wBAAwB,SAA+BhV,GAAK;AAC1E,qBAAO,KAAK,OAAOA,CAAG;AAAA,YAC1B,GAEEgV,EAAM,UAAU,aAAa,WAAsB;AACjD,0BAAK,WAAW,KAAK,OAAO,KAAK,eAAe,GACzC;AAAA,YACX,GAEEA,EAAM,UAAU,SAAS,SAAgBM,GAAO;AAC9C,kBAAIF,IAAc,GACdX,IAAWa,EAAM,cAAcA,EAAM,UAAUA,EAAM,QAAQ,GAC7DC,IAAa,KAAK,UAAU,KAAK,cACjCC,IAAW;AAGf,mBADA,KAAK,WAAWf,GACTW,IAAcX;AACnB,gBAAAe,IAAW,KAAK,IAAIf,IAAWW,GAAa,KAAK,eAAeG,CAAU,GAC1E,KAAK,OAAOD,GAAOF,GAAaI,GAAUD,CAAU,GACpDA,KAAcC,GACdJ,KAAeI,GACXD,MAAe,KAAK,iBACtB,KAAK,MAAM,KAAK,KAAK,cAAc,KAAK,eAAe,GACvDA,IAAa;AAGjB,qBAAO;AAAA,YACX,GAEEP,EAAM,UAAU,WAAW,WAAoB;AAC7C,kBAAIO,IAAa,KAAK,UAAU,KAAK,cACjCX,IAAO;AACX,kBAAKW;AAIH,gBAAAX,IAAO,KAAK,MAAM,MAAM,CAAC;AAAA,mBAJV;AACf,oBAAIE,IAAK,IAAI,WAAW,KAAK,OAAO,KAAK,kBAAkB,KAAK,CAAC;AACjE,gBAAAF,IAAOE,EAAG,OAAO,MAAMA,EAAG,YAAYA,EAAG,aAAaA,EAAG,UAAU;AAAA,cACzE;AAGI,qBAAO;AAAA,gBACL,QAAQ,KAAK;AAAA,gBACb,MAAMF;AAAA,cACZ;AAAA,YACA,GAEEI,EAAM,UAAU,WAAW,SAAkBrlB,GAAO;AAElD,kBADA,KAAK,UAAUA,EAAM,QACjBA,EAAM,KAAK,eAAe,IAAI;AAChC,oBAAImlB,IAAK,IAAI,WAAW,KAAK,OAAO,KAAK,kBAAkB,KAAK,CAAC;AACjE,gBAAAA,EAAG,IAAI,IAAI,WAAWnlB,EAAM,IAAI,CAAC;AAAA,cACvC;AACM,qBAAK,KAAK,IAAI,IAAI,WAAWA,EAAM,IAAI,CAAC;AAE1C,qBAAO;AAAA,YACX,GAEEqlB,EAAM,UAAU,SAAS,WAAkB;AACzC,kBAAIN,IAAS,KAAK,SACdD,IAAWC,IAAS,KAAK,cACzBQ,IAAc,KAAK,UAAUT,GAAUC,CAAM;AACjD,mBAAK,MAAM,KAAKQ,GAAa,KAAK,eAAe;AACjD,kBAAIttC,IAAS+sC,EAAa,KAAK,OAAO,KAAK,eAAe;AAC1D,0BAAK,WAAW,KAAK,OAAO,KAAK,eAAe,GACzC/sC;AAAA,YACX,GAEEotC,EAAM,UAAU,MAAM,WAAe;AACnC,qBAAOlB,EAAM,KAAK,OAAQ,EAAC,MAAM;AAAA,YACrC,GAESkB;AAAA,UACT;AAEA,UAAAz+C,EAAO,UAAUy+C,GACjBz+C,EAAO,QAAQ,QAAQq9C;AAAA,QAEhB;AAAA;AAAA;AAAA,QAEA,SAASr9C,GAAQsf,GAAS;AASjC,mBADI4/B,IAAiB,IAAI,MAAM,GAAG,GACzBjoD,IAAI,GAAGA,IAAI,KAAKA;AACvB,YAAAioD,EAAejoD,CAAC,KAAKA,IAAI,KAAO,MAAM,MAAMA,EAAE,SAAS,EAAE;AAG3D,UAAA+I,EAAO,QAAQ,QAAQ,SAAUm/C,GAAa;AAG5C,qBAFIC,IAAW,IAAI,WAAWD,CAAW,GACrCv/C,IAAM,IAAI,MAAMu/C,EAAY,UAAU,GACjC76C,IAAK,GAAGA,IAAK1E,EAAI,QAAQ0E;AAChC,cAAA1E,EAAI0E,CAAE,IAAI46C,EAAeE,EAAS96C,CAAE,CAAC;AAEvC,mBAAO1E,EAAI,KAAK,EAAE;AAAA,UACpB,GAMAI,EAAO,QAAQ,eAAe,SAAU/F,GAAG;AAKzC,gBAAIF,IAAI;AAGR,gBAAIE,KAAK;AAAO,qBAAO;AAGvB,gBAAIA,IAAI;AACN,mBAAKF,IAAI,GAAGA,IAAIE,GAAGF,IAAIA,KAAK;AAAG;AAAA;AAE/B,mBAAKA,IAAI,UAAUA,IAAIE,GAAGF,KAAK;AAAU;AAE3C,mBAAOA;AAAA,UACT,GAMAiG,EAAO,QAAQ,yBAAyB,SAAUoO,GAAM;AACtD,gBAAIixC,IAAoB,uBAAuBjxC,KAAQA,aAAgBA,EAAK,mBACxEkxC,IAA0B,6BAA6BlxC,KAAQA,aAAgBA,EAAK,yBACpFmxC,IAA2B,8BAA8BnxC,KAAQA,aAAgBA,EAAK;AAW1F,mBAAOixC,KAAqB,CAACC,KAA2B,CAACC;AAAA,UAC3D;AAAA,QAEO;AAAA;AAAA;AAAA,QAEA,SAASv/C,GAAQsf,GAASw9B,GAAqB;AAItD,UAAA98C,EAAO,UAAU,WAAY;AAC3B,gBAAIy+C,IAAQ3B,EAAoB,CAAC,GAE7B0C,IAAW,SAAUC,GAAQ3iD,GAAM4iD,GAAI;AACzC,kBAAI;AACF,uBAAOA,EAAG,MAAMD,EAAO,OAAO3iD,CAAI,CAAC;AAAA,cACpC,SAAQ9F,GAAG;AACV,uBAAO0oD,EAAG1oD,CAAC;AAAA,cACZ;AAAA,YACL,GAEM2oD,IAAW,SAAUF,GAAQG,GAAWC,GAAW5H,GAAMyH,GAAI;AAC/D,kBAAII,IAAS,IAAI,KAAK;AACtB,cAAAA,EAAO,YAAY,WAAqB;AACtC,oBAAIA,EAAO;AACT,yBAAOJ,EAAGI,EAAO,KAAK;AAExB,oBAAIpE,IAASoE,EAAO;AACpB,gBAAAF,KAAaE,EAAO,OAAO;AAC3B,oBAAI;AACF,kBAAAL,EAAO,OAAO/D,CAAM;AAAA,gBACrB,SAAQ1kD,GAAG;AACV,kBAAA0oD,EAAG1oD,CAAC;AACJ;AAAA,gBACD;AACD,gBAAI4oD,IAAY3H,EAAK,OACnB0H,EAASF,GAAQG,GAAWC,GAAW5H,GAAMyH,CAAE,IAE/CA,EAAG,MAAMD,EAAO,IAAK,CAAA;AAAA,cAE7B,GACIK,EAAO,kBAAkB7H,EAAK,MAAM2H,GAAWA,IAAYC,CAAS,CAAC;AAAA,YACzE,GAEME,IAAyB;AAE7B,wBAAK,YAAY,SAAUh7C,GAAO;AAChC,kBAAKg7C,GAIL;AAAA,oBAAIjjD,IAAOiI,EAAM,KAAK,MAClBkzC,IAAOlzC,EAAM,KAAK,MAClBwtB,IAAKxtB,EAAM,KAAK;AACpB,oBAAI,SAAOwtB,IAAO,QACd,GAAC0lB,KAAQ,CAACn7C,IACd;AAAA,sBAAI+iD,IAAY96C,EAAM,KAAK,aAAa,IAAI,OAAO,MAC/C06C,IAAS,IAAIhB,EAAMoB,CAAS;AAChC,kBAAAJ,EAAO,WAAU;AACjB,sBAAIO,IAAO,SAAUp4C,GAAKq4C,GAAM;AAC9B,oBAAKr4C,IAGH,KAAK,YAAY,EAAE,IAAI2qB,GAAI,OAAO3qB,EAAI,KAAI,CAAE,IAF5C,KAAK,YAAY,EAAE,IAAI2qB,GAAI,MAAM0tB,EAAI,CAAE;AAAA,kBAI/C;AACI,kBAAInjD,KAAM0iD,EAASC,GAAQ3iD,GAAMkjD,CAAI,GACjC/H,KAAM0H,EAASF,GAAQ,GAAGI,GAAW5H,GAAM+H,CAAI;AAAA;AAAA;AAAA,YACvD,GAES,WAAY;AACjB,cAAAD,IAAyB;AAAA,YAC7B;AAAA,UACA;AAAA,QAEO;AAAA;AAAA;AAAA,QAEA,SAAS//C,GAAQsf,GAASw9B,GAAqB;AAItD,cAAIoD,IAAOpD,EAAoB,CAAC,GAC5B2B,IAAQ3B,EAAoB,CAAC,GAC7BqD,IAAarD,EAAoB,CAAC,GAClCsD,IAAYtD,EAAoB,CAAC,GAEjCQ,IAAWR,EAAoB,CAAC,GAChCuD,IAAyB/C,EAAS,wBAElCgD,IAA6B,OAAO,OAAS,OAAeD,EAAuB,IAAI;AAE3F,UAAA5B,EAAM,yBAAyB6B,IAA6BF,EAAW,IAAG,WAAY;AAAA,UAAA,GAEtF3B,EAAM,eAAe,WAAY;AAC/B,gBAAI8B,IAASL;AAAA;AAAA,cAAyB;AAAA,eAClCM,IAAYD,EAAO;AACvB,mBAAAA,EAAO,YAAY,WAAY;AAC7B,kBAAI,gBAAgBA,EAAO,SAAS,GACpCC,EAAU,KAAKD,CAAM;AAAA,YACzB,GACSA;AAAA,UACT,GAEA9B,EAAM,aAAa0B,GAEnBngD,EAAO,UAAUy+C;AAAA,QAEV;AAAA;AAAA;AAAA,QAEA,SAASz+C,GAAQsf,GAASw9B,GAAqB;AAEtD,mBAAS2D,EAAsB7D,GAAS;AAE9B,gBAAIC,IAAmB,CAAA;AAGvB,qBAASC,EAAoBC,GAAU;AAGrC,kBAAGF,EAAiBE,CAAQ;AAC1B,uBAAOF,EAAiBE,CAAQ,EAAE;AAGpC,kBAAI/8C,IAAS68C,EAAiBE,CAAQ,IAAI;AAAA;AAAA,gBACxC,GAAGA;AAAA;AAAA,gBACH,GAAG;AAAA;AAAA,gBACH,SAAS,CAAE;AAAA;AAAA,cACzB;AAGY,qBAAAH,EAAQG,CAAQ,EAAE,KAAK/8C,EAAO,SAASA,GAAQA,EAAO,SAAS88C,CAAmB,GAGlF98C,EAAO,IAAI,IAGJA,EAAO;AAAA,YACf;AAGD,YAAA88C,EAAoB,IAAIF,GAGxBE,EAAoB,IAAID,GAGxBC,EAAoB,IAAI,SAAS/rD,GAAO;AAAE,qBAAOA;AAAA,YAAM,GAGvD+rD,EAAoB,IAAI,SAASx9B,GAAS7rB,GAAMupD,GAAQ;AACtD,cAAIF,EAAoB,EAAEx9B,GAAS7rB,CAAI,KACrC,OAAO,eAAe6rB,GAAS7rB,GAAM;AAAA;AAAA,gBACnC,cAAc;AAAA;AAAA,gBACd,YAAY;AAAA;AAAA,gBACZ,KAAKupD;AAAA;AAAA,cACrB,CAAe;AAAA,YAEf,GAGUF,EAAoB,IAAI,SAASx9B,GAAS;AACxC,qBAAO,eAAeA,GAAS,cAAc,EAAE,OAAO,GAAI,CAAE;AAAA,YACxE,GAGUw9B,EAAoB,IAAI,SAAS98C,GAAQ;AACvC,kBAAIg9C,IAASh9C,KAAUA,EAAO;AAAA;AAAA,gBAC5B,WAAsB;AAAE,yBAAOA,EAAO;AAAA,gBAAa;AAAA;AAAA;AAAA,gBACnD,WAA4B;AAAE,yBAAOA;AAAA;;AACvC,qBAAA88C,EAAoB,EAAEE,GAAQ,KAAKA,CAAM,GAClCA;AAAA,YACnB,GAGUF,EAAoB,IAAI,SAAS/qD,GAAQkrD,GAAU;AAAE,qBAAO,OAAO,UAAU,eAAe,KAAKlrD,GAAQkrD,CAAQ;AAAA,YAAE,GAGnHH,EAAoB,IAAI,KAGxBA,EAAoB,KAAK,SAASl1C,GAAK;AAAE,4BAAQ,MAAMA,CAAG,GAASA;AAAA;AAE3E,gBAAI7O,IAAI+jD,EAAoBA,EAAoB,IAAI,YAAY;AAChE,mBAAO/jD,EAAE,WAAWA;AAAA,UACrB;AAED,cAAI2nD,IAAmB,0BACnBC,IAAmB,4BAA+BD,IAAmB;AAGzE,mBAASE,EAAanX,GAAK;AACzB,oBAAQA,IAAM,IAAI,QAAQ,wBAAwB,MAAM;AAAA,UACzD;AAED,mBAASoX,EAAuBC,GAAS9gD,GAAQ+gD,GAAW;AAC1D,gBAAIC,IAAS,CAAE;AACf,YAAAA,EAAOD,CAAS,IAAI,CAAE;AAEtB,gBAAIE,IAAWjhD,EAAO,SAAU,GAC5BkhD,IAAmBD,EAAS,MAAM,qCAAqC;AAC3E,gBAAI,CAACC;AAAkB,qBAAOF;AAM9B,qBALIG,IAAqBD,EAAiB,CAAC,GAGvCE,IAAK,IAAI,OAAO,gBAAgBR,EAAYO,CAAkB,IAAIR,GAAkB,GAAG,GACvFptD,GACIA,IAAQ6tD,EAAG,KAAKH,CAAQ;AAC9B,cAAI1tD,EAAM,CAAC,MAAM,mBACjBytD,EAAOD,CAAS,EAAE,KAAKxtD,EAAM,CAAC,CAAC;AAKjC,iBADA6tD,IAAK,IAAI,OAAO,QAAQR,EAAYO,CAAkB,IAAI,2BAA2BT,IAAmB,cAAcC,GAAkB,GAAG,GACnIptD,IAAQ6tD,EAAG,KAAKH,CAAQ;AAC9B,cAAKH,EAAQvtD,EAAM,CAAC,CAAC,MACnBytD,EAAOD,CAAS,EAAE,KAAKxtD,EAAM,CAAC,CAAC,GAC/ButD,EAAQvtD,EAAM,CAAC,CAAC,IAAIupD,EAAoBvpD,EAAM,CAAC,CAAC,EAAE,IAEpDytD,EAAOztD,EAAM,CAAC,CAAC,IAAIytD,EAAOztD,EAAM,CAAC,CAAC,KAAK,CAAE,GACzCytD,EAAOztD,EAAM,CAAC,CAAC,EAAE,KAAKA,EAAM,CAAC,CAAC;AAGhC,mBAAOytD;AAAA,UACR;AAED,mBAASK,EAAmBC,GAAQ;AAClC,gBAAIhqB,IAAO,OAAO,KAAKgqB,CAAM;AAC7B,mBAAOhqB,EAAK,OAAO,SAAUiqB,GAAWnuD,GAAK;AAC3C,qBAAOmuD,KAAaD,EAAOluD,CAAG,EAAE,SAAS;AAAA,YAC1C,GAAE,EAAK;AAAA,UACT;AAED,mBAASouD,EAAoBV,GAAS/D,GAAU;AAW9C,qBAVI0E,IAAe;AAAA,cACjB,MAAM,CAAC1E,CAAQ;AAAA,YAChB,GACG2E,IAAkB;AAAA,cACpB,MAAM,CAAE;AAAA,YACT,GACGC,IAAc;AAAA,cAChB,MAAM,CAAE;AAAA,YACT,GAEMN,EAAkBI,CAAY;AAEnC,uBADIH,IAAS,OAAO,KAAKG,CAAY,GAC5BxqD,IAAI,GAAGA,IAAIqqD,EAAO,QAAQrqD,KAAK;AACtC,oBAAI8pD,IAAYO,EAAOrqD,CAAC,GACpB2qD,IAAQH,EAAaV,CAAS,GAC9Bc,IAAgBD,EAAM,IAAK;AAE/B,oBADAD,EAAYZ,CAAS,IAAIY,EAAYZ,CAAS,KAAK,CAAE,GACjD,EAAAY,EAAYZ,CAAS,EAAEc,CAAa,KAAK,CAACf,EAAQC,CAAS,EAAEc,CAAa,IAC9E;AAAA,kBAAAF,EAAYZ,CAAS,EAAEc,CAAa,IAAI,IACxCH,EAAgBX,CAAS,IAAIW,EAAgBX,CAAS,KAAK,CAAE,GAC7DW,EAAgBX,CAAS,EAAE,KAAKc,CAAa;AAG7C,2BAFIC,IAAajB,EAAsBC,GAASA,EAAQC,CAAS,EAAEc,CAAa,GAAGd,CAAS,GACxFgB,IAAiB,OAAO,KAAKD,CAAU,GAClChpD,IAAI,GAAGA,IAAIipD,EAAe,QAAQjpD;AACzC,oBAAA2oD,EAAaM,EAAejpD,CAAC,CAAC,IAAI2oD,EAAaM,EAAejpD,CAAC,CAAC,KAAK,CAAE,GACvE2oD,EAAaM,EAAejpD,CAAC,CAAC,IAAI2oD,EAAaM,EAAejpD,CAAC,CAAC,EAAE,OAAOgpD,EAAWC,EAAejpD,CAAC,CAAC,CAAC;AAAA;AAAA,cAEzG;AAGH,mBAAO4oD;AAAA,UACR;AAED,UAAA1hD,EAAO,UAAU,SAAU+8C,GAAUpmD,GAAS;AAC5C,YAAAA,IAAUA,KAAW,CAAE;AACvB,gBAAImqD,IAAU;AAAA,cACZ,MAAMhE,EAAoB;AAAA,YAC3B,GAEG4E,IAAkB/qD,EAAQ,MAAM,EAAE,MAAM,OAAO,KAAKmqD,CAAO,EAAG,IAAGU,EAAmBV,GAAS/D,CAAQ,GAErGjgB,IAAM;AAEV,mBAAO,KAAK4kB,CAAe,EAAE,OAAO,SAAUtoD,GAAG;AAAE,qBAAOA,MAAM;AAAA,YAAQ,CAAA,EAAE,QAAQ,SAAU4G,GAAQ;AAElG,uBADIgiD,IAAc,GACXN,EAAgB1hD,CAAM,EAAEgiD,CAAW;AACxC,gBAAAA;AAEF,cAAAN,EAAgB1hD,CAAM,EAAE,KAAKgiD,CAAW,GACxClB,EAAQ9gD,CAAM,EAAEgiD,CAAW,IAAI,8FAC/BllB,IAAMA,IAAM,SAAS98B,IAAS,SAASygD,EAAqB,WAAW,QAAQ,gBAAgB,KAAK,UAAUuB,CAAW,CAAC,IAAI,QAAQN,EAAgB1hD,CAAM,EAAE,IAAI,SAAUuyB,GAAI;AAAE,uBAAO,KAAK,KAAK,UAAUA,CAAE,IAAI,OAAOuuB,EAAQ9gD,CAAM,EAAEuyB,CAAE,EAAE,SAAQ;AAAA,cAAI,CAAA,EAAE,KAAK,GAAG,IAAI;AAAA;AAAA,YAC5Q,CAAG,GAEDuK,IAAMA,IAAM,MAAM2jB,EAAqB,SAAQ,EAAG,QAAQ,gBAAgB,KAAK,UAAU1D,CAAQ,CAAC,IAAI,QAAQ2E,EAAgB,KAAK,IAAI,SAAUnvB,GAAI;AAAE,qBAAO,KAAK,KAAK,UAAUA,CAAE,IAAI,OAAOuuB,EAAQ,KAAKvuB,CAAE,EAAE,SAAU;AAAA,YAAA,CAAE,EAAE,KAAK,GAAG,IAAI;AAE1O,gBAAI0vB,IAAO,IAAI,OAAO,KAAK,CAACnlB,CAAG,GAAG,EAAE,MAAM,mBAAmB;AAC7D,gBAAInmC,EAAQ;AAAQ,qBAAOsrD;AAE3B,gBAAIC,IAAM,OAAO,OAAO,OAAO,aAAa,OAAO,UAAU,OAAO,OAEhEC,IAAYD,EAAI,gBAAgBD,CAAI,GACpC1B,IAAS,IAAI,OAAO,OAAO4B,CAAS;AACxC,mBAAA5B,EAAO,YAAY4B,GAEZ5B;AAAA,UACR;AAAA,QAGM;AAAA;AAAA;AAAA,QAEA,SAASvgD,GAAQsf,GAAS;AAQjC,UAAAtf,EAAO,UAAU,SAAmBoiD,GAAYC,GAAaC,GAAU;AAEnE,gBAAIC,IAAQ,IAAIH,EAAW,WAAWE,CAAQ;AAC9C,qBAASE,EAASC,GAAOC,GAAO;AAE5B,cAAAD,IAAQA,IAAQ,GAChBC,IAAQA,IAAQ;AAChB,kBAAIC,IAAQ,GAAGC,IAAQ,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS,GAAGC,IAAS;AAMvK,mBALAX,IAASN,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCK,IAASR,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCO,IAASV,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCS,IAASZ,EAAMG,IAAQ,OAAO,CAAC,IAAI,GACnCW,IAASd,EAAMG,IAAQ,OAAO,CAAC,IAAI,GAC9BC,IAAQ,IAAIA,IAAQ,MAAMF,IAAQ,IAAIE,IAAQA,IAAQ,KAAK,GAAG;AAM/D,qBALAG,IAASD,GACTG,IAASD,GACTG,IAASD,GACTG,IAASD,GACTG,IAASD,GACJT,IAAQ,IAAIA,IAAQ,KAAK,IAAIA,IAAQA,IAAQ,IAAI;AAClD,kBAAAY,IAASjB,EAAMI,IAAQC,KAAS,CAAC,IAAI,GACrCW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAAS,CAACF,IAASI,KAAU,OAAOK,IAASH,IAAS,KAAK,aAAa,KAAK,GACjIA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAME,IAAQG,KAAS,CAAC,IAAIY;AAEhC,qBAAKZ,IAAQH,IAAQ,KAAK,IAAIG,IAAQ,MAAMH,IAAQ,KAAK,IAAIG,IAAQA,IAAQ,IAAI;AAC7E,kBAAAY,KAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAAS,CAACF,IAASI,KAAU,OAAOK,IAASH,IAAS,KAAK,aAAa,KAAK,GACjIA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,qBAAKZ,IAAQH,IAAQ,KAAK,IAAIG,IAAQ,MAAMH,IAAQ,MAAM,IAAIG,IAAQA,IAAQ,IAAI;AAC9E,kBAAAY,KAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAASE,KAAU,OAAOK,IAASH,IAAS,KAAK,aAAa,KAAK,GACvHA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,qBAAKZ,IAAQH,IAAQ,MAAM,IAAIG,IAAQ,MAAMH,IAAQ,MAAM,IAAIG,IAAQA,IAAQ,IAAI;AAC/E,kBAAAY,KAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAASF,IAASI,IAASF,IAASE,KAAU,OAAOK,IAASH,IAAS,KAAK,aAAa,KAAK,GAClJA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,qBAAKZ,IAAQH,IAAQ,MAAM,IAAIG,IAAQ,MAAMH,IAAQ,MAAM,IAAIG,IAAQA,IAAQ,IAAI;AAC/E,kBAAAY,KAAUjB,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,MAAM,KAAKL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,IAAIL,EAAMK,IAAQ,MAAM,CAAC,OAAO,IAC5NW,MAAWV,KAAU,IAAIA,MAAW,OAAOE,IAASE,IAASE,KAAU,OAAOK,IAASH,IAAS,KAAK,YAAY,KAAK,GACtHA,IAASF,GACTA,IAASF,GACTA,IAASF,KAAU,KAAKA,MAAW,GACnCA,IAASF,GACTA,IAASU,GACThB,EAAMK,KAAS,CAAC,IAAIY;AAExB,gBAAAX,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS,GAC3BC,IAASA,IAASC,IAAS;AAAA,cAC9B;AACD,cAAAf,EAAMG,IAAQ,OAAO,CAAC,IAAIG,GAC1BN,EAAMG,IAAQ,OAAO,CAAC,IAAIK,GAC1BR,EAAMG,IAAQ,OAAO,CAAC,IAAIO,GAC1BV,EAAMG,IAAQ,OAAO,CAAC,IAAIS,GAC1BZ,EAAMG,IAAQ,OAAO,CAAC,IAAIW;AAAA,YAC7B;AACD,mBAAO,EAAE,MAAMb;UACnB;AAAA,QAEO;AAAA;AAAA;AAAA,QAEA,SAASxiD,GAAQsf,GAAS;AAEjC,cAAI7W,IAAQ,MAIRq3C,IAAS;AACb,UAAI,OAAO,OAAS,OAAe,OAAO,KAAK,iBAAmB,QAChEA,IAAS,IAAI,KAAK;AAKpB,cAAI2D,IAAU,SAAUha,GAAKia,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,GAAK;AACrD,gBAAI5hC,IAAI,QACJ8mD,IAAKllB,IAAM,GACX+qB,KAAMjG,IAAMI,KAAM,GAClBjlD,IAAI6kD,IAAMiG;AACd,oBAAQ7F,GAAE;AAAA,cACR,KAAK;AACH,gBAAA2F,EAAG7qB,CAAG,IAAI4Q,EAAI,WAAWuD,IAAQ,CAAC;AAAA,cACpC,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAItU,EAAI,WAAWuD,IAAQ,CAAC;AAAA,cACxD,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAItU,EAAI,WAAWuD,IAAQ,CAAC;AAAA,cACxD,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAItU,EAAI,WAAWuD,CAAK;AAAA,YACrD;AACD,gBAAI,EAAA2Q,IAAMiG,KAAM,IAAI7F,KAGpB;AAAA,mBAAK9mD,IAAI,IAAI8mD,GAAI9mD,IAAI6B,GAAG7B,IAAIA,IAAI,IAAI;AAClC,gBAAA0sD,EAAI9qB,IAAM5hC,KAAK,CAAC,IAAIwyC,EAAI,WAAWuD,IAAQ/1C,CAAC,KAAK,KAAKwyC,EAAI,WAAWuD,IAAQ/1C,IAAI,CAAC,KAAK,KAAKwyC,EAAI,WAAWuD,IAAQ/1C,IAAI,CAAC,KAAK,IAAIwyC,EAAI,WAAWuD,IAAQ/1C,IAAI,CAAC;AAE/J,sBAAQ2sD,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAF,EAAG7qB,IAAM//B,IAAI,IAAI,CAAC,IAAI2wC,EAAI,WAAWuD,IAAQl0C,IAAI,CAAC;AAAA,gBACpD,KAAK;AACH,kBAAA4qD,EAAG7qB,IAAM//B,IAAI,IAAI,CAAC,IAAI2wC,EAAI,WAAWuD,IAAQl0C,IAAI,CAAC;AAAA,gBACpD,KAAK;AACH,kBAAA4qD,EAAG7qB,IAAM//B,IAAI,IAAI,CAAC,IAAI2wC,EAAI,WAAWuD,IAAQl0C,CAAC;AAAA,cACjD;AAAA;AAAA,UACH,GAII+qD,IAAU,SAAU5V,GAAKyV,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,GAAK;AACrD,gBAAI5hC,IAAI,QACJ8mD,IAAKllB,IAAM,GACX+qB,KAAMjG,IAAMI,KAAM,GAClBjlD,IAAI6kD,IAAMiG;AACd,oBAAQ7F,GAAE;AAAA,cACR,KAAK;AACH,gBAAA2F,EAAG7qB,CAAG,IAAIoV,EAAIjB,IAAQ,CAAC;AAAA,cACzB,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAIjB,IAAQ,CAAC;AAAA,cAC7C,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAIjB,IAAQ,CAAC;AAAA,cAC7C,KAAK;AACH,gBAAA0W,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAIjB,CAAK;AAAA,YAC1C;AACD,gBAAI,EAAA2Q,IAAMiG,KAAM,IAAI7F,KAGpB;AAAA,mBAAK9mD,IAAI,IAAI8mD,GAAI9mD,IAAI6B,GAAG7B,IAAIA,IAAI,IAAI;AAClC,gBAAA0sD,EAAI9qB,IAAM5hC,KAAK,IAAI,CAAC,IAAIg3C,EAAIjB,IAAQ/1C,CAAC,KAAK,KAAKg3C,EAAIjB,IAAQ/1C,IAAI,CAAC,KAAK,KAAKg3C,EAAIjB,IAAQ/1C,IAAI,CAAC,KAAK,IAAIg3C,EAAIjB,IAAQ/1C,IAAI,CAAC;AAEvH,sBAAQ2sD,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAF,EAAG7qB,IAAM//B,IAAI,IAAI,CAAC,IAAIm1C,EAAIjB,IAAQl0C,IAAI,CAAC;AAAA,gBACzC,KAAK;AACH,kBAAA4qD,EAAG7qB,IAAM//B,IAAI,IAAI,CAAC,IAAIm1C,EAAIjB,IAAQl0C,IAAI,CAAC;AAAA,gBACzC,KAAK;AACH,kBAAA4qD,EAAG7qB,IAAM//B,IAAI,IAAI,CAAC,IAAIm1C,EAAIjB,IAAQl0C,CAAC;AAAA,cACtC;AAAA;AAAA,UACH,GAEIgrD,IAAW,SAAU7B,GAAMyB,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,GAAK;AACvD,gBAAI5hC,IAAI,QACJ8mD,IAAKllB,IAAM,GACX+qB,KAAMjG,IAAMI,KAAM,GAClBjlD,IAAI6kD,IAAMiG,GACV3V,IAAM,IAAI,WAAW6R,EAAO,kBAAkBmC,EAAK,MAAMjV,GAAOA,IAAQ2Q,CAAG,CAAC,CAAC;AACjF,oBAAQI,GAAE;AAAA,cACR,KAAK;AACH,gBAAA2F,EAAG7qB,CAAG,IAAIoV,EAAI,CAAC;AAAA,cACjB,KAAK;AACH,gBAAAyV,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAI,CAAC;AAAA,cACrC,KAAK;AACH,gBAAAyV,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAI,CAAC;AAAA,cACrC,KAAK;AACH,gBAAAyV,EAAG7qB,IAAM,KAAKklB,KAAM,KAAK,CAAC,IAAI9P,EAAI,CAAC;AAAA,YACtC;AACD,gBAAI,EAAA0P,IAAMiG,KAAM,IAAI7F,KAGpB;AAAA,mBAAK9mD,IAAI,IAAI8mD,GAAI9mD,IAAI6B,GAAG7B,IAAIA,IAAI,IAAI;AAClC,gBAAA0sD,EAAI9qB,IAAM5hC,KAAK,IAAI,CAAC,IAAIg3C,EAAIh3C,CAAC,KAAK,KAAKg3C,EAAIh3C,IAAI,CAAC,KAAK,KAAKg3C,EAAIh3C,IAAI,CAAC,KAAK,IAAIg3C,EAAIh3C,IAAI,CAAC;AAEvF,sBAAQ2sD,GAAE;AAAA,gBACR,KAAK;AACH,kBAAAF,EAAG7qB,IAAM//B,IAAI,IAAI,CAAC,IAAIm1C,EAAIn1C,IAAI,CAAC;AAAA,gBACjC,KAAK;AACH,kBAAA4qD,EAAG7qB,IAAM//B,IAAI,IAAI,CAAC,IAAIm1C,EAAIn1C,IAAI,CAAC;AAAA,gBACjC,KAAK;AACH,kBAAA4qD,EAAG7qB,IAAM//B,IAAI,IAAI,CAAC,IAAIm1C,EAAIn1C,CAAC;AAAA,cAC9B;AAAA;AAAA,UACH;AAEA,UAAAkH,EAAO,UAAU,SAAUlD,GAAM4mD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,GAAK;AACzD,gBAAI,OAAO/7B,KAAS;AAClB,qBAAO2mD,EAAQ3mD,GAAM4mD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAM/C,gBAJI/7B,aAAgB,SAIhB2L,KAASA,EAAM,UAAUA,EAAM,OAAO,SAAS3L,CAAI;AACrD,qBAAO+mD,EAAQ/mD,GAAM4mD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAE/C,gBAAI/7B,aAAgB;AAClB,qBAAO+mD,EAAQ,IAAI,WAAW/mD,CAAI,GAAG4mD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAE/D,gBAAI/7B,EAAK,kBAAkB;AACzB,qBAAO+mD,EAAQ,IAAI,WAAW/mD,EAAK,QAAQA,EAAK,YAAYA,EAAK,UAAU,GAAG4mD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAExG,gBAAI/7B,aAAgB;AAClB,qBAAOgnD,EAAShnD,GAAM4mD,GAAIC,GAAK3W,GAAO2Q,GAAK9kB,CAAG;AAEhD,kBAAM,IAAI,MAAM,wBAAwB;AAAA,UAC1C;AAAA,QAEO;AAAA;AAAA;AAAA,QAEA,SAAS74B,GAAQsf,GAASw9B,GAAqB;AAEtD,cAAIiH,IAAe,2BAAY;AAAE,qBAASC,EAAiBx2C,GAAQnd,GAAO;AAAE,uBAAS4G,IAAI,GAAGA,IAAI5G,EAAM,QAAQ4G,KAAK;AAAE,oBAAIgtD,IAAa5zD,EAAM4G,CAAC;AAAG,gBAAAgtD,EAAW,aAAaA,EAAW,cAAc,IAAOA,EAAW,eAAe,IAAU,WAAWA,MAAYA,EAAW,WAAW,KAAM,OAAO,eAAez2C,GAAQy2C,EAAW,KAAKA,CAAU;AAAA,cAAE;AAAA,YAAI;AAAC,mBAAO,SAAU7G,GAAa8G,GAAYC,GAAa;AAAE,qBAAID,KAAYF,EAAiB5G,EAAY,WAAW8G,CAAU,GAAOC,KAAaH,EAAiB5G,GAAa+G,CAAW,GAAU/G;AAAA,YAAc;AAAA,UAAG,EAAA;AAEjjB,mBAASF,EAAgBC,GAAUC,GAAa;AAAE,gBAAI,EAAED,aAAoBC;AAAgB,oBAAM,IAAI,UAAU,mCAAmC;AAAA,UAAM;AAIzJ,cAAIqB,IAAQ3B,EAAoB,CAAC,GAE7BQ,IAAWR,EAAoB,CAAC,GAChCS,IAAQD,EAAS,OAEjB8G,IAAO,WAAY;AACrB,qBAASA,IAAO;AACd,cAAAlH,EAAgB,MAAMkH,CAAI,GAE1B,KAAK,SAAS,IAAI3F,KAClB,KAAK,OAAO;YACb;AAED,mBAAA2F,EAAK,UAAU,SAAS,SAAgBtnD,GAAM;AAC5C,0BAAK,OAAO,OAAOA,CAAI,GAChB;AAAA,YACX,GAEEsnD,EAAK,UAAU,SAAS,SAAgBC,GAAU;AAChD,kBAAIC,IAAS,KAAK,OAAO,OAAM,EAAG;AAClC,kBAAI,CAACD;AACH,uBAAOC;AAET,kBAAID,MAAa;AACf,uBAAO9G,EAAM+G,CAAM;AAErB,oBAAM,IAAI,MAAM,6BAA6B;AAAA,YACjD,GAEEP,EAAaK,GAAM,CAAC;AAAA,cAClB,KAAK;AAAA,cACL,KAAK,WAAY;AACf,uBAAO,KAAK,OAAO;cACpB;AAAA,cACD,KAAK,SAAUhrB,GAAO;AACpB,qBAAK,OAAO,SAASA,CAAK;AAAA,cAC3B;AAAA,YACF,CAAA,CAAC,GAEKgrB;AAAA,UACT;AAEA,UAAApkD,EAAO,UAAU,WAAY;AAC3B,mBAAO,IAAIokD,EAAI;AAAA,UACjB;AAAA,QAEO;AAAA;AAAA,MACP,CAAU;AAAA;AAAA,EACV,CAAC;;;mCCv5BKG,KAAkB,GAClBC,KAAuB,KACvBC,KAAuB,KACvBC,KAAuB,GAEvBC,KAAa,OAAOC,GAA4BtpD,IAAiB,SAAS;AACxE,QAAAA;AACR,GAEMupD,KAAe,OAAOD,GAA4B7I,MAAgB;AAChE,QAAA,EAAE,WAAA7rB,MAAc3C,MAChB,EAAE,sBAAAgvB,MAAyB9uB;AACjC,SAAO,MAAM6uB,GAAgBpsB,GAAW00B,GAAW7I,GAAKQ,CAAoB;AAC9E,GAEMuI,KAA+B,CAACxpD,MAAuB;AAC3D,QAAM,EAAE,GAAA/K,EAAM,IAAA2K,GAAK,UAAUA;AACzB,MAAA,CAACI,KAAS,CAACA,EAAM,YAAY,CAACA,EAAM,SAAS;AAE/C,WAAO/K,EAAE,2CAA2C;AAEhD,QAAAuM,IAAOxB,EAAM,SAAS,MACtBypD,IAA0B,CAAA;AACrB,aAAA,CAAC3xD,GAAK4J,CAAM,KAAK,OAAO,QAAQF,EAAK,MAAM;AACpD,YAAQ1J,GAAK;AAAA,MACX,KAAK;AACW,QAAA2xD,EAAA,KAAKx0D,EAAE,mCAAmC,CAAC;AACzD;AAAA,MACF,KAAK;AACW,QAAAw0D,EAAA,KAAKx0D,EAAE,qCAAqC,CAAC;AAC3D;AAAA,MACF,KAAK;AACW,QAAAw0D,EAAA,KAAKx0D,EAAE,uCAAuC,CAAC;AAC7D;AAAA,MACF;AAEgB,QAAAw0D,EAAA,KAAKx0D,EAAE,0CAA0C,IAAI,OAAO6C,IAAM,QAAQ4J,EAAO,KAAK,GAAG,CAAC;AAAA,IAC5G;AAEK,SAAA+nD,EAAc,SAAS,IAAIA,EAAc,KAAKrnD,EAAa,IAAInN,EAAE,2CAA2C;AACrH,GAEMy0D,KAAW,OAAOlwC,GAAgB6mC,GAAc1D,MAC7C,IAAI,QAAQ,CAAChuB,GAASiE,MAAW;AACtC,QAAM+2B,IAAUhN,EAAK,MAAMnjC,GAAQA,IAAS6mC,CAAI,GAC1CmE,IAAS,IAAI;AACZ,EAAAA,EAAA,SAAS,SAAU9oD,GAAG;;AAC3B,MAAItC,IAAAsC,EAAE,WAAF,gBAAAtC,EAAU,gBAAe,WAAW,QACtCu1B,EAAQ,EAAE,MAAMjzB,EAAE,OAAO,QAAkB,QAAA8d,GAAgB;AAAA,EAC7D,GAEKgrC,EAAA,UAAU,SAAU9oD,GAAG;AAC5B,IAAAk3B,EAAOl3B,CAAC;AAAA,EAAA,GAEV8oD,EAAO,kBAAkBmF,CAAO;AAAA,CACjC,GAGGC,KAAQ,CAAC9nB,MACN,IAAI,QAAQ,CAACnT,MAAY,WAAWA,GAASmT,CAAE,CAAC;AAGzC,SAAA+nB,GAAUP,GAA4BQ,IAAsB,QAAW;AAC/E,QAAA,EAAE,WAAAl1B,MAAc3C,MAChB83B,IAAW/uD,EAAI,CAAC,GAEhBgvD,IAAWhvD,EAAI,CAAC;AAEtB,MAAIivD,IAAoB,CAAA,GACpBC,IAAgB,GAChBC,IAAe,GACfC,IAAa;AACX,QAAA3J,IAAM4J,GAAM,cACZ,EAAE,iBAAAxK,GAAiB,eAAAJ,EAAc,IAAIF,GAAsB,GAE3D+K,IAAsB,MACnB,KAAK,IAAQ,IAAA;AAItB,WAASC,EAAiBC,GAAe;AACvC,UAAMC,IAAeH;AACrB,QAAIJ,MAAkB,GAAG;AACP,MAAAA,IAAAO;AAEhB;AAAA,IACF;AAEA,UAAMC,IAAWN,IAAa,IAAII,EAAc,SAASJ,IAAaI,EAAc;AACpF,IAAAJ,IAAaI,EAAc,UAAUA,EAAc,SAAS,IAAIA,EAAc,QACnEP,EAAA,KAAKS,KAAYD,IAAeP,EAAc,GAEzCA,IAAAO;AAAA,EAClB;AAEM,QAAAE,IAAc,OAAOC,GAAiBpxC,MACnC,IAAI,QAAQ,CAACmV,GAASiE,MAAW;AAClC,QAAA,CAAC02B,EAAU,QAAQ;AACd,MAAA12B;AACP;AAAA,IACF;AACA,IAAAmuB;AAAA,MACEnsB;AAAA,MACA00B;AAAA,MACAA,EAAU;AAAA,MACVsB;AAAA;AAAA,MACAA,EAAU;AAAA,MACVpxC;AAAA,MACA+wC;AAAA,IAAA,EAEC,KAAK,CAACx0C,MAAW;AAChB,MAAA4Y,EAAQ5Y,CAAM;AAAA,IAAA,CACf,EACA,MAAM,CAAC80C,MAAc;AACpB,MAAAj4B,EAAOi4B,CAAS;AAAA,IAAA,CACjB;AAAA,EAAA,CACJ,GAGGC,IAAwB,OAAOtxC,MAAkC;AACrD,IAAAqmC,EAAAyJ,EAAU,SAAS,KAAK;AACxC,QAAIzF,IAAgD,MAAM6F,GAASlwC,GAAQimC,EAAc,OAAO6J,EAAU,IAAK,GAC3GsB,IAAY,IAAI,KAAK,CAAC/G,EAAY,IAAI,GAAGyF,EAAU,KAAM,IAAI;AAEjE,IAAAA,EAAU,oBAAoB9vC;AAC9B,UAAMuxC,IAAclqD,GAAM;AAChB,IAAAyoD,EAAA,yBAAyByB,EAAY;AAE/C,QAAIC,IAAY7B,IACZ8B,IAAU;AACX,OAAA;AACD,MAAAA;AACI,UAAA;AACI,qBAAAN,EAAYC,GAAWpxC,CAAM,GAC/BinC,EAAA,OAAOoD,EAAY,IAAI,GAEpB+G;AAAA,eACA5qD,GAAO;AAEV,YAAAiB,GAAoCjB,CAAc;AAC1C,iBAAAirD,IAAAhC,IACAK,EAAA,MAAM,UAAUE,GAA6BxpD,CAAK,GACrD,QAAQ,OAAOA,CAAK;AAG7B,QAAI6/C,EAAgByJ,EAAU,SAAS,KAAK,MAC1CzF,IAAc,MAAM6F,GAASlwC,GAAQimC,EAAc,OAAO6J,EAAU,IAAK,GAC7DsB,IAAA,IAAI,KAAK,CAAC/G,EAAY,IAAI,GAAGyF,EAAU,KAAM,IAAI,IAG/D,MAAMM,GAAMoB,CAAS,GACrBC,MAAYhC,KAAkB,IAAK+B,IAAY,IAAMA,KAAa5B;AAAA,MACpE;AAAA,IAAA,SACO6B,IAAUhC;AACZ,WAAA,QAAQ,OAAO,4CAA4C;AAAA,EAAA;AAGpE,WAASiC,IAAa;AACpB,aAASC,IAAgB;AAEnB,UADSlB,IAAAA,EAAW,MAAM,GAAG,GAC7BA,EAAW,SAAS,GAAG;AACzB,cAAMmB,IAAW,KAAK,KAAKnB,EAAW,OAAO,CAAC7b,GAAKj1B,MAAYi1B,IAAMj1B,CAAO,IAAI8wC,EAAW,MAAM,GAC3FoB,IAAiB,KAAK,KAAKtB,EAAS,UAAU,MAAMC,EAAS,SAAS,IAAI;AAEhF,QAAAF,EAAeE,EAAS,OAAOoB,GAAU,KAAK,KAAKC,IAAiBD,CAAQ,CAAC;AAAA,MAC/E;AAEA,MAAIjB,MAAiB,KACnB,WAAW,WAAY;AACP,QAAAgB;SACbjC,EAAoB;AAAA,IAE3B;AAEc,IAAAiC;EAChB;AAyCO,SAAA;AAAA,IACL,YAxCiB,YACV,IAAI,QAAQ,CAACx8B,GAASiE,MAAW;AACtC,UAAI,CAAC02B,EAAU,QAAQA,EAAU,KAAK,OAAO,GAAG;AAC9C,QAAAD,GAAoB;AACpB;AAAA,MACF;AACS,MAAAU,EAAA,QAAQT,EAAU,KAAK,MAChCA,EAAU,SAAS5K,GAAsB,WACzCoC,GAAelsB,GAAW00B,CAAS,EAChC,KAAK,CAAChlD,MAAQ;AACb,QAAAglD,EAAU,UAAUhlD,EAAI,OACxBglD,EAAU,SAAShlD,EAAI,IACvBqqB,EAAQ26B,CAAS;AAAA,MAAA,CAClB,EACA,MAAM,CAACh9C,MAAQ;AACd,QAAAsmB,EAAOtmB,CAAG;AAAA,MAAA,CACX;AAAA,IAAA,CACJ;AAAA,IAwBD,QArBa,YAAY;;AACzB,MAAIw9C,KACSoB;AAGP,YAAAI,KAAWlyD,IAAAkwD,EAAU,SAAV,gBAAAlwD,EAAgB;AACjC,UAAI5D,EAAY81D,CAAQ;AAAG,eAAO,QAAQ;AAE1C,UAAI3vD,IAAI;AACR,aAAOA,IAAI2vD,KAAU;AACb,cAAAC,IAAgB,MAAMT,EAAsBnvD,CAAC;AACnD,QAAAA,KAAK4vD,EAAc,MACVvB,EAAA,QAASruD,IAAI2vD,IAAY;AAAA,MACpC;AAEe,aAAAnB,IAAA,KAAK,IAAQ,IAAA,KACrB,MAAMZ,GAAaD,GAAW7I,EAAI,OAAO,KAAK,CAAC;AAAA,IAAA;AAAA,EAKtD;AAEJ;AAEa,MAAA+K,KAAa,CAACC,MAAyC;AAElE,EAAAA,EAAkB,OAAO,yBAAyB;AACpD,GC/OaC,KAA4D,OAAO,kCAAkC;AAE3G,SAASC,KAA8B;AAC5C,SAAOC,GAA6BF,EAA2B;AACjE;AAEO,MAAMG,KAAsB;AAAA,EACjC,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,cAAc;AAAA,EACd,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,yBAAyB;AAAA,EACzB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,aAAa;AACf,GChBM,EAAE,GAAA52D,GAAM,IAAA2K,GAAK,UAAUA,IAEvBksD,KAA8B9wD,EAAI,EAAK;AAEtC,SAAS+wD,KAAuB;AAC/B,QAAA,EAAE,cAAAC,MAAiB75B,MAEnB85B,IAAUD,EAAa,WAAWA,EAAa,aAAa,SAAS,GAErE,EAAE,MAAAj4C,GAAM,IAAAm4C,EAAA,IAAOC,GAAaH,EAAa,cAAc;AAAA,IAC3D,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,EAAA,CACD;AA2BM,SAAA;AAAA,IACL,gBA1BqB,MAAM;AAG3B,UAFQ,QAAA,IAAI,kBAAkBC,CAAO,GACrCH,GAA4B,QAAQ,IAChC,CAACG;AAAS;AACd,YAAMG,IAAWT;AAEjB,MADK53C,KACAm4C,EAAG,UACLA,EAAA,MAAM,SAAS,SAA2BziD,GAAc;AACjD,gBAAA,IAAI,mCAAmCA,CAAK;AAAA,MAAA,GAEnDyiD,EAAA,MAAM,UAAU,SAA2BziD,GAAc;AACpD,cAAA,EAAE,aAAA1G,MAAgBV;AACxB,mBAAW,MAAM;AACH,UAAAU,EAAA9N,GAAE,2CAA2C,GAAG,EAAE;AAAA,WAC7D,GAAI,GACC,QAAA,IAAI,oCAAoCwU,CAAK;AAAA,MAAA,GAEpDyiD,EAAA,MAAM,YAAY,SAA2BziD,GAAqB;AACnE,cAAMtJ,IAAU,KAAK,MAAMsJ,EAAM,IAAc,GACzCjI,IAAOrB,EAAQ,KAAK,SAAS,KAAK,MAAMA,EAAQ,IAAI,IAAI;AACtD,gBAAA,IAAIA,EAAQ,WAAWqB,CAAI,GACnC4qD,EAAS,KAAK,EAAE,MAAMjsD,EAAQ,WAAW,MAAAqB,GAAM;AAAA,MAAA;AAAA,IACjD;AAAA,IAKA,6BAAAsqD;AAAA,EAAA;AAEJ;AAEO,SAASO,KAAsB;AACpC,QAAMD,IAAWT;AAMV,SAAA;AAAA,IACL,4BALiC,CAAC9jD,MAC3BukD,EAAS,GAAGvkD,CAAQ;AAAA,EAI3B;AAEJ;ACnEO,SAASykD,KAAsB;AAqB7B,SAAA;AAAA,IACL,gBArBqB,CAACC,GAAuCC,MAA0B;AACvF,iBAAW,CAAC10D,GAAKrC,CAAK,KAAK,OAAO,QAAQ82D,CAAW;AAC/C,QAAAl2D,GAAcZ,CAAK,KACrB+2D,EAAS,IAAI10D,CAAG;AAAA,IAEpB;AAAA,IAiBA,oBAdyB,CAACy0D,MAA0C;AACpE,YAAME,IAA0B,CAAA;AAChC,iBAAWh3D,KAAS,OAAO,OAAO82D,CAAW;AAC3C,QAAIz2D,GAAQL,CAAK,KAAKA,EAAM,SAAS,KAC7BA,EAAA,QAAQ,CAACwhC,MAAO;AACpB,UAAAw1B,EAAU,KAAKx1B,CAAE;AAAA,QAAA,CAClB;AAGE,aAAAw1B;AAAA,IAAA;AAAA,EAKP;AAEJ;ACbO,SAASC,GAKdC,GACAC,GACAC,GACAC,IAAS,MACT;AACA,QAAMC,IAAoC/xD,EAAQ,oBAAA,IAAK,CAAA,GACjDgyD,IAAUhyD,EAAQ,oBAAA,IAAK,CAAA,GAEvBszB,IAAM,IAAIlhB,MAA6B;AACrC,UAAA6/C,wBAAoB;AAC1B,aAAStxD,IAAI,GAAGA,IAAIyR,EAAK,QAAQzR,KAAK;AAC9B,YAAAuxD,IAAM9/C,EAAKzR,CAAC;AAClB,UAAI,EAAAhG,GAAOu3D,CAAG,KAAK13D,EAAY03D,CAAG,IAC9B;AAAA,YAAAp3D,GAAQo3D,CAAG,GAAG;AAChB,mBAAS1vD,IAAI,GAAGA,IAAI0vD,EAAI,QAAQ1vD,KAAK;AAC7B,kBAAAjE,IAAO2zD,EAAI1vD,CAAC;AAClB,YAAI7H,GAAO4D,CAAI,KAAK/D,EAAY+D,CAAI,KAC/BwzD,EAAM,MAAM,IAAIxzD,CAAI,KAAG0zD,EAAM,IAAI1zD,CAAI;AAAA,UAC5C;AACA;AAAA,QACF;AACA,QAAKwzD,EAAM,MAAM,IAAIG,CAAG,KAAGD,EAAM,IAAIC,CAAG;AAAA;AAAA,IAC1C;AACM,IAAAD,EAAA,QAAQ,CAACh2B,MAAO;AACpB,MAAA81B,EAAM,MAAM,IAAI91B,GAAI,EAAE,GAAG21B,EAAe31B,CAAE,GAAQ,SAAS,GAAS,CAAA,GAC5D+1B,EAAA,MAAM,IAAI/1B,CAAE;AAAA,IAAA,CACrB;AAAA,EAAA,GAGGk2B,IAAY,CAAC3rD,MAAY;AACzB,IAAAA,EAAKsrD,CAAM,KACbC,EAAM,MAAM,IAAIvrD,EAAKsrD,CAAM,GAAQ,EAAE,GAAGH,EAAiBnrD,CAAI,GAAQ,SAAS,GAAQ,CAAA;AAAA,EACxF,GAGI+sB,IAAmB,CAAC/sB,MAAY;AAChC,IAAAA,EAAKsrD,CAAM,KACbC,EAAM,MAAM,IAAIvrD,EAAKsrD,CAAM,GAAQ,EAAE,GAAGtrD,GAAW,SAAS,GAAQ,CAAA;AAAA,EACtE,GAGI4rD,IAAY,CAAC5rD,MAAc;AAC/B,aAAS7F,IAAI,GAAGA,IAAI6F,EAAK,QAAQ7F,KAAK;AACpC,MAAAoxD,EAAM,MAAM,IAAIvrD,EAAK7F,CAAC,EAAEmxD,CAAM,GAAQ,EAAE,GAAGH,EAAiBnrD,EAAK7F,CAAC,CAAC,GAAQ,SAAS,IAAQ;AAAA,EAC9F,GAGI0xD,IAAgB,CAAC3+B,MAAkB;AACvC,aAAS/yB,IAAI,GAAGA,IAAI+yB,EAAI,QAAQ/yB,KAAK;AACnC,MAAAqxD,EAAQ,MAAM,OAAOt+B,EAAI/yB,CAAC,CAAC;AAAA,EAC7B;AAGF,iBAAe2xD,IAAW;AACpB,QAAAN,EAAQ,MAAM,OAAO,GAAG;AAC1B,YAAMt+B,IAAM,MAAM,KAAKs+B,EAAQ,KAAK,GAC9B1oD,IAAM,MAAMuoD,EAAcn+B,CAAG;AACnC,aAAA2+B,EAAc3+B,CAAG,GACjB0+B,EAAU9oD,CAAG,GACNA;AAAA,IACT;AACA,WAAO;EACT;AAEA,QAAMipD,IAAiBC;AAAA,IACrB,YACS,MAAMF,EAAS;AAAA,IAExB;AAAA,IACA,EAAE,SAAS,IAAK;AAAA,EAAA;AAoCX,SAAA;AAAA,IACL,OAAAP;AAAA,IACA,SAAAC;AAAA,IACA,OAhCY,MACLO,EAAe;AAAA,IAgCtB,gBAzBqB,MACdD,EAAS;AAAA,IAyBhB,KAAAh/B;AAAA,IACA,WAAA6+B;AAAA,IACA,kBAAA5+B;AAAA,IACA,KApBU,CAAC0I,MACNA,IACE81B,EAAM,MAAM,IAAI91B,CAAE,IADT;AAAA,IAoBhB,KA1BU,CAACA,MAA6B;AACxC,UAAKA;AACE,eAAA81B,EAAM,MAAM,IAAI91B,CAAE;AAAA,IAAA;AAAA,IAyBzB,UAjBe,CAACA,MAAsC;AACtD,UAAI,CAACA;AAAW,eAAA;AAChB,YAAM19B,IAAOwzD,EAAM,MAAM,IAAI91B,CAAE;AAC/B,aAAK19B,IACEA,EAAK,UADM;AAAA,IACN;AAAA,EAaZ;AAEJ;ACxHA,MAAMk0D,KAAwB,CAAC/+B,GAA0BgF,MAAiC;AAClF,QAAA,EAAE,eAAAZ,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAW,GAAY,gBAAAP,GAAgB,UAAAR,MAAaF,MACzFK,IAAQxE,EAAI;AAClB,SAAAoE,EAAcI,CAAK,GACnBF,EAAe,GAAGE,CAAK,GACvBC,EAAc,MAAM,EAAK,GACrBO,IAAaX,EAAS,MAAMrE,EAAI,KAAK,GAAG,CAAC,IACxC6E,EAAe,MAAM,MAAM7E,EAAI,KAAK,GAAG,CAAC,GAEtCoF,EAAW;AACpB,GAEa45B,KAAgB,CAC3B/6B,GACAjE,GACA2D,GACAC,IAAuB,CAAA,GACvBx5B,GACAyI,GACAlG,IAA8B,IAC9Bq4B,IAAc,OAEP,IAAI,QAAQ,CAAC/E,GAASiE,MAAW;AACtC,EAAAD,EACG,EAAA,IAAIP,GAAqBC,GAAaC,CAAS,IAAIm7B,GAAsB/+B,GAAKgF,CAAW,GAAGr4B,CAAO,EACnG,KAAK,CAACiJ,MAAQ;;AACb,WAAKkuB,GAAkBluB,EAAI,MAAM,KAG7BlL,IAAAkL,EAAI,SAAJ,QAAAlL,EAAU,OACLu1B,EAAQrqB,EAAI,KAAK,IAAI,IAE1BA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnBiE,EAAO,IAAI3yB,GAAA,CAAgB,IARzB2yB,EAAO,IAAI/wB,GAAyByC,EAAI,MAAM,CAAC;AAAA,EAQtB,CACnC,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BsmB,EAAO,IAAI7xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCsmB,EAAO,IAAIxxB,GAAuBkL,GAAKxT,GAAQyI,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CsmB,EAAO,IAAI1wB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDsmB,EAAO,IAAI3yB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GClDUqhD,KAAe,CAC1Bh7B,GACAl8B,IAAoC,CACpC,GAAA47B,GACAC,IAAuB,CAAA,GACvBx5B,GACAyI,GACAlG,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACszB,GAASiE,MAAW;AACtC,EAAAD,EACG,EAAA,KAAKP,GAAqBC,GAAaC,CAAS,GAAG,KAAK,UAAU77B,CAAM,GAAG4E,CAAO,EAClF,KAAK,CAACiJ,MACAkuB,GAAkBluB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnBiE,EAAO,IAAI3yB,GAAA,CAAgB,IARzB2yB,EAAO,IAAI/wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BsmB,EAAO,IAAI7xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCsmB,EAAO,IAAIxxB,GAAuBkL,GAAKxT,GAAQyI,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CsmB,EAAO,IAAI1wB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDsmB,EAAO,IAAI3yB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GC5CGioB,KAAY,mBACZq5B,KAAiBr5B,KAAY,4BACtBG,KAAS,WAETm5B,KAAwB,CAACl7B,GAA6BuD,GAAqBxH,MACtFg/B;AAAA,EACE/6B;AAAA,EACAjE;AAAA,EACAk/B,KAAiB;AAAA,EACjB,EAAE,aAAA13B,EAAY;AAAA,EACdrB;AAAA,EACAH;AAAAA,EACA,CAAC;AAAA,EACD;AACF,GAEWo5B,KAAmB,CAC9Bn7B,GACAuD,GACAtuB,GACAH,MACGusB,GAA2BrB,GAAQi7B,IAAgB,EAAE,aAAA13B,EAAY,GAAGtuB,GAAYH,GAAWotB,IAAiBH,EAAM,GAE1Gq5B,KAAgB,CAACp7B,GAA6BnxB,MACzDmsD,GAAyBh7B,GAAQnxB,GAAM+yB,IAAW,CAAA,GAAIM,IAAiBH,EAAM,GC9BzEs5B,KAAoBhzD,EAAe,CAAC;AAEnC,SAASizD,KAA2B;AAClC,SAAA;AAAA,IACL,mBAAAD;AAAA,EAAA;AAEJ;ACFA,MAAMrB,KAAmB,CAACuB,OAA4C;AAAA,EACpE,IAAIA,EAAQ;AAAA,EACZ,MAAMA,EAAQ;AAChB,IAEMtB,KAAiB,CAAC31B,OACf,EAAE,IAAAA,GAAQ,MAAM,OAGnB,EAAE81B,OAAAA,IAAOC,SAAAA,IAAS3+B,OAAAA,IAAOC,KAAAA,IAAK6+B,WAAAA,IAAW5+B,kBAAAA,IAAkB4/B,KAAAA,IAAKC,KAAAA,IAAKC,UAAAA,GAAa,IAAA3B,GAItFC,IAAkBC,IAAgB,CAACl+B,MAAQ;AACrC,QAAA,EAAE,mBAAAs/B,MAAsBC,MACxB,EAAE,WAAAr5B,MAAc3C;AACtB,SAAO47B,GAAsBj5B,GAAWo5B,EAAkB,OAAOt/B,CAAG;AACtE,CAAC,GAEY4/B,KAAuB,OAC3B;AAAA,EACL,2BAA2BnB;AAAAA,EAC3B,kCAAkC5+B;AAAAA,EAClC,qBAAqBD;AAAAA,EACrB,qBAAqBD;AAAAA,EACrB,uBAAuB2+B;AAAAA,EACvB,gBAAgBD;AAAAA,EAChB,kBAAkBoB;AAAAA,EAClB,kBAAkBC;AAAAA,EAClB,uBAAuBC;AAAA,IC3BrB95B,KAAY,kBACZq5B,KAAiBr5B,KAAY,4BACtBG,KAAS,UAET65B,KAAuB,CAAC57B,GAA6BuD,GAAqBxH,MACrFg/B;AAAA,EACE/6B;AAAA,EACAjE;AAAA,EACAk/B,KAAiB;AAAA,EACjB;AAAA,IACE,aAAA13B;AAAA,EACF;AAAA,EACArB;AAAA,EACAH;AAAAA,EACA,CAAC;AAAA,EACD;AACF,GAEW85B,KAAkB,CAC7B77B,GACAuD,GACAtuB,GACAH,MAEAusB;AAAA,EACErB;AAAA,EACAi7B;AAAA,EACA;AAAA,IACE,aAAA13B;AAAA,EACF;AAAA,EACAtuB;AAAA,EACAH;AAAA,EACAotB;AAAA,EACAH;AACF,GAEW+5B,KAAe,CAAC97B,GAA6BnxB,MACxDmsD,GAAwBh7B,GAAQnxB,GAAM+yB,IAAW,CAAA,GAAIM,IAAiBH,EAAM,GCvCxEi4B,KAAmB,CAAC+B,OAAyC;AAAA,EACjE,IAAIA,EAAO;AAAA,EACX,MAAMA,EAAO;AAAA,EACb,YAAYA,EAAO;AACrB,IAEM9B,KAAiB,CAAC31B,OACf,EAAE,IAAAA,GAAQ,MAAM,IAAI,YAAY,GAAG,IAGtC,EAAE,OAAA81B,IAAO,SAAAC,IAAS3+B,OAAAA,IAAOC,KAAAA,IAAK,WAAA6+B,IAAW,kBAAA5+B,IAAkB,KAAA4/B,IAAK,KAAAC,IAAK,UAAAC,GAAa,IAAA3B,GAItFC,IAAkBC,IAAgB,CAACl+B,MAAQ;AACrC,QAAA,EAAE,mBAAAs/B,MAAsBC,MACxB,EAAE,WAAAr5B,MAAc3C;AACtB,SAAOs8B,GAAqB35B,GAAWo5B,EAAkB,OAAOt/B,CAAG;AACrE,CAAC,GAEYigC,KAAsB,OAC1B;AAAA,EACL,0BAA0BxB;AAAA,EAC1B,iCAAiC5+B;AAAA,EACjC,oBAAoBD;AAAAA,EACpB,oBAAoBD;AAAAA,EACpB,sBAAsB2+B;AAAA,EACtB,eAAeD;AAAA,EACf,iBAAiBoB;AAAA,EACjB,iBAAiBC;AAAA,EACjB,sBAAsBC;AAAA,IAIbO,KAA2C,OAC/C;AAAA,EAAA,OACLvgC;AAAAA,EAAA,KACAC;AAAAA,EACA,kBAAAC;AAAA,ICnBEsgC,KAA6B,GAC7BC,KAAmB,UAEZzN,KAAuB9xB,GAAY,2BAA2B,MAAM;AAC/E,QAAM,EAAE,qBAAAw/B,GAAqB,qBAAAC,EAAoB,IAAIV,GAAqB,GACpE,EAAE,oBAAAW,GAAoB,oBAAAC,EAAmB,IAAIP,GAAoB,GAEjE3I,IAAShrD,EAA0C,oBAAA,IAAK,CAAA,GAExD,EAAE,eAAAm0D,MAAkBjQ,MAEpB,EAAE,WAAAtqB,MAAc3C,MAChB,EAAE,4BAAAm9B,MAA+B/C;AACvC,EAAA+C,EAA2B,CAAC3lD,MAAU;AACpC,YAAQA,EAAM,MAAM;AAAA,MAClB,KAAKoiD,GAAoB;AACJ,QAAAwD,EAAA5lD,EAAM,KAAK,KAAK;AACnC;AAAA,MACF,KAAKoiD,GAAoB;AACvB,QAAAyD,EAAgB7lD,EAAM,KAAK,OAAOA,EAAM,KAAK,UAAU;AACvD;AAAA,MACF,KAAKoiD,GAAoB;AACJ,QAAA0D,EAAA9lD,EAAM,KAAK,OAAOA,EAAM,KAAK,iBAAiBA,EAAM,KAAK,SAAS;AACrF;AAAA,MACF,KAAKoiD,GAAoB;AACI,QAAA2D,EAAA/lD,EAAM,KAAK,KAAK;AAC3C;AAAA,IACJ;AAAA,EAAA,CACD;AAED,WAASgmD,EAASC,GAA0B;AAC1C,WAAI1J,EAAO,MAAM,IAAI0J,CAAQ,IACpB1J,EAAO,MAAM,IAAI0J,CAAQ,IAE3B;AAAA,EACT;AAEA,WAASC,EAAcD,GAA0B;;AAC/C,WAAI1J,EAAO,MAAM,IAAI0J,CAAQ,MACpBt2D,IAAA4sD,EAAO,MAAM,IAAI0J,CAAQ,MAAzB,gBAAAt2D,EAA4B,UAAS,KAEvC;EACT;AAEA,iBAAew2D,EAAWF,GAA0B16B,GAAsB66B,GAAyB3S,GAAe;AAC1G,UAAA,EAAE,uBAAA9mB,MAA0BX,MAE5Bq6B,KAAkB15B,EAAsBpB,CAAS;AACnD,QAAAx/B,EAAYs6D,EAAe;AACvB,YAAA,IAAI,MAAM,iCAAiC;AAEnD,qBAAiBnT,MAAQO,GAAO;AAC9B,YAAMh/B,KAAOmhC,GAAuB3C,GAAeC,EAAI,GAAGmT,EAAe;AACrE,UAAA,CAAC5xC,MAAQA,OAAS8Q,GAAa;AAAO;AAC1C,YAAMs6B,KAAY6F;AAAA,QAChB,UAAUxS,GAAK;AAAA,QACf8B,GAAoB;AAAA,QACpBC,GAAsB;AAAA,QACtBxgC;AAAA,QACA4wC;AAAA,QACAe;AAAA,MAAA;AAEF,MAAAvG,GAAU,OAAO3M,IACjB2M,GAAU,eAAe3M,GAAK,MAC9BoT,EAAYL,CAAQ,GACpBM,EAAaN,GAAUpG,EAAS,GAChC2G,EAAuBP,CAAQ,GAC/BQ,EAAcR,CAAQ;AAAA,IACxB;AAAA,EACF;AAES,WAAAM,EAAaN,GAA0Bn2D,GAAuB;AACrE,UAAM+sD,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,IAAKpJ,KACCA,EAAA,MAAM,KAAK/sD,CAAI;AAAA,EACvB;AAEA,WAASw2D,EAAYL,GAA0B;AAC7C,IAAK1J,EAAO,MAAM,IAAI0J,CAAQ,KACrB1J,EAAA,MAAM,IAAI0J,GAAU;AAAA,MACzB,OAAO,CAAC;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,aAAa,EAAE,iBAAiB,oBAAI,IAAe,GAAA,gBAAoB,oBAAA,MAAc;AAAA,IAAA,CACtF;AAAA,EAEL;AAEA,WAASO,EAAuBP,GAA0B;AACxD,UAAMpJ,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,IAAKpJ,MACCA,EAAA,aAAaA,EAAM,MAAM,QACzBA,EAAA,iBACJ6J,EAAsBT,GAAUhR,GAAsB,QAAQ,EAAE,SAChEyR,EAAsBT,GAAUhR,GAAsB,MAAM,EAAE;AAAA,EAClE;AAES,WAAAyR,EAAsBT,GAA0BvQ,GAA+B;AACtF,UAAMmH,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,WAAKpJ,IACEA,EAAM,MAAM,OAAO,CAAC/sD,MAASA,EAAK,WAAW4lD,CAAM,IADvC;EAErB;AAEA,WAAS+Q,EAAcR,GAA0B;AAC/C,UAAMU,IAAeD,EAAsBT,GAAUhR,GAAsB,OAAO;AAMlF,QALI,EAAA0R,EAAa,WAAW,KAILD,EAAsBT,GAAUhR,GAAsB,SAAS,EAAE,WACjEmQ;AAIvB,eAASlzD,IAAI,GAAGA,IAAIkzD,IAA4BlzD;AAC9C,QAAIy0D,EAAaz0D,CAAC,KAAwB00D,EAAAD,EAAaz0D,CAAC,GAAG+zD,CAAQ;AAAA,EAEvE;AAEe,iBAAAW,EAAqB92D,GAAuBm2D,GAA0B;AAC7E,UAAA,EAAE,QAAAY,GAAQ,YAAAC,MAAe1G,GAAUtwD,GAAM,CAACywD,GAAkBpa,IAAe4gB,OAAqB;AACrF,MAAAC,EAAAl3D,GAAMywD,GAAUpa,IAAO4gB,EAAQ;AAAA,IAAA,CAC/C;AACG,QAAA;AACF,YAAMD,EAAW,GACjB,MAAMD,EAAO,GACbJ,EAAcR,CAAQ;AAAA,YACZ;AACV,MAAAn2D,EAAK,MAAM,WAAW,IACtBA,EAAK,SAASmlD,GAAsB,QACpCuR,EAAuBP,CAAQ,GAC/BQ,EAAcR,CAAQ;AAAA,IACxB;AAAA,EACF;AAEA,WAASe,EAAel3D,GAAuBywD,GAAkBpa,GAAe4gB,GAAkB;AAChG,IAAAj3D,EAAK,SAAS,kBAAkBywD,GAChCzwD,EAAK,SAAS,gBAAgBi3D,GAC9Bj3D,EAAK,SAAS,QAAQq2C;AAAA,EACxB;AAEA,iBAAeyf,EAAmBh+B,GAAgB;AAC5C,QAAA;AACF,YAAMT,IAAQ,MAAMoG,GAAWpC,GAAWvD,CAAO;AACjD,UAAI,CAACT;AAAO;AACZ,MAAAo1B,EAAO,MAAM,QAAQ,CAACM,GAAOoJ,MAAa;AAClC,QAAApJ,EAAA,MAAM,QAAQ,CAAC/sD,MAAS;;AAC5B,UAAIA,EAAK,YAAYq3B,EAAM,MAAMA,EAAM,aACrC,aAAar3B,EAAK,yBAAyB,GAC3CA,EAAK,SAASmlD,GAAsB,UAC/BnlD,EAAA,cAAcq3B,EAAM,WAAW,cAChCx3B,KAAAw3B,EAAM,SAAS,UAAf,QAAAx3B,GAAsB,iBACnBG,EAAA,eAAeq3B,EAAM,SAAS,MAAM,eAE3Cs/B,EAAcR,CAAQ;AAAA,QACxB,CACD,GACDO,EAAuBP,CAAQ;AAAA,MAAA,CAChC;AAAA,YACS;AAAA,IAEZ;AAAA,EACF;AAEA,iBAAeH,EACbl+B,GACAq/B,IAAiC,MACjC9gC,IAAiC,MACjC;AACA,UAAM,EAAE,gBAAA+gC,GAAgB,oBAAAC,EAAmB,IAAItE,GAAoB;AACnE,QAAI,CAACoE,KAAmB,CAAC9gC,KAAaA,MAAcZ,GAAa;AAAO;AACxE,QAAI6hC,KAAsC;AACtC,QAAA;AACS,MAAAA,KAAA,MAAM35B,GAAmBtC,GAAW87B,CAAe;AAAA,YACpD;AACJ,YAAA,IAAI,MAAM,aAAa;AAAA,IAC/B;AACA,IAAA1K,EAAO,MAAM,QAAQ,CAACM,IAAOoJ,OAAa;AAClC,MAAApJ,GAAA,MAAM,QAAQ,CAAC/sD,OAAS;;AAC5B,QAAI5D,GAAOk7D,EAAQ,KACft3D,GAAK,YAAY83B,MACnB,aAAa93B,GAAK,yBAAyB,GAC3CA,GAAK,cAAc,IACnBA,GAAK,SAASmlD,GAAsB,UACpCnlD,GAAK,SAASm3D,GACdn3D,GAAK,mBAAmBs3D,GAAS,IAC5Bt3D,GAAA,cAAcs3D,GAAS,WAAW,cACnCv3D,MAAAF,KAAAy3D,GAAS,aAAT,gBAAAz3D,GAAmB,UAAnB,QAAAE,GAA0B,iBACvBC,GAAA,eAAes3D,GAAS,SAAS,MAAM,eAE9Ct3D,GAAK,WAAWs3D,GAAS,UACzBt3D,GAAK,UAAUs3D,GAAS,SACnBt3D,GAAA,aAAas3D,GAAS,SAAS,YACpCF,EAAeE,GAAS,SAAS,mBAAmBvK,GAAM,YAAY,cAAc,GACpFqK,EAAeE,GAAS,SAAS,oBAAoBvK,GAAM,YAAY,eAAe,GACtF/sD,GAAK,kBAAkBq3D,EAAmBC,GAAU,SAAS,iBAAiB,GAC9E9B,EAAoBx1D,GAAK,QAAQ,GACjC01D,EAAmB11D,GAAK,OAAO,GAC/B01D,EAAmB11D,GAAK,eAAe,GACvCA,GAAK,UAAUs3D,GAAS,IACxBt3D,GAAK,kBAAkB,IACvB22D,EAAcR,EAAQ;AAAA,MACxB,CACD,GACDO,EAAuBP,EAAQ,GACZR,KACCF;IAAA,CACrB;AAAA,EACH;AAEe,iBAAAM,EAAgBj+B,GAAgBy/B,GAAiC;AAC1E,QAAA;AACF,YAAMlgC,IAAQ,MAAMoG,GAAWpC,GAAWvD,CAAO;AACjD,MAAA20B,EAAO,MAAM,QAAQ,CAACM,GAAOoJ,MAAa;AAClC,QAAApJ,EAAA,MAAM,QAAQ,CAAC/sD,OAAS;AACxB,UAAAA,GAAK,YAAYq3B,EAAM,OACzB,aAAar3B,GAAK,yBAAyB,GAC3CA,GAAK,MAAM,WAAW,IACtBA,GAAK,SAASmlD,GAAsB,QACpCnlD,GAAK,MAAM,sBAAsBu3D,GACjCv3D,GAAK,kBAAkB,IACvB22D,EAAcR,CAAQ;AAAA,QACxB,CACD,GACDO,EAAuBP,CAAQ;AAAA,MAAA,CAChC;AAAA,YACS;AAAA,IAEZ;AAAA,EACF;AAEA,iBAAeF,EAA2Bn+B,GAAgB;AACxD,UAAM,EAAE,gBAAAs/B,GAAgB,oBAAAC,EAAmB,IAAItE,GAAoB;AAC/D,QAAA;AACF,YAAM17B,IAAQ,MAAMoG,GAAWpC,GAAWvD,CAAO;AACjD,MAAA20B,EAAO,MAAM,QAAQ,CAACM,GAAOoJ,OAAa;AAClC,QAAApJ,EAAA,MAAM,QAAQ,CAAC/sD,OAAS;AAC5B,UAAIA,GAAK,YAAYq3B,EAAM,MAAMr3B,GAAK,SACpC,aAAaA,GAAK,yBAAyB,GAC3CA,GAAK,WAAWq3B,EAAM,UACtBr3B,GAAK,UAAUq3B,EAAM,SAChBr3B,GAAA,aAAaq3B,EAAM,SAAS,YACjC+/B,EAAe//B,EAAM,SAAS,mBAAmB01B,EAAM,YAAY,cAAc,GACjFqK,EAAe//B,EAAM,SAAS,oBAAoB01B,EAAM,YAAY,eAAe,GACnF/sD,GAAK,kBAAkBq3D,EAAmBhgC,EAAM,SAAS,iBAAiB,GAC1Em+B,EAAoBx1D,GAAK,QAAQ,GACjC01D,EAAmB11D,GAAK,OAAO,GAC/B01D,EAAmB11D,GAAK,eAAe,GACvCA,GAAK,kBAAkB;AAAA,QACzB,CACD,GACD02D,EAAuBP,EAAQ,GACZR,KACCF;MAAA,CACrB;AAAA,YACS;AAAA,IAEZ;AAAA,EACF;AAES,WAAAnZ,EAAe6Z,GAA0Bt4D,GAAe;AAC/D,UAAMkvD,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,IAAI,CAACpJ,KAAS,CAACA,EAAM,MAAMlvD,CAAK,MAC1BkvD,EAAA,MAAM,OAAOlvD,GAAO,CAAC,GAC3B64D,EAAuBP,CAAQ;AAAA,EACjC;AAEe,iBAAAqB,EAAerB,GAA0BpG,GAA4BlyD,GAAe;AACjG,UAAMkvD,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,IAAI,CAACpJ,KAASA,EAAM,MAAM,WAAW,MACrCgD,EAAU,SAAS5K,GAAsB,MACrC4K,EAAU,0BACZkC,GAAWlC,EAAU,sBAAsB,GAE7CzT,EAAc6Z,GAAUt4D,CAAK,GAC7B84D,EAAcR,CAAQ;AAAA,EACxB;AAEA,iBAAesB,EAAiBpgC,GAA2B;AACzD,UAAM,EAAE,gBAAA+/B,GAAgB,oBAAAC,EAAmB,IAAItE,GAAoB;AAC/D,QAAA;AACF,YAAMuE,IAAW,MAAM75B,GAAWpC,GAAWhE,EAAM,EAAE;AACrD,MAAAo1B,EAAO,MAAM,QAAQ,CAACM,GAAOoJ,OAAa;AAClC,QAAApJ,EAAA,MAAM,QAAQ,CAAC/sD,OAAS;AAC5B,UAAIA,GAAK,YAAYs3D,EAAS,MAAMt3D,GAAK,SACvC,aAAaA,GAAK,yBAAyB,GAC3CA,GAAK,WAAWs3D,EAAS,UACzBt3D,GAAK,UAAUs3D,EAAS,SACnBt3D,GAAA,aAAas3D,EAAS,SAAS,YACpCF,EAAeE,EAAS,SAAS,mBAAmBvK,EAAM,YAAY,cAAc,GACpFqK,EAAeE,EAAS,SAAS,oBAAoBvK,EAAM,YAAY,eAAe,GACtF/sD,GAAK,kBAAkBq3D,EAAmBC,EAAS,SAAS,iBAAiB,GAC7E9B,EAAoBx1D,GAAK,QAAQ,GACjC01D,EAAmB11D,GAAK,OAAO,GAC/B01D,EAAmB11D,GAAK,eAAe;AAAA,QACzC,CACD,GACD02D,EAAuBP,EAAQ,GACZR,KACCF;MAAA,CACrB;AAAA,YACS;AAAA,IAEZ;AAAA,EACF;AAEA,WAASiC,EAAoBvB,GAA0B;AACrD,UAAMpJ,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,WAAKpJ,IACEA,EAAM,aADM;AAAA,EAErB;AAEA,WAAS4K,GAAwBxB,GAA0B;AACzD,UAAMpJ,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,WAAKpJ,IACEA,EAAM,iBADM;AAAA,EAErB;AAEA,WAAS6K,EAAYzB,GAA0B;AAC7C,UAAMpJ,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,QAAI,CAACpJ,KAASA,EAAM,MAAM,WAAW;AAAG;AACxC,UAAM8K,IAAejB,EAAsBT,GAAUhR,GAAsB,SAAS;AAC9E,IAAA4H,EAAA,MAAM,QAAQ,CAAC/sD,MAAS;AAC5B,MAAAA,EAAK,SAASmlD,GAAsB;AAAA,IAAA,CACrC,GACG0S,EAAa,SAAS,KACXA,EAAA,QAAQ,CAAC73D,MAAS;AAC7B,MAAIA,EAAK,0BACPiyD,GAAWjyD,EAAK,sBAAsB;AAAA,IACxC,CACD,GAEH83D,EAAW3B,CAAQ,GACnB4B,EAAqB5B,CAAQ;AAAA,EAC/B;AAEA,WAAS4B,EAAsB5B,GAA0B;AACvD,IAAAK,EAAYL,CAAQ;AACpB,UAAMpJ,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,IAAKpJ,KACCA,EAAA;AAAA,EACR;AAEA,WAASiL,EAAsB7B,GAA0B;AACvD,UAAMpJ,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,WAAKpJ,IACEA,EAAM,eADM;AAAA,EAErB;AAEA,WAAS+K,EAAW3B,GAA0B;AAE5C,IADc1J,EAAO,MAAM,IAAI0J,CAAQ,KAEhC1J,EAAA,MAAM,IAAI0J,GAAU;AAAA,MACzB,OAAO,CAAC;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc6B,EAAqB7B,CAAQ,IAAI;AAAA,MAC/C,aAAa,EAAE,iBAAiB,oBAAI,IAAe,GAAA,gBAAoB,oBAAA,MAAc;AAAA,IAAA,CACtF;AAAA,EACH;AAEA,WAAS8B,EAAmB9B,GAA0B;AAClD,UAAM+B,IAA6B,CAAA,GAC/BnL,IAAQN,EAAO,MAAM,IAAI0J,CAAQ;AACvC,QAAI,CAACpJ;AAAc,aAAAmL;AACf,QAAAnL,EAAM,MAAM,SAAS;AACvB,eAAS3qD,IAAI,GAAGA,IAAI2qD,EAAM,MAAM,QAAQ3qD;AACtC,QAAI81D,EAAM,SAASnL,EAAM,MAAM3qD,CAAC,EAAE,SAAS,KAG3C81D,EAAM,KAAKnL,EAAM,MAAM3qD,CAAC,EAAE,SAAS;AAGhC,WAAA81D;AAAA,EACT;AAEO,SAAA;AAAA,IACL,UAAAhC;AAAA,IACA,eAAAE;AAAA,IACA,YAAAC;AAAA,IACA,oBAAAP;AAAA,IACA,oBAAAE;AAAA,IACA,iBAAAD;AAAA,IACA,eAAAzZ;AAAA,IACA,gBAAAkb;AAAA,IACA,oBAAAE;AAAA,IACA,wBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,oBAAAK;AAAA,IACA,kBAAAR;AAAA,EAAA;AAEJ,CAAC,gCC9XKU,KAAwB;;;;;;;;;;;;;AA1B9B,UAAM38D,IAAQC,GAqBR4D,IAAOC,GAOP84D,IAAW32D,EAAkC,MAAS,GAEtD42D,IAAoB52D,EAAIjG,EAAM,gBAAgB,CAAC,GAC/C88D,IAAmB72D,EAAI,EAAK,GAE5B82D,IAAa,MAAM;;AACnB,MAAAD,EAAiB,UAAU,OAG/BA,EAAiB,QAAQ,KACzBz4D,IAAAu4D,EAAS,UAAT,QAAAv4D,EAAgB,SAChB,WAAW,MAAM;AACf,QAAAy4D,EAAiB,QAAQ;AAAA,SACxBH,EAAqB;AAAA,IAAA,GAIpB,EAAE,sBAAAzU,EAAqB,IAAIL,GAAsB7nD,EAAM,QAAQA,EAAM,QAAQ,GAE7Eg9D,IAAe,CAAC7U,MAAkB;AACtC,UAAI,CAACnoD,EAAM,YAAYmoD,EAAM,SAAS,GAAG;AACvC,cAAM8U,IAAU/U,EAAqB,CAACC,EAAM,CAAC,CAAC,CAAC;AAC/C,QAAAtkD,EAAK,cAAco5D,CAAO;AAC1B;AAAA,MACF;AACM,YAAAA,IAAU/U,EAAqBC,CAAK;AAC1C,MAAAtkD,EAAK,cAAco5D,CAAO;AAAA,IAAA,GAGtBC,IAAiB,CAAC/U,MAAkB;AACxC,MAAA6U,EAAa7U,CAAK;AAAA,IAAA,GAGdgV,IAAoB,CAACC,MAAmB;;AAC5C,YAAM1oD,IAAQ0oD;AACd,MAAAv5D,EAAK,UAAU6Q,CAAK,GACpBsoD,EAAa,MAAM,OAAK34D,IAAAqQ,EAAM,WAAN,gBAAArQ,EAAc,UAAS,CAAE,CAAA,CAAC;AAAA,IAAA,GAG9Cg5D,IAAsB,MAAM;AAC5B,UAAA,CAAAp8D,GAAUjB,EAAM,uBAAuB,GAGvC;AAAA,YAAAS,EAAYT,EAAM,uBAAuB,GAAG;AACnC,UAAA+8D;AACX;AAAA,QACF;AACA,QAAA/8D,EAAM,wBAAwB;AAAA;AAAA,IAAA;AAGhC,WAAAsF;AAAA,MACE,MAAMtF,EAAM;AAAA,MACZ,CAACmE,GAAUoB,MAAa;AACtB,QAAIpB,MAAaoB,KAAY9E,EAAY0D,CAAQ,MAGjD04D,EAAkB,QAAQ14D;AAAA,MAC5B;AAAA,IAAA,GAGW+xB,EAAA;AAAA,MACX,UAAU6mC;AAAA,IAAA,CACX;;;;;;;;;;;;;;;;;;;;;;;IChGYO,KAA4F,OAAO;AAAA,EAC9G;AACF,GCWaC,KAAe,CAC1B3/B,GACAl8B,IAAoC,CACpC,GAAA47B,GACAC,IAAuB,CAAA,GACvBx5B,GACAyI,GACAlG,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACszB,GAASiE,MAAW;AACtC,EAAAD,EACG,EAAA,IAAIP,GAAqBC,GAAaC,CAAS,GAAG,KAAK,UAAU77B,CAAM,GAAG4E,CAAO,EACjF,KAAK,CAACiJ,MACAkuB,GAAkBluB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnBiE,EAAO,IAAI3yB,GAAA,CAAgB,IARzB2yB,EAAO,IAAI/wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BsmB,EAAO,IAAI7xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCsmB,EAAO,IAAIxxB,GAAuBkL,GAAKxT,GAAQyI,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CsmB,EAAO,IAAI1wB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDsmB,EAAO,IAAI3yB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GCpCUimD,KAAe,CAC1B5/B,GACAN,GACAC,IAAuB,CAAC,GACxBx5B,GACAyI,GACAlG,IAA8B,OAEvB,IAAI,QAAQ,CAACszB,GAASiE,MAAW;AAC/B,EAAAD,EAAA,EACJ,OAAOP,GAAqBC,GAAaC,CAAS,GAAGj3B,CAAO,EAC5D,KAAK,CAACiJ,MACAkuB,GAAkBluB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnBiE,EAAO,IAAI3yB,GAAA,CAAgB,IARzB2yB,EAAO,IAAI/wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BsmB,EAAO,IAAI7xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCsmB,EAAO,IAAIxxB,GAAuBkL,GAAKxT,GAAQyI,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CsmB,EAAO,IAAI1wB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDsmB,EAAO,IAAI3yB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GC1CGioB,KAAY,iBACLG,KAAS,SACT89B,KAAa,OAEpB57B,KAAsB,IAEf67B,KAAsB,CAAC9/B,GAA6BjE,MAC/Dg/B,GAA4B/6B,GAAQjE,GAAK6F,IAAW,CAAA,GAAIi+B,IAAY99B,EAAM,GAE/Dg+B,KAAa,CAAC//B,GAA6BsE,MACtDvE,GAAwBC,GAAQ4B,KAAY,QAAQ,EAAE,IAAA0C,EAAA,GAAMu7B,IAAY99B,EAAM,GAEnEi+B,KAAc,CAAChgC,GAA6BnxB,MACvDmsD,GAAiDh7B,GAAQnxB,GAAM+yB,IAAW,CAAA,GAAIi+B,IAAY99B,EAAM,GAErFk+B,KAAc,CAACjgC,GAA6BsE,GAAez1B,MACtE8wD,GAAiD3/B,GAAQnxB,GAAM+yB,KAAY,QAAQ,EAAE,IAAA0C,EAAG,GAAGu7B,IAAY99B,EAAM,GAElGm+B,KAAc,CAAClgC,GAA6BsE,MACvDs7B,GAAyB5/B,GAAQ4B,KAAY,QAAQ,EAAE,IAAA0C,EAAA,GAAMu7B,IAAY99B,EAAM,GAEpEo+B,KAAmB,CAACngC,GAA6BlxB,MACrD,IAAI,QAAsB,CAACktB,GAASiE,MAAW;AACpD,EAAAmgC,GAAqBpgC,GAAQlxB,CAAK,EAC/B,KAAK,CAAC80B,MAAc;AACf,QAAA90B,EAAM,WAAW;AACZ,aAAAktB,EAAQ,CAAA,CAAE;AACnB,QAAW4H,EAAU,WAAW;AAC9B,aAAO3D,EAAO2D,CAAS;AAEvB,QAAAA,EAAU,MAAM,CAACjyB,MACRA,EAAI,WAAWlE,EACvB,GACD;AACA,YAAM4yD,IAAuBz8B,EAAU,QAAQ,CAAYkB,MAAAA,EAAS,KAAK,MAAM;AAC/E,aAAO9I,EAAQqkC,CAAM;AAAA,IAAA;AAErB,aAAOpgC,EAAO2D,CAAS;AAAA,EACzB,CACD,EACA,MAAM,CAACjqB,MAECsmB,EAAOtmB,CAAG,CAClB;AAAA,CACJ;AAGH,eAAeymD,GAAqBpgC,GAA6BlxB,GAAiC;AAChG,QAAMk2B,IAAa,KAAK,KAAKl2B,EAAM,SAASm1B,EAAmB,GACzDL,IAA6B,CAAA;AACnC,MAAI90B,EAAM,WAAW;AAAU,WAAA,QAAQ,QAAQ,CAAA,CAAE;AAEjD,WAAS9F,IAAI,GAAGA,IAAIg8B,GAAYh8B,KAAK;AACnC,UAAM6d,IAAS7d,IAAIi7B,IAEbq8B,IAAU,EAAE,QADFxxD,EAAM,MAAM+X,GAAQA,IAASod,EAAmB,KAE1DtyB,IAAM,MAAMquB,EAAO,EAAE,IAAI4B,IAAW,KAAK,UAAU0+B,CAAO,CAAC;AACjE,IAAA18B,EAAU,KAAKjyB,CAAG;AAAA,EACpB;AACO,SAAAiyB;AACT;;;;;;;;;;;;;;;;;;AC1DA,UAAMxhC,IAAQC,GAwBR,EAAE,mBAAAoP,MAAsB/B,MAGxB07C,IAAeE,GAA2BlpD,EAAM,UAAU,GAC1D,EAAE,aAAAm+D,EAAgB,IAAAnV,GAClB,EAAE,0BAAAoV,EAAA,IAA6BjV,GAAgBH,CAAY,GAE3DqV,IAAWp4D,EAAgD,IAAI,GAE/D,EAAE,OAAAmjD,GAAO,YAAA32B,EAAW,IAAIlf,GAAOvT,CAAK,GAEpCs+D,IAAcr4D,EAAI,EAAE,GAEpB,EAAE,GAAA/F,MAAMC;AAEd,WAAAmF;AAAA,MACE,CAAC8jD,GAAO32B,CAAU;AAAA,MAClB,OAAO,CAAC8rC,GAAUC,CAAU,MAAM;AAGhC,YAFAH,EAAS,QAAQ,MACjBC,EAAY,QAAQn6B,IAChBo6B,GAAU;AACH,UAAAF,EAAA,QAAQ58D,GAAU88D,CAAQ,GAC/BF,EAAS,UACCC,EAAA,QAAQF,EAAyBC,EAAS,KAAK;AAE7D;AAAA,QACF;AACA,YAAIG,GAAY;AACV,cAAA;AACF,YAAAH,EAAS,QAAQ,MAAMV,GAAWQ,GAAaK,CAAU;AAAA,mBAClDvzD,GAAO;AACd,YAAAoE,EAAkBpE,CAAK;AAAA,UACzB;AACA,UAAIozD,EAAS,UACCC,EAAA,QAAQF,EAAyBC,EAAS,KAAK;AAAA,QAE/D;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrEPI,KAAgBjkC,GAAY,oBAAoB,MAAM;AAC3D,QAAAyjC,IAASh4D,EAAmC,CAAA,CAAE,GAC9Cy4D,IAAcz4D,EAAmC,IAAI,GACrD04D,IAAc14D,EAAI,CAAC;AAEzB,WAAS24D,EAAenyD,GAAqC;AAC3D,IAAI7L,GAAO6L,CAAI,MAAGiyD,EAAY,QAAQ,OAC1BA,EAAA,QAAQj9D,GAAUgL,CAAI;AAAA,EACpC;AAEA,WAASoyD,EAAUpyD,GAAqC;AACtD,IAAAwxD,EAAO,QAAQxxD;AAAA,EACjB;AAEA,WAASqyD,EAAUryD,GAAqC;AAC/C,IAAAwxD,EAAA,MAAM,KAAK,GAAGxxD,CAAI;AAAA,EAC3B;AAEA,WAASsyD,EAA2BC,GAAqB;AACnD,IAAAA,IAAcL,EAAY,UAC5BA,EAAY,QAAQK;AAAA,EAExB;AAEA,WAASC,EAAmB58D,GAAe;AAClC,IAAA47D,EAAA,MAAM,OAAO57D,GAAO,CAAC;AAAA,EAC9B;AAEA,WAASw6B,IAAQ;AACf,IAAAohC,EAAO,QAAQ,IACfS,EAAY,QAAQ;AAAA,EACtB;AAEO,SAAA;AAAA,IACL,QAAAT;AAAA,IACA,aAAAS;AAAA,IACA,aAAAC;AAAA,IACA,WAAAE;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAF;AAAA,IACA,4BAAAG;AAAA,IACA,oBAAAE;AAAA,IACA,OAAApiC;AAAA,EAAA;AAEJ,CAAC,GC1CYqiC,KAAyC,OAAO,IAAI,6CAA6C,GAEjGC,KAAsC,OAAO,IAAI,oCAAoC,GAErFC,KAAyC,OAAO,IAAI,6CAA6C,GAEjGC,KAAwC,OAAO,IAAI,4CAA4C,GAEtG,EAAA,UAAEvZ,IAAUrjD,WAAAA,OAAc6jD;AAEhB,SAAAgZ,GACdlW,GACAmW,IAAmC,QACnC;AACM,QAAAttC,IAAQ5xB,EAAS,OAAO;AAAA,IAC5B,OAAO;AAAA,MACL,OAAO;AAAA,QACL,QAAQ;AAAA,UAAA,UACNylD;AAAAA,UACA,WAAWrjD,GAAU,GAAG;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACA,EAAA;AAGK,SAAA;AAAA,IACL,IAHSyvB,GAAaD,GAAO,EAAE,OAAAm3B,KAAS,EAAE,QAAQmW,EAAA,CAAiB;AAAA,EAGnE;AAEJ;;;;;;;;;;;;;;;;;ACTA,UAAM17D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MACRq/D,IAAaf,MACb,EAAE,aAAAC,EAAA,IAAgBp7B,GAAYk8B,CAAU,GAExC,EAAE,IAAAhuC,EAAO,IAAA8tC,GAAmBZ,GAAaS,EAAmC,GAE5E,EAAE,qBAAAjxD,MAAwBZ,MAE1BgC,IAAY,MAAM;AAElB,UADJkiB,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,QAAAtjB;AACpB;AAAA,MACF;AACA,MAAArK,EAAK,WAAW;AAAA,IAAA,GAGZ47D,IAAsB,CAACt7D,MAAsB;AAC7C,MAAAA,KACJN,EAAK,SAAS;AAAA,IAAA,GAGV67D,IAAc,MAAM;AACpB,MAAA9+D,GAAO89D,EAAY,KAAK,KAC5B76D,EAAK,aAAa66D,EAAY,MAAM,IAAI,KAAK;AAAA,IAAA;AAGlC,WAAAxoC,EAAA;AAAA,MACX,SAAS5mB;AAAA,IAAA,CACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxDW,IAAAqwD,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,MAAM,OACNA,EAAA,UAAU,QAHAA,IAAAA,MAAA,CAAA,CAAA;AAMC,MAAAC,KAAsBplC,GAAY,0BAA0B,MAAM;AACvE,QAAAqB,IAAQ51B,EAA+B,IAAI,GAC3C45D,IAAkB55D,EAAa,CAAA,CAAE,GACjC+vB,IAAS/vB,EAA2B,IAAI,GACxCkuB,IAAUluB,EAAI,EAAK,GACnB65D,IAAqB75D,EAAI,EAAK,GAC9B85D,IAAY95D;AAAA,IAAgC;AAAA;AAAA,KAC5C+5D,IAAoB/5D,EAAI,EAAK;AAEnC,WAASg6D,EAASxzD,GAAiC;AACjD,IAAAovB,EAAM,QAAQpvB;AAAA,EAChB;AAEA,WAASowB,IAAQ;AACf,IAAAhB,EAAM,QAAQ;AAAA,EAChB;AAEO,SAAA;AAAA,IACL,oBAAAikC;AAAA,IACA,iBAAAD;AAAA,IACA,OAAAhkC;AAAA,IACA,SAAA1H;AAAA,IACA,QAAA6B;AAAA,IACA,WAAA+pC;AAAA,IACA,mBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAApjC;AAAA,EAAA;AAEJ,CAAC;;;;ACrCD,UAAMh5B,IAAOC,GAIP,EAAE,cAAA6yB,MAAiBC,MAEnBX,IAAc,MAAM;AACxB,MAAApyB,EAAK,aAAa;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICRdq8D,KAAoB,IACpBC,KAAkB,MAClBC,KAAiB;AAEhB,SAASC,KAAmB;AAC3B,QAAA,EAAE,MAAMlgE,MAERmgE,IAAgB,CAAClmD,GAAiBmmD,MAA2B;AAC3D,UAAAC,IAASD,IAAQ,uBAAuB;AAC9C,WAAInmD,IAAUgmD,KACL,EAAEI,IAAS,iBAAiB,EAAE,OAAO,KAAK,MAAMpmD,IAAUgmD,EAAc,EAAA,CAAG,IAEhFhmD,IAAU+lD,KACL,EAAEK,IAAS,kBAAkB,EAAE,OAAO,KAAK,MAAMpmD,IAAU+lD,EAAe,EAAA,CAAG,IAElF/lD,IAAU8lD,KACL,EAAEM,IAAS,oBAAoB,EAAE,OAAO,KAAK,MAAMpmD,IAAU8lD,EAAiB,EAAA,CAAG,IAEnF,EAAEM,IAAS,oBAAoB,EAAE,OAAOpmD,GAAS;AAAA,EAAA;AAWnD,SAAA;AAAA,IACL,oBATyB,CAACA,MACnBkmD,EAAclmD,GAAS,EAAI;AAAA,IASlC,mBANwB,CAACA,MAClBkmD,EAAclmD,GAAS,EAAK;AAAA,EAKnC;AAEJ;ACnCA,MAAeqmD,KAAA,0pCCAAC,KAAA,uyBCAAC,KAAA,mkDCAAC,KAAA,+lDCAAC,KAAA,ujCCAAC,KAAA,4mECAAC,KAAA,gvCCAAC,KAAA,yqECSFC,KAAoB;AAAA,EAC/B;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQJ;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQJ;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQG;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQF;AAAA,EACV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQC;AAAA,EACV;AACF,GACaO,KAAaJ,IACbK,KAAWH,IACXI,KAAWL,IACXM,KAAgB;;;;;;;;AC/B7B,UAAMrhE,IAAQC,GAWR,EAAE,GAAAC,MAAMC,MAERmhE,IAAkB,CAACC,GAAiBC,MAAqB;AAC7D,UAAI,EAAAxhE,EAAM,oBAAoB,UAAU,KAAKA,EAAM,oBAAoB,WAAW,IAGlF;AAAA,YAAIA,EAAM,oBAAoB,QAAQqhE,MAAiBrhE,EAAM,oBAAoB,SAASqhE,IAAe;AACvG,UAAAE,EAAM,KAAKH,EAAQ,GACZI,EAAA,KAAKthE,EAAE,qCAAqC,CAAC;AACpD;AAAA,QACF;AACI,YAAAF,EAAM,cAAci6B,GAAa;AACrC,mBAASrzB,IAAI,GAAGA,IAAIq6D,GAAkB,QAAQr6D;AAC5C,gBACE5G,EAAM,oBAAoB,UAAUihE,GAAkBr6D,CAAC,EAAE,SACzD5G,EAAM,oBAAoB,WAAWihE,GAAkBr6D,CAAC,EAAE,QAC1D;AACA,cAAA26D,EAAM,KAAKN,GAAkBr6D,CAAC,EAAE,MAAM,GACtC46D,EAAO,KAAKthE,EAAE+gE,GAAkBr6D,CAAC,EAAE,MAAM,CAAC;AAC1C;AAAA,YACF;AAAA;AAAA;AAAA,IACF,GAGI66D,IAAqB,CAACF,GAAiBC,MAAqB;;AAC1D,YAAA,EAAE,cAAAlhC,MAAiBI;AACzB,eAAS95B,IAAI,GAAGA,IAAI5G,EAAM,oBAAoB,sBAAsB,QAAQ4G,KAAK;AACzE,cAAA86D,KACJr9D,IAAAi8B,EAAa,MAAM,qBAAqBtgC,EAAM,oBAAoB,sBAAsB4G,CAAC,CAAC,MAA1F,gBAAAvC,EAA6F;AAC/F,QAAIq9D,EAAS,SAAS,KAAK,CAACH,EAAM,SAASG,CAAQ,MACjDH,EAAM,KAAKG,CAAQ,GACZF,EAAA,KAAKlhC,EAAa,MAAM,qBAAqBtgC,EAAM,oBAAoB,sBAAsB4G,CAAC,CAAC,EAAE,KAAK;AAAA,MAEjH;AAAA,IAAA,GAGI6F,IAAOpM,EAAS,MAAM;AAC1B,YAAMkhE,IAAkB,CAAA,GAClBC,IAAmB,CAAA;AAEzB,aAAIxhE,EAAM,oBAAoB,UAAU,SAAS,MAC/CuhE,EAAM,KAAKL,EAAU,GACdM,EAAA,KAAKthE,EAAE,uCAAuC,CAAC,IAEpDF,EAAM,oBAAoB,YAC5BuhE,EAAM,KAAKJ,EAAQ,GACZK,EAAA,KAAKthE,EAAE,qCAAqC,CAAC,IAEtDohE,EAAgBC,GAAOC,CAAM,GAC7BC,EAAmBF,GAAOC,CAAM,GAEzB,EAAE,OAAAD,GAAO,QAAAC;IAAO,CACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnED,UAAMxhE,IAAQC,GAoDR4D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAERwhE,IAAS,MAAM;AACnB,MAAA99D,EAAK,MAAM;AAAA,IAAA,GAEPugC,IAAU,MAAM;AACpB,MAAAvgC,EAAK,OAAO;AAAA,IAAA,GAGR+Q,IAAOvU,EAAS,MAAM;AACtB,UAAAL,EAAM,gBAAgBg6B,GAAe;AAAiB,eAAA;AAC1D,cAAQh6B,EAAM,WAAW;AAAA,QACvB,KAAKi6B,GAAa;AAChB,iBAAOj6B,EAAM,gBAAgBg6B,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKC,GAAa;AAChB,iBAAOj6B,EAAM,gBAAgBg6B,GAAe,WAAW,aAAa;AAAA,QACtE,KAAKC,GAAa;AAChB,iBAAOj6B,EAAM,gBAAgBg6B,GAAe,WAAW,cAAc;AAAA,QACvE,KAAKC,GAAa;AAChB,iBAAOj6B,EAAM,gBAAgBg6B,GAAe,WAAW,cAAc;AAAA,QACvE;AACS,iBAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEK4nC,IAAsBvhE,EAAS,MAAM;AACzC,UAAI,CAACL,EAAM;AAA0B,eAAA;AACrC,YAAMU,IAAQ,KAAK,KAAKV,EAAM,iBAAiB;AACxC,aAAAU,IAAQ,MAAM,SAASA,IAAQ;AAAA,IAAA,CACvC,GAEKmhE,IAA0BxhE,EAAS,MAChC,CAAC25B,GAAe,UAAUA,GAAe,KAAK,EAAE,SAASh6B,EAAM,WAAW,IAAI,SAASA,EAAM,eACrG,GAEK8hE,IAAYzhE,EAAS,MAClBL,EAAM,gBAAgBg6B,GAAe,WAAW,YAAY,SACpE,GAEKqK,IAAchkC,EAAS,MACpBI,EAAYT,EAAM,GAAG,IAAIskC,KAAkBtkC,EAAM,GACzD,GAEKukC,IAAmBlkC,EAAS,MAC5BL,EAAM,WAAiB,KAClB,EAAAA,EAAM,cAAci6B,GAAa,SAASj6B,EAAM,IAE1D,GAEK,EAAE,oBAAA+hE,MAAuB1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9GxB,SAAS2B,KAAyB;AACjC,QAAA,EAAE,MAAM7hE,MAER8hE,IAA6Bh8D,EAA8C;AAAA,IAC/E;AAAA,MACE,OAAO4jD,GAAoB;AAAA,MAC3B,OAAO,EAAE,gDAAgD;AAAA,IAC3D;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,mDAAmD;AAAA,IAC9D;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,2DAA2D;AAAA,IACtE;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,2DAA2D;AAAA,IACtE;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,0DAA0D;AAAA,IACrE;AAAA,IACA;AAAA,MACE,OAAOA,GAAoB;AAAA,MAC3B,OAAO,EAAE,uDAAuD;AAAA,IAClE;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,4BAAAoY;AAAA,IACA,8BANmC,CAACvhE,MAC7BuhE,EAA2B,MAAM,KAAK,CAACz9D,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAK3E;AAEJ;;;;;;;ACrCA,UAAMV,IAAQC,GAOR,EAAE,8BAAAiiE,MAAiCF,MACnCG,IAAe9hE,EAAS,MACrB6hE,EAA6BliE,EAAM,MAAM,CACjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACEK,UAAA,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICfDiiE,KAAe,oBAEtBC,KAAoBp8D,EAAQ,oBAAA,IAAA,CAAa;AAExC,SAASq8D,GAA+BC,GAA2B;AACxE,QAAMC,IAAU,MAAM;AACF,IAAAH,GAAA,MAAM,IAAID,KAAeG,CAAS;AAAA,EAAA,GAGhDE,IAAY,MAAM;AACJ,IAAAJ,GAAA,MAAM,OAAOD,KAAeG,CAAS;AAAA,EAAA,GAGnDG,IAAcriE,EAAS,MACpBgiE,GAAkB,MAAM,IAAID,KAAeG,CAAS,CAC5D;AAMM,SAAA;AAAA,IACL,cALmBliE,EAAS,MACrB+hE,KAAeG,CACvB;AAAA,IAIC,aAAAG;AAAA,IACA,SAAAF;AAAA,IACA,WAAAC;AAAA,EAAA;AAEJ;;;;;;;AC1BA,UAAMziE,IAAQC,GASR,EAAE,aAAAyiE,GAAa,cAAAC,EAAA,IAAiBL,GAA+BtiE,EAAM,QAAQ;;;;;;;;;;;;;;;;;;;;ACJnF,UAAMA,IAAQC,GAWR4D,IAAOC,GAKP,EAAE,qCAAA49B,GAAqC,uBAAAL,EAAsB,IAAIX,GAAkB,GAEnFuC,IAAgCvB,EAAoC1hC,EAAM,SAAS;AACrF,QAAAS,EAAYwiC,CAA6B;AACrC,YAAA,IAAI,MAAM,2CAA2C;AAGvD,UAAA2/B,IAAWviE,EAAS,MACjB4iC,EAA8BjjC,EAAM,SAAS,CACrD,GAGK+6D,IAAkB15B,EAAsBrhC,EAAM,SAAS;AAEzD,QAAAS,EAAYs6D,CAAe;AACvB,YAAA,IAAI,MAAM,iCAAiC;AAG7C,UAAA8H,IAAcxiE,EAAS,MACpB06D,EAAgB/6D,EAAM,SAAS,EAAE,0BACzC;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CD,UAAMA,IAAQC,GAaR4rB,IAAQxrB,EAAS,MACd,qBAAqBL,EAAM,QAAQA,EAAM,QAAQ,aAAa,YAAYA,EAAM,KAAK,eAC1FA,EAAM,MACR,KACD;;;;;;;;;;;;;;;;;;;;;ACPK,UAAA,EAAE,GAAAE,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJd,UAAMH,IAAQC,GAoBR,EAAE,iBAAA6iE,MAAoBlJ,MACtBvN,IAAoBC,MAEpBv3B,IAASC,GAAqD,MAAS,GACvEC,IAASD,GAAoB,EAAK,GAElCxwB,IAAOnE,EAAS,MACbyiE,EAAgB9iE,EAAM,EAAE,CAChC,GAEK+iE,IAAiB1iE,EAAS,MAAM;AACpC,UAAI,CAACL,EAAM;AAAgB;AAC3B,YAAMuxD,IAAQlF,EAAkB,SAASrsD,EAAM,OAAO;AAClD,UAAA,GAACuxD,KAAS,CAACx8B,EAAO,UAClBw8B,EAAM,YAAY,eAAe,IAAIx8B,EAAO,MAAM,IAAI;AAAU,eAAA;AAAA,IAC7D,CACR,GAEKI,IAAe90B,EAAS,MAAM;;AAC9B,aAAAL,EAAM,MAAM,SAAS,IAAUA,EAAM,QACrC+0B,EAAO,QACFA,EAAO,MAAM,UAAQ1wB,IAAA0wB,EAAO,MAAM,eAAb,gBAAA1wB,EAAyB,UAAS,IAAI,KAAK0wB,EAAO,MAAM,UAAU,MAAM,MAE/F;AAAA,IAAA,CACR;AAED,WAAAzvB;AAAA,MACEd;AAAA,MACA,OAAOL,MAAa;AAClB,QAAI8wB,EAAO,SACPx0B,EAAY0D,CAAQ,KAAKA,EAAS,YAAY,OAClD4wB,EAAO,QAAQ5wB,GACf8wB,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDpB,UAAMj1B,IAAQC,GASR4D,IAAOC,GAIPk/D,IAAa,MAAM;AAClB,MAAAn/D,EAAA,aAAa7D,EAAM,EAAE;AAAA,IAAA,GAGtB,EAAE,iBAAA8iE,MAAoBlJ,MAEtB7kC,IAASC,GAAqD,MAAS,GACvEC,IAASD,GAAoB,EAAK,GAElCxwB,IAAOnE,EAAS,MACbyiE,EAAgB9iE,EAAM,EAAE,CAChC,GAEKm1B,IAAe90B,EAAS,MAAM;;AAClC,aAAI00B,EAAO,QACFA,EAAO,MAAM,UAAQ1wB,IAAA0wB,EAAO,MAAM,eAAb,gBAAA1wB,EAAyB,UAAS,IAAI,KAAK0wB,EAAO,MAAM,UAAU,MAAM,MAE/F;AAAA,IAAA,CACR;AAED,WAAAzvB;AAAA,MACEd;AAAA,MACA,OAAOL,MAAa;AAClB,QAAI8wB,EAAO,SACPx0B,EAAY0D,CAAQ,KAAKA,EAAS,YAAY,OAClD4wB,EAAO,QAAQ5wB,GACf8wB,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;ICvCPguC,KAAyB,CAAChjC,MAAyB;AACxD,QAAA,EAAE,WAAAJ,MAAc3C,MAChB,EAAE,uBAAAmE,MAA0BX,MAE5Bq6B,IAAkB15B,EAAsBpB,CAAS;AACnD,MAAAx/B,EAAYs6D,CAAe;AACvB,UAAA,IAAI,MAAM,iCAAiC;AAG7C,QAAAmI,IAAe,CAACvJ,OAAyC;AAAA,IAC7D,IAAIA,EAAO;AAAA,IACX,MAAMA,EAAO;AAAA,IACb,YAAYA,EAAO;AAAA,EAAA,IAGfwJ,IAAmB,CAACxJ,OAAkD;AAAA,IAC1E,OAAOA,EAAO,QAAQA,EAAO,aAAa,KAAKA,EAAO,UAAU,MAAM;AAAA,IACtE,OAAOA,EAAO;AAAA,EAAA,IAGVyJ,IAAoB,CAACC,MAClBA,EAAQ,IAAI,CAAC1J,MAAsBwJ,EAAiBxJ,CAAM,CAAC,GAG9D2J,IAAgB,CAACD,MACdA,EAAQ,IAAI,CAAC1J,MAAsBuJ,EAAavJ,CAAM,CAAC;AAezD,SAAA;AAAA,IACL,kBAAAwJ;AAAA,IACA,YAdiB,OAAOtwD,GAAwBH,MACzC0wD,EAAkB,MAAM3J,GAAgB55B,GAAWI,GAAWptB,GAAYH,CAAS,CAAC;AAAA,IAc3F,iBAPsB,OAAOinB,MACtBypC,EAAkB,MAAM5J,GAAqB35B,GAAWI,GAAWtG,CAAG,CAAC;AAAA,IAO9E,mBAZwB,OAAO9mB,GAAwBH,MAChD4wD,EAAc,MAAM7J,GAAgB55B,GAAWI,GAAWptB,GAAYH,CAAS,CAAC;AAAA,EAWvF;AAEJ,GCpDMynB,KAAahoB,GAAiB2tB,IAAiB,QAAQ;AAEtD,SAASyjC,KAAkB;AAChC,SAAOhxC,GAAS;AAAA,IACd,UAAU;AAAA,MACR,GAAG4H,GAAW,EAAE,SAAS,IAAM;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,MACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ;AAAA,IAChC;AAAA,EAAA,CACD;AACH;ACXY,IAAAqpC,uBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,WAAW,YACXA,EAAA,WAAW,YACXA,EAAA,SAAS,UACTA,EAAA,UAAU,QALAA,IAAAA,MAAA,CAAA,CAAA;AAQL,SAASC,KAAmB;AAC3B,QAAA,EAAE,MAAMtjE,MAERujE,IAAoBz9D,EAAwC;AAAA,IAChE;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,wCAAwC;AAAA,IACnD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,4CAA4C;AAAA,IACvD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,4CAA4C;AAAA,IACvD;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,EAAE,0CAA0C;AAAA,IACrD;AAAA,EAAA,CACD;AAMM,SAAA;AAAA,IACL,mBAAAy9D;AAAA,IACA,qBAN0B,CAAChjE,MACpBgjE,EAAkB,MAAM,KAAK,CAACl/D,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKlE;AAEJ;ACnCA,MAAM,EAAA,UAAEolD,IAAUN,WAAAA,OAAcc;AAEhB,SAAAqd,GAAoBhK,GAAwB4F,IAAmC,QAAW;AAClG,QAAAttC,IAAQ5xB,EAAS,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,MAAM;AAAA,QAAA,UACJylD;AAAAA,QACA,WAAWN,GAAU,CAAC;AAAA,MACxB;AAAA,MACA,YAAY;AAAA,QACV,WAAWA,GAAU,CAAC;AAAA,MACxB;AAAA,IACF;AAAA,EACA,EAAA;AAGK,SAAA;AAAA,IACL,IAHStzB,GAAaD,GAAO,EAAE,QAAA0nC,KAAU,EAAE,QAAQ4F,EAAA,CAAiB;AAAA,EAGpE;AAEJ;ACpBO,SAASqE,KAAsB;AAoB7B,SAAA;AAAA,IACL,eApBoB,CAACziC,GAAqB0iC,OACnC;AAAA,MACL,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,WAAW1iC;AAAA,MACX,OAAO;AAAA,QACL,UAAU0iC,KAAY;AAAA,MACxB;AAAA,MACA,MAAML,GAAc;AAAA,MACpB,WAAWhzD,GAAY;AAAA,MACvB,YAAYA,GAAY;AAAA,MACxB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAemvB;AAAAA,MACf,SAASG;AAAA,IAAA;AAAA,EAKX;AAEJ;;;;;;;;;;;;;;;;ACPA,UAAM9/B,IAAQC,GAuBR4D,IAAOC,GAIP,EAAE,WAAA+7B,MAAc3C,MAChB,EAAE,uBAAAmE,MAA0BX,MAE5Bq6B,IAAkB15B,EAAsBrhC,EAAM,SAAS;AACzD,QAAAS,EAAYs6D,CAAe;AACvB,YAAA,IAAI,MAAM,iCAAiC;AAG7C,UAAA,EAAE,eAAAX,MAAkBwJ,MAEpBjK,IAAS1zD,EAAem0D,EAAcp6D,EAAM,SAAS,CAAC,GACtDg2B,IAAS/vB,EAAI,EAAK,GAClB+I,IAAgB/I,EAAI,EAAK,GAEzB0O,IAAU,MAAM;AAChB,UAAAlU,EAAYs6D,CAAe;AACvB,cAAA,IAAI,MAAM,iCAAiC;AAEnD,MAAApB,EAAO,QAAQS,EAAcp6D,EAAM,WAAW,EAAI,GAC3C25D,EAAA,MAAM,OAAO35D,EAAM,cAC1Bg2B,EAAO,QAAQ;AAAA,IAAA,GAGXxvB,IAAW,MAAM;AACrB,MAAAwvB,EAAO,QAAQ;AAAA,IAAA,GAIX,EAAE,IAAAxE,EAAG,IAAImyC,GAAoBhK,GAAQ35D,EAAM,eAAe,GAC1D,EAAE,GAAAE,MAAMC,MACR,EAAE,qBAAA+N,GAAqB,eAAAC,GAAe,mBAAAkB,MAAsB/B,GAAU,GAEtEgC,IAAY,YAAY;AAC5B,UAAI,CAAAN,EAAc;AACd,YAAA;AAGE,cAFJA,EAAc,QAAQ,IACtBwiB,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,YAAAtjB,KACpBc,EAAc,QAAQ;AACtB;AAAA,UACF;AACA,gBAAMO,IAAM,MAAMmqD,GAAa75B,GAAW85B,EAAO,KAAK;AACtD,UAAA91D,EAAK,aAAa0L,CAAG,GACrBpB,EAAc,SAAS,GACvB6nB,EAAO,QAAQ,IACX,CAACv1B,EAAY8O,EAAI,EAAE,KAAMvP,EAAM;AAAA,iBAG5BiL,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAA+D,EAAc,QAAQ;AAAA,QACxB;AAAA,IAAA,GAGI,EAAE,mBAAA00D,MAAsBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrF9B,UAAMzjE,IAAQC,GA0BR4D,IAAOC,GAIPe,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,qBAAqB,CAAC,GAAGM,CAAQ,CAAC;AAAA,MACzC;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAERwE,IAAmBtE,EAAS,MAAM,CAAC,CAACL,EAAM,QAAQ,GAElD,EAAE,YAAAyvB,MAAe62B,MAEjBr0B,IAAQ;AAAA,MACZ,oBAAoB;AAAA;AAAA,QAElB,UAAUxC,EAAW9qB,EAAiB,KAAK;AAAA,MAC7C;AAAA,IAAA,GAII6sB,IAAKU,GAAaD,GAAO,EAAE,oBAAAptB,KAAsB,EAAE,QAAQ7E,EAAM,gBAAA,CAAiB,GAGlF,EAAE,mBAAA8jE,EAAsB,IAAAb,GAAuBjjE,EAAM,SAAS,GAE9D6yB,IAAc0wC,MAEdQ,IAAY,OAAO7hC,MAAiC;AACxD,MAAKA,MACAr9B,EAAmB,MAAM,SAASq9B,CAAE,MACpBr9B,EAAA,QAAQ,CAAC,GAAGA,EAAmB,OAAWq9B,CAAG;AAAA,IAClE,GAGI8hC,IAAmB/9D,EAAI,EAAE,GAEzBg+D,IAAe,CAAC9/D,MAAqB;AACzC,MAAIA,EAAS,SAAS,MAAG6/D,EAAiB,QAAQ7/D;AAAA,IAAA,GAG9C,EAAE,0BAAA+/D,MAA6BtK,MAE/BuK,IAAc,CAACxK,MAAsB;AAErC,UADJuK,EAAyBvK,CAAM,GAC3B54D,GAAQ8D,EAAmB,KAAK,GAAG;AACrC,QAAAA,EAAmB,QAAQ,CAAC,GAAGA,EAAmB,OAAO80D,EAAO,EAAE;AAClE;AAAA,MACF;AACA,MAAA90D,EAAmB,QAAQ80D,EAAO;AAAA,IAAA,GAG9ByK,IAAqB,CAAC5/D,MACtBzD,GAAQ8D,EAAmB,KAAK,IAC3BA,EAAmB,MAAM,SAASL,CAAI,IACpCK,EAAmB,QACrBA,EAAmB,UAAUL,IAE/B;AAGT,WAAAiL,GAAU,MAAM;AAAA,IAAA,CAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICzGY40D,KAA0B,CAACpkC,MAAyB;AACzD,QAAA,EAAE,WAAAJ,MAAc3C,MAChB,EAAE,uBAAAmE,MAA0BX,MAE5Bq6B,IAAkB15B,EAAsBpB,CAAS;AACnD,MAAAx/B,EAAYs6D,CAAe;AACvB,UAAA,IAAI,MAAM,iCAAiC;AAG7C,QAAAoI,IAAmB,CAAChK,OAAoD;AAAA,IAC5E,OAAOA,EAAQ;AAAA,IACf,OAAOA,EAAQ;AAAA,EAAA,IAGX+J,IAAe,CAAC/J,OAA4C;AAAA,IAChE,IAAIA,EAAQ;AAAA,IACZ,MAAMA,EAAQ;AAAA,EAAA,IAGViK,IAAoB,CAACkB,MAClBA,EAAS,IAAI,CAACnL,MAAwBgK,EAAiBhK,CAAO,CAAC,GAGlEmK,IAAgB,CAACgB,MACdA,EAAS,IAAI,CAACnL,MAAwB+J,EAAa/J,CAAO,CAAC;AAe7D,SAAA;AAAA,IACL,kBAAAgK;AAAA,IACA,YAdiB,OAAOtwD,GAAwBH,MACzC0wD,EAAkB,MAAMrK,GAAiBl5B,GAAWI,GAAWptB,GAAYH,CAAS,CAAC;AAAA,IAc5F,iBAPsB,OAAOinB,MACtBypC,EAAkB,MAAMtK,GAAsBj5B,GAAWI,GAAWtG,CAAG,CAAC;AAAA,IAO/E,mBAZwB,OAAO9mB,GAAwBH,MAChD4wD,EAAc,MAAMvK,GAAiBl5B,GAAWI,GAAWptB,GAAYH,CAAS,CAAC;AAAA,EAWxF;AAEJ,GClDMynB,KAAahoB,GAAiB2tB,IAAiBH,EAAM;AAE5CpN,GAAS;AAAA,EACtB,UAAU;AAAA,IACR,GAAG4H,GAAW,EAAE,SAAS,IAAM;AAAA,EACjC;AAAA,EACA,IAAI;AAAA,IACF,GAAGA,GAAW,EAAE,MAAM,MAAM;AAAA,EAC9B;AAAA,EACA,MAAM;AAAA,IACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ;AAAA,EAChC;AAAA,EACA,UAAU;AAAA,IACR,GAAGA,GAAW,EAAE,MAAM,YAAY;AAAA,EACpC;AACF,CAAC;AAMM,SAASoqC,KAAmB;AACjC,SAAOhyC,GAAS;AAAA,IACd,UAAU;AAAA,MACR,GAAG4H,GAAW,EAAE,SAAS,IAAM;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,MACJ,GAAGA,GAAW,EAAE,MAAM,QAAQ;AAAA,IAChC;AAAA,EAAA,CACD;AACH;;;;;;;;;;;;;AC1BA,UAAMn6B,IAAQC,GAoBR,EAAE,kBAAAukE,MAAqBjL,MACvBlN,IAAoBC,MAEpBv3B,IAASC,GAAsD,MAAS,GACxEC,IAASD,GAAoB,EAAK,GAElCxwB,IAAOnE,EAAS,MACbmkE,EAAiBxkE,EAAM,EAAE,CACjC,GAEK+iE,IAAiB1iE,EAAS,MAAM;AACpC,UAAI,CAACL,EAAM;AAAgB;AAC3B,YAAMuxD,IAAQlF,EAAkB,SAASrsD,EAAM,OAAO;AAClD,UAAA,GAACuxD,KAAS,CAACx8B,EAAO,UAClBw8B,EAAM,YAAY,gBAAgB,IAAIx8B,EAAO,MAAM,IAAI;AAAU,eAAA;AAAA,IAC9D,CACR,GAEKI,IAAe90B,EAAS,MACxBL,EAAM,MAAM,SAAS,IAAUA,EAAM,QACrC+0B,EAAO,QACFA,EAAO,MAAM,OAEf,EACR;AAED,WAAAzvB;AAAA,MACEd;AAAA,MACA,OAAOL,MAAa;AAClB,QAAI8wB,EAAO,SACPx0B,EAAY0D,CAAQ,KAAKA,EAAS,YAAY,OAClD4wB,EAAO,QAAQ5wB,GACf8wB,EAAO,QAAQ;AAAA,MACjB;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1Db,SAASwvC,KAAuB;AAkB9B,SAAA;AAAA,IACL,eAlBoB,CAACtjC,GAAqB0iC,OACnC;AAAA,MACL,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,WAAW1iC;AAAA,MACX,OAAO;AAAA,QACL,UAAU0iC,KAAY;AAAA,MACxB;AAAA,MACA,WAAWrzD,GAAY;AAAA,MACvB,YAAYA,GAAY;AAAA,MACxB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAemvB;AAAAA,MACf,SAASG;AAAA,IAAA;AAAA,EAKX;AAEJ;ACnBA,MAAM,EAAA,UAAEgmB,IAAUN,WAAAA,OAAcc;AAEhB,SAAAoe,GAAqBvL,GAA0BoG,IAAmC,QAAW;AACrG,QAAAttC,IAAQ5xB,EAAS,OAAO;AAAA,IAC5B,SAAS;AAAA,MACP,MAAM;AAAA,QAAA,UACJylD;AAAAA,QACA,WAAWN,GAAU,CAAC;AAAA,MACxB;AAAA,IACF;AAAA,EACA,EAAA;AAGK,SAAA;AAAA,IACL,IAHStzB,GAAaD,GAAO,EAAE,SAAAknC,KAAW,EAAE,QAAQoG,EAAA,CAAiB;AAAA,EAGrE;AAEJ;;;;;;;;;;;;;;;;ACHA,UAAMv/D,IAAQC,GAuBR4D,IAAOC,GAIP,EAAE,WAAA+7B,MAAc3C,MAChB,EAAE,uBAAAmE,MAA0BX,MAE5Bq6B,IAAkB15B,EAAsBrhC,EAAM,SAAS;AACzD,QAAAS,EAAYs6D,CAAe;AACvB,YAAA,IAAI,MAAM,iCAAiC;AAG7C,UAAA,EAAE,eAAAX,MAAkBqK,MAEpBtL,IAAUlzD,EAAgBm0D,EAAcp6D,EAAM,SAAS,CAAC,GACxDg2B,IAAS/vB,EAAI,EAAK,GAClB+I,IAAgB/I,EAAI,EAAK,GAEzB0O,IAAU,MAAM;AAChB,UAAAlU,EAAYs6D,CAAe;AACvB,cAAA,IAAI,MAAM,iCAAiC;AAEnD,MAAA5B,EAAQ,QAAQiB,EAAcp6D,EAAM,WAAW,EAAI,GAC3Cm5D,EAAA,MAAM,OAAOn5D,EAAM,cAC3Bg2B,EAAO,QAAQ;AAAA,IAAA,GAGXxvB,IAAW,MAAM;AACrB,MAAAwvB,EAAO,QAAQ;AAAA,IAAA,GAIX,EAAE,IAAAxE,EAAG,IAAIkzC,GAAqBvL,GAASn5D,EAAM,eAAe,GAC5D,EAAE,GAAAE,MAAMC,MACR,EAAE,qBAAA+N,GAAqB,eAAAC,GAAe,mBAAAkB,MAAsB/B,GAAU,GAEtEgC,IAAY,YAAY;AAC5B,UAAI,CAAAN,EAAc;AACd,YAAA;AAGE,cAFJA,EAAc,QAAQ,IACtBwiB,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,YAAAtjB,KACpBc,EAAc,QAAQ;AACtB;AAAA,UACF;AACA,gBAAMO,IAAM,MAAMypD,GAAcn5B,GAAWs5B,EAAQ,KAAK;AACxD,UAAAt1D,EAAK,aAAa0L,CAAG,GACrBpB,EAAc,SAAS,GACvB6nB,EAAO,QAAQ,IACX,CAACv1B,EAAY8O,EAAI,EAAE,KAAMvP,EAAM;AAAA,iBAG5BiL,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAA+D,EAAc,QAAQ;AAAA,QACxB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpFF,UAAMhP,IAAQC,GAwBR4D,IAAOC,GAIPe,IAAqBxE,EAAS;AAAA,MAClC,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,qBAAqB,CAAC,GAAGM,CAAQ,CAAC;AAAA,MACzC;AAAA,IAAA,CACD,GAEKQ,IAAmBtE,EAAS,MAAM,CAAC,CAACL,EAAM,QAAQ,GAElD,EAAE,YAAAyvB,MAAe62B,MAEjBr0B,IAAQ;AAAA,MACZ,oBAAoB;AAAA,QAClB,UAAUxC,EAAW9qB,CAAgB;AAAA,MACvC;AAAA,IAAA,GAII6sB,IAAKU,GAAaD,GAAO,EAAE,oBAAAptB,KAAsB,EAAE,QAAQ7E,EAAM,gBAAA,CAAiB,GAGlF,EAAE,mBAAA8jE,EAAsB,IAAAO,GAAwBrkE,EAAM,SAAS,GAE/D6yB,IAAc0xC,MAEdI,IAAoB1+D,EAAI,EAAE,GAE1Bg+D,IAAe,CAAC9/D,MAAqB;AACzC,MAAIA,EAAS,SAAS,MAAGwgE,EAAkB,QAAQxgE;AAAA,IAAA,GAG/C,EAAE,2BAAAygE,MAA8BrL,MAEhC4K,IAAc,CAAChL,MAAwB;AAEvC,UADJyL,EAA0BzL,CAAO,GAC7Bp4D,GAAQ8D,EAAmB,KAAK,GAAG;AACrC,QAAAA,EAAmB,QAAQ,CAAC,GAAGA,EAAmB,OAAOs0D,EAAQ,EAAE;AACnE;AAAA,MACF;AACA,MAAAt0D,EAAmB,QAAQs0D,EAAQ;AAAA,IAAA,GAG/BiL,IAAqB,CAAC5/D,MACtBzD,GAAQ8D,EAAmB,KAAK,IAC3BA,EAAmB,MAAM,SAASL,CAAI,IACpCK,EAAmB,QACrBA,EAAmB,UAAUL,IAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICxFIqgE,KAA+B,CAAChqC,GAAyBoF,MAAyB;AACvF,QAAA,EAAE,uBAAAoB,MAA0BX,MAE5Bq6B,IAAkB15B,EAAsBpB,CAAS;AAEnD,MAAAx/B,EAAYs6D,CAAe;AACvB,UAAA,IAAI,MAAM,iCAAiC;AAG7C,QAAA+J,IAAiBzkE,EAAS,MACvB06D,EAAgBlgC,CAAS,EAAE,SAAS,OAC5C,GAEKkqC,IAAkB1kE,EAAS,MACxB06D,EAAgBlgC,CAAS,EAAE,SAAS,QAC5C;AAEM,SAAA;AAAA,IACL,gBAAAiqC;AAAA,IACA,iBAAAC;AAAA,EAAA;AAEJ,GCrBaC,KAA8B,CAACnqC,GAAyBoF,MAAyB;AACtF,QAAA,EAAE,uBAAAoB,MAA0BX,MAC5Bq6B,IAAkB15B,EAAsBpB,CAAS;AAEnD,MAAAx/B,EAAYs6D,CAAe;AACvB,UAAA,IAAI,MAAM,iCAAiC;AAG7C,QAAAkK,IAAgB5kE,EAAS,MACtB06D,EAAgBlgC,CAAS,EAAE,QAAQ,OAC3C,GAEKqqC,IAAiB7kE,EAAS,MACvB06D,EAAgBlgC,CAAS,EAAE,QAAQ,QAC3C;AAEM,SAAA;AAAA,IACL,eAAAoqC;AAAA,IACA,gBAAAC;AAAA,EAAA;AAEJ;;;;;;ACNA,UAAMllE,IAAQC,GAOR,EAAE,GAAAC,MAAMC,MAERglE,IAASl/D,EAAI,CAAC,YAAY,MAAM,CAAC,GAEjCm/D,IAAmBxF,MACnB,EAAE,OAAA/jC,GAAO,iBAAAgkC,GAAiB,oBAAAC,EAAmB,IAAIx8B,GAAY8hC,CAAgB,GAE7EvqC,IAAYx6B,EAAS,MAAM;;AAC/B,eAAOgE,IAAAw3B,EAAM,UAAN,gBAAAx3B,EAAa,WAAW,cAAa41B,GAAa;AAAA,IAAA,CAC1D,GAEKorC,IAAchlE,EAAS,MACpBw6B,EAAU,UAAUZ,GAAa,KACzC,GAEKqrC,IAAgBjlE,EAA2B,MACxCw7B,EAAM,SAASA,EAAM,MAAM,WAAYA,EAAM,MAAM,WAAyB,IACpF,GAEK0pC,IAAsB,MAAM;AAChC,MAAAzF,EAAmB,QAAQ;AAAA,IAAA,GAIvB,EAAE,iBAAAiF,GAAiB,gBAAAD,MAAmBD,GAA6BhqC,EAAU,OAAO76B,EAAM,SAAS,GAEnG,EAAE,gBAAAklE,GAAgB,eAAAD,MAAkBD,GAA4BnqC,EAAU,OAAO76B,EAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCtG,UAAMA,IAAQC,GAaR,EAAE,GAAAC,MAAMC,MAERilE,IAAmBxF,MACnB,EAAE,OAAA/jC,GAAO,mBAAAmkC,EAAkB,IAAI18B,GAAY8hC,CAAgB,GAC3DI,IAAmBlZ,MAEnBmZ,IAAoBx/D,EAAI,EAAK,GAE7B,EAAE,eAAAkI,GAAe,qBAAAD,GAAqB,mBAAAmB,MAAsB/B,GAAU,GAEtEkkB,IAAKU,GAAa,CAAC,GAAG,CAAI,GAAA,EAAE,QAAQgtC,GAAA,CAAwC,GAE5E,EAAE,WAAAr/B,MAAc3C,MAEhBwoC,IAAS,YAAY;AACrB,UAAA,CAAA9kE,GAAOi7B,EAAM,KAAK,GAGlB;AAAA,YAFJ4pC,EAAkB,QAAQ,IAC1Bj0C,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,UAAAtjB,KACpBu3D,EAAkB,QAAQ;AAC1B;AAAA,QACF;AACI,YAAA;AACF,gBAAMviC,GAAoBrD,GAAWhE,EAAM,OAAO77B,EAAM,SAAS,GAC7DggE,EAAkB,SAAS,CAACp/D,GAAOi7B,EAAM,KAAK,KAC1C,MAAA2pC,EAAiB,iBAAiB3pC,EAAM,KAAK,GAErD1tB,EAAc,SAAS;AAAA,iBAChBlD,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAAw6D,EAAkB,QAAQ;AAAA,QAC5B;AAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICpDWE,KAAmBnrC,GAAY,oBAAoB;AAAA,EAC9D,OAAO,OAAc;AAAA,IACnB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,kBAAkB,KAAK,IAAI;AAAA,IAC3B,sBAAsB,KAAK,IAAI;AAAA,EAAA;AAAA,EAEjC,SAAS;AAAA,IACP,aAAaotB,GAA6B;AACxC,WAAK,YAAYA;AAAA,IACnB;AAAA,IACA,OAAOge,GAA8B;AACnC,WAAK,MAAMA;AAAA,IACb;AAAA,IACA,aAAa;AACX,WAAK,SAAS;AAAA,IAChB;AAAA,IACA,aAAa;AACX,WAAK,SAAS;AAAA,IAChB;AAAA,IACA,yBAAyB;AAClB,WAAA,uBAAuB,KAAK;IACnC;AAAA,IACA,qBAAqB;AACd,WAAA,mBAAmB,KAAK;IAC/B;AAAA,IACA,QAAQ;AACN,WAAK,YAAY,MACjB,KAAK,SAAS,IACd,KAAK,MAAM,MACN,KAAA,mBAAmB,KAAK,OACxB,KAAA,uBAAuB,KAAK;IACnC;AAAA,EACF;AACF,CAAC;;;;;;;;;;;ACvCD,UAAM5lE,IAAQC,GASR4D,IAAOC,GAIP,EAAE,eAAAqK,GAAe,mBAAAkB,EAAkB,IAAI/B,GAAU,GAEjD6mB,IAAUluB,EAAI,EAAK,GAEnB,EAAE,WAAA45B,MAAc3C,MAEhB2oC,IAAS,OAAOja,MAAoB;AACpC,UAAA;AACF,QAAAz3B,EAAQ,QAAQ,IAChB,MAAMw3B,GAAY9rB,GAAW7/B,EAAM,SAAS4rD,CAAK,GACjDz9C,EAAc,SAAS,GACvBtK,EAAK,aAAa;AAAA,eACX8C,GAAG;AACV,QAAA0I,EAAkB1I,CAAC;AAAA,MAAA,UACnB;AACA,QAAAwtB,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA,GAEI,EAAE,GAAAj0B,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICvBRq/B,KAAY,eACZsmC,KAAsB,yBACfnmC,KAAS,SAETomC,KAAW,CAACnoC,GAA6BsE,MACpDvE,GAA8BC,GAAQ4B,KAAY,QAAQ,EAAE,IAAA0C,EAAA,GAAM,WAAWvC,EAAM,GAExEqmC,KAAY,CAACpoC,GAA6BsE,GAAWz1B,MAChE8wD,GAA+B3/B,GAAQnxB,GAAM+yB,KAAY,QAAQ,EAAE,IAAA0C,EAAG,GAAG,WAAWvC,EAAM,GAE/EsmC,KAAoB,CAC/BroC,GACAwtB,GACAv4C,GACAH,MACGusB,GAAoBrB,GAAQkoC,IAAqB,EAAE,IAAI1a,EAAQ,GAAGv4C,GAAYH,GAAW,WAAWitB,EAAM;;;;;;;;;;;;;ACTzG,UAAA,EAAE,GAAAz/B,MAAMC,MAER+lE,IAAgBP,MAChBP,IAAmBxF,MAEnB/sD,IAAawf,MAEb,EAAE,WAAAwN,MAAc3C,MAEhBipC,IAAW,YAAY;AAC3B,UAAID,EAAc,WAAW;AAC3B,QAAAA,EAAc,WAAW;AACnB,cAAA32D,IAAM,MAAM02D,GAAkBpmC,GAAWqmC,EAAc,UAAU,IAAIrzD,GAAY,CAAA,CAAE;AACzF,YAAItD,EAAI,SAAS,KAAKA,EAAI,CAAC,EAAE,IAAI;AAC/B,gBAAMq2D,IAAM,MAAMG,GAASlmC,GAAWtwB,EAAI,CAAC,EAAE,EAAE;AAC/C,UAAA22D,EAAc,OAAON,CAAG,GACxBM,EAAc,WAAW;AACzB;AAAA,QACF;AACA,QAAAA,EAAc,OAAO,IAAI,GACzBA,EAAc,WAAW;AACzB;AAAA,MACF;AACA,MAAAA,EAAc,OAAO,IAAI,GACzBA,EAAc,WAAW;AAAA,IAAA,GAGrBE,IAAc,YAAY;AAC9B,YAAMD,EAAS,GACfD,EAAc,uBAAuB,GACrCA,EAAc,mBAAmB;AAAA,IAAA;AAcnC,WAAAz2D,GAAU,YAAY;AACpB,MAAAy2D,EAAc,MAAM,GACpBA,EAAc,WAAW,GAEvBd,EAAiB,SACjBA,EAAiB,MAAM,YACvBrb,GAAqBqb,EAAiB,MAAM,QAAQ,MAEpDc,EAAc,aAAazkE,GAAU2jE,EAAiB,MAAM,QAAQ,CAAC,GACrE,MAAMe,EAAS,IAEjBD,EAAc,WAAW;AAAA,IAAA,CAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzED,UAAMlmE,IAAQC,GASR,EAAE,SAAAuiE,GAAS,WAAAC,GAAW,cAAAE,EAAiB,IAAAL,GAA+BtiE,EAAM,QAAQ;AAE1F,WAAAyP,GAAU,YAAY;AACpB,YAAMif,GAAS,GACP8zC;IAAA,CACT,GAED7pC,GAAgB,MAAM;AACV,MAAA8pC;IAAA,CACX;;;;;;;;;;;;;;;;;;;;;;;;;;;ACeK,UAAA,EAAE,GAAAviE,MAAMC,MAERilE,IAAmBxF,MACnB,EAAE,WAAAG,EAAA,IAAcz8B,GAAY8hC,CAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrC5CiB,KAAY,GAELC,KAAe,SAC1BC,GACAC,GACAC,GACAC,GACA;AACM,QAAAC,IAAYJ,EAAQ,gBACpBK,IAAQD,EAAU,gBAAgBD;AAEjC,SAAA;AAAA,IACL,GAAGF,EAAiB,SAASI;AAAA,IAC7B,GAAGJ,EAAiB,SAASI;AAAA,IAC7B,OAAOJ,EAAiB,kBAAkBG,EAAU;AAAA,IACpD,QAAQH,EAAiB,mBAAmBG,EAAU;AAAA,IACtD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAEZ,GAEaE,KAAe,SAC1BN,GACAC,GACAC,GACAC,GACA;AACM,QAAAC,IAAYJ,EAAQ,gBACpB95D,IAAO85D,EAAQ,WACfK,IAAQD,EAAU,gBAAgBD;AAExC,MAAII,IAAS/kE,IAAa0K,EAAK,IAAIm6D,GAAO,QAAQP,EAAS,CAAC;AAC5D,EAAIS,IAAS,MAAYA,IAAA;AAEzB,MAAIC,IAAShlE,IAAa0K,EAAK,IAAIm6D,GAAO,QAAQP,EAAS,CAAC;AAC5D,EAAIU,IAAS,MAAYA,IAAA;AAErB,MAAAC,IAAkB9kE,IAAeuK,EAAK,QAAQk6D,EAAU,cAAc,QAAQN,EAAS,CAAC;AACtF,QAAAY,IAAgBD,IAAkBP,IAAqBK;AAC7D,EAAIG,IAAgBR,MACAO,IAAAA,KAAoBC,IAAgBR,KAAsB,MAAOA;AAGjF,MAAAS,IAAmBhlE,IAAeuK,EAAK,SAASk6D,EAAU,eAAe,QAAQN,EAAS,CAAC;AACzF,QAAAc,IAAiBD,IAAmBR,IAAsBK;AAChE,SAAII,IAAiBT,MACAQ,IAAAA,KAAqBC,IAAiBT,KAAuB,MAAOA,IAGzFF,EAAiB,SAASM,GAC1BN,EAAiB,SAASO,GAC1BP,EAAiB,kBAAkBQ,GACnCR,EAAiB,mBAAmBU,GAE7BV;AACT;AC5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,SAASz/B,GAAQpgC,GAAGkC,GAAG;AACrB,MAAI3I,IAAI,OAAO,KAAKyG,CAAC;AACrB,MAAI,OAAO,uBAAuB;AAChC,QAAID,IAAI,OAAO,sBAAsBC,CAAC;AACtC,IAAAkC,MAAMnC,IAAIA,EAAE,OAAO,SAAU,GAAG;AAC9B,aAAO,OAAO,yBAAyBC,GAAG,CAAC,EAAE;AAAA,IACnD,CAAK,IAAIzG,EAAE,KAAK,MAAMA,GAAGwG,CAAC;AAAA,EACvB;AACD,SAAOxG;AACT;AACA,SAASknC,GAAezgC,GAAG;AACzB,WAASkC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AACzC,QAAI3I,IAAY,UAAU2I,CAAC,KAAnB,OAAuB,UAAUA,CAAC,IAAI;AAC9C,IAAAA,IAAI,IAAIk+B,GAAQ,OAAO7mC,CAAC,GAAG,EAAE,EAAE,QAAQ,SAAU2I,GAAG;AAClD,MAAAw+B,GAAgB1gC,GAAGkC,GAAG3I,EAAE2I,CAAC,CAAC;AAAA,IAChC,CAAK,IAAI,OAAO,4BAA4B,OAAO,iBAAiBlC,GAAG,OAAO,0BAA0BzG,CAAC,CAAC,IAAI6mC,GAAQ,OAAO7mC,CAAC,CAAC,EAAE,QAAQ,SAAU2I,GAAG;AAChJ,aAAO,eAAelC,GAAGkC,GAAG,OAAO,yBAAyB3I,GAAG2I,CAAC,CAAC;AAAA,IACvE,CAAK;AAAA,EACF;AACD,SAAOlC;AACT;AACA,SAAS2gC,GAAQ5gC,GAAG;AAClB;AAEA,SAAO4gC,KAAwB,OAAO,UAArB,cAA2C,OAAO,OAAO,YAA1B,WAAqC,SAAU5gC,GAAG;AAChG,WAAO,OAAOA;AAAA,EACf,IAAG,SAAUA,GAAG;AACf,WAAOA,KAAmB,OAAO,UAArB,cAA+BA,EAAE,gBAAgB,UAAUA,MAAM,OAAO,YAAY,WAAW,OAAOA;AAAA,EACtH,GAAK4gC,GAAQ5gC,CAAC;AACd;AACA,SAASmmD,GAAgBC,GAAUC,GAAa;AAC9C,MAAI,EAAED,aAAoBC;AACxB,UAAM,IAAI,UAAU,mCAAmC;AAE3D;AACA,SAASqa,GAAkBjqD,GAAQnd,GAAO;AACxC,WAAS4G,IAAI,GAAGA,IAAI5G,EAAM,QAAQ4G,KAAK;AACrC,QAAIgtD,IAAa5zD,EAAM4G,CAAC;AACxB,IAAAgtD,EAAW,aAAaA,EAAW,cAAc,IACjDA,EAAW,eAAe,IACtB,WAAWA,MAAYA,EAAW,WAAW,KACjD,OAAO,eAAez2C,GAAQkqD,GAAezT,EAAW,GAAG,GAAGA,CAAU;AAAA,EACzE;AACH;AACA,SAASF,GAAa3G,GAAa8G,GAAYC,GAAa;AAC1D,SAAID,KAAYuT,GAAkBra,EAAY,WAAW8G,CAAU,GAC/DC,KAAasT,GAAkBra,GAAa+G,CAAW,GAC3D,OAAO,eAAe/G,GAAa,aAAa;AAAA,IAC9C,UAAU;AAAA,EACd,CAAG,GACMA;AACT;AACA,SAAS1lB,GAAgBxxB,GAAK9S,GAAKrC,GAAO;AACxC,SAAAqC,IAAMskE,GAAetkE,CAAG,GACpBA,KAAO8S,IACT,OAAO,eAAeA,GAAK9S,GAAK;AAAA,IAC9B,OAAOrC;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EAChB,CAAK,IAEDmV,EAAI9S,CAAG,IAAIrC,GAENmV;AACT;AACA,SAASyxD,GAAmBnsD,GAAK;AAC/B,SAAOosD,GAAmBpsD,CAAG,KAAKqsD,GAAiBrsD,CAAG,KAAKssD,GAA4BtsD,CAAG,KAAKusD;AACjG;AACA,SAASH,GAAmBpsD,GAAK;AAC/B,MAAI,MAAM,QAAQA,CAAG;AAAG,WAAOwsD,GAAkBxsD,CAAG;AACtD;AACA,SAASqsD,GAAiBI,GAAM;AAC9B,MAAI,OAAO,SAAW,OAAeA,EAAK,OAAO,QAAQ,KAAK,QAAQA,EAAK,YAAY,KAAK;AAAM,WAAO,MAAM,KAAKA,CAAI;AAC1H;AACA,SAASH,GAA4B/gE,GAAGmhE,GAAQ;AAC9C,MAAKnhE,GACL;AAAA,QAAI,OAAOA,KAAM;AAAU,aAAOihE,GAAkBjhE,GAAGmhE,CAAM;AAC7D,QAAI9gE,IAAI,OAAO,UAAU,SAAS,KAAKL,CAAC,EAAE,MAAM,GAAG,EAAE;AAErD,QADIK,MAAM,YAAYL,EAAE,gBAAaK,IAAIL,EAAE,YAAY,OACnDK,MAAM,SAASA,MAAM;AAAO,aAAO,MAAM,KAAKL,CAAC;AACnD,QAAIK,MAAM,eAAe,2CAA2C,KAAKA,CAAC;AAAG,aAAO4gE,GAAkBjhE,GAAGmhE,CAAM;AAAA;AACjH;AACA,SAASF,GAAkBxsD,GAAKmyC,GAAK;AACnC,GAAIA,KAAO,QAAQA,IAAMnyC,EAAI,YAAQmyC,IAAMnyC,EAAI;AAC/C,WAASvU,IAAI,GAAGkhE,IAAO,IAAI,MAAMxa,CAAG,GAAG1mD,IAAI0mD,GAAK1mD;AAAK,IAAAkhE,EAAKlhE,CAAC,IAAIuU,EAAIvU,CAAC;AACpE,SAAOkhE;AACT;AACA,SAASJ,KAAqB;AAC5B,QAAM,IAAI,UAAU;AAAA,mFAAsI;AAC5J;AACA,SAASK,GAAanlD,GAAOolD,GAAM;AACjC,MAAI,OAAOplD,KAAU,YAAYA,MAAU;AAAM,WAAOA;AACxD,MAAIqlD,IAAOrlD,EAAM,OAAO,WAAW;AACnC,MAAIqlD,MAAS,QAAW;AACtB,QAAI14D,IAAM04D,EAAK,KAAKrlD,GAAOolD,KAAQ,SAAS;AAC5C,QAAI,OAAOz4D,KAAQ;AAAU,aAAOA;AACpC,UAAM,IAAI,UAAU,8CAA8C;AAAA,EACnE;AACD,UAAQy4D,MAAS,WAAW,SAAS,QAAQplD,CAAK;AACpD;AACA,SAASykD,GAAelP,GAAK;AAC3B,MAAIp1D,IAAMglE,GAAa5P,GAAK,QAAQ;AACpC,SAAO,OAAOp1D,KAAQ,WAAWA,IAAM,OAAOA,CAAG;AACnD;AAEA,IAAImlE,KAAa,OAAO,SAAW,OAAe,OAAO,OAAO,WAAa,KACzEC,KAASD,KAAa,SAAS,IAC/BE,KAAkBF,MAAcC,GAAO,SAAS,kBAAkB,kBAAkBA,GAAO,SAAS,kBAAkB,IACtHE,KAAoBH,KAAa,kBAAkBC,KAAS,IAC5DG,KAAY,WAGZC,KAAa,OACbC,KAAc,QACdC,KAAc,QACdC,KAAc,QACdC,KAAc,KACdC,KAAc,KACdC,KAAe,KACfC,KAAe,KACfC,KAAoB,MACpBC,KAAoB,MACpBC,KAAoB,MACpBC,KAAoB,MAGpBC,KAAa,GAAG,OAAOb,IAAW,OAAO,GACzCc,KAAiB,GAAG,OAAOd,IAAW,WAAW,GACjDe,KAAe,GAAG,OAAOf,IAAW,SAAS,GAC7CgB,KAAa,GAAG,OAAOhB,IAAW,OAAO,GACzCiB,KAAkB,GAAG,OAAOjB,IAAW,YAAY,GACnDkB,KAAc,GAAG,OAAOlB,IAAW,QAAQ,GAC3CmB,KAAa,GAAG,OAAOnB,IAAW,OAAO,GAGzCoB,KAAc,GAAG,OAAOpB,IAAW,QAAQ,GAC3CqB,KAAe,GAAG,OAAOrB,IAAW,SAAS,GAG7CsB,KAAiB,QACjBC,KAAiB,QACjBC,KAAiB,QAGjBC,KAAa,QACbC,KAAiB,WACjBC,KAAkB,YAClBC,KAAmB,aACnBC,KAAiB,YACjBC,KAAoBhC,KAAkB,eAAe,aACrDiC,KAAmBjC,KAAkB,cAAc,aACnDkC,KAAkBlC,KAAkB,yBAAyB,WAC7DmC,KAAqBlC,KAAoB,gBAAgB+B,IACzDI,KAAqBnC,KAAoB,gBAAgBgC,IACzDI,KAAmBpC,KAAoB,4BAA4BiC,IACnEI,KAAc,SACdC,KAAe,UACfC,KAAc,SACdC,KAAa,QAGbC,KAAiB,cAGjBC,KAAiB,4CACjBC,KAAkB,UAClBC,KAAuB,6BACvBC,KAAkB,iBAIlBC,KAAsB,KACtBC,KAAuB,KAEvBC,KAAW;AAAA;AAAA,EAEb,UAAU;AAAA;AAAA;AAAA,EAIV,UAAUzB;AAAA;AAAA;AAAA,EAIV,oBAAoB;AAAA;AAAA,EAEpB,aAAa;AAAA;AAAA,EAEb,MAAM;AAAA;AAAA,EAEN,SAAS;AAAA;AAAA,EAET,YAAY;AAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,EAET,kBAAkB;AAAA;AAAA,EAElB,kBAAkB;AAAA;AAAA,EAElB,OAAO;AAAA;AAAA,EAEP,QAAQ;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA,EAER,WAAW;AAAA;AAAA,EAEX,YAAY;AAAA;AAAA,EAEZ,UAAU;AAAA;AAAA,EAEV,cAAc;AAAA;AAAA,EAEd,SAAS;AAAA;AAAA,EAET,WAAW;AAAA;AAAA,EAEX,UAAU;AAAA;AAAA,EAEV,UAAU;AAAA;AAAA,EAEV,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,gBAAgB;AAAA;AAAA,EAEhB,gBAAgB;AAAA;AAAA,EAEhB,kBAAkB;AAAA;AAAA,EAElB,0BAA0B;AAAA;AAAA,EAE1B,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,mBAAmBuB;AAAA,EACnB,oBAAoBC;AAAA;AAAA,EAEpB,OAAO;AAAA,EACP,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AACR,GAEIE,KAAW,qrCAKXC,KAAQ,OAAO,SAASpD,GAAO;AAOnC,SAAStnE,GAASH,GAAO;AACvB,SAAO,OAAOA,KAAU,YAAY,CAAC6qE,GAAM7qE,CAAK;AAClD;AAOA,IAAI8qE,KAAmB,SAA0B9qE,GAAO;AACtD,SAAOA,IAAQ,KAAKA,IAAQ;AAC9B;AAOA,SAASD,GAAYC,GAAO;AAC1B,SAAO,OAAOA,IAAU;AAC1B;AAOA,SAASW,GAASX,GAAO;AACvB,SAAO4mC,GAAQ5mC,CAAK,MAAM,YAAYA,MAAU;AAClD;AACA,IAAI+qE,KAAiB,OAAO,UAAU;AAOtC,SAASC,GAAchrE,GAAO;AAC5B,MAAI,CAACW,GAASX,CAAK;AACjB,WAAO;AAET,MAAI;AACF,QAAIirE,IAAejrE,EAAM,aACrBkrE,IAAYD,EAAa;AAC7B,WAAOA,KAAgBC,KAAaH,GAAe,KAAKG,GAAW,eAAe;AAAA,EACnF,QAAe;AACd,WAAO;AAAA,EACR;AACH;AAOA,SAAS5qE,GAAWN,GAAO;AACzB,SAAO,OAAOA,KAAU;AAC1B;AACA,IAAImrE,KAAQ,MAAM,UAAU;AAO5B,SAASC,GAAQprE,GAAO;AACtB,SAAO,MAAM,OAAO,MAAM,KAAKA,CAAK,IAAImrE,GAAM,KAAKnrE,CAAK;AAC1D;AAQA,SAASqrE,GAAQt/D,GAAMqG,GAAU;AAC/B,SAAIrG,KAAQzL,GAAW8R,CAAQ,MACzB,MAAM,QAAQrG,CAAI,KAAK5L,GAAS4L,EAAK,MAAM,IAC7Cq/D,GAAQr/D,CAAI,EAAE,QAAQ,SAAU/L,GAAOqC,GAAK;AAC1C,IAAA+P,EAAS,KAAKrG,GAAM/L,GAAOqC,GAAK0J,CAAI;AAAA,EAC5C,CAAO,IACQpL,GAASoL,CAAI,KACtB,OAAO,KAAKA,CAAI,EAAE,QAAQ,SAAU1J,GAAK;AACvC,IAAA+P,EAAS,KAAKrG,GAAMA,EAAK1J,CAAG,GAAGA,GAAK0J,CAAI;AAAA,EAChD,CAAO,IAGEA;AACT;AAQA,IAAIu/D,KAAS,OAAO,UAAU,SAAgB7uD,GAAQ;AACpD,WAASs8B,IAAO,UAAU,QAAQphC,IAAO,IAAI,MAAMohC,IAAO,IAAIA,IAAO,IAAI,CAAC,GAAGC,IAAO,GAAGA,IAAOD,GAAMC;AAClG,IAAArhC,EAAKqhC,IAAO,CAAC,IAAI,UAAUA,CAAI;AAEjC,SAAIr4C,GAAS8b,CAAM,KAAK9E,EAAK,SAAS,KACpCA,EAAK,QAAQ,SAAU8/C,GAAK;AAC1B,IAAI92D,GAAS82D,CAAG,KACd,OAAO,KAAKA,CAAG,EAAE,QAAQ,SAAUp1D,GAAK;AACtC,MAAAoa,EAAOpa,CAAG,IAAIo1D,EAAIp1D,CAAG;AAAA,IAC/B,CAAS;AAAA,EAET,CAAK,GAEIoa;AACT,GACI8uD,KAAkB;AAStB,SAASC,GAAuBxrE,GAAO;AACrC,MAAIyrE,IAAQ,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AAChF,SAAOF,GAAgB,KAAKvrE,CAAK,IAAI,KAAK,MAAMA,IAAQyrE,CAAK,IAAIA,IAAQzrE;AAC3E;AACA,IAAI0rE,KAAgB;AAOpB,SAASC,GAASxuD,GAASyuD,GAAQ;AACjC,MAAIzgD,IAAQhO,EAAQ;AACpB,EAAAkuD,GAAQO,GAAQ,SAAU5rE,GAAOksD,GAAU;AACzC,IAAIwf,GAAc,KAAKxf,CAAQ,KAAK/rD,GAASH,CAAK,MAChDA,IAAQ,GAAG,OAAOA,GAAO,IAAI,IAE/BmrB,EAAM+gC,CAAQ,IAAIlsD;AAAA,EACtB,CAAG;AACH;AAQA,SAAS6rE,GAAS1uD,GAASnd,GAAO;AAChC,SAAOmd,EAAQ,YAAYA,EAAQ,UAAU,SAASnd,CAAK,IAAImd,EAAQ,UAAU,QAAQnd,CAAK,IAAI;AACpG;AAOA,SAAS8rE,GAAS3uD,GAASnd,GAAO;AAChC,MAAKA,GAGL;AAAA,QAAIG,GAASgd,EAAQ,MAAM,GAAG;AAC5B,MAAAkuD,GAAQluD,GAAS,SAAUrF,GAAM;AAC/B,QAAAg0D,GAASh0D,GAAM9X,CAAK;AAAA,MAC1B,CAAK;AACD;AAAA,IACD;AACD,QAAImd,EAAQ,WAAW;AACrB,MAAAA,EAAQ,UAAU,IAAInd,CAAK;AAC3B;AAAA,IACD;AACD,QAAI+X,IAAYoF,EAAQ,UAAU,KAAI;AACtC,IAAKpF,IAEMA,EAAU,QAAQ/X,CAAK,IAAI,MACpCmd,EAAQ,YAAY,GAAG,OAAOpF,GAAW,GAAG,EAAE,OAAO/X,CAAK,KAF1Dmd,EAAQ,YAAYnd;AAAA;AAIxB;AAOA,SAAS+rE,GAAY5uD,GAASnd,GAAO;AACnC,MAAKA,GAGL;AAAA,QAAIG,GAASgd,EAAQ,MAAM,GAAG;AAC5B,MAAAkuD,GAAQluD,GAAS,SAAUrF,GAAM;AAC/B,QAAAi0D,GAAYj0D,GAAM9X,CAAK;AAAA,MAC7B,CAAK;AACD;AAAA,IACD;AACD,QAAImd,EAAQ,WAAW;AACrB,MAAAA,EAAQ,UAAU,OAAOnd,CAAK;AAC9B;AAAA,IACD;AACD,IAAImd,EAAQ,UAAU,QAAQnd,CAAK,KAAK,MACtCmd,EAAQ,YAAYA,EAAQ,UAAU,QAAQnd,GAAO,EAAE;AAAA;AAE3D;AAQA,SAAS6X,GAAYsF,GAASnd,GAAOgsE,GAAO;AAC1C,MAAKhsE,GAGL;AAAA,QAAIG,GAASgd,EAAQ,MAAM,GAAG;AAC5B,MAAAkuD,GAAQluD,GAAS,SAAUrF,GAAM;AAC/B,QAAAD,GAAYC,GAAM9X,GAAOgsE,CAAK;AAAA,MACpC,CAAK;AACD;AAAA,IACD;AAGD,IAAIA,IACFF,GAAS3uD,GAASnd,CAAK,IAEvB+rE,GAAY5uD,GAASnd,CAAK;AAAA;AAE9B;AACA,IAAIisE,KAAoB;AAOxB,SAASC,GAAYlsE,GAAO;AAC1B,SAAOA,EAAM,QAAQisE,IAAmB,OAAO,EAAE,YAAW;AAC9D;AAQA,SAASE,GAAQhvD,GAASza,GAAM;AAC9B,SAAI/B,GAASwc,EAAQza,CAAI,CAAC,IACjBya,EAAQza,CAAI,IAEjBya,EAAQ,UACHA,EAAQ,QAAQza,CAAI,IAEtBya,EAAQ,aAAa,QAAQ,OAAO+uD,GAAYxpE,CAAI,CAAC,CAAC;AAC/D;AAQA,SAAS0pE,GAAQjvD,GAASza,GAAMqJ,GAAM;AACpC,EAAIpL,GAASoL,CAAI,IACfoR,EAAQza,CAAI,IAAIqJ,IACPoR,EAAQ,UACjBA,EAAQ,QAAQza,CAAI,IAAIqJ,IAExBoR,EAAQ,aAAa,QAAQ,OAAO+uD,GAAYxpE,CAAI,CAAC,GAAGqJ,CAAI;AAEhE;AAOA,SAASsgE,GAAWlvD,GAASza,GAAM;AACjC,MAAI/B,GAASwc,EAAQza,CAAI,CAAC;AACxB,QAAI;AACF,aAAOya,EAAQza,CAAI;AAAA,IACpB,QAAe;AACd,MAAAya,EAAQza,CAAI,IAAI;AAAA,IACjB;AAAA,WACQya,EAAQ;AAEjB,QAAI;AACF,aAAOA,EAAQ,QAAQza,CAAI;AAAA,IAC5B,QAAe;AACd,MAAAya,EAAQ,QAAQza,CAAI,IAAI;AAAA,IACzB;AAAA;AAED,IAAAya,EAAQ,gBAAgB,QAAQ,OAAO+uD,GAAYxpE,CAAI,CAAC,CAAC;AAE7D;AACA,IAAI4pE,KAAgB,SAChBC,KAAgB,WAAY;AAC9B,MAAIC,IAAY;AAChB,MAAIhF,IAAY;AACd,QAAIiF,IAAO,IACPC,IAAW,WAAoB;AAAA,OAC/B9mE,IAAU,OAAO,eAAe,CAAA,GAAI,QAAQ;AAAA,MAC9C,KAAK,WAAe;AAClB,eAAA4mE,IAAY,IACLC;AAAA,MACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,KAAK,SAAazsE,GAAO;AACvB,QAAAysE,IAAOzsE;AAAA,MACR;AAAA,IACP,CAAK;AACD,IAAAynE,GAAO,iBAAiB,QAAQiF,GAAU9mE,CAAO,GACjD6hE,GAAO,oBAAoB,QAAQiF,GAAU9mE,CAAO;AAAA,EACrD;AACD,SAAO4mE;AACT;AASA,SAASG,GAAexvD,GAASsL,GAAMikD,GAAU;AAC/C,MAAI9mE,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA,GAC9Egb,IAAU8rD;AACd,EAAAjkD,EAAK,KAAI,EAAG,MAAM6jD,EAAa,EAAE,QAAQ,SAAUt4D,GAAO;AACxD,QAAI,CAACu4D,IAAe;AAClB,UAAIK,IAAYzvD,EAAQ;AACxB,MAAIyvD,KAAaA,EAAU54D,CAAK,KAAK44D,EAAU54D,CAAK,EAAE04D,CAAQ,MAC5D9rD,IAAUgsD,EAAU54D,CAAK,EAAE04D,CAAQ,GACnC,OAAOE,EAAU54D,CAAK,EAAE04D,CAAQ,GAC5B,OAAO,KAAKE,EAAU54D,CAAK,CAAC,EAAE,WAAW,KAC3C,OAAO44D,EAAU54D,CAAK,GAEpB,OAAO,KAAK44D,CAAS,EAAE,WAAW,KACpC,OAAOzvD,EAAQ;AAAA,IAGpB;AACD,IAAAA,EAAQ,oBAAoBnJ,GAAO4M,GAAShb,CAAO;AAAA,EACvD,CAAG;AACH;AASA,SAASinE,GAAY1vD,GAASsL,GAAMikD,GAAU;AAC5C,MAAI9mE,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA,GAC9EknE,IAAWJ;AACf,EAAAjkD,EAAK,KAAI,EAAG,MAAM6jD,EAAa,EAAE,QAAQ,SAAUt4D,GAAO;AACxD,QAAIpO,EAAQ,QAAQ,CAAC2mE,IAAe;AAClC,UAAIQ,IAAqB5vD,EAAQ,WAC/ByvD,IAAYG,MAAuB,SAAS,CAAA,IAAKA;AACnD,MAAAD,IAAW,WAAmB;AAC5B,eAAOF,EAAU54D,CAAK,EAAE04D,CAAQ,GAChCvvD,EAAQ,oBAAoBnJ,GAAO84D,GAAUlnE,CAAO;AACpD,iBAASonE,IAAQ,UAAU,QAAQr1D,IAAO,IAAI,MAAMq1D,CAAK,GAAGC,IAAQ,GAAGA,IAAQD,GAAOC;AACpF,UAAAt1D,EAAKs1D,CAAK,IAAI,UAAUA,CAAK;AAE/B,QAAAP,EAAS,MAAMvvD,GAASxF,CAAI;AAAA,MACpC,GACWi1D,EAAU54D,CAAK,MAClB44D,EAAU54D,CAAK,IAAI,KAEjB44D,EAAU54D,CAAK,EAAE04D,CAAQ,KAC3BvvD,EAAQ,oBAAoBnJ,GAAO44D,EAAU54D,CAAK,EAAE04D,CAAQ,GAAG9mE,CAAO,GAExEgnE,EAAU54D,CAAK,EAAE04D,CAAQ,IAAII,GAC7B3vD,EAAQ,YAAYyvD;AAAA,IACrB;AACD,IAAAzvD,EAAQ,iBAAiBnJ,GAAO84D,GAAUlnE,CAAO;AAAA,EACrD,CAAG;AACH;AASA,SAAS2oC,GAAcpxB,GAASsL,GAAM1c,GAAM;AAC1C,MAAIiI;AAGJ,SAAI1T,GAAW,KAAK,KAAKA,GAAW,WAAW,IAC7C0T,IAAQ,IAAI,YAAYyU,GAAM;AAAA,IAC5B,QAAQ1c;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,EAClB,CAAK,KAEDiI,IAAQ,SAAS,YAAY,aAAa,GAC1CA,EAAM,gBAAgByU,GAAM,IAAM,IAAM1c,CAAI,IAEvCoR,EAAQ,cAAcnJ,CAAK;AACpC;AAOA,SAASk5D,GAAU/vD,GAAS;AAC1B,MAAIgwD,IAAMhwD,EAAQ;AAClB,SAAO;AAAA,IACL,MAAMgwD,EAAI,QAAQ,OAAO,cAAc,SAAS,gBAAgB;AAAA,IAChE,KAAKA,EAAI,OAAO,OAAO,cAAc,SAAS,gBAAgB;AAAA,EAClE;AACA;AACA,IAAIC,KAAW3F,GAAO,UAClB4F,KAAiB;AAOrB,SAASC,GAAiB3nB,GAAK;AAC7B,MAAI4nB,IAAQ5nB,EAAI,MAAM0nB,EAAc;AACpC,SAAOE,MAAU,SAASA,EAAM,CAAC,MAAMH,GAAS,YAAYG,EAAM,CAAC,MAAMH,GAAS,YAAYG,EAAM,CAAC,MAAMH,GAAS;AACtH;AAOA,SAASI,GAAa7nB,GAAK;AACzB,MAAIv9B,IAAY,aAAa,QAAO,oBAAI,KAAM,GAAC,QAAO,CAAE;AACxD,SAAOu9B,KAAOA,EAAI,QAAQ,GAAG,MAAM,KAAK,MAAM,OAAOv9B;AACvD;AAOA,SAASqlD,GAAcj/B,GAAM;AAC3B,MAAI22B,IAAS32B,EAAK,QAChB3E,IAAS2E,EAAK,QACd1E,IAAS0E,EAAK,QACdd,IAAac,EAAK,YAClBb,IAAaa,EAAK,YAChBviC,IAAS,CAAA;AACb,EAAI9L,GAASutC,CAAU,KAAKA,MAAe,KACzCzhC,EAAO,KAAK,cAAc,OAAOyhC,GAAY,KAAK,CAAC,GAEjDvtC,GAASwtC,CAAU,KAAKA,MAAe,KACzC1hC,EAAO,KAAK,cAAc,OAAO0hC,GAAY,KAAK,CAAC,GAIjDxtC,GAASglE,CAAM,KAAKA,MAAW,KACjCl5D,EAAO,KAAK,UAAU,OAAOk5D,GAAQ,MAAM,CAAC,GAE1ChlE,GAAS0pC,CAAM,KAAKA,MAAW,KACjC59B,EAAO,KAAK,UAAU,OAAO49B,GAAQ,GAAG,CAAC,GAEvC1pC,GAAS2pC,CAAM,KAAKA,MAAW,KACjC79B,EAAO,KAAK,UAAU,OAAO69B,GAAQ,GAAG,CAAC;AAE3C,MAAInB,IAAY18B,EAAO,SAASA,EAAO,KAAK,GAAG,IAAI;AACnD,SAAO;AAAA,IACL,iBAAiB08B;AAAA,IACjB,aAAaA;AAAA,IACb,WAAWA;AAAA,EACf;AACA;AAOA,SAAS+kC,GAAgBC,GAAU;AACjC,MAAIC,IAAYlnC,GAAe,CAAE,GAAEinC,CAAQ,GACvCE,IAAW;AACf,SAAAxC,GAAQsC,GAAU,SAAUG,GAASC,GAAW;AAC9C,WAAOH,EAAUG,CAAS,GAC1B1C,GAAQuC,GAAW,SAAUI,GAAU;AACrC,UAAIC,IAAK,KAAK,IAAIH,EAAQ,SAASE,EAAS,MAAM,GAC9CE,IAAK,KAAK,IAAIJ,EAAQ,SAASE,EAAS,MAAM,GAC9CG,IAAK,KAAK,IAAIL,EAAQ,OAAOE,EAAS,IAAI,GAC1CI,IAAK,KAAK,IAAIN,EAAQ,OAAOE,EAAS,IAAI,GAC1CK,IAAK,KAAK,KAAKJ,IAAKA,IAAKC,IAAKA,CAAE,GAChCI,IAAK,KAAK,KAAKH,IAAKA,IAAKC,IAAKA,CAAE,GAChClI,KAASoI,IAAKD,KAAMA;AACxB,MAAI,KAAK,IAAInI,CAAK,IAAI,KAAK,IAAI2H,CAAQ,MACrCA,IAAW3H;AAAA,IAEnB,CAAK;AAAA,EACL,CAAG,GACM2H;AACT;AAQA,SAASU,GAAW50B,GAAO60B,GAAS;AAClC,MAAIC,IAAQ90B,EAAM,OAChB+0B,IAAQ/0B,EAAM,OACZg1B,IAAM;AAAA,IACR,MAAMF;AAAA,IACN,MAAMC;AAAA,EACV;AACE,SAAOF,IAAUG,IAAMjoC,GAAe;AAAA,IACpC,QAAQ+nC;AAAA,IACR,QAAQC;AAAA,EACT,GAAEC,CAAG;AACR;AAOA,SAASC,GAAkBjB,GAAU;AACnC,MAAIc,IAAQ,GACRC,IAAQ,GACR37C,IAAQ;AACZ,SAAAs4C,GAAQsC,GAAU,SAAUnyB,GAAO;AACjC,QAAIqzB,IAASrzB,EAAM,QACjBszB,IAAStzB,EAAM;AACjB,IAAAizB,KAASI,GACTH,KAASI,GACT/7C,KAAS;AAAA,EACb,CAAG,GACD07C,KAAS17C,GACT27C,KAAS37C,GACF;AAAA,IACL,OAAO07C;AAAA,IACP,OAAOC;AAAA,EACX;AACA;AAQA,SAASK,GAAiBrzB,GAAO;AAC/B,MAAIszB,IAActzB,EAAM,aACtBjS,IAASiS,EAAM,QACfhS,IAAQgS,EAAM,OACZjzB,IAAO,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,WAC3EwmD,IAAenE,GAAiBphC,CAAK,GACrCwlC,IAAgBpE,GAAiBrhC,CAAM;AAC3C,MAAIwlC,KAAgBC,GAAe;AACjC,QAAIC,IAAgB1lC,IAASulC;AAC7B,IAAIvmD,MAAS,aAAa0mD,IAAgBzlC,KAASjhB,MAAS,WAAW0mD,IAAgBzlC,IACrFD,IAASC,IAAQslC,IAEjBtlC,IAAQD,IAASulC;AAAA,EAEpB;AAAM,IAAIC,IACTxlC,IAASC,IAAQslC,IACRE,MACTxlC,IAAQD,IAASulC;AAEnB,SAAO;AAAA,IACL,OAAOtlC;AAAA,IACP,QAAQD;AAAA,EACZ;AACA;AAOA,SAAS2lC,GAAgBC,GAAO;AAC9B,MAAI3lC,IAAQ2lC,EAAM,OAChB5lC,IAAS4lC,EAAM,QACfC,IAASD,EAAM;AAEjB,MADAC,IAAS,KAAK,IAAIA,CAAM,IAAI,KACxBA,MAAW;AACb,WAAO;AAAA,MACL,OAAO7lC;AAAA,MACP,QAAQC;AAAA,IACd;AAEE,MAAI6lC,IAAMD,IAAS,KAAK,KAAK,KAAK,KAC9BE,IAAS,KAAK,IAAID,CAAG,GACrBE,IAAS,KAAK,IAAIF,CAAG,GACrBG,IAAWhmC,IAAQ+lC,IAAShmC,IAAS+lC,GACrCG,IAAYjmC,IAAQ8lC,IAAS/lC,IAASgmC;AAC1C,SAAOH,IAAS,KAAK;AAAA,IACnB,OAAOK;AAAA,IACP,QAAQD;AAAA,EACZ,IAAM;AAAA,IACF,OAAOA;AAAA,IACP,QAAQC;AAAA,EACZ;AACA;AAUA,SAASC,GAAgBlnB,GAAOmnB,GAAOC,GAAOC,GAAO;AACnD,MAAIC,IAAmBH,EAAM,aAC3BI,IAAoBJ,EAAM,cAC1BK,IAAqBL,EAAM,eAC3BM,IAAeN,EAAM,QACrB1K,IAASgL,MAAiB,SAAS,IAAIA,GACvCC,IAAeP,EAAM,QACrBhmC,IAASumC,MAAiB,SAAS,IAAIA,GACvCC,IAAeR,EAAM,QACrB/lC,IAASumC,MAAiB,SAAS,IAAIA,GACrCrB,IAAcc,EAAM,aACtBQ,IAAeR,EAAM,cACrBS,IAAgBT,EAAM,eACpBU,IAAkBT,EAAM,WAC1BU,IAAYD,MAAoB,SAAS,gBAAgBA,GACzDE,IAAwBX,EAAM,uBAC9BY,IAAwBD,MAA0B,SAAS,KAAOA,GAClEE,IAAwBb,EAAM,uBAC9Bc,IAAwBD,MAA0B,SAAS,QAAQA,GACnEE,IAAiBf,EAAM,UACvBgB,IAAWD,MAAmB,SAAS,QAAWA,GAClDE,IAAkBjB,EAAM,WACxBkB,IAAYD,MAAoB,SAAS,QAAWA,GACpDE,KAAiBnB,EAAM,UACvBoB,IAAWD,OAAmB,SAAS,IAAIA,IAC3CE,IAAkBrB,EAAM,WACxBsB,IAAYD,MAAoB,SAAS,IAAIA,GAC3CE,IAAS,SAAS,cAAc,QAAQ,GACxCC,IAAUD,EAAO,WAAW,IAAI,GAChCjqB,IAAW0nB,GAAiB;AAAA,IAC9B,aAAaC;AAAA,IACb,OAAO+B;AAAA,IACP,QAAQE;AAAA,EACZ,CAAG,GACGO,IAAWzC,GAAiB;AAAA,IAC9B,aAAaC;AAAA,IACb,OAAOmC;AAAA,IACP,QAAQE;AAAA,EACT,GAAE,OAAO,GACN3nC,IAAQ,KAAK,IAAI2d,EAAS,OAAO,KAAK,IAAImqB,EAAS,OAAOlB,CAAY,CAAC,GACvE7mC,IAAS,KAAK,IAAI4d,EAAS,QAAQ,KAAK,IAAImqB,EAAS,QAAQjB,CAAa,CAAC,GAI3EkB,IAAe1C,GAAiB;AAAA,IAClC,aAAaiB;AAAA,IACb,OAAOe;AAAA,IACP,QAAQE;AAAA,EACZ,CAAG,GACGS,KAAe3C,GAAiB;AAAA,IAClC,aAAaiB;AAAA,IACb,OAAOmB;AAAA,IACP,QAAQE;AAAA,EACT,GAAE,OAAO,GACNM,KAAY,KAAK,IAAIF,EAAa,OAAO,KAAK,IAAIC,GAAa,OAAOzB,CAAiB,CAAC,GACxF2B,KAAa,KAAK,IAAIH,EAAa,QAAQ,KAAK,IAAIC,GAAa,QAAQxB,CAAkB,CAAC,GAC5FhuE,KAAS,CAAC,CAACyvE,KAAY,GAAG,CAACC,KAAa,GAAGD,IAAWC,EAAU;AACpE,SAAAN,EAAO,QAAQ9F,GAAuB9hC,CAAK,GAC3C4nC,EAAO,SAAS9F,GAAuB/hC,CAAM,GAC7C8nC,EAAQ,YAAYd,GACpBc,EAAQ,SAAS,GAAG,GAAG7nC,GAAOD,CAAM,GACpC8nC,EAAQ,KAAI,GACZA,EAAQ,UAAU7nC,IAAQ,GAAGD,IAAS,CAAC,GACvC8nC,EAAQ,OAAOpM,IAAS,KAAK,KAAK,GAAG,GACrCoM,EAAQ,MAAM1nC,GAAQC,CAAM,GAC5BynC,EAAQ,wBAAwBZ,GAChCY,EAAQ,wBAAwBV,GAChCU,EAAQ,UAAU,MAAMA,GAAS,CAAC7oB,CAAK,EAAE,OAAOke,GAAmB1kE,GAAO,IAAI,SAAU2vE,IAAO;AAC7F,WAAO,KAAK,MAAMrG,GAAuBqG,EAAK,CAAC;AAAA,EACnD,CAAG,CAAC,CAAC,CAAC,GACJN,EAAQ,QAAO,GACRD;AACT;AACA,IAAIQ,KAAe,OAAO;AAS1B,SAASC,GAAsBC,GAAU/1B,GAAO7kC,GAAQ;AACtD,MAAIshC,IAAM;AACV,EAAAthC,KAAU6kC;AACV,WAAS/1C,IAAI+1C,GAAO/1C,IAAIkR,GAAQlR,KAAK;AACnC,IAAAwyC,KAAOo5B,GAAaE,EAAS,SAAS9rE,CAAC,CAAC;AAE1C,SAAOwyC;AACT;AACA,IAAIu5B,KAAuB;AAO3B,SAASC,GAAqBC,GAAS;AACrC,MAAIC,IAASD,EAAQ,QAAQF,IAAsB,EAAE,GACjDI,IAAS,KAAKD,CAAM,GACpBhkB,IAAc,IAAI,YAAYikB,EAAO,MAAM,GAC3CC,IAAQ,IAAI,WAAWlkB,CAAW;AACtC,SAAAid,GAAQiH,GAAO,SAAUtyE,GAAOkG,GAAG;AACjC,IAAAosE,EAAMpsE,CAAC,IAAImsE,EAAO,WAAWnsE,CAAC;AAAA,EAClC,CAAG,GACMkoD;AACT;AAQA,SAASmkB,GAAqBnkB,GAAavE,GAAU;AAMnD,WALI2oB,IAAS,CAAA,GAGT7oB,IAAY,MACZ2oB,IAAQ,IAAI,WAAWlkB,CAAW,GAC/BkkB,EAAM,SAAS;AAGpB,IAAAE,EAAO,KAAKV,GAAa,MAAM,MAAM1G,GAAQkH,EAAM,SAAS,GAAG3oB,CAAS,CAAC,CAAC,CAAC,GAC3E2oB,IAAQA,EAAM,SAAS3oB,CAAS;AAElC,SAAO,QAAQ,OAAOE,GAAU,UAAU,EAAE,OAAO,KAAK2oB,EAAO,KAAK,EAAE,CAAC,CAAC;AAC1E;AAOA,SAASC,GAAuBrkB,GAAa;AAC3C,MAAI4jB,IAAW,IAAI,SAAS5jB,CAAW,GACnCskB;AAGJ,MAAI;AACF,QAAIC,GACAC,GACAC;AAGJ,QAAIb,EAAS,SAAS,CAAC,MAAM,OAAQA,EAAS,SAAS,CAAC,MAAM;AAG5D,eAFI56D,IAAS46D,EAAS,YAClBjuD,IAAS,GACNA,IAAS,IAAI3M,KAAQ;AAC1B,YAAI46D,EAAS,SAASjuD,CAAM,MAAM,OAAQiuD,EAAS,SAASjuD,IAAS,CAAC,MAAM,KAAM;AAChF,UAAA6uD,IAAY7uD;AACZ;AAAA,QACD;AACD,QAAAA,KAAU;AAAA,MACX;AAEH,QAAI6uD,GAAW;AACb,UAAIE,IAAaF,IAAY,GACzBG,IAAaH,IAAY;AAC7B,UAAIb,GAAsBC,GAAUc,GAAY,CAAC,MAAM,QAAQ;AAC7D,YAAIE,IAAahB,EAAS,UAAUe,CAAU;AAE9C,YADAJ,IAAeK,MAAe,QAC1BL,KAAgBK,MAAe,UAC7BhB,EAAS,UAAUe,IAAa,GAAGJ,CAAY,MAAM,IAAQ;AAC/D,cAAIM,IAAiBjB,EAAS,UAAUe,IAAa,GAAGJ,CAAY;AACpE,UAAIM,KAAkB,MACpBJ,IAAWE,IAAaE;AAAA,QAE3B;AAAA,MAEJ;AAAA,IACF;AACD,QAAIJ,GAAU;AACZ,UAAIK,IAAUlB,EAAS,UAAUa,GAAUF,CAAY,GACnDQ,GACAjtE;AACJ,WAAKA,IAAI,GAAGA,IAAIgtE,GAAShtE,KAAK;AAE5B,YADAitE,IAAUN,IAAW3sE,IAAI,KAAK,GAC1B8rE,EAAS,UAAUmB,GAASR,CAAY,MAAM,KAA0B;AAE1E,UAAAQ,KAAW,GAGXT,IAAcV,EAAS,UAAUmB,GAASR,CAAY,GAGtDX,EAAS,UAAUmB,GAAS,GAAGR,CAAY;AAC3C;AAAA,QACD;AAAA,IAEJ;AAAA,EACF,QAAe;AACd,IAAAD,IAAc;AAAA,EACf;AACD,SAAOA;AACT;AAOA,SAASU,GAAiBV,GAAa;AACrC,MAAIvN,IAAS,GACTt7B,IAAS,GACTC,IAAS;AACb,UAAQ4oC,GAAW;AAAA,IAEjB,KAAK;AACH,MAAA7oC,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAs7B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAr7B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAq7B,IAAS,IACTr7B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAq7B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAA,IAAS,IACTt7B,IAAS;AACT;AAAA,IAGF,KAAK;AACH,MAAAs7B,IAAS;AACT;AAAA,EACH;AACD,SAAO;AAAA,IACL,QAAQA;AAAA,IACR,QAAQt7B;AAAA,IACR,QAAQC;AAAA,EACZ;AACA;AAEA,IAAIupC,KAAS;AAAA,EACX,QAAQ,WAAkB;AACxB,SAAK,cAAa,GAClB,KAAK,WAAU,GACf,KAAK,YAAW,GAChB,KAAK,aAAY,GACb,KAAK,WACP,KAAK,cAAa;AAAA,EAErB;AAAA,EACD,eAAe,WAAyB;AACtC,QAAIl2D,IAAU,KAAK,SACjBvX,IAAU,KAAK,SACfsf,IAAY,KAAK,WACjB2gD,IAAU,KAAK,SACbsL,IAAW,OAAOvrE,EAAQ,iBAAiB,GAC3CyrE,IAAY,OAAOzrE,EAAQ,kBAAkB;AACjD,IAAAkmE,GAASjG,GAAS8C,EAAY,GAC9BoD,GAAY5uD,GAASwrD,EAAY;AACjC,QAAI2K,IAAgB;AAAA,MAClB,OAAO,KAAK,IAAIpuD,EAAU,aAAaisD,KAAY,IAAIA,IAAW1G,EAAmB;AAAA,MACrF,QAAQ,KAAK,IAAIvlD,EAAU,cAAcmsD,KAAa,IAAIA,IAAY3G,EAAoB;AAAA,IAChG;AACI,SAAK,gBAAgB4I,GACrB3H,GAAS9F,GAAS;AAAA,MAChB,OAAOyN,EAAc;AAAA,MACrB,QAAQA,EAAc;AAAA,IAC5B,CAAK,GACDxH,GAAS3uD,GAASwrD,EAAY,GAC9BoD,GAAYlG,GAAS8C,EAAY;AAAA,EAClC;AAAA;AAAA,EAED,YAAY,WAAsB;AAChC,QAAI2K,IAAgB,KAAK,eACvBrN,IAAY,KAAK,WACfsN,IAAW,KAAK,QAAQ,UACxBC,IAAU,KAAK,IAAIvN,EAAU,MAAM,IAAI,QAAQ,IAC/CqK,IAAekD,IAAUvN,EAAU,gBAAgBA,EAAU,cAC7DsK,IAAgBiD,IAAUvN,EAAU,eAAeA,EAAU,eAC7D+I,IAAcsB,IAAeC,GAC7BkD,IAAcH,EAAc,OAC5BI,IAAeJ,EAAc;AACjC,IAAIA,EAAc,SAAStE,IAAcsE,EAAc,QACjDC,MAAa,IACfE,IAAcH,EAAc,SAAStE,IAErC0E,IAAeJ,EAAc,QAAQtE,IAE9BuE,MAAa,IACtBG,IAAeJ,EAAc,QAAQtE,IAErCyE,IAAcH,EAAc,SAAStE;AAEvC,QAAI2E,IAAa;AAAA,MACf,aAAa3E;AAAA,MACb,cAAcsB;AAAA,MACd,eAAeC;AAAA,MACf,OAAOkD;AAAA,MACP,QAAQC;AAAA,IACd;AACI,SAAK,aAAaC,GAClB,KAAK,UAAUJ,MAAa,KAAKA,MAAa,GAC9C,KAAK,YAAY,IAAM,EAAI,GAC3BI,EAAW,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAW,OAAOA,EAAW,QAAQ,GAAGA,EAAW,QAAQ,GAChGA,EAAW,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAW,QAAQA,EAAW,SAAS,GAAGA,EAAW,SAAS,GACpGA,EAAW,QAAQL,EAAc,QAAQK,EAAW,SAAS,GAC7DA,EAAW,OAAOL,EAAc,SAASK,EAAW,UAAU,GAC9DA,EAAW,UAAUA,EAAW,MAChCA,EAAW,SAASA,EAAW,KAC/B,KAAK,oBAAoBrI,GAAO,CAAE,GAAEqI,CAAU;AAAA,EAC/C;AAAA,EACD,aAAa,SAAqBC,GAAaC,GAAiB;AAC9D,QAAIjuE,IAAU,KAAK,SACjB0tE,IAAgB,KAAK,eACrBK,IAAa,KAAK,YAClBG,IAAc,KAAK,aACjBP,IAAW3tE,EAAQ,UACnBopE,IAAc2E,EAAW,aACzBI,IAAU,KAAK,WAAWD;AAC9B,QAAIF,GAAa;AACf,UAAII,IAAiB,OAAOpuE,EAAQ,cAAc,KAAK,GACnDquE,IAAkB,OAAOruE,EAAQ,eAAe,KAAK;AACzD,MAAI2tE,IAAW,KACbS,IAAiB,KAAK,IAAIA,GAAgBV,EAAc,KAAK,GAC7DW,IAAkB,KAAK,IAAIA,GAAiBX,EAAc,MAAM,GAC5DC,MAAa,MACXU,IAAkBjF,IAAcgF,IAClCA,IAAiBC,IAAkBjF,IAEnCiF,IAAkBD,IAAiBhF,MAG9BuE,IAAW,MAChBS,IACFA,IAAiB,KAAK,IAAIA,GAAgBD,IAAUD,EAAY,QAAQ,CAAC,IAChEG,IACTA,IAAkB,KAAK,IAAIA,GAAiBF,IAAUD,EAAY,SAAS,CAAC,IACnEC,MACTC,IAAiBF,EAAY,OAC7BG,IAAkBH,EAAY,QAC1BG,IAAkBjF,IAAcgF,IAClCA,IAAiBC,IAAkBjF,IAEnCiF,IAAkBD,IAAiBhF;AAIzC,UAAIkF,IAAoBnF,GAAiB;AAAA,QACvC,aAAaC;AAAA,QACb,OAAOgF;AAAA,QACP,QAAQC;AAAA,MAChB,CAAO;AACD,MAAAD,IAAiBE,EAAkB,OACnCD,IAAkBC,EAAkB,QACpCP,EAAW,WAAWK,GACtBL,EAAW,YAAYM,GACvBN,EAAW,WAAW,OACtBA,EAAW,YAAY;AAAA,IACxB;AACD,QAAIE;AACF,UAAIN,KAAYQ,IAAU,IAAI,IAAI;AAChC,YAAII,IAAgBb,EAAc,QAAQK,EAAW,OACjDS,IAAed,EAAc,SAASK,EAAW;AACrD,QAAAA,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,GAC9CR,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY,GAC5CT,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,GAC9CR,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY,GACxCL,KAAW,KAAK,YAClBJ,EAAW,UAAU,KAAK,IAAIG,EAAY,MAAMA,EAAY,QAAQA,EAAY,QAAQH,EAAW,MAAM,GACzGA,EAAW,SAAS,KAAK,IAAIG,EAAY,KAAKA,EAAY,OAAOA,EAAY,SAASH,EAAW,OAAO,GACxGA,EAAW,UAAUG,EAAY,MACjCH,EAAW,SAASG,EAAY,KAC5BP,MAAa,MACXI,EAAW,SAASL,EAAc,UACpCK,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,GAC9CR,EAAW,UAAU,KAAK,IAAI,GAAGQ,CAAa,IAE5CR,EAAW,UAAUL,EAAc,WACrCK,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY,GAC5CT,EAAW,SAAS,KAAK,IAAI,GAAGS,CAAY;AAAA,MAI1D;AACQ,QAAAT,EAAW,UAAU,CAACA,EAAW,OACjCA,EAAW,SAAS,CAACA,EAAW,QAChCA,EAAW,UAAUL,EAAc,OACnCK,EAAW,SAASL,EAAc;AAAA,EAGvC;AAAA,EACD,cAAc,SAAsBv9B,GAASs+B,GAAa;AACxD,QAAIV,IAAa,KAAK,YACpB1N,IAAY,KAAK;AACnB,QAAIoO,GAAa;AACf,UAAIC,IAAmBlF,GAAgB;AAAA,QACnC,OAAOnJ,EAAU,eAAe,KAAK,IAAIA,EAAU,UAAU,CAAC;AAAA,QAC9D,QAAQA,EAAU,gBAAgB,KAAK,IAAIA,EAAU,UAAU,CAAC;AAAA,QAChE,QAAQA,EAAU,UAAU;AAAA,MACtC,CAAS,GACDqK,IAAegE,EAAiB,OAChC/D,IAAgB+D,EAAiB,QAC/B5qC,IAAQiqC,EAAW,SAASrD,IAAeqD,EAAW,eACtDlqC,IAASkqC,EAAW,UAAUpD,IAAgBoD,EAAW;AAC7D,MAAAA,EAAW,SAASjqC,IAAQiqC,EAAW,SAAS,GAChDA,EAAW,QAAQlqC,IAASkqC,EAAW,UAAU,GACjDA,EAAW,QAAQjqC,GACnBiqC,EAAW,SAASlqC,GACpBkqC,EAAW,cAAcrD,IAAeC,GACxCoD,EAAW,eAAerD,GAC1BqD,EAAW,gBAAgBpD,GAC3B,KAAK,YAAY,IAAM,EAAK;AAAA,IAC7B;AACD,KAAIoD,EAAW,QAAQA,EAAW,YAAYA,EAAW,QAAQA,EAAW,cAC1EA,EAAW,OAAOA,EAAW,WAE3BA,EAAW,SAASA,EAAW,aAAaA,EAAW,SAASA,EAAW,eAC7EA,EAAW,MAAMA,EAAW,SAE9BA,EAAW,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAW,OAAOA,EAAW,QAAQ,GAAGA,EAAW,QAAQ,GAChGA,EAAW,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAW,QAAQA,EAAW,SAAS,GAAGA,EAAW,SAAS,GACpG,KAAK,YAAY,IAAO,EAAI,GAC5BA,EAAW,OAAO,KAAK,IAAI,KAAK,IAAIA,EAAW,MAAMA,EAAW,OAAO,GAAGA,EAAW,OAAO,GAC5FA,EAAW,MAAM,KAAK,IAAI,KAAK,IAAIA,EAAW,KAAKA,EAAW,MAAM,GAAGA,EAAW,MAAM,GACxFA,EAAW,UAAUA,EAAW,MAChCA,EAAW,SAASA,EAAW,KAC/BhI,GAAS,KAAK,QAAQL,GAAO;AAAA,MAC3B,OAAOqI,EAAW;AAAA,MAClB,QAAQA,EAAW;AAAA,IACpB,GAAElG,GAAc;AAAA,MACf,YAAYkG,EAAW;AAAA,MACvB,YAAYA,EAAW;AAAA,IACxB,CAAA,CAAC,CAAC,GACH,KAAK,YAAY59B,CAAO,GACpB,KAAK,WAAW,KAAK,WACvB,KAAK,aAAa,IAAM,EAAI;AAAA,EAE/B;AAAA,EACD,aAAa,SAAqBA,GAAS;AACzC,QAAI49B,IAAa,KAAK,YACpB1N,IAAY,KAAK,WACfv8B,IAAQu8B,EAAU,gBAAgB0N,EAAW,QAAQA,EAAW,eAChElqC,IAASw8B,EAAU,iBAAiB0N,EAAW,SAASA,EAAW;AACvE,IAAArI,GAAOrF,GAAW;AAAA,MAChB,OAAOv8B;AAAA,MACP,QAAQD;AAAA,MACR,OAAOkqC,EAAW,QAAQjqC,KAAS;AAAA,MACnC,MAAMiqC,EAAW,SAASlqC,KAAU;AAAA,IAC1C,CAAK,GACDkiC,GAAS,KAAK,OAAOL,GAAO;AAAA,MAC1B,OAAOrF,EAAU;AAAA,MACjB,QAAQA,EAAU;AAAA,IACxB,GAAOwH,GAAcnC,GAAO;AAAA,MACtB,YAAYrF,EAAU;AAAA,MACtB,YAAYA,EAAU;AAAA,IAC5B,GAAOA,CAAS,CAAC,CAAC,CAAC,GACXlwB,KACF,KAAK,OAAM;AAAA,EAEd;AAAA,EACD,aAAa,WAAuB;AAClC,QAAInwC,IAAU,KAAK,SACjB+tE,IAAa,KAAK,YAChB3E,IAAcppE,EAAQ,eAAeA,EAAQ,oBAC7C2uE,IAAe,OAAO3uE,EAAQ,YAAY,KAAK,KAC/CkuE,IAAc;AAAA,MAChB,OAAOH,EAAW;AAAA,MAClB,QAAQA,EAAW;AAAA,IACzB;AACI,IAAI3E,MACE2E,EAAW,SAAS3E,IAAc2E,EAAW,QAC/CG,EAAY,SAASA,EAAY,QAAQ9E,IAEzC8E,EAAY,QAAQA,EAAY,SAAS9E,IAG7C,KAAK,cAAc8E,GACnB,KAAK,aAAa,IAAM,EAAI,GAG5BA,EAAY,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAY,OAAOA,EAAY,QAAQ,GAAGA,EAAY,QAAQ,GACpGA,EAAY,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAY,QAAQA,EAAY,SAAS,GAAGA,EAAY,SAAS,GAGxGA,EAAY,QAAQ,KAAK,IAAIA,EAAY,UAAUA,EAAY,QAAQS,CAAY,GACnFT,EAAY,SAAS,KAAK,IAAIA,EAAY,WAAWA,EAAY,SAASS,CAAY,GACtFT,EAAY,OAAOH,EAAW,QAAQA,EAAW,QAAQG,EAAY,SAAS,GAC9EA,EAAY,MAAMH,EAAW,OAAOA,EAAW,SAASG,EAAY,UAAU,GAC9EA,EAAY,UAAUA,EAAY,MAClCA,EAAY,SAASA,EAAY,KACjC,KAAK,qBAAqBxI,GAAO,CAAE,GAAEwI,CAAW;AAAA,EACjD;AAAA,EACD,cAAc,SAAsBF,GAAaC,GAAiB;AAChE,QAAIjuE,IAAU,KAAK,SACjB0tE,IAAgB,KAAK,eACrBK,IAAa,KAAK,YAClBG,IAAc,KAAK,aACnBU,IAAU,KAAK,SACbxF,IAAcppE,EAAQ;AAC1B,QAAIguE,GAAa;AACf,UAAIa,IAAkB,OAAO7uE,EAAQ,eAAe,KAAK,GACrD8uE,IAAmB,OAAO9uE,EAAQ,gBAAgB,KAAK,GACvD+uE,IAAkBH,IAAU,KAAK,IAAIlB,EAAc,OAAOK,EAAW,OAAOA,EAAW,QAAQA,EAAW,MAAML,EAAc,QAAQK,EAAW,IAAI,IAAIL,EAAc,OACvKsB,IAAmBJ,IAAU,KAAK,IAAIlB,EAAc,QAAQK,EAAW,QAAQA,EAAW,SAASA,EAAW,KAAKL,EAAc,SAASK,EAAW,GAAG,IAAIL,EAAc;AAG9K,MAAAmB,IAAkB,KAAK,IAAIA,GAAiBnB,EAAc,KAAK,GAC/DoB,IAAmB,KAAK,IAAIA,GAAkBpB,EAAc,MAAM,GAC9DtE,MACEyF,KAAmBC,IACjBA,IAAmB1F,IAAcyF,IACnCC,IAAmBD,IAAkBzF,IAErCyF,IAAkBC,IAAmB1F,IAE9ByF,IACTC,IAAmBD,IAAkBzF,IAC5B0F,MACTD,IAAkBC,IAAmB1F,IAEnC4F,IAAmB5F,IAAc2F,IACnCC,IAAmBD,IAAkB3F,IAErC2F,IAAkBC,IAAmB5F,IAKzC8E,EAAY,WAAW,KAAK,IAAIW,GAAiBE,CAAe,GAChEb,EAAY,YAAY,KAAK,IAAIY,GAAkBE,CAAgB,GACnEd,EAAY,WAAWa,GACvBb,EAAY,YAAYc;AAAA,IACzB;AACD,IAAIf,MACEW,KACFV,EAAY,UAAU,KAAK,IAAI,GAAGH,EAAW,IAAI,GACjDG,EAAY,SAAS,KAAK,IAAI,GAAGH,EAAW,GAAG,GAC/CG,EAAY,UAAU,KAAK,IAAIR,EAAc,OAAOK,EAAW,OAAOA,EAAW,KAAK,IAAIG,EAAY,OACtGA,EAAY,SAAS,KAAK,IAAIR,EAAc,QAAQK,EAAW,MAAMA,EAAW,MAAM,IAAIG,EAAY,WAEtGA,EAAY,UAAU,GACtBA,EAAY,SAAS,GACrBA,EAAY,UAAUR,EAAc,QAAQQ,EAAY,OACxDA,EAAY,SAASR,EAAc,SAASQ,EAAY;AAAA,EAG7D;AAAA,EACD,eAAe,WAAyB;AACtC,QAAIluE,IAAU,KAAK,SACjB0tE,IAAgB,KAAK,eACrBQ,IAAc,KAAK;AACrB,KAAIA,EAAY,QAAQA,EAAY,YAAYA,EAAY,QAAQA,EAAY,cAC9EA,EAAY,OAAOA,EAAY,WAE7BA,EAAY,SAASA,EAAY,aAAaA,EAAY,SAASA,EAAY,eACjFA,EAAY,MAAMA,EAAY,SAEhCA,EAAY,QAAQ,KAAK,IAAI,KAAK,IAAIA,EAAY,OAAOA,EAAY,QAAQ,GAAGA,EAAY,QAAQ,GACpGA,EAAY,SAAS,KAAK,IAAI,KAAK,IAAIA,EAAY,QAAQA,EAAY,SAAS,GAAGA,EAAY,SAAS,GACxG,KAAK,aAAa,IAAO,EAAI,GAC7BA,EAAY,OAAO,KAAK,IAAI,KAAK,IAAIA,EAAY,MAAMA,EAAY,OAAO,GAAGA,EAAY,OAAO,GAChGA,EAAY,MAAM,KAAK,IAAI,KAAK,IAAIA,EAAY,KAAKA,EAAY,MAAM,GAAGA,EAAY,MAAM,GAC5FA,EAAY,UAAUA,EAAY,MAClCA,EAAY,SAASA,EAAY,KAC7BluE,EAAQ,WAAWA,EAAQ,kBAE7BwmE,GAAQ,KAAK,MAAMpD,IAAa8K,EAAY,SAASR,EAAc,SAASQ,EAAY,UAAUR,EAAc,SAASvL,KAAcF,EAAU,GAEnJ8D,GAAS,KAAK,SAASL,GAAO;AAAA,MAC5B,OAAOwI,EAAY;AAAA,MACnB,QAAQA,EAAY;AAAA,IACrB,GAAErG,GAAc;AAAA,MACf,YAAYqG,EAAY;AAAA,MACxB,YAAYA,EAAY;AAAA,IACzB,CAAA,CAAC,CAAC,GACC,KAAK,WAAW,KAAK,WACvB,KAAK,YAAY,IAAM,EAAI,GAExB,KAAK,YACR,KAAK,OAAM;AAAA,EAEd;AAAA,EACD,QAAQ,WAAkB;AACxB,SAAK,QAAO,GACZvlC,GAAc,KAAK,SAAS86B,IAAY,KAAK,QAAO,CAAE;AAAA,EACvD;AACH,GAEIwL,KAAU;AAAA,EACZ,aAAa,WAAuB;AAClC,QAAI13D,IAAU,KAAK,SACjB23D,IAAc,KAAK,aACjBD,IAAU,KAAK,QAAQ,SACvBlvB,IAAMmvB,IAAc,KAAK,iBAAiB,KAAK,KAC/CC,IAAM53D,EAAQ,OAAO,wBACrBurC,IAAQ,SAAS,cAAc,KAAK;AAQxC,QAPIosB,MACFpsB,EAAM,cAAcosB,IAEtBpsB,EAAM,MAAM/C,GACZ+C,EAAM,MAAMqsB,GACZ,KAAK,QAAQ,YAAYrsB,CAAK,GAC9B,KAAK,eAAeA,GAChB,EAACmsB,GAGL;AAAA,UAAIG,IAAWH;AACf,MAAI,OAAOA,KAAY,WACrBG,IAAW73D,EAAQ,cAAc,iBAAiB03D,CAAO,IAChDA,EAAQ,kBACjBG,IAAW,CAACH,CAAO,IAErB,KAAK,WAAWG,GAChB3J,GAAQ2J,GAAU,SAAUl0D,GAAI;AAC9B,YAAIm0D,IAAM,SAAS,cAAc,KAAK;AAGtC,QAAA7I,GAAQtrD,GAAImoD,IAAc;AAAA,UACxB,OAAOnoD,EAAG;AAAA,UACV,QAAQA,EAAG;AAAA,UACX,MAAMA,EAAG;AAAA,QACjB,CAAO,GACGg0D,MACFG,EAAI,cAAcH,IAEpBG,EAAI,MAAMtvB,GACVsvB,EAAI,MAAMF,GAQVE,EAAI,MAAM,UAAU,2KACpBn0D,EAAG,YAAY,IACfA,EAAG,YAAYm0D,CAAG;AAAA,MACxB,CAAK;AAAA;AAAA,EACF;AAAA,EACD,cAAc,WAAwB;AACpC,IAAA5J,GAAQ,KAAK,UAAU,SAAUluD,GAAS;AACxC,UAAIpR,IAAOogE,GAAQhvD,GAAS8rD,EAAY;AACxC,MAAA0C,GAASxuD,GAAS;AAAA,QAChB,OAAOpR,EAAK;AAAA,QACZ,QAAQA,EAAK;AAAA,MACrB,CAAO,GACDoR,EAAQ,YAAYpR,EAAK,MACzBsgE,GAAWlvD,GAAS8rD,EAAY;AAAA,IACtC,CAAK;AAAA,EACF;AAAA,EACD,SAAS,WAAmB;AAC1B,QAAIhD,IAAY,KAAK,WACnB0N,IAAa,KAAK,YAClBG,IAAc,KAAK,aACjBoB,IAAepB,EAAY,OAC7BqB,IAAgBrB,EAAY,QAC1BpqC,IAAQu8B,EAAU,OACpBx8B,IAASw8B,EAAU,QACjB/7C,IAAO4pD,EAAY,OAAOH,EAAW,OAAO1N,EAAU,MACtDh8C,IAAM6pD,EAAY,MAAMH,EAAW,MAAM1N,EAAU;AACvD,IAAI,CAAC,KAAK,WAAW,KAAK,aAG1B0F,GAAS,KAAK,cAAcL,GAAO;AAAA,MACjC,OAAO5hC;AAAA,MACP,QAAQD;AAAA,IACd,GAAOgkC,GAAcnC,GAAO;AAAA,MACtB,YAAY,CAACphD;AAAA,MACb,YAAY,CAACD;AAAA,IACnB,GAAOg8C,CAAS,CAAC,CAAC,CAAC,GACfoF,GAAQ,KAAK,UAAU,SAAUluD,GAAS;AACxC,UAAIpR,IAAOogE,GAAQhvD,GAAS8rD,EAAY,GACpCmM,IAAgBrpE,EAAK,OACrBspE,IAAiBtpE,EAAK,QACtB2jE,IAAW0F,GACXzF,IAAY0F,GACZnP,IAAQ;AACZ,MAAIgP,MACFhP,IAAQkP,IAAgBF,GACxBvF,IAAYwF,IAAgBjP,IAE1BiP,KAAiBxF,IAAY0F,MAC/BnP,IAAQmP,IAAiBF,GACzBzF,IAAWwF,IAAehP,GAC1ByJ,IAAY0F,IAEd1J,GAASxuD,GAAS;AAAA,QAChB,OAAOuyD;AAAA,QACP,QAAQC;AAAA,MAChB,CAAO,GACDhE,GAASxuD,EAAQ,qBAAqB,KAAK,EAAE,CAAC,GAAGmuD,GAAO;AAAA,QACtD,OAAO5hC,IAAQw8B;AAAA,QACf,QAAQz8B,IAASy8B;AAAA,MACzB,GAASuH,GAAcnC,GAAO;AAAA,QACtB,YAAY,CAACphD,IAAOg8C;AAAA,QACpB,YAAY,CAACj8C,IAAMi8C;AAAA,MAC3B,GAASD,CAAS,CAAC,CAAC,CAAC;AAAA,IACrB,CAAK;AAAA,EACF;AACH,GAEIqP,KAAS;AAAA,EACX,MAAM,WAAgB;AACpB,QAAIn4D,IAAU,KAAK,SACjBvX,IAAU,KAAK,SACfigE,IAAU,KAAK;AACjB,IAAIvlE,GAAWsF,EAAQ,SAAS,KAC9BinE,GAAY1vD,GAASqsD,IAAkB5jE,EAAQ,SAAS,GAEtDtF,GAAWsF,EAAQ,QAAQ,KAC7BinE,GAAY1vD,GAASosD,IAAiB3jE,EAAQ,QAAQ,GAEpDtF,GAAWsF,EAAQ,OAAO,KAC5BinE,GAAY1vD,GAASmsD,IAAgB1jE,EAAQ,OAAO,GAElDtF,GAAWsF,EAAQ,IAAI,KACzBinE,GAAY1vD,GAASksD,IAAYzjE,EAAQ,IAAI,GAE3CtF,GAAWsF,EAAQ,IAAI,KACzBinE,GAAY1vD,GAASgtD,IAAYvkE,EAAQ,IAAI,GAE/CinE,GAAYhH,GAASgE,IAAoB,KAAK,cAAc,KAAK,UAAU,KAAK,IAAI,CAAC,GACjFjkE,EAAQ,YAAYA,EAAQ,eAC9BinE,GAAYhH,GAASqE,IAAa,KAAK,UAAU,KAAK,MAAM,KAAK,IAAI,GAAG;AAAA,MACtE,SAAS;AAAA,MACT,SAAS;AAAA,IACjB,CAAO,GAECtkE,EAAQ,4BACVinE,GAAYhH,GAAS4D,IAAgB,KAAK,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC,GAEjFoD,GAAY1vD,EAAQ,eAAe2sD,IAAoB,KAAK,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC,GACjG+C,GAAY1vD,EAAQ,eAAe4sD,IAAkB,KAAK,YAAY,KAAK,QAAQ,KAAK,IAAI,CAAC,GACzFnkE,EAAQ,cACVinE,GAAY,QAAQ5C,IAAc,KAAK,WAAW,KAAK,OAAO,KAAK,IAAI,CAAC;AAAA,EAE3E;AAAA,EACD,QAAQ,WAAkB;AACxB,QAAI9sD,IAAU,KAAK,SACjBvX,IAAU,KAAK,SACfigE,IAAU,KAAK;AACjB,IAAIvlE,GAAWsF,EAAQ,SAAS,KAC9B+mE,GAAexvD,GAASqsD,IAAkB5jE,EAAQ,SAAS,GAEzDtF,GAAWsF,EAAQ,QAAQ,KAC7B+mE,GAAexvD,GAASosD,IAAiB3jE,EAAQ,QAAQ,GAEvDtF,GAAWsF,EAAQ,OAAO,KAC5B+mE,GAAexvD,GAASmsD,IAAgB1jE,EAAQ,OAAO,GAErDtF,GAAWsF,EAAQ,IAAI,KACzB+mE,GAAexvD,GAASksD,IAAYzjE,EAAQ,IAAI,GAE9CtF,GAAWsF,EAAQ,IAAI,KACzB+mE,GAAexvD,GAASgtD,IAAYvkE,EAAQ,IAAI,GAElD+mE,GAAe9G,GAASgE,IAAoB,KAAK,WAAW,GACxDjkE,EAAQ,YAAYA,EAAQ,eAC9B+mE,GAAe9G,GAASqE,IAAa,KAAK,SAAS;AAAA,MACjD,SAAS;AAAA,MACT,SAAS;AAAA,IACjB,CAAO,GAECtkE,EAAQ,4BACV+mE,GAAe9G,GAAS4D,IAAgB,KAAK,UAAU,GAEzDkD,GAAexvD,EAAQ,eAAe2sD,IAAoB,KAAK,UAAU,GACzE6C,GAAexvD,EAAQ,eAAe4sD,IAAkB,KAAK,SAAS,GAClEnkE,EAAQ,cACV+mE,GAAe,QAAQ1C,IAAc,KAAK,QAAQ;AAAA,EAErD;AACH,GAEIsL,KAAW;AAAA,EACb,QAAQ,WAAkB;AACxB,QAAI,MAAK,UAGT;AAAA,UAAI3vE,IAAU,KAAK,SACjBsf,IAAY,KAAK,WACjBouD,IAAgB,KAAK,eACnBkC,IAAStwD,EAAU,cAAcouD,EAAc,OAC/CmC,IAASvwD,EAAU,eAAeouD,EAAc,QAChDpN,IAAQ,KAAK,IAAIsP,IAAS,CAAC,IAAI,KAAK,IAAIC,IAAS,CAAC,IAAID,IAASC;AAGnE,UAAIvP,MAAU,GAAG;AACf,YAAIyN,GACAG;AACJ,QAAIluE,EAAQ,YACV+tE,IAAa,KAAK,iBAClBG,IAAc,KAAK,mBAErB,KAAK,OAAM,GACPluE,EAAQ,YACV,KAAK,cAAcylE,GAAQsI,GAAY,SAAUttE,GAAGH,GAAG;AACrD,UAAAytE,EAAWztE,CAAC,IAAIG,IAAI6/D;AAAA,QACrB,CAAA,CAAC,GACF,KAAK,eAAemF,GAAQyI,GAAa,SAAUztE,GAAGH,GAAG;AACvD,UAAA4tE,EAAY5tE,CAAC,IAAIG,IAAI6/D;AAAA,QACtB,CAAA,CAAC;AAAA,MAEL;AAAA;AAAA,EACF;AAAA,EACD,UAAU,WAAoB;AAC5B,IAAI,KAAK,YAAY,KAAK,QAAQ,aAAakD,MAG/C,KAAK,YAAYyC,GAAS,KAAK,SAASpD,EAAU,IAAIU,KAAiBD,EAAc;AAAA,EACtF;AAAA,EACD,OAAO,SAAel1D,GAAO;AAC3B,QAAI0D,IAAQ,MACRwuD,IAAQ,OAAO,KAAK,QAAQ,cAAc,KAAK,KAC/ClkD,IAAQ;AACZ,IAAI,KAAK,aAGThO,EAAM,eAAc,GAGhB,MAAK,aAGT,KAAK,WAAW,IAChB,WAAW,WAAY;AACrB,MAAA0D,EAAM,WAAW;AAAA,IAClB,GAAE,EAAE,GACD1D,EAAM,SACRgO,IAAQhO,EAAM,SAAS,IAAI,IAAI,KACtBA,EAAM,aACfgO,IAAQ,CAAChO,EAAM,aAAa,MACnBA,EAAM,WACfgO,IAAQhO,EAAM,SAAS,IAAI,IAAI,KAEjC,KAAK,KAAK,CAACgO,IAAQkkD,GAAOlyD,CAAK;AAAA,EAChC;AAAA,EACD,WAAW,SAAmBA,GAAO;AACnC,QAAI0hE,IAAU1hE,EAAM,SAClB2hE,IAAS3hE,EAAM;AACjB,QAAI,OAAK,aAGLA,EAAM,SAAS,eAAeA,EAAM,SAAS,iBAAiBA,EAAM,gBAAgB;AAAA,KAExF7T,GAASu1E,CAAO,KAAKA,MAAY,KAAKv1E,GAASw1E,CAAM,KAAKA,MAAW,KAGlE3hE,EAAM,WAGT;AAAA,UAAIpO,IAAU,KAAK,SACjB+nE,IAAW,KAAK,UACdiI;AAeJ,MAdI5hE,EAAM,iBAERq3D,GAAQr3D,EAAM,gBAAgB,SAAUmgC,GAAO;AAC7C,QAAAw5B,EAASx5B,EAAM,UAAU,IAAIo6B,GAAWp6B,CAAK;AAAA,MACrD,CAAO,IAGDw5B,EAAS35D,EAAM,aAAa,CAAC,IAAIu6D,GAAWv6D,CAAK,GAE/C,OAAO,KAAK25D,CAAQ,EAAE,SAAS,KAAK/nE,EAAQ,YAAYA,EAAQ,cAClEgwE,IAAS5N,KAET4N,IAASzJ,GAAQn4D,EAAM,QAAQg1D,EAAW,GAEvCqB,GAAe,KAAKuL,CAAM,KAG3BrnC,GAAc,KAAK,SAASi7B,IAAkB;AAAA,QAChD,eAAex1D;AAAA,QACf,QAAQ4hE;AAAA,MACT,CAAA,MAAM,OAKP5hE,EAAM,eAAc,GACpB,KAAK,SAAS4hE,GACd,KAAK,WAAW,IACZA,MAAW9N,OACb,KAAK,WAAW,IAChBgE,GAAS,KAAK,SAAShD,EAAW;AAAA;AAAA,EAErC;AAAA,EACD,UAAU,SAAkB90D,GAAO;AACjC,QAAI4hE,IAAS,KAAK;AAClB,QAAI,OAAK,YAAY,CAACA,IAGtB;AAAA,UAAIjI,IAAW,KAAK;AAEpB,MADA35D,EAAM,eAAc,GAChBu6B,GAAc,KAAK,SAASg7B,IAAiB;AAAA,QAC/C,eAAev1D;AAAA,QACf,QAAQ4hE;AAAA,MACT,CAAA,MAAM,OAGH5hE,EAAM,iBACRq3D,GAAQr3D,EAAM,gBAAgB,SAAUmgC,GAAO;AAE7C,QAAAm3B,GAAOqC,EAASx5B,EAAM,UAAU,KAAK,CAAE,GAAEo6B,GAAWp6B,GAAO,EAAI,CAAC;AAAA,MACxE,CAAO,IAEDm3B,GAAOqC,EAAS35D,EAAM,aAAa,CAAC,KAAK,CAAE,GAAEu6D,GAAWv6D,GAAO,EAAI,CAAC,GAEtE,KAAK,OAAOA,CAAK;AAAA;AAAA,EAClB;AAAA,EACD,SAAS,SAAiBA,GAAO;AAC/B,QAAI,MAAK,UAGT;AAAA,UAAI4hE,IAAS,KAAK,QAChBjI,IAAW,KAAK;AAQlB,MAPI35D,EAAM,iBACRq3D,GAAQr3D,EAAM,gBAAgB,SAAUmgC,GAAO;AAC7C,eAAOw5B,EAASx5B,EAAM,UAAU;AAAA,MACxC,CAAO,IAED,OAAOw5B,EAAS35D,EAAM,aAAa,CAAC,GAEjC4hE,MAGL5hE,EAAM,eAAc,GACf,OAAO,KAAK25D,CAAQ,EAAE,WACzB,KAAK,SAAS,KAEZ,KAAK,aACP,KAAK,WAAW,IAChB91D,GAAY,KAAK,SAASixD,IAAa,KAAK,WAAW,KAAK,QAAQ,KAAK,IAE3Ev6B,GAAc,KAAK,SAAS+6B,IAAgB;AAAA,QAC1C,eAAet1D;AAAA,QACf,QAAQ4hE;AAAA,MACd,CAAK;AAAA;AAAA,EACF;AACH,GAEIC,KAAS;AAAA,EACX,QAAQ,SAAgB7hE,GAAO;AAC7B,QAAIpO,IAAU,KAAK,SACjB+tE,IAAa,KAAK,YAClBL,IAAgB,KAAK,eACrBQ,IAAc,KAAK,aACnBnG,IAAW,KAAK,UACdiI,IAAS,KAAK,QACd5G,IAAcppE,EAAQ,aACtBskB,IAAO4pD,EAAY,MACrB7pD,IAAM6pD,EAAY,KAClBpqC,IAAQoqC,EAAY,OACpBrqC,IAASqqC,EAAY,QACnBzpD,IAAQH,IAAOwf,GACfF,IAASvf,IAAMwf,GACfqsC,IAAU,GACVC,IAAS,GACThF,IAAWuC,EAAc,OACzBrC,IAAYqC,EAAc,QAC1B0C,IAAa,IACbjyD;AAGJ,IAAI,CAACirD,KAAeh7D,EAAM,aACxBg7D,IAActlC,KAASD,IAASC,IAAQD,IAAS,IAE/C,KAAK,YACPqsC,IAAUhC,EAAY,SACtBiC,IAASjC,EAAY,QACrB/C,IAAW+E,IAAU,KAAK,IAAIxC,EAAc,OAAOK,EAAW,OAAOA,EAAW,OAAOA,EAAW,KAAK,GACvG1C,IAAY8E,IAAS,KAAK,IAAIzC,EAAc,QAAQK,EAAW,QAAQA,EAAW,MAAMA,EAAW,MAAM;AAE3G,QAAI7F,IAAUH,EAAS,OAAO,KAAKA,CAAQ,EAAE,CAAC,CAAC,GAC3CliD,IAAQ;AAAA,MACV,GAAGqiD,EAAQ,OAAOA,EAAQ;AAAA,MAC1B,GAAGA,EAAQ,OAAOA,EAAQ;AAAA,IAChC,GACQvsE,IAAQ,SAAe00E,GAAM;AAC/B,cAAQA,GAAI;AAAA,QACV,KAAKhO;AACH,UAAI59C,IAAQoB,EAAM,IAAIslD,MACpBtlD,EAAM,IAAIslD,IAAW1mD;AAEvB;AAAA,QACF,KAAK69C;AACH,UAAIh+C,IAAOuB,EAAM,IAAIqqD,MACnBrqD,EAAM,IAAIqqD,IAAU5rD;AAEtB;AAAA,QACF,KAAKk+C;AACH,UAAIn+C,IAAMwB,EAAM,IAAIsqD,MAClBtqD,EAAM,IAAIsqD,IAAS9rD;AAErB;AAAA,QACF,KAAKk+C;AACH,UAAI3+B,IAAS/d,EAAM,IAAIwlD,MACrBxlD,EAAM,IAAIwlD,IAAYznC;AAExB;AAAA,MACH;AAAA,IACP;AACI,YAAQosC,GAAM;AAAA,MAEZ,KAAK/N;AACH,QAAA39C,KAAQuB,EAAM,GACdxB,KAAOwB,EAAM;AACb;AAAA,MAGF,KAAKw8C;AACH,YAAIx8C,EAAM,KAAK,MAAMpB,KAAS0mD,KAAY/B,MAAgB/kD,KAAO8rD,KAAUvsC,KAAUynC,KAAa;AAChG,UAAA+E,IAAa;AACb;AAAA,QACD;AACD,QAAAz0E,EAAM0mE,EAAW,GACjBv+B,KAASje,EAAM,GACXie,IAAQ,MACVksC,IAAS1N,IACTx+B,IAAQ,CAACA,GACTxf,KAAQwf,IAENslC,MACFvlC,IAASC,IAAQslC,GACjB/kD,MAAQ6pD,EAAY,SAASrqC,KAAU;AAEzC;AAAA,MACF,KAAK2+B;AACH,YAAI38C,EAAM,KAAK,MAAMxB,KAAO8rD,KAAU/G,MAAgB9kD,KAAQ4rD,KAAWzrD,KAAS0mD,KAAY;AAC5F,UAAAiF,IAAa;AACb;AAAA,QACD;AACD,QAAAz0E,EAAM6mE,EAAY,GAClB3+B,KAAUhe,EAAM,GAChBxB,KAAOwB,EAAM,GACTge,IAAS,MACXmsC,IAASzN,IACT1+B,IAAS,CAACA,GACVxf,KAAOwf,IAELulC,MACFtlC,IAAQD,IAASulC,GACjB9kD,MAAS4pD,EAAY,QAAQpqC,KAAS;AAExC;AAAA,MACF,KAAKw+B;AACH,YAAIz8C,EAAM,KAAK,MAAMvB,KAAQ4rD,KAAW9G,MAAgB/kD,KAAO8rD,KAAUvsC,KAAUynC,KAAa;AAC9F,UAAA+E,IAAa;AACb;AAAA,QACD;AACD,QAAAz0E,EAAM2mE,EAAW,GACjBx+B,KAASje,EAAM,GACfvB,KAAQuB,EAAM,GACVie,IAAQ,MACVksC,IAAS3N,IACTv+B,IAAQ,CAACA,GACTxf,KAAQwf,IAENslC,MACFvlC,IAASC,IAAQslC,GACjB/kD,MAAQ6pD,EAAY,SAASrqC,KAAU;AAEzC;AAAA,MACF,KAAK0+B;AACH,YAAI18C,EAAM,KAAK,MAAM+d,KAAUynC,KAAajC,MAAgB9kD,KAAQ4rD,KAAWzrD,KAAS0mD,KAAY;AAClG,UAAAiF,IAAa;AACb;AAAA,QACD;AACD,QAAAz0E,EAAM4mE,EAAY,GAClB1+B,KAAUhe,EAAM,GACZge,IAAS,MACXmsC,IAASxN,IACT3+B,IAAS,CAACA,GACVxf,KAAOwf,IAELulC,MACFtlC,IAAQD,IAASulC,GACjB9kD,MAAS4pD,EAAY,QAAQpqC,KAAS;AAExC;AAAA,MACF,KAAK2+B;AACH,YAAI2G,GAAa;AACf,cAAIvjD,EAAM,KAAK,MAAMxB,KAAO8rD,KAAU1rD,KAAS0mD,IAAW;AACxD,YAAAiF,IAAa;AACb;AAAA,UACD;AACD,UAAAz0E,EAAM6mE,EAAY,GAClB3+B,KAAUhe,EAAM,GAChBxB,KAAOwB,EAAM,GACbie,IAAQD,IAASulC;AAAA,QAC3B;AACU,UAAAztE,EAAM6mE,EAAY,GAClB7mE,EAAM0mE,EAAW,GACbx8C,EAAM,KAAK,IACTpB,IAAQ0mD,IACVrnC,KAASje,EAAM,IACNA,EAAM,KAAK,KAAKxB,KAAO8rD,MAChCC,IAAa,MAGftsC,KAASje,EAAM,GAEbA,EAAM,KAAK,IACTxB,IAAM8rD,MACRtsC,KAAUhe,EAAM,GAChBxB,KAAOwB,EAAM,MAGfge,KAAUhe,EAAM,GAChBxB,KAAOwB,EAAM;AAGjB,QAAIie,IAAQ,KAAKD,IAAS,KACxBmsC,IAASpN,IACT/+B,IAAS,CAACA,GACVC,IAAQ,CAACA,GACTzf,KAAOwf,GACPvf,KAAQwf,KACCA,IAAQ,KACjBksC,IAAStN,IACT5+B,IAAQ,CAACA,GACTxf,KAAQwf,KACCD,IAAS,MAClBmsC,IAASrN,IACT9+B,IAAS,CAACA,GACVxf,KAAOwf;AAET;AAAA,MACF,KAAK6+B;AACH,YAAI0G,GAAa;AACf,cAAIvjD,EAAM,KAAK,MAAMxB,KAAO8rD,KAAU7rD,KAAQ4rD,IAAU;AACtD,YAAAE,IAAa;AACb;AAAA,UACD;AACD,UAAAz0E,EAAM6mE,EAAY,GAClB3+B,KAAUhe,EAAM,GAChBxB,KAAOwB,EAAM,GACbie,IAAQD,IAASulC,GACjB9kD,KAAQ4pD,EAAY,QAAQpqC;AAAA,QACtC;AACU,UAAAnoC,EAAM6mE,EAAY,GAClB7mE,EAAM2mE,EAAW,GACbz8C,EAAM,KAAK,IACTvB,IAAO4rD,KACTpsC,KAASje,EAAM,GACfvB,KAAQuB,EAAM,KACLA,EAAM,KAAK,KAAKxB,KAAO8rD,MAChCC,IAAa,OAGftsC,KAASje,EAAM,GACfvB,KAAQuB,EAAM,IAEZA,EAAM,KAAK,IACTxB,IAAM8rD,MACRtsC,KAAUhe,EAAM,GAChBxB,KAAOwB,EAAM,MAGfge,KAAUhe,EAAM,GAChBxB,KAAOwB,EAAM;AAGjB,QAAIie,IAAQ,KAAKD,IAAS,KACxBmsC,IAASrN,IACT9+B,IAAS,CAACA,GACVC,IAAQ,CAACA,GACTzf,KAAOwf,GACPvf,KAAQwf,KACCA,IAAQ,KACjBksC,IAASvN,IACT3+B,IAAQ,CAACA,GACTxf,KAAQwf,KACCD,IAAS,MAClBmsC,IAASpN,IACT/+B,IAAS,CAACA,GACVxf,KAAOwf;AAET;AAAA,MACF,KAAK++B;AACH,YAAIwG,GAAa;AACf,cAAIvjD,EAAM,KAAK,MAAMvB,KAAQ4rD,KAAWtsC,KAAUynC,IAAY;AAC5D,YAAA+E,IAAa;AACb;AAAA,UACD;AACD,UAAAz0E,EAAM2mE,EAAW,GACjBx+B,KAASje,EAAM,GACfvB,KAAQuB,EAAM,GACdge,IAASC,IAAQslC;AAAA,QAC3B;AACU,UAAAztE,EAAM4mE,EAAY,GAClB5mE,EAAM2mE,EAAW,GACbz8C,EAAM,KAAK,IACTvB,IAAO4rD,KACTpsC,KAASje,EAAM,GACfvB,KAAQuB,EAAM,KACLA,EAAM,KAAK,KAAK+d,KAAUynC,MACnC+E,IAAa,OAGftsC,KAASje,EAAM,GACfvB,KAAQuB,EAAM,IAEZA,EAAM,KAAK,IACT+d,IAASynC,MACXxnC,KAAUhe,EAAM,KAGlBge,KAAUhe,EAAM;AAGpB,QAAIie,IAAQ,KAAKD,IAAS,KACxBmsC,IAASvN,IACT5+B,IAAS,CAACA,GACVC,IAAQ,CAACA,GACTzf,KAAOwf,GACPvf,KAAQwf,KACCA,IAAQ,KACjBksC,IAASrN,IACT7+B,IAAQ,CAACA,GACTxf,KAAQwf,KACCD,IAAS,MAClBmsC,IAAStN,IACT7+B,IAAS,CAACA,GACVxf,KAAOwf;AAET;AAAA,MACF,KAAK8+B;AACH,YAAIyG,GAAa;AACf,cAAIvjD,EAAM,KAAK,MAAMpB,KAAS0mD,KAAYvnC,KAAUynC,IAAY;AAC9D,YAAA+E,IAAa;AACb;AAAA,UACD;AACD,UAAAz0E,EAAM0mE,EAAW,GACjBv+B,KAASje,EAAM,GACfge,IAASC,IAAQslC;AAAA,QAC3B;AACU,UAAAztE,EAAM4mE,EAAY,GAClB5mE,EAAM0mE,EAAW,GACbx8C,EAAM,KAAK,IACTpB,IAAQ0mD,IACVrnC,KAASje,EAAM,IACNA,EAAM,KAAK,KAAK+d,KAAUynC,MACnC+E,IAAa,MAGftsC,KAASje,EAAM,GAEbA,EAAM,KAAK,IACT+d,IAASynC,MACXxnC,KAAUhe,EAAM,KAGlBge,KAAUhe,EAAM;AAGpB,QAAIie,IAAQ,KAAKD,IAAS,KACxBmsC,IAAStN,IACT7+B,IAAS,CAACA,GACVC,IAAQ,CAACA,GACTzf,KAAOwf,GACPvf,KAAQwf,KACCA,IAAQ,KACjBksC,IAASpN,IACT9+B,IAAQ,CAACA,GACTxf,KAAQwf,KACCD,IAAS,MAClBmsC,IAASvN,IACT5+B,IAAS,CAACA,GACVxf,KAAOwf;AAET;AAAA,MAGF,KAAKs+B;AACH,aAAK,KAAKt8C,EAAM,GAAGA,EAAM,CAAC,GAC1BuqD,IAAa;AACb;AAAA,MAGF,KAAKhO;AACH,aAAK,KAAK0F,GAAgBC,CAAQ,GAAG35D,CAAK,GAC1CgiE,IAAa;AACb;AAAA,MAGF,KAAKlO;AACH,YAAI,CAACr8C,EAAM,KAAK,CAACA,EAAM,GAAG;AACxB,UAAAuqD,IAAa;AACb;AAAA,QACD;AACD,QAAAjyD,IAASmpD,GAAU,KAAK,OAAO,GAC/BhjD,IAAO4jD,EAAQ,SAAS/pD,EAAO,MAC/BkG,IAAM6jD,EAAQ,SAAS/pD,EAAO,KAC9B2lB,IAAQoqC,EAAY,UACpBrqC,IAASqqC,EAAY,WACjBroD,EAAM,IAAI,IACZmqD,IAASnqD,EAAM,IAAI,IAAI88C,KAAoBF,KAClC58C,EAAM,IAAI,MACnBvB,KAAQwf,GACRksC,IAASnqD,EAAM,IAAI,IAAI+8C,KAAoBF,KAEzC78C,EAAM,IAAI,MACZxB,KAAOwf,IAIJ,KAAK,YACRsiC,GAAY,KAAK,SAASpD,EAAY,GACtC,KAAK,UAAU,IACX,KAAK,WACP,KAAK,aAAa,IAAM,EAAI;AAGhC;AAAA,IACH;AACD,IAAIqN,MACFlC,EAAY,QAAQpqC,GACpBoqC,EAAY,SAASrqC,GACrBqqC,EAAY,OAAO5pD,GACnB4pD,EAAY,MAAM7pD,GAClB,KAAK,SAAS2rD,GACd,KAAK,cAAa,IAIpBvK,GAAQsC,GAAU,SAAU3kE,GAAG;AAC7B,MAAAA,EAAE,SAASA,EAAE,MACbA,EAAE,SAASA,EAAE;AAAA,IACnB,CAAK;AAAA,EACF;AACH,GAEIktE,KAAU;AAAA;AAAA,EAEZ,MAAM,WAAgB;AACpB,WAAI,KAAK,SAAS,CAAC,KAAK,WAAW,CAAC,KAAK,aACvC,KAAK,UAAU,IACf,KAAK,aAAa,IAAM,EAAI,GACxB,KAAK,QAAQ,SACfpK,GAAS,KAAK,SAAShD,EAAW,GAEpCiD,GAAY,KAAK,SAASpD,EAAY,GACtC,KAAK,eAAe,KAAK,kBAAkB,IAEtC;AAAA,EACR;AAAA;AAAA,EAED,OAAO,WAAiB;AACtB,WAAI,KAAK,SAAS,CAAC,KAAK,aACtB,KAAK,YAAY2C,GAAO,CAAE,GAAE,KAAK,gBAAgB,GACjD,KAAK,aAAaA,GAAO,CAAE,GAAE,KAAK,iBAAiB,GACnD,KAAK,cAAcA,GAAO,CAAE,GAAE,KAAK,kBAAkB,GACrD,KAAK,aAAY,GACb,KAAK,WACP,KAAK,cAAa,IAGf;AAAA,EACR;AAAA;AAAA,EAED,OAAO,WAAiB;AACtB,WAAI,KAAK,WAAW,CAAC,KAAK,aACxBA,GAAO,KAAK,aAAa;AAAA,MACvB,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IAChB,CAAO,GACD,KAAK,UAAU,IACf,KAAK,cAAa,GAClB,KAAK,YAAY,IAAM,EAAI,GAG3B,KAAK,aAAY,GACjBS,GAAY,KAAK,SAASjD,EAAW,GACrCgD,GAAS,KAAK,SAASnD,EAAY,IAE9B;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,SAAS,SAAiBhjB,GAAK;AAC7B,QAAIwwB,IAAc,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACtF,WAAI,CAAC,KAAK,YAAYxwB,MAChB,KAAK,UACP,KAAK,QAAQ,MAAMA,IAEjBwwB,KACF,KAAK,MAAMxwB,GACX,KAAK,MAAM,MAAMA,GACb,KAAK,UACP,KAAK,aAAa,MAAMA,GACxB0lB,GAAQ,KAAK,UAAU,SAAUluD,GAAS;AACxC,MAAAA,EAAQ,qBAAqB,KAAK,EAAE,CAAC,EAAE,MAAMwoC;AAAA,IACzD,CAAW,OAGC,KAAK,UACP,KAAK,WAAW,KAElB,KAAK,QAAQ,OAAO,MACpB,KAAK,SAAQ,GACb,KAAK,KAAKA,CAAG,KAGV;AAAA,EACR;AAAA;AAAA,EAED,QAAQ,WAAkB;AACxB,WAAI,KAAK,SAAS,KAAK,aACrB,KAAK,WAAW,IAChBomB,GAAY,KAAK,SAASrD,EAAc,IAEnC;AAAA,EACR;AAAA;AAAA,EAED,SAAS,WAAmB;AAC1B,WAAI,KAAK,SAAS,CAAC,KAAK,aACtB,KAAK,WAAW,IAChBoD,GAAS,KAAK,SAASpD,EAAc,IAEhC;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,SAAS,WAAmB;AAC1B,QAAIvrD,IAAU,KAAK;AACnB,WAAKA,EAAQyqD,EAAS,KAGtBzqD,EAAQyqD,EAAS,IAAI,QACjB,KAAK,SAAS,KAAK,aACrBzqD,EAAQ,MAAM,KAAK,cAErB,KAAK,SAAQ,GACN,QAPE;AAAA,EAQV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,MAAM,SAAci5D,GAAS;AAC3B,QAAIC,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAID,GAC9EE,IAAmB,KAAK,YAC1BpsD,IAAOosD,EAAiB,MACxBrsD,IAAMqsD,EAAiB;AACzB,WAAO,KAAK,OAAOv2E,GAAYq2E,CAAO,IAAIA,IAAUlsD,IAAO,OAAOksD,CAAO,GAAGr2E,GAAYs2E,CAAO,IAAIA,IAAUpsD,IAAM,OAAOosD,CAAO,CAAC;AAAA,EACnI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,QAAQ,SAAgB31E,GAAG;AACzB,QAAI8H,IAAI,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI9H,GACxEizE,IAAa,KAAK,YAClB59B,IAAU;AACd,WAAAr1C,IAAI,OAAOA,CAAC,GACZ8H,IAAI,OAAOA,CAAC,GACR,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,QAAQ,YAC3CrI,GAASO,CAAC,MACZizE,EAAW,OAAOjzE,GAClBq1C,IAAU,KAER51C,GAASqI,CAAC,MACZmrE,EAAW,MAAMnrE,GACjButC,IAAU,KAERA,KACF,KAAK,aAAa,EAAI,IAGnB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,MAAM,SAAcmwB,GAAOqQ,GAAgB;AACzC,QAAI5C,IAAa,KAAK;AACtB,WAAAzN,IAAQ,OAAOA,CAAK,GAChBA,IAAQ,IACVA,IAAQ,KAAK,IAAIA,KAEjBA,IAAQ,IAAIA,GAEP,KAAK,OAAOyN,EAAW,QAAQzN,IAAQyN,EAAW,cAAc,MAAM4C,CAAc;AAAA,EAC5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,QAAQ,SAAgBrQ,GAAOsQ,GAAOD,GAAgB;AACpD,QAAI3wE,IAAU,KAAK,SACjB+tE,IAAa,KAAK,YAChBjqC,IAAQiqC,EAAW,OACrBlqC,IAASkqC,EAAW,QACpBrD,IAAeqD,EAAW,cAC1BpD,IAAgBoD,EAAW;AAE7B,QADAzN,IAAQ,OAAOA,CAAK,GAChBA,KAAS,KAAK,KAAK,SAAS,CAAC,KAAK,YAAYtgE,EAAQ,UAAU;AAClE,UAAI8pE,IAAWY,IAAepK,GAC1ByJ,IAAYY,IAAgBrK;AAChC,UAAI33B,GAAc,KAAK,SAAS47B,IAAY;AAAA,QAC1C,OAAOjE;AAAA,QACP,UAAUx8B,IAAQ4mC;AAAA,QAClB,eAAeiG;AAAA,MAChB,CAAA,MAAM;AACL,eAAO;AAET,UAAIA,GAAgB;AAClB,YAAI5I,IAAW,KAAK,UAChB5pD,IAASmpD,GAAU,KAAK,OAAO,GAC/BuJ,IAAS9I,KAAY,OAAO,KAAKA,CAAQ,EAAE,SAASiB,GAAkBjB,CAAQ,IAAI;AAAA,UACpF,OAAO4I,EAAe;AAAA,UACtB,OAAOA,EAAe;AAAA,QAChC;AAGQ,QAAA5C,EAAW,SAASjE,IAAWhmC,OAAW+sC,EAAO,QAAQ1yD,EAAO,OAAO4vD,EAAW,QAAQjqC,IAC1FiqC,EAAW,QAAQhE,IAAYlmC,OAAYgtC,EAAO,QAAQ1yD,EAAO,MAAM4vD,EAAW,OAAOlqC;AAAA,MAC1F;AAAM,QAAIuhC,GAAcwL,CAAK,KAAKr2E,GAASq2E,EAAM,CAAC,KAAKr2E,GAASq2E,EAAM,CAAC,KACtE7C,EAAW,SAASjE,IAAWhmC,OAAW8sC,EAAM,IAAI7C,EAAW,QAAQjqC,IACvEiqC,EAAW,QAAQhE,IAAYlmC,OAAY+sC,EAAM,IAAI7C,EAAW,OAAOlqC,OAGvEkqC,EAAW,SAASjE,IAAWhmC,KAAS,GACxCiqC,EAAW,QAAQhE,IAAYlmC,KAAU;AAE3C,MAAAkqC,EAAW,QAAQjE,GACnBiE,EAAW,SAAShE,GACpB,KAAK,aAAa,EAAI;AAAA,IACvB;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,QAAQ,SAAgBL,GAAQ;AAC9B,WAAO,KAAK,UAAU,KAAK,UAAU,UAAU,KAAK,OAAOA,CAAM,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,UAAU,SAAkBA,GAAQ;AAClC,WAAAA,IAAS,OAAOA,CAAM,GAClBnvE,GAASmvE,CAAM,KAAK,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,QAAQ,cACnE,KAAK,UAAU,SAASA,IAAS,KACjC,KAAK,aAAa,IAAM,EAAI,IAEvB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,QAAQ,SAAgBoH,GAAS;AAC/B,QAAI5sC,IAAS,KAAK,UAAU;AAC5B,WAAO,KAAK,MAAM4sC,GAASv2E,GAAS2pC,CAAM,IAAIA,IAAS,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,QAAQ,SAAgB6sC,GAAS;AAC/B,QAAI9sC,IAAS,KAAK,UAAU;AAC5B,WAAO,KAAK,MAAM1pC,GAAS0pC,CAAM,IAAIA,IAAS,GAAG8sC,CAAO;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,OAAO,SAAe9sC,GAAQ;AAC5B,QAAIC,IAAS,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAID,GAC7Eo8B,IAAY,KAAK,WACjBoO,IAAc;AAClB,WAAAxqC,IAAS,OAAOA,CAAM,GACtBC,IAAS,OAAOA,CAAM,GAClB,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,QAAQ,aAC3C3pC,GAAS0pC,CAAM,MACjBo8B,EAAU,SAASp8B,GACnBwqC,IAAc,KAEZl0E,GAAS2pC,CAAM,MACjBm8B,EAAU,SAASn8B,GACnBuqC,IAAc,KAEZA,KACF,KAAK,aAAa,IAAM,EAAI,IAGzB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,SAAS,WAAmB;AAC1B,QAAIuC,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,IAC9EhxE,IAAU,KAAK,SACjBqgE,IAAY,KAAK,WACjB0N,IAAa,KAAK,YAClBG,IAAc,KAAK,aACjB/nE;AACJ,QAAI,KAAK,SAAS,KAAK,SAAS;AAC9B,MAAAA,IAAO;AAAA,QACL,GAAG+nE,EAAY,OAAOH,EAAW;AAAA,QACjC,GAAGG,EAAY,MAAMH,EAAW;AAAA,QAChC,OAAOG,EAAY;AAAA,QACnB,QAAQA,EAAY;AAAA,MAC5B;AACM,UAAI5N,IAAQD,EAAU,QAAQA,EAAU;AAIxC,UAHAoF,GAAQt/D,GAAM,SAAU1F,GAAGH,GAAG;AAC5B,QAAA6F,EAAK7F,CAAC,IAAIG,IAAI6/D;AAAA,MACtB,CAAO,GACG0Q,GAAS;AAGX,YAAIptC,IAAS,KAAK,MAAMz9B,EAAK,IAAIA,EAAK,MAAM,GACxCse,IAAQ,KAAK,MAAMte,EAAK,IAAIA,EAAK,KAAK;AAC1C,QAAAA,EAAK,IAAI,KAAK,MAAMA,EAAK,CAAC,GAC1BA,EAAK,IAAI,KAAK,MAAMA,EAAK,CAAC,GAC1BA,EAAK,QAAQse,IAAQte,EAAK,GAC1BA,EAAK,SAASy9B,IAASz9B,EAAK;AAAA,MAC7B;AAAA,IACP;AACM,MAAAA,IAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO;AAAA,QACP,QAAQ;AAAA,MAChB;AAEI,WAAInG,EAAQ,cACVmG,EAAK,SAASk6D,EAAU,UAAU,IAEhCrgE,EAAQ,aACVmG,EAAK,SAASk6D,EAAU,UAAU,GAClCl6D,EAAK,SAASk6D,EAAU,UAAU,IAE7Bl6D;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,SAAS,SAAiBA,GAAM;AAC9B,QAAInG,IAAU,KAAK,SACjBqgE,IAAY,KAAK,WACjB0N,IAAa,KAAK,YAChBG,IAAc,CAAA;AAClB,QAAI,KAAK,SAAS,CAAC,KAAK,YAAY9I,GAAcj/D,CAAI,GAAG;AACvD,UAAIsoE,IAAc;AAClB,MAAIzuE,EAAQ,aACNzF,GAAS4L,EAAK,MAAM,KAAKA,EAAK,WAAWk6D,EAAU,WACrDA,EAAU,SAASl6D,EAAK,QACxBsoE,IAAc,KAGdzuE,EAAQ,aACNzF,GAAS4L,EAAK,MAAM,KAAKA,EAAK,WAAWk6D,EAAU,WACrDA,EAAU,SAASl6D,EAAK,QACxBsoE,IAAc,KAEZl0E,GAAS4L,EAAK,MAAM,KAAKA,EAAK,WAAWk6D,EAAU,WACrDA,EAAU,SAASl6D,EAAK,QACxBsoE,IAAc,MAGdA,KACF,KAAK,aAAa,IAAM,EAAI;AAE9B,UAAInO,IAAQD,EAAU,QAAQA,EAAU;AACxC,MAAI9lE,GAAS4L,EAAK,CAAC,MACjB+nE,EAAY,OAAO/nE,EAAK,IAAIm6D,IAAQyN,EAAW,OAE7CxzE,GAAS4L,EAAK,CAAC,MACjB+nE,EAAY,MAAM/nE,EAAK,IAAIm6D,IAAQyN,EAAW,MAE5CxzE,GAAS4L,EAAK,KAAK,MACrB+nE,EAAY,QAAQ/nE,EAAK,QAAQm6D,IAE/B/lE,GAAS4L,EAAK,MAAM,MACtB+nE,EAAY,SAAS/nE,EAAK,SAASm6D,IAErC,KAAK,eAAe4N,CAAW;AAAA,IAChC;AACD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,kBAAkB,WAA4B;AAC5C,WAAO,KAAK,QAAQxI,GAAO,CAAE,GAAE,KAAK,aAAa,IAAI;EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,cAAc,WAAwB;AACpC,WAAO,KAAK,QAAQA,GAAO,CAAE,GAAE,KAAK,SAAS,IAAI;EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,eAAe,WAAyB;AACtC,QAAIqI,IAAa,KAAK,YAClB5nE,IAAO,CAAA;AACX,WAAI,KAAK,SACPs/D,GAAQ,CAAC,QAAQ,OAAO,SAAS,UAAU,gBAAgB,eAAe,GAAG,SAAUhlE,GAAG;AACxF,MAAA0F,EAAK1F,CAAC,IAAIstE,EAAWttE,CAAC;AAAA,IAC9B,CAAO,GAEI0F;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,eAAe,SAAuBA,GAAM;AAC1C,QAAI4nE,IAAa,KAAK,YAClB3E,IAAc2E,EAAW;AAC7B,WAAI,KAAK,SAAS,CAAC,KAAK,YAAY3I,GAAcj/D,CAAI,MAChD5L,GAAS4L,EAAK,IAAI,MACpB4nE,EAAW,OAAO5nE,EAAK,OAErB5L,GAAS4L,EAAK,GAAG,MACnB4nE,EAAW,MAAM5nE,EAAK,MAEpB5L,GAAS4L,EAAK,KAAK,KACrB4nE,EAAW,QAAQ5nE,EAAK,OACxB4nE,EAAW,SAAS5nE,EAAK,QAAQijE,KACxB7uE,GAAS4L,EAAK,MAAM,MAC7B4nE,EAAW,SAAS5nE,EAAK,QACzB4nE,EAAW,QAAQ5nE,EAAK,SAASijE,IAEnC,KAAK,aAAa,EAAI,IAEjB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,gBAAgB,WAA0B;AACxC,QAAI8E,IAAc,KAAK,aACnB/nE;AACJ,WAAI,KAAK,SAAS,KAAK,YACrBA,IAAO;AAAA,MACL,MAAM+nE,EAAY;AAAA,MAClB,KAAKA,EAAY;AAAA,MACjB,OAAOA,EAAY;AAAA,MACnB,QAAQA,EAAY;AAAA,IAC5B,IAEW/nE,KAAQ,CAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,gBAAgB,SAAwBA,GAAM;AAC5C,QAAI+nE,IAAc,KAAK,aACnB9E,IAAc,KAAK,QAAQ,aAC3B6H,GACAC;AACJ,WAAI,KAAK,SAAS,KAAK,WAAW,CAAC,KAAK,YAAY9L,GAAcj/D,CAAI,MAChE5L,GAAS4L,EAAK,IAAI,MACpB+nE,EAAY,OAAO/nE,EAAK,OAEtB5L,GAAS4L,EAAK,GAAG,MACnB+nE,EAAY,MAAM/nE,EAAK,MAErB5L,GAAS4L,EAAK,KAAK,KAAKA,EAAK,UAAU+nE,EAAY,UACrD+C,IAAe,IACf/C,EAAY,QAAQ/nE,EAAK,QAEvB5L,GAAS4L,EAAK,MAAM,KAAKA,EAAK,WAAW+nE,EAAY,WACvDgD,IAAgB,IAChBhD,EAAY,SAAS/nE,EAAK,SAExBijE,MACE6H,IACF/C,EAAY,SAASA,EAAY,QAAQ9E,IAChC8H,MACThD,EAAY,QAAQA,EAAY,SAAS9E,KAG7C,KAAK,cAAa,IAEb;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,kBAAkB,WAA4B;AAC5C,QAAIppE,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA;AAClF,QAAI,CAAC,KAAK,SAAS,CAAC,OAAO;AACzB,aAAO;AAET,QAAI+tE,IAAa,KAAK,YAClBh3D,IAASizD,GAAgB,KAAK,OAAO,KAAK,WAAW+D,GAAY/tE,CAAO;AAG5E,QAAI,CAAC,KAAK;AACR,aAAO+W;AAET,QAAIo6D,IAAgB,KAAK,QAAQnxE,EAAQ,OAAO,GAC9CoxE,IAAWD,EAAc,GACzBE,IAAWF,EAAc,GACzBG,IAAeH,EAAc,OAC7BI,IAAgBJ,EAAc,QAC5B7Q,IAAQvpD,EAAO,QAAQ,KAAK,MAAMg3D,EAAW,YAAY;AAC7D,IAAIzN,MAAU,MACZ8Q,KAAY9Q,GACZ+Q,KAAY/Q,GACZgR,KAAgBhR,GAChBiR,KAAiBjR;AAEnB,QAAI8I,IAAckI,IAAeC,GAC7B9vB,IAAW0nB,GAAiB;AAAA,MAC9B,aAAaC;AAAA,MACb,OAAOppE,EAAQ,YAAY;AAAA,MAC3B,QAAQA,EAAQ,aAAa;AAAA,IACnC,CAAK,GACG4rE,IAAWzC,GAAiB;AAAA,MAC9B,aAAaC;AAAA,MACb,OAAOppE,EAAQ,YAAY;AAAA,MAC3B,QAAQA,EAAQ,aAAa;AAAA,IAC9B,GAAE,OAAO,GACNsuE,IAAoBnF,GAAiB;AAAA,MACrC,aAAaC;AAAA,MACb,OAAOppE,EAAQ,UAAUsgE,MAAU,IAAIvpD,EAAO,QAAQu6D;AAAA,MACtD,QAAQtxE,EAAQ,WAAWsgE,MAAU,IAAIvpD,EAAO,SAASw6D;AAAA,IACjE,CAAO,GACDztC,IAAQwqC,EAAkB,OAC1BzqC,IAASyqC,EAAkB;AAC7B,IAAAxqC,IAAQ,KAAK,IAAI2d,EAAS,OAAO,KAAK,IAAImqB,EAAS,OAAO9nC,CAAK,CAAC,GAChED,IAAS,KAAK,IAAI4d,EAAS,QAAQ,KAAK,IAAImqB,EAAS,QAAQ/nC,CAAM,CAAC;AACpE,QAAI6nC,IAAS,SAAS,cAAc,QAAQ,GACxCC,IAAUD,EAAO,WAAW,IAAI;AACpC,IAAAA,EAAO,QAAQ9F,GAAuB9hC,CAAK,GAC3C4nC,EAAO,SAAS9F,GAAuB/hC,CAAM,GAC7C8nC,EAAQ,YAAY3rE,EAAQ,aAAa,eACzC2rE,EAAQ,SAAS,GAAG,GAAG7nC,GAAOD,CAAM;AACpC,QAAI2tC,IAAwBxxE,EAAQ,uBAClC+qE,IAAwByG,MAA0B,SAAS,KAAOA,GAClEvG,IAAwBjrE,EAAQ;AAClC,IAAA2rE,EAAQ,wBAAwBZ,GAC5BE,MACFU,EAAQ,wBAAwBV;AAIlC,QAAIwG,IAAc16D,EAAO,OACrB26D,IAAe36D,EAAO,QAGtB46D,IAAOP,GACPQ,IAAOP,GACPQ,GACAC,IAGAC,GACAC,GACAC,GACAC;AACJ,IAAIP,KAAQ,CAACL,KAAgBK,IAAOF,KAClCE,IAAO,GACPE,IAAW,GACXE,IAAO,GACPE,IAAW,KACFN,KAAQ,KACjBI,IAAO,CAACJ,GACRA,IAAO,GACPE,IAAW,KAAK,IAAIJ,GAAaH,IAAeK,CAAI,GACpDM,IAAWJ,KACFF,KAAQF,MACjBM,IAAO,GACPF,IAAW,KAAK,IAAIP,GAAcG,IAAcE,CAAI,GACpDM,IAAWJ,IAETA,KAAY,KAAKD,KAAQ,CAACL,KAAiBK,IAAOF,KACpDE,IAAO,GACPE,KAAY,GACZE,IAAO,GACPE,IAAY,KACHN,KAAQ,KACjBI,IAAO,CAACJ,GACRA,IAAO,GACPE,KAAY,KAAK,IAAIJ,GAAcH,IAAgBK,CAAI,GACvDM,IAAYJ,MACHF,KAAQF,MACjBM,IAAO,GACPF,KAAY,KAAK,IAAIP,GAAeG,IAAeE,CAAI,GACvDM,IAAYJ;AAEd,QAAIx1E,IAAS,CAACq1E,GAAMC,GAAMC,GAAUC,EAAS;AAG7C,QAAIG,IAAW,KAAKC,IAAY,GAAG;AACjC,UAAIC,IAAQruC,IAAQwtC;AACpB,MAAAh1E,EAAO,KAAKy1E,IAAOI,GAAOH,IAAOG,GAAOF,IAAWE,GAAOD,IAAYC,CAAK;AAAA,IAC5E;AAID,WAAAxG,EAAQ,UAAU,MAAMA,GAAS,CAAC50D,CAAM,EAAE,OAAOiqD,GAAmB1kE,EAAO,IAAI,SAAU2vE,GAAO;AAC9F,aAAO,KAAK,MAAMrG,GAAuBqG,CAAK,CAAC;AAAA,IACrD,CAAK,CAAC,CAAC,CAAC,GACGP;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,gBAAgB,SAAwBtC,GAAa;AACnD,QAAIppE,IAAU,KAAK;AACnB,WAAI,CAAC,KAAK,YAAY,CAAC7F,GAAYivE,CAAW,MAE5CppE,EAAQ,cAAc,KAAK,IAAI,GAAGopE,CAAW,KAAK,KAC9C,KAAK,UACP,KAAK,YAAW,GACZ,KAAK,WACP,KAAK,cAAa,KAIjB;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,aAAa,SAAqBgJ,GAAM;AACtC,QAAIpyE,IAAU,KAAK,SACjBqyE,IAAU,KAAK,SACfC,IAAO,KAAK;AACd,QAAI,KAAK,SAAS,CAAC,KAAK,UAAU;AAChC,UAAIC,IAAYH,MAAS9O,IACrBkP,IAAUxyE,EAAQ,WAAWoyE,MAAS7O;AAC1C,MAAA6O,IAAOG,KAAaC,IAAUJ,IAAO5O,IACrCxjE,EAAQ,WAAWoyE,GACnB5L,GAAQ6L,GAASjP,IAAagP,CAAI,GAClCngE,GAAYogE,GAASxP,IAAY0P,CAAS,GAC1CtgE,GAAYogE,GAASlP,IAAYqP,CAAO,GACnCxyE,EAAQ,mBAEXwmE,GAAQ8L,GAAMlP,IAAagP,CAAI,GAC/BngE,GAAYqgE,GAAMzP,IAAY0P,CAAS,GACvCtgE,GAAYqgE,GAAMnP,IAAYqP,CAAO;AAAA,IAExC;AACD,WAAO;AAAA,EACR;AACH,GAEIC,KAAiB5Q,GAAO,SACxB6Q,KAAuB,2BAAY;AAMrC,WAASA,EAAQn7D,GAAS;AACxB,QAAIvX,IAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA;AAElF,QADAumD,GAAgB,MAAMmsB,CAAO,GACzB,CAACn7D,KAAW,CAACqtD,GAAgB,KAAKrtD,EAAQ,OAAO;AACnD,YAAM,IAAI,MAAM,0EAA0E;AAE5F,SAAK,UAAUA,GACf,KAAK,UAAUmuD,GAAO,CAAE,GAAEX,IAAUK,GAAcplE,CAAO,KAAKA,CAAO,GACrE,KAAK,UAAU,IACf,KAAK,WAAW,IAChB,KAAK,WAAW,IAChB,KAAK,QAAQ,IACb,KAAK,YAAY,IACjB,KAAK,WAAW,IAChB,KAAK,QAAQ,IACb,KAAK,SAAS,IACd,KAAK,KAAI;AAAA,EACV;AACD,SAAAotD,GAAaslB,GAAS,CAAC;AAAA,IACrB,KAAK;AAAA,IACL,OAAO,WAAgB;AACrB,UAAIn7D,IAAU,KAAK,SACf2rB,IAAU3rB,EAAQ,QAAQ,YAAW,GACrCwoC;AACJ,UAAI,CAAAxoC,EAAQyqD,EAAS,GAIrB;AAAA,YADAzqD,EAAQyqD,EAAS,IAAI,MACjB9+B,MAAY,OAAO;AAQrB,cAPA,KAAK,QAAQ,IAGb6c,IAAMxoC,EAAQ,aAAa,KAAK,KAAK,IACrC,KAAK,cAAcwoC,GAGf,CAACA;AACH;AAIF,UAAAA,IAAMxoC,EAAQ;AAAA,QACf;AAAM,UAAI2rB,MAAY,YAAY,OAAO,sBACxC6c,IAAMxoC,EAAQ;AAEhB,aAAK,KAAKwoC,CAAG;AAAA;AAAA,IACd;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,SAAcA,GAAK;AACxB,UAAIjuC,IAAQ;AACZ,UAAKiuC,GAGL;AAAA,aAAK,MAAMA,GACX,KAAK,YAAY;AACjB,YAAIxoC,IAAU,KAAK,SACjBvX,IAAU,KAAK;AAMjB,YALI,CAACA,EAAQ,aAAa,CAACA,EAAQ,aACjCA,EAAQ,mBAAmB,KAIzB,CAACA,EAAQ,oBAAoB,CAAC,OAAO,aAAa;AACpD,eAAK,MAAK;AACV;AAAA,QACD;AAGD,YAAI0kE,GAAgB,KAAK3kB,CAAG,GAAG;AAE7B,UAAI4kB,GAAqB,KAAK5kB,CAAG,IAC/B,KAAK,KAAKusB,GAAqBvsB,CAAG,CAAC,IAInC,KAAK,MAAK;AAEZ;AAAA,QACD;AAID,YAAI4yB,IAAM,IAAI,kBACV/rC,IAAQ,KAAK,MAAM,KAAK,IAAI;AAChC,aAAK,YAAY,IACjB,KAAK,MAAM+rC,GAMXA,EAAI,UAAU/rC,GACd+rC,EAAI,UAAU/rC,GACd+rC,EAAI,YAAY/rC,GAChB+rC,EAAI,aAAa,WAAY;AAE3B,UAAIA,EAAI,kBAAkB,cAAc,MAAMnO,MAC5CmO,EAAI,MAAK;AAAA,QAEnB,GACMA,EAAI,SAAS,WAAY;AACvB,UAAA7gE,EAAM,KAAK6gE,EAAI,QAAQ;AAAA,QAC/B,GACMA,EAAI,YAAY,WAAY;AAC1B,UAAA7gE,EAAM,YAAY,IAClBA,EAAM,MAAM;AAAA,QACpB,GAGU9R,EAAQ,oBAAoB0nE,GAAiB3nB,CAAG,KAAKxoC,EAAQ,gBAC/DwoC,IAAM6nB,GAAa7nB,CAAG,IAIxB4yB,EAAI,KAAK,OAAO5yB,GAAK,EAAI,GACzB4yB,EAAI,eAAe,eACnBA,EAAI,kBAAkBp7D,EAAQ,gBAAgB,mBAC9Co7D,EAAI,KAAI;AAAA;AAAA,IACT;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,SAAcnqB,GAAa;AAChC,UAAIxoD,IAAU,KAAK,SACjBqgE,IAAY,KAAK,WAIfyM,IAAcD,GAAuBrkB,CAAW,GAChD+W,IAAS,GACTt7B,IAAS,GACTC,IAAS;AACb,UAAI4oC,IAAc,GAAG;AAEnB,aAAK,MAAMH,GAAqBnkB,GAAagc,EAAc;AAC3D,YAAIoO,IAAoBpF,GAAiBV,CAAW;AACpD,QAAAvN,IAASqT,EAAkB,QAC3B3uC,IAAS2uC,EAAkB,QAC3B1uC,IAAS0uC,EAAkB;AAAA,MAC5B;AACD,MAAI5yE,EAAQ,cACVqgE,EAAU,SAASd,IAEjBv/D,EAAQ,aACVqgE,EAAU,SAASp8B,GACnBo8B,EAAU,SAASn8B,IAErB,KAAK,MAAK;AAAA,IACX;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAiB;AACtB,UAAI3sB,IAAU,KAAK,SACjBwoC,IAAM,KAAK,KACTmvB,IAAc33D,EAAQ,aACtBs7D,IAAiB9yB;AACrB,MAAI,KAAK,QAAQ,oBAAoB2nB,GAAiB3nB,CAAG,MAClDmvB,MACHA,IAAc,cAIhB2D,IAAiBjL,GAAa7nB,CAAG,IAEnC,KAAK,cAAcmvB,GACnB,KAAK,iBAAiB2D;AACtB,UAAI/vB,IAAQ,SAAS,cAAc,KAAK;AACxC,MAAIosB,MACFpsB,EAAM,cAAcosB,IAEtBpsB,EAAM,MAAM+vB,KAAkB9yB,GAC9B+C,EAAM,MAAMvrC,EAAQ,OAAO,qBAC3B,KAAK,QAAQurC,GACbA,EAAM,SAAS,KAAK,MAAM,KAAK,IAAI,GACnCA,EAAM,UAAU,KAAK,KAAK,KAAK,IAAI,GACnCojB,GAASpjB,GAAOkgB,EAAU,GAC1BzrD,EAAQ,WAAW,aAAaurC,GAAOvrC,EAAQ,WAAW;AAAA,IAC3D;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAiB;AACtB,UAAIu7D,IAAS,MACThwB,IAAQ,KAAK;AACjB,MAAAA,EAAM,SAAS,MACfA,EAAM,UAAU,MAChB,KAAK,SAAS;AAId,UAAIiwB,IAAclR,GAAO,aAAa,sCAAsC,KAAKA,GAAO,UAAU,SAAS,GACvGxY,IAAO,SAAcqhB,GAAcC,GAAe;AACpD,QAAAjF,GAAOoN,EAAO,WAAW;AAAA,UACvB,cAAcpI;AAAA,UACd,eAAeC;AAAA,UACf,aAAaD,IAAeC;AAAA,QACtC,CAAS,GACDmI,EAAO,mBAAmBpN,GAAO,CAAE,GAAEoN,EAAO,SAAS,GACrDA,EAAO,SAAS,IAChBA,EAAO,QAAQ,IACfA,EAAO,MAAK;AAAA,MACpB;AAGM,UAAIhwB,EAAM,gBAAgB,CAACiwB,GAAa;AACtC,QAAA1pB,EAAKvG,EAAM,cAAcA,EAAM,aAAa;AAC5C;AAAA,MACD;AACD,UAAIkwB,IAAc,SAAS,cAAc,KAAK,GAC1CC,IAAO,SAAS,QAAQ,SAAS;AACrC,WAAK,cAAcD,GACnBA,EAAY,SAAS,WAAY;AAC/B,QAAA3pB,EAAK2pB,EAAY,OAAOA,EAAY,MAAM,GACrCD,KACHE,EAAK,YAAYD,CAAW;AAAA,MAEtC,GACMA,EAAY,MAAMlwB,EAAM,KAInBiwB,MACHC,EAAY,MAAM,UAAU,wJAC5BC,EAAK,YAAYD,CAAW;AAAA,IAE/B;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAgB;AACrB,UAAIlwB,IAAQ,KAAK;AACjB,MAAAA,EAAM,SAAS,MACfA,EAAM,UAAU,MAChBA,EAAM,WAAW,YAAYA,CAAK,GAClC,KAAK,QAAQ;AAAA,IACd;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAiB;AACtB,UAAI,GAAC,KAAK,SAAS,KAAK,QAGxB;AAAA,YAAIvrC,IAAU,KAAK,SACjBvX,IAAU,KAAK,SACf8iD,IAAQ,KAAK,OAGXxjC,IAAY/H,EAAQ,YACpBlb,IAAW,SAAS,cAAc,KAAK;AAC3C,QAAAA,EAAS,YAAY2oE;AACrB,YAAI/E,IAAU5jE,EAAS,cAAc,IAAI,OAAO2lE,IAAW,YAAY,CAAC,GACpE0J,IAASzL,EAAQ,cAAc,IAAI,OAAO+B,IAAW,SAAS,CAAC,GAC/DqQ,IAAUpS,EAAQ,cAAc,IAAI,OAAO+B,IAAW,WAAW,CAAC,GAClEkR,IAAUjT,EAAQ,cAAc,IAAI,OAAO+B,IAAW,WAAW,CAAC,GAClEsQ,IAAOY,EAAQ,cAAc,IAAI,OAAOlR,IAAW,OAAO,CAAC;AAC/D,aAAK,YAAY1iD,GACjB,KAAK,UAAU2gD,GACf,KAAK,SAASyL,GACd,KAAK,UAAU2G,GACf,KAAK,UAAUa,GACf,KAAK,UAAUjT,EAAQ,cAAc,IAAI,OAAO+B,IAAW,WAAW,CAAC,GACvE,KAAK,OAAOsQ,GACZ5G,EAAO,YAAY5oB,CAAK,GAGxBojB,GAAS3uD,GAASwrD,EAAY,GAG9BzjD,EAAU,aAAa2gD,GAAS1oD,EAAQ,WAAW,GAGnD4uD,GAAYrjB,GAAOkgB,EAAU,GAC7B,KAAK,YAAW,GAChB,KAAK,KAAI,GACThjE,EAAQ,qBAAqB,KAAK,IAAI,GAAGA,EAAQ,kBAAkB,KAAK,KACxEA,EAAQ,cAAc,KAAK,IAAI,GAAGA,EAAQ,WAAW,KAAK,KAC1DA,EAAQ,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAMA,EAAQ,QAAQ,CAAC,CAAC,KAAK,GAC7EkmE,GAASgN,GAASnQ,EAAY,GACzB/iE,EAAQ,UACXkmE,GAASgN,EAAQ,uBAAuB,GAAG,OAAOlR,IAAW,SAAS,CAAC,GAAGe,EAAY,GAEnF/iE,EAAQ,UACXkmE,GAASgN,EAAQ,uBAAuB,GAAG,OAAOlR,IAAW,SAAS,CAAC,GAAGe,EAAY,GAEpF/iE,EAAQ,cACVkmE,GAASjG,GAAS,GAAG,OAAO+B,IAAW,KAAK,CAAC,GAE1ChiE,EAAQ,aACXkmE,GAASoM,GAAMrP,EAAe,GAE5BjjE,EAAQ,mBACVkmE,GAASoM,GAAMnP,EAAU,GACzBqD,GAAQ8L,GAAMlP,IAAanB,EAAU,IAElCjiE,EAAQ,qBACXkmE,GAASgN,EAAQ,uBAAuB,GAAG,OAAOlR,IAAW,OAAO,CAAC,GAAGe,EAAY,GACpFmD,GAASgN,EAAQ,uBAAuB,GAAG,OAAOlR,IAAW,QAAQ,CAAC,GAAGe,EAAY,IAEvF,KAAK,OAAM,GACX,KAAK,QAAQ,IACb,KAAK,YAAY/iE,EAAQ,QAAQ,GAC7BA,EAAQ,YACV,KAAK,KAAI,GAEX,KAAK,QAAQA,EAAQ,IAAI,GACrBtF,GAAWsF,EAAQ,KAAK,KAC1BinE,GAAY1vD,GAAS6sD,IAAapkE,EAAQ,OAAO;AAAA,UAC/C,MAAM;AAAA,QAChB,CAAS,GAEH2oC,GAAcpxB,GAAS6sD,EAAW;AAAA;AAAA,IACnC;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAmB;AACxB,UAAK,KAAK,OAGV;AAAA,aAAK,QAAQ,IACb,KAAK,OAAM,GACX,KAAK,aAAY;AACjB,YAAI+O,IAAa,KAAK,QAAQ;AAC9B,QAAIA,KACFA,EAAW,YAAY,KAAK,OAAO,GAErChN,GAAY,KAAK,SAASpD,EAAY;AAAA;AAAA,IACvC;AAAA,EACL,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,WAAoB;AACzB,MAAI,KAAK,SACP,KAAK,QAAO,GACZ,KAAK,QAAQ,IACb,KAAK,UAAU,MACN,KAAK,UACd,KAAK,YAAY,SAAS,MAC1B,KAAK,SAAS,IACd,KAAK,QAAQ,MACJ,KAAK,aACd,KAAK,IAAI,UAAU,MACnB,KAAK,IAAI,WACA,KAAK,SACd,KAAK,KAAI;AAAA,IAEZ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMF,CAAA,GAAG,CAAC;AAAA,IACH,KAAK;AAAA,IACL,OAAO,WAAsB;AAC3B,oBAAO,UAAU0P,IACVC;AAAA,IACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAML,GAAK;AAAA,IACD,KAAK;AAAA,IACL,OAAO,SAAqB1yE,GAAS;AACnC,MAAA0lE,GAAOX,IAAUK,GAAcplE,CAAO,KAAKA,CAAO;AAAA,IACnD;AAAA,EACF,CAAA,CAAC,GACK0yE;AACT;AACAhN,GAAOgN,GAAQ,WAAWjF,IAAQwB,IAASS,IAAQC,IAAUM,IAAQK,EAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzrG5E,UAAM52E,IAAQC,GAgGRy5E,IAAkBzzE,EAAyC,IAAI,GAC/D0zE,IAAQ1zE,EAAiD,IAAI,GAC7DkuB,IAAUluB,EAAI,EAAI,GAElB2zE,IAAS,MAAM;;AACnB,OAAAv1E,IAAAq1E,EAAgB,UAAhB,QAAAr1E,EAAuB;AAAA,IAAO,GAG1Bw1E,IAAU,MAAM;;AACpB,OAAAx1E,IAAAq1E,EAAgB,UAAhB,QAAAr1E,EAAuB;AAAA,IAAQ,GAG3Bua,IAAU,MAAM;;AACpB,OAAAva,IAAAq1E,EAAgB,UAAhB,QAAAr1E,EAAuB;AAAA,IAAQ;AAepB,WAAA6xB,EAAA;AAAA,MACX,QAAA0jD;AAAA,MACA,SAAAC;AAAA,MACA,SAAAj7D;AAAA,MACA,cAhBmB,MAAM;;AAClB,gBAAAva,IAAAq1E,EAAgB,UAAhB,gBAAAr1E,EAAuB;AAAA,MAAa;AAAA,MAgB3C,SAbc,MAAM;;AACb,gBAAAA,IAAAq1E,EAAgB,UAAhB,gBAAAr1E,EAAuB;AAAA,MAAQ;AAAA,MAatC,SAVc,CAACoI,MAAiC;;AACzC,gBAAApI,IAAAq1E,EAAgB,UAAhB,gBAAAr1E,EAAuB,QAAQoI;AAAA,MAAI;AAAA,IAS1C,CACD,GAEDgD,GAAU,MAAM;AAEd,YAAM,EAAE,gBAAAqqE,GAAgB,KAAArtC,GAAK,KAAAgpC,GAAK,UAAAsE,GAAU,GAAGttE,EAAS,IAAAzM,GAClDg6E,IAAevtE,GACfnG,IAA+B,CAAA;AACrC,iBAAWvD,KAAO0J;AACZ,QAAA,OAAO,UAAU,eAAe,KAAKutE,GAAcj3E,CAAG,KAAKi3E,EAAaj3E,CAAG,MAAM,WAC3EuD,EAAAvD,CAAG,IAAIi3E,EAAaj3E,CAAG;AAGnC,MAAA2rB,GAAS,MAAM;AACb,QAAK9tB,GAAO+4E,EAAM,KAAK,MACb,QAAA,IAAIA,EAAM,KAAK,GACvBD,EAAgB,QAAQ,IAAIV,GAAQW,EAAM,OAAcrzE,CAAO,GAC/D,WAAW,MAAM;AACf,UAAA6tB,EAAQ,QAAQ;AAAA,WACf,GAAI;AAAA,MACT,CACD;AAAA,IAAA,CACF,GAED8lD,GAAY,MAAM;AACR,MAAAr7D;IAAA,CACT;;;;;;;;;;;;;;;;;ICvJKs7D,KAAyB,KAAK;;;AAFpC,UAAM,EAAE,eAAA/rE,GAAe,mBAAAkB,EAAkB,IAAI/B,GAAU,GAGjD6sE,IAAwB,EAAE,UAAU,UAAU,WAAW,sBAAsB,GAE/EjU,IAAgBP,MAEhB,EAAE,WAAA9lC,MAAc3C,MAEhBqpC,IAAUtgE,EAAS,IAAI,GAEvBm0E,IAAW/5E,EAAS,MAAM;;AAC9B,aAAI6lE,EAAc,eAAa7hE,IAAA6hE,EAAc,UAAU,UAAxB,QAAA7hE,EAA+B,gBACrD6hE,EAAc,UAAU,MAAM,aAAa,MAE7C;AAAA,IAAA,CACR,GAEKmU,IAAgB,MAAM;AAC1B,MAAI9T,EAAQ,SACVA,EAAQ,MAAM;IAChB,GAGI+T,IAAiB,MAAM;AAC3B,MAAI/T,EAAQ,SACVA,EAAQ,MAAM;IAChB,GAGIgU,IAAwB,MAAM;AAClC,UAAIhU,EAAQ,SAASL,EAAc,OAAOA,EAAc,WAAW;AACnD,QAAAmU;AACd,cAAM5tE,IAAO65D;AAAA,UACXC,EAAQ;AAAA,UACRL,EAAc;AAAA,UACdA,EAAc,UAAU,gBAAgB;AAAA,UACxCA,EAAc,UAAU,gBAAgB;AAAA,QAAA;AAElC,QAAAK,EAAA,MAAM,QAAQ95D,CAAI,GACX6tE;MACjB;AAAA,IAAA,GAGIE,IAAU,YAAY;AAC1B,UAAIjU,EAAQ,SAASL,EAAc,OAAOA,EAAc,WAAW;AACjE,cAAMN,IAAMiB;AAAA,UACVN,EAAQ;AAAA,UACRL,EAAc;AAAA,UACdA,EAAc,UAAU,gBAAgB;AAAA,UACxCA,EAAc,UAAU,gBAAgB;AAAA,QAAA;AAEtC,YAAA;AACF,UAAAA,EAAc,WAAW,GACzB,MAAMF,GAAUnmC,GAAW+lC,EAAI,IAAIA,CAAG,GACtCz3D,EAAc,SAAS,GACvB,WAAW,MAAM;AACf,YAAA+3D,EAAc,uBAAuB;AAAA,aACpC,GAAI;AAAA,iBACAj7D,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAAi7D,EAAc,WAAW;AAAA,QAC3B;AAAA,MACF;AAAA,IAAA,GAGIuU,IAAe,MAAM;AACH,MAAAF,KACRF;IAAA,GAGVK,IAAa,MAAM;AACf,MAAAF;IAAA,GAGJG,IAAct6E,EAAS,MACvB,GAAA6lE,EAAc,aAAakU,EAAS,MAAM,SAAS,KAAK,CAAClU,EAAc,OAI5E;AAED,WAAA+T,GAAY,MAAM;AAChB,MAAI1T,EAAQ,UACVA,EAAQ,MAAM,WACdA,EAAQ,QAAQ;AAAA,IAClB,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvEK,UAAA,EAAE,GAAArmE,MAAMC,MAER,EAAE,cAAAw2B,MAAiBC,MAEnBwuC,IAAmBxF,MACnB,EAAE,OAAA/jC,GAAO,QAAA7F,GAAQ,WAAA+pC,GAAW,SAAA5rC,MAAYmP,GAAY8hC,CAAgB,GAEpEnvC,IAAc,MAAM;AACxB,MAAAmvC,EAAiB,SAAS,IAAI,GAC9BpvC,EAAO,QAAQ;AAAA,IAAA,GAGX4kD,IAAU30E,EAAI,EAAI,GAElBo/B,IAAgB,MAAM;AAClB,MAAAu1C,EAAA,QAAQ,CAACA,EAAQ;AAAA,IAAA,GAGrBC,IAAc,MAAM;AAAA,IAAA,GAIpBhgD,IAAYx6B,EAAS,MAAM;;AAC/B,eAAOgE,IAAAw3B,EAAM,UAAN,gBAAAx3B,EAAa,WAAW,cAAa41B,GAAa;AAAA,IAAA,CAC1D,GAEK+J,IAAc3jC,EAAS,MACtBw7B,EAAM,QACJA,EAAM,MAAM,WAAW,cADL7B,GAAe,OAEzC,GAEKqrC,IAAchlE,EAAS,MACpBw6B,EAAU,UAAUZ,GAAa,KACzC,GACK6gD,IAAcz6E,EAAS,MACpBw6B,EAAU,UAAUZ,GAAa,KACzC,GACK8gD,IAAc16E,EAAS,MACpBw6B,EAAU,UAAUZ,GAAa,KACzC,GACK+gD,IAAiB36E,EAAS,MACvBw6B,EAAU,UAAUZ,GAAa,QACzC,GAEKgK,IAAkB5jC,EAAS,MAAM;;AACjC,cAAAgE,IAAAw3B,EAAM,UAAN,QAAAx3B,EAAa,YAAYw3B,EAAM,MAAM,SAAS,SAASA,EAAM,MAAM,SAAS,MAAM,eAC7E;AAAA,QACL,KAAKA,EAAM,MAAM,SAAS,MAAM,aAAa;AAAA,QAC7C,OAAOA,EAAM,MAAM,SAAS,MAAM,aAAa;AAAA,QAC/C,QAAQA,EAAM,MAAM,SAAS,MAAM,aAAa;AAAA,QAChD,SACEkuB,GAAqBluB,EAAM,MAAM,QAAQ,KACzCA,EAAM,MAAM,SAAS,mBACrBA,EAAM,MAAM,SAAS,gBAAgB,oBACjCA,EAAM,MAAM,SAAS,gBAAgB,oBACrC;AAAA,MAAA,IAGH;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,MAAA;AAAA,IACX,CACD,GACKo/C,IAAe56E,EAAS,MACvBw7B,EAAM,QACJA,EAAM,MAAM,MAAM,eADA,EAE1B,GAEKypC,IAAgBjlE,EAAS,MAAM;;AAC5B,eAAAgE,IAAAw3B,EAAM,UAAN,gBAAAx3B,EAAa,aAAY;AAAA,IAAA,CACjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC/FK62E,KAAoBj1E,EAA2B,IAAI,GACnDk1E,KAAqBl1E,EAAI,EAAK;AAE7B,SAASm1E,KAAwB;AAK/B,SAAA;AAAA,IACL,0BAL+B,MAAM;AAClB,MAAAD,GAAA,QAAQ,CAACA,GAAmB;AAAA,IAAA;AAAA,IAK/C,mBAAAD;AAAA,IACA,oBAAAC;AAAA,EAAA;AAEJ;;;;;;;;ACMA,UAAMn7E,IAAQC,GAQR,EAAE,GAAAC,MAAMC,MAERglE,IAASl/D,EAAI,CAAC,YAAY,MAAM,CAAC,GAEjCm/D,IAAmBxF,MACnB,EAAE,OAAA/jC,GAAO,iBAAAgkC,GAAiB,oBAAAC,EAAmB,IAAIx8B,GAAY8hC,CAAgB,GAE7E/Y,IAAoBC,MAEpB5/C,IAAQrM,EAAS,MACdgsD,EAAkB,cAAcrsD,EAAM,QAAQ,CACtD,GAEKwE,IAAOnE,EAAiC,MACrCqM,EAAM,MAAM,CAAC,KAAK,IAC1B,GAEKmuB,IAAYx6B,EAAS,MAClB45B,GAAa,KACrB,GAEKorC,IAAchlE,EAAS,MACpBw6B,EAAU,UAAUZ,GAAa,KACzC,GAEKqrC,IAAgBjlE,EAA2B,MACxCw7B,EAAM,SAASA,EAAM,MAAM,WAAYA,EAAM,MAAM,WAAyB,IACpF,GAEK0pC,IAAsB,MAAM;AAChC,MAAAzF,EAAmB,QAAQ;AAAA,IAAA,GAIvB,EAAE,iBAAAiF,GAAiB,gBAAAD,MAAmBD,GAA6BhqC,EAAU,OAAO76B,EAAM,SAAS,GAEnG,EAAE,gBAAAklE,GAAgB,eAAAD,MAAkBD,GAA4BnqC,EAAU,OAAO76B,EAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5CtG,UAAM6D,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAERqxB,IAAKU,GAAa,CAAC,GAAG,CAAI,GAAA,EAAE,QAAQgtC,GAAA,CAAwC,GAE5E,EAAE,qBAAAhxD,MAAwBZ,MAE1Bo4D,IAAS,YAAY;AAErB,UADJl0C,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,QAAAtjB;AACpB;AAAA,MACF;AACA,MAAArK,EAAK,QAAQ;AAAA,IAAA,GAGTw3E,IAAiB,YAAY;AAE7B,UADJ7pD,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,QAAAtjB;AACpB;AAAA,MACF;AACA,MAAArK,EAAK,gBAAgB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXvB,UAAMA,IAAOC,GAKP,EAAE,GAAA5D,MAAMC,MAERilE,IAAmBxF,MACnB,EAAE,WAAAG,EAAA,IAAcz8B,GAAY8hC,CAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvClD,UAAMplE,IAAQC,GAaR4D,IAAOC,GAIPkyB,IAAS/vB,EAAI,EAAK,GAElB0O,IAAU,CAACD,MAAiB;AAE5B,UADJD,GAAeC,CAAK,GAChB,CAAC1U,EAAM,aAAa;AACtB,QAAA6D,EAAK,SAAS;AACd;AAAA,MACF;AACA,MAAAmyB,EAAO,QAAQ;AAAA,IAAA,GAEX1mB,IAAY,MAAM;AACtB,MAAAzL,EAAK,SAAS,GACdmyB,EAAO,QAAQ;AAAA,IAAA,GAGXxvB,IAAW,MAAM;AACrB,MAAAwvB,EAAO,QAAQ;AAAA,IAAA,GAGX,EAAE,GAAA91B,MAAMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6ECQRm7E,KAAqB,KAAK;;;;;;;;;;;;;AArBhC,UAAMt7E,IAAQC,GAeR4D,IAAOC,GAIP,EAAE,mBAAAuL,GAAmB,eAAAlB,EAAc,IAAIb,GAAU,GAIjD,EAAE,GAAApN,MAAMC,MAER,EAAE,cAAAw2B,MAAiBC,MAEnBwuC,IAAmBxF,MACnB,EAAE,WAAAG,GAAW,SAAA5rC,GAAS,OAAOonD,MAAgBj4C,GAAY8hC,CAAgB,GACzEoW,IAAev1E,EAAI,EAAK,GAExBomD,IAAoBC,MACpB,EAAE,mBAAA4uB,MAAsBE,MAExB1uE,IAAQrM,EAAS,MACdgsD,EAAkB,cAAcrsD,EAAM,QAAQ,CACtD,GAEKwE,IAAOnE,EAAiC,MACrCqM,EAAM,MAAM,CAAC,KAAK,IAC1B,GAEKmvB,IAAQx7B,EAAoC,MAC5C,CAACmE,EAAK,SAAS,CAACA,EAAK,MAAM,UAAgB,OAC3Ci3E,EAAO,SAASF,EAAY,QAAcA,EAAY,QACnD;AAAA,MACL,IAAI/2E,EAAK,MAAM;AAAA,MACf,OAAO;AAAA,QACL,cAAc;AAAA,MAChB;AAAA,MACA,YAAY;AAAA,QACV,WAAWA,EAAK,MAAM;AAAA,QACtB,aAAaA,EAAK,MAAM;AAAA,MAC1B;AAAA,MACA,OAAO;AAAA,QACL,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,MACA,SAASA,EAAK,MAAM;AAAA,MACpB,UAAU;AAAA,MACV,UAAU,CAAC;AAAA,MACX,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,MACX,UAAU;AAAA,QACR,mBAAmB,CAAC;AAAA,QACpB,oBAAoB,CAAC;AAAA,QACrB,YAAY,CAAC;AAAA,MACf;AAAA,MACA,sBAAsB;AAAA,MACtB,qBAAqB;AAAA,QACnB,uBAAuB,CAAC;AAAA,QACxB,WAAW,CAAC;AAAA,QACZ,SAAS;AAAA,QACT,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,MACf,SAAS;AAAA,MACT,WAAWgM,GAAY;AAAA,MACvB,YAAYA,GAAY;AAAA,MACxB,WAAW;AAAA,MACX,YAAY;AAAA,IAAA,CAEf,GAEKoqE,IAAU30E,EAAI,EAAI,GAElBo/B,IAAgB,MAAM;AAClB,MAAAu1C,EAAA,QAAQ,CAACA,EAAQ;AAAA,IAAA,GAGrBC,IAAc,MAAM;AAAA,IAAA,GAIpBhgD,IAAYx6B,EAAS,MAAM;;AAC/B,eAAOgE,KAAAw3B,EAAM,UAAN,gBAAAx3B,GAAa,WAAW,cAAa41B,GAAa;AAAA,IAAA,CAC1D,GAEK+J,IAAc3jC,EAAS,MACtBw7B,EAAM,QACJA,EAAM,MAAM,WAAW,cADL7B,GAAe,OAEzC,GAEKqrC,IAAchlE,EAAS,MACpBw6B,EAAU,UAAUZ,GAAa,KACzC,GACK6gD,IAAcz6E,EAAS,MACpBw6B,EAAU,UAAUZ,GAAa,KACzC,GACK8gD,IAAc16E,EAAS,MACpBw6B,EAAU,UAAUZ,GAAa,KACzC,GACK+gD,KAAiB36E,EAAS,MACvBw6B,EAAU,UAAUZ,GAAa,QACzC,GAEKgK,IAAkB5jC,EAAS,MAAM;;AACjC,cAAAgE,KAAAG,EAAK,UAAL,QAAAH,GAAY,eACP;AAAA,QACL,KAAKG,EAAK,MAAM,aAAa;AAAA,QAC7B,OAAOA,EAAK,MAAM,aAAa,kBAAkB;AAAA,QACjD,QAAQA,EAAK,MAAM,aAAa,mBAAmB;AAAA,QACnD,SACEulD,IAAqBxlD,KAAAs3B,EAAM,UAAN,gBAAAt3B,GAAa,QAAQ,OAC1C4H,KAAA0vB,EAAM,UAAN,QAAA1vB,GAAa,SAAS,sBACtByH,KAAAioB,EAAM,UAAN,QAAAjoB,GAAa,SAAS,gBAAgB,qBAClCioB,EAAM,MAAM,SAAS,gBAAgB,oBACrC;AAAA,MAAA,IAGH;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,MAAA;AAAA,IACX,CACD,GAEKypC,IAAgBjlE,EAAS,MAAM;;AAC5B,eAAAgE,KAAAw3B,EAAM,UAAN,gBAAAx3B,GAAa,aAAY;AAAA,IAAA,CACjC,GAEKq3E,IAAar7E,EAAS,MAExB,CAACO,GAAO4D,EAAK,KAAK,KAAK,CAACmlD,GAAsB,YAAYA,GAAsB,OAAO,EAAE,SAASnlD,EAAK,MAAM,MAAM,CAEtH,GACKm3E,IAAUt7E,EAAS,MAChB,CAACO,GAAO4D,EAAK,KAAK,KAAKA,EAAK,MAAM,WAAWmlD,GAAsB,OAC3E,GACK8xB,IAASp7E,EAAS,MACf,CAACO,GAAO4D,EAAK,KAAK,KAAKA,EAAK,MAAM,WAAWmlD,GAAsB,QAC3E,GACKiyB,IAAWv7E,EAAS,MACjB,CAACL,EAAM,wBAAwBy7E,EAAO,KAC9C,GACKI,IAAYx7E,EAAS,MAClB,CAACO,GAAO4D,EAAK,KAAK,KAAKA,EAAK,MAAM,WAAWmlD,GAAsB,SAC3E,GACKmyB,IAAiBz7E,EAAS,MAAM;;AAC7B,cAAAgE,KAAAG,EAAK,UAAL,gBAAAH,GAAY,SAAS;AAAA,IAAA,CAC7B,GAEK,EAAE,WAAAw7B,MAAc3C,MAEhB6+C,IAAgB,YAAY;AACd,MAAA1vB,EAAA,WAAWrsD,EAAM,QAAQ,GAC3ColE,EAAiB,SAAS,IAAI,GAC9B8V,EAAkB,QAAQ;AAAA,IAAA,GAGtBc,KAAkB37E,EAAS,MACxBgsD,EAAkB,mBAAmBrsD,EAAM,QAAQ,CAC3D,GAEKi8E,KAAsB57E,EAAS,MAC5BgsD,EAAkB,uBAAuBrsD,EAAM,QAAQ,CAC/D,GAEKk8E,KAAc77E,EAAS,MACpB27E,GAAgB,QAAQC,GAAoB,KACpD,GAEKvW,KAAS,YAAY;AACrB,UAAAh5D,EAAM,MAAM,WAAW;AAQvB,YAAA;AACI,gBAAA21B,GAAyBxC,GAAWnzB,EAAM,KAAK,GACrDyB,EAAc,SAAS;AAAA,iBAChBlD,IAAO;AACd,UAAAoE,EAAkBpE,EAAK;AAAA,QAAA,UACvB;AAAA,QAEF;AAAA,IAAA,GAGIowE,KAAiB,YAAY;;AAC7B,UAAA3uE,EAAM,MAAM,WAAW;AAAG;AAQ9B,UAAIyvE,KAAc,IACd9+D,KAAS;AACT,UAAA;AACF,cAAM++D,KAAoB,MAAM/5C,GAAyBxC,GAAWnzB,EAAM,KAAK;AAC3E,YAAA,CAAC0vE,GAAkB,CAAC;AAChB,gBAAA,IAAI,MAAM,qCAAqC;AAEvD,QAAAjuE,EAAc,SAAS,GACnBrN,IAASuD,KAAA+3E,GAAkB,CAAC,EAAE,eAArB,gBAAA/3E,GAAiC,WAAW,MACvD83E,KAAcC,GAAkB,CAAC,EAAE,WAAW,YAAY,SAExDA,GAAkB,CAAC,EAAE,QAAQ,SAAS,MAE/B/+D,MADU,MAAMm8C,GAAqB35B,GAAW7/B,EAAM,WAAWo8E,GAAkB,CAAC,EAAE,OAAO,GAClF,IAAI,CAACziB,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI,IAE5D91D;AAAA,UACE;AAAA,UACA6I,EAAM,MAAM,IAAI,CAAClI,QACR;AAAA,YACL,OAAO;AAAA,cACL,aAAA23E;AAAA,cACA,QAAA9+D;AAAA,YACF;AAAA,YACA,KAAK;AAAA,cACH,OAAO7Y,GAAK,UAAU;AAAA,cACtB,gBAAgB;AAAA,cAChB,WAAWxE,EAAM;AAAA,YACnB;AAAA,YACA,UAAU;AAAA,UAAA,EAEb;AAAA,QAAA,GAGH,MAAM+7E,EAAc;AAAA,eACb9wE,IAAO;AACd,QAAAoE,EAAkBpE,EAAK;AAAA,MAAA,UACvB;AAAA,MAEF;AAAA,IAAA;AAGF,WAAA3F;AAAA,MACEm2E;AAAA,MACA,OAAOt3E,OAAa;;AAClB,YAAI,GAACA,MAAY,GAACE,KAAAG,EAAK,UAAL,QAAAH,GAAY;AAC1B,cAAA;AACF,kBAAMkL,KAAM,MAAM0yB,GAAWpC,GAAWr7B,EAAK,MAAM,OAAO;AAC1D,YAAA4gE,EAAiB,SAAS71D,EAAG,GAC7BisE,EAAa,QAAQ;AAAA,mBACd70E,IAAG;AACV,YAAA0I,EAAkB1I,EAAC;AAAA,UACrB;AAAA,MACF;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpB8I,GAAU,MAAM;AACd,MAAAswD,EAAU,QAAQJ,GAA2B;AAAA,IAAA,CAC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICvSKngC,KAAY,yBAEL68C,KAAuB,CAACz+C,GAA6BsE,MAChEvE,GAA6BC,GAAQ4B,KAAY,QAAQ,EAAE,IAAA0C,KAAM,WAAW,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;ACkC5F,UAAMliC,IAAQC,GAiCR4D,IAAOC,GAKPw4E,IAA8Bt4E;AAAA,MAClCs5D;AAAA,MACA;AAAA,IAAA,GAGIif,KAA6Bl4E,KAAAi4E,KAAA,gBAAAA,EAA6B,UAA7B,gBAAAj4E,GAAoC,IAAIrE,EAAM,aAAa;AAE9F,QAAIS,EAAY67E,CAA2B,KAAK77E,EAAY87E,CAA0B;AAC9E,YAAA,IAAI,MAAM,mFAAmF;AAG/F,UAAA,EAAE,GAAAr8E,MAAMC,MAER,EAAE,mBAAAkP,MAAsB/B,MAGxB07C,IAAeE,GAA2BlpD,EAAM,UAAU,GAC1D,EAAE,aAAAm+D,EAAgB,IAAAnV,GAClB,EAAE,0BAAAoV,EAAA,IAA6BjV,GAAgBH,CAAY,GAC3DqD,IAAoBC,MACpBkT,IAAaf,MACb,EAAE,mBAAAyc,MAAsBE,MAExB/c,IAAWp4D,EAAmC,IAAI,GAClDu2E,IAAkBv2E,EAAI,EAAK,GAC3Bw2E,IAAoBx2E,EAAI,EAAK,GAC7By2E,IAAiBz2E,EAAI,EAAK,GAC1B02E,IAAuB12E,EAAI,EAAK,GAChC22E,IAAwB32E,EAAI,EAAK,GAEjC42E,IAAex8E,EAAS,MACrBO,GAAOZ,EAAM,UAAU,CAC/B,GAIKs+D,IAAcr4D,EAAI,EAAE,GAEpB62E,IAAcz8E,EAAS,MACpBgsD,EAAkB,SAASrsD,EAAM,QAAQ,CACjD,GAEK+8E,IAA6B18E,EAAS,MACnC,EACR,GAEK28E,IAAc38E,EAAS,MACpB,CAACO,GAAOy9D,EAAS,KAAK,CAC9B,GAEK4e,KAAiB,MAAM;AAC3B,MAAAzd,EAAW,eAAe59D,GAAMy8D,EAAS,KAAK,CAAC,GAC/Cqe,EAAe,QAAQ;AAAA,IAAA,GAGnBQ,IAAgB,MAAM;AAC1B,MAAAT,EAAkB,QAAQ;AAAA,IAAA,GAGtB,EAAE,mBAAAxjB,MAAsBC,MAExBrQ,IAAS,CAACV,OAAkB;AACd,MAAA8Q,EAAA,QAAQj5D,EAAM,aAAa,WAC3BqsD,EAAA,WAAWrsD,EAAM,UAAUA,EAAM,aAAa,WAAWA,EAAM,aAAa,SAASmoD,EAAK,GAC5G+yB,EAAkB,QAAQl7E,EAAM;AAAA,IAAA,GAE5Bm9E,IAAc,CAACh1B,OAAkB;AACnB,MAAA8Q,EAAA,QAAQj5D,EAAM,aAAa,WAC3BqsD,EAAA,WAAWrsD,EAAM,UAAUA,EAAM,aAAa,WAAWA,EAAM,aAAa,SAASmoD,EAAK,GAC5G+yB,EAAkB,QAAQl7E,EAAM;AAAA,IAAA,GAG5B,EAAE,aAAAwpD,GAAa,cAAAC,MAAiBH,GAA8BrvB,GAAa,OAAOsiD,CAA0B,GAE5Ga,IAAS,OAAO7e,IAA8CC,IAA+B6e,KAAQ,OAAU;AAEnH,UADA/e,EAAY,QAAQn6B,IACfo6B,MAAY39D,GAAOy9D,EAAS,KAAK,KAAOE,MAAY8e,IAAQ;AACtD,QAAAhf,EAAA,QAAQ58D,GAAU88D,EAAQ,GAC/BF,EAAS,UACXC,EAAY,QAAQF,EAAyBx8D,GAAMy8D,EAAS,KAAK,CAAC,GAC9Dr+D,EAAM,kBACRw/D,EAAW,eAAe59D,GAAMy8D,EAAS,KAAK,CAAC;AAGnD;AAAA,MACF;AACA,UAAIG,IAAY;AACV,YAAA;AACF,UAAAH,EAAS,QAAQ,MAAMV,GAAWQ,GAAaK,EAAU;AAAA,iBAClDvzD,IAAO;AACd,UAAAoE,EAAkBpE,EAAK;AAAA,QACzB;AACA,QAAKrK,GAAOy9D,EAAS,KAAK,MACxBC,EAAY,QAAQF,EAAyBx8D,GAAMy8D,EAAS,KAAK,CAAC,GAC9Dr+D,EAAM,kBACRw/D,EAAW,eAAe59D,GAAMy8D,EAAS,KAAK,CAAC;AAGnD;AAAA,MACF;AAAA,IAAA,GAGIxhC,IAAQ,MAAM;AAClB,MAAAyhC,EAAY,QAAQn6B,IACpBk6B,EAAS,QAAQ,MACjBx6D,EAAK,qBAAqB,IAAI;AAAA,IAAA;AAGhC,IAAAyB;AAAA,MACE,CAAC,MAAMtF,EAAM,OAAO,MAAMA,EAAM,UAAU;AAAA,MAC1C,OAAO,CAACu+D,IAAUC,EAAU,MAAM;AAC1B,cAAA4e,EAAO7e,IAAUC,EAAU;AAAA,MACnC;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;AAGd,UAAA8e,IAAuB,OAAO7wE,OAAgC;;AAClE,YAAM42B,KAAmB9I;AACzB,MAAAqiD,EAAsB,QAAQ,IAC9Bpd,EAAW,eAAe,IAAI,GAC9Bkd,EAAe,QAAQ;AACvB,UAAIP,KAAc,IACd9+D,KAAS;AACT,UAAA5Q,GAAK,SAAS,SAAS;AACrB,YAAA,CAACA,GAAK,MAAM,CAAC,KAAK,CAACA,GAAK,MAAM,CAAC,EAAE;AAAU;AAC3C,YAAA;AACI,gBAAAqvD,KAAW,MAAM75B,GAAWpC,IAAWpzB,GAAK,MAAM,CAAC,EAAE,EAAE;AAC7D,UAAI3L,IAASuD,KAAAy3D,GAAS,SAAS,eAAlB,gBAAAz3D,GAA8B,WAAW,MACpD83E,KAAcrgB,GAAS,SAAS,WAAW,YAAY,KAAK,IAE1DA,GAAS,QAAQ,SAAS,MAMnBz+C,MALU,MAAMm8C;AAAA,YACvB35B;AAAA,YACAwD,GAAiB,qBAAqB;AAAA,YACtCy4B,GAAS;AAAA,UAAA,GAES,IAAI,CAACnC,OAAWA,GAAO,IAAI,EAAE,KAAK,IAAI;AAAA,iBAErDhzD,IAAG;AACV,UAAA0I,EAAkB1I,EAAC;AAAA,QACrB;AACA,cAAMyiD,KAAgC;AAAA,UACpC,OAAO;AAAA,YACL,aAAA+yB;AAAA,YACA,QAAA9+D;AAAA,UACF;AAAA,UACA,KAAK;AAAA,YACH,OAAO5Q,GAAK,MAAM,CAAC,EAAE,SAAS;AAAA,YAC9B,gBAAgB;AAAA,YAChB,WAAWA,GAAK,MAAM,CAAC,EAAE;AAAA,UAC3B;AAAA,UACA,UAAU;AAAA,QAAA;AAEZ,QAAK7L,GAAOZ,EAAM,UAAU,MAC1BopD,GAAM,KAAKppD,EAAM,aAEnBw/D,EAAW,eAAepW,EAAK,GAC/BwzB,EAAsB,QAAQ,IACIW;MACpC;AAAA,IAAA,GAGInY,IAAmBxF,MACnB,EAAE,SAAS4d,IAAc,QAAQC,OAAgBn6C,GAAY8hC,CAAgB,GAC7E,EAAE,WAAAvlC,OAAc3C,MAEhBwiC,KAAc,OAAOt9B,OAAuB;AAChD,MAAAo7C,GAAa,QAAQ,IACrBC,GAAY,QAAQz9E,EAAM;AACtB,UAAA;AACF,cAAM67B,KAAQ,MAAMsG,GAAmBtC,IAAWuC,EAAW,GACvDs7C,KAAU,MAAMrB,GAAqBx8C,IAAWhE,GAAM,OAAO;AACnE,QAAI6hD,GAAQ,cACVzkB,EAAkB,QAAQykB,GAAQ,YAEpCtY,EAAiB,SAASvpC,EAAK;AAAA,eACxBl1B,IAAG;AACV,QAAA0I,EAAkB1I,EAAC;AAAA,MAAA,UACnB;AACA,QAAA62E,GAAa,QAAQ;AAAA,MACvB;AAAA,IAAA,GAGIG,KAAwB,MAAM;AAClC,MAAAne,EAAW,eAAe,IAAI,GAC9Bkd,EAAe,QAAQ;AAAA,IAAA,GAGnBkB,KAA0B,YAAY;AACtC,UAAA,CAAAh9E,GAAO4+D,EAAW,WAAW,GACjC;AAAA,QAAAmd,EAAqB,QAAQ;AACzB,YAAA;AACF,gBAAMptE,KAAMiwD,EAAW,YAAY,KAC/B,MAAM3B,GAAYM,GAAaqB,EAAW,YAAY,IAAIA,EAAW,WAAW,IAChF,MAAM5B,GAAYO,GAAaqB,EAAW,WAAW;AACzD,UAAAkd,EAAe,QAAQ,IAClB74E,EAAA,qBAAqB0L,GAAI,EAAE,GAChCiwD,EAAW,eAAe,IAAI,GACvB4d,EAAA7tE,IAAKA,GAAI,IAAI,EAAI,GACxB1L,EAAK,0BAA0B;AAAA,iBACxB8C,IAAG;AACV,UAAA0I,EAAkB1I,EAAC;AAAA,QAAA,UACnB;AACA,UAAAg2E,EAAqB,QAAQ;AAAA,QAC/B;AAAA;AAAA,IAAA,GAGIkB,KAAgB,YAAY;AAC5B,UAAA,CAAAj9E,GAAOZ,EAAM,UAAU,GAC3B;AAAA,YAAIA,EAAM,uBAAuB;AAC3B,cAAA;AACI,kBAAA89D,GAAYK,GAAan+D,EAAM,UAAU,GACzC68B;mBACCl2B,IAAG;AACV,YAAA0I,EAAkB1I,EAAC;AAAA,UACrB;AACA;AAAA,QACF;AACM,QAAAk2B;;IAAA,GAGF0gD,KAAoC,MAAM;AAC9C,YAAM1uE,KAAS2wD,EAAW;AACtB,MAAC5+D,GAAOiO,EAAM,KACTuuE,EAAAvuE,IAAQ,MAAM,EAAI;AAAA,IAC3B,GAGIivE,KAAuB,CAACpxE,OAAoC;AAC5D,MAACA,GAAM,CAAC,MAEP9L,GAAOZ,EAAM,UAAU,MACpB0M,GAAA,CAAC,EAAE,KAAK1M,EAAM,aAEXw/D,EAAA,eAAe9yD,GAAM,CAAC,CAAC,GAClCgwE,EAAe,QAAQ,IACnB18E,EAAM,kBAC0Bu9E;IACpC,GAGIQ,KAAuB93E,EAA4C,IAAI,GAEvE+3E,KAAkB,MAAM;;AACxB,UAAA,CAACh+E,EAAM,eAAe;AACxB,QAAAw8E,EAAgB,QAAQ;AACxB;AAAA,MACF;AACA,OAAAn4E,KAAA05E,GAAqB,UAArB,QAAA15E,GAA4B;AAAA,IAAS,GAGjC45E,KAAgCh4E,EAA2D,IAAI;AAMxF,WAAAiwB,EAAA;AAAA,MACX,iBALsB,MAAM;;AAC5B,SAAA7xB,KAAA45E,GAA8B,UAA9B,QAAA55E,GAAqC;AAAA,MAAQ;AAAA,IAI7C,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtUD,UAAMrE,IAAQC,GAiCR4D,IAAOC,GAKPsmD,IAASnkD,EAAwD,SAAS,GAG1E,EAAE,WAAA45B,EAAc,IAAA3C,GAA6Bl9B,EAAM,UAAU,GAC7D;AAAA,MACJ,aAAA8wB;AAAA,MACA,wBAAAoQ;AAAA,MACA,oBAAAX;AAAA,MACA,kBAAAQ;AAAA,MACA,sCAAAO;AAAA,MACA,uBAAAD;AAAA,MACA,qCAAAK;AAAA,IAAA,IACEhB,GAAkBb,CAAS;AAE/B,IAAApwB,GAAU,YAAY;AACpB,UAAI,CAAC82B,GAAiCvmC,EAAM,YAAY,GAAG;AACzD,QAAAoqD,EAAO,QAAQ;AACf;AAAA,MACF;AACA,YAAM7oB,IAA2B,CAAA;AAC7B,MAACzQ,EAAY,gBACNyQ,EAAA,KAAKR,GAAkB;AAElC,YAAMvxB,IAAS6xB,EAAsBrhC,EAAM,aAAa,SAAS;AAC7D,MAAAS,EAAY+O,CAAM,KACpB+xB,EAAS,KAAKL,EAAuBlhC,EAAM,aAAa,SAAS,CAAC;AAEpE,YAAMijC,IAAgCvB,EAAoC1hC,EAAM,aAAa,SAAS;AAClG,MAAAS,EAAYwiC,CAA6B,KAC3C1B,EAAS,KAAKD,EAAqCthC,EAAM,aAAa,SAAS,CAAC;AAE9E,UAAA;AACI,cAAA,QAAQ,IAAIuhC,CAAQ;AAAA,cAChB;AACV,QAAA6oB,EAAO,QAAQ;AAAA,MACjB;AACA,MAAIA,EAAO,UAAU,YAASA,EAAO,QAAQ;AAAA,IAAA,CAC9C,GAEDxlD,GAAQ04D,IAA6B/8B,CAAkB;AAEjD,UAAA29C,IAAiBj4E,EAAkD,IAAI;AAMhE,WAAAiwB,EAAA;AAAA,MACX,iBALsB,MAAM;;AAC5B,SAAA7xB,IAAA65E,EAAe,UAAf,QAAA75E,EAAsB;AAAA,MAAgB;AAAA,IAItC,CACD;;;;;;;;;;;;;;;;;;;;;;ACpFD,UAAMrE,IAAQC,GAQR4D,IAAOC,GAKP07D,IAAaf,MACb,EAAE,GAAAv+D,MAAMC,MAERipD,IAAQ/oD,EAAS,MAAMm/D,EAAW,OAAOx/D,EAAM,KAAK,CAAC,GAErD,EAAE,IAAAwxB,EAAO,IAAA8tC,GAAmBlW,GAAO+V,EAAmC,GAEtEO,IAAc,MAAM;AACxB,MAAI9+D,GAAOwoD,EAAM,KAAK,KAAK3oD,EAAY2oD,EAAM,KAAK,KAClDvlD,EAAK,aAAaulD,EAAM,MAAM,IAAI,KAAK;AAAA,IAAA,GAGnC+0B,IAAa,MAAM;AAClB,MAAAt6E,EAAA,cAAc7D,EAAM,KAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wGCI1Bs7E,KAAqB,KAAK;;;;;;;;;;;;;;AAzBhC,UAAMt7E,IAAQC,GAgBR4D,IAAOC,GAWPs6E,IAAa/9E,EAAS;AAAA,MAC1B,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAY,GAAGmE,GAAU;AAAA,MAChE;AAAA,IAAA,CACD,GAEKmgE,IAAWjkE,EAAS;AAAA,MACxB,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,mBAAmB,CAAC,GAAGM,CAAQ,CAAC;AAAA,MACvC;AAAA,IAAA,CACD,GAEKk/D,IAAUhjE,EAAS;AAAA,MACvB,MAAM;AACJ,eAAOL,EAAM;AAAA,MACf;AAAA,MACA,IAAImE,GAAU;AACZ,QAAAN,EAAK,kBAAkB,CAAC,GAAGM,CAAQ,CAAC;AAAA,MACtC;AAAA,IAAA,CACD,GAEK,EAAE,GAAAjE,MAAMC,MAERu7E,IAAar7E,EAAS,MACnB,CAACspD,GAAsB,YAAYA,GAAsB,OAAO,EAAE,SAAS3pD,EAAM,KAAK,MAAM,CACpG,GACK27E,IAAUt7E,EAAS,MAChBL,EAAM,KAAK,WAAW2pD,GAAsB,OACpD,GACKgG,IAAOtvD,EAAS,MACb,CAACL,EAAM,wBAAwBA,EAAM,KAAK,WAAW2pD,GAAsB,QACnF,GACKkyB,IAAYx7E,EAAS,MAClBL,EAAM,KAAK,WAAW2pD,GAAsB,SACpD,GACKmyB,IAAiBz7E,EAAS,MACvBL,EAAM,KAAK,SAAS,eAC5B,GAEKq+E,IAAWh+E,EAAS,MACjBL,EAAM,KAAK,eAAeA,EAAM,KAAK,aAAa,MAAM,MAChE,GACK66B,IAAYx6B,EAAS,MAClBL,EAAM,KAAK,SACnB,GACKoqD,IAAS/pD,EAAS,MACjBL,EAAM,OACJA,EAAM,KAAK,cADMg6B,GAAe,OAExC,GAEKskD,IAAa,MAAM;AAClB,MAAAz6E,EAAA,cAAc,EAAE,OAAO7D,EAAM,OAAO,MAAMA,EAAM,MAAM,UAAUA,EAAM,SAAU,CAAA;AAAA,IAAA,GAGjFu+E,IAAal+E,EAAS,MACnB,CAACspD,GAAsB,SAASA,GAAsB,SAASA,GAAsB,SAAS,EAAE;AAAA,MACrG3pD,EAAM,KAAK;AAAA,IAAA,CAEd,GAEKw+E,IAAa,YAAY;AACzB,MAAA59E,GAAOZ,EAAM,KAAK,OAAO,KACxB6D,EAAA,cAAc7D,EAAM,KAAK,OAAO;AAAA,IAAA,GAIjC,EAAE,iBAAA+kE,GAAiB,gBAAAD,MAAmBD,GAA6BhqC,EAAU,OAAO76B,EAAM,SAAS,GAEnG,EAAE,gBAAAklE,GAAgB,eAAAD,MAAkBD,GAA4BnqC,EAAU,OAAO76B,EAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChHtG,UAAMA,IAAQC,GASR4D,IAAOC,GAMP,EAAE,GAAA5D,MAAMC,MAERqmD,IAAmB,CAAC/5C,MAA2C;AACnE,YAAMo6C,IAAU,CAAA;AACR,MAAAA,EAAAp6C,EAAK,QAAQ,IAAIA,EAAK,OAC9B5I,EAAK,qBAAqB,EAAE,GAAG7D,EAAM,YAAY,GAAG6mD,GAAS;AAAA,IAAA,GAGzD43B,IAAiB,CAACC,GAAyBh+E,MAAe;AAC9D,MAAAmD,EAAK,kBAAkB,EAAE,WAAW7D,EAAM,WAAW,iBAAA0+E,GAAiB,OAAAh+E,GAAO;AAAA,IAAA,GAEzEi+E,IAAe,CAACD,GAAyBh+E,MAAe;AAC5D,MAAAmD,EAAK,gBAAgB,EAAE,WAAW7D,EAAM,WAAW,iBAAA0+E,GAAiB,OAAAh+E,GAAO;AAAA,IAAA,GAGvE,EAAE,qCAAAghC,MAAwChB,MAE1CuC,IAAgCvB,EAAoC1hC,EAAM,SAAS;AACrF,QAAAS,EAAYwiC,CAA6B;AACrC,YAAA,IAAI,MAAM,2CAA2C;AAGvD,UAAA2/B,IAAWviE,EAAS,MACjB4iC,EAA8BjjC,EAAM,SAAS,CACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CM,SAAS4+E,GAA6BjkB,GAA0B;AACrE,QAAMtO,IAAoBC;AAwCnB,SAAA;AAAA,IACL,6BAvCkC,CAClC7/C,GACAoyE,IAAe,OACZ;AACG,YAAAnyE,IAAQ2/C,EAAkB,cAAcsO,CAAQ;AACtD,eAAS/zD,IAAI,GAAGA,IAAI8F,EAAM,QAAQ9F,KAAK;AAC/B,cAAApC,IAAOkI,EAAM9F,CAAC;AAChB,QAAApC,EAAK,cAAciI,EAAK,cAE1BoyE,KACAp+E,EAAY+D,EAAK,WAAWiI,EAAK,eAAe,CAAC,KACjDjI,EAAK,WAAWiI,EAAK,eAAe,MAAM,QAE1CjI,EAAK,WAAWiI,EAAK,eAAe,IAAIA,EAAK;AAAA,MAEjD;AAAA,IAAA;AAAA,IAyBA,sBAtB2B,CAAC/L,GAAYm+E,IAAe,OAAU;AAC3D,YAAAnyE,IAAQ2/C,EAAkB,cAAcsO,CAAQ;AACtD,eAAS/zD,IAAI,GAAGA,IAAI8F,EAAM,QAAQ9F,KAAK;AAC/B,cAAApC,IAAOkI,EAAM9F,CAAC;AAChB,SAAAi4E,KAAgBp+E,EAAY+D,EAAK,QAAQ,KAAKA,EAAK,SAAS,WAAW,OACzEA,EAAK,WAAW9D;AAAA,MAEpB;AAAA,IAAA;AAAA,IAgBA,qBAb0B,CAACA,GAAYm+E,IAAe,OAAU;AAC1D,YAAAnyE,IAAQ2/C,EAAkB,cAAcsO,CAAQ;AACtD,eAAS/zD,IAAI,GAAGA,IAAI8F,EAAM,QAAQ9F,KAAK;AAC/B,cAAApC,IAAOkI,EAAM9F,CAAC;AAChB,SAAAi4E,KAAgBp+E,EAAY+D,EAAK,OAAO,KAAKA,EAAK,QAAQ,WAAW,OACvEA,EAAK,UAAU9D;AAAA,MAEnB;AAAA,IAAA;AAAA,EAMA;AAEJ;;;;;;;;ACvCA,UAAMV,IAAQC,GAQR6+E,IAAqB74E,EAAI,EAAE,OAAO,CAAA,GAAI,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,UAAU,CAAA,EAAI,CAAA,GAC1E84E,IAAyB94E,EAAI,CAAA,CAAE,GAC/B+4E,IAAwB/4E,EAAI,CAAA,CAAE,GAE9B,EAAE,GAAA/F,MAAMC,MAERglE,IAASl/D,EAAmB,CAAC,SAAS,CAAC,GAEvComD,IAAoBC,MAGpB,EAAE,6BAAA2yB,GAA6B,qBAAAC,GAAqB,sBAAAC,EAAyB,IAAAP;AAAA,MACjF5+E,EAAM;AAAA,IAAA,GAGFy+E,IAAiB,CAAChyE,MAA2E;AACjG,MAAAwyE,EAA4BxyE,CAAI;AAAA,IAAA,GAE5BkyE,IAAe,CAAClyE,MAA2E;AAC/F,MAAAwyE,EAA4BxyE,GAAM,EAAI;AAAA,IAAA,GAElC2yE,IAAoB,MAAM;AAC9B,MAAAD,EAAqBJ,EAAuB,KAAK;AAAA,IAAA,GAE7CM,IAAkB,MAAM;AACP,MAAAF,EAAAJ,EAAuB,OAAO,EAAI;AAAA,IAAA,GAEnDO,IAAmB,MAAM;AAC7B,MAAAJ,EAAoBF,EAAsB,KAAK;AAAA,IAAA,GAE3CO,IAAiB,MAAM;AACP,MAAAL,EAAAF,EAAsB,OAAO,EAAI;AAAA,IAAA,GAEjDQ,IAAU,CAACX,IAAe,OAAU;AAC7B,iBAAA,CAACH,GAAiBh+E,CAAK,KAAK,OAAO,QAAQo+E,EAAmB,MAAM,KAAK;AAClF,QAAAG;AAAA,UACE;AAAA,YACE,WAAWhlD,GAAa;AAAA,YACxB,iBAAAykD;AAAA,YACA,OAAAh+E;AAAA,UACF;AAAA,UACAm+E;AAAA,QAAA;AAGO,iBAAA,CAACH,GAAiBh+E,CAAK,KAAK,OAAO,QAAQo+E,EAAmB,MAAM,KAAK;AAClF,QAAAG;AAAA,UACE;AAAA,YACE,WAAWhlD,GAAa;AAAA,YACxB,iBAAAykD;AAAA,YACA,OAAAh+E;AAAA,UACF;AAAA,UACAm+E;AAAA,QAAA;AAGO,iBAAA,CAACH,GAAiBh+E,CAAK,KAAK,OAAO,QAAQo+E,EAAmB,MAAM,KAAK;AAClF,QAAAG;AAAA,UACE;AAAA,YACE,WAAWhlD,GAAa;AAAA,YACxB,iBAAAykD;AAAA,YACA,OAAAh+E;AAAA,UACF;AAAA,UACAm+E;AAAA,QAAA;AAGO,iBAAA,CAACH,GAAiBh+E,CAAK,KAAK,OAAO,QAAQo+E,EAAmB,MAAM,QAAQ;AACrF,QAAAG;AAAA,UACE;AAAA,YACE,WAAWhlD,GAAa;AAAA,YACxB,iBAAAykD;AAAA,YACA,OAAAh+E;AAAA,UACF;AAAA,UACAm+E;AAAA,QAAA;AAGJ,UAAIA,GAAc;AACD,QAAAU,KACCF;AAChB;AAAA,MACF;AACiB,MAAAC,KACCF;IAAA,GAEdK,IAAY,MAAM;AACtB,MAAAX,EAAmB,QAAQ,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,OAAO,CAAA,GAAI,UAAU,CAAG,EAAA,GAC3EE,EAAsB,QAAQ,IAC9BD,EAAuB,QAAQ;IAAC,GAG5BW,IAAar/E,EAAS,MACnBgsD,EAAkB,mBAAmBrsD,EAAM,QAAQ,CAC3D;AAED,WAAAyP,GAAU,MAAM;AACV,MAAAiwE,EAAW,MAAM,CAAC,KACpBva,EAAO,MAAM,KAAKua,EAAW,MAAM,CAAC,CAAC;AAAA,IACvC,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1GD,UAAM1/E,IAAQC,GAYR4D,IAAOC,GAIPuoD,IAAoBC,MAEpB5iB,IAAOrpC,EAAS,MACbgsD,EAAkB,cAAcrsD,EAAM,QAAQ,CACtD,GAEKs+E,IAAa,CAAC7xE,MAA6E;AAC/F,MAAA4/C,EAAkB,eAAe5/C,EAAK,UAAUA,EAAK,MAAMA,EAAK,KAAK;AAAA,IAAA,GAGjE0xE,IAAa,CAAC97E,MAAkB;AAClB,MAAAgqD,EAAA,cAAcrsD,EAAM,UAAUqC,CAAK;AAAA,IAAA,GAGjD,EAAE,qBAAA23D,GAAqB,qBAAAC,EAAoB,IAAIV,GAAqB,GACpE,EAAE,oBAAAW,GAAoB,oBAAAC,EAAmB,IAAIP,GAAoB;AAEvE,WAAAnqD,GAAU,MAAM;AACT,MAAAi6B,EAAA,MAAM,QAAQ,CAACllC,MAAS;AAC3B,QAAAw1D,EAAoBx1D,EAAK,QAAQ,GACjC01D,EAAmB11D,EAAK,OAAO;AAAA,MAAA,CAChC,GACmBy1D,KACDE;IAAA,CACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBD,UAAMn6D,IAAQC,GAYR4D,IAAOC,GAMP,EAAE,mBAAAo3E,GAAmB,oBAAAC,GAAoB,0BAAAwE,MAA6BvE,GAAqB,GAE3F5b,IAAaf,MACb,EAAE,aAAAE,EAAA,IAAgBr7B,GAAYk8B,CAAU,GACxCnT,IAAoBC,MACpB0vB,IAAkB37E,EAAS,MACxBgsD,EAAkB,mBAAmBrsD,EAAM,QAAQ,CAC3D,GAEK0M,IAAQrM,EAAS,MACdgsD,EAAkB,cAAcrsD,EAAM,QAAQ,CACtD,GAEKi8E,IAAsB57E,EAAS,MAC5BgsD,EAAkB,uBAAuBrsD,EAAM,QAAQ,CAC/D,GAEKk8E,IAAc77E,EAAS,MACpB27E,EAAgB,QAAQC,EAAoB,KACpD,GAEK2D,IAAav/E,EAAS,MACnB27E,EAAgB,UAAUC,EAAoB,KACtD,GAEK,EAAE,GAAA/7E,MAAMC,MACR,EAAE,cAAAw2B,MAAiBC,MACnBpF,IAAKU,MACL,EAAE,eAAA/jB,GAAe,qBAAAD,GAAqB,mBAAAmB,MAAsB/B,GAAU,GACtE,EAAE,WAAAuyB,MAAc3C,MAEhBuoC,IAAoBx/D,EAAI,EAAK,GAC7B45E,IAA4B55E,EAAI,EAAK,GAErC81E,IAAgB,YAAY;AACd,MAAA1vB,EAAA,WAAWrsD,EAAM,QAAQ,GAC3Ck7E,EAAkB,QAAQ;AAAA,IAAA,GAGtBxV,IAAS,YAAY;AACnB,YAAAoa,IAAWl+E,GAAM8K,EAAM,KAAK;AAClC,UAAIozE,EAAS,WAAW,GAGpB;AAAA,YAFJra,EAAkB,QAAQ,IAC1Bj0C,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,UAAAtjB,KACpBu3D,EAAkB,QAAQ;AAC1B;AAAA,QACF;AACI,YAAA;AACI,gBAAApjC,GAAyBxC,GAAWigD,CAAQ,GAClD3xE,EAAc,SAAS;AAAA,iBAChBlD,GAAO;AACd,kBAAQ,MAAMA,CAAK,GACnBoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAAw6D,EAAkB,QAAQ;AAAA,QAC5B;AAAA;AAAA,IAAA,GAGIsa,KAAc,OAAOC,GAA+B19C,MAAuC;AACzF,YAAA29C,wBAAuB,OACvBC,wBAAuB,OACvBC,yBAAiB;AACnB,UAAA;AACQ,QAAA79C,EAAA,QAAQ,CAAC89C,OAAa;;AACb,UAAAH,EAAA,IAAIG,GAAS,IAAI;AAAA,YAChC,aAAat/E,IAASuD,KAAA+7E,GAAS,eAAT,gBAAA/7E,GAAqB,WAAW,IAAI+7E,GAAS,WAAW,YAAY,KAAA,IAAS;AAAA,YACnG,WAAWA,GAAS;AAAA,UAAA,CACrB;AAAA,QAAA,CACF,GACgBH,EAAA,QAAQ,CAACI,OAAc;AAC5B,UAAAA,GAAA,UAAU,QAAQ,CAACC,OAAa;AACxC,YAAAJ,EAAiB,IAAII,EAAQ;AAAA,UAAA,CAC9B;AAAA,QAAA,CACF,GACGJ,EAAiB,OAAO,MACP,MAAM1mB,GAAqB35B,GAAW7/B,EAAM,WAAW,CAAC,GAAGkgF,CAAgB,CAAC,GACpF,QAAQ,CAACvmB,OAAW;AAC7B,UAAAwmB,GAAW,IAAIxmB,GAAO,IAAIA,GAAO,IAAI;AAAA,QAAA,CACtC;AAAA,eAEIhzD,IAAG;AACV,QAAA0I,EAAkB1I,EAAC;AAAA,MACrB;AAMO,aAJuBq5E,EAAW;AAAA,QACvC,CAACzrB,OAAc,CAAC3zD,GAAO2zD,GAAU,OAAO,KAAK,CAAC3zD,GAAO2zD,GAAU,MAAM;AAAA,MAAA,EAG1C,IAAI,CAACA,OAAc;;AAClC,QAAAoK,EAAA;AACZ,cAAMwd,MAAc93E,KAAA47E,EAAiB,IAAI1rB,GAAU,OAAQ,MAAvC,gBAAAlwD,GAA0C,aACxDk8E,KAAwB,CAAA;AAC9B,gBAAAh8E,KAAA07E,EAAiB,IAAI1rB,GAAU,OAAQ,MAAvC,QAAAhwD,GAA0C,UAAU,QAAQ,CAAC+7E,OAAa;AAClE,gBAAAl9E,KAAO+8E,GAAW,IAAIG,EAAQ;AAChC,UAAA,CAAC7/E,EAAY2C,EAAI,KAAKA,GAAK,KAAK,EAAE,SAAS,KAC7Cm9E,GAAY,KAAKn9E,EAAI;AAAA,QACvB,IAEK;AAAA,UACL,KAAKm7C,GAAe;AAAA,UACpB,OAAO;AAAA,YACL,aAAa49B,MAAe;AAAA,YAC5B,QAAQoE,GAAY,KAAK,IAAI;AAAA,UAC/B;AAAA,UACA,KAAK;AAAA,YACH,OAAOhsB,GAAU;AAAA,YACjB,gBAAgB;AAAA,YAChB,WAAWv0D,EAAM;AAAA,UACnB;AAAA,UACA,UAAU2+D,EAAY;AAAA,QAAA;AAAA,MACxB,CACD;AAAA,IAAA,GAGG0c,IAAiB,YAAY;AAC3B,YAAAyE,IAAWl+E,GAAM8K,EAAM,KAAK;AAClC,UAAIozE,EAAS,WAAW,GAGpB;AAAA,YAFJD,EAA0B,QAAQ,IAClCruD,EAAG,MAAM,UACLA,EAAG,MAAM,UAAU;AACD,UAAAtjB,KACpB2xE,EAA0B,QAAQ;AAClC;AAAA,QACF;AACI,YAAA;AACF,gBAAMtwE,IAAM,MAAM8yB,GAAyBxC,GAAWigD,CAAQ,GACxDU,IAAS,MAAMT,GAAYD,GAAUvwE,CAAG;AAC9C,UAAA1L,EAAK,WAAW28E,CAAM;AAAA,iBACfv1E,GAAO;AACd,UAAAoE,EAAkBpE,CAAK;AAAA,QAAA,UACvB;AACA,UAAA40E,EAA0B,QAAQ;AAAA,QACpC;AAAA;AAAA,IAAA,GAGIza,IAAmBxF,MACnB,EAAE,SAAAzrC,GAAS,QAAA6B,GAAQ,mBAAAgqC,EAAkB,IAAI18B,GAAY8hC,CAAgB,GAErEoZ,IAAa,OAAOt8C,MAAc;AAClC,UAAA;AACF,QAAAkjC,EAAiB,SAAS,IAAI,GAC9BjxC,EAAQ,QAAQ,IAChB6B,EAAO,QAAQh2B,EAAM,UACrBggE,EAAkB,QAAQ,IAC1BoF,EAAiB,SAAS,MAAMnjC,GAAWpC,GAAWqC,CAAE,CAAC;AAAA,eAClDv7B,GAAG;AACV,QAAA0I,EAAkB1I,CAAC;AAAA,MAAA,UACnB;AACA,QAAAwtB,EAAQ,QAAQ;AAAA,MAClB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7JF,UAAMn0B,IAAQC,GA8BR4D,IAAOC,GAIP24E,IAAoBx2E,EAAI,EAAK,GAE7Bq2E,IAA8Bt4E;AAAA,MAClCs5D;AAAA,MACA;AAAA,IAAA,GAGIif,KAA6Bl4E,KAAAi4E,KAAA,gBAAAA,EAA6B,UAA7B,gBAAAj4E,GAAoC,IAAIrE,EAAM,aAAa;AAE9F,QAAIS,EAAY67E,CAA2B,KAAK77E,EAAY87E,CAA0B;AAC9E,YAAA,IAAI,MAAM,mFAAmF;AAI/F,UAAAvzB,IAAeE,GAA2BlpD,EAAM,UAAU,GAC1D,EAAE,aAAAm+D,EAAgB,IAAAnV,GAClB,EAAE,mBAAA35C,GAAmB,qBAAAnB,EAAoB,IAAIZ,GAAU,GACvDmzE,IAAwBx6E,EAA8B,IAAI,GAE1D,EAAE,aAAAujD,GAAa,cAAAC,MAAiBH,GAA8BrvB,GAAa,OAAOsiD,CAA0B,GAE5G,EAAE,GAAAr8E,MAAMC,MAERugF,IAAgBz6E,EAAI,EAAK,GAEzBu5D,IAAaf,MACb,EAAE,QAAAR,GAAQ,aAAAU,EAAY,IAAIr7B,GAAYk8B,CAAU,GAEhDmhB,IAAoB,YAAY;AAChC,UAAA;AACF,QAAAD,EAAc,QAAQ;AACtB,cAAME,KAAY,MAAMljB,GAAoBS,GAAan+D,EAAM,UAAU;AAC9D,QAAAw/D,EAAA;AAAA,UACTohB,GAAU,IAAI,CAACC,QACFrhB,EAAA,2BAA2BqhB,GAAS,QAAQ,GAChD;AAAA,YACL,KAAKtiC,GAAe;AAAA,YACpB,GAAGsiC;AAAA,UAAA,EAEN;AAAA,QAAA,GAEHh9E,EAAK,qBAAqBo6D,EAAO,MAAM,IAAI,CAAC7U,OAAUA,GAAM,EAAE,EAAE,OAAO,CAAClnB,OAAOA,OAAO,MAAS,CAAgB;AAAA,eACxGv7B,IAAG;AACV,QAAA0I,EAAkB1I,EAAC;AAAA,MAAA,UACnB;AACA,QAAA+5E,EAAc,QAAQ;AAAA,MACxB;AAAA,IAAA,GAGIr0B,IAAoBC,MAEpBwwB,IAAcz8E,EAAS,MACpBgsD,EAAkB,SAASrsD,EAAM,QAAQ,CACjD,GAEK,EAAE,mBAAAi5D,MAAsBC,MAExB,EAAE,mBAAAgiB,MAAsBE,MAExB+B,IAAc,CAACh1B,OAAkB;AACnB,MAAA8Q,EAAA,QAAQj5D,EAAM,aAAa,WAC3BqsD,EAAA,WAAWrsD,EAAM,UAAUA,EAAM,aAAa,WAAWA,EAAM,aAAa,SAASmoD,EAAK,GAC5G+yB,EAAkB,QAAQl7E,EAAM;AAAA,IAAA,GAG5B6oD,KAAS,CAACV,OAAkB;AACd,MAAA8Q,EAAA,QAAQj5D,EAAM,aAAa,WAC3BqsD,EAAA,WAAWrsD,EAAM,UAAUA,EAAM,aAAa,WAAWA,EAAM,aAAa,SAASmoD,EAAK,GAC5G+yB,EAAkB,QAAQl7E,EAAM;AAAA,IAAA,GAG5B8gF,IAAwB,OAAOp0E,OAAoC;AACvE,YAAM22B,KAAmB9I,MACnBZ,KAAMjtB,GAAM,IAAI,CAAClI,OAASA,GAAK,EAAE,GACjCy7E,yBAAuB,OACvBC,yBAAuB,OACvBC,yBAAiB;AACnB,UAAA;AAEW,SADQ,MAAMr9C,GAAoBjD,GAAWlG,IAAK0J,GAAiB,iBAAiB,GACpF,QAAQ,CAACk4C,OAAgB;;AACnB,UAAA0E,GAAA,IAAI1E,GAAY,IAAI;AAAA,YACnC,aAAaz6E,IAASuD,KAAAk3E,GAAY,SAAS,eAArB,gBAAAl3E,GAAiC,WAAW,IAC9Dk3E,GAAY,SAAS,WAAW,YAAY,KAC5C,IAAA;AAAA,YACJ,WAAWA,GAAY;AAAA,UAAA,CACxB;AAAA,QAAA,CACF,GACgB0E,GAAA,QAAQ,CAACI,OAAc;AAC5B,UAAAA,GAAA,UAAU,QAAQ,CAACC,OAAa;AACxC,YAAAJ,GAAiB,IAAII,EAAQ;AAAA,UAAA,CAC9B;AAAA,QAAA,CACF,GACGJ,GAAiB,OAAO,MACP,MAAM1mB,GAAqB35B,GAAWwD,GAAiB,qBAAqB,WAAW;AAAA,UACxG,GAAG68C;AAAA,QAAA,CACJ,GACU,QAAQ,CAACvmB,OAAW;AAC7B,UAAAwmB,GAAW,IAAIxmB,GAAO,IAAIA,GAAO,IAAI;AAAA,QAAA,CACtC;AAAA,eAEIhzD,IAAG;AACV,QAAA0I,EAAkB1I,EAAC;AAAA,MACrB;AAEO,aAAA+F,GAAM,IAAI,CAACmvB,OAAU;;AACd,QAAA8iC,EAAA;AACZ,cAAMwd,MAAc93E,KAAA47E,GAAiB,IAAIpkD,GAAM,EAAE,MAA7B,gBAAAx3B,GAAgC,aAC9Ck8E,KAAwB,CAAA;AAC9B,gBAAAh8E,KAAA07E,GAAiB,IAAIpkD,GAAM,EAAE,MAA7B,QAAAt3B,GAAgC,UAAU,QAAQ,CAAC+7E,OAAa;AACxD,gBAAAl9E,KAAO+8E,GAAW,IAAIG,EAAQ;AAChC,UAAA,CAAC7/E,EAAY2C,EAAI,KAAKA,GAAK,KAAK,EAAE,SAAS,KAC7Cm9E,GAAY,KAAKn9E,EAAI;AAAA,QACvB,IAEK;AAAA,UACL,KAAKm7C,GAAe;AAAA,UACpB,OAAO;AAAA,YACL,aAAa49B,MAAe;AAAA,YAC5B,QAAQoE,GAAY,KAAK,IAAI;AAAA,UAC/B;AAAA,UACA,KAAK;AAAA,YACH,OAAO1kD,GAAM,SAAU;AAAA,YACvB,gBAAgB;AAAA,YAChB,WAAWA,GAAM;AAAA,UACnB;AAAA,UACA,UAAU8iC,EAAY;AAAA,QAAA;AAAA,MACxB,CACD;AAAA,IAAA,GAGG2e,IAAuB,OAAO7wE,OAAgC;AAC9D,UAAAA,GAAK,SAAS,SAAS;AACrB,YAAAA,GAAK,MAAM,WAAW;AAAG;AAC7B,cAAMC,KAAQ,MAAMo0E,EAAsBr0E,GAAK,MAAM,OAAO,CAACovB,OAAU,CAACj7B,GAAOi7B,GAAM,QAAQ,CAAC,CAAC;AAC/F,QAAA2jC,EAAW,UAAU9yD,EAAK;AAAA,MAC5B;AAAA,IAAA,GAGI04D,IAAmBxF,MACnB,EAAE,SAAS4d,GAAc,QAAQC,MAAgBn6C,GAAY8hC,CAAgB,GAC7E,EAAE,WAAAvlC,MAAc3C,MAEhBwiC,IAAc,OAAOt9B,OAAuB;AAChD,MAAAo7C,EAAa,QAAQ,IACrBC,EAAY,QAAQz9E,EAAM;AACtB,UAAA;AACF,cAAM67B,KAAQ,MAAMsG,GAAmBtC,GAAWuC,EAAW,GACvDs7C,KAAU,MAAMrB,GAAqBx8C,GAAWhE,GAAM,OAAO;AACnE,QAAI6hD,GAAQ,cACVzkB,EAAkB,QAAQykB,GAAQ,YAEpCtY,EAAiB,SAASvpC,EAAK;AAAA,eACxBl1B,IAAG;AACV,QAAA0I,EAAkB1I,EAAC;AAAA,MAAA,UACnB;AACA,QAAA62E,EAAa,QAAQ;AAAA,MACvB;AAAA,IAAA,GAGIM,IAAuB,CAACpxE,OAAoC;AAChE,MAAIA,GAAM,WAAW,MACV8yD,EAAA;AAAA,QACT9yD,GAAM,IAAI,CAAClI,QACGm6D,EAAA,SACL;AAAA,UACL,KAAKpgB,GAAe;AAAA,UACpB,GAAG/5C;AAAA,UACH,UAAUm6D,EAAY;AAAA,QAAA,EAEzB;AAAA,MAAA,GAEHuc,EAAkB,QAAQ,MACR7uB,EAAA,WAAWrsD,EAAM,QAAQ;AAAA,IAAA,GAGvCk9E,IAAgB,MAAM;AAC1B,MAAAT,EAAkB,QAAQ;AAAA,IAAA,GAGtBjrD,IAAKU,GAAa,CAAC,GAAG,CAAI,GAAA,EAAE,QAAQitC,GAAA,CAAqC,GAEzE4hB,KAAa,YAAY;AAEzB,UADJvvD,EAAG,MAAM,UACLA,EAAG,MAAM;AACS,eAAAtjB,KACb;AAEL,UAAA;AACF,cAAM8yE,KAAW,MAAMjjB,GAAiBI,GAAav8D,GAAMq8D,EAAO,KAAK,CAAC,GAClEtkC,KAAmB,CAAA,GACnBjtB,KAAQs0E,GAAS,IAAI,CAACC,QACtBtnD,GAAA,KAAKsnD,GAAQ,EAAE,GACZ;AAAA,UACL,KAAK1iC,GAAe;AAAA,UACpB,GAAG0iC;AAAA,QAAA,EAEN;AACD,eAAAzhB,EAAW,UAAU9yD,EAAK,GAC1B7I,EAAK,qBAAqB81B,EAAG,GACtB;AAAA,cACG;AACH,eAAA;AAAA,MACT;AAAA,IAAA,GAGIwkD,KAAa,OAAO97E,OAAkB;AACpC,YAAA+mD,KAAQ6U,EAAO,MAAM57D,EAAK;AAChC,UAAK+mD,IACD;AAAA,YAAA3oD,EAAY2oD,GAAM,EAAE,GAAG;AACzB,UAAAoW,EAAW,mBAAmBn9D,EAAK;AACnC;AAAA,QACF;AACA,YAAIrC,EAAM,uBAAuB;AAC3B,cAAA;AACI,kBAAA89D,GAAYK,GAAa/U,GAAM,EAAE,GACvCoW,EAAW,mBAAmBn9D,EAAK;AAAA,mBAC5BsE,IAAG;AACV,YAAA0I,EAAkB1I,EAAC;AAAA,UACrB;AACA;AAAA,QACF;AACA,QAAA64D,EAAW,mBAAmBn9D,EAAK;AAAA;AAAA,IAAA,GAG/B+8C,KAAWn5C,EAAwB,IAAI,GACvCo5C,KAAap5C,EAAYs4C,GAAA,CAAgB,GACzCe,KAAmBr5C,EAA8B,IAAI,GACrDs5C,KAAgBt5C,EAAI,CAAC,GAErBm7C,KAAe/gD,EAAS,MACrBI,EAAYT,EAAM,kBAAkB,IAAI+gD,KAAwB1B,GAAW,QAAQr/C,EAAM,kBACjG,GAEK0/C,KAA0B,MAAM;AACtB,MAAAH,GAAA,SACd7wB,GAAS,MAAM;AACA,QAAA2yB;MAAA,CACd;AAAA,IAAA,GAGG6/B,KAAqB,MAAM;AAC/B,UAAIC,KAAM;AACH,MAAAljB,EAAA,MAAM,QAAQ,CAAC7U,OAAU;AAC9B,QAAA+3B,MACA/3B,GAAM,WAAW+3B;AAAA,MAAA,CAClB,GACD3hB,EAAW,cAAc2hB;AAAA,IAAA,GAErBC,KAAqB,CAACjtC,IAAcD,OAAe;AACvD,UAAIA,MAAM,KAAKA,KAAK+pB,EAAO,MAAM,QAAQ;AACvC,cAAMpgD,KAAUogD,EAAO,MAAM,OAAO9pB,IAAM,CAAC,EAAE,CAAC;AAC9C,QAAA8pB,EAAO,MAAM,OAAO/pB,IAAI,GAAGr2B,EAAO,GACfqjE,MACKxhC;MAC1B;AAAA,IAAA,GAGI2B,KAAe,MAAM;AAEzB,UADIrhD,EAAM,oBACN,CAACo/C,GAAS;AAAO;AACrB,YAAMkC,KAAiBlC,GAAS,MAAM,cAA2B,MAAML,EAAW;AAClF,MAAKuC,OACLhC,GAAiB,QAAQhD,GAAYgF,IAAgB,CAAA,GAAI;AAAA,QACvD,QAAQ,MAAM3C;AAAA,QACd,YAAYC;AAAA,QACZ,WAAWC;AAAA,QACX,aAAaC;AAAA,QACb,OAAO,OAAOpqC,OAAyB;AACrC,UAAIjU,EAAYiU,GAAM,QAAQ,KAAKjU,EAAYiU,GAAM,QAAQ,KAC1C0sE,GAAA1sE,GAAM,UAAUA,GAAM,QAAQ;AAAA,QACnD;AAAA,MAAA,CACD;AAAA,IAAA;AAGH,WAAAga,GAAS,MAAM;AACb,MAAA0wB,GAAS,QAAQ,SAAS,cAAc,MAAMgC,GAAa,KAAK,GACnDC;IAAA,CACd,GAEYnrB,EAAA;AAAA,MACX,YAAA6qD;AAAA,IAAA,CACD,GAEDtxE,GAAU,MAAM;AACI,MAAAkxE;IAAA,CACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3VD,UAAM3gF,IAAQC,GA2BR4D,IAAOC,GAIPsmD,IAASnkD,EAAwD,SAAS,GAG1E,EAAE,WAAA45B,EAAc,IAAA3C,GAA6Bl9B,EAAM,UAAU,GAC7D;AAAA,MACJ,aAAA8wB;AAAA,MACA,wBAAAoQ;AAAA,MACA,oBAAAX;AAAA,MACA,kBAAAQ;AAAA,MACA,sCAAAO;AAAA,MACA,uBAAAD;AAAA,MACA,qCAAAK;AAAA,IAAA,IACEhB,GAAkBb,CAAS;AAE/B,IAAApwB,GAAU,YAAY;AACpB,UAAI,CAAC82B,GAAiCvmC,EAAM,YAAY,GAAG;AACzD,QAAAoqD,EAAO,QAAQ;AACf;AAAA,MACF;AACA,YAAM7oB,IAA2B,CAAA;AAC7B,MAACzQ,EAAY,gBACNyQ,EAAA,KAAKR,GAAkB;AAElC,YAAMg6B,IAAkB15B,EAAsBrhC,EAAM,aAAa,SAAS;AACtE,MAAAS,EAAYs6D,CAAe,KAC7Bx5B,EAAS,KAAKL,EAAuBlhC,EAAM,aAAa,SAAS,CAAC;AAEpE,YAAMijC,IAAgCvB,EAAoC1hC,EAAM,aAAa,SAAS;AAClG,MAAAS,EAAYwiC,CAA6B,KAC3C1B,EAAS,KAAKD,EAAqCthC,EAAM,aAAa,SAAS,CAAC;AAE9E,UAAA;AACI,cAAA,QAAQ,IAAIuhC,CAAQ;AAAA,cAChB;AACV,QAAA6oB,EAAO,QAAQ;AAAA,MACjB;AACA,MAAIA,EAAO,UAAU,YAASA,EAAO,QAAQ;AAAA,IAAA,CAC9C;AAEK,UAAA8zB,IAAiBj4E,EAA0D,IAAI,GAE/E86E,IAAa,YACZ7C,EAAe,QACZ,MAAMA,EAAe,MAAM,eADD;AAIpC,WAAAt5E,GAAQ04D,IAA6B/8B,CAAkB,GAE1CrK,EAAA;AAAA,MACX,YAAA6qD;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFD,UAAM/gF,IAAQC,GAyBR,EAAE,QAAAg+D,GAAQ,YAAAxrC,EAAW,IAAIlf,GAAOvT,CAAK,GAErCqhF,IAAYp7E,EAAkB,CAAA,CAAE,GAEhC,EAAE,mBAAAoJ,MAAsB/B,MAGxB07C,IAAeE,GAA2BlpD,EAAM,UAAU,GAC1D,EAAE,aAAAm+D,EAAgB,IAAAnV;AAExB,WAAA1jD;AAAA,MACE,CAAC24D,GAAQxrC,CAAU;AAAA,MACnB,OAAO,CAAC6uD,GAAWC,CAAW,MAAM;AAE9B,YADJF,EAAU,QAAQ,IACdC,KAAaA,EAAU,SAAS,GAAG;AAC3B,UAAAD,EAAA,QAAQ5/E,GAAU6/E,CAAS;AACrC;AAAA,QACF;AACI,YAAAC,KAAeA,EAAY,SAAS;AAClC,cAAA;AACF,YAAAF,EAAU,QAAQ,MAAM3jB,GAAoBS,GAAaojB,CAAW;AAAA,mBAC7Dt2E,GAAO;AACd,YAAAoE,EAAkBpE,CAAK;AAAA,UACzB;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;ICvDPu2E,KAA+B,CAAC,aAAa,YAAY,GA4BhEC,KAAsC;AAAA,EAC1C,KAAK;AAAA,EACL,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AACT;AAEO,SAASC,GACdlyE,GACAmyE,GACA59E,IAA6B,QAC7BE,IAA8B,QAC9B29E,IAA0B,IAC1BC,IAA2C,QAC3CC,IAA8B,QAC9B;AACA,QAAMC,IAAYD,KAAcj3E,IAC1B,EAAE,GAAA3K,EAAM,IAAA6hF,EAAU,UAAUA,GAC5BlvE,IAAyBwf;AAC/B,MAAIwvD;AACF,eAAW54C,KAAQ,OAAO,KAAKp2B,CAAU;AACvC,MAAIo2B,KAAQ44C,MAEChvE,EAAAo2B,CAAI,IAAI44C,EAAiB54C,CAAI;AAK9C,QAAM+4C,IAAaxyE,EAAO,IAAI,CAAChL,MAAS;AACtC,UAAMqR,IAAM,EAAE,GAAG4rE,IAAe,GAAGj9E,EAAK;AACxC,WAAK/D,EAAYoV,EAAI,KAAK,MAEfpV,EAAYoV,EAAI,KAAK,KAAK2rE,GAA6B,SAAS3rE,EAAI,GAAG,IAChFA,EAAI,QAAQ3V,EAAE,2BAA2B2V,EAAI,GAAG,IACvCpV,EAAYoV,EAAI,KAAK,KAAK9R,KAAUE,IAC7C4R,EAAI,QAAQ3V,EAAE6D,IAAS,MAAME,IAAU,YAAY4R,EAAI,GAAG,IAE1DA,EAAI,QAAQ,KAEPA;AAAA,EAAA,CACR,GAEKosE,IAAiB5hF,EAAS,MAAM;AACpC,UAAM6hF,IAAe,CAAA;AACV,WAAAF,EAAA,QAAQ,CAACG,MAAW;AAC7B,MAAKR,EAAc,MAAM,SAASQ,EAAO,GAAG,KAC1CD,EAAQ,KAAKC,CAAM;AAAA,IACrB,CACD,GACIP,KAAwBM,EAAA,KAAK,EAAE,KAAK,WAAW,UAAU,IAAO,OAAO,IAAM,GAC3EA;AAAA,EAAA,CACR;AAWM,SAAA;AAAA,IACL,YAAAF;AAAA,IACA,gBAAAC;AAAA,IACA,eAAAN;AAAA,IACA,cAbmB,CAACrvD,MAAgB;AACpC,UAAIA,GAAQ;AACV,QAAAzf,EAAW,SAASyf,EAAO,KAC3Bzf,EAAW,aAAayf,EAAO,UAAU;AACzC;AAAA,MACF;AACA,MAAAzf,EAAW,SAAS;AAAA,IAAA;AAAA,IAQpB,YAAAA;AAAA,EAAA;AAEJ;AC/FO,SAASuvE,GACdC,GACAC,GACAv+E,GACAE,GACAq1B,GACA9mB,GACA;AACM,QAAA+xC,IAA8Bt+C,EAAI,EAAK,GACvCyG,IAA2BzG,EAAI,CAAA,CAAE,GACjCs8E,IAA8Bt8E,EAAI,CAAA,CAAE,GACpCkuB,IAAUluB,EAAI,EAAK,GAEnB,EAAE,aAAA4O,GAAa,cAAA4wB,EAAa,IAAInzB,GAAiB,GACjD,EAAE,mBAAAjD,MAAsB/B,MAExB,EAAE,gBAAA20E,GAAgB,YAAApvE,GAAY,cAAA2vE,GAAc,YAAAR,GAAY,eAAAL,MAAkBD;AAAA,IAC9EW;AAAA,IACAC;AAAA,IACAv+E;AAAA,IACAE;AAAA,EAAA,GAGIgL,IAAS,MAAM;AACR,IAAAwzE,KACHC;EAAA,GAGJC,IAAe,CAACr2D,MAAoC;AACxD,IAAAk2D,EAAal2D,EAAO,MAAM,GAClBo2D;EAAA,GAGJE,IAAkB,YAAY;AAClC,IAAAzuD,EAAQ,QAAQ,IACLthB,EAAA;AACP,QAAA;AACF,MAAAnG,EAAM,MAAM,KAAK,GAAI,MAAM4sB,EAAMzmB,GAAYL,CAAM,CAAE;AAAA,aAC9C7L,GAAG;AACV,MAAA0I,EAAkB1I,CAAC;AAAA,IAAA,UACnB;AACA,MAAAwtB,EAAQ,QAAQ;AAAA,IAClB;AAAA,EAAA,GAGIsuD,IAAa,MAAM;AACvB,IAAA/1E,EAAM,QAAQ,IACd61E,EAAS,QAAQ;EAAC,GAGdG,IAAU,YAAY;AAC1B,IAAAvuD,EAAQ,QAAQ;AACZ,QAAA;AACF,MAAAznB,EAAM,QAAQ,MAAM4sB,EAAMzmB,GAAYL,CAAM;AAAA,aACrC7L,GAAG;AACV,MAAA0I,EAAkB1I,CAAC;AAAA,IAAA,UACnB;AACA,MAAAwtB,EAAQ,QAAQ;AAAA,IAClB;AAAA,EAAA;AAeK,SAAA;AAAA,IACL,OAAAznB;AAAA,IACA,UAAA61E;AAAA,IACA,YAAA1vE;AAAA,IACA,gBAAAovE;AAAA,IACA,eAAAN;AAAA,IACA,YAAAK;AAAA,IACA,eAAAz9B;AAAA,IACA,SAAApwB;AAAA,IACA,YArBiB,CAACzf,MAAiB;AACnC,YAAM2M,IAAc3M,EAAM;AAC1B,UAAI,CAAC2M;AAAa;AAClB,YAAM6pB,KAAS7pB,EAAY;AAC3B,UAAI,CAAC6pB,MAAU,CAACA,GAAO,UAAU,SAAS,kBAAkB;AAAG;AAC/D,YAAM23C,IAAU33C,GAAO;AACvB,UAAI,CAAC23C,KAAW,CAACA,EAAQ,UAAU,SAAS,kBAAkB;AAAG;AAC3D,YAAAjgE,IAAQigE,EAAQ,cAAc,OAAO;AAC3C,MAAKjgE,KACLA,EAAM,MAAM;AAAA,IAAA;AAAA,IAaZ,iBAAAggE;AAAA,IACA,QAAA3zE;AAAA,IACA,cAAA0zE;AAAA,IACA,SAAAD;AAAA,IACA,aAAa,MAAM7tE,EAAYrC,GAAQK,GAAY6vE,CAAO;AAAA,IAC1D,cAAc,MAAMj9C,EAAajzB,GAAQK,GAAY6vE,CAAO;AAAA,EAAA;AAEhE;AC9Ea,MAAAI,KAAwC,CAAC51D,GAAaC,OAC1D;AAAA,EACL,eAAe;AAAA,EACf,aAAa,MAAM,CAAC;AAAA,EACpB,QAAQ,CAAC,EAAE,OAAAzgB,GAAO,OAAAhM,GAAO,UAAA6hF,QAAe;;AAClC,QAAAr1D,MAAQC,KAAOD,MAAQ;AAClB,aAAA,IAAI,IAAIxsB,IAAQ,EAAC2D,IAAAqI,EAAM,CAAC,MAAP,gBAAArI,EAAU,KAAK,IAAI,CAAA,CAAE;AAE/C,eAAWG,KAAQkI,GAAO;AACpB,UAAA61E,EAAS,QAAQp1D,KAAOzsB;AAAO;AAC1B,MAAAA,IAAgB6hF,EAAA,IAAI/9E,EAAK,KAAK,IACzB+9E,EAAA,OAAO/9E,EAAK,KAAK;AAAA,IACjC;AACO,WAAA+9E;AAAA,EACT;AAAA,EACA,WAAW,CAAC,EAAE,UAAAA,EAAA,MAAeA;AAAA,ICnCpBQ,KAAmB,CAACriF,MACxBA,IAAQ,IAAI;ACGd,SAASsiF,GAAmBj/E,IAAS,IAAIk/E,IAAe,QAAQ;AACrE,MAAIC,IAAUn/E,GACVo/E,IAAgBF;AA+Bb,SAAA;AAAA,IACL,gBA/BqB,CAACl/E,GAAiBk/E,OACnCniF,GAASiD,CAAM,MAAaA,IAAAA,IAC5BjD,GAASmiF,CAAY,MAAmBA,IAAAA,IAErC;AAAA,MACL,IAAI;AAAA,MACJ,WAAWzyE,GAAY;AAAA,MACvB,WAAW;AAAA,MACX,OAAO;AAAA,MACP,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAAA,MACA,SAAS;AAAA,MACT,YAAYA,GAAY;AAAA,MACxB,YAAY;AAAA,MACZ,kBAAkB,CAAC;AAAA,MACnB,aAAa,CAAC;AAAA,MACd,qBAAqB,CAAC;AAAA,MACtB,OAAO,CAAC;AAAA,MACR,SAAA0yE;AAAA,MACA,eAAAC;AAAA,IAAA;AAAA,EAKF;AAEJ;ACtCO,SAASC,KAA6B;AAcpC,SAAA;AAAA,IACL,wBAd6B,OACtB;AAAA,MACL,QAAQ,CAAC;AAAA,MACT,eAAe,CAAC;AAAA,MAChB,OAAO,CAAC;AAAA,MACR,aAAa;AAAA,QACX,SAAS,CAAC;AAAA,QACV,UAAU,CAAC;AAAA,QACX,OAAO,CAAC;AAAA,MACV;AAAA,IAAA;AAAA,EAKF;AAEJ;AChBO,SAASC,KAA4B;AAgBnC,SAAA;AAAA,IACL,uBAhB4B,OACrB;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,aAAa,CAAC;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW7yE,GAAY;AAAA,MACvB,YAAYA,GAAY;AAAA,MACxB,eAAe;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EAKX;AAEJ;ACJO,MAAM8yE,KAAgB,CAC3B1lD,GACA2lD,GACAjmD,IAAc,IACdC,IAAuB,IACvB77B,IAAmB,MACnBqC,GACAyI,GACAlG,IAA8B,CAAA,MAEvB,IAAI,QAAQ,CAACszB,GAASiE,MAAW;AAChC,QAAA2lD,IAAkC,EAAE,QAAAD;AAC1C,EAAIjmD,MAAgB,OACNkmD,EAAA,MAAMnmD,GAAqBC,GAAaC,CAAS,IAE1D38B,GAAOc,CAAM,MACJ8hF,EAAA,OAAO,KAAK,UAAU9hF,CAAM,IAEnCk8B,EAAA,EACJ,QAAQ,EAAE,GAAGt3B,GAAS,GAAGk9E,GAAa,EACtC,KAAK,CAACj0E,MACAkuB,GAAkBluB,EAAI,MAAM,IAG7BA,EAAI,OACCqqB,EAAQrqB,EAAI,IAAI,IAErBA,EAAI,WAAWhE,KACVquB,EAAQ,IAAS,IAEnBiE,EAAO,IAAI3yB,GAAA,CAAgB,IARzB2yB,EAAO,IAAI/wB,GAAyByC,EAAI,MAAM,CAAC,CASzD,EACA,MAAM,CAACgI,MACF1L,GAA8B0L,CAAG,IAC5BsmB,EAAO,IAAI7xB,GAAsBuL,CAAG,CAAC,IAE1CrL,GAAoCqL,CAAG,IAClCsmB,EAAO,IAAIxxB,GAAuBkL,GAAKxT,GAAQyI,GAAQ+K,CAAG,CAAC,IAEhEtK,GAA4CsK,CAAG,IAC1CsmB,EAAO,IAAI1wB,GAA+BoK,GAAKA,CAAG,CAAC,IAErDsmB,EAAO,IAAI3yB,GAAeqM,CAAG,CAAC,CACtC;AAAA,CACJ,GCtCGunB,KAAuB,CAACjsB,GAAwBH,IAAmC,WAAsB;AAC7G,QAAM,EAAE,eAAAqrB,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAW,GAAY,iBAAAC,EAAA,IAAoBlB;AACtF,SAAAC,EAAclrB,EAAW,WAAW,GACrBorB,EAAAprB,EAAW,MAAMA,EAAW,WAAW,GACxCurB,EAAAvrB,EAAW,QAAQA,EAAW,UAAU,GAClDlS,GAAU+R,CAAS,KAAGssB,EAAgBtsB,CAAS,GAC5CqsB,EAAW;AACpB,GAEM0kD,KAAwC,CAC5CC,GACAxlD,GACAylD,GACAC,GACAlxE,IAAmC,WACxB;AACX,QAAM,EAAE,eAAAqrB,GAAe,gBAAAE,GAAgB,eAAAG,GAAe,YAAAW,GAAY,iBAAAC,EAAA,IAAoBlB;AACtF,SAAAC,EAAc2lD,CAAW,GACzBzlD,EAAeC,GAAMwlD,CAAW,GAChCtlD,EAAculD,GAAYC,CAAS,GAC/BjjF,GAAU+R,CAAS,KAAGssB,EAAgBtsB,CAAS,GAC5CqsB,EAAW;AACpB,GAOa8kD,KAAoB,OAC/BjmD,GACAN,GACAC,IAAuB,CAAA,GACvBjL,IAAS,MACTwxD,IAAW,IACXpxE,IAAmC,QACnCqxE,IAAY,KACZhgF,GACAyI,GACAw3E,IAAe,IACf19E,IAA8B,OACf;AACf,QAAM44B,IAAav+B,GAAU+R,KAAA,gBAAAA,EAAW,QAAQ,KAAKsxE,IAAgB,YAAY,IAC3EnxE,IAAawf,GAAcC,CAAM;AACvC,EAAAzf,EAAW,cAAckxE,GACzBlxE,EAAW,SAASyf,GACpBzf,EAAW,aAAaixE;AACxB,QAAMG,IAAU5mD,GAAqBC,GAAaC,CAAS,IAAI2B,GACzDglD,IAAU,CAAA;AAEZ,MAAA;AACI,UAAA30E,IAAM,MAAMquB,EAAS,EAAA,IAAIqmD,IAAUnlD,GAAqBjsB,GAAYH,CAAS,GAAGpM,CAAO;AAC7F,QAAI,CAACm3B,GAAkBluB,EAAI,MAAM;AAC/B,aAAO,QAAQ,OAAO,IAAIzC,GAAyByC,EAAI,MAAM,CAAC;AAEhE,QAAIA,EAAI,MAAM;AACZ,YAAM4vB,IAAU5vB,EAAI;AAGhB,UADI20E,EAAA,KAAK,GAAG/kD,EAAQ,IAAI,GACxBN,GAA0BM,CAAO;AAEnC,YADWtsB,EAAA,cAActD,EAAI,KAAK,aAC9BsD,EAAW;AACb,iBAAOA,EAAW,eAAa;AAClB,YAAAA,EAAA;AAEX,kBAAMsxE,KADmB,MAAMvmD,EAAS,EAAA,IAAIqmD,IAAUnlD,GAAqBjsB,GAAYH,CAAS,GAAGpM,CAAO,GACpE;AAE9B,YAAA49E,EAAA,KAAK,GAAGC,EAAa,IAAI,GACjCtxE,EAAW,cAAcsxE,EAAa;AAAA,UACxC;AAAA,iBAEOvlD,GAAkBO,CAAO,GAAG;AAEjC,YADJtsB,EAAW,aAAassB,EAAQ,YAC5BtsB,EAAW,cAAcA,EAAW;AAC/B,iBAAA,QAAQ,QAAQqxE,CAAY;AAErC,cAAM3iD,IAA2B,CAAA,GAC3B6iD,IAAW,KAAK,KAAKvxE,EAAW,aAAaA,EAAW,WAAW;AACzE,iBAASjM,IAAI,GAAGA,IAAIw9E,GAAUx9E;AACnB,UAAA26B,EAAA;AAAA,YACP3D,EAAS,EAAA;AAAA,cACPqmD,IACER;AAAA,gBACE5wE,EAAW;AAAA,gBACXjM;AAAA,gBACAiM,EAAW;AAAA,gBACXA,EAAW;AAAA,gBACXH;AAAA,cACF;AAAA,cACFpM;AAAA,YACF;AAAA,UAAA;AAIS,SADQ,MAAM,QAAQ,IAAIi7B,CAAQ,GAClC,QAAQ,CAAC8iD,MAAiB;AAErC,UAAAH,EAAQ,KAAK,GAAGG,EAAa,KAAK,IAAI;AAAA,QAAA,CACvC;AAAA,MACH;AACW,aAAAxxE,EAAA,mBAAmBtD,EAAI,KAAK,KAAK,QACrC,QAAQ,QAAQ20E,CAAY;AAAA,IACrC;AACI,WAAA30E,EAAI,WAAWhE,KACV,QAAQ,QAAQ,CAAA,CAAO,IAGzB24E;AAAA,WACA3sE,GAAU;AACb,WAAA1L,GAA8B0L,CAAG,IAC5B,QAAQ,OAAO,IAAIvL,GAAsBuL,CAAG,CAAC,IAElDrL,GAAoCqL,CAAG,IAClC,QAAQ,OAAO,IAAIlL,GAAuBkL,GAAKxT,GAAQyI,GAAQ+K,CAAG,CAAC,IAExEtK,GAA4CsK,CAAG,IAC1C,QAAQ,OAAO,IAAIpK,GAA+BoK,GAAKA,CAAG,CAAC,IAE7D,QAAQ,OAAO,IAAIrM,GAAeqM,CAAG,CAAC;AAAA,EAC/C;AACF;AC1IO,SAAS+sE,KAAY;AACnB,SAAA;AAAA,IACL,kBAAAt5E;AAAA,IACA,yBAAAe;AAAA,IACA,0BAAAK;AAAA,IACA,4BAAAS;AAAA,EAAA;AAEJ;ACFA,MAAM2yB,KAAY,eACLG,KAAS;AAEN,SAAA4kD,GAA6C3mD,GAA6B75B,GAAgB;AAgBjG,SAAA;AAAA,IACL,cAhBmB,CAAC8O,GAAwBH,MAC5CusB,GAAwBrB,GAAQ4B,IAAW,CAAA,GAAI3sB,GAAYH,GAAW3O,GAAQ47B,EAAM;AAAA,IAgBpF,UAde,CAACuC,MAAevE,GAAqBC,GAAQ4B,KAAY,QAAQ,EAAE,IAAA0C,EAAA,GAAMn+B,GAAQ47B,EAAM;AAAA,IAetG,WAbgB,CAAClzB,MAAkB;AAC7B,YAAA0c,IAAO5mB,GAAkBkK,EAAK,aAAa,EAC9C,MAAM,CAAC,EACP,QAAQ,UAAU,QAAQ;AAEtB,aAAAmsD,GAAsBh7B,GAAQnxB,GAAM+yB,KAAY,UAAU,EAAE,MAAArW,EAAQ,GAAAplB,GAAQ47B,EAAM;AAAA,IAAA;AAAA,IASzF,WANgB,CAACuC,MAAes7B,GAAsB5/B,GAAQ4B,KAAY,QAAQ,EAAE,IAAA0C,EAAA,GAAMn+B,GAAQ47B,EAAM;AAAA,EAMxG;AAEJ;AC/BO,MAAM6kD,KAAgC;AAI7B,SAAAC,GACdC,IAAqC,IACrC;AACM,QAAA,EAAE,GAAAxkF,MAAMC,MAERwkF,IAAqB1+E,EAA4B;AAAA,IAEnD;AAAA,MACE,OAAO;AAAA,MACP,OAAO/F,EAAE,0CAA0C;AAAA,IACrD;AAAA,IAEF,GAAGwkF;AAAA,EAAA,CACJ;AAMM,SAAA;AAAA,IACL,oBAAAC;AAAA,IACA,sBAN2B,CAACjkF,MACrBikF,EAAmB,MAAM,KAAK,CAACngF,MAASA,EAAK,UAAU9D,CAAK;AAAA,EAKnE;AAEJ;AC+BA,MAAekkF,KAAA;AAAA,EACb,QAAuCC,GAAUv+E,GAAiC;AAC5E,IAAAu+E,EAAA,QAAQphF,IAAmB6C,EAAQ,WAAW,GAC9Cu+E,EAAA,QAAQnhF,IAAyB4C,EAAQ,iBAAiB,GAC9Du+E,EAAI,QAAQlhF,IAA0B2C,EAAQ,UAAU,SAAS,GACjEu+E,EAAI,QAAQjhF,IAAuB0C,EAAQ,UAAU,OAAO,GACxDu+E,EAAA,UAAU,OAAOC,EAAG,GACxBD,EAAI,IAAIE,IAAc,EAAE,eAAe,gBAAiB,CAAA,GACxD97B,GAA4B3iD,EAAQ,KAAK,GACzC22B,GAA8B32B,EAAQ,OAAO;AAAA,EAC/C;AACF,GCzEa0+E,KAAkB,CAAIv9D,GAAiB/mB,MAAa;AACzD,QAAA2B,IAAQolB,EAAM,QAAQ/mB,CAAK;AACjC,MAAI2B,MAAU,IAAI;AAChB,IAAAolB,EAAM,KAAK/mB,CAAK;AAChB;AAAA,EACF;AACM,EAAA+mB,EAAA,OAAOplB,GAAO,CAAC;AACvB,GAEa4iF,KAAgB,CAACt4E,GAAgC0Z,IAAY,SAAS1Z,EAAO,KAAK0Z,CAAS,GAE3F6+D,KAAgB,IAAO7sE,MAAgB,MAAM,KAAK,GAAGA,CAAI,GAIzD8sE,KAAe,CAAIviE,GAAuBsH,IAAW,OACzDtH,EAAM,OAAO,CAAC7Y,GAAQqa,MACvB,MAAM,QAAQA,CAAO,IAAU+gE,GAAa/gE,GAAS8F,CAAG,KAC5DA,EAAI,KAAK9F,CAAO,GACT8F,IACN,CAAE,CAAA,GAGMk7D,KAAyB,CAAIC,GAAaC,MAAyB;AAC1E,MAAAD,EAAO,WAAWC,EAAO;AACpB,WAAA;AAIT,QAAMC,IAAeF,EAAO,MAAM,EAAE,KAAK,GACnCG,IAAeF,EAAO,MAAM,EAAE,KAAK;AAGzC,WAAS1+E,IAAI,GAAGA,IAAI2+E,EAAa,QAAQ3+E;AACvC,QAAI2+E,EAAa3+E,CAAC,MAAM4+E,EAAa5+E,CAAC;AAC7B,aAAA;AAIJ,SAAA;AACT,GCtCa6+E,KAAmC,CAAC/gF,MAAiB;AAChE,UAAQ,aAAa,QAAQ,OAAO,IAAIA,CAAI;AAC9C,GAEaghF,KAAmC,CAACv2E,GAAgB+kC,MAAyB;AAClF,QAAAyxC,IAAWx2E,EAAO,QAAQ+kC,CAAE;AAClC,EAAAuxC,GAAiCE,EAAS,IAAI;AAChD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCUer2D,KAAA;AAAA,EACb,QAAQ;AAAA,IAAA,OACNs2D;AAAAA,IAAA,QACAvP;AAAAA,IAAA,OACApjE;AAAAA,IAAA,QACAlP;AAAAA,IAAA,UACA8hF;AAAAA,IAAA,KACAC;AAAAA,IAAA,KACAC;AAAAA,IAAA,YACA/uE;AAAAA,IAAA,iBACAgvE;AAAAA,IAAA,aACAC;AAAAA,IAAA,eACAC;AAAAA,IAAA,MACAt4C;AAAAA,IAAA,UACAe;AAAAA,IAAA,UACAw3C;AAAAA,EACF;AAAA,EACA,UAAUC;AAAAA,EACV,OAAO;AAAA,IACL,eAAe;AAAA,MACb,GAAGC;AAAAA,IACL;AAAA,IACA,uBAAuB;AAAA,MACrB,GAAGC;AAAAA,IACL;AAAA,IACA,cAAc;AAAA,MACZ,GAAGC;AAAAA,IACL;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GC7BeC,KAAA;AAAA,EACb,QAAQ;AAAA,IAAA,OACNZ;AAAAA,IAAA,QACAvP;AAAAA,IAAA,OACApjE;AAAAA,IAAA,QACAlP;AAAAA,IAAA,UACA8hF;AAAAA,IAAA,KACAC;AAAAA,IAAA,KACAC;AAAAA,IAAA,YACA/uE;AAAAA,IAAA,iBACAgvE;AAAAA,IAAA,aACAC;AAAAA,IAAA,eACAC;AAAAA,IAAA,MACAt4C;AAAAA,IAAA,UACAe;AAAAA,IAAA,UACAw3C;AAAAA,EACF;AAAA,EACA,UAAUC;AAAAA,EACV,OAAO;AAAA,IACL,eAAe;AAAA,MACb,GAAGC;AAAAA,IACL;AAAA,IACA,uBAAuB;AAAA,MACrB,GAAGC;AAAAA,IACL;AAAA,IACA,cAAc;AAAA,MACZ,GAAGC;AAAAA,IACL;AAAA,EACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GC7Ben3D,KAAA;AAAA,EACb,QAAQ;AAAA,IACN,OAAAw2D;AAAA,IAAA,QACAvP;AAAAA,IAAA,OACApjE;AAAAA,IAAA,QACAlP;AAAAA,IACA,UAAA8hF;AAAA,IACA,KAAAC;AAAA,IACA,KAAAC;AAAA,IACA,YAAA/uE;AAAA,IACA,iBAAAgvE;AAAA,IACA,aAAAC;AAAA,IACA,eAAAC;AAAA,IACA,MAAAt4C;AAAA,IACA,UAAAe;AAAA,IACA,UAAAw3C;AAAA,EACF;AAAA,EACA,UAAUC;AAAA,EACV,OAAO;AAAA,IACL,eAAe;AAAA,MACb,GAAGC;AAAA,IACL;AAAA,IACA,uBAAuB;AAAA,MACrB,GAAGC;AAAA,IACL;AAAA,IACA,cAAc;AAAA,MACZ,GAAGC;AAAA,IACL;AAAA,EACF;AACF,GC9CaE,KAAyB,OAwH7B;AAAA,EACL,eAXoB,OACb;AAAA,IACL,aAAaC;AAAAA,IACb,eAAeA;AAAAA,IACf,cAAcA;AAAAA,IACd,UAAUA;AAAAA,IACV,aAAaC;AAAAA,EAAA;AAAA,EAMf,gBA5EqB,OACd;AAAA,IACL,QAAQ,CAAC;AAAA,IACT,YAAY;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,eAAe;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,kBAAkB;AAAA,MAClB,YAAY;AAAA,IACd;AAAA,IACA,mBAAmB;AAAA,MACjB,OAAO;AAAA,IACT;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,eAAe;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EAAA;AAAA,EAiBF,aA1HkB,OACX;AAAA,IACL,cAAc;AAAA,IACd,YAAY;AAAA,MACV,QAAQ,CAAC;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,cAAc;AAAA,UACd,SAAS;AAAA,UACT,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,cAAc;AAAA,UACd,SAAS;AAAA,UACT,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,QACA,WAAW,CAAC;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,SAAS;AAAA,UACT,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,QACA,WAAW,CAAC;AAAA,MACd;AAAA,IACF;AAAA,EAAA;AAiFF;AC7HJ,eAAsBC,KAAkB;AAGtC,GAFsB,MAAM,OAAO,6BAAe,oBAEpC,KAAK;AAAA,IACjB,QAAQ;AAAA,MACN,UAAU,CAAC,6CAA6C;AAAA,IAC1D;AAAA;AAAA,EAAA,CAED;AACH;ACJO,SAASC,KAAsB;AAC9B,QAAAC,IAAa,CAAC7D,GAA+Bl/E,OAC1C;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ0wB,GAAU;AAAA,IAClB,QAAQ;AAAA,IACR,8BAA8B;AAAA,IAC9B,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,0BAA0B;AAAA,IAC1B,WAAWjkB,GAAY;AAAA,IACvB,YAAYA,GAAY;AAAA,IACxB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAeyyE;AAAA,IACf,SAASl/E;AAAA,EAAA;AAcN,SAAA;AAAA,IACL,YAAA+iF;AAAA,IACA,sBAZ2B,CAAC/iF,OACrB;AAAA,MACL,GAAG+iF,EAAW,qBAAqB/iF,CAAM;AAAA,MAEvC,cAAc;AAAA,MACd,eAAe;AAAA,IACjB;AAAA,EAMF;AAEJ;AC3BA,MAAMqmD,KAASnkD,EAAmB,IAAI;AAE/B,SAAS8gF,GAAe7yC,GAA6B;AACtD,EAAAA,EAAG,MAAM,eACXkW,GAAO,QAAQlW,EAAG,MAAM,WAAW,SAAS;AAG9C,QAAM8yC,IAAqB,MAAMpmF,GAAOwpD,GAAO,KAAK,GAC9C68B,IAAuB,MAAM78B,GAAO,UAAU,WAC9C88B,IAAkC,MAAM98B,GAAO,UAAU,6BACzD+8B,IAA+B,MAAM/8B,GAAO,UAAU,0BACtDg9B,IAAuB,MAAMh9B,GAAO,UAAU;AAE7C,SAAA;AAAA,IACL,QAAQh6B,GAASg6B,EAAM;AAAA,IACvB,oBAAA48B;AAAA,IACA,sBAAAC;AAAA,IACA,iCAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA;AAEJ;","x_google_ignoreList":[13,24,25,47,48,49,50,51,52,53,54,55,56,57,58,59,60,149,150,151,152,153,154,155,194,266]}
|