@firecms/collection_editor 3.0.0-canary.24 → 3.0.0-canary.241
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/LICENSE +114 -21
- package/README.md +165 -1
- package/dist/ConfigControllerProvider.d.ts +1 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +10109 -4774
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +10795 -3
- package/dist/index.umd.js.map +1 -1
- package/dist/types/collection_editor_controller.d.ts +3 -2
- package/dist/types/collection_inference.d.ts +1 -1
- package/dist/types/config_permissions.d.ts +2 -2
- package/dist/types/persisted_collection.d.ts +1 -1
- package/dist/ui/CollectionViewHeaderAction.d.ts +3 -2
- package/dist/ui/EditorCollectionActionStart.d.ts +2 -0
- package/dist/ui/PropertyAddColumnComponent.d.ts +3 -1
- package/dist/ui/collection_editor/CollectionDetailsForm.d.ts +3 -1
- package/dist/ui/collection_editor/CollectionEditorDialog.d.ts +3 -2
- package/dist/ui/collection_editor/CollectionEditorWelcomeView.d.ts +2 -2
- package/dist/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +1 -1
- package/dist/ui/collection_editor/LayoutModeSwitch.d.ts +5 -0
- package/dist/ui/collection_editor/PropertyEditView.d.ts +8 -0
- package/dist/ui/collection_editor/PropertyTree.d.ts +9 -9
- package/dist/ui/collection_editor/SubcollectionsEditTab.d.ts +1 -1
- package/dist/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +7 -0
- package/dist/ui/collection_editor/properties/MarkdownPropertyField.d.ts +4 -0
- package/dist/ui/collection_editor/properties/StringPropertyField.d.ts +1 -1
- package/dist/useCollectionEditorPlugin.d.ts +8 -11
- package/dist/utils/collections.d.ts +6 -0
- package/package.json +24 -35
- package/src/ConfigControllerProvider.tsx +64 -66
- package/src/index.ts +1 -0
- package/src/types/collection_editor_controller.tsx +6 -5
- package/src/types/collection_inference.ts +1 -1
- package/src/types/config_permissions.ts +1 -1
- package/src/types/persisted_collection.ts +2 -3
- package/src/ui/CollectionViewHeaderAction.tsx +10 -5
- package/src/ui/EditorCollectionAction.tsx +10 -63
- package/src/ui/EditorCollectionActionStart.tsx +88 -0
- package/src/ui/HomePageEditorCollectionAction.tsx +19 -13
- package/src/ui/NewCollectionButton.tsx +1 -1
- package/src/ui/NewCollectionCard.tsx +3 -3
- package/src/ui/PropertyAddColumnComponent.tsx +11 -6
- package/src/ui/collection_editor/CollectionDetailsForm.tsx +112 -18
- package/src/ui/collection_editor/CollectionEditorDialog.tsx +101 -34
- package/src/ui/collection_editor/CollectionEditorWelcomeView.tsx +13 -28
- package/src/ui/collection_editor/CollectionPropertiesEditorForm.tsx +41 -39
- package/src/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +6 -5
- package/src/ui/collection_editor/EnumForm.tsx +11 -7
- package/src/ui/collection_editor/GetCodeDialog.tsx +56 -26
- package/src/ui/collection_editor/LayoutModeSwitch.tsx +54 -0
- package/src/ui/collection_editor/PropertyEditView.tsx +257 -79
- package/src/ui/collection_editor/PropertyFieldPreview.tsx +7 -10
- package/src/ui/collection_editor/PropertyTree.tsx +9 -7
- package/src/ui/collection_editor/SubcollectionsEditTab.tsx +26 -19
- package/src/ui/collection_editor/UnsavedChangesDialog.tsx +3 -5
- package/src/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +33 -9
- package/src/ui/collection_editor/import/CollectionEditorImportMapping.tsx +42 -9
- package/src/ui/collection_editor/properties/BlockPropertyField.tsx +32 -20
- package/src/ui/collection_editor/properties/DateTimePropertyField.tsx +54 -47
- package/src/ui/collection_editor/properties/EnumPropertyField.tsx +3 -1
- package/src/ui/collection_editor/properties/MapPropertyField.tsx +7 -6
- package/src/ui/collection_editor/properties/MarkdownPropertyField.tsx +139 -0
- package/src/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -0
- package/src/ui/collection_editor/properties/RepeatPropertyField.tsx +0 -1
- package/src/ui/collection_editor/properties/StoragePropertyField.tsx +34 -19
- package/src/ui/collection_editor/properties/StringPropertyField.tsx +1 -10
- package/src/ui/collection_editor/properties/UrlPropertyField.tsx +1 -0
- package/src/ui/collection_editor/properties/validation/ValidationPanel.tsx +2 -2
- package/src/ui/collection_editor/templates/pages_template.ts +1 -6
- package/src/ui/collection_editor/utils/strings.ts +13 -6
- package/src/useCollectionEditorPlugin.tsx +32 -32
- package/src/utils/collections.ts +37 -0
- package/dist/ui/RootCollectionSuggestions.d.ts +0 -3
- package/dist/ui/collection_editor/PropertySelectItem.d.ts +0 -8
- package/src/ui/RootCollectionSuggestions.tsx +0 -63
- package/src/ui/collection_editor/PropertySelectItem.tsx +0 -32
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/ui/collection_editor/CollectionYupValidation.tsx","../src/ui/collection_editor/CollectionDetailsForm.tsx","../src/ui/collection_editor/util.ts","../src/ui/collection_editor/EnumForm.tsx","../src/ui/collection_editor/SwitchControl.tsx","../src/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/StringPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ValidationPanel.tsx","../src/ui/collection_editor/properties/EnumPropertyField.tsx","../src/ui/collection_editor/properties/StoragePropertyField.tsx","../src/utils/entities.ts","../src/ui/collection_editor/PropertyFieldPreview.tsx","../src/ui/collection_editor/PropertyTree.tsx","../src/ui/collection_editor/properties/MapPropertyField.tsx","../src/ui/collection_editor/properties/RepeatPropertyField.tsx","../src/ui/collection_editor/properties/CommonPropertyFields.tsx","../src/ui/collection_editor/properties/StringPropertyField.tsx","../src/ui/collection_editor/properties/BooleanPropertyField.tsx","../src/ui/collection_editor/properties/BlockPropertyField.tsx","../src/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx","../src/ui/collection_editor/properties/NumberPropertyField.tsx","../src/ui/collection_editor/properties/ReferencePropertyField.tsx","../src/ui/collection_editor/properties/DateTimePropertyField.tsx","../src/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx","../src/ui/collection_editor/properties/KeyValuePropertyField.tsx","../src/ui/collection_editor/utils/update_property_for_widget.ts","../src/ui/collection_editor/PropertySelectItem.tsx","../src/ui/collection_editor/properties/UrlPropertyField.tsx","../src/ui/collection_editor/utils/supported_fields.tsx","../src/ui/collection_editor/PropertyEditView.tsx","../src/ui/collection_editor/utils/strings.ts","../src/ui/collection_editor/GetCodeDialog.tsx","../src/ui/collection_editor/CollectionPropertiesEditorForm.tsx","../src/ui/collection_editor/UnsavedChangesDialog.tsx","../src/ui/collection_editor/EntityCustomViewsSelectDialog.tsx","../src/ui/collection_editor/SubcollectionsEditTab.tsx","../src/ui/collection_editor/templates/products_template.ts","../src/ui/collection_editor/templates/blog_template.ts","../src/ui/collection_editor/templates/users_template.ts","../src/ui/collection_editor/templates/pages_template.ts","../src/ui/collection_editor/CollectionEditorWelcomeView.tsx","../src/ui/collection_editor/import/CollectionEditorImportMapping.tsx","../src/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx","../src/ui/collection_editor/import/clean_import_data.ts","../src/ui/collection_editor/CollectionEditorDialog.tsx","../src/ConfigControllerProvider.tsx","../src/useCollectionEditorController.tsx","../src/useCollectionsConfigController.tsx","../src/ui/EditorCollectionAction.tsx","../src/ui/HomePageEditorCollectionAction.tsx","../src/ui/NewCollectionCard.tsx","../src/ui/RootCollectionSuggestions.tsx","../src/ui/CollectionViewHeaderAction.tsx","../src/ui/PropertyAddColumnComponent.tsx","../src/ui/NewCollectionButton.tsx","../src/useCollectionEditorPlugin.tsx","../src/ui/MissingReferenceWidget.tsx"],"sourcesContent":["import * as Yup from \"yup\";\n\nexport const YupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\"),\n path: Yup.string().required(\"Required\")\n});\n","import React, { useEffect, useState } from \"react\";\nimport { EntityCollection, FieldCaption, IconForView, SearchIconsView, singular, toSnakeCase, } from \"@firecms/core\";\nimport {\n Autocomplete,\n AutocompleteItem,\n BooleanSwitchWithLabel,\n Chip,\n cn,\n Container,\n DebouncedTextField,\n Dialog,\n ExpandablePanel,\n IconButton,\n Select,\n SelectItem,\n SettingsIcon,\n TextField,\n Tooltip,\n Typography,\n useAutoComplete\n} from \"@firecms/ui\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\n\nexport function CollectionDetailsForm({\n isNewCollection,\n reservedGroups,\n existingPaths,\n existingIds,\n groups,\n parentCollection\n }: {\n isNewCollection: boolean,\n reservedGroups?: string[];\n existingPaths?: string[];\n existingIds?: string[];\n groups: string[] | null;\n parentCollection?: EntityCollection;\n parentCollectionIds?: string[];\n}) {\n\n const groupRef = React.useRef<HTMLInputElement>(null);\n const {\n values,\n setFieldValue,\n handleChange,\n touched,\n errors,\n setFieldTouched,\n isSubmitting,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [iconDialogOpen, setIconDialogOpen] = useState(false);\n const [advancedPanelExpanded, setAdvancedPanelExpanded] = useState(false);\n\n const updateName = (name: string) => {\n setFieldValue(\"name\", name);\n\n const pathTouched = getIn(touched, \"path\");\n if (!pathTouched && isNewCollection && name) {\n setFieldValue(\"path\", toSnakeCase(name));\n }\n\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && isNewCollection && name) {\n setFieldValue(\"id\", toSnakeCase(name));\n }\n\n const singularNameTouched = getIn(touched, \"singularName\");\n if (!singularNameTouched && isNewCollection && name) {\n setFieldValue(\"singularName\", singular(name));\n }\n\n };\n\n useEffect(() => {\n if (errors.id) {\n setAdvancedPanelExpanded(true);\n }\n }, [errors.id]);\n\n const collectionIcon = <IconForView collectionOrView={values}/>;\n\n const groupOptions = groups?.filter((group) => !reservedGroups?.includes(group));\n\n const {\n inputFocused,\n autoCompleteOpen,\n setAutoCompleteOpen\n } = useAutoComplete({\n ref: groupRef\n });\n\n const isSubcollection = !!parentCollection;\n\n let customIdValue: \"true\" | \"false\" | \"optional\" | \"code_defined\" | undefined;\n if (typeof values.customId === \"object\") {\n customIdValue = \"code_defined\";\n } else if (values.customId === true) {\n customIdValue = \"true\";\n } else if (values.customId === false) {\n customIdValue = \"false\";\n } else if (values.customId === \"optional\") {\n customIdValue = \"optional\";\n }\n\n const showErrors = submitCount > 0;\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <div\n className=\"flex flex-row py-2 pt-3 items-center\">\n <Typography variant={!isNewCollection ? \"h5\" : \"h4\"} className={\"flex-grow\"}>\n {isNewCollection ? \"New collection\" : `${values?.name} collection`}\n </Typography>\n <Tooltip title={\"Change icon\"}>\n <IconButton\n shape={\"square\"}\n onClick={() => setIconDialogOpen(true)}>\n {collectionIcon}\n </IconButton>\n </Tooltip>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n </div>\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n <div className={\"col-span-12\"}>\n <TextField\n value={values.name ?? \"\"}\n onChange={(e: any) => updateName(e.target.value)}\n label={\"Name\"}\n required\n error={showErrors && Boolean(errors.name)}/>\n <FieldCaption error={touched.name && Boolean(errors.name)}>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of in this collection, usually a plural name (e.g. Products)\"}\n </FieldCaption>\n </div>\n\n <div className={cn(\"col-span-12 \", isSubcollection ? \"\" : \"sm:col-span-8\")}>\n <Field name={\"path\"}\n as={DebouncedTextField}\n label={\"Path\"}\n disabled={!isNewCollection}\n required\n error={showErrors && Boolean(errors.path)}/>\n\n <FieldCaption error={touched.path && Boolean(errors.path)}>\n {touched.path && Boolean(errors.path)\n ? errors.path\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"Path that this collection is stored in, in the database\"}\n </FieldCaption>\n\n </div>\n\n {!isSubcollection && <div className={\"col-span-12 sm:col-span-4 relative\"}>\n\n <TextField error={showErrors && Boolean(errors.group)}\n disabled={isSubmitting}\n value={values.group ?? \"\"}\n autoComplete=\"off\"\n onChange={(event) => setFieldValue(\"group\", event.target.value)}\n name={\"group\"}\n inputRef={groupRef}\n label=\"Group\"/>\n <Autocomplete\n open={autoCompleteOpen && (groupOptions ?? []).length > 0}\n setOpen={setAutoCompleteOpen}>\n {groupOptions?.map((group, index) => {\n return <AutocompleteItem\n key={index + \"_\" + group}\n onClick={() => {\n setAutoCompleteOpen(false);\n setFieldValue(\"group\", group ?? null);\n }}\n >\n <div className={\"flex-grow\"}>\n {group}\n </div>\n </AutocompleteItem>;\n })}\n </Autocomplete>\n <FieldCaption>\n {showErrors && Boolean(errors.group) ? errors.group : \"Group of the collection\"}\n </FieldCaption>\n </div>}\n\n <div className={\"col-span-12\"}>\n <ExpandablePanel\n expanded={advancedPanelExpanded}\n onExpandedChange={setAdvancedPanelExpanded}\n title={\n <div className=\"flex flex-row text-gray-500\">\n <SettingsIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n Advanced\n </Typography>\n </div>}\n initiallyExpanded={false}>\n <div className={\"grid grid-cols-12 gap-4 p-4\"}>\n\n <div className={\"col-span-12\"}>\n <Field name={\"id\"}\n as={DebouncedTextField}\n disabled={!isNewCollection}\n label={\"Collection id\"}\n error={showErrors && Boolean(errors.id)}/>\n <FieldCaption error={touched.id && Boolean(errors.id)}>\n {touched.id && Boolean(errors.id) ? errors.id : \"This id identifies this collection\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.singularName)}\n name={\"singularName\"}\n aria-describedby={\"singularName-helper\"}\n onChange={(e) => {\n setFieldTouched(\"singularName\", true);\n return handleChange(e);\n }}\n value={values.singularName ?? \"\"}\n label={\"Singular name\"}/>\n <FieldCaption error={showErrors && Boolean(errors.singularName)}>\n {showErrors && Boolean(errors.singularName) ? errors.singularName : \"Optionally define a singular name for your entities\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.description)}\n name=\"description\"\n value={values.description ?? \"\"}\n onChange={handleChange}\n multiline\n rows={2}\n aria-describedby=\"description-helper-text\"\n label=\"Description\"\n />\n <FieldCaption error={showErrors && Boolean(errors.description)}>\n {showErrors && Boolean(errors.description) ? errors.description : \"Description of the collection, you can use markdown\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <Select\n name=\"defaultSize\"\n label=\"Default row size\"\n position={\"item-aligned\"}\n onChange={handleChange}\n value={values.defaultSize ?? \"\"}\n renderValue={(value: any) => value.toUpperCase()}\n >\n {[\"xs\", \"s\", \"m\", \"l\", \"xl\"].map((value) => (\n <SelectItem\n key={`size-select-${value}`}\n value={value}>\n {value.toUpperCase()}\n </SelectItem>\n ))}\n </Select>\n </div>\n <div className={\"col-span-12\"}>\n <Select\n name=\"customId\"\n label=\"Data IDs generation\"\n position={\"item-aligned\"}\n disabled={customIdValue === \"code_defined\"}\n onValueChange={(v) => {\n if (v === \"code_defined\")\n throw new Error(\"This should not happen\");\n else if (v === \"true\")\n setFieldValue(\"customId\", true);\n else if (v === \"false\")\n setFieldValue(\"customId\", false);\n else if (v === \"optional\")\n setFieldValue(\"customId\", \"optional\");\n }}\n value={customIdValue ?? \"\"}\n renderValue={(value: any) => {\n if (value === \"code_defined\")\n return \"Code defined\";\n else if (value === \"true\")\n return \"Users must define an ID\";\n else if (value === \"optional\")\n return \"Users can define an ID, but it is not required\";\n else\n return \"Document ID is generated automatically\";\n }}\n >\n <SelectItem value={\"false\"}>\n Document ID is generated automatically\n </SelectItem>\n <SelectItem value={\"true\"}>\n Users must define an ID\n </SelectItem>\n <SelectItem value={\"optional\"}>\n Users can define an ID, but it is not required\n </SelectItem>\n </Select>\n </div>\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label=\"Collection group\"\n onValueChange={(v) => setFieldValue(\"collectionGroup\", v)}\n value={values.collectionGroup ?? false}\n />\n <FieldCaption>\n A collection group consists of all collections with the same path. This allows\n you\n to query over multiple collections at once.\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label=\"Enable text search for this collection\"\n onValueChange={(v) => setFieldValue(\"textSearchEnabled\", v)}\n value={values.textSearchEnabled ?? false}\n />\n <FieldCaption>\n Allow text search for this collection. If you have not specified a text search\n delegate, this will use the built-in local text search. This is not recommended\n for large collections, as it may incur in performance and cost issues.\n </FieldCaption>\n </div>\n </div>\n </ExpandablePanel>\n\n </div>\n\n </div>\n\n <div style={{ height: \"52px\" }}/>\n\n <Dialog\n open={iconDialogOpen}\n onOpenChange={setIconDialogOpen}\n maxWidth={\"xl\"}\n fullWidth\n >\n <div className={\"p-4 overflow-auto min-h-[200px]\"}>\n <SearchIconsView selectedIcon={values.icon}\n onIconSelected={(icon: string) => {\n setIconDialogOpen(false);\n setFieldValue(\"icon\", icon);\n }}/>\n </div>\n\n </Dialog>\n\n </Container>\n </div>\n );\n}\n","export function idToPropertiesPath(id: string): string {\n return \"properties.\" + id.replaceAll(\".\", \".properties.\");\n}\n\nexport function namespaceToPropertiesPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".properties\"\n : \"properties\";\n}\n\nexport function namespaceToPropertiesOrderPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".propertiesOrder\"\n : \"propertiesOrder\";\n}\n\nexport function getFullId(propertyKey: string, propertyNamespace?: string): string {\n return propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n}\n\nexport function getFullIdPath(propertyKey: string, propertyNamespace?: string): string {\n const keyWithNamespace = propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n return idToPropertiesPath(keyWithNamespace);\n}\n","import React, { useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { ArrayContainer, EnumValueConfig, EnumValues, FieldCaption, } from \"@firecms/core\";\nimport {\n AutoAwesomeIcon,\n Badge,\n Button,\n CircularProgress,\n DebouncedTextField,\n Dialog,\n DialogActions,\n DialogContent,\n IconButton,\n ListIcon,\n Paper,\n SettingsIcon,\n Typography\n} from \"@firecms/ui\";\nimport { extractEnumFromValues } from \"@firecms/schema_inference\";\nimport { Field, Formex, getIn, useCreateFormex, useFormex } from \"@firecms/formex\";\n\ntype EnumFormProps = {\n enumValues: EnumValueConfig[];\n onValuesChanged?: (enumValues: EnumValueConfig[]) => void;\n onError?: (error: boolean) => void;\n updateIds: boolean;\n disabled: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<string[]>;\n};\n\nexport function EnumForm({\n enumValues,\n onValuesChanged,\n onError,\n updateIds,\n disabled,\n allowDataInference,\n getData\n }: EnumFormProps) {\n\n const formex = useCreateFormex<{\n enumValues: EnumValueConfig[]\n }>({\n initialValues: { enumValues },\n validateOnChange: true,\n validation: (values) => {\n const errors: any = {};\n if (values.enumValues) {\n values.enumValues.forEach((enumValue, index) => {\n if (!enumValue?.label) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].label = \"You must specify a label for this enum value entry\";\n }\n if (!enumValue?.id) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].id = \"You must specify an ID for this enum value entry\";\n }\n });\n }\n const hasError = Boolean(errors?.enumValues && Object.keys(errors?.enumValues).length > 0);\n onError?.(hasError);\n return errors;\n }\n });\n\n const { values, errors } = formex;\n\n useEffect(() => {\n if (onValuesChanged) {\n onValuesChanged(values.enumValues);\n }\n }, [values.enumValues]);\n\n return <Formex value={formex}>\n <EnumFormFields enumValuesPath={\"enumValues\"}\n values={values}\n errors={errors}\n shouldUpdateId={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}/>\n </Formex>\n\n}\n\ntype EnumFormFieldsProps = {\n values: {\n enumValues: EnumValueConfig[]\n };\n errors: any;\n enumValuesPath: string;\n shouldUpdateId: boolean;\n disabled: boolean;\n getData?: () => Promise<string[]>;\n allowDataInference?: boolean;\n};\n\n// const EnumFormFields = React.memo(\nfunction EnumFormFields({\n values,\n errors,\n disabled,\n enumValuesPath,\n shouldUpdateId,\n allowDataInference,\n getData,\n }: EnumFormFieldsProps) {\n\n const {\n setFieldValue\n } = useFormex();\n\n const [lastInternalIdAdded, setLastInternalIdAdded] = React.useState<number | undefined>();\n const [editDialogIndex, setEditDialogIndex] = React.useState<number | undefined>();\n const [inferring, setInferring] = React.useState(false);\n\n const inferredValuesRef = React.useRef(new Set());\n const inferredValues = inferredValuesRef.current;\n\n const buildEntry = (index: number, internalId: number) => {\n const justAdded = lastInternalIdAdded === internalId;\n const entryError = errors?.enumValues && errors?.enumValues[index];\n return <EnumEntry index={index}\n disabled={disabled}\n enumValuesPath={enumValuesPath}\n autoFocus={justAdded}\n entryError={entryError}\n shouldUpdateId={shouldUpdateId || justAdded}\n onDialogOpen={() => setEditDialogIndex(index)}\n inferredEntry={inferredValues.has(values.enumValues[index]?.id as string)}\n key={`${internalId}`}/>;\n };\n\n const inferValues = async () => {\n if (!getData)\n return;\n setInferring(true);\n getData?.().then((data) => {\n if (!data)\n return;\n\n const flatData = data.flat();\n\n const fieldData = Array.from(new Set(flatData));\n\n const currentEnumValues = values.enumValues;\n const foundEnumValues = extractEnumFromValues(fieldData);\n\n // add only new enum values\n const newEnumValues = foundEnumValues.filter((enumValue) => {\n return !currentEnumValues?.some((v: any) => v.id === enumValue.id);\n });\n\n newEnumValues.forEach((enumValue) => {\n inferredValues.add(enumValue.id);\n });\n setFieldValue(enumValuesPath, [...newEnumValues, ...currentEnumValues], true);\n }).catch(e => {\n console.error(e);\n })\n .finally(() => setInferring(false));\n }\n\n return (\n <div className={\"col-span-12\"}>\n <div className=\"ml-3.5 flex flex-row items-center\">\n <ListIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2 grow\">\n Values\n </Typography>\n {allowDataInference &&\n <Button loading={inferring}\n disabled={disabled || inferring}\n variant={\"text\"}\n size={\"small\"}\n onClick={inferValues}>\n {inferring ? <CircularProgress size={\"small\"}/> : <AutoAwesomeIcon/>}\n Infer values from data\n </Button>}\n </div>\n\n <Paper className=\"p-4 m-1\">\n\n <ArrayContainer droppableId={enumValuesPath}\n addLabel={\"Add enum value\"}\n value={values.enumValues}\n disabled={disabled}\n size={\"small\"}\n buildEntry={buildEntry}\n onInternalIdAdded={setLastInternalIdAdded}\n includeAddButton={true}\n onValueChange={(value) => setFieldValue(enumValuesPath, value)}\n newDefaultEntry={{ id: \"\", label: \"\" }}/>\n\n <EnumEntryDialog index={editDialogIndex}\n open={editDialogIndex !== undefined}\n enumValuesPath={enumValuesPath}\n onClose={() => setEditDialogIndex(undefined)}/>\n </Paper>\n </div>\n );\n}\n\ntype EnumEntryProps = {\n index: number,\n enumValuesPath: string,\n shouldUpdateId: boolean,\n autoFocus: boolean,\n onDialogOpen: () => void;\n disabled: boolean;\n inferredEntry?: boolean;\n entryError?: { label?: string, id?: string }\n};\n\nconst EnumEntry = React.memo(\n function EnumEntryInternal({\n index,\n shouldUpdateId: updateId,\n enumValuesPath,\n autoFocus,\n onDialogOpen,\n disabled,\n inferredEntry,\n entryError\n }: EnumEntryProps) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<EnumValues>();\n\n const shouldUpdateIdRef = React.useRef(!getIn(values, `${enumValuesPath}[${index}].id`));\n const shouldUpdateId = updateId || shouldUpdateIdRef.current;\n\n const idValue = getIn(values, `${enumValuesPath}[${index}].id`);\n const labelValue = getIn(values, `${enumValuesPath}[${index}].label`);\n\n const currentLabelRef = React.useRef(labelValue);\n\n React.useEffect(() => {\n if ((currentLabelRef.current === idValue || !idValue) && shouldUpdateId) {\n setFieldValue(`${enumValuesPath}[${index}].id`, labelValue);\n }\n currentLabelRef.current = labelValue;\n }, [labelValue]);\n\n return (\n <>\n <div className={\"flex w-full align-center justify-center\"}>\n <Field name={`${enumValuesPath}[${index}].label`}\n as={DebouncedTextField}\n className={\"flex-grow\"}\n required\n disabled={disabled}\n size=\"small\"\n autoFocus={autoFocus}\n autoComplete=\"off\"\n endAdornment={inferredEntry && <AutoAwesomeIcon size={\"small\"}/>}\n error={Boolean(entryError?.label)}/>\n\n {!disabled &&\n <Badge color={\"error\"} invisible={!entryError?.id}>\n <IconButton\n size=\"small\"\n aria-label=\"edit\"\n className={\"m-1\"}\n onClick={() => onDialogOpen()}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Badge>}\n\n </div>\n\n {entryError?.label && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.label}\n </Typography>}\n\n {entryError?.id && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.id}\n </Typography>}\n\n </>);\n },\n function areEqual(prevProps: EnumEntryProps, nextProps: EnumEntryProps) {\n return prevProps.index === nextProps.index &&\n prevProps.enumValuesPath === nextProps.enumValuesPath &&\n prevProps.shouldUpdateId === nextProps.shouldUpdateId &&\n prevProps.inferredEntry === nextProps.inferredEntry &&\n equal(prevProps.entryError, nextProps.entryError) &&\n prevProps.autoFocus === nextProps.autoFocus;\n }\n);\n\nfunction EnumEntryDialog({\n index,\n open,\n onClose,\n enumValuesPath\n }: {\n index?: number;\n open: boolean;\n enumValuesPath: string;\n onClose: () => void;\n}) {\n\n const {\n errors,\n } = useFormex<EnumValues>();\n\n const idError = index !== undefined ? getIn(errors, `${enumValuesPath}[${index}].id`) : undefined;\n return <Dialog\n maxWidth=\"md\"\n aria-labelledby=\"enum-edit-dialog\"\n open={open}\n onOpenChange={(open) => !open ? onClose() : undefined}\n >\n\n <DialogContent>\n {index !== undefined &&\n <div>\n <Field name={`${enumValuesPath}[${index}].id`}\n as={DebouncedTextField}\n required\n label={\"ID\"}\n size=\"small\"\n autoComplete=\"off\"\n error={Boolean(idError)}/>\n\n <FieldCaption error={Boolean(idError)}>\n {idError ?? \"Value saved in the data source\"}\n </FieldCaption>\n </div>}\n </DialogContent>\n\n <DialogActions>\n <Button\n autoFocus\n variant=\"outlined\"\n onClick={onClose}\n color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n\n </Dialog>\n}\n\n","import React from \"react\";\n\nimport { BooleanSwitchWithLabel, Tooltip } from \"@firecms/ui\";\nimport { FormexFieldProps } from \"@firecms/formex\";\n\nexport function SwitchControl({\n field,\n form,\n label,\n tooltip,\n disabled,\n size = \"small\",\n allowIndeterminate\n }: FormexFieldProps & {\n label: string,\n tooltip?: string,\n disabled?: boolean,\n size?: \"small\" | \"medium\",\n allowIndeterminate?: boolean\n}) {\n\n const formControlLabel = <BooleanSwitchWithLabel\n label={label}\n size={size}\n position={\"start\"}\n value={field.value}\n disabled={disabled}\n allowIndeterminate={allowIndeterminate}\n onValueChange={(checked:boolean | null) => form.setFieldValue(field.name, checked)}/>;\n\n if (tooltip)\n return (\n <Tooltip\n title={tooltip}>\n {formControlLabel}\n </Tooltip>\n );\n return formControlLabel;\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function GeneralPropertyValidation({ disabled }: {\n required?: boolean;\n disabled: boolean;\n}) {\n\n const { values, handleChange } = useFormex();\n\n const validationRequired = \"validation.required\";\n const validationRequiredMessage = \"validation.requiredMessage\";\n const validationUnique = \"validation.unique\";\n const validationUniqueInArray = \"validation.uniqueInArray\";\n\n return (\n <>\n <div className={\"col-span-6\"}>\n <Field name={validationRequired}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={\"Required\"}\n tooltip={\"You won't be able to save this entity if this value is not set\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-6\"}>\n\n <Field name={validationUnique}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={\"Unique\"}\n tooltip={\"There cannot be multiple entities with the same value\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n {getIn(values, validationRequired) && <div className={\"col-span-12\"}>\n <DebouncedTextField\n disabled={disabled}\n value={getIn(values, validationRequiredMessage)}\n label={\"Required message\"}\n name={validationRequiredMessage}\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, serializeRegExp } from \"@firecms/core\";\nimport { DebouncedTextField, } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function StringPropertyValidation({\n length,\n lowercase,\n matches,\n max,\n min,\n trim,\n uppercase,\n disabled,\n showErrors\n }: {\n length?: boolean;\n min?: boolean;\n max?: boolean;\n trim?: boolean;\n matches?: boolean;\n lowercase?: boolean;\n uppercase?: boolean;\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const {\n values,\n handleChange,\n errors\n } = useFormex();\n\n const validationLength = \"validation.length\";\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationTrim = \"validation.trim\";\n const validationMatches = \"validation.matches\";\n const validationLowercase = \"validation.lowercase\";\n const validationUppercase = \"validation.uppercase\";\n\n const matchesError = getIn(errors, validationMatches);\n\n const matchesValue = getIn(values, validationMatches);\n const matchesStringValue = typeof matchesValue === \"string\" ? matchesValue : serializeRegExp(matchesValue);\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n\n {lowercase && <div className={\"col-span-4\"}>\n <Field name={validationLowercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Lowercase\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {uppercase && <div className={\"col-span-4\"}>\n <Field name={validationUppercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Uppercase\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {trim && <div className={\"col-span-4\"}>\n <Field name={validationTrim}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Trim\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n </div>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n {length && <div className={\"col-span-4\"}>\n <DebouncedTextField\n value={getIn(values, validationLength)}\n label={\"Exact length\"}\n name={validationLength}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {min && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n label={\"Min length\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {max && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n label={\"Max length\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n </div>\n\n {matches && <div className={\"col-span-12\"}>\n <Field name={validationMatches}\n as={DebouncedTextField}\n label={\"Matches regex\"}\n size=\"small\"\n disabled={disabled}\n value={matchesStringValue}\n error={Boolean(matchesError)}/>\n <FieldCaption error={Boolean(matchesError)}>\n {matchesError ? \"Not a valid regexp\" : \"e.g. /^\\\\d+$/ for digits only\"}\n </FieldCaption>\n </div>}\n\n </div>\n );\n\n}\n","import React from \"react\";\n\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\n\nexport function ArrayPropertyValidation({\n max = true,\n min = true,\n disabled\n }: {\n min?: boolean;\n max?: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n {min && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n disabled={disabled}\n label={\"Min length\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n {max && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n disabled={disabled}\n label={\"Max length\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\n\nimport { ExpandablePanel, RuleIcon, Typography } from \"@firecms/ui\";\n\nexport function ValidationPanel({\n children\n }: PropsWithChildren<{}>) {\n\n return (\n <ExpandablePanel\n initiallyExpanded={false}\n asField={true}\n className=\"p-4\"\n title={\n <div className=\"flex flex-row text-gray-500\">\n <RuleIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n Validation\n </Typography>\n </div>\n }>\n\n {children}\n\n </ExpandablePanel>\n )\n}\n","import React, { useMemo } from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { EnumValueConfig, resolveEnumValues, useSnackbarController } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\nimport { EnumForm } from \"../EnumForm\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { PropertyWithId } from \"../PropertyEditView\";\n\nexport function EnumPropertyField({\n multiselect,\n updateIds,\n disabled,\n showErrors,\n allowDataInference,\n getData\n }: {\n multiselect: boolean;\n updateIds: boolean;\n disabled: boolean;\n showErrors: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<object[]>;\n}) {\n\n const {\n values,\n setFieldError,\n setFieldValue\n } = useFormex<PropertyWithId>();\n\n const snackbarContext = useSnackbarController();\n\n const enumValuesPath = multiselect ? \"of.enumValues\" : \"enumValues\";\n\n const defaultValue = getIn(values, \"defaultValue\");\n\n const valuesEnumValues = getIn(values, enumValuesPath);\n const enumValues: EnumValueConfig[] = useMemo(() => {\n if (!valuesEnumValues || typeof valuesEnumValues === \"boolean\")\n return [] as EnumValueConfig[];\n return resolveEnumValues(valuesEnumValues) ?? [] as EnumValueConfig[];\n }, [valuesEnumValues]);\n\n const onValuesChanged = (value: EnumValueConfig[]) => {\n if (!values)\n return;\n setFieldValue(enumValuesPath, value);\n if (!multiselect) {\n const enumIds = value.filter(v => Boolean(v?.id)).map((v: any) => v.id);\n if (defaultValue && !enumIds.includes(defaultValue)) {\n setFieldValue(\"defaultValue\", undefined);\n snackbarContext.open({\n type: \"warning\",\n message: \"Default value was cleared\"\n })\n }\n }\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <EnumForm enumValues={enumValues}\n updateIds={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n onError={(hasError) => {\n setFieldError(enumValuesPath, hasError ? \"This enum property is missing some values\" : undefined);\n }}\n getData={getData\n ? () => getData()\n .then(res => res.map(d => values.id && getIn(d, values.id)).filter(Boolean))\n : undefined}\n onValuesChanged={onValuesChanged}/>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiselect &&\n <StringPropertyValidation disabled={disabled}\n showErrors={showErrors}/>}\n {multiselect &&\n <ArrayPropertyValidation disabled={disabled}/>}\n </ValidationPanel>\n\n </div>\n\n {!multiselect && <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n onValueChange={(value: string) => {\n setFieldValue(\"defaultValue\", value);\n }}\n label={\"Default value\"}\n value={defaultValue ?? \"\"}>\n {enumValues\n .filter((enumValue) => Boolean(enumValue?.id))\n .map((enumValue) => (\n <SelectItem key={enumValue.id}\n value={enumValue.id?.toString()}>\n {enumValue.label}\n </SelectItem>\n ))}\n </Select>\n\n </div>}\n </>\n );\n}\n","import React from \"react\";\nimport {\n Button,\n Checkbox,\n DebouncedTextField,\n ExpandablePanel,\n FileUploadIcon,\n MultiSelect,\n MultiSelectItem,\n Typography\n} from \"@firecms/ui\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nconst fileTypes: Record<string, string> = {\n \"image/*\": \"Images\",\n \"video/*\": \"Videos\",\n \"audio/*\": \"Audio files\",\n \"application/*\": \"Files (pdf, zip, csv, excel...)\",\n \"text/*\": \"Text files\"\n}\n\nexport function StoragePropertyField({\n multiple,\n existing,\n disabled\n }: {\n multiple: boolean;\n existing: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex();\n\n const baseStoragePath = multiple ? \"of.storage\" : \"storage\";\n const acceptedFiles = `${baseStoragePath}.acceptedFiles`;\n\n const metadata = `${baseStoragePath}.metadata`;\n const fileName = `${baseStoragePath}.fileName`;\n const storagePath = `${baseStoragePath}.storagePath`;\n const storeUrl = `${baseStoragePath}.storeUrl`;\n\n const fileNameValue = getIn(values, fileName) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\n\n const storedValue = getIn(values, acceptedFiles);\n const fileTypesValue: string[] | undefined = Array.isArray(storedValue) ? storedValue : undefined;\n const allFileTypesSelected = !fileTypesValue || fileTypesValue.length === 0;\n\n const handleTypesChange = (value: string[]) => {\n if (!value) setFieldValue(acceptedFiles, undefined);\n else if (value.includes(\"all\")) setFieldValue(acceptedFiles, undefined);\n else if (value.length >= Object.keys(fileTypes).length) setFieldValue(acceptedFiles, undefined);\n else if (allFileTypesSelected)\n setFieldValue(acceptedFiles, Object.keys(fileTypes).filter((v) => !value.includes(v)));\n else setFieldValue(acceptedFiles, value);\n };\n\n const hasFilenameCallback = typeof fileNameValue === \"function\";\n const hasStoragePathCallback = typeof storagePathValue === \"function\";\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ExpandablePanel\n title={\n <div className=\"flex flex-row text-gray-500\">\n <FileUploadIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n File upload config\n </Typography>\n </div>\n }>\n\n <div className={\"grid grid-cols-12 gap-2 p-4\"}>\n\n <div className={\"col-span-12\"}>\n\n <MultiSelect\n disabled={disabled}\n name={acceptedFiles}\n value={fileTypesValue ?? []}\n onMultiValueChange={handleTypesChange}\n label={allFileTypesSelected ? undefined : \"Allowed file types\"}\n renderValues={(selected) => {\n if (!selected || selected.length === 0) return \"All file types allowed\";\n return selected.map((v: string) => fileTypes[v])\n .filter((v: string) => Boolean(v))\n .join(\", \");\n }}>\n\n <MultiSelectItem key={\"all\"} value={\"all\"} className={\"flex items-center gap-2\"}>\n <Checkbox\n checked={!fileTypesValue}/>\n All\n </MultiSelectItem>\n\n {Object.entries(fileTypes).map(([value, label]) => (\n <MultiSelectItem key={value} value={value} className={\"flex items-center gap-2\"}>\n <Checkbox\n checked={allFileTypesSelected || fileTypesValue.indexOf(value) > -1}/>\n <div className={\"flex-grow\"}>\n {label}\n </div>\n <Button size={\"small\"}\n variant={\"outlined\"}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n return setFieldValue(acceptedFiles, [value]);\n }}>\n Only\n </Button>\n </MultiSelectItem>\n ))}\n\n </MultiSelect>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={\"File name\"}\n size={\"small\"}\n disabled={hasFilenameCallback || disabled}\n value={hasFilenameCallback ? \"-\" : fileNameValue}\n />\n </div>\n <div className={\"col-span-12\"}>\n <Field name={storagePath}\n as={DebouncedTextField}\n label={\"Storage path\"}\n disabled={hasStoragePathCallback || disabled}\n size={\"small\"}\n value={hasStoragePathCallback ? \"-\" : storagePathValue}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n <p>You can use the following placeholders in\n the file name\n and storage path values:</p>\n <ul>\n <li>{\"{file} - Full name of the uploaded file\"}</li>\n <li>{\"{file.name} - Name of the uploaded file without extension\"}</li>\n <li>{\"{file.ext} - Extension of the uploaded file\"}</li>\n <li>{\"{entityId} - ID of the entity\"}</li>\n <li>{\"{propertyKey} - ID of this field\"}</li>\n <li>{\"{path} - Path of this entity\"}</li>\n <li>{\"{rand} - Random value used to avoid name collisions\"}</li>\n </ul>\n </Typography>\n\n <Field name={storeUrl}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Save URL instead of storage path\"}\n disabled={existing || disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n Turn this setting on, if you prefer to save\n the download\n URL of the uploaded file instead of the\n storage path.\n You can only change this prop upon creation.\n </Typography>\n </div>\n </div>\n </ExpandablePanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiple && <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n </div>}\n {multiple && <div className={\"col-span-12\"}>\n <ArrayPropertyValidation disabled={disabled}/>\n </div>}\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { isPropertyBuilder, Properties, PropertiesOrBuilders, Property, PropertyOrBuilder } from \"@firecms/core\";\n\nexport function editableProperty(property: PropertyOrBuilder | PropertyOrBuilder): boolean {\n if (isPropertyBuilder(property))\n return false;\n if (isPropertyBuilder(property as PropertyOrBuilder))\n return false;\n else {\n const eProperty = property as Property;\n if (eProperty.dataType === \"array\" && typeof eProperty.of === \"function\")\n return false;\n else if (eProperty.dataType === \"array\" && Array.isArray(eProperty.of))\n return false;\n return Boolean(eProperty.editable);\n }\n}\n\nexport function removeNonEditableProperties(properties: PropertiesOrBuilders<any>): Properties {\n return Object.entries(properties)\n .filter(([_, property]) => editableProperty(property))\n .map(([key, propertyOrBuilder]) => {\n const property = propertyOrBuilder as Property;\n if (!editableProperty(property)) {\n return undefined;\n } else if (property.dataType === \"map\" && property.properties) {\n return {\n [key]: {\n ...property,\n properties: removeNonEditableProperties(property.properties as PropertiesOrBuilders)\n }\n };\n } else {\n return { [key]: property };\n }\n })\n .filter((e) => Boolean(e))\n .reduce((a, b) => ({ ...a, ...b }), {}) as Properties;\n}\n","import {\n ErrorBoundary,\n PropertyConfigBadge,\n getFieldConfig,\n isPropertyBuilder,\n Property,\n PropertyOrBuilder,\n useCustomizationController,\n} from \"@firecms/core\";\nimport {\n cardClickableMixin,\n cardMixin,\n cardSelectedMixin,\n cn,\n FunctionsIcon,\n Paper,\n RemoveCircleIcon,\n Typography,\n} from \"@firecms/ui\";\n\nimport { editableProperty } from \"../../utils/entities\";\n\nexport function PropertyFieldPreview({\n property,\n onClick,\n hasError,\n includeName,\n includeEditButton,\n selected\n }: {\n property: Property,\n hasError?: boolean,\n selected?: boolean,\n includeName?: boolean,\n includeEditButton?: boolean;\n onClick?: () => void\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = getFieldConfig(property, propertyConfigs);\n const disabled = !editableProperty(property);\n\n const borderColorClass = hasError\n ? \"border-red-500 dark:border-red-500 border-opacity-100 dark:border-opacity-100 ring-0 dark:ring-0\"\n : (selected ? \"border-primary\" : \"border-transparent\");\n\n if(hasError)\n console.log(\"PropertyFieldPreview\", property)\n\n return <ErrorBoundary>\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"m-4\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <Paper\n className={cn(\n \"border\",\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n borderColorClass\n )}\n >\n\n <div className=\"w-full flex flex-col\">\n\n {includeName &&\n <ErrorBoundary>\n <Typography variant=\"body1\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property.name\n ? property.name\n : \"\\u00a0\"\n }\n </Typography>\n </ErrorBoundary>}\n\n <div className=\"flex flex-row items-center\">\n <ErrorBoundary>\n <Typography className=\"flex-grow pr-2\"\n variant={includeName ? \"body2\" : \"subtitle1\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>\n </ErrorBoundary>\n <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>\n\n </div>\n </div>\n\n {includeEditButton && <Typography variant={\"button\"}>\n EDIT\n </Typography>}\n\n </Paper>\n </div>\n </ErrorBoundary>\n}\n\nexport function NonEditablePropertyPreview({\n name,\n selected,\n onClick,\n property\n }: {\n name: string,\n selected: boolean,\n onClick?: () => void,\n property?: PropertyOrBuilder\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = !isPropertyBuilder(property) && property ? getFieldConfig(property, propertyConfigs) : undefined;\n\n return (\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"relative m-4\"}>\n {propertyConfig && <PropertyConfigBadge propertyConfig={propertyConfig}/>}\n {!propertyConfig && <div\n className={\"h-8 w-8 p-1 rounded-full shadow text-white bg-gray-500\"}>\n <FunctionsIcon color={\"inherit\"} size={\"medium\"}/>\n </div>}\n <RemoveCircleIcon color={\"disabled\"} size={\"small\"} className={\"absolute -right-2 -top-2\"}/>\n </div>\n <Paper\n className={cn(\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n selected ? \"border-primary\" : \"border-transparent\")}\n >\n\n <div className=\"w-full flex flex-col\">\n <Typography variant=\"body1\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property?.name\n ? property.name\n : name\n }\n </Typography>\n\n <div className=\"flex flex-row items-center\">\n {propertyConfig && <Typography className=\"flex-grow pr-2\"\n variant={\"body2\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>}\n\n {property && !isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>}\n\n {property && isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This property is defined as a property builder in code\n </Typography>\n </ErrorBoundary>}\n\n {!property && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This field is defined as an additional field in code\n </Typography>\n </ErrorBoundary>}\n\n </div>\n\n {/*<div className=\"flex flex-row text-xs\">*/}\n {/* <Typography className=\"flex-grow pr-2\"*/}\n {/* variant=\"body2\"*/}\n {/* component=\"span\"*/}\n {/* color=\"secondary\">*/}\n {/* This field can only be edited in code*/}\n {/* </Typography>*/}\n {/*</div>*/}\n </div>\n\n </Paper>\n </div>)\n}\n","import React, { useCallback } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport {\n AdditionalFieldDelegate,\n CMSType,\n ErrorBoundary,\n isPropertyBuilder,\n PropertiesOrBuilders,\n PropertyOrBuilder\n} from \"@firecms/core\";\nimport { AutoAwesomeIcon, defaultBorderMixin, DragHandleIcon, IconButton, RemoveIcon, Tooltip } from \"@firecms/ui\";\nimport { NonEditablePropertyPreview, PropertyFieldPreview } from \"./PropertyFieldPreview\";\nimport { DragDropContext, Draggable, DraggableProvided, Droppable } from \"@hello-pangea/dnd\";\nimport { getFullId, getFullIdPath } from \"./util\";\nimport { editableProperty } from \"../../utils/entities\";\n\nexport const PropertyTree = React.memo(\n function PropertyTree<M extends {\n [Key: string]: CMSType\n }>({\n namespace,\n selectedPropertyKey,\n onPropertyClick,\n properties,\n propertiesOrder: propertiesOrderProp,\n additionalFields,\n errors,\n onPropertyMove,\n onPropertyRemove,\n className,\n inferredPropertyKeys,\n collectionEditable\n }: {\n namespace?: string;\n selectedPropertyKey?: string;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n properties: PropertiesOrBuilders<M>;\n propertiesOrder?: string[];\n additionalFields?: AdditionalFieldDelegate<M>[];\n errors: Record<string, any>;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n className?: string;\n inferredPropertyKeys?: string[];\n collectionEditable: boolean;\n }) {\n\n const propertiesOrder = propertiesOrderProp ?? Object.keys(properties);\n\n const onDragEnd = useCallback((result: any) => {\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n const startIndex = result.source.index;\n const endIndex = result.destination.index;\n\n const newPropertiesOrder = Array.from(propertiesOrder);\n const [removed] = newPropertiesOrder.splice(startIndex, 1);\n newPropertiesOrder.splice(endIndex, 0, removed);\n if (onPropertyMove)\n onPropertyMove(newPropertiesOrder, namespace);\n }, [namespace, onPropertyMove, propertiesOrder])\n\n return (\n <>\n\n <DragDropContext onDragEnd={onDragEnd}>\n <Droppable droppableId={`droppable_${namespace}`}>\n {(droppableProvided, droppableSnapshot) => (\n <div\n {...droppableProvided.droppableProps}\n ref={droppableProvided.innerRef}\n className={className}>\n {propertiesOrder && propertiesOrder\n .map((propertyKey: string, index: number) => {\n const property = properties[propertyKey] as PropertyOrBuilder;\n const additionalField = additionalFields?.find(field => field.key === propertyKey);\n\n if (!property && !additionalField) {\n console.warn(`Property ${propertyKey} not found in properties or additionalFields`);\n return null;\n }\n return (\n <Draggable\n key={`array_field_${namespace}_${propertyKey}}`}\n draggableId={`array_field_${namespace}_${propertyKey}}`}\n index={index}>\n {(provided, snapshot) => {\n return (\n <ErrorBoundary>\n <PropertyTreeEntry\n propertyKey={propertyKey as string}\n propertyOrBuilder={property}\n additionalField={additionalField}\n provided={provided}\n errors={errors}\n namespace={namespace}\n inferredPropertyKeys={inferredPropertyKeys}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n onPropertyClick={snapshot.isDragging ? undefined : onPropertyClick}\n selectedPropertyKey={selectedPropertyKey}\n collectionEditable={collectionEditable}\n />\n </ErrorBoundary>\n );\n }}\n </Draggable>);\n }).filter(Boolean)}\n\n {droppableProvided.placeholder}\n\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n </>\n );\n },\n (prevProps, nextProps) => {\n\n const isSelected = nextProps.selectedPropertyKey?.startsWith(nextProps.namespace ?? \"\");\n const wasSelected = prevProps.selectedPropertyKey?.startsWith(prevProps.namespace ?? \"\");\n if (isSelected || wasSelected)\n return false;\n\n return equal(prevProps.properties, nextProps.properties) &&\n prevProps.propertiesOrder === nextProps.propertiesOrder &&\n equal(prevProps.additionalFields, nextProps.additionalFields) &&\n equal(prevProps.errors, nextProps.errors) &&\n equal(prevProps.onPropertyClick, nextProps.onPropertyClick) &&\n // equal(prevProps.onPropertyMove, nextProps.onPropertyMove) &&\n // equal(prevProps.onPropertyRemove, nextProps.onPropertyRemove) &&\n prevProps.namespace === nextProps.namespace &&\n prevProps.collectionEditable === nextProps.collectionEditable;\n }\n);\n\nexport function PropertyTreeEntry({\n propertyKey,\n namespace,\n propertyOrBuilder,\n additionalField,\n provided,\n selectedPropertyKey,\n errors,\n onPropertyClick,\n onPropertyMove,\n onPropertyRemove,\n inferredPropertyKeys,\n collectionEditable\n }: {\n propertyKey: string;\n namespace?: string;\n propertyOrBuilder: PropertyOrBuilder;\n additionalField?: AdditionalFieldDelegate<any>;\n selectedPropertyKey?: string;\n provided: DraggableProvided;\n errors: Record<string, any>;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n inferredPropertyKeys?: string[];\n collectionEditable: boolean;\n}) {\n\n const isPropertyInferred = inferredPropertyKeys?.includes(namespace ? `${namespace}.${propertyKey}` : propertyKey);\n const fullId = getFullId(propertyKey, namespace);\n const fullIdPath = getFullIdPath(propertyKey, namespace);\n const hasError = fullIdPath in errors;\n\n let subtree;\n if (typeof propertyOrBuilder === \"object\") {\n const property = propertyOrBuilder;\n if (property.dataType === \"map\" && property.properties) {\n subtree = <PropertyTree\n selectedPropertyKey={selectedPropertyKey}\n namespace={fullId}\n properties={property.properties}\n propertiesOrder={property.propertiesOrder}\n errors={errors}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n collectionEditable={collectionEditable}\n />\n }\n }\n\n // const hasError = fullId ? getIn(errors, idToPropertiesPath(fullId)) : false;\n const selected = selectedPropertyKey === fullId;\n const editable = propertyOrBuilder && ((collectionEditable && !isPropertyBuilder(propertyOrBuilder)) || editableProperty(propertyOrBuilder));\n\n return (\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className=\"relative -ml-8\"\n >\n {subtree && <div\n className={\"absolute border-l \" + defaultBorderMixin}\n style={{\n left: \"32px\",\n top: \"64px\",\n bottom: \"16px\"\n }}/>}\n\n {!isPropertyBuilder(propertyOrBuilder) && !additionalField && editable\n ? <PropertyFieldPreview\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n includeName={true}\n selected={selected}\n hasError={hasError}/>\n : <NonEditablePropertyPreview name={propertyKey}\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n selected={selected}/>}\n\n <div className=\"absolute top-2 right-2 flex flex-row \">\n\n {isPropertyInferred && <Tooltip title={\"Inferred property\"}>\n <AutoAwesomeIcon size=\"small\" className={\"p-2\"}/>\n </Tooltip>}\n\n {onPropertyRemove && <Tooltip title={\"Remove\"}>\n <IconButton size=\"small\"\n color=\"inherit\"\n onClick={() => onPropertyRemove(propertyKey, namespace)}>\n <RemoveIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>}\n\n {onPropertyMove && <Tooltip title={\"Move\"}>\n <IconButton\n component={\"span\"}\n size=\"small\"\n >\n <DragHandleIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>}\n </div>\n\n {subtree && <div className={\"ml-16\"}>{subtree}</div>}\n </div>\n );\n\n}\n","import React, { useCallback, useState } from \"react\";\nimport { FieldCaption, MapProperty, Property, PropertyConfig, } from \"@firecms/core\";\nimport { AddIcon, BooleanSwitchWithLabel, Button, Paper, Typography } from \"@firecms/ui\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath, namespaceToPropertiesPath } from \"../util\";\n\nexport function MapPropertyField({ disabled, getData, allowDataInference, propertyConfigs, collectionEditable }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<MapProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const propertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const onPropertyCreated = ({\n id,\n property\n }: { id?: string, property: Property }) => {\n if (!id)\n throw Error();\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const currentPropertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"propertiesOrder\", newPropertiesOrder, false);\n\n setPropertyDialogOpen(false);\n };\n\n const deleteProperty = useCallback((propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n const propertiesPath = idToPropertiesPath(fullId);\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n const currentPropertiesOrder: string[] = getIn(values, propertiesOrderPath) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\n\n setFieldValue(propertiesPath, undefined, false);\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }, [setFieldValue, values]);\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const empty = !propertiesOrder || propertiesOrder.length < 1;\n\n const onPropertyMove = useCallback((propertiesOrder: string[], namespace?: string) => {\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n }, []);\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className=\"flex justify-between items-end my-4\">\n <Typography variant={\"subtitle2\"}>Properties in this group</Typography>\n <Button\n color=\"primary\"\n variant={\"outlined\"}\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\n >\n Add property to {values.name ?? \"this group\"}\n </Button>\n </div>\n <Paper className=\"p-2 pl-8\">\n <PropertyTree\n properties={values.properties ?? {}}\n propertiesOrder={propertiesOrder}\n errors={{}}\n collectionEditable={collectionEditable}\n onPropertyClick={(propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={onPropertyMove}/>\n\n {empty &&\n <Typography variant={\"label\"}\n className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this group\n </Typography>}\n </Paper>\n </div>\n\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"small\"}\n label=\"Spread children as columns\"\n onValueChange={(v) => setFieldValue(\"spreadChildren\", v)}\n value={values.spreadChildren ?? false}\n />\n <FieldCaption>\n Set this flag to true if you want to display the children of this group as individual columns.\n </FieldCaption>\n </div>\n\n <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n getData={getData}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyCreated}\n existingPropertyKeys={selectedPropertyKey ? undefined : propertiesOrder}\n propertyConfigs={propertyConfigs}\n />\n\n </>);\n}\n","import React, { useState } from \"react\";\nimport { ArrayProperty, getFieldConfig, Property, PropertyConfig } from \"@firecms/core\";\nimport { Button, Paper, Typography } from \"@firecms/ui\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { PropertyFieldPreview } from \"../PropertyFieldPreview\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\nexport function RepeatPropertyField({\n showErrors,\n existing,\n disabled,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n showErrors: boolean,\n existing: boolean,\n disabled: boolean,\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState(false);\n const ofProperty = getIn(values, \"of\");\n const ofPropertyError = getIn(touched, \"of\") && getIn(errors, \"of\");\n\n const onPropertyChanged = ({ id, property, namespace }:\n { id?: string, property: Property, namespace?: string }) => {\n console.log(\"onPropertyChanged\", id, property, namespace);\n setFieldValue(\"of\", property);\n };\n\n const widget = ofProperty && getFieldConfig(ofProperty, propertyConfigs);\n return (\n <>\n <div className={\"col-span-12\"}>\n <Typography variant={\"subtitle2\"}>\n Repeat component\n </Typography>\n <Field\n name={\"of\"}\n value={ofProperty}\n // validate={(property: Property) => {\n // return property?.dataType ? undefined : \"You need to specify a repeat field\";\n // }}\n >\n {({}) => (\n <Paper className=\"p-2 mt-4\">\n\n {ofProperty && <PropertyFieldPreview\n property={ofProperty}\n onClick={disabled ? undefined : () => setPropertyDialogOpen(true)}\n includeName={false}\n includeEditButton={true}\n selected={false}\n hasError={false}/>}\n\n {!disabled && !ofProperty && <Button variant={\"text\"}\n size={\"large\"}\n color={ofPropertyError ? \"error\" : \"primary\"}\n onClick={() => setPropertyDialogOpen(true)}>\n Edit {`${widget ? widget.name : \"repeat component\"}`}\n </Button>}\n\n <PropertyFormDialog\n inArray={true}\n open={propertyDialogOpen}\n existingProperty={existing}\n getData={getData}\n autoUpdateId={!existing}\n autoOpenTypeSelect={!existing}\n onOkClicked={() => setPropertyDialogOpen(false)}\n allowDataInference={allowDataInference}\n property={ofProperty}\n includeIdAndName={false}\n onPropertyChanged={onPropertyChanged}\n forceShowErrors={showErrors}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n />\n </Paper>\n )}\n </Field>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <ArrayPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { PropertyWithId } from \"../PropertyEditView\";\nimport React from \"react\";\nimport { FieldCaption, toSnakeCase, unslugify } from \"@firecms/core\";\n\ntype CommonPropertyFieldsProps = {\n showErrors: boolean,\n disabledId: boolean,\n disabled: boolean;\n isNewProperty: boolean;\n autoUpdateId: boolean;\n};\n\nexport const CommonPropertyFields = React.forwardRef<HTMLDivElement, CommonPropertyFieldsProps>(\n function CommonPropertyFields({\n showErrors,\n disabledId,\n disabled,\n autoUpdateId,\n isNewProperty\n }, ref) {\n\n const {\n errors,\n values,\n setFieldValue,\n setFieldTouched,\n touched,\n validate\n } = useFormex<PropertyWithId>();\n\n const name = \"name\";\n const nameError = showErrors && getIn(errors, name);\n\n const id = \"id\";\n const idError = showErrors && getIn(errors, id);\n\n const description = \"description\";\n const descriptionError = showErrors && getIn(errors, description);\n\n return (\n <div className={\"flex flex-col gap-2 col-span-12\"}>\n\n <div>\n <Field\n name={name}\n inputRef={ref}\n as={DebouncedTextField}\n value={values[name]}\n onChange={(e: any) => {\n const newNameValue = e.target.value;\n const idTouched = getIn(touched, id);\n if (!idTouched && autoUpdateId) {\n setFieldValue(id, newNameValue ? toSnakeCase(newNameValue) : \"\", false)\n }\n setFieldValue(name, newNameValue, true);\n setFieldTouched(name, true);\n }}\n style={{ fontSize: 20 }}\n placeholder={\"Field name\"}\n required\n disabled={disabled}\n error={Boolean(nameError)}/>\n\n <FieldCaption error={Boolean(nameError)}>\n {nameError}\n </FieldCaption>\n </div>\n\n <div>\n <Field\n name={id}\n as={DebouncedTextField}\n label={\"ID\"}\n value={values[id]}\n onChange={(e: any) => {\n const newIdValue = e.target.value;\n const nameTouched = getIn(touched, name);\n if (!nameTouched && autoUpdateId) {\n setFieldValue(name, newIdValue ? unslugify(newIdValue) : \"\")\n }\n setFieldValue(id, newIdValue, true);\n setFieldTouched(id, true);\n }}\n disabled={disabledId || disabled}\n required\n size=\"small\"\n error={Boolean(idError)}/>\n <FieldCaption error={Boolean(idError)}>\n {idError}\n </FieldCaption>\n </div>\n\n <div>\n <Field name={description}\n as={DebouncedTextField}\n label={\"Description\"}\n disabled={disabled}\n error={Boolean(descriptionError)}/>\n <FieldCaption error={Boolean(descriptionError)}>\n {descriptionError}\n </FieldCaption>\n </div>\n\n </div>\n );\n\n }\n);\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { TextField } from \"@firecms/ui\";\n\nexport function StringPropertyField({\n widgetId,\n disabled,\n showErrors\n }: {\n widgetId: \"text_field\" | \"multiline\" | \"markdown\" | \"email\";\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n {widgetId === \"text_field\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n matches={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n {widgetId === \"multiline\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n {widgetId === \"markdown\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n\n {widgetId === \"email\" &&\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>}\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\n\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nexport function BooleanPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n const { values } = useFormex();\n const defaultValue = getIn(values, \"defaultValue\");\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <Field\n name={\"defaultValue\"}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={defaultValue === null || defaultValue === undefined ? \"Default value not set\" : (\"Default value is \" + defaultValue.toString())}\n disabled={disabled}\n allowIndeterminate={true} field={field}\n form={form}/>\n }}\n </Field>\n\n </div>\n </>\n );\n}\n","import React, { useCallback, useState } from \"react\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { ArrayProperty, Property, PropertyConfig } from \"@firecms/core\";\n\nexport function BlockPropertyField({ disabled, getData, allowDataInference, propertyConfigs, collectionEditable }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const onPropertyChanged = ({\n id,\n property\n }: { id?: string, property: Property }) => {\n if (!id)\n throw Error();\n\n setFieldValue(\"oneOf.properties\", {\n ...(values.oneOf?.properties ?? {}),\n [id]: property\n }, false);\n const currentPropertiesOrder = values.oneOf?.propertiesOrder ?? Object.keys(values.oneOf?.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"oneOf.propertiesOrder\", newPropertiesOrder, false);\n setPropertyDialogOpen(false);\n };\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.oneOf?.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const deleteProperty = useCallback((propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(`oneOf.${idToPropertiesPath(fullId)}`, undefined, false);\n const propertiesOrderPath = `oneOf.${namespaceToPropertiesOrderPath(namespace)}`;\n const currentPropertiesOrder: string[] = getIn(values, propertiesOrderPath);\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }, [setFieldValue, values]);\n\n const addChildButton = <Button\n autoFocus\n color=\"primary\"\n\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\n >\n Add property to {values.name ?? \"this block\"}\n </Button>;\n\n const onPropertyMove = useCallback((propertiesOrder: string[], namespace?: string) => {\n setFieldValue(`oneOf.${namespaceToPropertiesOrderPath(namespace)}`, propertiesOrder, false);\n }, []);\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className={\"flex justify-between items-end mt-8 mb-4\"}>\n <Typography variant={\"subtitle2\"}>Properties in this\n block</Typography>\n {addChildButton}\n </div>\n <Paper className=\"p-2 pl-8\">\n\n <PropertyTree\n properties={values.oneOf?.properties ?? {}}\n propertiesOrder={values.oneOf?.propertiesOrder}\n errors={{}}\n collectionEditable={collectionEditable}\n onPropertyClick={disabled\n ? undefined\n : (propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={disabled\n ? undefined\n : onPropertyMove}/>\n\n {!disabled && !values.oneOf?.propertiesOrder?.length &&\n <div className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this block\n </div>}\n\n </Paper>\n </div>\n\n {!disabled && <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n getData={getData}\n allowDataInference={allowDataInference}\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n collectionEditable={collectionEditable}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyChanged}\n existingPropertyKeys={selectedPropertyKey ? undefined : values.oneOf?.propertiesOrder}\n propertyConfigs={propertyConfigs}/>}\n\n </>);\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function NumberPropertyValidation({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationLessThan = \"validation.lessThan\";\n const validationMoreThan = \"validation.moreThan\";\n const validationPositive = \"validation.positive\";\n const validationNegative = \"validation.negative\";\n const validationInteger = \"validation.integer\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n label={\"Min value\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n label={\"Max value\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationLessThan)}\n label={\"Less than\"}\n name={validationLessThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationMoreThan)}\n label={\"More than\"}\n name={validationMoreThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-4\"}>\n <Field name={validationPositive}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Positive value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationNegative}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Negative value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationInteger}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Integer value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { NumberPropertyValidation } from \"./validation/NumberPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { TextField } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nexport function NumberPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <NumberPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n type={\"number\"}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : parseFloat(e.target.value));\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, IconForView, NumberProperty, StringProperty, useNavigationController } from \"@firecms/core\";\nimport { CircularProgress, Select, SelectGroup, SelectItem, Typography, } from \"@firecms/ui\";\n\nexport function ReferencePropertyField({\n existing,\n multiple,\n disabled,\n showErrors\n }: {\n existing: boolean,\n multiple: boolean,\n disabled: boolean,\n showErrors: boolean\n}) {\n\n const {\n values,\n handleChange,\n errors,\n } = useFormex<StringProperty | NumberProperty>();\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const pathPath = multiple ? \"of.path\" : \"path\";\n const pathValue: string | undefined = getIn(values, pathPath);\n const pathError: string | undefined = showErrors && getIn(errors, pathPath);\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Field name={pathPath}\n pathPath={pathPath}\n type=\"select\"\n disabled={(existing && Boolean(pathValue)) || disabled}\n value={pathValue}\n error={pathError}\n handleChange={handleChange}\n as={CollectionsSelect}/>\n\n </div>\n\n </>\n );\n}\n\nexport function CollectionsSelect({\n disabled,\n pathPath,\n value,\n handleChange,\n error,\n ...props\n }: {\n disabled: boolean,\n pathPath: string,\n value?: string,\n handleChange: (event: any) => void,\n error?: string\n}) {\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const collections = navigation?.collections ?? [];\n\n const groups: string[] = Array.from(new Set(\n Object.values(collections).map(e => e.group).filter(Boolean) as string[]\n ).values());\n\n const ungroupedCollections = collections.filter((col) => !col.group);\n\n return (\n <>\n <Select\n error={Boolean(error)}\n disabled={disabled}\n value={value ?? \"\"}\n position={\"item-aligned\"}\n name={pathPath}\n onChange={handleChange}\n label={\"Target collection\"}\n renderValue={(selected) => {\n const selectedCollection = collections.find(collection => collection.id === selected || collection.path === selected);\n if (!selectedCollection) return null;\n return (\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={selectedCollection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {selectedCollection?.name.toUpperCase()}\n </Typography>\n </div>)\n }}\n {...props}>\n\n {groups.flatMap((group) => (\n <SelectGroup label={group || \"Views\"}\n key={`group_${group}`}>\n {\n collections.filter(collection => collection.group === group)\n .map((collection) => {\n return <SelectItem\n key={`${collection.id ?? collection.path}-${group}`}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>\n ))}\n\n {ungroupedCollections && <SelectGroup label={\"Views\"}>\n {ungroupedCollections\n .map((collection) => {\n return <SelectItem key={collection.id ?? collection.path}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>}\n\n </Select>\n\n <FieldCaption>\n You can only edit the reference collection upon field\n creation.\n </FieldCaption>\n </>\n );\n}\n","import React from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, NumberProperty, StringProperty } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\nexport function DateTimePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n errors,\n touched,\n setFieldValue\n } = useFormex<StringProperty | NumberProperty>();\n\n const modePath = \"mode\";\n const modeValue: string | undefined = getIn(values, modePath);\n const modeError: string | undefined = getIn(touched, modePath) && getIn(errors, modePath);\n\n const autoValuePath = \"autoValue\";\n const autoValueValue: string | undefined = getIn(values, autoValuePath);\n const autoValueError: string | undefined = getIn(touched, autoValuePath) && getIn(errors, autoValuePath);\n\n return (\n <>\n <div className={\"flex flex-col col-span-12\"}>\n <Select name={modePath}\n value={modeValue ?? \"date\"}\n error={Boolean(modeError)}\n onValueChange={(v) => setFieldValue(modePath, v)}\n label={\"Mode\"}\n renderValue={(v) => {\n switch (v) {\n case \"date_time\":\n return \"Date/Time\";\n case \"date\":\n return \"Date\";\n default:\n return \"\";\n }\n }}\n disabled={disabled}>\n <SelectItem value={\"date_time\"}> Date/Time </SelectItem>\n <SelectItem value={\"date\"}> Date </SelectItem>\n </Select>\n <FieldCaption error={Boolean(modeError)}>\n {modeError}\n </FieldCaption>\n\n <Select name={autoValuePath}\n disabled={disabled}\n value={autoValueValue ?? \"\"}\n onValueChange={(v) => setFieldValue(autoValuePath, v === \"none\" ? null : v)}\n renderValue={(v) => {\n switch (v) {\n case \"on_create\":\n return \"On create\";\n case \"on_update\":\n return \"On any update\";\n default:\n return \"None\";\n }\n }}\n error={Boolean(autoValueError)}\n label={\"Automatic value\"}>\n <SelectItem value={\"none\"}> None </SelectItem>\n <SelectItem value={\"on_create\"}> On create </SelectItem>\n <SelectItem value={\"on_update\"}> On any update </SelectItem>\n </Select>\n <FieldCaption error={Boolean(autoValueError)}>\n {autoValueError ?? \"Update this field automatically when creating or updating the entity\"}\n </FieldCaption>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n </div>\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps } from \"@firecms/formex\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function AdvancedPropertyValidation({ disabled }: {\n disabled: boolean\n}) {\n\n const columnWidth = \"columnWidth\";\n const hideFromCollection = \"hideFromCollection\";\n const readOnly = \"readOnly\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <div className={\"col-span-12\"}>\n <Field type=\"checkbox\" name={hideFromCollection}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Hide from collection\"}\n disabled={disabled}\n form={form}\n tooltip={\"Hide this field from the collection view. It will still be visible in the form view\"}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={readOnly}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Read only\"}\n disabled={disabled}\n tooltip={\"Is this a read only field. Display only as a preview\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\n\nexport function KeyValuePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import {\n ArrayProperty,\n BooleanProperty,\n DateProperty,\n MapProperty,\n mergeDeep,\n NumberProperty,\n Property,\n PropertyConfig,\n StringProperty\n} from \"@firecms/core\";\n\nexport function updatePropertyFromWidget(propertyData: any,\n selectedWidgetId: string | undefined,\n propertyConfigs: Record<string, PropertyConfig>): Property {\n\n let updatedProperty;\n if (selectedWidgetId === \"text_field\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"text_field\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multiline\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"multiline\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n multiline: true,\n storage: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"markdown\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"markdown\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: true,\n email: undefined,\n url: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"url\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"url\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: true,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"email\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"email\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: true,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: propertyData.enumValues ?? []\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"number_input\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_input\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: undefined\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: propertyData.enumValues ?? []\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"multi_number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"number\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: {\n storagePath: \"/\"\n }\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n storage: propertyData.of?.storage ?? {\n storagePath: \"/\"\n }\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"group\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"group\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: false,\n properties: propertyData.properties ?? {}\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"key_value\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"key_value\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: true,\n properties: undefined\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"reference\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"reference\",\n propertyConfig: \"reference\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies Property\n );\n } else if (selectedWidgetId === \"multi_references\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_references\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"reference\"\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"switch\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"boolean\",\n propertyConfig: \"switch\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies BooleanProperty\n );\n } else if (selectedWidgetId === \"date_time\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"date\",\n propertyConfig: \"date_time\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n mode: \"date_time\"\n } satisfies DateProperty\n );\n } else if (selectedWidgetId === \"repeat\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"repeat\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"block\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"block\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n oneOf: {\n properties: {}\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId && propertyConfigs[selectedWidgetId]) {\n updatedProperty = {\n ...propertyConfigs[selectedWidgetId].property,\n propertyConfig: selectedWidgetId\n };\n }\n\n return updatedProperty;\n}\n","import { PropertyConfigBadge, PropertyConfig } from \"@firecms/core\";\nimport { cn, SelectItem, Typography } from \"@firecms/ui\";\n\nexport interface PropertySelectItemProps {\n value: string;\n optionDisabled: boolean;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function PropertySelectItem({ value, optionDisabled, propertyConfig, existing }: PropertySelectItemProps) {\n return <SelectItem value={value}\n disabled={optionDisabled}\n className={\"flex flex-row items-center\"}>\n <div\n className={cn(\n \"flex flex-row items-center text-base min-h-[52px]\",\n optionDisabled ? \"w-full\" : \"\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <div>\n <div>{propertyConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"disabled\"}\n className={\"max-w-sm\"}>\n {existing && optionDisabled ? \"You can only switch to widgets that use the same data type\" : propertyConfig.description}\n </Typography>\n </div>\n </div>\n </SelectItem>\n}\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { Select, SelectItem, TextField } from \"@firecms/ui\";\n\nexport function UrlPropertyField({\n disabled,\n showErrors\n }: {\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n const urlValue = getIn(values, \"url\");\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n onValueChange={(value: string) => {\n if (value === \"[NONE]\")\n setFieldValue(\"url\", true);\n else\n setFieldValue(\"url\", value);\n }}\n label={\"Preview type\"}\n renderValue={(value: string) => {\n switch (value) {\n case \"image\":\n return \"Image\";\n case \"video\":\n return \"Video\";\n case \"audio\":\n return \"Audio\";\n default:\n return \"Display URL\";\n }\n }}\n value={urlValue ?? \"[NONE]\"}>\n <SelectItem value={\"[NONE]\"}>\n Display URL\n </SelectItem>\n <SelectItem value={\"image\"}>\n Image\n </SelectItem>\n <SelectItem value={\"video\"}>\n Video\n </SelectItem>\n <SelectItem value={\"audio\"}>\n Audio\n </SelectItem>\n </Select>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import { DEFAULT_FIELD_CONFIGS, PropertyConfigId, PropertyConfig } from \"@firecms/core\";\n\nexport const supportedFieldsIds: PropertyConfigId[] = [\n \"text_field\",\n \"multiline\",\n \"markdown\",\n \"url\",\n \"email\",\n \"select\",\n \"multi_select\",\n \"number_input\",\n \"number_select\",\n \"multi_number_select\",\n \"file_upload\",\n \"multi_file_upload\",\n \"reference\",\n \"multi_references\",\n \"switch\",\n \"date_time\",\n \"group\",\n \"key_value\",\n \"repeat\",\n \"block\"\n];\n\nexport const supportedFields: Record<string, PropertyConfig> = Object.entries(DEFAULT_FIELD_CONFIGS)\n .filter(([id]) => supportedFieldsIds.includes(id as PropertyConfigId))\n .map(([id, config]) => ({ [id]: config }))\n .reduce((a, b) => ({ ...a, ...b }), {});\n","import React, { useDeferredValue, useEffect, useRef, useState } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { Formex, FormexController, getIn, useCreateFormex } from \"@firecms/formex\";\nimport {\n DEFAULT_FIELD_CONFIGS,\n DeleteConfirmationDialog,\n PropertyConfigId,\n getFieldConfig,\n getFieldId,\n isPropertyBuilder,\n isValidRegExp,\n mergeDeep,\n Property,\n PropertyConfig,\n PropertyConfigBadge,\n} from \"@firecms/core\";\nimport {\n Button,\n cn,\n DeleteIcon,\n Dialog,\n DialogActions,\n DialogContent,\n IconButton,\n InfoLabel,\n Select,\n Typography\n} from \"@firecms/ui\";\nimport { EnumPropertyField } from \"./properties/EnumPropertyField\";\nimport { StoragePropertyField } from \"./properties/StoragePropertyField\";\nimport { MapPropertyField } from \"./properties/MapPropertyField\";\nimport { RepeatPropertyField } from \"./properties/RepeatPropertyField\";\nimport { CommonPropertyFields } from \"./properties/CommonPropertyFields\";\nimport { StringPropertyField } from \"./properties/StringPropertyField\";\nimport { BooleanPropertyField } from \"./properties/BooleanPropertyField\";\nimport { BlockPropertyField } from \"./properties/BlockPropertyField\";\nimport { NumberPropertyField } from \"./properties/NumberPropertyField\";\nimport { ReferencePropertyField } from \"./properties/ReferencePropertyField\";\nimport { DateTimePropertyField } from \"./properties/DateTimePropertyField\";\nimport { AdvancedPropertyValidation } from \"./properties/advanced/AdvancedPropertyValidation\";\nimport { editableProperty } from \"../../utils/entities\";\nimport { KeyValuePropertyField } from \"./properties/KeyValuePropertyField\";\nimport { updatePropertyFromWidget } from \"./utils/update_property_for_widget\";\nimport { PropertySelectItem } from \"./PropertySelectItem\";\nimport { UrlPropertyField } from \"./properties/UrlPropertyField\";\nimport { supportedFields } from \"./utils/supported_fields\";\n\nexport type PropertyWithId = Property & {\n id?: string\n};\n\nexport type OnPropertyChangedParams = {\n id?: string,\n property: Property,\n namespace?: string,\n previousId?: string\n};\n\nexport type PropertyFormProps = {\n includeIdAndName?: boolean;\n existingProperty: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n inArray: boolean;\n propertyKey?: string;\n propertyNamespace?: string;\n property?: Property;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onPropertyChangedImmediate?: boolean;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n initialErrors?: Record<string, any>;\n existingPropertyKeys?: string[];\n forceShowErrors?: boolean;\n allowDataInference: boolean;\n getData?: () => Promise<object[]>;\n getController?: (formex: FormexController<PropertyWithId>) => void;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport const PropertyForm = React.memo(\n function PropertyForm(props: PropertyFormProps) {\n\n const {\n includeIdAndName = true,\n autoOpenTypeSelect,\n existingProperty,\n autoUpdateId,\n inArray,\n propertyKey,\n existingPropertyKeys,\n propertyNamespace,\n property,\n onPropertyChanged,\n onPropertyChangedImmediate = true,\n onDelete,\n onError,\n initialErrors,\n forceShowErrors,\n allowDataInference,\n getController,\n getData,\n propertyConfigs,\n collectionEditable\n } = props;\n\n const initialValue: PropertyWithId = {\n id: \"\",\n name: \"\"\n } as PropertyWithId;\n\n const disabled = (Boolean(property && !editableProperty(property)) && !collectionEditable);\n\n const lastSubmittedProperty = useRef<OnPropertyChangedParams | undefined>(property ? {\n id: propertyKey,\n previousId: propertyKey,\n property\n } : undefined);\n\n const doOnPropertyChanged = ({\n id,\n property\n }: OnPropertyChangedParams) => {\n const params = {\n id,\n previousId: lastSubmittedProperty.current?.id,\n property,\n namespace: propertyNamespace\n };\n lastSubmittedProperty.current = params;\n onPropertyChanged?.(params);\n };\n\n const formexController = useCreateFormex<PropertyWithId>({\n initialValues: property\n ? { id: propertyKey, ...property } as PropertyWithId\n : initialValue,\n initialErrors,\n validateOnChange: true,\n validateOnInitialRender: true,\n onSubmit: (newPropertyWithId, controller) => {\n console.debug(\"onSubmit\", newPropertyWithId);\n const {\n id,\n ...property\n } = newPropertyWithId;\n doOnPropertyChanged({\n id,\n property: { ...property, editable: property.editable ?? true }\n });\n if (!existingProperty)\n controller.resetForm({ values: initialValue });\n },\n validation: (values) => {\n const errors: Record<string, any> = {};\n if (includeIdAndName) {\n if (!values.name) {\n errors.name = \"Required\";\n } else {\n const nameError = validateName(values.name);\n if (nameError)\n errors.name = nameError;\n }\n if (!values.id) {\n errors.id = \"Required\";\n } else {\n const idError = validateId(values.id, existingPropertyKeys);\n if (idError)\n errors.id = idError;\n }\n }\n\n if (values.dataType === \"string\") {\n if (values.validation?.matches && !isValidRegExp(values.validation?.matches.toString())) {\n errors.validation = {\n matches: \"Invalid regular expression\"\n }\n }\n }\n if (values.dataType === \"reference\" && !values.path) {\n errors.path = \"You must specify a target collection for the field\";\n }\n if (values.propertyConfig === \"repeat\") {\n if (!(values as any).of) {\n errors.of = \"You need to specify a repeat field\";\n }\n }\n if (values.propertyConfig === \"block\") {\n if (!(values as any).oneOf) {\n errors.oneOf = \"You need to specify the properties of this block\";\n }\n }\n return errors;\n }\n });\n\n useEffect(() => {\n getController?.(formexController);\n }, [formexController, getController]);\n\n return <Formex value={formexController}>\n <PropertyEditFormFields\n onPropertyChanged={onPropertyChangedImmediate\n ? doOnPropertyChanged\n : undefined}\n onDelete={onDelete}\n includeIdAndTitle={includeIdAndName}\n propertyNamespace={propertyNamespace}\n onError={onError}\n showErrors={forceShowErrors || formexController.submitCount > 0}\n existing={existingProperty}\n autoUpdateId={autoUpdateId}\n inArray={inArray}\n autoOpenTypeSelect={autoOpenTypeSelect}\n disabled={disabled}\n getData={getData}\n allowDataInference={allowDataInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n {...formexController}/>\n </Formex>;\n }, (a, b) =>\n a.getData === b.getData &&\n a.propertyKey === b.propertyKey &&\n a.propertyNamespace === b.propertyNamespace &&\n a.includeIdAndName === b.includeIdAndName &&\n a.autoOpenTypeSelect === b.autoOpenTypeSelect &&\n a.autoUpdateId === b.autoUpdateId &&\n a.existingProperty === b.existingProperty\n);\n\nexport function PropertyFormDialog({\n open,\n onCancel,\n onOkClicked,\n onPropertyChanged,\n getData,\n collectionEditable,\n ...formProps\n }: PropertyFormProps & {\n open?: boolean;\n onOkClicked?: () => void;\n onCancel?: () => void;\n}) {\n const formexRef = useRef<FormexController<PropertyWithId>>();\n const getController = (helpers: FormexController<PropertyWithId>) => {\n formexRef.current = helpers;\n };\n\n return <Dialog\n open={open ?? false}\n maxWidth={\"xl\"}\n fullWidth={true}\n >\n <form noValidate={true}\n autoComplete={\"off\"}\n onSubmit={(e) => {\n e.preventDefault();\n e.stopPropagation();\n formexRef.current?.handleSubmit(e)\n }}>\n <DialogContent>\n <PropertyForm {...formProps}\n onPropertyChanged={(params) => {\n onPropertyChanged?.(params);\n onOkClicked?.();\n }}\n collectionEditable={collectionEditable}\n onPropertyChangedImmediate={false}\n getController={getController}\n getData={getData}\n />\n </DialogContent>\n\n <DialogActions>\n\n {onCancel && <Button\n variant={\"text\"}\n onClick={() => {\n onCancel();\n formexRef.current?.resetForm();\n }}>\n Cancel\n </Button>}\n\n <Button variant=\"outlined\"\n type={\"submit\"}\n color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n </form>\n </Dialog>;\n\n}\n\nfunction PropertyEditFormFields({\n values,\n errors,\n setValues,\n existing,\n autoUpdateId = false,\n autoOpenTypeSelect,\n includeIdAndTitle,\n onPropertyChanged,\n onDelete,\n propertyNamespace,\n onError,\n showErrors,\n disabled,\n inArray,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n includeIdAndTitle?: boolean;\n existing: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n propertyNamespace?: string;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n showErrors: boolean;\n inArray: boolean;\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n} & FormexController<PropertyWithId>) {\n\n const [selectOpen, setSelectOpen] = useState(autoOpenTypeSelect);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [selectedFieldConfigId, setSelectedFieldConfigId] = useState<string | undefined>(values?.dataType ? getFieldId(values) : undefined);\n\n const allSupportedFields = Object.entries(supportedFields).concat(Object.entries(propertyConfigs));\n\n const displayedWidgets = inArray\n ? allSupportedFields.filter(([_, propertyConfig]) => !isPropertyBuilder(propertyConfig.property) && propertyConfig.property?.dataType !== \"array\")\n : allSupportedFields;\n\n const deferredValues = useDeferredValue(values);\n const nameFieldRef = useRef<HTMLInputElement>(null);\n\n const lastSubmittedProperty = useRef<object>(values);\n\n const selectedWidgetError = showErrors && getIn(errors, \"selectedWidget\");\n\n useEffect(() => {\n if (onPropertyChanged) {\n if ((!includeIdAndTitle || deferredValues.id)) {\n const {\n id,\n ...property\n } = deferredValues;\n if (!equal(deferredValues, lastSubmittedProperty.current)) {\n onPropertyChanged({\n id,\n property,\n namespace: propertyNamespace\n });\n lastSubmittedProperty.current = deferredValues;\n }\n }\n }\n }, [deferredValues, includeIdAndTitle, onPropertyChanged, propertyNamespace]);\n\n useEffect(() => {\n if (values?.id && onError) {\n onError(values?.id, propertyNamespace, errors);\n }\n }, [errors, onError, propertyNamespace, values?.id]);\n\n const onWidgetSelectChanged = (newSelectedWidgetId: PropertyConfigId) => {\n setSelectedFieldConfigId(newSelectedWidgetId);\n setValues(updatePropertyFromWidget(values, newSelectedWidgetId, propertyConfigs));\n // Ugly hack to autofocus the name field\n setTimeout(() => {\n nameFieldRef.current?.focus();\n }, 0);\n };\n\n let childComponent;\n if (selectedFieldConfigId === \"text_field\" ||\n selectedFieldConfigId === \"multiline\" ||\n selectedFieldConfigId === \"markdown\" ||\n selectedFieldConfigId === \"email\") {\n childComponent =\n <StringPropertyField widgetId={selectedFieldConfigId}\n disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"url\") {\n childComponent =\n <UrlPropertyField disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"select\" ||\n selectedFieldConfigId === \"number_select\") {\n childComponent = <EnumPropertyField\n multiselect={false}\n allowDataInference={allowDataInference}\n updateIds={!existing}\n disabled={disabled}\n getData={getData}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"multi_select\" ||\n selectedFieldConfigId === \"multi_number_select\") {\n childComponent = <EnumPropertyField\n multiselect={true}\n updateIds={!existing}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"switch\") {\n childComponent = <BooleanPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"number_input\") {\n childComponent = <NumberPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"group\") {\n childComponent =\n <MapPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"block\") {\n childComponent =\n <BlockPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"reference\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"date_time\") {\n childComponent = <DateTimePropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_references\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"repeat\") {\n childComponent =\n <RepeatPropertyField showErrors={showErrors}\n existing={existing}\n getData={getData}\n allowDataInference={allowDataInference}\n disabled={disabled}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"key_value\") {\n childComponent =\n <KeyValuePropertyField disabled={disabled}/>;\n } else {\n childComponent = null;\n }\n\n return (\n <>\n {disabled && <InfoLabel mode={\"warn\"}>\n <Typography>This property can't be edited</Typography>\n <Typography variant={\"caption\"}>\n You may not have permission to\n edit it or it is defined in code with no <code>editable</code> flag\n </Typography>\n </InfoLabel>}\n\n <div className=\"flex mt-2 justify-between\">\n <div className={\"w-full flex flex-col gap-2\"}>\n <Select\n // className={\"w-full\"}\n error={Boolean(selectedWidgetError)}\n value={selectedFieldConfigId ?? \"\"}\n placeholder={\"Select a property widget\"}\n open={selectOpen}\n onOpenChange={setSelectOpen}\n position={\"item-aligned\"}\n disabled={disabled}\n renderValue={(value) => {\n if (!value) {\n return <em>Select a property\n widget</em>;\n }\n const key = value as PropertyConfigId;\n const propertyConfig = DEFAULT_FIELD_CONFIGS[key] ?? propertyConfigs[key];\n const baseProperty = propertyConfig.property;\n const baseFieldConfig = baseProperty && !isPropertyBuilder(baseProperty) ? getFieldConfig(baseProperty, propertyConfigs) : undefined;\n const optionDisabled = isPropertyBuilder(baseProperty) || (existing && baseProperty.dataType !== values?.dataType);\n const computedFieldConfig = baseFieldConfig ? mergeDeep(baseFieldConfig, propertyConfig) : propertyConfig;\n return <div\n onClick={(e) => {\n if (optionDisabled) {\n e.stopPropagation();\n e.preventDefault();\n }\n }}\n className={cn(\n \"flex items-center\",\n optionDisabled ? \"w-full pointer-events-none opacity-50\" : \"\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={computedFieldConfig}/>\n </div>\n <div className={\"flex flex-col items-start text-base text-left\"}>\n <div>{computedFieldConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"disabled\"}>\n {optionDisabled ? \"You can only switch to widgets that use the same data type\" : computedFieldConfig.description}\n </Typography>\n </div>\n </div>\n }}\n onValueChange={(value) => {\n onWidgetSelectChanged(value as PropertyConfigId);\n }}>\n {displayedWidgets.map(([key, propertyConfig]) => {\n const baseProperty = propertyConfig.property;\n const optionDisabled = existing && !isPropertyBuilder(baseProperty) && baseProperty.dataType !== values?.dataType;\n return <PropertySelectItem\n key={key}\n value={key}\n optionDisabled={optionDisabled}\n propertyConfig={propertyConfig}\n existing={existing}/>;\n })}\n </Select>\n\n {selectedWidgetError &&\n <Typography variant=\"caption\"\n className={\"ml-3.5\"}\n color={\"error\"}>Required</Typography>}\n\n {/*<Typography variant=\"caption\" className={\"ml-3.5\"}>Define your own custom properties and*/}\n {/* components</Typography>*/}\n\n </div>\n\n {onDelete && values?.id &&\n <IconButton\n variant={\"ghost\"}\n className=\"m-4\"\n disabled={disabled}\n onClick={() => setDeleteDialogOpen(true)}>\n <DeleteIcon/>\n </IconButton>}\n </div>\n\n <div className={\"grid grid-cols-12 gap-y-12 mt-8 mb-8\"}>\n {includeIdAndTitle &&\n <CommonPropertyFields showErrors={showErrors}\n disabledId={existing}\n isNewProperty={!existing}\n disabled={disabled}\n autoUpdateId={autoUpdateId}\n ref={nameFieldRef}/>}\n\n {childComponent}\n\n <div className={\"col-span-12\"}>\n <AdvancedPropertyValidation disabled={disabled}/>\n </div>\n </div>\n\n {onDelete &&\n <DeleteConfirmationDialog open={deleteDialogOpen}\n onAccept={() => onDelete(values?.id, propertyNamespace)}\n onCancel={() => setDeleteDialogOpen(false)}\n title={<div>Delete this property?</div>}\n body={\n <div> This will <b>not delete any\n data</b>, only modify the\n collection.</div>\n }/>}\n\n </>\n );\n}\n\nconst idRegEx = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\nfunction validateId(value?: string, existingPropertyKeys?: string[]) {\n\n let error;\n if (!value) {\n error = \"You must specify an id for the field\";\n }\n if (value && !value.match(idRegEx)) {\n error = \"The id can only contain letters, numbers and underscores (_), and not start with a number\";\n }\n if (value && existingPropertyKeys && existingPropertyKeys.includes(value)) {\n error = \"There is another field with this ID already\";\n }\n return error;\n}\n\nfunction validateName(value: string) {\n let error;\n if (!value) {\n error = \"You must specify a title for the field\";\n }\n return error;\n}\n","export function camelCase(str: string): string {\n if (!str) return \"\";\n return (str.slice(0, 1).toLowerCase() + str.slice(1))\n .replace(/([-_ ]){1,}/g, \" \")\n .split(/[-_ ]/)\n .reduce((cur, acc) => {\n return cur + acc[0].toUpperCase() + acc.substring(1);\n }, \"\");\n}\n","import { EntityCollection, useSnackbarController } from \"@firecms/core\";\nimport { Button, ContentCopyIcon, Dialog, DialogActions, DialogContent, Typography, } from \"@firecms/ui\";\nimport React from \"react\";\nimport JSON5 from \"json5\";\nimport { Highlight, themes } from \"prism-react-renderer\"\nimport { camelCase } from \"./utils/strings\";\n\nexport function GetCodeDialog({ collection, onOpenChange, open }: { onOpenChange: (open: boolean) => void, collection: any, open: any }) {\n\n const snackbarController = useSnackbarController();\n\n const code = \"import { EntityCollection } from \\\"firecms\\\";\\n\\nconst \" + (collection.name ? camelCase(collection.name) : \"my\") + \"Collection:EntityCollection = \" + JSON5.stringify(collectionToCode(collection), null, \"\\t\");\n return <Dialog open={open}\n onOpenChange={onOpenChange}\n maxWidth={\"4xl\"}>\n <DialogContent>\n <Typography variant={\"h6\"} className={\"my-4\"}>\n Code for {collection.name}\n </Typography>\n <Typography variant={\"body2\"} className={\"my-4 mb-8\"}>\n If you want to customise the collection in code, you can add this collection code to your CMS\n app configuration.\n More info in the <a\n rel=\"noopener noreferrer\"\n href={\"https://firecms.co/docs/customization_quickstart\"}>docs</a>.\n </Typography>\n <Highlight\n theme={themes.vsDark}\n code={code}\n language=\"typescript\"\n >\n {({ className, style, tokens, getLineProps, getTokenProps }) => (\n <pre style={style} className={\"p-4 rounded text-sm\"}>\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n\n </DialogContent>\n <DialogActions>\n <Button\n variant={\"text\"}\n size={\"small\"}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n snackbarController.open({\n type: \"success\",\n message: `Copied`\n })\n return navigator.clipboard.writeText(code);\n }}>\n <ContentCopyIcon size={\"small\"}/>\n Copy to clipboard\n </Button>\n <Button onClick={() => onOpenChange(false)}>Close</Button>\n </DialogActions>\n </Dialog>;\n}\n\nfunction collectionToCode(collection: EntityCollection): object {\n\n const propertyCleanup = (property: any) => {\n\n const updatedProperty = {\n ...property\n };\n\n delete updatedProperty.fromBuilder;\n delete updatedProperty.resolved;\n delete updatedProperty.propertiesOrder;\n delete updatedProperty.editable;\n\n if (updatedProperty.type === \"map\") {\n return {\n ...updatedProperty,\n properties: updatedProperty.properties.map(propertyCleanup)\n }\n }\n return updatedProperty;\n }\n\n return {\n id: collection.id,\n name: collection.name,\n singularName: collection.singularName,\n path: collection.path,\n description: collection.description,\n editable: true,\n collectionGroup: collection.collectionGroup,\n icon: collection.icon,\n group: collection.group,\n customId: collection.customId,\n initialFilter: collection.initialFilter,\n initialSort: collection.initialSort,\n properties: Object.entries(collection.properties ?? {})\n .map(([key, value]) => ({\n [key]: propertyCleanup(value)\n }))\n .reduce((a, b) => ({ ...a, ...b }), {}),\n subcollections: (collection.subcollections ?? []).map(collectionToCode)\n }\n\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport {\n EntityCollection,\n ErrorBoundary,\n isPropertyBuilder,\n makePropertiesEditable,\n Properties,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n useLargeLayout,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n AutoAwesomeIcon,\n Button,\n CircularProgress,\n cn,\n CodeIcon,\n DebouncedTextField,\n defaultBorderMixin,\n IconButton,\n Paper,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\n\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"./util\";\nimport { OnPropertyChangedParams, PropertyForm, PropertyFormDialog } from \"./PropertyEditView\";\nimport { PropertyTree } from \"./PropertyTree\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { GetCodeDialog } from \"./GetCodeDialog\";\n\ntype CollectionEditorFormProps = {\n showErrors: boolean;\n isNewCollection: boolean;\n propertyErrorsRef?: React.MutableRefObject<any>;\n onPropertyError: (propertyKey: string, namespace: string | undefined, error?: Record<string, any>) => void;\n setDirty?: (dirty: boolean) => void;\n reservedGroups?: string[];\n extraIcon: React.ReactNode;\n getUser: (uid: string) => User | null;\n getData?: () => Promise<object[]>;\n doCollectionInference: (collection: PersistedCollection) => Promise<Partial<EntityCollection> | null> | undefined;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport function CollectionPropertiesEditorForm({\n showErrors,\n isNewCollection,\n propertyErrorsRef,\n onPropertyError,\n setDirty,\n reservedGroups,\n extraIcon,\n getUser,\n getData,\n doCollectionInference,\n propertyConfigs,\n collectionEditable\n }: CollectionEditorFormProps) {\n\n const {\n values,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n errors,\n dirty\n } = useFormex<PersistedCollection>();\n\n const snackbarController = useSnackbarController();\n\n const largeLayout = useLargeLayout();\n const asDialog = !largeLayout\n\n // index of the selected property within the namespace\n const [selectedPropertyIndex, setSelectedPropertyIndex] = useState<number | undefined>();\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n const [codeDialogOpen, setCodeDialogOpen] = useState<boolean>(false);\n\n const [inferringProperties, setInferringProperties] = useState<boolean>(false);\n\n const [newPropertyDialogOpen, setNewPropertyDialogOpen] = useState<boolean>(false);\n const [inferredPropertyKeys, setInferredPropertyKeys] = useState<string[]>([]);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n useEffect(() => {\n if (setDirty)\n setDirty(dirty);\n }, [dirty]);\n\n const inferPropertiesFromData = doCollectionInference\n ? (): void => {\n if (!doCollectionInference)\n return;\n\n setInferringProperties(true);\n // @ts-ignore\n doCollectionInference(values)\n .then((newCollection) => {\n\n if (newCollection)\n makePropertiesEditable(newCollection.properties as Properties);\n\n if (!newCollection) {\n snackbarController.open({\n type: \"error\",\n message: \"Could not infer properties from data\"\n });\n return;\n }\n // find properties in the new collection, not present in the current one\n const newPropertyKeys = (newCollection.properties ? Object.keys(newCollection.properties) : [])\n .filter((propertyKey) => !values.properties[propertyKey]);\n if (newPropertyKeys.length === 0) {\n snackbarController.open({\n type: \"info\",\n message: \"No new properties found in existing data\"\n });\n return;\n }\n // add them to the current collection\n const updatedProperties = {\n ...newPropertyKeys.reduce((acc, propertyKey) => {\n acc[propertyKey] = (newCollection.properties ?? {})[propertyKey];\n return acc;\n }, {} as {\n [key: string]: PropertyOrBuilder\n }),\n ...values.properties\n };\n const updatedPropertiesOrder = [\n ...newPropertyKeys,\n ...(values.propertiesOrder ?? [])\n ];\n setFieldValue(\"properties\", updatedProperties, false);\n\n updatePropertiesOrder(updatedPropertiesOrder);\n\n setInferredPropertyKeys(newPropertyKeys);\n })\n .finally(() => {\n setInferringProperties(false);\n })\n }\n : undefined;\n\n const getCurrentPropertiesOrder = useCallback((namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"];\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n }, [values]);\n\n const updatePropertiesOrder = useCallback((newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n }, [setFieldValue]);\n\n const deleteProperty = useCallback((propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(idToPropertiesPath(fullId), undefined, false);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n const newPropertiesOrder = currentPropertiesOrder.filter((p) => p !== propertyKey);\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n setNewPropertyDialogOpen(false);\n\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }, [getCurrentPropertiesOrder, setFieldValue, updatePropertiesOrder]);\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n const onPropertyCreated = ({\n id,\n property\n }: {\n id?: string,\n property: Property\n }) => {\n if (!id) {\n throw Error(\"Need to include an ID when creating a new property\")\n }\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties)), id];\n\n updatePropertiesOrder(newPropertiesOrder);\n\n setNewPropertyDialogOpen(false);\n if (largeLayout) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n console.debug(\"onPropertyChanged, id change\", {\n id,\n property,\n previousId,\n namespace\n })\n\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n if (id) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n console.debug(\"onPropertyChanged\", {\n id,\n property,\n previousId,\n namespace,\n propertyPath\n })\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n\n };\n\n const onPropertyErrorInternal = useCallback((id: string, namespace?: string, error?: Record<string, any>) => {\n const propertyPath = id ? getFullId(id, namespace) : undefined;\n console.debug(\"onPropertyErrorInternal\", {\n id,\n namespace,\n error,\n propertyPath\n });\n if (propertyPath) {\n const hasError = error && Object.keys(error).length > 0;\n onPropertyError(id, namespace, hasError ? error : undefined);\n setFieldError(idToPropertiesPath(propertyPath), hasError ? \"Property error\" : undefined);\n }\n }, [])\n\n const closePropertyDialog = () => {\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n };\n\n const initialErrors = selectedPropertyKey && propertyErrorsRef?.current?.properties ? propertyErrorsRef.current.properties[selectedPropertyKey] : undefined;\n\n const emptyCollection = values?.propertiesOrder === undefined || values.propertiesOrder.length === 0;\n\n const usedPropertiesOrder = (values.propertiesOrder\n ? values.propertiesOrder\n : Object.keys(values.properties)) as string[];\n\n const owner = useMemo(() => values.ownerId ? getUser(values.ownerId) : null, [getUser, values.ownerId]);\n\n const onPropertyClick = useCallback((propertyKey: string, namespace?: string) => {\n console.debug(\"CollectionEditor: onPropertyClick\", {\n propertyKey,\n namespace\n });\n setSelectedPropertyIndex(usedPropertiesOrder.indexOf(propertyKey));\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n }, [usedPropertiesOrder]);\n\n const body = (\n <div className={\"grid grid-cols-12 gap-2 h-full bg-gray-50 dark:bg-gray-900\"}>\n <div className={cn(\n \"p-4 md:p-8 pb-20 md:pb-20\",\n \"col-span-12 lg:col-span-5 h-full overflow-auto\",\n !asDialog && \"border-r \" + defaultBorderMixin\n )}>\n\n <div className=\"flex my-2\">\n\n <div className=\"flex-grow mb-4\">\n\n <Field\n name={\"name\"}\n as={DebouncedTextField}\n invisible={true}\n className=\"-ml-1\"\n inputClassName=\"text-2xl font-headers\"\n placeholder={\"Collection name\"}\n size={\"small\"}\n required\n error={Boolean(errors?.name)}/>\n\n {owner &&\n <Typography variant={\"body2\"}\n className={\"ml-2\"}\n color={\"secondary\"}>\n Created by {owner.displayName}\n </Typography>}\n </div>\n\n {extraIcon && <div className=\"ml-4\">\n {extraIcon}\n </div>}\n\n <div className=\"ml-1 mt-2 flex flex-row gap-2\">\n <Tooltip title={\"Get the code for this collection\"}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={() => setCodeDialogOpen(true)}>\n <CodeIcon/>\n </IconButton>\n </Tooltip>\n {inferPropertiesFromData && <Tooltip title={\"Add new properties based on data\"}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={inferPropertiesFromData}>\n {inferringProperties ? <CircularProgress size={\"small\"}/> : <AutoAwesomeIcon/>}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}>\n <Button\n variant={\"outlined\"}\n onClick={() => setNewPropertyDialogOpen(true)}>\n <AddIcon/>\n </Button>\n </Tooltip>\n </div>\n </div>\n\n <ErrorBoundary>\n <PropertyTree\n className={\"pl-8\"}\n inferredPropertyKeys={inferredPropertyKeys}\n selectedPropertyKey={selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined}\n properties={values.properties}\n additionalFields={values.additionalFields}\n propertiesOrder={usedPropertiesOrder}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={isNewCollection ? deleteProperty : undefined}\n collectionEditable={collectionEditable}\n errors={errors}/>\n </ErrorBoundary>\n\n <Button className={\"mt-8 w-full\"}\n color=\"primary\"\n variant={\"outlined\"}\n size={\"large\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}>\n Add new property\n </Button>\n </div>\n\n {!asDialog &&\n <div className={\"col-span-12 lg:col-span-7 p-4 md:py-8 md:px-4 h-full overflow-auto pb-20 md:pb-20\"}>\n <Paper\n className=\"sticky top-8 p-4 min-h-full border border-transparent w-full flex flex-col justify-center \">\n\n {selectedPropertyFullId &&\n selectedProperty &&\n !isPropertyBuilder(selectedProperty) &&\n <PropertyForm\n inArray={false}\n key={`edit_view_${selectedPropertyIndex}`}\n existingProperty={!isNewCollection}\n autoUpdateId={false}\n allowDataInference={!isNewCollection}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n />}\n\n {!selectedProperty &&\n <div className={\"w-full flex flex-col items-center justify-center h-full gap-4\"}>\n <Typography variant={\"label\"} className=\"\">\n {emptyCollection\n ? \"Now you can add your first property\"\n : \"Select a property to edit it\"}\n </Typography>\n <Button variant={\"outlined\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n >\n <AddIcon/>\n Add new property\n </Button>\n </div>}\n\n {selectedProperty && isPropertyBuilder(selectedProperty) &&\n <Typography variant={\"label\"} className=\"flex items-center justify-center\">\n {\"This property is defined as a property builder in code\"}\n </Typography>}\n </Paper>\n </div>}\n\n {asDialog && <PropertyFormDialog\n inArray={false}\n open={selectedPropertyIndex !== undefined}\n key={`edit_view_${selectedPropertyIndex}`}\n autoUpdateId={!selectedProperty}\n allowDataInference={!isNewCollection}\n existingProperty={true}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n onOkClicked={asDialog\n ? closePropertyDialog\n : undefined\n }/>}\n\n </div>);\n\n return (<>\n\n {body}\n\n {/* This is the dialog used for new properties*/}\n <PropertyFormDialog\n inArray={false}\n existingProperty={false}\n autoOpenTypeSelect={true}\n autoUpdateId={true}\n forceShowErrors={showErrors}\n open={newPropertyDialogOpen}\n onCancel={() => setNewPropertyDialogOpen(false)}\n onPropertyChanged={onPropertyCreated}\n getData={getData}\n allowDataInference={!isNewCollection}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n existingPropertyKeys={values.propertiesOrder as string[]}/>\n\n <GetCodeDialog\n collection={values}\n open={codeDialogOpen}\n onOpenChange={setCodeDialogOpen}/>\n\n </>\n );\n}\n","import React from \"react\";\nimport { Button, Dialog, DialogActions, DialogContent, Typography } from \"@firecms/ui\";\n\nexport interface UnsavedChangesDialogProps {\n open: boolean;\n body?: React.ReactNode;\n title?: string;\n handleOk: () => void;\n handleCancel: () => void;\n}\n\nexport function UnsavedChangesDialog({\n open,\n handleOk,\n handleCancel,\n body,\n title\n }: UnsavedChangesDialogProps) {\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => open ? handleCancel() : handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogContent>\n <Typography variant={\"h6\"}>\n {title ?? \"Unsaved changes\"}\n </Typography>\n\n {body && <Typography>\n {body}\n </Typography>}\n <Typography>\n Are you sure?\n </Typography>\n\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"text\" onClick={handleCancel} autoFocus> Cancel </Button>\n <Button onClick={handleOk}> Ok </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { useCustomizationController } from \"@firecms/core\";\nimport { Button, Dialog, DialogActions, DialogContent, Typography } from \"@firecms/ui\";\nimport React from \"react\";\n\nexport function EntityCustomViewsSelectDialog({ open, onClose }: { open: boolean, onClose: (selectedViewKey?: string) => void }) {\n const {\n entityViews,\n } = useCustomizationController();\n\n return <Dialog\n maxWidth={\"md\"}\n open={open}>\n <DialogContent className={\"flex flex-col gap-4\"}>\n <Typography variant={\"h6\"}>\n Select view\n </Typography>\n {entityViews?.map((view) => {\n return <Button\n key={view.key}\n onClick={() => onClose(view.key)}\n fullWidth\n variant={\"text\"}\n >\n {view.name} ({view.key})\n </Button>;\n })}\n {(entityViews ?? []).length === 0 &&\n <Typography variant={\"body2\"}>\n No custom views defined\n </Typography>\n }\n </DialogContent>\n <DialogActions>\n <Button variant={\"outlined\"} onClick={() => onClose()}>Cancel</Button>\n </DialogActions>\n </Dialog>\n}\n","import React from \"react\";\nimport {\n DeleteConfirmationDialog,\n EntityCollection,\n EntityCustomView,\n resolveEntityView,\n useCustomizationController,\n User\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Alert,\n Button,\n Container,\n DeleteIcon,\n IconButton,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { CollectionEditorDialog } from \"./CollectionEditorDialog\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { EntityCustomViewsSelectDialog } from \"./EntityCustomViewsSelectDialog\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function SubcollectionsEditTab({\n collection,\n parentCollection,\n configController,\n collectionInference,\n getUser,\n parentCollectionIds\n }: {\n collection: PersistedCollection,\n parentCollection?: EntityCollection,\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n getUser: (uid: string) => User | null;\n parentCollectionIds?: string[];\n}) {\n\n const { entityViews: contextEntityViews } = useCustomizationController();\n\n const [subcollectionToDelete, setSubcollectionToDelete] = React.useState<string | undefined>();\n const [addEntityViewDialogOpen, setAddEntityViewDialogOpen] = React.useState<boolean>(false);\n const [viewToDelete, setViewToDelete] = React.useState<string | undefined>();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n editedCollectionId?: string,\n }>();\n\n const {\n values,\n setFieldValue,\n } = useFormex<EntityCollection>();\n\n const subcollections = collection.subcollections ?? [];\n const resolvedEntityViews = values.entityViews?.filter(e => typeof e === \"string\")\n .map(e => resolveEntityView(e, contextEntityViews))\n .filter(Boolean) as EntityCustomView[] ?? [];\n const hardCodedEntityViews = collection.entityViews?.filter(e => typeof e !== \"string\") as EntityCustomView[] ?? [];\n const totalEntityViews = resolvedEntityViews.length + hardCodedEntityViews.length;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"2xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n <div className={\"flex flex-col gap-16\"}>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h5\"}>\n Subcollections of {values.name}\n </Typography>\n\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n {subcollections && subcollections.length > 0 && <Table>\n <TableBody>\n {subcollections.map((subcollection) => (\n <TableRow key={subcollection.path}\n onClick={() => setCurrentDialog({\n isNewCollection: false,\n editedCollectionId: subcollection.id\n })}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {subcollection.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSubcollectionToDelete(subcollection.id);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>}\n\n <Button\n onClick={() => {\n setCurrentDialog({\n isNewCollection: true\n });\n }}\n variant={\"text\"}\n startIcon={<AddIcon/>}>\n Add subcollection\n </Button>\n\n </Paper>\n\n </div>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h5\"}>\n Custom views\n </Typography>\n\n {totalEntityViews === 0 &&\n <Alert action={<Button variant=\"text\"\n size={\"small\"}\n href={\"https://firecms.co/docs/customization_quickstart\"}\n component={\"a\"}\n rel=\"noopener noreferrer\"\n target=\"_blank\">More info</Button>}>\n Define your own custom views by uploading them with the CLI.\n </Alert>\n }\n\n {<>\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n <Table>\n <TableBody>\n {resolvedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setViewToDelete(view.key);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n {hardCodedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n <Typography variant={\"caption\"} className={\"flex-grow\"}>\n This view is defined in code with\n key <code>{view.key}</code>\n </Typography>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n <Button\n onClick={() => {\n setAddEntityViewDialogOpen(true);\n }}\n variant={\"text\"}\n startIcon={<AddIcon/>}>\n Add custom entity view\n </Button>\n </Paper>\n\n </>}\n\n\n </div>\n\n </div>\n </Container>\n\n <div style={{ height: \"52px\" }}/>\n\n {subcollectionToDelete &&\n <DeleteConfirmationDialog open={Boolean(subcollectionToDelete)}\n onAccept={() => {\n const props = {\n id: subcollectionToDelete,\n parentCollectionIds: [...(parentCollectionIds ?? []), collection.id]\n };\n console.debug(\"Deleting subcollection\", props)\n configController.deleteCollection(props);\n setSubcollectionToDelete(undefined);\n }}\n onCancel={() => setSubcollectionToDelete(undefined)}\n title={<>Delete this subcollection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>}/>}\n {viewToDelete &&\n <DeleteConfirmationDialog open={Boolean(viewToDelete)}\n onAccept={() => {\n setFieldValue(\"entityViews\", values.entityViews?.filter(e => e !== viewToDelete));\n setViewToDelete(undefined);\n }}\n onCancel={() => setViewToDelete(undefined)}\n title={<>Remove this view?</>}\n body={<>This will <b>not\n delete any data</b>, only\n the view in the CMS</>}/>}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={configController}\n parentCollection={collection}\n collectionInference={collectionInference}\n parentCollectionIds={[...parentCollectionIds ?? [], values.id]}\n isNewCollection={false}\n {...currentDialog}\n getUser={getUser}\n handleClose={() => {\n setCurrentDialog(undefined);\n }}/>\n\n <EntityCustomViewsSelectDialog\n open={addEntityViewDialogOpen}\n onClose={(selectedViewKey) => {\n if (selectedViewKey) {\n setFieldValue(\"entityViews\", [...(values.entityViews ?? []), selectedViewKey]);\n }\n setAddEntityViewDialogOpen(false);\n }}/>\n </div>\n );\n}\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const productsCollectionTemplate: EntityCollection = {\n id: \"products\",\n path: \"products\",\n name: \"Products\",\n singularName: \"Product\",\n icon: \"shopping_cart\",\n description: \"List of the products currently sold in your shop\",\n properties: makePropertiesEditable({\n name: {\n dataType: \"string\",\n name: \"Name\",\n description: \"Name of this product\",\n validation: {\n required: true\n }\n },\n brand: {\n dataType: \"string\",\n name: \"Brand\",\n validation: {\n required: true\n }\n },\n description: {\n dataType: \"string\",\n name: \"Description\",\n description: \"Description of this product, supports markdown\",\n markdown: true\n },\n main_image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n },\n description: \"Upload field for images\"\n },\n available: {\n dataType: \"boolean\",\n name: \"Available\",\n columnWidth: 100,\n description: \"Is this product available in the website\"\n },\n price: {\n dataType: \"number\",\n name: \"Price\",\n validation: {\n requiredMessage: \"You must set a positive price\",\n min: 0\n }\n },\n images: {\n dataType: \"array\",\n name: \"Images\",\n hideFromCollection: true,\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n },\n related_products: {\n dataType: \"array\",\n name: \"Related products\",\n description: \"Products related to this one\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n metadata: {\n name: \"Metadata\",\n description: \"This is an example of a map property\",\n dataType: \"map\",\n keyValue: true\n },\n added_on: {\n dataType: \"date\",\n name: \"Added on\",\n autoValue: \"on_create\"\n }\n })\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const blogCollectionTemplate:EntityCollection = {\n id: \"blog\",\n path: \"blog\",\n name: \"Blog\",\n singularName: \"Blog entry\",\n icon: \"article\",\n description: \"A collection of blog entries\",\n defaultSize: \"l\",\n properties: makePropertiesEditable({\n name: {\n name: \"Name\",\n validation: { required: true },\n dataType: \"string\"\n },\n header_image: {\n name: \"Header image\",\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n content: {\n name: \"Content\",\n description: \"Content blocks for the blog entry\",\n validation: { required: true },\n dataType: \"array\",\n oneOf: {\n typeField: \"type\",\n valueField: \"value\",\n properties: {\n text: {\n dataType: \"string\",\n name: \"Text\",\n markdown: true\n },\n quote: {\n dataType: \"string\",\n name: \"Quote\",\n multiline: true\n },\n images: {\n name: \"Images\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n description: \"This fields allows uploading multiple images at once and reordering\"\n },\n products: {\n name: \"Products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\",\n previewProperties: [\"name\", \"main_image\"]\n }\n }\n },\n propertiesOrder: [\"text\", \"quote\", \"images\", \"products\"]\n }\n },\n created_on: {\n name: \"Created on\",\n dataType: \"date\",\n autoValue: \"on_create\"\n },\n status: {\n name: \"Status\",\n validation: { required: true },\n dataType: \"string\",\n enumValues: {\n published: {\n id: \"published\",\n label: \"Published\",\n },\n draft: \"Draft\"\n },\n defaultValue: \"draft\"\n },\n publish_date: {\n name: \"Publish date\",\n dataType: \"date\",\n clearable: true\n },\n reviewed: {\n name: \"Reviewed\",\n dataType: \"boolean\"\n },\n tags: {\n name: \"Tags\",\n description: \"Example of generic array\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n previewAsTag: true\n }\n }\n }),\n initialFilter: {\n status: [\"==\", \"published\"]\n }\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const usersCollectionTemplate: EntityCollection = {\n id: \"users\",\n path: \"users\",\n name: \"Users\",\n singularName: \"User\",\n description: \"Registered users in the app/web\",\n icon: \"person\",\n properties: makePropertiesEditable({\n displayName: {\n name: \"Display name\",\n dataType: \"string\"\n },\n email: {\n name: \"Email\",\n dataType: \"string\",\n email: true\n },\n emailVerified: {\n name: \"Email verified\",\n dataType: \"boolean\"\n },\n phone: {\n name: \"Phone\",\n dataType: \"string\"\n },\n favourite_products: {\n name: \"Favourite products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n photoURL: {\n name: \"Photo URL\",\n dataType: \"string\",\n url: \"image\"\n }\n }),\n};\n","import { EntityCollection } from \"@firecms/core\";\n\nexport const pagesCollectionTemplate: EntityCollection = {\n id: \"pages\",\n path: \"pages\",\n name: \"Pages\",\n singularName: \"Page\",\n icon: \"insert_drive_file\",\n description: \"List of website pages that can be edited here\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Page Title\",\n validation: { required: true }\n },\n slug: {\n dataType: \"string\",\n name: \"URL Slug\",\n validation: {\n required: true,\n unique: true,\n matches: /^[a-z0-9]+(?:-[a-z0-9]+)*$/,\n matchesMessage: \"Must be lowercase, alphanumeric, and hyphenated\"\n }\n },\n hero_section: {\n dataType: \"map\",\n name: \"Hero Section\",\n properties: {\n headline: {\n dataType: \"string\",\n name: \"Headline\",\n validation: { required: true }\n },\n subhead: {\n dataType: \"string\",\n name: \"Subheadline\"\n },\n background_image: {\n dataType: \"string\",\n name: \"Background Image\",\n storage: {\n storagePath: \"page_hero/images\",\n acceptedFiles: [\"image/*\"],\n }\n },\n call_to_action: {\n dataType: \"string\",\n name: \"Call to Action\"\n },\n call_to_action_link: {\n dataType: \"string\",\n name: \"CTA Link\",\n url: true\n }\n }\n },\n content: {\n dataType: \"array\",\n name: \"Content\",\n oneOf: {\n properties: {\n section: {\n dataType: \"map\",\n name: \"Section\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Section Title\",\n validation: { required: true }\n },\n content: {\n dataType: \"string\",\n name: \"Section Content\",\n markdown: true\n },\n image: {\n dataType: \"string\",\n name: \"Section Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n link: {\n dataType: \"string\",\n name: \"Section Link\",\n url: true\n }\n }\n },\n image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n slider: {\n dataType: \"array\",\n name: \"Slider\",\n of: {\n dataType: \"map\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Title\",\n validation: { required: true }\n },\n image: {\n dataType: \"string\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n }\n }\n },\n }\n }\n },\n sidebar: {\n dataType: \"map\",\n name: \"Sidebar\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Sidebar Title\",\n validation: { required: false }\n },\n content: {\n dataType: \"string\",\n name: \"Sidebar Content\",\n markdown: true\n }\n }\n },\n seo_metadata: {\n dataType: \"map\",\n name: \"SEO Metadata\",\n properties: {\n meta_title: {\n dataType: \"string\",\n name: \"Meta Title\"\n },\n meta_description: {\n dataType: \"string\",\n name: \"Meta Description\"\n },\n focus_keywords: {\n dataType: \"array\",\n name: \"Focus Keywords\",\n of: {\n dataType: \"string\"\n }\n }\n }\n },\n footer_override: {\n dataType: \"string\",\n name: \"Footer Override\",\n markdown: true\n },\n publish_date: {\n dataType: \"date\",\n name: \"Publish Date\",\n validation: { required: true }\n },\n last_updated: {\n dataType: \"date\",\n name: \"Last Updated\",\n autoValue: \"on_update\"\n },\n is_published: {\n dataType: \"boolean\",\n name: \"Is Published\",\n columnWidth: 100,\n description: \"Should this page be live on the site?\"\n },\n author_uid: {\n dataType: \"reference\",\n name: \"Author\",\n path: \"users\"\n }\n }\n};\n","import React, { useEffect, useState } from \"react\";\nimport { EntityCollection, unslugify, } from \"@firecms/core\";\nimport { Button, Card, Chip, CircularProgress, cn, Container, Icon, Tooltip, Typography, } from \"@firecms/ui\";\n\nimport { productsCollectionTemplate } from \"./templates/products_template\";\nimport { blogCollectionTemplate } from \"./templates/blog_template\";\nimport { usersCollectionTemplate } from \"./templates/users_template\";\nimport { ImportFileUpload } from \"@firecms/data_import_export\";\nimport { pagesCollectionTemplate } from \"./templates/pages_template\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function CollectionEditorWelcomeView({\n path,\n pathSuggestions,\n parentCollection,\n onContinue,\n existingCollectionPaths\n }: {\n path: string;\n pathSuggestions?: (path: string) => Promise<string[]>;\n parentCollection?: EntityCollection;\n onContinue: (importData?: object[]) => void;\n existingCollectionPaths?: string[];\n}) {\n\n const [loadingPathSuggestions, setLoadingPathSuggestions] = useState(false);\n const [filteredPathSuggestions, setFilteredPathSuggestions] = useState<string[] | undefined>();\n useEffect(() => {\n if (pathSuggestions && existingCollectionPaths) {\n setLoadingPathSuggestions(true);\n pathSuggestions(path)\n .then(suggestions => {\n const filteredSuggestions = suggestions.filter(s => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === s.trim().toLowerCase()));\n setFilteredPathSuggestions(filteredSuggestions);\n })\n .finally(() => setLoadingPathSuggestions(false));\n }\n }, [existingCollectionPaths, path, pathSuggestions]);\n\n // const {\n // values,\n // setFieldValue,\n // setValues,\n // handleChange,\n // touched,\n // errors,\n // setFieldTouched,\n // isSubmitting,\n // submitCount\n // } = useFormex<EntityCollection>();\n\n const {\n values,\n setFieldValue,\n setValues,\n submitCount\n } = useFormex<EntityCollection>();\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div\n className=\"flex flex-row py-2 pt-3 items-center\">\n <Typography variant={\"h4\"} className={\"flex-grow\"}>\n New collection\n </Typography>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Use one of the existing paths in your database:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {loadingPathSuggestions && !filteredPathSuggestions && <CircularProgress size={\"small\"}/>}\n\n {filteredPathSuggestions?.map((suggestion, index) => (\n <Chip key={suggestion}\n colorScheme={\"cyanLighter\"}\n onClick={() => {\n setFieldValue(\"name\", unslugify(suggestion));\n setFieldValue(\"id\", suggestion);\n setFieldValue(\"path\", suggestion);\n setFieldValue(\"properties\", undefined);\n onContinue();\n }}\n size=\"small\">\n {suggestion}\n </Chip>\n ))}\n\n {!loadingPathSuggestions && (filteredPathSuggestions ?? [])?.length === 0 &&\n <Typography variant={\"caption\"}>\n No suggestions\n </Typography>\n }\n\n </div>\n\n </div>\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Select a template:\n </Typography>\n\n <div className={\"flex gap-4\"}>\n <TemplateButton title={\"Products\"}\n subtitle={\"A collection of products with images, prices and stock\"}\n icon={<Icon size={\"small\"} iconKey={productsCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(productsCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Users\"}\n subtitle={\"A collection of users with emails, names and roles\"}\n icon={<Icon size={\"small\"} iconKey={usersCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(usersCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Blog posts\"}\n subtitle={\"A collection of blog posts with images, authors and complex content\"}\n icon={<Icon size={\"small\"} iconKey={blogCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(blogCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Pages\"}\n subtitle={\"A collection of pages with images, authors and complex content\"}\n icon={<Icon size={\"small\"} iconKey={pagesCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\n }}/>\n </div>\n\n </div>\n\n {!parentCollection && <div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create a collection from a file (csv, json, xls, xslx...)\n </Typography>\n\n <ImportFileUpload onDataAdded={(data) => onContinue(data)}/>\n\n </div>}\n\n <div>\n\n <Button variant={\"text\"} onClick={() => onContinue()} className={\"my-2\"}>\n Continue from scratch\n </Button>\n </div>\n\n {/*<div style={{ height: \"52px\" }}/>*/}\n\n </Container>\n </div>\n );\n}\n\nexport function TemplateButton({\n title,\n subtitle,\n icon,\n onClick\n }: {\n title: string,\n icon: React.ReactNode,\n subtitle: string,\n onClick?: () => void\n}) {\n\n return (\n <Tooltip title={subtitle}>\n <Card\n onClick={onClick}\n className={cn(\n \"my-2 rounded-md border mx-0 p-6 px-4 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-gray-700 dark:text-slate-300\",\n \"hover:border-primary-dark hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n \"border-gray-400 dark:border-gray-600 \"\n )}\n >\n {icon}\n <div className={\"flex flex-col items-start\"}>\n\n <Typography variant={\"subtitle1\"}>\n {title}\n </Typography>\n {/*<Typography>*/}\n {/* {subtitle}*/}\n {/*</Typography>*/}\n\n </div>\n </Card>\n </Tooltip>\n );\n\n}\n","import {\n DataNewPropertiesMapping,\n getInferenceType,\n ImportConfig,\n ImportNewPropertyFieldPreview\n} from \"@firecms/data_import_export\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { PropertyConfigBadge, getFieldConfig, getFieldId, Properties, Property, PropertyConfig, } from \"@firecms/core\";\nimport { Container, Select, Tooltip, Typography } from \"@firecms/ui\";\nimport React, { useState } from \"react\";\nimport { OnPropertyChangedParams, PropertyFormDialog, PropertyWithId } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { PersistedCollection } from \"../../../types/persisted_collection\";\nimport { updatePropertyFromWidget } from \"../utils/update_property_for_widget\";\nimport { PropertySelectItem } from \"../PropertySelectItem\";\nimport { supportedFields } from \"../utils/supported_fields\";\nimport { buildPropertyFromData } from \"@firecms/schema_inference\";\n\nexport function CollectionEditorImportMapping({\n importConfig,\n propertyConfigs,\n collectionEditable\n }:\n {\n importConfig: ImportConfig,\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean\n }) {\n\n // const {\n // values,\n // setFieldValue,\n // setFieldTouched,\n // setValues,\n // submitCount\n // } = useFormex();\n\n const {\n setFieldValue,\n setFieldTouched,\n values\n } = useFormex<PersistedCollection>();\n const [selectedProperty, setSelectedProperty] = useState<PropertyWithId | undefined>(undefined);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n const propertyKey = selectedProperty ? selectedProperty.id : undefined;\n const property = selectedProperty || undefined;\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // setSelectedProperty(property);\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"];\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n }\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n // replace previousId with id in headersMapping\n const newHeadersMapping = { ...importConfig.headersMapping };\n Object.keys(newHeadersMapping).forEach((key) => {\n if (newHeadersMapping[key] === previousId) {\n newHeadersMapping[key] = id ?? \"\";\n }\n });\n importConfig.setHeadersMapping(newHeadersMapping);\n\n // if (id) {\n // setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n // setSelectedPropertyKey(id);\n // }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n };\n const onPropertyTypeChanged = async ({\n id,\n importKey,\n property,\n namespace\n }: OnPropertyChangedParams & {\n importKey: string\n }) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // we try to infer the rest of the properties of a property, from the type and the data\n const propertyData = importConfig.importData.map((d) => getIn(d, importKey));\n const inferredNewProperty = {\n ...buildPropertyFromData(propertyData, property, getInferenceType),\n editable: true\n };\n\n if (propertyPath) {\n if (inferredNewProperty) {\n setFieldValue(propertyPath, inferredNewProperty, false);\n } else {\n setFieldValue(propertyPath, property, false);\n }\n setFieldTouched(propertyPath, true, false);\n }\n };\n\n return (\n\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"6xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <Typography variant=\"h6\" className={\"mt-4\"}>Data property mapping</Typography>\n\n <DataNewPropertiesMapping headersMapping={importConfig.headersMapping}\n idColumn={importConfig.idColumn}\n originProperties={importConfig.originProperties}\n destinationProperties={values.properties as Properties}\n onIdPropertyChanged={(value) => importConfig.setIdColumn(value ?? undefined)}\n buildPropertyView={({\n property,\n propertyKey,\n importKey\n }) => {\n return <ImportNewPropertyFieldPreview\n property={property}\n propertyKey={propertyKey}\n onPropertyNameChanged={(propertyKey: string, value: string) => setFieldValue(`properties.${propertyKey}.name`, value, false)}\n onEditClick={() => {\n if (!propertyKey || !property) return;\n setSelectedProperty({\n ...property,\n id: propertyKey,\n editable: true\n });\n }}\n propertyTypeView={<PropertySelect property={property}\n disabled={false}\n onPropertyChanged={(props) => onPropertyTypeChanged({\n ...props,\n importKey\n })}\n propertyKey={propertyKey}\n propertyConfigs={propertyConfigs}/>}\n />;\n }}/>\n </Container>\n\n <PropertyFormDialog\n open={selectedProperty !== undefined}\n propertyKey={propertyKey}\n property={property}\n inArray={false}\n autoUpdateId={false}\n onPropertyChanged={onPropertyChanged}\n allowDataInference={false}\n collectionEditable={collectionEditable}\n onOkClicked={() => {\n setSelectedProperty(undefined);\n }}\n onCancel={() => {\n setSelectedProperty(undefined);\n }}\n autoOpenTypeSelect={false}\n existingProperty={false}\n propertyConfigs={propertyConfigs}/>\n\n <div style={{ height: \"52px\" }}/>\n </div>\n );\n\n}\n\nfunction PropertySelect({\n property,\n onPropertyChanged,\n propertyKey,\n propertyConfigs,\n disabled\n }: {\n property: Property | null,\n propertyKey: string | null,\n onPropertyChanged: ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n disabled?: boolean\n}) {\n\n const fieldId = property ? getFieldId(property) : null;\n const widget = property ? getFieldConfig(property, propertyConfigs) : null;\n\n const [selectOpen, setSelectOpen] = useState(false);\n\n return <Tooltip title={property && widget ? `${widget?.name} - ${property.dataType}` : undefined}\n open={selectOpen ? false : undefined}>\n <Select\n open={selectOpen}\n onOpenChange={setSelectOpen}\n invisible={true}\n className={\"w-full\"}\n disabled={disabled}\n error={!widget}\n value={fieldId ?? \"\"}\n placeholder={\"Select a property widget\"}\n position={\"item-aligned\"}\n renderValue={(value) => {\n if (!widget) return null;\n return <PropertyConfigBadge propertyConfig={widget}/>\n }}\n onValueChange={(newSelectedWidgetId) => {\n const newProperty = updatePropertyFromWidget(property, newSelectedWidgetId, propertyConfigs)\n if (!propertyKey) return;\n onPropertyChanged({\n id: propertyKey,\n property: newProperty,\n previousId: propertyKey,\n namespace: undefined\n });\n }}>\n {Object.entries(supportedFields).map(([key, widget]) => {\n return <PropertySelectItem\n key={key}\n value={key}\n optionDisabled={false}\n propertyConfig={widget}\n existing={false}/>;\n })\n }\n </Select>\n </Tooltip>;\n}\n","import { convertDataToEntity, getPropertiesMapping, ImportConfig } from \"@firecms/data_import_export\";\nimport { EntityCollectionTable, Properties, useSelectionController } from \"@firecms/core\";\nimport { useEffect } from \"react\";\nimport { Typography } from \"@firecms/ui\";\n\nexport function CollectionEditorImportDataPreview({ importConfig, properties, propertiesOrder }: {\n importConfig: ImportConfig,\n properties: Properties,\n propertiesOrder: string[]\n}) {\n\n useEffect(() => {\n const propertiesMapping = getPropertiesMapping(importConfig.originProperties, properties);\n const mappedData = importConfig.importData.map(d => convertDataToEntity(d, importConfig.idColumn, importConfig.headersMapping, properties, propertiesMapping, \"TEMP_PATH\"));\n importConfig.setEntities(mappedData);\n }, []);\n\n const selectionController = useSelectionController();\n\n return <EntityCollectionTable\n title={<div>\n <Typography variant={\"subtitle2\"}>Imported data preview</Typography>\n <Typography variant={\"caption\"}>Entities with the same id will be overwritten</Typography>\n </div>}\n tableController={{\n data: importConfig.entities,\n dataLoading: false,\n noMoreToLoad: false\n }}\n endAdornment={<div className={\"h-12\"}/>}\n filterable={false}\n sortable={false}\n selectionController={selectionController}\n displayedColumnIds={propertiesOrder.map(p => ({ key: p, disabled: false }))}\n properties={properties}/>\n\n}\n","import { Properties, slugify } from \"@firecms/core\";\nimport { ImportConfig } from \"@firecms/data_import_export\";\n\nexport function cleanPropertiesFromImport(properties: Properties, parentSlug = \"\"): {\n headersMapping: ImportConfig[\"headersMapping\"],\n properties: Properties,\n idColumn?: ImportConfig[\"idColumn\"],\n} {\n\n const result = Object.keys(properties).reduce((acc, key) => {\n const property = properties[key];\n const slug = slugify(key);\n const fullSlug = parentSlug ? `${parentSlug}.${slug}` : slug;\n\n if (property.dataType === \"map\" && property.properties) {\n const slugifiedResult = cleanPropertiesFromImport(property.properties as Properties, fullSlug);\n return {\n headersMapping: { ...acc.headersMapping, [key]: fullSlug },\n properties: {\n ...acc.properties,\n [slug]: {\n ...property,\n properties: slugifiedResult.properties,\n propertiesOrder: Object.keys(slugifiedResult.properties)\n }\n }\n }\n }\n\n const updatedProperties = {\n ...acc.properties,\n [slug]: property\n } as Properties;\n\n const headersMapping = { ...acc.headersMapping, [key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties,\n }\n }, { headersMapping: {}, properties: {} });\n\n const firstKey = Object.keys(result.headersMapping)?.[0];\n let idColumn: string | undefined;\n if (firstKey?.includes(\"id\") || firstKey?.includes(\"key\")) {\n idColumn = firstKey;\n }\n\n return {\n ...result,\n idColumn\n };\n}\n","import * as React from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n CircularProgressCenter,\n EntityCollection,\n ErrorView,\n isPropertyBuilder,\n MapProperty,\n mergeDeep,\n Properties,\n PropertiesOrBuilders,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n randomString,\n removeInitialAndTrailingSlashes,\n removeUndefined,\n TopNavigationResult,\n useAuthController,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n ArrowBackIcon,\n Button,\n cn,\n coolIconKeys,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DoneIcon,\n IconButton,\n LoadingButton,\n Tab,\n Tabs\n} from \"@firecms/ui\";\nimport { YupSchema } from \"./CollectionYupValidation\";\nimport { CollectionDetailsForm } from \"./CollectionDetailsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { UnsavedChangesDialog } from \"./UnsavedChangesDialog\";\nimport { SubcollectionsEditTab } from \"./SubcollectionsEditTab\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionEditorWelcomeView } from \"./CollectionEditorWelcomeView\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { getInferenceType, ImportSaveInProgress, useImportConfig } from \"@firecms/data_import_export\";\nimport { buildEntityPropertiesFromData } from \"@firecms/schema_inference\";\nimport { CollectionEditorImportMapping } from \"./import/CollectionEditorImportMapping\";\nimport { CollectionEditorImportDataPreview } from \"./import/CollectionEditorImportDataPreview\";\nimport { cleanPropertiesFromImport } from \"./import/clean_import_data\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { Formex, FormexController, useCreateFormex } from \"@firecms/formex\";\nimport { getFullIdPath } from \"./util\";\n\nexport interface CollectionEditorDialogProps {\n open: boolean;\n isNewCollection: boolean;\n initialValues?: {\n group?: string,\n path?: string,\n name?: string,\n }\n editedCollectionId?: string;\n fullPath?: string; // full path of this particular collection, like `products/123/locales`\n parentCollectionIds?: string[]; // path ids of the parent collection, like [`products`]\n handleClose: (collection?: EntityCollection) => void;\n configController: CollectionsConfigController;\n reservedGroups?: string[];\n collectionInference?: CollectionInference;\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n pathSuggestions?: (path?: string) => Promise<string[]>;\n getUser: (uid: string) => User | null;\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n parentCollection?: PersistedCollection;\n}\n\nexport function CollectionEditorDialog(props: CollectionEditorDialogProps) {\n\n const open = props.open;\n\n const [formDirty, setFormDirty] = React.useState<boolean>(false);\n const [unsavedChangesDialogOpen, setUnsavedChangesDialogOpen] = React.useState<boolean>(false);\n\n const handleCancel = useCallback(() => {\n if (!formDirty) {\n props.handleClose(undefined);\n } else {\n setUnsavedChangesDialogOpen(true);\n }\n }, [formDirty, props.handleClose]);\n\n useEffect(() => {\n if (!open) {\n setFormDirty(false);\n setUnsavedChangesDialogOpen(false);\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n fullWidth={true}\n fullHeight={true}\n scrollable={false}\n maxWidth={\"7xl\"}\n onOpenChange={(open) => !open ? handleCancel() : undefined}\n >\n {open && <CollectionEditor {...props}\n handleCancel={handleCancel}\n setFormDirty={setFormDirty}/>}\n\n <UnsavedChangesDialog\n open={unsavedChangesDialogOpen}\n handleOk={() => props.handleClose(undefined)}\n handleCancel={() => setUnsavedChangesDialogOpen(false)}\n body={\"There are unsaved changes in this collection\"}/>\n\n </Dialog>\n );\n}\n\ntype EditorView = \"welcome\"\n | \"details\"\n | \"import_data_mapping\"\n | \"import_data_preview\"\n | \"import_data_saving\"\n | \"properties\"\n | \"loading\"\n | \"extra_view\"\n | \"subcollections\";\n\nexport function CollectionEditor(props: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void\n}) {\n const { propertyConfigs } = useCustomizationController();\n const navigation = useNavigationController();\n const authController = useAuthController();\n\n const {\n topLevelNavigation,\n collections\n } = navigation;\n\n const initialValuesProp = props.initialValues;\n const includeTemplates = !initialValuesProp?.path && (props.parentCollectionIds ?? []).length === 0;\n const collectionsInThisLevel = (props.parentCollection ? props.parentCollection.subcollections : collections) ?? [];\n const existingPaths = collectionsInThisLevel.map(col => col.path.trim().toLowerCase());\n const existingIds = collectionsInThisLevel.map(col => col.id?.trim().toLowerCase()).filter(Boolean) as string[];\n const [collection, setCollection] = React.useState<PersistedCollection<any> | undefined>();\n const [initialLoadingCompleted, setInitialLoadingCompleted] = React.useState(false);\n\n useEffect(() => {\n try {\n if (navigation.initialised) {\n if (props.editedCollectionId) {\n setCollection(navigation.getCollectionFromPaths([...(props.parentCollectionIds ?? []), props.editedCollectionId]));\n } else {\n setCollection(undefined);\n }\n setInitialLoadingCompleted(true);\n }\n } catch (e) {\n console.error(e);\n }\n }, [navigation.getCollectionFromPaths, props.editedCollectionId, props.parentCollectionIds, navigation.initialised]);\n if (!topLevelNavigation) {\n throw Error(\"Internal: Navigation not ready in collection editor\");\n }\n\n const {\n groups\n }: TopNavigationResult = topLevelNavigation;\n\n const initialCollection = collection\n ? {\n ...collection,\n id: collection.id ?? collection.path ?? randomString(16)\n }\n : undefined;\n\n const initialValues: PersistedCollection<any> = initialCollection\n ? applyPropertyConfigs(initialCollection, propertyConfigs)\n : {\n id: initialValuesProp?.path ?? randomString(16),\n path: initialValuesProp?.path ?? \"\",\n name: initialValuesProp?.name ?? \"\",\n group: initialValuesProp?.group ?? \"\",\n properties: {} as PropertiesOrBuilders,\n propertiesOrder: [],\n icon: coolIconKeys[Math.floor(Math.random() * coolIconKeys.length)],\n ownerId: authController.user?.uid ?? \"\"\n };\n\n if (!initialLoadingCompleted) {\n return <CircularProgressCenter/>;\n }\n\n if (!props.isNewCollection && (!navigation.initialised || !initialLoadingCompleted)) {\n return <CircularProgressCenter/>;\n }\n\n return <CollectionEditorInternal\n {...props}\n initialValues={initialValues}\n existingPaths={existingPaths}\n existingIds={existingIds}\n includeTemplates={includeTemplates}\n collection={collection}\n setCollection={setCollection}\n groups={groups}\n propertyConfigs={propertyConfigs}/>\n\n}\n\nfunction CollectionEditorInternal<M extends Record<string, any>>({\n isNewCollection,\n configController,\n editedCollectionId,\n parentCollectionIds,\n fullPath,\n collectionInference,\n handleClose,\n reservedGroups,\n extraView,\n handleCancel,\n setFormDirty,\n pathSuggestions,\n getUser,\n parentCollection,\n getData,\n existingPaths,\n existingIds,\n includeTemplates,\n collection,\n setCollection,\n initialValues,\n propertyConfigs,\n groups\n }: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void,\n initialValues: PersistedCollection<M>,\n existingPaths: string[],\n existingIds: string[],\n includeTemplates: boolean,\n collection: PersistedCollection<M> | undefined,\n setCollection: (collection: PersistedCollection<M>) => void,\n propertyConfigs: Record<string, PropertyConfig<any>>,\n groups: string[],\n }\n) {\n\n const importConfig = useImportConfig();\n const navigation = useNavigationController();\n const snackbarController = useSnackbarController();\n\n // Use this ref to store which properties have errors\n const propertyErrorsRef = useRef({});\n\n const initialView = isNewCollection ? (includeTemplates ? \"welcome\" : \"details\") : \"properties\";\n const [currentView, setCurrentView] = useState<EditorView>(initialView); // this view can edit either the details view or the properties one\n\n const [error, setError] = React.useState<Error | undefined>();\n\n const saveCollection = (updatedCollection: PersistedCollection<M>): Promise<boolean> => {\n const id = updatedCollection.id || updatedCollection.path;\n return configController.saveCollection({\n id,\n collectionData: updatedCollection,\n previousId: editedCollectionId,\n parentCollectionIds\n })\n .then(() => {\n setError(undefined);\n return true;\n })\n .catch((e) => {\n setError(e);\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n };\n\n const setNextMode = useCallback(() => {\n if (currentView === \"details\") {\n if (importConfig.inUse) {\n setCurrentView(\"import_data_saving\");\n } else if (extraView) {\n setCurrentView(\"extra_view\");\n } else {\n setCurrentView(\"properties\");\n }\n } else if (currentView === \"welcome\") {\n setCurrentView(\"details\");\n } else if (currentView === \"import_data_mapping\") {\n setCurrentView(\"import_data_preview\");\n } else if (currentView === \"import_data_preview\") {\n setCurrentView(\"details\");\n } else if (currentView === \"extra_view\") {\n setCurrentView(\"properties\");\n } else {\n setCurrentView(\"details\");\n }\n\n }, [currentView, importConfig.inUse, extraView]);\n\n const doCollectionInference = useCallback((collection: PersistedCollection<any>) => {\n if (!collectionInference) return undefined;\n return collectionInference?.(collection.path, collection.collectionGroup ?? false, parentCollectionIds ?? []);\n }, [collectionInference, parentCollectionIds]);\n\n const inferCollectionFromData = useCallback(async (newCollection: PersistedCollection<M>) => {\n\n try {\n if (!doCollectionInference) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n\n setCurrentView(\"loading\");\n\n const inferredCollection = await doCollectionInference?.(newCollection);\n\n if (!inferredCollection) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n const values = {\n ...(newCollection ?? {})\n };\n\n if (Object.keys(inferredCollection.properties ?? {}).length > 0) {\n values.properties = inferredCollection.properties as PropertiesOrBuilders<M>;\n values.propertiesOrder = inferredCollection.propertiesOrder as Extract<keyof M, string>[];\n }\n\n if (!values.propertiesOrder) {\n values.propertiesOrder = Object.keys(values.properties) as Extract<keyof M, string>[];\n return values;\n }\n\n setCollection(values);\n console.debug(\"Inferred collection\", {\n newCollection: newCollection ?? {},\n values\n });\n return values;\n } catch (e: any) {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error inferring collection: \" + (e.message ?? \"Details in the console\")\n });\n return newCollection;\n }\n }, [parentCollectionIds, doCollectionInference]);\n\n const onSubmit = (newCollectionState: PersistedCollection<M>, formexController: FormexController<PersistedCollection<M>>) => {\n console.log(\"Submitting collection\", newCollectionState);\n try {\n\n if (!isNewCollection) {\n saveCollection(newCollectionState).then(() => {\n formexController.resetForm({ values: initialValues });\n handleClose(newCollectionState);\n });\n return;\n }\n\n if (currentView === \"welcome\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"details\") {\n if (extraView || importConfig.inUse) {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n } else if (isNewCollection) {\n inferCollectionFromData(newCollectionState)\n .then((values) => {\n formexController.resetForm({\n values: values ?? newCollectionState,\n touched: {\n path: true,\n name: true\n }\n });\n }).finally(() => {\n setNextMode();\n });\n } else {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n }\n } else if (currentView === \"extra_view\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"import_data_mapping\") {\n setNextMode();\n } else if (currentView === \"import_data_preview\") {\n setNextMode();\n } else if (currentView === \"properties\") {\n saveCollection(newCollectionState).then(() => {\n formexController.resetForm({ values: initialValues });\n setNextMode();\n handleClose(newCollectionState);\n });\n } else {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n }\n } catch (e: any) {\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n console.error(e);\n formexController.resetForm({ values: newCollectionState });\n }\n };\n\n const validation = (col: PersistedCollection) => {\n\n let errors: Record<string, any> = {};\n const schema = (currentView === \"properties\" || currentView === \"subcollections\" || currentView === \"details\") && YupSchema;\n if (schema) {\n try {\n schema.validateSync(col, { abortEarly: false });\n } catch (e: any) {\n e.inner.forEach((err: any) => {\n errors[err.path] = err.message;\n });\n }\n }\n if (currentView === \"properties\") {\n errors = { ...errors, ...propertyErrorsRef.current };\n }\n if (currentView === \"details\") {\n const pathError = validatePath(col.path, isNewCollection, existingPaths, col.id);\n if (pathError) {\n errors.path = pathError;\n }\n const idError = validateId(col.id, isNewCollection, existingPaths, existingIds);\n if (idError) {\n errors.id = idError;\n }\n }\n return errors;\n };\n\n const formController = useCreateFormex<PersistedCollection<M>>({\n initialValues,\n onSubmit,\n validation\n });\n\n const {\n values,\n setFieldValue,\n isSubmitting,\n dirty,\n submitCount\n } = formController;\n\n // TODO: getting data is only working in root collections with this code\n const path = values.path;\n const updatedFullPath = fullPath?.includes(\"/\") ? fullPath?.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + path : path; // TODO: this path is wrong\n const pathError = validatePath(path, isNewCollection, existingPaths, values.id);\n\n const parentPaths = !pathError && parentCollectionIds ? navigation.convertIdsToPaths(parentCollectionIds) : undefined;\n const resolvedPath = !pathError ? navigation.resolveAliasesFrom(updatedFullPath) : undefined;\n const getDataWithPath = resolvedPath && getData ? () => getData(resolvedPath, parentPaths ?? []) : undefined;\n\n useEffect(() => {\n setFormDirty(dirty);\n }, [dirty]);\n\n function onImportDataSet(data: object[]) {\n importConfig.setInUse(true);\n buildEntityPropertiesFromData(data, getInferenceType)\n .then((properties) => {\n const res = cleanPropertiesFromImport(properties);\n\n setFieldValue(\"properties\", res.properties);\n setFieldValue(\"propertiesOrder\", Object.keys(res.properties));\n\n importConfig.setIdColumn(res.idColumn);\n importConfig.setImportData(data);\n importConfig.setHeadersMapping(res.headersMapping);\n importConfig.setOriginProperties(res.properties);\n });\n }\n\n const validValues = Boolean(values.name) && Boolean(values.id);\n\n const onImportMappingComplete = () => {\n const updatedProperties = { ...values.properties };\n if (importConfig.idColumn)\n delete updatedProperties[importConfig.idColumn];\n setFieldValue(\"properties\", updatedProperties);\n // setFieldValue(\"propertiesOrder\", Object.values(importConfig.headersMapping));\n setNextMode();\n };\n\n const editable = collection?.editable === undefined || collection?.editable === true;\n const collectionEditable = editable || isNewCollection;\n\n return <DialogContent fullHeight={true}>\n <Formex value={formController}>\n\n <>\n {!isNewCollection && <Tabs value={currentView}\n className={cn(defaultBorderMixin, \"justify-end bg-gray-50 dark:bg-gray-950 border-b\")}\n onValueChange={(v) => setCurrentView(v as EditorView)}>\n <Tab value={\"details\"}>\n Details\n </Tab>\n <Tab value={\"properties\"}>\n Properties\n </Tab>\n <Tab value={\"subcollections\"}>\n Additional views\n </Tab>\n </Tabs>}\n\n <form noValidate\n onSubmit={formController.handleSubmit}\n className={cn(\n isNewCollection ? \"h-full\" : \"h-[calc(100%-48px)]\",\n \"flex-grow flex flex-col relative\")}>\n\n {currentView === \"loading\" &&\n <CircularProgressCenter/>}\n\n {currentView === \"extra_view\" &&\n path &&\n extraView?.View &&\n <extraView.View path={path}/>}\n\n {currentView === \"welcome\" &&\n <CollectionEditorWelcomeView\n path={path}\n onContinue={(importData) => {\n if (importData) {\n onImportDataSet(importData);\n setCurrentView(\"import_data_mapping\");\n } else {\n setCurrentView(\"details\");\n }\n }}\n existingCollectionPaths={existingPaths}\n parentCollection={parentCollection}\n pathSuggestions={pathSuggestions}/>}\n\n {currentView === \"import_data_mapping\" && importConfig &&\n <CollectionEditorImportMapping importConfig={importConfig}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>}\n\n {currentView === \"import_data_preview\" && importConfig &&\n <CollectionEditorImportDataPreview importConfig={importConfig}\n properties={values.properties as Properties}\n propertiesOrder={values.propertiesOrder as string[]}/>}\n\n {currentView === \"import_data_saving\" && importConfig &&\n <ImportSaveInProgress importConfig={importConfig}\n collection={values}\n path={path}\n onImportSuccess={async (importedCollection) => {\n snackbarController.open({\n type: \"info\",\n message: \"Data imported successfully\"\n });\n await saveCollection(values);\n handleClose(importedCollection);\n }}\n />}\n\n {currentView === \"details\" &&\n <CollectionDetailsForm\n existingPaths={existingPaths}\n existingIds={existingIds}\n groups={groups}\n parentCollectionIds={parentCollectionIds}\n parentCollection={parentCollection}\n isNewCollection={isNewCollection}/>}\n\n {currentView === \"subcollections\" && collection &&\n <SubcollectionsEditTab\n parentCollection={parentCollection}\n configController={configController}\n getUser={getUser}\n collectionInference={collectionInference}\n parentCollectionIds={parentCollectionIds}\n collection={collection}/>}\n\n {currentView === \"properties\" &&\n <CollectionPropertiesEditorForm\n showErrors={submitCount > 0}\n isNewCollection={isNewCollection}\n reservedGroups={reservedGroups}\n onPropertyError={(propertyKey, namespace, error) => {\n const current = removeUndefined({\n ...propertyErrorsRef.current,\n [getFullIdPath(propertyKey, namespace)]: removeUndefined(error, true)\n }, true);\n propertyErrorsRef.current = current;\n formController.validate();\n }}\n getUser={getUser}\n getData={getDataWithPath}\n doCollectionInference={doCollectionInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n extraIcon={extraView?.icon &&\n <IconButton\n color={\"primary\"}\n onClick={() => setCurrentView(\"extra_view\")}>\n {extraView.icon}\n </IconButton>}/>\n }\n\n {currentView !== \"welcome\" && <DialogActions\n position={\"absolute\"}>\n {error && <ErrorView error={error}/>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_mapping\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n importConfig.setInUse(false);\n return setCurrentView(\"welcome\");\n }}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_preview\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n setCurrentView(\"import_data_mapping\");\n }}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"details\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"welcome\")}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && currentView === \"properties\" && <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"details\")}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n <Button variant={\"text\"}\n onClick={() => {\n handleCancel();\n }}>\n Cancel\n </Button>\n\n {isNewCollection && currentView === \"import_data_mapping\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={onImportMappingComplete}\n >\n Next\n </Button>}\n\n {isNewCollection && currentView === \"import_data_preview\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={() => {\n setNextMode();\n }}\n >\n Next\n </Button>}\n\n {isNewCollection && (currentView === \"details\" || currentView === \"properties\") &&\n <LoadingButton\n variant={\"filled\"}\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n disabled={isSubmitting || (currentView === \"details\" && !validValues)}\n startIcon={currentView === \"properties\"\n ? <DoneIcon/>\n : undefined}\n >\n {currentView === \"details\" && \"Next\"}\n {currentView === \"properties\" && \"Create collection\"}\n </LoadingButton>}\n\n {!isNewCollection && <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Update collection\n </LoadingButton>}\n\n </DialogActions>}\n </form>\n </>\n\n </Formex>\n\n </DialogContent>\n\n}\n\nfunction applyPropertyConfigs<M extends Record<string, any> = any>(collection: PersistedCollection<M>, propertyConfigs: Record<string, PropertyConfig<any>>): PersistedCollection<M> {\n const { properties, ...rest } = collection;\n const propertiesResult: PropertiesOrBuilders<any> = {};\n if (properties) {\n Object.keys(properties).forEach((key) => {\n propertiesResult[key] = applyPropertiesConfig(properties[key] as PropertyOrBuilder, propertyConfigs);\n });\n }\n\n return { ...rest, properties: propertiesResult };\n}\n\nfunction applyPropertiesConfig(property: PropertyOrBuilder, propertyConfigs: Record<string, PropertyConfig<any>>) {\n let internalProperty = property;\n if (propertyConfigs && typeof internalProperty === \"object\" && internalProperty.propertyConfig) {\n const propertyConfig = propertyConfigs[internalProperty.propertyConfig];\n if (propertyConfig && isPropertyBuilder(propertyConfig.property)) {\n internalProperty = propertyConfig.property;\n } else {\n\n if (propertyConfig) {\n internalProperty = mergeDeep(propertyConfig.property, internalProperty);\n }\n\n if (!isPropertyBuilder(internalProperty) && internalProperty.dataType === \"map\" && internalProperty.properties) {\n const properties: Record<string, PropertyOrBuilder> = {};\n Object.keys(internalProperty.properties).forEach((key) => {\n properties[key] = applyPropertiesConfig(((internalProperty as MapProperty).properties as Properties)[key] as Property, propertyConfigs);\n });\n internalProperty = { ...internalProperty, properties };\n }\n\n }\n }\n return internalProperty;\n\n}\n\nconst validatePath = (value: string, isNewCollection: boolean, existingPaths: string[], idValue?: string) => {\n let error;\n if (!value) {\n error = \"You must specify a path in the database for this collection\";\n }\n // if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n // error = \"There is already a collection which uses this path as an id\";\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()) && !idValue)\n error = \"There is already a collection with the specified path. If you want to have multiple collections referring to the same database path, make sure the have different ids\";\n\n const subpaths = removeInitialAndTrailingSlashes(value).split(\"/\");\n if (subpaths.length % 2 === 0) {\n error = `Collection paths must have an odd number of segments: ${value}`;\n }\n return error;\n};\n\nconst validateId = (value: string, isNewCollection: boolean, existingPaths: string[], existingIds: string[]) => {\n if (!value) return undefined;\n let error;\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection that uses this value as a path\";\n if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection which uses this id\";\n // if (error) {\n // setAdvancedPanelExpanded(true);\n // }\n return error;\n};\n","import React, { PropsWithChildren, useCallback, useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport {\n Property,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport { CollectionEditorDialog } from \"./ui/collection_editor/CollectionEditorDialog\";\nimport { useNavigate } from \"react-router\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { PropertyFormDialog } from \"./ui/collection_editor/PropertyEditView\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\n\nexport const ConfigControllerContext = React.createContext<CollectionsConfigController>({} as any);\nexport const CollectionEditorContext = React.createContext<CollectionEditorController>({} as any);\n\nexport interface ConfigControllerProviderProps {\n /**\n * Controller for managing the collections' config.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Callback used to infer the schema from the data.\n */\n collectionInference?: CollectionInference;\n\n /**\n * Use this builder to define the permissions for the configuration per user.\n */\n configPermissions?: CollectionEditorPermissionsBuilder;\n\n /**\n * Groups that cannot be used to create new collections.\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n pathSuggestions?: (path?: string) => Promise<string[]>;\n\n getUser: (uid: string) => User | null\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n}\n\nexport const ConfigControllerProvider = React.memo(\n function ConfigControllerProvider({\n children,\n collectionConfigController,\n configPermissions,\n reservedGroups,\n collectionInference,\n extraView,\n pathSuggestions,\n getUser,\n getData,\n onAnalyticsEvent\n }: PropsWithChildren<ConfigControllerProviderProps>) {\n\n const navigation = useNavigationController();\n const navigate = useNavigate();\n const snackbarController = useSnackbarController();\n const { propertyConfigs } = useCustomizationController();\n\n const {\n collections\n } = navigation;\n const existingPaths = (collections ?? []).map(col => col.path.trim().toLowerCase());\n\n const [rootPathSuggestions, setRootPathSuggestions] = React.useState<string[] | undefined>();\n useEffect(() => {\n if (pathSuggestions) {\n pathSuggestions().then((paths) => {\n setRootPathSuggestions(paths.filter(p => !existingPaths.includes(p.trim().toLowerCase())));\n });\n }\n }, [pathSuggestions]);\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n parentCollection?: PersistedCollection,\n editedCollectionId?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n initialValues?: {\n path?: string,\n group?: string,\n name?: string\n },\n redirect: boolean\n }>();\n\n const [currentPropertyDialog, setCurrentPropertyDialog] = React.useState<{\n propertyKey?: string,\n property?: Property,\n namespace?: string,\n parentCollection?: PersistedCollection,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n fullPath?: string,\n parentCollectionIds: string[],\n collectionEditable: boolean;\n }>();\n\n const defaultConfigPermissions: CollectionEditorPermissionsBuilder = useCallback(() => ({\n createCollections: true,\n editCollections: true,\n deleteCollections: true\n }), []);\n\n const editCollection = useCallback(({\n id,\n fullPath,\n parentCollectionIds,\n parentCollection\n }: {\n id?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection\n }) => {\n console.debug(\"Edit collection\", id, fullPath, parentCollectionIds, parentCollection);\n onAnalyticsEvent?.(\"edit_collection\", { id, fullPath });\n setCurrentDialog({\n editedCollectionId: id,\n fullPath,\n parentCollectionIds,\n isNewCollection: false,\n parentCollection,\n redirect: false\n });\n }, []);\n\n const editProperty = useCallback(({\n propertyKey,\n property,\n editedCollectionId,\n currentPropertiesOrder,\n parentCollectionIds,\n collection\n }: {\n propertyKey?: string,\n property?: Property,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n parentCollectionIds: string[],\n collection: PersistedCollection,\n }) => {\n console.debug(\"Edit property\", propertyKey, property, editedCollectionId, currentPropertiesOrder, parentCollectionIds, collection);\n onAnalyticsEvent?.(\"edit_property\", { propertyKey, editedCollectionId });\n // namespace is all the path until the last dot\n const namespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(0, propertyKey.lastIndexOf(\".\"))\n : undefined;\n const propertyKeyWithoutNamespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(propertyKey.lastIndexOf(\".\") + 1)\n : propertyKey;\n setCurrentPropertyDialog({\n propertyKey: propertyKeyWithoutNamespace,\n property,\n namespace,\n currentPropertiesOrder,\n editedCollectionId: editedCollectionId,\n parentCollectionIds,\n collectionEditable: collection?.editable ?? false\n });\n }, []);\n\n const createCollection = React.useCallback(({\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n }: {\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection\n initialValues?: {\n group?: string,\n path?: string,\n name?: string\n },\n redirect: boolean,\n sourceClick?: string\n }) => {\n console.debug(\"Create collection\", { parentCollectionIds, parentCollection, initialValues, redirect, sourceClick });\n onAnalyticsEvent?.(\"create_collection\", { parentCollectionIds, parentCollection, initialValues, redirect, sourceClick });\n setCurrentDialog({\n isNewCollection: true,\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect\n });\n }, []);\n\n const getPathSuggestions = !pathSuggestions\n ? undefined\n : (path?: string) => {\n if (!path && rootPathSuggestions)\n return Promise.resolve(rootPathSuggestions);\n else {\n return pathSuggestions?.(path);\n }\n }\n\n return (\n <ConfigControllerContext.Provider value={collectionConfigController}>\n <CollectionEditorContext.Provider\n value={{\n editCollection,\n createCollection,\n editProperty,\n configPermissions: configPermissions ?? defaultConfigPermissions,\n rootPathSuggestions\n }}>\n\n {children}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={collectionConfigController}\n isNewCollection={false}\n collectionInference={collectionInference}\n {...currentDialog}\n getData={getData}\n reservedGroups={reservedGroups}\n extraView={extraView}\n pathSuggestions={getPathSuggestions}\n getUser={getUser}\n handleClose={(collection) => {\n if (currentDialog?.redirect) {\n if (collection && currentDialog?.isNewCollection && !currentDialog.parentCollectionIds.length) {\n const url = navigation.buildUrlCollectionPath(collection.id ?? collection.path);\n navigate(url);\n }\n }\n setCurrentDialog(undefined);\n }}/>\n\n {/* Used for editing properties*/}\n <PropertyFormDialog\n open={Boolean(currentPropertyDialog)}\n includeIdAndName={true}\n existingProperty={Boolean(currentPropertyDialog?.propertyKey)}\n autoUpdateId={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n autoOpenTypeSelect={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n inArray={false}\n collectionEditable={currentPropertyDialog?.collectionEditable ?? false}\n getData={getData && currentPropertyDialog?.editedCollectionId\n ? () => {\n console.debug(\"get data for property\", currentPropertyDialog?.editedCollectionId);\n const resolvedPath = navigation.resolveAliasesFrom(currentPropertyDialog.editedCollectionId!)\n return getData(resolvedPath, []);\n }\n : undefined}\n onPropertyChanged={({\n id,\n property\n }) => {\n if (!currentPropertyDialog) return;\n if (!id) return;\n const newProperty = !(currentPropertyDialog.propertyKey);\n return collectionConfigController.saveProperty({\n path: currentPropertyDialog?.editedCollectionId,\n property,\n propertyKey: id,\n newPropertiesOrder: newProperty && currentPropertyDialog.currentPropertiesOrder ? [...currentPropertyDialog.currentPropertiesOrder, id] : undefined,\n namespace: currentPropertyDialog.namespace,\n parentCollectionIds: currentPropertyDialog.parentCollectionIds\n })\n .catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onPropertyChangedImmediate={false}\n onDelete={() => {\n if (!currentPropertyDialog?.propertyKey) return;\n const newPropertiesOrder = currentPropertyDialog?.currentPropertiesOrder?.filter(p => p !== currentPropertyDialog?.propertyKey);\n return collectionConfigController.deleteProperty({\n path: currentPropertyDialog?.editedCollectionId,\n propertyKey: currentPropertyDialog?.propertyKey,\n namespace: currentPropertyDialog?.namespace,\n newPropertiesOrder,\n parentCollectionIds: currentPropertyDialog?.parentCollectionIds\n })\n .then(() => {\n setCurrentPropertyDialog(undefined);\n }).catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onError={() => {\n }}\n onOkClicked={() => {\n setCurrentPropertyDialog(undefined);\n }}\n onCancel={() => {\n setCurrentPropertyDialog(undefined);\n }}\n initialErrors={{}}\n forceShowErrors={false}\n existingPropertyKeys={[]}\n allowDataInference={true}\n propertyConfigs={propertyConfigs}\n property={currentPropertyDialog?.property}\n propertyKey={currentPropertyDialog?.propertyKey}/>\n\n </CollectionEditorContext.Provider>\n\n </ConfigControllerContext.Provider>\n );\n }, equal);\n","import { useContext } from \"react\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorContext } from \"./ConfigControllerProvider\";\n\n/**\n * Hook to access the collection editor controller.\n * The methods in this controller can be used to open the collection editor dialog.\n */\nexport const useCollectionEditorController = (): CollectionEditorController => useContext(CollectionEditorContext);\n","import { useContext } from \"react\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { ConfigControllerContext } from \"./ConfigControllerProvider\";\n\n/**\n * Use this hook to access the configuration controller.\n * You can use it to get the list of collections, and to save/delete collections.\n */\nexport const useCollectionsConfigController = (): CollectionsConfigController => useContext(ConfigControllerContext);\n","import equal from \"react-fast-compare\"\n\nimport {\n CollectionActionsProps,\n mergeDeep,\n useAuthController,\n useNavigationController,\n useSnackbarController\n} from \"@firecms/core\";\nimport { Button, IconButton, SaveIcon, SettingsIcon, Tooltip, UndoIcon, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionAction({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n const collectionEditorController = useCollectionEditorController();\n const configController = useCollectionsConfigController();\n const snackbarController = useSnackbarController();\n\n const parentCollection = navigationController.getCollectionFromIds(parentCollectionIds);\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n let saveDefaultFilterButton = null;\n if (!equal(getObjectOrNull(tableController.filterValues), getObjectOrNull(collection.initialFilter)) ||\n !equal(getObjectOrNull(tableController.sortBy), getObjectOrNull(collection.initialSort))) {\n saveDefaultFilterButton = <>\n {(collection.initialFilter || collection.initialSort) && <Tooltip\n title={\"Reset to default filter and sort\"}>\n <Button\n color={\"primary\"}\n size={\"small\"}\n variant={\"text\"}\n onClick={() => {\n tableController.clearFilter?.();\n if (collection?.initialFilter)\n tableController.setFilterValues?.(collection?.initialFilter);\n if (collection?.initialSort)\n tableController.setSortBy?.(collection?.initialSort);\n }}>\n <UndoIcon/>\n </Button>\n </Tooltip>}\n\n <Tooltip\n title={tableController.sortBy || tableController.filterValues ? \"Save default filter and sort\" : \"Clear default filter and sort\"}>\n <Button\n color={\"primary\"}\n size={\"small\"}\n variant={\"outlined\"}\n onClick={() => configController\n ?.saveCollection({\n id: collection.id,\n parentCollectionIds,\n collectionData: mergeDeep(collection as PersistedCollection,\n {\n initialFilter: tableController.filterValues ?? null,\n initialSort: tableController.sortBy ?? null\n })\n }).then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"Default config saved\"\n });\n })}>\n <SaveIcon/>\n </Button>\n </Tooltip>\n </>;\n }\n\n const editorButton = <Tooltip\n title={canEditCollection ? \"Edit collection\" : \"You don't have permissions to edit this collection\"}>\n <IconButton\n color={\"primary\"}\n disabled={!canEditCollection}\n onClick={canEditCollection\n ? () => collectionEditorController?.editCollection({ id: collection.id, fullPath, parentCollectionIds, parentCollection: parentCollection as PersistedCollection })\n : undefined}>\n <SettingsIcon/>\n </IconButton>\n </Tooltip>;\n\n return <>\n {canEditCollection && saveDefaultFilterButton}\n {editorButton}\n </>\n\n}\n\nfunction getObjectOrNull(o?: object): object | null {\n if (o && Object.keys(o).length === 0)\n return o\n return o ?? null;\n}\n","import {\n DeleteConfirmationDialog,\n PluginHomePageActionsProps,\n useAuthController,\n useSnackbarController\n} from \"@firecms/core\";\nimport { DeleteIcon, IconButton, Menu, MenuItem, MoreVertIcon, SettingsIcon, } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useCallback, useState } from \"react\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\n\nexport function HomePageEditorCollectionAction({\n path,\n collection\n }: PluginHomePageActionsProps) {\n\n const snackbarController = useSnackbarController();\n const authController = useAuthController();\n const configController = useCollectionsConfigController();\n const collectionEditorController = useCollectionEditorController();\n\n const permissions = collectionEditorController.configPermissions({\n user: authController.user,\n collection\n });\n\n const onEditCollectionClicked = useCallback(() => {\n collectionEditorController?.editCollection({ id: collection.id, parentCollectionIds: [] });\n }, [collectionEditorController, path]);\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = useCallback(() => {\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n }, [path, configController]);\n\n return <>\n\n <div>\n {permissions.deleteCollections &&\n <Menu\n trigger={<IconButton>\n <MoreVertIcon size={\"small\"}/>\n </IconButton>}\n >\n <MenuItem onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setDeleteRequested(true);\n }}>\n <DeleteIcon/>\n Delete\n </MenuItem>\n\n </Menu>\n\n }\n\n {permissions.editCollections &&\n <IconButton\n onClick={(event) => {\n onEditCollectionClicked();\n }}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>}\n </div>\n\n <DeleteConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete this collection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>}/>\n </>;\n\n}\n","import { PluginHomePageAdditionalCardsProps, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Card, cn, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionCard({\n group,\n context\n }: PluginHomePageAdditionalCardsProps) {\n\n if (!context.navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n return (\n <Card className={cn(\"h-full p-4 min-h-[124px]\")}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n initialValues: group ? { group } : undefined,\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n\n <div\n className=\"flex flex-col items-start h-full w-full items-center justify-center h-full w-full flex-grow flex-col\">\n <AddIcon color=\"primary\" size={\"large\"}/>\n <Typography color=\"primary\"\n variant={\"caption\"}\n className={\"font-medium\"}>{\"Add new collection\".toUpperCase()}</Typography>\n\n {!canCreateCollections &&\n <Typography variant={\"caption\"}>You don't have permissions to create\n collections</Typography>\n }\n </div>\n\n </Card>\n );\n}\n","import { unslugify, useAuthController, useNavigationController } from \"@firecms/core\";\nimport { AddIcon, Chip, CircularProgress, Collapse, Typography, } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport React from \"react\";\n\nexport function RootCollectionSuggestions({ introMode }: { introMode?: \"new_project\" | \"existing_project\" }) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user\n }).createCollections\n : true;\n\n const rootPathSuggestions = collectionEditorController.rootPathSuggestions;\n\n const showSuggestions = (rootPathSuggestions ?? []).length > 3 || ((navigationController.collections ?? []).length === 0 && (rootPathSuggestions ?? []).length > 0);\n const forceShowSuggestions = introMode === \"existing_project\";\n return <Collapse\n in={forceShowSuggestions || showSuggestions}>\n\n <div\n className={\"flex flex-col gap-1 p-2 my-4\"}>\n\n {!introMode && <Typography variant={\"body2\"} color={\"secondary\"}>\n Create a collection <b>automatically</b> from your data:\n </Typography>}\n\n {introMode === \"existing_project\" && <Typography>\n You will see your <b>database collections</b> here, a few seconds after project creation\n </Typography>}\n\n <div\n className={\"flex flex-row gap-1 overflow-scroll no-scrollbar \"}>\n {(rootPathSuggestions ?? []).map((path) => {\n return (\n <div key={path}>\n <Chip\n icon={<AddIcon size={\"small\"}/>}\n colorScheme={\"cyanLighter\"}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n initialValues: { path, name: unslugify(path) },\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"root_collection_suggestion\"\n })\n : undefined}\n size=\"small\">\n {path}\n </Chip>\n </div>\n );\n })}\n {rootPathSuggestions === undefined && <CircularProgress size={\"small\"}/>}\n {rootPathSuggestions?.length === 0 && <Typography variant={\"caption\"}>No suggestions</Typography>}\n </div>\n </div>\n </Collapse>\n}\n","import { ResolvedProperty } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip } from \"@firecms/ui\";\nimport React from \"react\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function CollectionViewHeaderAction({\n propertyKey,\n onHover,\n property,\n fullPath,\n parentCollectionIds,\n collection\n }: {\n property: ResolvedProperty,\n propertyKey: string,\n onHover: boolean,\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n}) {\n\n const collectionEditorController = useCollectionEditorController();\n\n return (\n <Tooltip title={\"Edit\"}>\n <IconButton\n className={onHover ? \"bg-white dark:bg-gray-950\" : \"hidden\"}\n onClick={() => {\n collectionEditorController.editProperty({\n propertyKey,\n property,\n editedCollectionId: collection.id,\n parentCollectionIds,\n collection\n });\n }}\n size={\"small\"}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n )\n}\n","import { getDefaultPropertiesOrder, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Tooltip } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function PropertyAddColumnComponent({\n fullPath,\n parentCollectionIds,\n collection\n }: {\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n}) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n return (\n <Tooltip title={canEditCollection ? \"Add new property\" : \"You don't have permission to add new properties\"}>\n <div\n className={\"p-0.5 w-20 h-full flex items-center justify-center cursor-pointer bg-gray-100 bg-opacity-40 hover:bg-gray-100 dark:bg-gray-950 dark:bg-opacity-40 dark:hover:bg-gray-950\"}\n // className={onHover ? \"bg-white dark:bg-gray-950\" : undefined}\n onClick={() => {\n collectionEditorController.editProperty({\n editedCollectionId: collection.id,\n parentCollectionIds,\n currentPropertiesOrder: getDefaultPropertiesOrder(collection),\n collection\n });\n }}>\n <AddIcon color={\"inherit\"}/>\n </div>\n </Tooltip>\n )\n}\n","import { AddIcon, Button } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionButton() {\n const collectionEditorController = useCollectionEditorController();\n return <div className={\"bg-gray-50 dark:bg-gray-900 min-w-fit rounded\"}>\n <Button className={\"min-w-fit\"}\n variant={\"outlined\"}\n onClick={() => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_button\"\n })}>\n <AddIcon/>\n New collection\n </Button>\n </div>\n}\n","import React from \"react\";\nimport { FireCMSPlugin, useAuthController, useNavigationController, User } from \"@firecms/core\";\nimport { ConfigControllerProvider } from \"./ConfigControllerProvider\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { EditorCollectionAction } from \"./ui/EditorCollectionAction\";\nimport { HomePageEditorCollectionAction } from \"./ui/HomePageEditorCollectionAction\";\nimport { NewCollectionCard } from \"./ui/NewCollectionCard\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { RootCollectionSuggestions } from \"./ui/RootCollectionSuggestions\";\nimport { CollectionViewHeaderAction } from \"./ui/CollectionViewHeaderAction\";\nimport { PropertyAddColumnComponent } from \"./ui/PropertyAddColumnComponent\";\nimport { NewCollectionButton } from \"./ui/NewCollectionButton\";\nimport { AddIcon, Button, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"./useCollectionEditorController\";\n\nexport interface CollectionConfigControllerProps<EC extends PersistedCollection = PersistedCollection, UserType extends User = User> {\n\n /**\n * Firebase app where the configuration is saved.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Define what actions can be performed on the configuration.\n */\n configPermissions?: CollectionEditorPermissionsBuilder<UserType, EC>;\n\n /**\n * The words you define here will not be allowed to be used as group\n * names when creating collections.\n * e.g. [\"admin\"]\n */\n reservedGroups: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n pathSuggestions?: (path: string) => Promise<string[]>;\n\n collectionInference?: CollectionInference;\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n getUser: (uid: string) => UserType | null;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n introMode?: \"new_project\" | \"existing_project\";\n\n}\n\n/**\n * Use this hook to initialise the Collection Editor plugin.\n * This is likely the only hook you will need to use.\n * @param firebaseApp Firebase app where your project data lives.\n * @param configPermissions\n * @param reservedGroups\n * @param extraView\n * @param pathSuggestions\n * @param getUser\n * @param collectionInference\n */\nexport function useCollectionEditorPlugin<EC extends PersistedCollection = PersistedCollection, UserType extends User = User>\n({\n collectionConfigController,\n introMode,\n configPermissions,\n reservedGroups,\n extraView,\n pathSuggestions,\n getUser,\n collectionInference,\n getData,\n onAnalyticsEvent\n }: CollectionConfigControllerProps<EC, UserType>): FireCMSPlugin<any, any, PersistedCollection> {\n\n return {\n key: \"collection_editor\",\n loading: collectionConfigController.loading,\n provider: {\n Component: ConfigControllerProvider,\n props: {\n collectionConfigController,\n configPermissions,\n collectionInference,\n reservedGroups,\n extraView,\n pathSuggestions,\n getUser,\n getData,\n onAnalyticsEvent\n }\n },\n homePage: {\n additionalActions: <NewCollectionButton/>,\n additionalChildrenStart: introMode ? <IntroWidget introMode={introMode}/> : undefined,\n additionalChildrenEnd: <RootCollectionSuggestions introMode={introMode}/>,\n CollectionActions: HomePageEditorCollectionAction,\n AdditionalCards: introMode ? undefined : NewCollectionCard,\n },\n collectionView: {\n CollectionActions: EditorCollectionAction,\n HeaderAction: CollectionViewHeaderAction,\n AddColumnComponent: PropertyAddColumnComponent\n }\n };\n}\n\nexport function IntroWidget({ introMode }: {\n introMode?: \"new_project\" | \"existing_project\";\n}) {\n\n const navigation = useNavigationController();\n if (!navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n return (\n <div className={\"mt-8 flex flex-col mt-8 p-2\"}>\n <Typography variant={\"h4\"} className=\"mb-4\">Welcome</Typography>\n <Typography paragraph={true}>Your admin panel is ready ✌️</Typography>\n <Typography paragraph={true}>\n Start building collections in FireCMS easily. Map them to your existing\n database data, import from files, or use our templates. Simplify your data management process\n now.\n </Typography>\n {canCreateCollections && <Button\n className={\"mt-4\"}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n <AddIcon/>Create your first collection\n </Button>}\n </div>\n );\n}\n","import { ErrorView, unslugify, useNavigationController } from \"@firecms/core\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { Button } from \"@firecms/ui\";\n\nexport function MissingReferenceWidget({ path: pathProp }: {\n path: string\n}) {\n const navigation = useNavigationController();\n const path = getLastSegment(pathProp);\n const parentCollectionIds = navigation.getParentCollectionIds(pathProp);\n const collectionEditor = useCollectionEditorController();\n return <div className={\"p-1 flex flex-col items-center\"}>\n <ErrorView error={\"No collection for path: \" + path}/>\n <Button className={\"mx-2\"} variant={\"outlined\"}\n size={\"small\"}\n onClick={() => {\n collectionEditor.createCollection({\n initialValues: { path, name: unslugify(path) },\n parentCollectionIds,\n redirect: false,\n sourceClick: \"missing_reference\"\n });\n }}>\n Create\n </Button>\n </div>;\n}\n\nfunction getParentPathSegments(path: string): string[] {\n const segments = path.split(\"/\");\n return segments.filter((segment, index) => index % 2 === 0 && index !== segments.length - 1);\n}\n\nfunction getLastSegment(path: string): string {\n const segments = path.split(\"/\");\n return segments[segments.length - 1];\n}\n"],"names":["YupSchema","Yup","CollectionDetailsForm","isNewCollection","reservedGroups","existingPaths","existingIds","groups","parentCollection","groupRef","React","values","setFieldValue","handleChange","touched","errors","setFieldTouched","isSubmitting","submitCount","useFormex","iconDialogOpen","setIconDialogOpen","useState","advancedPanelExpanded","setAdvancedPanelExpanded","updateName","name","getIn","toSnakeCase","singular","useEffect","collectionIcon","jsx","IconForView","groupOptions","group","inputFocused","autoCompleteOpen","setAutoCompleteOpen","useAutoComplete","isSubcollection","customIdValue","showErrors","Container","jsxs","Typography","Tooltip","IconButton","Chip","TextField","e","FieldCaption","cn","Field","DebouncedTextField","event","Autocomplete","index","AutocompleteItem","ExpandablePanel","SettingsIcon","Select","value","SelectItem","v","BooleanSwitchWithLabel","Dialog","SearchIconsView","icon","idToPropertiesPath","id","namespaceToPropertiesPath","namespace","namespaceToPropertiesOrderPath","getFullId","propertyKey","propertyNamespace","getFullIdPath","keyWithNamespace","EnumForm","enumValues","onValuesChanged","onError","updateIds","disabled","allowDataInference","getData","formex","useCreateFormex","enumValue","hasError","Formex","EnumFormFields","enumValuesPath","shouldUpdateId","lastInternalIdAdded","setLastInternalIdAdded","editDialogIndex","setEditDialogIndex","inferring","setInferring","inferredValues","buildEntry","internalId","justAdded","entryError","EnumEntry","inferValues","data","flatData","fieldData","currentEnumValues","newEnumValues","extractEnumFromValues","ListIcon","Button","CircularProgress","AutoAwesomeIcon","Paper","ArrayContainer","EnumEntryDialog","updateId","autoFocus","onDialogOpen","inferredEntry","shouldUpdateIdRef","idValue","labelValue","currentLabelRef","Fragment","Badge","prevProps","nextProps","equal","open","onClose","idError","DialogContent","DialogActions","SwitchControl","field","form","label","tooltip","size","allowIndeterminate","formControlLabel","checked","GeneralPropertyValidation","validationRequired","validationRequiredMessage","StringPropertyValidation","length","lowercase","matches","max","min","trim","uppercase","validationLength","validationMin","validationMax","validationTrim","validationMatches","validationLowercase","validationUppercase","matchesError","matchesValue","matchesStringValue","serializeRegExp","ArrayPropertyValidation","ValidationPanel","children","RuleIcon","EnumPropertyField","multiselect","setFieldError","snackbarContext","useSnackbarController","defaultValue","valuesEnumValues","useMemo","resolveEnumValues","enumIds","res","d","fileTypes","StoragePropertyField","multiple","existing","baseStoragePath","acceptedFiles","fileName","storagePath","storeUrl","fileNameValue","storagePathValue","storedValue","fileTypesValue","allFileTypesSelected","handleTypesChange","hasFilenameCallback","hasStoragePathCallback","FileUploadIcon","MultiSelect","selected","MultiSelectItem","Checkbox","editableProperty","property","isPropertyBuilder","eProperty","removeNonEditableProperties","properties","_","key","propertyOrBuilder","b","PropertyFieldPreview","onClick","includeName","includeEditButton","propertyConfigs","useCustomizationController","propertyConfig","getFieldConfig","borderColorClass","ErrorBoundary","PropertyConfigBadge","cardMixin","cardClickableMixin","cardSelectedMixin","NonEditablePropertyPreview","FunctionsIcon","RemoveCircleIcon","PropertyTree","selectedPropertyKey","onPropertyClick","propertiesOrderProp","additionalFields","onPropertyMove","onPropertyRemove","className","inferredPropertyKeys","collectionEditable","propertiesOrder","onDragEnd","useCallback","result","startIndex","endIndex","newPropertiesOrder","removed","DragDropContext","Droppable","droppableProvided","droppableSnapshot","additionalField","Draggable","provided","snapshot","PropertyTreeEntry","isSelected","wasSelected","isPropertyInferred","fullId","subtree","editable","defaultBorderMixin","RemoveIcon","DragHandleIcon","MapPropertyField","propertyDialogOpen","setPropertyDialogOpen","setSelectedPropertyKey","selectedPropertyNamespace","setSelectedPropertyNamespace","onPropertyCreated","currentPropertiesOrder","deleteProperty","propertiesPath","propertiesOrderPath","p","selectedPropertyFullId","selectedProperty","empty","AddIcon","PropertyFormDialog","RepeatPropertyField","ofProperty","ofPropertyError","onPropertyChanged","widget","CommonPropertyFields","disabledId","autoUpdateId","isNewProperty","ref","validate","nameError","description","descriptionError","newNameValue","newIdValue","unslugify","StringPropertyField","widgetId","BooleanPropertyField","BlockPropertyField","addChildButton","NumberPropertyValidation","validationLessThan","validationMoreThan","NumberPropertyField","ReferencePropertyField","useNavigationController","pathPath","pathValue","pathError","CollectionsSelect","error","props","navigation","collections","ungroupedCollections","col","selectedCollection","collection","SelectGroup","DateTimePropertyField","modePath","modeValue","modeError","autoValuePath","autoValueValue","autoValueError","AdvancedPropertyValidation","KeyValuePropertyField","updatePropertyFromWidget","propertyData","selectedWidgetId","updatedProperty","mergeDeep","PropertySelectItem","optionDisabled","UrlPropertyField","urlValue","supportedFieldsIds","supportedFields","DEFAULT_FIELD_CONFIGS","config","a","PropertyForm","includeIdAndName","autoOpenTypeSelect","existingProperty","inArray","existingPropertyKeys","onPropertyChangedImmediate","onDelete","initialErrors","forceShowErrors","getController","initialValue","lastSubmittedProperty","useRef","doOnPropertyChanged","params","formexController","newPropertyWithId","controller","validateName","validateId","isValidRegExp","PropertyEditFormFields","onCancel","onOkClicked","formProps","formexRef","helpers","setValues","includeIdAndTitle","selectOpen","setSelectOpen","deleteDialogOpen","setDeleteDialogOpen","selectedFieldConfigId","setSelectedFieldConfigId","getFieldId","allSupportedFields","displayedWidgets","deferredValues","useDeferredValue","nameFieldRef","selectedWidgetError","onWidgetSelectChanged","newSelectedWidgetId","childComponent","InfoLabel","baseProperty","baseFieldConfig","computedFieldConfig","DeleteIcon","DeleteConfirmationDialog","idRegEx","camelCase","str","cur","acc","GetCodeDialog","onOpenChange","snackbarController","code","JSON5","collectionToCode","Highlight","themes","style","tokens","getLineProps","getTokenProps","line","i","token","ContentCopyIcon","propertyCleanup","CollectionPropertiesEditorForm","propertyErrorsRef","onPropertyError","setDirty","extraIcon","getUser","doCollectionInference","dirty","largeLayout","useLargeLayout","asDialog","selectedPropertyIndex","setSelectedPropertyIndex","codeDialogOpen","setCodeDialogOpen","inferringProperties","setInferringProperties","newPropertyDialogOpen","setNewPropertyDialogOpen","setInferredPropertyKeys","currentPropertiesOrderRef","inferPropertiesFromData","newCollection","makePropertiesEditable","newPropertyKeys","updatedProperties","updatedPropertiesOrder","updatePropertiesOrder","getCurrentPropertiesOrder","previousId","propertyPath","previousFullId","previousPropertyPath","onPropertyErrorInternal","closePropertyDialog","emptyCollection","usedPropertiesOrder","owner","body","CodeIcon","UnsavedChangesDialog","handleOk","handleCancel","title","EntityCustomViewsSelectDialog","entityViews","view","SubcollectionsEditTab","configController","collectionInference","parentCollectionIds","contextEntityViews","subcollectionToDelete","setSubcollectionToDelete","addEntityViewDialogOpen","setAddEntityViewDialogOpen","viewToDelete","setViewToDelete","currentDialog","setCurrentDialog","subcollections","resolvedEntityViews","resolveEntityView","hardCodedEntityViews","totalEntityViews","Table","TableBody","subcollection","TableRow","TableCell","Alert","CollectionEditorDialog","selectedViewKey","productsCollectionTemplate","blogCollectionTemplate","usersCollectionTemplate","pagesCollectionTemplate","CollectionEditorWelcomeView","path","pathSuggestions","onContinue","existingCollectionPaths","loadingPathSuggestions","setLoadingPathSuggestions","filteredPathSuggestions","setFilteredPathSuggestions","suggestions","filteredSuggestions","s","c","suggestion","TemplateButton","Icon","ImportFileUpload","subtitle","Card","CollectionEditorImportMapping","importConfig","setSelectedProperty","newHeadersMapping","onPropertyTypeChanged","importKey","inferredNewProperty","buildPropertyFromData","getInferenceType","DataNewPropertiesMapping","ImportNewPropertyFieldPreview","PropertySelect","fieldId","newProperty","CollectionEditorImportDataPreview","propertiesMapping","getPropertiesMapping","mappedData","convertDataToEntity","selectionController","useSelectionController","EntityCollectionTable","cleanPropertiesFromImport","parentSlug","slug","slugify","fullSlug","slugifiedResult","firstKey","idColumn","formDirty","setFormDirty","unsavedChangesDialogOpen","setUnsavedChangesDialogOpen","CollectionEditor","authController","useAuthController","topLevelNavigation","initialValuesProp","includeTemplates","collectionsInThisLevel","setCollection","initialLoadingCompleted","setInitialLoadingCompleted","initialCollection","randomString","initialValues","applyPropertyConfigs","coolIconKeys","CircularProgressCenter","CollectionEditorInternal","editedCollectionId","fullPath","handleClose","extraView","useImportConfig","initialView","currentView","setCurrentView","setError","saveCollection","updatedCollection","setNextMode","inferCollectionFromData","inferredCollection","onSubmit","newCollectionState","validation","schema","err","validatePath","formController","updatedFullPath","parentPaths","resolvedPath","getDataWithPath","onImportDataSet","buildEntityPropertiesFromData","validValues","onImportMappingComplete","Tabs","Tab","importData","ImportSaveInProgress","importedCollection","current","removeUndefined","ErrorView","ArrowBackIcon","LoadingButton","DoneIcon","rest","propertiesResult","applyPropertiesConfig","internalProperty","removeInitialAndTrailingSlashes","ConfigControllerContext","CollectionEditorContext","ConfigControllerProvider","collectionConfigController","configPermissions","onAnalyticsEvent","navigate","useNavigate","rootPathSuggestions","setRootPathSuggestions","paths","currentPropertyDialog","setCurrentPropertyDialog","defaultConfigPermissions","editCollection","editProperty","propertyKeyWithoutNamespace","createCollection","redirect","sourceClick","getPathSuggestions","url","useCollectionEditorController","useContext","useCollectionsConfigController","EditorCollectionAction","tableController","navigationController","collectionEditorController","canEditCollection","saveDefaultFilterButton","getObjectOrNull","UndoIcon","SaveIcon","editorButton","o","HomePageEditorCollectionAction","permissions","onEditCollectionClicked","deleteRequested","setDeleteRequested","deleteCollection","Menu","MoreVertIcon","MenuItem","NewCollectionCard","context","canCreateCollections","RootCollectionSuggestions","introMode","showSuggestions","forceShowSuggestions","Collapse","CollectionViewHeaderAction","onHover","PropertyAddColumnComponent","getDefaultPropertiesOrder","NewCollectionButton","useCollectionEditorPlugin","IntroWidget","MissingReferenceWidget","pathProp","getLastSegment","collectionEditor","segments"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/ui/collection_editor/CollectionYupValidation.tsx","../src/useCollectionEditorController.tsx","../src/ui/collection_editor/LayoutModeSwitch.tsx","../src/ui/collection_editor/CollectionDetailsForm.tsx","../src/ui/collection_editor/util.ts","../src/ui/collection_editor/EnumForm.tsx","../src/ui/collection_editor/SwitchControl.tsx","../src/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/StringPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ValidationPanel.tsx","../src/ui/collection_editor/properties/EnumPropertyField.tsx","../src/ui/collection_editor/properties/StoragePropertyField.tsx","../src/utils/entities.ts","../src/ui/collection_editor/PropertyFieldPreview.tsx","../src/ui/collection_editor/PropertyTree.tsx","../src/ui/collection_editor/properties/MapPropertyField.tsx","../src/ui/collection_editor/properties/RepeatPropertyField.tsx","../src/ui/collection_editor/properties/CommonPropertyFields.tsx","../src/ui/collection_editor/properties/StringPropertyField.tsx","../src/ui/collection_editor/properties/BooleanPropertyField.tsx","../src/ui/collection_editor/properties/BlockPropertyField.tsx","../src/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx","../src/ui/collection_editor/properties/NumberPropertyField.tsx","../src/ui/collection_editor/properties/ReferencePropertyField.tsx","../src/ui/collection_editor/properties/DateTimePropertyField.tsx","../src/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx","../src/ui/collection_editor/properties/KeyValuePropertyField.tsx","../src/ui/collection_editor/utils/update_property_for_widget.ts","../src/ui/collection_editor/properties/UrlPropertyField.tsx","../src/ui/collection_editor/utils/supported_fields.tsx","../src/ui/collection_editor/properties/MarkdownPropertyField.tsx","../src/ui/collection_editor/PropertyEditView.tsx","../src/ui/collection_editor/utils/strings.ts","../src/ui/collection_editor/GetCodeDialog.tsx","../src/ui/collection_editor/CollectionPropertiesEditorForm.tsx","../src/ui/collection_editor/UnsavedChangesDialog.tsx","../src/ui/collection_editor/EntityCustomViewsSelectDialog.tsx","../src/ui/collection_editor/SubcollectionsEditTab.tsx","../src/ui/collection_editor/templates/products_template.ts","../src/ui/collection_editor/templates/blog_template.ts","../src/ui/collection_editor/templates/users_template.ts","../src/ui/collection_editor/templates/pages_template.ts","../src/ui/collection_editor/CollectionEditorWelcomeView.tsx","../src/ui/collection_editor/import/CollectionEditorImportMapping.tsx","../src/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx","../src/ui/collection_editor/import/clean_import_data.ts","../src/ui/collection_editor/CollectionEditorDialog.tsx","../src/ConfigControllerProvider.tsx","../src/ui/EditorCollectionAction.tsx","../src/useCollectionsConfigController.tsx","../src/ui/HomePageEditorCollectionAction.tsx","../src/ui/CollectionViewHeaderAction.tsx","../src/ui/PropertyAddColumnComponent.tsx","../src/ui/NewCollectionButton.tsx","../src/ui/EditorCollectionActionStart.tsx","../src/ui/NewCollectionCard.tsx","../src/useCollectionEditorPlugin.tsx","../src/utils/collections.ts","../src/ui/MissingReferenceWidget.tsx"],"sourcesContent":["import * as Yup from \"yup\";\n\nexport const YupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\"),\n path: Yup.string().required(\"Required\")\n});\n","import { useContext } from \"react\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorContext } from \"./ConfigControllerProvider\";\n\n/**\n * Hook to access the collection editor controller.\n * The methods in this controller can be used to open the collection editor dialog.\n */\nexport const useCollectionEditorController = (): CollectionEditorController => useContext(CollectionEditorContext);\n","import { Card, cls, SquareIcon, Tooltip, Typography, VerticalSplitIcon } from \"@firecms/ui\";\n\nexport function LayoutModeSwitch({\n value,\n onChange,\n className\n }: {\n value: \"side_panel\" | \"full_screen\";\n onChange: (value: \"side_panel\" | \"full_screen\") => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Document view</Typography>\n <div className={cls(\"flex flex-row gap-4\")}>\n\n <Tooltip title={\"Documents are open in a side panel\"}>\n <Card\n onClick={() => onChange(\"side_panel\")}\n className={cls(\n \"my-2 rounded-md mx-0 p-4 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-surface-700 dark:text-surface-accent-300\",\n \"hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n value === \"side_panel\" ? \"border-primary dark:border-primary\" : \"border-surface-400 dark:border-surface-600\",\n )}\n >\n <VerticalSplitIcon/>\n <Typography variant={\"label\"}>\n Side panel\n </Typography>\n </Card>\n </Tooltip>\n\n <Tooltip title={\"Documents are open full-screen\"}>\n <Card\n onClick={() => onChange(\"full_screen\")}\n className={cls(\n \"my-2 rounded-md mx-0 p-4 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-surface-700 dark:text-surface-accent-300\",\n \"hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n value === \"full_screen\" ? \"border-primary dark:border-primary\" : \"border-surface-400 dark:border-surface-600\",\n )}\n >\n <SquareIcon/>\n <Typography variant={\"label\"}>\n Full screen\n </Typography>\n </Card>\n </Tooltip>\n\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Should documents be opened full screen or in an inline side dialog</Typography>\n </div>\n}\n","import React, { useEffect, useState } from \"react\";\nimport { EntityCollection, FieldCaption, IconForView, SearchIconsView, singular, toSnakeCase, } from \"@firecms/core\";\nimport {\n Autocomplete,\n AutocompleteItem,\n BooleanSwitchWithLabel,\n Chip,\n CloseIcon,\n cls,\n Container,\n DebouncedTextField,\n Dialog,\n ExpandablePanel,\n IconButton,\n Select,\n SelectItem,\n SettingsIcon,\n TextField,\n Tooltip,\n Typography,\n useAutoComplete\n} from \"@firecms/ui\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { useCollectionEditorController } from \"../../useCollectionEditorController\";\nimport { LayoutModeSwitch } from \"./LayoutModeSwitch\";\n\nexport function CollectionDetailsForm({\n isNewCollection,\n reservedGroups,\n existingPaths,\n existingIds,\n groups,\n parentCollection,\n children\n }: {\n isNewCollection: boolean,\n reservedGroups?: string[];\n existingPaths?: string[];\n existingIds?: string[];\n groups: string[] | null;\n parentCollection?: EntityCollection;\n parentCollectionIds?: string[];\n children?: React.ReactNode;\n}) {\n\n const groupRef = React.useRef<HTMLInputElement>(null);\n const {\n values,\n setFieldValue,\n handleChange,\n touched,\n errors,\n setFieldTouched,\n isSubmitting,\n submitCount\n } = useFormex<EntityCollection>();\n\n const collectionEditor = useCollectionEditorController();\n\n const [iconDialogOpen, setIconDialogOpen] = useState(false);\n const [advancedPanelExpanded, setAdvancedPanelExpanded] = useState(false);\n\n const updateDatabaseId = (databaseId: string) => {\n setFieldValue(\"databaseId\", databaseId ?? undefined);\n }\n\n const updateName = (name: string) => {\n setFieldValue(\"name\", name);\n\n const pathTouched = getIn(touched, \"path\");\n if (!pathTouched && isNewCollection && name) {\n setFieldValue(\"path\", toSnakeCase(name));\n }\n\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && isNewCollection && name) {\n setFieldValue(\"id\", toSnakeCase(name));\n }\n\n const singularNameTouched = getIn(touched, \"singularName\");\n if (!singularNameTouched && isNewCollection && name) {\n setFieldValue(\"singularName\", singular(name));\n }\n\n };\n\n useEffect(() => {\n if (errors.id) {\n setAdvancedPanelExpanded(true);\n }\n }, [errors.id]);\n\n const collectionIcon = <IconForView collectionOrView={values}/>;\n\n const groupOptions = groups?.filter((group) => !reservedGroups?.includes(group));\n\n const {\n inputFocused,\n autoCompleteOpen,\n setAutoCompleteOpen\n } = useAutoComplete({\n ref: groupRef\n });\n\n const isSubcollection = !!parentCollection;\n\n let customIdValue: \"true\" | \"false\" | \"optional\" | \"code_defined\" | undefined;\n if (typeof values.customId === \"object\") {\n customIdValue = \"code_defined\";\n } else if (values.customId === true) {\n customIdValue = \"true\";\n } else if (values.customId === false) {\n customIdValue = \"false\";\n } else if (values.customId === \"optional\") {\n customIdValue = \"optional\";\n }\n\n const showErrors = submitCount > 0;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <div\n className=\"flex flex-row gap-2 py-2 pt-3 items-center\">\n <Typography variant={!isNewCollection ? \"h5\" : \"h4\"} className={\"flex-grow\"}>\n {isNewCollection ? \"New collection\" : `${values?.name} collection`}\n </Typography>\n <DefaultDatabaseField databaseId={values.databaseId}\n onDatabaseIdUpdate={updateDatabaseId}/>\n\n <Tooltip title={\"Change icon\"}\n asChild={true}>\n <IconButton\n shape={\"square\"}\n onClick={() => setIconDialogOpen(true)}>\n {collectionIcon}\n </IconButton>\n </Tooltip>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n </div>\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n <div className={\"col-span-12\"}>\n <TextField\n value={values.name ?? \"\"}\n onChange={(e: any) => updateName(e.target.value)}\n label={\"Name\"}\n autoFocus={true}\n required\n error={showErrors && Boolean(errors.name)}/>\n <FieldCaption error={touched.name && Boolean(errors.name)}>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this collection, usually a plural name (e.g. Products)\"}\n </FieldCaption>\n </div>\n\n <div className={cls(\"col-span-12 \", isSubcollection ? \"\" : \"sm:col-span-8\")}>\n <Field name={\"path\"}\n as={DebouncedTextField}\n label={\"Path\"}\n disabled={!isNewCollection}\n required\n error={showErrors && Boolean(errors.path)}/>\n\n <FieldCaption error={touched.path && Boolean(errors.path)}>\n {touched.path && Boolean(errors.path)\n ? errors.path\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"Path that this collection is stored in, in the database\"}\n </FieldCaption>\n\n </div>\n\n {!isSubcollection && <div className={\"col-span-12 sm:col-span-4 relative\"}>\n\n <TextField error={showErrors && Boolean(errors.group)}\n disabled={isSubmitting}\n value={values.group ?? \"\"}\n autoComplete=\"off\"\n onChange={(event) => setFieldValue(\"group\", event.target.value)}\n name={\"group\"}\n inputRef={groupRef}\n label=\"Group\"/>\n <Autocomplete\n open={autoCompleteOpen && (groupOptions ?? []).length > 0}\n setOpen={setAutoCompleteOpen}>\n {groupOptions?.map((group, index) => {\n return <AutocompleteItem\n key={index + \"_\" + group}\n onClick={() => {\n setAutoCompleteOpen(false);\n setFieldValue(\"group\", group ?? null);\n }}\n >\n <div className={\"flex-grow\"}>\n {group}\n </div>\n </AutocompleteItem>;\n })}\n </Autocomplete>\n <FieldCaption>\n {showErrors && Boolean(errors.group) ? errors.group : \"Group in the home page\"}\n </FieldCaption>\n\n\n </div>}\n\n <LayoutModeSwitch\n className={\"col-span-12\"}\n value={values.openEntityMode ?? \"side_panel\"}\n onChange={(value) => setFieldValue(\"openEntityMode\", value)}/>\n\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n allowIndeterminate={true}\n label={values.history === null ? \"Document history revisions enabled if enabled globally\" : (\n values.history ? \"Document history revisions ENABLED\" : \"Document history revisions NOT enabled\"\n )}\n onValueChange={(v) => setFieldValue(\"history\", v)}\n value={values.history ?? null}\n />\n <FieldCaption>\n When enabled, each document in this collection will have a history of changes.\n This is useful for auditing purposes. The data is stored in a subcollection of the document\n in your database, called <b>__history</b>.\n </FieldCaption>\n </div>\n\n\n <div className={\"col-span-12 mt-8\"}>\n <ExpandablePanel\n expanded={advancedPanelExpanded}\n onExpandedChange={setAdvancedPanelExpanded}\n title={\n <div className=\"flex flex-row text-surface-500\">\n <SettingsIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n Advanced\n </Typography>\n </div>}\n initiallyExpanded={false}>\n <div className={\"grid grid-cols-12 gap-4 p-4\"}>\n\n <div className={\"col-span-12\"}>\n <Field name={\"id\"}\n as={DebouncedTextField}\n disabled={!isNewCollection}\n label={\"Collection id\"}\n error={showErrors && Boolean(errors.id)}/>\n <FieldCaption error={touched.id && Boolean(errors.id)}>\n {touched.id && Boolean(errors.id) ? errors.id : \"This id identifies this collection. Typically the same as the path.\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.singularName)}\n name={\"singularName\"}\n aria-describedby={\"singularName-helper\"}\n onChange={(e) => {\n setFieldTouched(\"singularName\", true);\n return handleChange(e);\n }}\n value={values.singularName ?? \"\"}\n label={\"Singular name\"}/>\n <FieldCaption error={showErrors && Boolean(errors.singularName)}>\n {showErrors && Boolean(errors.singularName) ? errors.singularName : \"Optionally define a singular name for your entities\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.sideDialogWidth)}\n name={\"sideDialogWidth\"}\n type={\"number\"}\n aria-describedby={\"sideDialogWidth-helper\"}\n onChange={(e) => {\n setFieldTouched(\"sideDialogWidth\", true);\n const value = e.target.value;\n if (!value) {\n setFieldValue(\"sideDialogWidth\", null);\n } else if (!isNaN(Number(value))) {\n setFieldValue(\"sideDialogWidth\", Number(value));\n }\n }}\n endAdornment={<IconButton\n size={\"small\"}\n onClick={() => {\n setFieldValue(\"sideDialogWidth\", null);\n }}\n disabled={!values.sideDialogWidth}>\n <CloseIcon size={\"small\"}/>\n </IconButton>}\n value={values.sideDialogWidth ?? \"\"}\n label={\"Side dialog width\"}/>\n <FieldCaption error={showErrors && Boolean(errors.singularName)}>\n {showErrors && Boolean(errors.singularName) ? errors.singularName : \"Optionally define the width (in pixels) of entities side dialog. Default is 768px\"}\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.description)}\n name=\"description\"\n value={values.description ?? \"\"}\n onChange={handleChange}\n multiline\n minRows={2}\n aria-describedby=\"description-helper-text\"\n label=\"Description\"\n />\n <FieldCaption error={showErrors && Boolean(errors.description)}>\n {showErrors && Boolean(errors.description) ? errors.description : \"Description of the collection, you can use markdown\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <Select\n name=\"defaultSize\"\n size={\"large\"}\n fullWidth={true}\n label=\"Default row size\"\n position={\"item-aligned\"}\n onChange={handleChange}\n value={values.defaultSize ?? \"\"}\n renderValue={(value: any) => value.toUpperCase()}\n >\n {[\"xs\", \"s\", \"m\", \"l\", \"xl\"].map((value) => (\n <SelectItem\n key={`size-select-${value}`}\n value={value}>\n {value.toUpperCase()}\n </SelectItem>\n ))}\n </Select>\n </div>\n <div className={\"col-span-12\"}>\n <Select\n name=\"customId\"\n label=\"Document IDs generation\"\n position={\"item-aligned\"}\n size={\"large\"}\n fullWidth={true}\n disabled={customIdValue === \"code_defined\"}\n onValueChange={(v) => {\n if (v === \"code_defined\")\n throw new Error(\"This should not happen\");\n setFieldValue(\"customId\", v);\n }}\n value={customIdValue ?? \"\"}\n renderValue={(value: any) => {\n if (value === \"code_defined\")\n return \"Code defined\";\n else if (value === \"true\")\n return \"Users must define an ID\";\n else if (value === \"optional\")\n return \"Users can define an ID, but it is not required\";\n else\n return \"Document ID is generated automatically\";\n }}\n >\n <SelectItem value={\"false\"}>\n Document ID is generated automatically\n </SelectItem>\n <SelectItem value={\"true\"}>\n Users must define an ID\n </SelectItem>\n <SelectItem value={\"optional\"}>\n Users can define an ID, but it is not required\n </SelectItem>\n </Select>\n </div>\n <div className={\"col-span-12 mt-4\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label=\"Collection group\"\n onValueChange={(v) => setFieldValue(\"collectionGroup\", v)}\n value={values.collectionGroup ?? false}\n />\n <FieldCaption>\n A collection group consists of all collections with the same path. This allows\n you\n to query over multiple collections at once.\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label=\"Enable text search for this collection\"\n onValueChange={(v) => setFieldValue(\"textSearchEnabled\", v)}\n value={values.textSearchEnabled ?? false}\n />\n <FieldCaption>\n Allow text search for this collection. If you have not specified a text search\n delegate, this will use the built-in local text search. This is not recommended\n for large collections, as it may incur in performance and cost issues.\n </FieldCaption>\n </div>\n\n\n </div>\n </ExpandablePanel>\n\n {children}\n\n </div>\n\n </div>\n\n <div style={{ height: \"52px\" }}/>\n\n <Dialog\n open={iconDialogOpen}\n onOpenChange={setIconDialogOpen}\n maxWidth={\"xl\"}\n fullWidth\n >\n <div className={\"p-4 overflow-auto min-h-[200px]\"}>\n <SearchIconsView selectedIcon={values.icon}\n onIconSelected={(icon: string) => {\n setIconDialogOpen(false);\n setFieldValue(\"icon\", icon);\n }}/>\n </div>\n\n </Dialog>\n\n </Container>\n </div>\n );\n}\n\nfunction DefaultDatabaseField({\n databaseId,\n onDatabaseIdUpdate\n }: { databaseId?: string, onDatabaseIdUpdate: (databaseId: string) => void }) {\n\n return <Tooltip title={\"Database ID\"}\n side={\"top\"}\n align={\"start\"}>\n <TextField size={\"small\"}\n invisible={true}\n inputClassName={\"text-end\"}\n value={databaseId ?? \"\"}\n onChange={(e: any) => onDatabaseIdUpdate(e.target.value)}\n placeholder={\"(default)\"}></TextField>\n </Tooltip>\n}\n","export function idToPropertiesPath(id: string): string {\n return \"properties.\" + id.replaceAll(\".\", \".properties.\");\n}\n\nexport function namespaceToPropertiesPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".properties\"\n : \"properties\";\n}\n\nexport function namespaceToPropertiesOrderPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".propertiesOrder\"\n : \"propertiesOrder\";\n}\n\nexport function getFullId(propertyKey: string, propertyNamespace?: string): string {\n return propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n}\n\nexport function getFullIdPath(propertyKey: string, propertyNamespace?: string): string {\n const keyWithNamespace = propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n return idToPropertiesPath(keyWithNamespace);\n}\n","import React, { useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { ArrayContainer, ArrayEntryParams, EnumValueConfig, EnumValues, FieldCaption, } from \"@firecms/core\";\nimport {\n AutorenewIcon,\n Badge,\n Button,\n CircularProgress,\n DebouncedTextField,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n ListIcon,\n Paper,\n SettingsIcon,\n Typography\n} from \"@firecms/ui\";\nimport { extractEnumFromValues } from \"@firecms/schema_inference\";\nimport { Field, Formex, getIn, useCreateFormex, useFormex } from \"@firecms/formex\";\n\ntype EnumFormProps = {\n enumValues: EnumValueConfig[];\n onValuesChanged?: (enumValues: EnumValueConfig[]) => void;\n onError?: (error: boolean) => void;\n updateIds: boolean;\n disabled: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<string[]>;\n};\n\nexport function EnumForm({\n enumValues,\n onValuesChanged,\n onError,\n updateIds,\n disabled,\n allowDataInference,\n getData\n }: EnumFormProps) {\n\n const formex = useCreateFormex<{\n enumValues: EnumValueConfig[]\n }>({\n initialValues: { enumValues },\n validateOnChange: true,\n validation: (values) => {\n const errors: any = {};\n if (values.enumValues) {\n values.enumValues.forEach((enumValue, index) => {\n if (!enumValue?.label) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].label = \"You must specify a label for this enum value entry\";\n }\n if (!enumValue?.id) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].id = \"You must specify an ID for this enum value entry\";\n }\n });\n }\n const hasError = Boolean(errors?.enumValues && Object.keys(errors?.enumValues).length > 0);\n onError?.(hasError);\n return errors;\n }\n });\n\n const { values, errors } = formex;\n\n useEffect(() => {\n if (onValuesChanged) {\n onValuesChanged(values.enumValues);\n }\n }, [values.enumValues]);\n\n return <Formex value={formex}>\n <EnumFormFields enumValuesPath={\"enumValues\"}\n values={values}\n errors={errors}\n shouldUpdateId={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}/>\n </Formex>\n\n}\n\ntype EnumFormFieldsProps = {\n values: {\n enumValues: EnumValueConfig[]\n };\n errors: any;\n enumValuesPath: string;\n shouldUpdateId: boolean;\n disabled: boolean;\n getData?: () => Promise<string[]>;\n allowDataInference?: boolean;\n};\n\n// const EnumFormFields = React.memo(\nfunction EnumFormFields({\n values,\n errors,\n disabled,\n enumValuesPath,\n shouldUpdateId,\n allowDataInference,\n getData,\n }: EnumFormFieldsProps) {\n\n const {\n setFieldValue\n } = useFormex();\n\n const [lastInternalIdAdded, setLastInternalIdAdded] = React.useState<number | undefined>();\n const [editDialogIndex, setEditDialogIndex] = React.useState<number | undefined>();\n const [inferring, setInferring] = React.useState(false);\n\n const inferredValuesRef = React.useRef(new Set());\n const inferredValues = inferredValuesRef.current;\n\n const buildEntry = ({\n index,\n internalId\n }:ArrayEntryParams) => {\n const justAdded = lastInternalIdAdded === internalId;\n const entryError = errors?.enumValues && errors?.enumValues[index];\n return <EnumEntry index={index}\n disabled={disabled}\n enumValuesPath={enumValuesPath}\n autoFocus={justAdded}\n entryError={entryError}\n shouldUpdateId={shouldUpdateId || justAdded}\n onDialogOpen={() => setEditDialogIndex(index)}\n inferredEntry={inferredValues.has(values.enumValues[index]?.id as string)}\n key={`${internalId}`}/>;\n };\n\n const inferValues = async () => {\n if (!getData)\n return;\n setInferring(true);\n getData?.().then((data) => {\n if (!data)\n return;\n\n const flatData = data.flat();\n\n const fieldData = Array.from(new Set(flatData));\n\n const currentEnumValues = values.enumValues;\n const foundEnumValues = extractEnumFromValues(fieldData);\n\n // add only new enum values\n const newEnumValues = foundEnumValues.filter((enumValue) => {\n return !currentEnumValues?.some((v: any) => v.id === enumValue.id);\n });\n\n newEnumValues.forEach((enumValue) => {\n inferredValues.add(enumValue.id);\n });\n setFieldValue(enumValuesPath, [...newEnumValues, ...currentEnumValues], true);\n }).catch(e => {\n console.error(e);\n })\n .finally(() => setInferring(false));\n }\n\n return (\n <div className={\"col-span-12\"}>\n <div className=\"ml-3.5 flex flex-row items-center\">\n <ListIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2 grow\">\n Values\n </Typography>\n {allowDataInference &&\n <Button loading={inferring}\n disabled={disabled || inferring}\n variant={\"text\"}\n size={\"small\"}\n onClick={inferValues}>\n {inferring ? <CircularProgress size={\"smallest\"}/> : <AutorenewIcon/>}\n Infer values from data\n </Button>}\n </div>\n\n <Paper className=\"p-4 m-1\">\n\n <ArrayContainer droppableId={enumValuesPath}\n addLabel={\"Add enum value\"}\n value={values.enumValues}\n disabled={disabled}\n size={\"small\"}\n buildEntry={buildEntry}\n onInternalIdAdded={setLastInternalIdAdded}\n canAddElements={true}\n onValueChange={(value) => setFieldValue(enumValuesPath, value)}\n newDefaultEntry={{ id: \"\", label: \"\" }}/>\n\n <EnumEntryDialog index={editDialogIndex}\n open={editDialogIndex !== undefined}\n enumValuesPath={enumValuesPath}\n onClose={() => setEditDialogIndex(undefined)}/>\n </Paper>\n </div>\n );\n}\n\ntype EnumEntryProps = {\n index: number,\n enumValuesPath: string,\n shouldUpdateId: boolean,\n autoFocus: boolean,\n onDialogOpen: () => void;\n disabled: boolean;\n inferredEntry?: boolean;\n entryError?: { label?: string, id?: string }\n};\n\nconst EnumEntry = React.memo(\n function EnumEntryInternal({\n index,\n shouldUpdateId: updateId,\n enumValuesPath,\n autoFocus,\n onDialogOpen,\n disabled,\n inferredEntry,\n entryError\n }: EnumEntryProps) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<EnumValues>();\n\n const shouldUpdateIdRef = React.useRef(!getIn(values, `${enumValuesPath}[${index}].id`));\n const shouldUpdateId = updateId || shouldUpdateIdRef.current;\n\n const idValue = getIn(values, `${enumValuesPath}[${index}].id`);\n const labelValue = getIn(values, `${enumValuesPath}[${index}].label`);\n\n const currentLabelRef = React.useRef(labelValue);\n\n React.useEffect(() => {\n if ((currentLabelRef.current === idValue || !idValue) && shouldUpdateId) {\n setFieldValue(`${enumValuesPath}[${index}].id`, labelValue);\n }\n currentLabelRef.current = labelValue;\n }, [labelValue]);\n\n return (\n <>\n <div className={\"flex w-full align-center justify-center\"}>\n <Field name={`${enumValuesPath}[${index}].label`}\n as={DebouncedTextField}\n className={\"flex-grow\"}\n required\n disabled={disabled}\n size=\"small\"\n autoFocus={autoFocus}\n autoComplete=\"off\"\n endAdornment={inferredEntry && <AutorenewIcon size={\"small\"}/>}\n error={Boolean(entryError?.label)}/>\n\n {!disabled &&\n <Badge color={\"error\"} invisible={!entryError?.id}>\n <IconButton\n size=\"small\"\n aria-label=\"edit\"\n className={\"m-1\"}\n onClick={() => onDialogOpen()}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Badge>}\n\n </div>\n\n {entryError?.label && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.label}\n </Typography>}\n\n {entryError?.id && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.id}\n </Typography>}\n\n </>);\n },\n function areEqual(prevProps: EnumEntryProps, nextProps: EnumEntryProps) {\n return prevProps.index === nextProps.index &&\n prevProps.enumValuesPath === nextProps.enumValuesPath &&\n prevProps.shouldUpdateId === nextProps.shouldUpdateId &&\n prevProps.inferredEntry === nextProps.inferredEntry &&\n equal(prevProps.entryError, nextProps.entryError) &&\n prevProps.autoFocus === nextProps.autoFocus;\n }\n);\n\nfunction EnumEntryDialog({\n index,\n open,\n onClose,\n enumValuesPath\n }: {\n index?: number;\n open: boolean;\n enumValuesPath: string;\n onClose: () => void;\n}) {\n\n const {\n errors,\n } = useFormex<EnumValues>();\n\n const idError = index !== undefined ? getIn(errors, `${enumValuesPath}[${index}].id`) : undefined;\n return <Dialog\n maxWidth=\"md\"\n aria-labelledby=\"enum-edit-dialog\"\n open={open}\n onOpenChange={(open) => !open ? onClose() : undefined}\n >\n <DialogTitle hidden>Enum form dialog</DialogTitle>\n <DialogContent>\n {index !== undefined &&\n <div>\n <Field name={`${enumValuesPath}[${index}].id`}\n as={DebouncedTextField}\n required\n label={\"ID\"}\n size=\"small\"\n autoComplete=\"off\"\n error={Boolean(idError)}/>\n\n <FieldCaption error={Boolean(idError)}>\n {idError ?? \"Value saved in the data source\"}\n </FieldCaption>\n </div>}\n </DialogContent>\n\n <DialogActions>\n <Button\n autoFocus\n variant=\"outlined\"\n onClick={onClose}\n color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n\n </Dialog>\n}\n\n","import React from \"react\";\n\nimport { BooleanSwitchWithLabel, Tooltip } from \"@firecms/ui\";\nimport { FormexFieldProps } from \"@firecms/formex\";\n\nexport function SwitchControl({\n field,\n form,\n label,\n tooltip,\n disabled,\n size = \"small\",\n allowIndeterminate\n }: FormexFieldProps & {\n label: string,\n tooltip?: string,\n disabled?: boolean,\n size?: \"small\" | \"medium\",\n allowIndeterminate?: boolean\n}) {\n\n const formControlLabel = <BooleanSwitchWithLabel\n label={label}\n size={size}\n position={\"start\"}\n value={field.value}\n disabled={disabled}\n allowIndeterminate={allowIndeterminate}\n onValueChange={(checked:boolean | null) => form.setFieldValue(field.name, checked)}/>;\n\n if (tooltip)\n return (\n <Tooltip\n title={tooltip}>\n {formControlLabel}\n </Tooltip>\n );\n return formControlLabel;\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function GeneralPropertyValidation({ disabled }: {\n required?: boolean;\n disabled: boolean;\n}) {\n\n const { values, handleChange } = useFormex();\n\n const validationRequired = \"validation.required\";\n const validationRequiredMessage = \"validation.requiredMessage\";\n const validationUnique = \"validation.unique\";\n const validationUniqueInArray = \"validation.uniqueInArray\";\n\n return (\n <>\n <div className={\"col-span-6\"}>\n <Field name={validationRequired}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={\"Required\"}\n tooltip={\"You won't be able to save this entity if this value is not set\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-6\"}>\n\n <Field name={validationUnique}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={\"Unique\"}\n tooltip={\"There cannot be multiple entities with the same value\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n {getIn(values, validationRequired) && <div className={\"col-span-12\"}>\n <DebouncedTextField\n disabled={disabled}\n value={getIn(values, validationRequiredMessage)}\n label={\"Required message\"}\n name={validationRequiredMessage}\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, serializeRegExp } from \"@firecms/core\";\nimport { DebouncedTextField, } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function StringPropertyValidation({\n length,\n lowercase,\n matches,\n max,\n min,\n trim,\n uppercase,\n disabled,\n showErrors\n }: {\n length?: boolean;\n min?: boolean;\n max?: boolean;\n trim?: boolean;\n matches?: boolean;\n lowercase?: boolean;\n uppercase?: boolean;\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const {\n values,\n handleChange,\n errors\n } = useFormex();\n\n const validationLength = \"validation.length\";\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationTrim = \"validation.trim\";\n const validationMatches = \"validation.matches\";\n const validationLowercase = \"validation.lowercase\";\n const validationUppercase = \"validation.uppercase\";\n\n const matchesError = getIn(errors, validationMatches);\n\n const matchesValue = getIn(values, validationMatches);\n const matchesStringValue = typeof matchesValue === \"string\" ? matchesValue : serializeRegExp(matchesValue);\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n\n {lowercase && <div className={\"col-span-4\"}>\n <Field name={validationLowercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Lowercase\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {uppercase && <div className={\"col-span-4\"}>\n <Field name={validationUppercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Uppercase\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {trim && <div className={\"col-span-4\"}>\n <Field name={validationTrim}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Trim\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n </div>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n {length && <div className={\"col-span-4\"}>\n <DebouncedTextField\n value={getIn(values, validationLength)}\n label={\"Exact length\"}\n name={validationLength}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {min && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n label={\"Min length\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {max && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n label={\"Max length\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n </div>\n\n {matches && <div className={\"col-span-12\"}>\n <Field name={validationMatches}\n as={DebouncedTextField}\n label={\"Matches regex\"}\n size=\"small\"\n disabled={disabled}\n value={matchesStringValue}\n error={Boolean(matchesError)}/>\n <FieldCaption error={Boolean(matchesError)}>\n {matchesError ? \"Not a valid regexp\" : \"e.g. /^\\\\d+$/ for digits only\"}\n </FieldCaption>\n </div>}\n\n </div>\n );\n\n}\n","import React from \"react\";\n\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\n\nexport function ArrayPropertyValidation({\n max = true,\n min = true,\n disabled\n }: {\n min?: boolean;\n max?: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n {min && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n disabled={disabled}\n label={\"Min length\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n {max && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n disabled={disabled}\n label={\"Max length\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\n\nimport { ExpandablePanel, RuleIcon, Typography } from \"@firecms/ui\";\n\nexport function ValidationPanel({\n children\n }: PropsWithChildren<{}>) {\n\n return (\n <ExpandablePanel\n initiallyExpanded={false}\n asField={true}\n innerClassName=\"p-4\"\n title={\n <div className=\"flex flex-row text-surface-500\">\n <RuleIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n Validation\n </Typography>\n </div>\n }>\n\n {children}\n\n </ExpandablePanel>\n )\n}\n","import React, { useMemo } from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { EnumValueConfig, resolveEnumValues, useSnackbarController } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\nimport { EnumForm } from \"../EnumForm\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { PropertyWithId } from \"../PropertyEditView\";\n\nexport function EnumPropertyField({\n multiselect,\n updateIds,\n disabled,\n showErrors,\n allowDataInference,\n getData\n }: {\n multiselect: boolean;\n updateIds: boolean;\n disabled: boolean;\n showErrors: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<object[]>;\n}) {\n\n const {\n values,\n setFieldError,\n setFieldValue\n } = useFormex<PropertyWithId>();\n\n const snackbarContext = useSnackbarController();\n\n const enumValuesPath = multiselect ? \"of.enumValues\" : \"enumValues\";\n\n const defaultValue = getIn(values, \"defaultValue\");\n\n const valuesEnumValues = getIn(values, enumValuesPath);\n const enumValues: EnumValueConfig[] = useMemo(() => {\n if (!valuesEnumValues || typeof valuesEnumValues === \"boolean\")\n return [] as EnumValueConfig[];\n return resolveEnumValues(valuesEnumValues) ?? [] as EnumValueConfig[];\n }, [valuesEnumValues]);\n\n const onValuesChanged = (value: EnumValueConfig[]) => {\n if (!values)\n return;\n setFieldValue(enumValuesPath, value);\n if (!multiselect) {\n const enumIds = value.filter(v => Boolean(v?.id)).map((v: any) => v.id);\n if (defaultValue && !enumIds.includes(defaultValue)) {\n setFieldValue(\"defaultValue\", undefined);\n snackbarContext.open({\n type: \"warning\",\n message: \"Default value was cleared\"\n })\n }\n }\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <EnumForm enumValues={enumValues}\n updateIds={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n onError={(hasError) => {\n setFieldError(enumValuesPath, hasError ? \"This enum property is missing some values\" : undefined);\n }}\n getData={getData\n ? () => getData()\n .then(res => res.map(entry => values.id && getIn(entry, values.id)).filter(Boolean))\n : undefined}\n onValuesChanged={onValuesChanged}/>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiselect &&\n <StringPropertyValidation disabled={disabled}\n showErrors={showErrors}/>}\n {multiselect &&\n <ArrayPropertyValidation disabled={disabled}/>}\n </ValidationPanel>\n\n </div>\n\n {!multiselect && <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n fullWidth={true}\n onValueChange={(value: string) => {\n setFieldValue(\"defaultValue\", value);\n }}\n size={\"large\"}\n label={\"Default value\"}\n value={defaultValue ?? \"\"}>\n {enumValues\n .filter((enumValue) => Boolean(enumValue?.id))\n .map((enumValue) => (\n <SelectItem key={enumValue.id}\n value={enumValue.id?.toString()}>\n {enumValue.label}\n </SelectItem>\n ))}\n </Select>\n\n </div>}\n </>\n );\n}\n","import React from \"react\";\nimport {\n Button,\n CloudUploadIcon,\n DebouncedTextField,\n ExpandablePanel,\n MultiSelect,\n MultiSelectItem,\n Typography\n} from \"@firecms/ui\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nconst fileTypes: Record<string, string> = {\n \"image/*\": \"Images\",\n \"video/*\": \"Videos\",\n \"audio/*\": \"Audio files\",\n \"application/*\": \"Files (pdf, zip, csv, excel...)\",\n \"text/*\": \"Text files\"\n}\n\nexport function StoragePropertyField({\n multiple,\n existing,\n disabled\n }: {\n multiple: boolean;\n existing: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex();\n\n const baseStoragePath = multiple ? \"of.storage\" : \"storage\";\n const acceptedFiles = `${baseStoragePath}.acceptedFiles`;\n\n const metadata = `${baseStoragePath}.metadata`;\n const fileName = `${baseStoragePath}.fileName`;\n const maxSize = `${baseStoragePath}.maxSize`;\n const storagePath = `${baseStoragePath}.storagePath`;\n const storeUrl = `${baseStoragePath}.storeUrl`;\n\n const fileNameValue = getIn(values, fileName) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\n const maxSizeValue = getIn(values, maxSize);\n\n const storedValue = getIn(values, acceptedFiles);\n const fileTypesValue: string[] | undefined = Array.isArray(storedValue) ? storedValue : undefined;\n const allFileTypesSelected = !fileTypesValue || fileTypesValue.length === 0;\n\n const handleTypesChange = (value: string[]) => {\n if (!value) setFieldValue(acceptedFiles, undefined);\n // else if (value.includes(\"all\")) setFieldValue(acceptedFiles, undefined);\n // else if (value.length >= Object.keys(fileTypes).length) setFieldValue(acceptedFiles, undefined);\n // else if (allFileTypesSelected)\n // setFieldValue(acceptedFiles, Object.keys(fileTypes).filter((v) => !value.includes(v)));\n else setFieldValue(acceptedFiles, value);\n };\n\n const hasFilenameCallback = typeof fileNameValue === \"function\";\n const hasStoragePathCallback = typeof storagePathValue === \"function\";\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ExpandablePanel\n title={\n <div className=\"flex flex-row text-surface-500\">\n <CloudUploadIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n File upload config\n </Typography>\n </div>\n }>\n\n <div className={\"grid grid-cols-12 gap-2 p-4\"}>\n\n <div className={\"col-span-12\"}>\n\n <MultiSelect\n className={\"w-full\"}\n placeholder={\"All file types allowed\"}\n disabled={disabled}\n name={acceptedFiles}\n value={fileTypesValue ?? []}\n onValueChange={handleTypesChange}\n label={allFileTypesSelected ? undefined : \"Allowed file types\"}\n renderValues={(selected) => {\n if (!selected || selected.length === 0) return \"All file types allowed\";\n return selected.map((v: string) => fileTypes[v])\n .filter((v: string) => Boolean(v))\n .join(\", \");\n }}>\n\n {Object.entries(fileTypes).map(([value, label]) => (\n <MultiSelectItem key={value} value={value} className={\"flex items-center gap-2\"}>\n {/*<Checkbox*/}\n {/* checked={allFileTypesSelected || fileTypesValue.indexOf(value) > -1}/>*/}\n <div className={\"flex-grow\"}>\n {label}\n </div>\n <Button size={\"small\"}\n variant={\"text\"}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n return setFieldValue(acceptedFiles, [value]);\n }}>\n Only\n </Button>\n </MultiSelectItem>\n ))}\n\n </MultiSelect>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={\"File name\"}\n size={\"small\"}\n disabled={hasFilenameCallback || disabled}\n value={hasFilenameCallback ? \"-\" : fileNameValue}\n />\n </div>\n <div className={\"col-span-12\"}>\n <Field name={storagePath}\n as={DebouncedTextField}\n label={\"Storage path\"}\n disabled={hasStoragePathCallback || disabled}\n size={\"small\"}\n value={hasStoragePathCallback ? \"-\" : storagePathValue}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n <p>You can use the following placeholders in\n the file name\n and storage path values:</p>\n <ul>\n <li>{\"{file} - Full name of the uploaded file\"}</li>\n <li>{\"{file.name} - Name of the uploaded file without extension\"}</li>\n <li>{\"{file.ext} - Extension of the uploaded file\"}</li>\n <li>{\"{entityId} - ID of the entity\"}</li>\n <li>{\"{propertyKey} - ID of this field\"}</li>\n <li>{\"{path} - Path of this entity\"}</li>\n <li>{\"{rand} - Random value used to avoid name collisions\"}</li>\n </ul>\n </Typography>\n\n <Field name={storeUrl}\n type=\"checkbox\">\n {({\n field,\n form\n }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Save URL instead of storage path\"}\n disabled={existing || disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n Turn this setting on, if you prefer to save\n the download\n URL of the uploaded file instead of the\n storage path.\n You can only change this prop upon creation.\n </Typography>\n </div>\n\n <div className={\"col-span-12\"}>\n <DebouncedTextField name={maxSize}\n type={\"number\"}\n label={\"Max size (in bytes)\"}\n size={\"small\"}\n value={maxSizeValue !== undefined && maxSizeValue !== null ? maxSizeValue.toString() : \"\"}\n onChange={(e) => {\n const value = e.target.value;\n if (value === \"\") setFieldValue(maxSize, undefined);\n else setFieldValue(maxSize, parseInt(value));\n }}\n />\n </div>\n\n </div>\n </ExpandablePanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiple && <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n </div>}\n {multiple && <div className={\"col-span-12\"}>\n <ArrayPropertyValidation disabled={disabled}/>\n </div>}\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { isPropertyBuilder, Properties, PropertiesOrBuilders, Property, PropertyOrBuilder } from \"@firecms/core\";\n\nexport function editableProperty(property: PropertyOrBuilder | PropertyOrBuilder): boolean {\n if (isPropertyBuilder(property))\n return false;\n if (isPropertyBuilder(property as PropertyOrBuilder))\n return false;\n else {\n const eProperty = property as Property;\n if (eProperty.dataType === \"array\" && typeof eProperty.of === \"function\")\n return false;\n else if (eProperty.dataType === \"array\" && Array.isArray(eProperty.of))\n return false;\n return Boolean(eProperty.editable);\n }\n}\n\nexport function removeNonEditableProperties(properties: PropertiesOrBuilders<any>): Properties {\n return Object.entries(properties)\n .filter(([_, property]) => editableProperty(property))\n .map(([key, propertyOrBuilder]) => {\n const property = propertyOrBuilder as Property;\n if (!editableProperty(property)) {\n return undefined;\n } else if (property.dataType === \"map\" && property.properties) {\n return {\n [key]: {\n ...property,\n properties: removeNonEditableProperties(property.properties as PropertiesOrBuilders)\n }\n };\n } else {\n return { [key]: property };\n }\n })\n .filter((e) => Boolean(e))\n .reduce((a, b) => ({ ...a, ...b }), {}) as Properties;\n}\n","import {\n ErrorBoundary,\n getFieldConfig,\n isPropertyBuilder,\n Property,\n PropertyConfigBadge,\n PropertyOrBuilder,\n useCustomizationController,\n} from \"@firecms/core\";\nimport {\n cardClickableMixin,\n cardMixin,\n cardSelectedMixin,\n cls,\n DoNotDisturbOnIcon,\n FunctionsIcon,\n Paper,\n Typography,\n} from \"@firecms/ui\";\n\nimport { editableProperty } from \"../../utils/entities\";\n\nexport function PropertyFieldPreview({\n property,\n onClick,\n hasError,\n includeName,\n includeEditButton,\n selected\n }: {\n property: Property,\n hasError?: boolean,\n selected?: boolean,\n includeName?: boolean,\n includeEditButton?: boolean;\n onClick?: () => void\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = getFieldConfig(property, propertyConfigs);\n const disabled = !editableProperty(property);\n\n const borderColorClass = hasError\n ? \"border-red-500 dark:border-red-500 border-opacity-100 dark:border-opacity-100 ring-0 dark:ring-0\"\n : (selected ? \"border-primary\" : \"border-transparent\");\n\n return <ErrorBoundary>\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"m-4\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <Paper\n className={cls(\n \"border\",\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n borderColorClass\n )}\n >\n\n <div className=\"w-full flex flex-col\">\n\n {includeName &&\n <ErrorBoundary>\n <Typography variant=\"body1\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property.name\n ? property.name\n : \"\\u00a0\"\n }\n </Typography>\n </ErrorBoundary>}\n\n <div className=\"flex flex-row items-center\">\n <ErrorBoundary>\n <Typography className=\"flex-grow pr-2\"\n variant={includeName ? \"body2\" : \"subtitle1\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>\n </ErrorBoundary>\n <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>\n\n </div>\n </div>\n\n {includeEditButton && <Typography variant={\"button\"}>\n EDIT\n </Typography>}\n\n </Paper>\n </div>\n </ErrorBoundary>\n}\n\nexport function NonEditablePropertyPreview({\n name,\n selected,\n onClick,\n property\n }: {\n name: string,\n selected: boolean,\n onClick?: () => void,\n property?: PropertyOrBuilder\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = !isPropertyBuilder(property) && property ? getFieldConfig(property, propertyConfigs) : undefined;\n\n return (\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"relative m-4\"}>\n {propertyConfig && <PropertyConfigBadge propertyConfig={propertyConfig}/>}\n {!propertyConfig && <div\n className={\"h-8 w-8 p-1 rounded-full shadow text-white bg-surface-500\"}>\n <FunctionsIcon color={\"inherit\"} size={\"medium\"}/>\n </div>}\n <DoNotDisturbOnIcon color={\"disabled\"} size={\"small\"} className={\"absolute -right-2 -top-2\"}/>\n </div>\n <Paper\n className={cls(\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n selected ? \"border-primary\" : \"border-transparent\")}\n >\n\n <div className=\"w-full flex flex-col\">\n <Typography variant=\"body1\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property?.name\n ? property.name\n : name\n }\n </Typography>\n\n <div className=\"flex flex-row items-center\">\n {propertyConfig && <Typography className=\"flex-grow pr-2\"\n variant={\"body2\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>}\n\n {property && !isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>}\n\n {property && isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This property is defined as a property builder in code\n </Typography>\n </ErrorBoundary>}\n\n {!property && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This field is defined as an additional field in code\n </Typography>\n </ErrorBoundary>}\n\n </div>\n\n {/*<div className=\"flex flex-row text-xs\">*/}\n {/* <Typography className=\"flex-grow pr-2\"*/}\n {/* variant=\"body2\"*/}\n {/* component=\"span\"*/}\n {/* color=\"secondary\">*/}\n {/* This field can only be edited in code*/}\n {/* </Typography>*/}\n {/*</div>*/}\n </div>\n\n </Paper>\n </div>)\n}\n","import React from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport {\n AdditionalFieldDelegate,\n CMSType,\n ErrorBoundary,\n isPropertyBuilder,\n PropertiesOrBuilders,\n PropertyOrBuilder\n} from \"@firecms/core\";\nimport { AutorenewIcon, defaultBorderMixin, DragHandleIcon, IconButton, RemoveIcon, Tooltip } from \"@firecms/ui\";\nimport { NonEditablePropertyPreview, PropertyFieldPreview } from \"./PropertyFieldPreview\";\nimport { DragDropContext, Draggable, DraggableProvided, Droppable } from \"@hello-pangea/dnd\";\nimport { getFullId, getFullIdPath } from \"./util\";\nimport { editableProperty } from \"../../utils/entities\";\n\nexport const PropertyTree = React.memo(\n function PropertyTree<M extends {\n [Key: string]: CMSType\n }>({\n namespace,\n selectedPropertyKey,\n onPropertyClick,\n properties,\n propertiesOrder: propertiesOrderProp,\n additionalFields,\n errors,\n onPropertyMove,\n onPropertyRemove,\n className,\n inferredPropertyKeys,\n collectionEditable\n }: {\n namespace?: string;\n selectedPropertyKey?: string;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n properties: PropertiesOrBuilders<M>;\n propertiesOrder?: string[];\n additionalFields?: AdditionalFieldDelegate<M>[];\n errors: Record<string, any>;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n className?: string;\n inferredPropertyKeys?: string[];\n collectionEditable: boolean;\n }) {\n\n const propertiesOrder = propertiesOrderProp ?? Object.keys(properties);\n\n const onDragEnd = (result: any) => {\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n const startIndex = result.source.index;\n const endIndex = result.destination.index;\n\n const newPropertiesOrder = Array.from(propertiesOrder);\n const [removed] = newPropertiesOrder.splice(startIndex, 1);\n newPropertiesOrder.splice(endIndex, 0, removed);\n if (onPropertyMove)\n onPropertyMove(newPropertiesOrder, namespace);\n }\n\n return (\n <>\n\n <DragDropContext onDragEnd={onDragEnd}>\n <Droppable droppableId={`droppable_${namespace}`}>\n {(droppableProvided, droppableSnapshot) => (\n <div\n {...droppableProvided.droppableProps}\n ref={droppableProvided.innerRef}\n className={className}>\n {propertiesOrder && propertiesOrder\n .map((propertyKey: string, index: number) => {\n const property = properties[propertyKey] as PropertyOrBuilder;\n const additionalField = additionalFields?.find(field => field.key === propertyKey);\n\n if (!property && !additionalField) {\n console.warn(`Property ${propertyKey} not found in properties or additionalFields`);\n return null;\n }\n return (\n <Draggable\n key={`array_field_${namespace}_${propertyKey}}`}\n draggableId={`array_field_${namespace}_${propertyKey}}`}\n index={index}>\n {(provided, snapshot) => {\n return (\n <ErrorBoundary>\n <PropertyTreeEntry\n propertyKey={propertyKey as string}\n propertyOrBuilder={property}\n additionalField={additionalField}\n provided={provided}\n errors={errors}\n namespace={namespace}\n inferredPropertyKeys={inferredPropertyKeys}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n onPropertyClick={snapshot.isDragging ? undefined : onPropertyClick}\n selectedPropertyKey={selectedPropertyKey}\n collectionEditable={collectionEditable}\n />\n </ErrorBoundary>\n );\n }}\n </Draggable>);\n }).filter(Boolean)}\n\n {droppableProvided.placeholder}\n\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n </>\n );\n },\n (prevProps, nextProps) => {\n\n const isSelected = nextProps.selectedPropertyKey?.startsWith(nextProps.namespace ?? \"\");\n const wasSelected = prevProps.selectedPropertyKey?.startsWith(prevProps.namespace ?? \"\");\n if (isSelected || wasSelected)\n return false;\n\n return equal(prevProps.properties, nextProps.properties) &&\n prevProps.propertiesOrder === nextProps.propertiesOrder &&\n equal(prevProps.additionalFields, nextProps.additionalFields) &&\n equal(prevProps.errors, nextProps.errors) &&\n equal(prevProps.onPropertyClick, nextProps.onPropertyClick) &&\n // equal(prevProps.onPropertyMove, nextProps.onPropertyMove) &&\n // equal(prevProps.onPropertyRemove, nextProps.onPropertyRemove) &&\n prevProps.namespace === nextProps.namespace &&\n prevProps.collectionEditable === nextProps.collectionEditable;\n }\n);\n\nexport function PropertyTreeEntry({\n propertyKey,\n namespace,\n propertyOrBuilder,\n additionalField,\n provided,\n selectedPropertyKey,\n errors,\n onPropertyClick,\n onPropertyMove,\n onPropertyRemove,\n inferredPropertyKeys,\n collectionEditable\n }: {\n propertyKey: string;\n namespace?: string;\n propertyOrBuilder: PropertyOrBuilder;\n additionalField?: AdditionalFieldDelegate<any>;\n selectedPropertyKey?: string;\n provided: DraggableProvided;\n errors: Record<string, any>;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n inferredPropertyKeys?: string[];\n collectionEditable: boolean;\n}) {\n\n const isPropertyInferred = inferredPropertyKeys?.includes(namespace ? `${namespace}.${propertyKey}` : propertyKey);\n const fullId = getFullId(propertyKey, namespace);\n const fullIdPath = getFullIdPath(propertyKey, namespace);\n const hasError = fullIdPath in errors;\n\n let subtree;\n if (typeof propertyOrBuilder === \"object\") {\n const property = propertyOrBuilder;\n if (property.dataType === \"map\" && property.properties) {\n subtree = <PropertyTree\n selectedPropertyKey={selectedPropertyKey}\n namespace={fullId}\n properties={property.properties}\n propertiesOrder={property.propertiesOrder}\n errors={errors}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n collectionEditable={collectionEditable}\n />\n }\n }\n\n // const hasError = fullId ? getIn(errors, idToPropertiesPath(fullId)) : false;\n const selected = selectedPropertyKey === fullId;\n const editable = propertyOrBuilder && ((collectionEditable && !isPropertyBuilder(propertyOrBuilder)) || editableProperty(propertyOrBuilder));\n\n return (\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className=\"relative -ml-8\"\n >\n {subtree && <div\n className={\"absolute border-l \" + defaultBorderMixin}\n style={{\n left: \"32px\",\n top: \"64px\",\n bottom: \"16px\"\n }}/>}\n\n {!isPropertyBuilder(propertyOrBuilder) && !additionalField && editable\n ? <PropertyFieldPreview\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n includeName={true}\n selected={selected}\n hasError={hasError}/>\n : <NonEditablePropertyPreview name={propertyKey}\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n selected={selected}/>}\n\n <div className=\"absolute top-2 right-2 flex flex-row \">\n\n {isPropertyInferred && <Tooltip title={\"Inferred property\"}>\n <AutorenewIcon size=\"small\" className={\"p-2\"}/>\n </Tooltip>}\n\n {onPropertyRemove && <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n color=\"inherit\"\n onClick={() => onPropertyRemove(propertyKey, namespace)}>\n <RemoveIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>}\n\n {onPropertyMove && <Tooltip title={\"Move\"}\n asChild={true}>\n <IconButton\n component={\"span\"}\n size=\"small\"\n >\n <DragHandleIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>}\n </div>\n\n {subtree && <div className={\"ml-16\"}>{subtree}</div>}\n </div>\n );\n\n}\n","import React, { useState } from \"react\";\nimport { FieldCaption, MapProperty, Property, PropertyConfig, } from \"@firecms/core\";\nimport { AddIcon, BooleanSwitchWithLabel, Button, Paper, Typography } from \"@firecms/ui\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath, namespaceToPropertiesPath } from \"../util\";\n\nexport function MapPropertyField({ disabled, getData, allowDataInference, propertyConfigs, collectionEditable }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<MapProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const propertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const onPropertyCreated = ({\n id,\n property\n }: { id?: string, property: Property }) => {\n if (!id)\n throw Error();\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const currentPropertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"propertiesOrder\", newPropertiesOrder, false);\n\n setPropertyDialogOpen(false);\n };\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n const propertiesPath = idToPropertiesPath(fullId);\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n const currentPropertiesOrder: string[] = getIn(values, propertiesOrderPath) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\n\n setFieldValue(propertiesPath, undefined, false);\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const empty = !propertiesOrder || propertiesOrder.length < 1;\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className=\"flex justify-between items-end my-4\">\n <Typography variant={\"subtitle2\"}>Properties in this group</Typography>\n <Button\n color=\"primary\"\n variant={\"outlined\"}\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\n >\n Add property to {values.name ?? \"this group\"}\n </Button>\n </div>\n <Paper className=\"p-2 pl-8\">\n <PropertyTree\n properties={values.properties ?? {}}\n propertiesOrder={propertiesOrder}\n errors={{}}\n collectionEditable={collectionEditable}\n onPropertyClick={(propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={onPropertyMove}/>\n\n {empty &&\n <Typography variant={\"label\"}\n className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this group\n </Typography>}\n </Paper>\n </div>\n\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"small\"}\n label=\"Spread children as columns\"\n onValueChange={(v) => setFieldValue(\"spreadChildren\", v)}\n value={values.spreadChildren ?? false}\n />\n <FieldCaption>\n Set this flag to true if you want to display the children of this group as individual columns. This\n will only work for top level groups.\n </FieldCaption>\n </div>\n\n <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n getData={getData}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyCreated}\n existingPropertyKeys={selectedPropertyKey ? undefined : propertiesOrder}\n propertyConfigs={propertyConfigs}\n />\n\n </>);\n}\n","import React, { useState } from \"react\";\nimport { ArrayProperty, getFieldConfig, Property, PropertyConfig } from \"@firecms/core\";\nimport { Button, Paper, Typography } from \"@firecms/ui\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { PropertyFieldPreview } from \"../PropertyFieldPreview\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\nexport function RepeatPropertyField({\n showErrors,\n existing,\n disabled,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n showErrors: boolean,\n existing: boolean,\n disabled: boolean,\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState(false);\n const ofProperty = getIn(values, \"of\");\n const ofPropertyError = getIn(touched, \"of\") && getIn(errors, \"of\");\n\n const onPropertyChanged = ({ id, property, namespace }:\n { id?: string, property: Property, namespace?: string }) => {\n setFieldValue(\"of\", property);\n };\n\n const widget = ofProperty && getFieldConfig(ofProperty, propertyConfigs);\n return (\n <>\n <div className={\"col-span-12\"}>\n <Typography variant={\"subtitle2\"}>\n Repeat component\n </Typography>\n <Field\n name={\"of\"}\n value={ofProperty}\n // validate={(property: Property) => {\n // return property?.dataType ? undefined : \"You need to specify a repeat field\";\n // }}\n >\n {({}) => (\n <Paper className=\"p-2 mt-4\">\n\n {ofProperty && <PropertyFieldPreview\n property={ofProperty}\n onClick={disabled ? undefined : () => setPropertyDialogOpen(true)}\n includeName={false}\n includeEditButton={true}\n selected={false}\n hasError={false}/>}\n\n {!disabled && !ofProperty && <Button variant={\"text\"}\n size={\"large\"}\n color={ofPropertyError ? \"error\" : \"primary\"}\n onClick={() => setPropertyDialogOpen(true)}>\n Edit {`${widget ? widget.name : \"repeat component\"}`}\n </Button>}\n\n <PropertyFormDialog\n inArray={true}\n open={propertyDialogOpen}\n existingProperty={existing}\n getData={getData}\n autoUpdateId={!existing}\n autoOpenTypeSelect={!existing}\n onOkClicked={() => setPropertyDialogOpen(false)}\n allowDataInference={allowDataInference}\n property={ofProperty}\n includeIdAndName={false}\n onPropertyChanged={onPropertyChanged}\n forceShowErrors={showErrors}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n />\n </Paper>\n )}\n </Field>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <ArrayPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { PropertyWithId } from \"../PropertyEditView\";\nimport React from \"react\";\nimport { FieldCaption, toSnakeCase, unslugify } from \"@firecms/core\";\n\ntype CommonPropertyFieldsProps = {\n showErrors: boolean,\n disabledId: boolean,\n disabled: boolean;\n isNewProperty: boolean;\n autoUpdateId: boolean;\n};\n\nexport const CommonPropertyFields = React.forwardRef<HTMLDivElement, CommonPropertyFieldsProps>(\n function CommonPropertyFields({\n showErrors,\n disabledId,\n disabled,\n autoUpdateId,\n isNewProperty\n }, ref) {\n\n const {\n errors,\n values,\n setFieldValue,\n setFieldTouched,\n touched,\n validate\n } = useFormex<PropertyWithId>();\n\n const name = \"name\";\n const nameError = showErrors && getIn(errors, name);\n\n const id = \"id\";\n const idError = showErrors && getIn(errors, id);\n\n const description = \"description\";\n const descriptionError = showErrors && getIn(errors, description);\n\n return (\n <div className={\"flex flex-col gap-2 col-span-12\"}>\n\n <div>\n <Field\n name={name}\n inputRef={ref}\n as={DebouncedTextField}\n value={values[name]}\n onChange={(e: any) => {\n const newNameValue = e.target.value;\n const idTouched = getIn(touched, id);\n if (!idTouched && autoUpdateId) {\n setFieldValue(id, newNameValue ? toSnakeCase(newNameValue) : \"\", false)\n }\n setFieldValue(name, newNameValue, true);\n setFieldTouched(name, true);\n }}\n style={{ fontSize: 20 }}\n placeholder={\"Field name\"}\n required\n disabled={disabled}\n error={Boolean(nameError)}/>\n\n <FieldCaption error={Boolean(nameError)}>\n {nameError}\n </FieldCaption>\n </div>\n\n <div>\n <Field\n name={id}\n as={DebouncedTextField}\n label={\"ID\"}\n value={values[id]}\n onChange={(e: any) => {\n const newIdValue = e.target.value;\n const nameTouched = getIn(touched, name);\n if (!nameTouched && autoUpdateId) {\n setFieldValue(name, newIdValue ? unslugify(newIdValue) : \"\")\n }\n setFieldValue(id, newIdValue, true);\n setFieldTouched(id, true);\n }}\n disabled={disabledId || disabled}\n required\n size=\"small\"\n error={Boolean(idError)}/>\n <FieldCaption error={Boolean(idError)}>\n {idError}\n </FieldCaption>\n </div>\n\n <div>\n <Field name={description}\n as={DebouncedTextField}\n label={\"Description\"}\n disabled={disabled}\n error={Boolean(descriptionError)}/>\n <FieldCaption error={Boolean(descriptionError)}>\n {descriptionError}\n </FieldCaption>\n </div>\n\n </div>\n );\n\n }\n);\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { TextField } from \"@firecms/ui\";\n\nexport function StringPropertyField({\n widgetId,\n disabled,\n showErrors\n }: {\n widgetId: \"text_field\" | \"multiline\" | \"email\";\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n {widgetId === \"text_field\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n matches={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n {widgetId === \"multiline\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n\n {widgetId === \"email\" &&\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>}\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\n\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nexport function BooleanPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n const { values } = useFormex();\n const defaultValue = getIn(values, \"defaultValue\");\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <Field\n name={\"defaultValue\"}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={defaultValue === null || defaultValue === undefined ? \"Default value not set\" : (\"Default value is \" + defaultValue.toString())}\n disabled={disabled}\n allowIndeterminate={true} field={field}\n form={form}/>\n }}\n </Field>\n\n </div>\n </>\n );\n}\n","import React, { useState } from \"react\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { OnPropertyChangedParams, PropertyFormDialog } from \"../PropertyEditView\";\nimport {\n getFullId,\n getFullIdPath,\n idToPropertiesPath,\n namespaceToPropertiesOrderPath,\n namespaceToPropertiesPath\n} from \"../util\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { ArrayProperty, PropertyConfig } from \"@firecms/core\";\n\nexport function BlockPropertyField({\n disabled,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const onPropertyChanged = ({\n id,\n namespace,\n property\n }: OnPropertyChangedParams) => {\n if (!id)\n throw Error();\n\n setFieldValue(\"oneOf.\" + getFullIdPath(id, namespace), property, false);\n\n const currentPropertiesOrder = values.oneOf?.propertiesOrder ?? Object.keys(values.oneOf?.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"oneOf.\" + namespaceToPropertiesOrderPath(namespace), newPropertiesOrder, false);\n setPropertyDialogOpen(false);\n };\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.oneOf?.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(`oneOf.${idToPropertiesPath(fullId)}`, undefined, false);\n const propertiesOrderPath = `oneOf.${namespaceToPropertiesOrderPath(namespace)}`;\n const currentPropertiesOrder: string[] = getIn(values, propertiesOrderPath) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const addChildButton = <Button\n autoFocus\n color=\"primary\"\n\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\n >\n Add property to {values.name ?? \"this block\"}\n </Button>;\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(`oneOf.${namespaceToPropertiesOrderPath(namespace)}`, propertiesOrder, false);\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className={\"flex justify-between items-end mt-8 mb-4\"}>\n <Typography variant={\"subtitle2\"}>\n Properties in this block\n </Typography>\n {addChildButton}\n </div>\n <Paper className=\"p-2 pl-8\">\n\n <PropertyTree\n properties={values.oneOf?.properties ?? {}}\n propertiesOrder={values.oneOf?.propertiesOrder}\n errors={{}}\n collectionEditable={collectionEditable}\n onPropertyClick={disabled\n ? undefined\n : (propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={disabled\n ? undefined\n : onPropertyMove}/>\n\n {!disabled && (values.oneOf?.propertiesOrder?.length === 0)&&\n <div className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this block\n </div>}\n\n </Paper>\n </div>\n\n {!disabled && <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n getData={getData}\n allowDataInference={allowDataInference}\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n collectionEditable={collectionEditable}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyChanged}\n existingPropertyKeys={selectedPropertyKey ? undefined : values.oneOf?.propertiesOrder}\n propertyConfigs={propertyConfigs}/>}\n\n </>);\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function NumberPropertyValidation({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationLessThan = \"validation.lessThan\";\n const validationMoreThan = \"validation.moreThan\";\n const validationPositive = \"validation.positive\";\n const validationNegative = \"validation.negative\";\n const validationInteger = \"validation.integer\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n label={\"Min value\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n label={\"Max value\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationLessThan)}\n label={\"Less than\"}\n name={validationLessThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationMoreThan)}\n label={\"More than\"}\n name={validationMoreThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-4\"}>\n <Field name={validationPositive}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Positive value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationNegative}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Negative value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationInteger}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Integer value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { NumberPropertyValidation } from \"./validation/NumberPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { TextField } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nexport function NumberPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <NumberPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n type={\"number\"}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : parseFloat(e.target.value));\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, IconForView, NumberProperty, StringProperty, useNavigationController } from \"@firecms/core\";\nimport { CircularProgress, Select, SelectGroup, SelectItem, Typography, } from \"@firecms/ui\";\n\nexport function ReferencePropertyField({\n existing,\n multiple,\n disabled,\n showErrors\n }: {\n existing: boolean,\n multiple: boolean,\n disabled: boolean,\n showErrors: boolean\n}) {\n\n const {\n values,\n handleChange,\n errors,\n } = useFormex<StringProperty | NumberProperty>();\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const pathPath = multiple ? \"of.path\" : \"path\";\n const pathValue: string | undefined = getIn(values, pathPath);\n const pathError: string | undefined = showErrors && getIn(errors, pathPath);\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Field name={pathPath}\n pathPath={pathPath}\n type=\"select\"\n disabled={(existing && Boolean(pathValue)) || disabled}\n value={pathValue}\n error={pathError}\n handleChange={handleChange}\n as={CollectionsSelect}/>\n\n </div>\n\n </>\n );\n}\n\nexport function CollectionsSelect({\n disabled,\n pathPath,\n value,\n handleChange,\n error,\n ...props\n }: {\n disabled: boolean,\n pathPath: string,\n value?: string,\n handleChange: (event: any) => void,\n error?: string\n}) {\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const collections = navigation?.collections ?? [];\n\n const groups: string[] = Array.from(new Set(\n Object.values(collections).map(e => e.group).filter(Boolean) as string[]\n ).values());\n\n const ungroupedCollections = collections.filter((col) => !col.group);\n\n return (\n <>\n <Select\n error={Boolean(error)}\n disabled={disabled}\n value={value ?? \"\"}\n position={\"item-aligned\"}\n name={pathPath}\n size={\"large\"}\n fullWidth={true}\n onChange={handleChange}\n label={\"Target collection\"}\n renderValue={(selected) => {\n const selectedCollection = collections.find(collection => collection.id === selected || collection.path === selected);\n if (!selectedCollection) return null;\n return (\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={selectedCollection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {selectedCollection?.name.toUpperCase()}\n </Typography>\n </div>)\n }}\n {...props}>\n\n {groups.flatMap((group) => (\n <SelectGroup label={group || \"Views\"}\n key={`group_${group}`}>\n {\n collections.filter(collection => collection.group === group)\n .map((collection) => {\n return <SelectItem\n key={`${collection.id ?? collection.path}-${group}`}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>\n ))}\n\n {ungroupedCollections && <SelectGroup label={\"Views\"}>\n {ungroupedCollections\n .map((collection) => {\n return <SelectItem key={collection.id ?? collection.path}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>}\n\n </Select>\n\n <FieldCaption>\n You can only edit the reference collection upon field\n creation.\n </FieldCaption>\n </>\n );\n}\n","import React from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, NumberProperty, StringProperty } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\nexport function DateTimePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n errors,\n touched,\n setFieldValue\n } = useFormex<StringProperty | NumberProperty>();\n\n const modePath = \"mode\";\n const modeValue: string | undefined = getIn(values, modePath);\n const modeError: string | undefined = getIn(touched, modePath) && getIn(errors, modePath);\n\n const autoValuePath = \"autoValue\";\n const autoValueValue: string | undefined = getIn(values, autoValuePath);\n const autoValueError: string | undefined = getIn(touched, autoValuePath) && getIn(errors, autoValuePath);\n\n return (\n <>\n <div className={\"flex flex-col col-span-12 gap-2\"}>\n <div>\n <Select name={modePath}\n value={modeValue ?? \"date\"}\n error={Boolean(modeError)}\n size={\"large\"}\n onValueChange={(v) => setFieldValue(modePath, v)}\n label={\"Mode\"}\n fullWidth={true}\n renderValue={(v) => {\n switch (v) {\n case \"date_time\":\n return \"Date/Time\";\n case \"date\":\n return \"Date\";\n default:\n return \"\";\n }\n }}\n disabled={disabled}>\n <SelectItem value={\"date_time\"}> Date/Time </SelectItem>\n <SelectItem value={\"date\"}> Date </SelectItem>\n </Select>\n <FieldCaption error={Boolean(modeError)}>\n {modeError}\n </FieldCaption>\n </div>\n <div>\n <Select name={autoValuePath}\n disabled={disabled}\n size={\"large\"}\n fullWidth={true}\n value={autoValueValue ?? \"\"}\n onValueChange={(v) => setFieldValue(autoValuePath, v === \"none\" ? null : v)}\n renderValue={(v) => {\n switch (v) {\n case \"on_create\":\n return \"On create\";\n case \"on_update\":\n return \"On any update\";\n default:\n return \"None\";\n }\n }}\n error={Boolean(autoValueError)}\n label={\"Automatic value\"}>\n <SelectItem value={\"none\"}> None </SelectItem>\n <SelectItem value={\"on_create\"}> On create </SelectItem>\n <SelectItem value={\"on_update\"}> On any update </SelectItem>\n </Select>\n <FieldCaption error={Boolean(autoValueError)}>\n {autoValueError ?? \"Update this field automatically when creating or updating the entity\"}\n </FieldCaption>\n </div>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n </div>\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps } from \"@firecms/formex\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function AdvancedPropertyValidation({ disabled }: {\n disabled: boolean\n}) {\n\n const columnWidth = \"columnWidth\";\n const hideFromCollection = \"hideFromCollection\";\n const readOnly = \"readOnly\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <div className={\"col-span-12\"}>\n <Field type=\"checkbox\" name={hideFromCollection}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Hide from collection\"}\n disabled={disabled}\n form={form}\n tooltip={\"Hide this field from the collection view. It will still be visible in the form view\"}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={readOnly}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Read only\"}\n disabled={disabled}\n tooltip={\"Is this a read only field. Display only as a preview\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\n\nexport function KeyValuePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import {\n ArrayProperty,\n BooleanProperty,\n DateProperty,\n MapProperty,\n mergeDeep,\n NumberProperty,\n Property,\n PropertyConfig,\n StringProperty\n} from \"@firecms/core\";\n\nexport function updatePropertyFromWidget(propertyData: any,\n selectedWidgetId: string | undefined,\n propertyConfigs: Record<string, PropertyConfig>): Property {\n\n let updatedProperty;\n if (selectedWidgetId === \"text_field\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"text_field\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multiline\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"multiline\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n multiline: true,\n storage: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"markdown\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"markdown\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: true,\n email: undefined,\n url: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"url\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"url\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: true,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"email\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"email\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: true,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: propertyData.enumValues ?? []\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"number_input\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_input\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: undefined\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: propertyData.enumValues ?? []\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"multi_number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"number\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: {\n storagePath: \"/\"\n }\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n storage: propertyData.of?.storage ?? {\n storagePath: \"/\"\n }\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"group\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"group\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: false,\n properties: propertyData.properties ?? {}\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"key_value\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"key_value\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: true,\n properties: undefined\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"reference\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"reference\",\n propertyConfig: \"reference\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies Property\n );\n } else if (selectedWidgetId === \"multi_references\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_references\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"reference\"\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"switch\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"boolean\",\n propertyConfig: \"switch\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies BooleanProperty\n );\n } else if (selectedWidgetId === \"date_time\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"date\",\n propertyConfig: \"date_time\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n mode: \"date_time\"\n } satisfies DateProperty\n );\n } else if (selectedWidgetId === \"repeat\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"repeat\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"block\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"block\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n oneOf: {\n properties: {}\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId && propertyConfigs[selectedWidgetId]) {\n updatedProperty = {\n ...propertyConfigs[selectedWidgetId].property,\n propertyConfig: selectedWidgetId\n };\n }\n\n return updatedProperty;\n}\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { Select, SelectItem, TextField } from \"@firecms/ui\";\n\nexport function UrlPropertyField({\n disabled,\n showErrors\n }: {\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n const urlValue = getIn(values, \"url\");\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n fullWidth={true}\n onValueChange={(value: string) => {\n if (value === \"[NONE]\")\n setFieldValue(\"url\", true);\n else\n setFieldValue(\"url\", value);\n }}\n label={\"Preview type\"}\n renderValue={(value: string) => {\n switch (value) {\n case \"image\":\n return \"Image\";\n case \"video\":\n return \"Video\";\n case \"audio\":\n return \"Audio\";\n default:\n return \"Display URL\";\n }\n }}\n value={urlValue ?? \"[NONE]\"}>\n <SelectItem value={\"[NONE]\"}>\n Display URL\n </SelectItem>\n <SelectItem value={\"image\"}>\n Image\n </SelectItem>\n <SelectItem value={\"video\"}>\n Video\n </SelectItem>\n <SelectItem value={\"audio\"}>\n Audio\n </SelectItem>\n </Select>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import { DEFAULT_FIELD_CONFIGS, PropertyConfigId, PropertyConfig } from \"@firecms/core\";\n\nexport const supportedFieldsIds: PropertyConfigId[] = [\n \"text_field\",\n \"multiline\",\n \"markdown\",\n \"url\",\n \"email\",\n \"select\",\n \"multi_select\",\n \"number_input\",\n \"number_select\",\n \"multi_number_select\",\n \"file_upload\",\n \"multi_file_upload\",\n \"reference\",\n \"multi_references\",\n \"switch\",\n \"date_time\",\n \"group\",\n \"key_value\",\n \"repeat\",\n \"block\"\n];\n\nexport const supportedFields: Record<string, PropertyConfig> = Object.entries(DEFAULT_FIELD_CONFIGS)\n .filter(([id]) => supportedFieldsIds.includes(id as PropertyConfigId))\n .map(([id, config]) => ({ [id]: config }))\n .reduce((a, b) => ({ ...a, ...b }), {});\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\n\nimport { CloudUploadIcon, DebouncedTextField, ExpandablePanel, TextField, Typography } from \"@firecms/ui\";\n\nexport function MarkdownPropertyField({\n disabled,\n showErrors\n }: {\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex();\n\n const baseStoragePath = \"storage\";\n\n const metadata = `${baseStoragePath}.metadata`;\n const fileName = `${baseStoragePath}.fileName`;\n const maxSize = `${baseStoragePath}.maxSize`;\n const storagePath = `${baseStoragePath}.storagePath`;\n\n const fileNameValue = getIn(values, fileName) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\n const maxSizeValue = getIn(values, maxSize);\n\n const hasFilenameCallback = typeof fileNameValue === \"function\";\n const hasStoragePathCallback = typeof storagePathValue === \"function\";\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <ExpandablePanel\n title={\n <div className=\"flex flex-row text-surface-500\">\n <CloudUploadIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n File upload config\n </Typography>\n </div>\n }>\n\n <div className={\"grid grid-cols-12 gap-2 p-4\"}>\n\n\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={\"File name\"}\n size={\"small\"}\n disabled={hasFilenameCallback || disabled}\n value={hasFilenameCallback ? \"-\" : fileNameValue}\n />\n </div>\n <div className={\"col-span-12\"}>\n <Field name={storagePath}\n as={DebouncedTextField}\n label={\"Storage path\"}\n disabled={hasStoragePathCallback || disabled}\n size={\"small\"}\n value={hasStoragePathCallback ? \"-\" : storagePathValue}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n <p>You can use the following placeholders in\n the file name\n and storage path values:</p>\n <ul>\n <li>{\"{file} - Full name of the uploaded file\"}</li>\n <li>{\"{file.name} - Name of the uploaded file without extension\"}</li>\n <li>{\"{file.ext} - Extension of the uploaded file\"}</li>\n <li>{\"{entityId} - ID of the entity\"}</li>\n <li>{\"{propertyKey} - ID of this field\"}</li>\n <li>{\"{path} - Path of this entity\"}</li>\n <li>{\"{rand} - Random value used to avoid name collisions\"}</li>\n </ul>\n </Typography>\n\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n When using Markdown, the URL of the uploaded files are always saved in the text value\n (not\n the path).\n </Typography>\n </div>\n\n <div className={\"col-span-12\"}>\n <DebouncedTextField name={maxSize}\n type={\"number\"}\n label={\"Max size (in bytes)\"}\n size={\"small\"}\n value={maxSizeValue !== undefined && maxSizeValue !== null ? maxSizeValue.toString() : \"\"}\n onChange={(e) => {\n const value = e.target.value;\n if (value === \"\") setFieldValue(maxSize, undefined);\n else setFieldValue(maxSize, parseInt(value));\n }}\n />\n </div>\n\n </div>\n </ExpandablePanel>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React, { useDeferredValue, useEffect, useRef, useState } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { Formex, FormexController, getIn, useCreateFormex } from \"@firecms/formex\";\nimport {\n ConfirmationDialog,\n DEFAULT_FIELD_CONFIGS,\n getFieldConfig,\n getFieldId,\n isEmptyObject,\n isPropertyBuilder,\n isValidRegExp,\n mergeDeep,\n Property,\n PropertyConfig,\n PropertyConfigBadge,\n PropertyConfigId,\n} from \"@firecms/core\";\nimport {\n Button,\n Card,\n cls,\n DeleteIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundMixin,\n IconButton,\n InfoLabel,\n Tooltip,\n Typography,\n WarningIcon\n} from \"@firecms/ui\";\nimport { EnumPropertyField } from \"./properties/EnumPropertyField\";\nimport { StoragePropertyField } from \"./properties/StoragePropertyField\";\nimport { MapPropertyField } from \"./properties/MapPropertyField\";\nimport { RepeatPropertyField } from \"./properties/RepeatPropertyField\";\nimport { CommonPropertyFields } from \"./properties/CommonPropertyFields\";\nimport { StringPropertyField } from \"./properties/StringPropertyField\";\nimport { BooleanPropertyField } from \"./properties/BooleanPropertyField\";\nimport { BlockPropertyField } from \"./properties/BlockPropertyField\";\nimport { NumberPropertyField } from \"./properties/NumberPropertyField\";\nimport { ReferencePropertyField } from \"./properties/ReferencePropertyField\";\nimport { DateTimePropertyField } from \"./properties/DateTimePropertyField\";\nimport { AdvancedPropertyValidation } from \"./properties/advanced/AdvancedPropertyValidation\";\nimport { editableProperty } from \"../../utils/entities\";\nimport { KeyValuePropertyField } from \"./properties/KeyValuePropertyField\";\nimport { updatePropertyFromWidget } from \"./utils/update_property_for_widget\";\nimport { UrlPropertyField } from \"./properties/UrlPropertyField\";\nimport { supportedFields } from \"./utils/supported_fields\";\nimport { MarkdownPropertyField } from \"./properties/MarkdownPropertyField\";\n\nexport type PropertyWithId = Property & {\n id?: string\n};\n\nexport type OnPropertyChangedParams = {\n id?: string,\n property: Property,\n namespace?: string,\n previousId?: string\n};\n\nexport type PropertyFormProps = {\n includeIdAndName?: boolean;\n existingProperty: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n inArray: boolean;\n propertyKey?: string;\n propertyNamespace?: string;\n property?: Property;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onPropertyChangedImmediate?: boolean;\n onDismiss?: () => void;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n initialErrors?: Record<string, any>;\n existingPropertyKeys?: string[];\n forceShowErrors?: boolean;\n allowDataInference: boolean;\n getData?: () => Promise<object[]>;\n getController?: (formex: FormexController<PropertyWithId>) => void;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport const PropertyForm = React.memo(\n function PropertyForm(props: PropertyFormProps) {\n\n const {\n includeIdAndName = true,\n autoOpenTypeSelect,\n existingProperty,\n autoUpdateId,\n inArray,\n propertyKey,\n existingPropertyKeys,\n propertyNamespace,\n property,\n onPropertyChanged,\n onPropertyChangedImmediate = true,\n onDismiss,\n onDelete,\n onError,\n initialErrors,\n forceShowErrors,\n allowDataInference,\n getController,\n getData,\n propertyConfigs,\n collectionEditable\n } = props;\n\n const initialValue: PropertyWithId = {\n id: \"\",\n name: \"\"\n } as PropertyWithId;\n\n const disabled = (Boolean(property && !editableProperty(property)) && !collectionEditable);\n\n const lastSubmittedProperty = useRef<OnPropertyChangedParams | undefined>(property ? {\n id: propertyKey,\n previousId: propertyKey,\n property\n } : undefined);\n\n const doOnPropertyChanged = ({\n id,\n property\n }: OnPropertyChangedParams) => {\n const params = {\n id,\n previousId: lastSubmittedProperty.current?.id,\n property,\n namespace: propertyNamespace\n };\n lastSubmittedProperty.current = params;\n onPropertyChanged?.(params);\n };\n\n const formexController = useCreateFormex<PropertyWithId>({\n debugId: \"PROPERTY_FORM\",\n initialValues: property\n ? { id: propertyKey, ...property } as PropertyWithId\n : initialValue,\n initialErrors,\n validateOnChange: true,\n validateOnInitialRender: true,\n onSubmit: (newPropertyWithId, controller) => {\n console.debug(\"onSubmit\", newPropertyWithId);\n const {\n id,\n ...property\n } = newPropertyWithId;\n doOnPropertyChanged({\n id,\n property: {\n ...property,\n editable: property.editable ?? true\n }\n });\n if (!existingProperty)\n controller.resetForm({ values: initialValue });\n },\n validation: (values) => {\n const errors: Record<string, any> = {};\n if (includeIdAndName) {\n if (!values.name) {\n errors.name = \"Required\";\n } else {\n const nameError = validateName(values.name);\n if (nameError)\n errors.name = nameError;\n }\n if (!values.id) {\n errors.id = \"Required\";\n } else {\n const idError = validateId(values.id, existingPropertyKeys);\n if (idError)\n errors.id = idError;\n }\n }\n\n if (values.dataType === \"string\") {\n if (values.validation?.matches && !isValidRegExp(values.validation?.matches.toString())) {\n errors.validation = {\n matches: \"Invalid regular expression\"\n }\n }\n }\n if (values.dataType === \"reference\" && !values.path) {\n errors.path = \"You must specify a target collection for the field\";\n }\n if (values.propertyConfig === \"repeat\") {\n if (!(values as any).of) {\n errors.of = \"You need to specify a repeat field\";\n }\n }\n if (values.propertyConfig === \"block\") {\n if (!(values as any).oneOf) {\n errors.oneOf = \"You need to specify the properties of this block\";\n }\n }\n return errors;\n }\n });\n\n useEffect(() => {\n getController?.(formexController);\n }, [formexController, getController]);\n\n return <Formex value={formexController}>\n <PropertyEditFormFields\n onPropertyChanged={onPropertyChangedImmediate\n ? doOnPropertyChanged\n : undefined}\n onDelete={onDelete}\n includeIdAndTitle={includeIdAndName}\n propertyNamespace={propertyNamespace}\n onError={onError}\n onDismiss={onDismiss}\n showErrors={forceShowErrors || formexController.submitCount > 0}\n existing={existingProperty}\n autoUpdateId={autoUpdateId}\n inArray={inArray}\n autoOpenTypeSelect={autoOpenTypeSelect}\n disabled={disabled}\n getData={getData}\n allowDataInference={allowDataInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n {...formexController}/>\n </Formex>;\n }, (a, b) =>\n a.getData === b.getData &&\n a.propertyKey === b.propertyKey &&\n a.propertyNamespace === b.propertyNamespace &&\n a.includeIdAndName === b.includeIdAndName &&\n a.autoOpenTypeSelect === b.autoOpenTypeSelect &&\n a.autoUpdateId === b.autoUpdateId &&\n a.existingPropertyKeys === b.existingPropertyKeys &&\n a.existingProperty === b.existingProperty\n);\n\nexport function PropertyFormDialog({\n open,\n onCancel,\n onOkClicked,\n onPropertyChanged,\n getData,\n collectionEditable,\n ...formProps\n }: PropertyFormProps & {\n open?: boolean;\n onOkClicked?: () => void;\n onCancel?: () => void;\n}) {\n const formexRef = useRef<FormexController<PropertyWithId>>();\n const getController = (helpers: FormexController<PropertyWithId>) => {\n formexRef.current = helpers;\n };\n\n return <Dialog\n open={open ?? false}\n maxWidth={\"xl\"}\n fullWidth={true}\n >\n <form noValidate={true}\n autoComplete={\"off\"}\n onSubmit={(e) => {\n e.preventDefault();\n e.stopPropagation();\n formexRef.current?.handleSubmit(e)\n }}>\n <DialogTitle hidden>Property edit view</DialogTitle>\n <DialogContent>\n\n <PropertyForm {...formProps}\n onDismiss={onCancel}\n onPropertyChanged={(params) => {\n onPropertyChanged?.(params);\n onOkClicked?.();\n }}\n collectionEditable={collectionEditable}\n onPropertyChangedImmediate={false}\n getController={getController}\n getData={getData}\n />\n </DialogContent>\n\n <DialogActions>\n\n {onCancel && <Button\n variant={\"text\"}\n onClick={() => {\n onCancel();\n formexRef.current?.resetForm();\n }}>\n Cancel\n </Button>}\n\n <Button variant=\"outlined\"\n type={\"submit\"}\n color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n </form>\n </Dialog>;\n\n}\n\nfunction PropertyEditFormFields({\n values,\n errors,\n setValues,\n existing,\n autoUpdateId = false,\n autoOpenTypeSelect,\n includeIdAndTitle,\n onPropertyChanged,\n onDelete,\n propertyNamespace,\n onDismiss,\n onError,\n showErrors,\n disabled,\n inArray,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n includeIdAndTitle?: boolean;\n existing: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n propertyNamespace?: string;\n onDismiss?: () => void;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n showErrors: boolean;\n inArray: boolean;\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n} & FormexController<PropertyWithId>) {\n\n const [selectOpen, setSelectOpen] = useState(autoOpenTypeSelect);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [selectedFieldConfigId, setSelectedFieldConfigId] = useState<string | undefined>(values?.dataType ? getFieldId(values) : undefined);\n\n const deferredValues = useDeferredValue(values);\n const nameFieldRef = useRef<HTMLInputElement>(null);\n\n const lastSubmittedProperty = useRef<object>(values);\n\n const selectedWidgetError = showErrors && getIn(errors, \"selectedWidget\");\n\n useEffect(() => {\n if (onPropertyChanged) {\n if ((!includeIdAndTitle || deferredValues.id)) {\n const {\n id,\n ...property\n } = deferredValues;\n if (!equal(deferredValues, lastSubmittedProperty.current)) {\n onPropertyChanged({\n id,\n property,\n namespace: propertyNamespace\n });\n lastSubmittedProperty.current = deferredValues;\n }\n }\n }\n }, [deferredValues, includeIdAndTitle, propertyNamespace]);\n\n useEffect(() => {\n if (values?.id && onError && !isEmptyObject(errors)) {\n onError(values?.id, propertyNamespace, errors);\n }\n }, [errors, propertyNamespace, values?.id]);\n\n const onWidgetSelectChanged = (newSelectedWidgetId: PropertyConfigId) => {\n setSelectedFieldConfigId(newSelectedWidgetId);\n setValues(updatePropertyFromWidget(values, newSelectedWidgetId, propertyConfigs));\n // Ugly hack to autofocus the name field\n setTimeout(() => {\n nameFieldRef.current?.focus();\n }, 0);\n };\n\n let childComponent;\n if (selectedFieldConfigId === \"text_field\" ||\n selectedFieldConfigId === \"multiline\" ||\n selectedFieldConfigId === \"email\") {\n childComponent =\n <StringPropertyField widgetId={selectedFieldConfigId}\n disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"url\") {\n childComponent =\n <UrlPropertyField disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"markdown\") {\n childComponent =\n <MarkdownPropertyField disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"select\" ||\n selectedFieldConfigId === \"number_select\") {\n childComponent = <EnumPropertyField\n multiselect={false}\n allowDataInference={allowDataInference}\n updateIds={!existing}\n disabled={disabled}\n getData={getData}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"multi_select\" ||\n selectedFieldConfigId === \"multi_number_select\") {\n childComponent = <EnumPropertyField\n multiselect={true}\n updateIds={!existing}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"switch\") {\n childComponent = <BooleanPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"number_input\") {\n childComponent = <NumberPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"group\") {\n childComponent =\n <MapPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"block\") {\n childComponent =\n <BlockPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"reference\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"date_time\") {\n childComponent = <DateTimePropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_references\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"repeat\") {\n childComponent =\n <RepeatPropertyField showErrors={showErrors}\n existing={existing}\n getData={getData}\n allowDataInference={allowDataInference}\n disabled={disabled}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"key_value\") {\n childComponent =\n <KeyValuePropertyField disabled={disabled}/>;\n } else {\n childComponent = null;\n }\n\n return (\n <>\n {disabled && <InfoLabel mode={\"warn\"}>\n <Typography>This property can't be edited</Typography>\n <Typography variant={\"caption\"}>\n You may not have permission to\n edit it or it is defined in code with no <code>editable</code> flag\n </Typography>\n </InfoLabel>}\n\n <div className=\"flex mt-2 justify-between\">\n <div className={\"w-full flex flex-col gap-2\"}>\n <WidgetSelectView\n initialProperty={values}\n value={selectedFieldConfigId as PropertyConfigId}\n onValueChange={(value) => onWidgetSelectChanged(value as PropertyConfigId)}\n open={selectOpen}\n onOpenChange={(open, hasValue) => {\n if (!hasValue) {\n onDismiss?.();\n }\n setSelectOpen(open);\n }}\n disabled={disabled}\n showError={Boolean(selectedWidgetError)}\n existing={existing}\n propertyConfigs={propertyConfigs}\n inArray={inArray}/>\n\n {selectedWidgetError &&\n <Typography variant=\"caption\"\n className={\"ml-3.5\"}\n color={\"error\"}>Required</Typography>}\n\n {/*<Typography variant=\"caption\" className={\"ml-3.5\"}>Define your own custom properties and*/}\n {/* components</Typography>*/}\n\n </div>\n\n {onDelete && values?.id &&\n <IconButton\n variant={\"ghost\"}\n className=\"m-4\"\n disabled={disabled}\n onClick={() => setDeleteDialogOpen(true)}>\n <DeleteIcon/>\n </IconButton>}\n </div>\n\n <div className={\"grid grid-cols-12 gap-y-12 mt-8 mb-8\"}>\n {includeIdAndTitle &&\n <CommonPropertyFields showErrors={showErrors}\n disabledId={existing}\n isNewProperty={!existing}\n disabled={disabled}\n autoUpdateId={autoUpdateId}\n ref={nameFieldRef}/>}\n\n {childComponent}\n\n <div className={\"col-span-12\"}>\n <AdvancedPropertyValidation disabled={disabled}/>\n </div>\n </div>\n\n {onDelete &&\n <ConfirmationDialog open={deleteDialogOpen}\n onAccept={() => onDelete(values?.id, propertyNamespace)}\n onCancel={() => setDeleteDialogOpen(false)}\n title={<div>Delete this property?</div>}\n body={\n <div> This will <b>not delete any\n data</b>, only modify the\n collection.</div>\n }/>}\n\n </>\n );\n}\n\nconst idRegEx = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\nfunction validateId(value?: string, existingPropertyKeys?: string[]) {\n\n let error;\n if (!value) {\n error = \"You must specify an id for the field\";\n }\n if (value && !value.match(idRegEx)) {\n error = \"The id can only contain letters, numbers and underscores (_), and not start with a number\";\n }\n if (value && existingPropertyKeys && existingPropertyKeys.includes(value)) {\n error = \"There is another field with this ID already\";\n }\n return error;\n}\n\nfunction validateName(value: string) {\n let error;\n if (!value) {\n error = \"You must specify a title for the field\";\n }\n return error;\n}\n\nconst WIDGET_TYPE_MAP: Record<PropertyConfigId, string> = {\n text_field: \"Text\",\n multiline: \"Text\",\n markdown: \"Text\",\n url: \"Text\",\n email: \"Text\",\n switch: \"Boolean\",\n select: \"Select\",\n multi_select: \"Select\",\n number_input: \"Number\",\n number_select: \"Select\",\n multi_number_select: \"Select\",\n file_upload: \"File\",\n multi_file_upload: \"File\",\n reference: \"Reference\",\n multi_references: \"Reference\",\n date_time: \"Date\",\n group: \"Group\",\n key_value: \"Group\",\n repeat: \"Array\",\n custom_array: \"Array\",\n block: \"Group\"\n};\n\nfunction WidgetSelectView({\n initialProperty,\n value,\n onValueChange,\n open,\n onOpenChange,\n disabled,\n showError,\n existing,\n propertyConfigs,\n inArray\n }: {\n initialProperty?: PropertyWithId,\n value?: PropertyConfigId,\n onValueChange: (value: string) => void,\n showError: boolean,\n open: boolean,\n onOpenChange: (open: boolean, hasValue: boolean) => void,\n disabled: boolean,\n existing: boolean,\n propertyConfigs: Record<string, PropertyConfig>,\n inArray?: boolean\n}) {\n\n const allSupportedFields = Object.entries(supportedFields).concat(Object.entries(propertyConfigs));\n\n const displayedWidgets = (inArray\n ? allSupportedFields.filter(([_, propertyConfig]) => !isPropertyBuilder(propertyConfig.property) && propertyConfig.property?.dataType !== \"array\")\n : allSupportedFields)\n .map(([key, propertyConfig]) => ({\n [key]: propertyConfig\n }))\n .reduce((a, b) => {\n return {\n ...a,\n ...b\n }\n }, {});\n\n const key = value;\n const propertyConfig = key ? (DEFAULT_FIELD_CONFIGS[key] ?? propertyConfigs[key]) : undefined;\n const baseProperty = propertyConfig?.property;\n const baseFieldConfig = baseProperty && !isPropertyBuilder(baseProperty) ? getFieldConfig(baseProperty, propertyConfigs) : undefined;\n const computedFieldConfig = baseFieldConfig && propertyConfig ? mergeDeep(baseFieldConfig, propertyConfig) : propertyConfig;\n\n const groups: string[] = [...new Set(Object.keys(displayedWidgets).map(key => {\n const group = WIDGET_TYPE_MAP[key as PropertyConfigId];\n if (group) {\n return group;\n }\n return \"Custom/Other\"\n }))];\n\n return <>\n <div\n onClick={() => {\n if (!disabled) {\n onOpenChange(!open, Boolean(value));\n }\n }}\n className={cls(\n \"select-none rounded-md text-sm p-4\",\n fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n \"relative flex items-center\",\n )}>\n {!value && <em>Select a property widget</em>}\n {value && computedFieldConfig && <div\n className={cls(\n \"flex items-center\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={computedFieldConfig}/>\n </div>\n <div className={\"flex flex-col items-start text-base text-left\"}>\n <div>{computedFieldConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n {computedFieldConfig.description}\n </Typography>\n </div>\n </div>}\n </div>\n <Dialog open={open}\n onOpenChange={(open) => onOpenChange(open, Boolean(value))}\n maxWidth={\"4xl\"}>\n <DialogTitle>\n Select a property widget\n </DialogTitle>\n <DialogContent>\n <div>\n {groups.map(group => {\n return <div key={group} className={\"mt-4\"}>\n <Typography variant={\"label\"}>{group}</Typography>\n <div className={\"grid grid-cols-1 md:grid-cols-2 gap-x-4 gap-y-2 mt-4\"}>\n {Object.entries(displayedWidgets).map(([key, propertyConfig]) => {\n const groupKey = WIDGET_TYPE_MAP[key as PropertyConfigId];\n if (groupKey === group) {\n return <WidgetSelectViewItem\n key={key}\n initialProperty={initialProperty}\n onClick={() => {\n onValueChange(key);\n onOpenChange(false, true);\n }}\n propertyConfig={propertyConfig}\n existing={existing}/>;\n }\n return null;\n })}\n </div>\n </div>;\n })}\n {/*{displayedWidgets.map(([key, propertyConfig]) => {*/}\n {/* return <WidgetSelectViewItem*/}\n {/* key={key}*/}\n {/* initialProperty={initialProperty}*/}\n {/* onClick={() => {*/}\n {/* onValueChange(key);*/}\n {/* onOpenChange(false);*/}\n {/* }}*/}\n {/* propertyConfig={propertyConfig}*/}\n {/* existing={existing}/>;*/}\n {/*})}*/}\n </div>\n </DialogContent>\n </Dialog>\n </>;\n}\n\nexport interface PropertySelectItemProps {\n onClick?: () => void;\n initialProperty?: PropertyWithId;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function WidgetSelectViewItem({\n onClick,\n initialProperty,\n // optionDisabled,\n propertyConfig,\n existing\n }: PropertySelectItemProps) {\n const baseProperty = propertyConfig.property;\n const shouldWarnChangingDataType = existing && !isPropertyBuilder(baseProperty) && baseProperty.dataType !== initialProperty?.dataType;\n\n return <Card\n onClick={onClick}\n className={\"flex flex-row items-center px-4 py-2\"}>\n <div\n className={cls(\n \"flex flex-row items-center text-base min-h-[48px]\",\n )}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig} disabled={shouldWarnChangingDataType}/>\n </div>\n <div>\n <div className={\"flex flex-row gap-2 items-center\"}>\n {shouldWarnChangingDataType && <Tooltip\n title={\"This widget uses a different data type than the initially selected widget. This can cause errors with existing data.\"}>\n <WarningIcon size=\"smallest\" className={\"w-4\"}/>\n </Tooltip>}\n <Typography\n color={shouldWarnChangingDataType ? \"secondary\" : undefined}>{propertyConfig.name}</Typography>\n </div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"max-w-sm\"}>\n {propertyConfig.description}\n </Typography>\n\n </div>\n </div>\n </Card>\n}\n","export function camelCase(str: string): string {\n if (!str) return \"\";\n if (str.length === 1) return str.toLowerCase();\n\n // Split by hyphens, underscores, or spaces and filter out empty strings\n const parts = str.split(/[-_ ]+/).filter(Boolean);\n\n if (parts.length === 0) return \"\";\n\n // Start with first part in lowercase\n return parts[0].toLowerCase() +\n // Transform remaining parts to have first letter uppercase\n parts.slice(1)\n .map(part => part.charAt(0).toUpperCase() + part.substring(1).toLowerCase())\n .join('');\n}\n","import { EntityCollection, isEmptyObject, useSnackbarController } from \"@firecms/core\";\nimport { Button, ContentCopyIcon, Dialog, DialogActions, DialogContent, DialogTitle, Typography, } from \"@firecms/ui\";\nimport React from \"react\";\nimport JSON5 from \"json5\";\nimport { Highlight, themes } from \"prism-react-renderer\"\nimport { camelCase } from \"./utils/strings\";\nimport { clone } from \"@firecms/formex\";\n\nexport function GetCodeDialog({\n collection,\n onOpenChange,\n open\n }: { onOpenChange: (open: boolean) => void, collection: any, open: any }) {\n\n const snackbarController = useSnackbarController();\n\n const code = collection\n ? \"import { EntityCollection } from \\\"@firecms/core\\\";\\n\\nconst \" + (collection?.name ? camelCase(collection.name) : \"my\") + \"Collection:EntityCollection = \" + JSON5.stringify(collectionToCode({ ...collection }), null, \"\\t\")\n : \"No collection selected\";\n return <Dialog open={open}\n onOpenChange={onOpenChange}\n maxWidth={\"4xl\"}>\n <DialogTitle variant={\"h6\"}>Code for {collection.name}</DialogTitle>\n <DialogContent>\n\n <Typography variant={\"body2\"} className={\"my-4 mb-8\"}>\n If you want to customise the collection in code, you can add this collection code to your CMS\n app configuration.\n More info in the <a\n rel=\"noopener noreferrer\"\n href={\"https://firecms.co/docs/cloud/quickstart\"}>docs</a>.\n </Typography>\n <Highlight\n theme={themes.vsDark}\n code={code}\n language=\"typescript\"\n >\n {({\n className,\n style,\n tokens,\n getLineProps,\n getTokenProps\n }) => (\n <pre style={style} className={\"p-4 rounded text-sm\"}>\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n\n </DialogContent>\n <DialogActions>\n <Button\n variant={\"text\"}\n size={\"small\"}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n snackbarController.open({\n type: \"success\",\n message: `Copied`\n })\n return navigator.clipboard.writeText(code);\n }}>\n <ContentCopyIcon size={\"small\"}/>\n Copy to clipboard\n </Button>\n <Button onClick={() => onOpenChange(false)}>Close</Button>\n </DialogActions>\n </Dialog>;\n}\n\nfunction collectionToCode(collection: EntityCollection): object {\n\n const propertyCleanup = (value: any): any => {\n if (value === undefined || value === null) {\n return value;\n }\n const valueCopy = clone(value);\n if (typeof valueCopy === \"function\") {\n return valueCopy;\n }\n if (Array.isArray(valueCopy)) {\n return valueCopy.map((v: any) => propertyCleanup(v));\n }\n if (typeof valueCopy === \"object\") {\n if (valueCopy === null)\n return valueCopy;\n Object.keys(valueCopy).forEach((key) => {\n if (!isEmptyObject(valueCopy)) {\n const childRes = propertyCleanup(valueCopy[key]);\n if (childRes !== null && childRes !== undefined && childRes !== false && !isEmptyObject(childRes)) {\n valueCopy[key] = childRes;\n } else {\n delete valueCopy[key];\n }\n }\n });\n delete valueCopy.fromBuilder;\n delete valueCopy.resolved;\n delete valueCopy.propertiesOrder;\n delete valueCopy.propertyConfig;\n delete valueCopy.resolvedProperties;\n delete valueCopy.editable;\n\n }\n\n return valueCopy;\n }\n\n return {\n id: collection.id,\n name: collection.name,\n singularName: collection.singularName,\n path: collection.path,\n description: collection.description,\n editable: true,\n collectionGroup: collection.collectionGroup,\n icon: collection.icon,\n group: collection.group,\n customId: collection.customId,\n initialFilter: collection.initialFilter,\n initialSort: collection.initialSort,\n properties: Object.entries({\n ...(collection.properties ?? {})\n })\n .map(([key, value]) => ({\n [key]: propertyCleanup(value)\n }))\n .reduce((a, b) => ({ ...a, ...b }), {}),\n subcollections: (collection.subcollections ?? []).map(collectionToCode)\n }\n\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport {\n EntityCollection,\n ErrorBoundary,\n isPropertyBuilder,\n makePropertiesEditable,\n Properties,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n useLargeLayout,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n AutorenewIcon,\n Button,\n CircularProgress,\n cls,\n CodeIcon,\n DebouncedTextField,\n defaultBorderMixin,\n IconButton,\n Paper,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\n\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"./util\";\nimport { OnPropertyChangedParams, PropertyForm, PropertyFormDialog } from \"./PropertyEditView\";\nimport { PropertyTree } from \"./PropertyTree\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { GetCodeDialog } from \"./GetCodeDialog\";\n\ntype CollectionEditorFormProps = {\n showErrors: boolean;\n isNewCollection: boolean;\n propertyErrorsRef?: React.MutableRefObject<any>;\n onPropertyError: (propertyKey: string, namespace: string | undefined, error?: Record<string, any>) => void;\n setDirty?: (dirty: boolean) => void;\n reservedGroups?: string[];\n extraIcon: React.ReactNode;\n getUser?: (uid: string) => User | null;\n getData?: () => Promise<object[]>;\n doCollectionInference: (collection: PersistedCollection) => Promise<Partial<EntityCollection> | null> | undefined;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport function CollectionPropertiesEditorForm({\n showErrors,\n isNewCollection,\n propertyErrorsRef,\n onPropertyError,\n setDirty,\n reservedGroups,\n extraIcon,\n getUser,\n getData,\n doCollectionInference,\n propertyConfigs,\n collectionEditable\n }: CollectionEditorFormProps) {\n\n const {\n values,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n errors,\n dirty\n } = useFormex<PersistedCollection>();\n\n const snackbarController = useSnackbarController();\n\n const largeLayout = useLargeLayout();\n const asDialog = !largeLayout\n\n // index of the selected property within the namespace\n const [selectedPropertyIndex, setSelectedPropertyIndex] = useState<number | undefined>();\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n const [codeDialogOpen, setCodeDialogOpen] = useState<boolean>(false);\n\n const [inferringProperties, setInferringProperties] = useState<boolean>(false);\n\n const [newPropertyDialogOpen, setNewPropertyDialogOpen] = useState<boolean>(false);\n const [inferredPropertyKeys, setInferredPropertyKeys] = useState<string[]>([]);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n useEffect(() => {\n if (setDirty)\n setDirty(dirty);\n }, [dirty]);\n\n const inferPropertiesFromData = doCollectionInference\n ? (): void => {\n if (!doCollectionInference)\n return;\n\n setInferringProperties(true);\n // @ts-ignore\n doCollectionInference(values)\n .then((newCollection) => {\n\n if (newCollection)\n makePropertiesEditable(newCollection.properties as Properties);\n\n if (!newCollection) {\n snackbarController.open({\n type: \"error\",\n message: \"Could not infer properties from data\"\n });\n return;\n }\n // find properties in the new collection, not present in the current one\n const newPropertyKeys = (newCollection.properties ? Object.keys(newCollection.properties) : [])\n .filter((propertyKey) => !values.properties[propertyKey]);\n if (newPropertyKeys.length === 0) {\n snackbarController.open({\n type: \"info\",\n message: \"No new properties found in existing data\"\n });\n return;\n }\n // add them to the current collection\n const updatedProperties = {\n ...newPropertyKeys.reduce((acc, propertyKey) => {\n acc[propertyKey] = (newCollection.properties ?? {})[propertyKey];\n return acc;\n }, {} as {\n [key: string]: PropertyOrBuilder\n }),\n ...values.properties\n };\n const updatedPropertiesOrder = [\n ...newPropertyKeys,\n ...(values.propertiesOrder ?? [])\n ];\n setFieldValue(\"properties\", updatedProperties, false);\n\n updatePropertiesOrder(updatedPropertiesOrder);\n\n setInferredPropertyKeys(newPropertyKeys);\n })\n .finally(() => {\n setInferringProperties(false);\n })\n }\n : undefined;\n\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"] ?? getIn(values, namespaceToPropertiesOrderPath());\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n };\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(idToPropertiesPath(fullId), undefined, false);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n if (currentPropertiesOrder) {\n const newPropertiesOrder = currentPropertiesOrder.filter((p) => p !== propertyKey);\n updatePropertiesOrder(newPropertiesOrder, namespace);\n }\n\n setNewPropertyDialogOpen(false);\n\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n const onPropertyCreated = ({\n id,\n property\n }: {\n id?: string,\n property: Property\n }) => {\n if (!id) {\n throw Error(\"Need to include an ID when creating a new property\")\n }\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties)), id];\n updatePropertiesOrder(newPropertiesOrder);\n\n setNewPropertyDialogOpen(false);\n if (largeLayout) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n if (id) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n console.debug(\"onPropertyChanged\", {\n id,\n property,\n previousId,\n namespace,\n propertyPath\n })\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n\n };\n\n const onPropertyErrorInternal = (id: string, namespace?: string, error?: Record<string, any>) => {\n const propertyPath = id ? getFullId(id, namespace) : undefined;\n console.debug(\"onPropertyErrorInternal\", {\n id,\n namespace,\n error,\n propertyPath\n });\n if (propertyPath) {\n const hasError = error && Object.keys(error).length > 0;\n onPropertyError(id, namespace, hasError ? error : undefined);\n setFieldError(idToPropertiesPath(propertyPath), hasError ? \"Property error\" : undefined);\n }\n }\n\n const closePropertyDialog = () => {\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n };\n\n const initialErrors = selectedPropertyKey && propertyErrorsRef?.current?.properties ? propertyErrorsRef.current.properties[selectedPropertyKey] : undefined;\n\n const emptyCollection = values?.propertiesOrder === undefined || values.propertiesOrder.length === 0;\n\n const usedPropertiesOrder = (values.propertiesOrder\n ? values.propertiesOrder\n : Object.keys(values.properties)) as string[];\n\n const owner = useMemo(() => values.ownerId && getUser ? getUser(values.ownerId) : null, [getUser, values.ownerId]);\n\n const onPropertyClick = (propertyKey: string, namespace?: string) => {\n console.debug(\"CollectionEditor: onPropertyClick\", {\n propertyKey,\n namespace\n });\n setSelectedPropertyIndex(usedPropertiesOrder.indexOf(propertyKey));\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n };\n\n const body = (\n <div className={\"grid grid-cols-12 gap-2 h-full bg-white dark:bg-surface-950\"}>\n <div className={cls(\n \"bg-surface-50 dark:bg-surface-900\",\n \"p-4 md:p-8 pb-20 md:pb-20\",\n \"col-span-12 lg:col-span-5 h-full overflow-auto\",\n !asDialog && \"border-r \" + defaultBorderMixin\n )}>\n\n <div className=\"flex my-2\">\n\n <div className=\"flex-grow mb-4\">\n\n <Field\n name={\"name\"}\n as={DebouncedTextField}\n invisible={true}\n className=\"-ml-1\"\n inputClassName=\"text-2xl font-headers\"\n placeholder={\"Collection name\"}\n size={\"small\"}\n required\n error={Boolean(errors?.name)}/>\n\n {owner &&\n <Typography variant={\"body2\"}\n className={\"ml-2\"}\n color={\"secondary\"}>\n Created by {owner.displayName}\n </Typography>}\n </div>\n\n {extraIcon && <div className=\"ml-4\">\n {extraIcon}\n </div>}\n\n <div className=\"ml-1 mt-2 flex flex-row gap-2\">\n <Tooltip title={\"Get the code for this collection\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={() => setCodeDialogOpen(true)}>\n <CodeIcon/>\n </IconButton>\n </Tooltip>\n {inferPropertiesFromData && <Tooltip title={\"Add new properties based on data\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={inferPropertiesFromData}>\n {inferringProperties ? <CircularProgress size={\"small\"}/> : <AutorenewIcon/>}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}\n asChild={true}>\n <Button\n variant={\"outlined\"}\n onClick={() => setNewPropertyDialogOpen(true)}>\n <AddIcon/>\n </Button>\n </Tooltip>\n </div>\n </div>\n\n <ErrorBoundary>\n <PropertyTree\n className={\"pl-8\"}\n inferredPropertyKeys={inferredPropertyKeys}\n selectedPropertyKey={selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined}\n properties={values.properties}\n additionalFields={values.additionalFields}\n propertiesOrder={usedPropertiesOrder}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={isNewCollection ? deleteProperty : undefined}\n collectionEditable={collectionEditable}\n errors={errors}/>\n </ErrorBoundary>\n\n <Button className={\"mt-8 w-full\"}\n color=\"primary\"\n variant={\"outlined\"}\n size={\"large\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}>\n Add new property\n </Button>\n </div>\n\n {!asDialog &&\n <div className={\"col-span-12 lg:col-span-7 p-4 md:py-8 md:px-4 h-full overflow-auto pb-20 md:pb-20\"}>\n <div\n className=\"sticky top-8 min-h-full w-full flex flex-col justify-center\">\n\n {selectedPropertyFullId &&\n selectedProperty &&\n !isPropertyBuilder(selectedProperty) &&\n <PropertyForm\n inArray={false}\n key={`edit_view_${selectedPropertyIndex}`}\n existingProperty={!isNewCollection}\n autoUpdateId={false}\n allowDataInference={!isNewCollection}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n />}\n\n {!selectedProperty &&\n <div className={\"w-full flex flex-col items-center justify-center h-full gap-4\"}>\n <Typography variant={\"label\"} className=\"\">\n {emptyCollection\n ? \"Now you can add your first property\"\n : \"Select a property to edit it\"}\n </Typography>\n <Button variant={\"outlined\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n >\n <AddIcon/>\n Add new property\n </Button>\n </div>}\n\n {selectedProperty && isPropertyBuilder(selectedProperty) &&\n <Typography variant={\"label\"} className=\"flex items-center justify-center\">\n {\"This property is defined as a property builder in code\"}\n </Typography>}\n </div>\n </div>}\n\n {asDialog && <PropertyFormDialog\n inArray={false}\n open={selectedPropertyIndex !== undefined}\n key={`edit_view_${selectedPropertyIndex}`}\n autoUpdateId={!selectedProperty}\n allowDataInference={!isNewCollection}\n existingProperty={true}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n onCancel={closePropertyDialog}\n onOkClicked={asDialog\n ? closePropertyDialog\n : undefined\n }/>}\n\n </div>);\n\n return (<>\n\n {body}\n\n {/* This is the dialog used for new properties*/}\n <PropertyFormDialog\n inArray={false}\n existingProperty={false}\n autoOpenTypeSelect={true}\n autoUpdateId={true}\n forceShowErrors={showErrors}\n open={newPropertyDialogOpen}\n onCancel={() => setNewPropertyDialogOpen(false)}\n onPropertyChanged={onPropertyCreated}\n getData={getData}\n allowDataInference={!isNewCollection}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n existingPropertyKeys={values.propertiesOrder as string[]}/>\n\n <ErrorBoundary>\n <GetCodeDialog\n collection={values}\n open={codeDialogOpen}\n onOpenChange={setCodeDialogOpen}/>\n </ErrorBoundary>\n </>\n );\n}\n","import React from \"react\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\n\nexport interface UnsavedChangesDialogProps {\n open: boolean;\n body?: React.ReactNode;\n title?: string;\n handleOk: () => void;\n handleCancel: () => void;\n}\n\nexport function UnsavedChangesDialog({\n open,\n handleOk,\n handleCancel,\n body,\n title\n }: UnsavedChangesDialogProps) {\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => open ? handleCancel() : handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n\n <DialogTitle>{title ?? \"Unsaved changes\"}</DialogTitle>\n <DialogContent>\n {body && <Typography>\n {body}\n </Typography>}\n <Typography>\n Are you sure?\n </Typography>\n\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"text\" onClick={handleCancel} autoFocus> Cancel </Button>\n <Button onClick={handleOk}> Ok </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { useCustomizationController } from \"@firecms/core\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\nimport React from \"react\";\n\nexport function EntityCustomViewsSelectDialog({\n open,\n onClose\n }: { open: boolean, onClose: (selectedViewKey?: string) => void }) {\n const {\n entityViews,\n } = useCustomizationController();\n\n return <Dialog\n maxWidth={\"md\"}\n open={open}>\n <DialogTitle>Select custom view</DialogTitle>\n <DialogContent className={\"flex flex-col gap-4\"}>\n {entityViews?.map((view) => {\n return <Button\n key={view.key}\n onClick={() => onClose(view.key)}\n fullWidth\n variant={\"text\"}\n >\n {view.name} ({view.key})\n </Button>;\n })}\n {(entityViews ?? []).length === 0 &&\n <Typography variant={\"body2\"}>\n No custom views defined\n </Typography>\n }\n </DialogContent>\n <DialogActions>\n <Button variant={\"outlined\"} onClick={() => onClose()}>Cancel</Button>\n </DialogActions>\n </Dialog>\n}\n","import React from \"react\";\nimport {\n ConfirmationDialog,\n EntityCollection,\n EntityCustomView,\n resolveEntityView,\n useCustomizationController,\n User\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Alert,\n Button,\n Container,\n DeleteIcon,\n IconButton,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { CollectionEditorDialog } from \"./CollectionEditorDialog\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { EntityCustomViewsSelectDialog } from \"./EntityCustomViewsSelectDialog\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function SubcollectionsEditTab({\n collection,\n parentCollection,\n configController,\n collectionInference,\n getUser,\n parentCollectionIds\n }: {\n collection: PersistedCollection,\n parentCollection?: EntityCollection,\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n getUser?: (uid: string) => User | null;\n parentCollectionIds?: string[];\n}) {\n\n const { entityViews: contextEntityViews } = useCustomizationController();\n\n const [subcollectionToDelete, setSubcollectionToDelete] = React.useState<string | undefined>();\n const [addEntityViewDialogOpen, setAddEntityViewDialogOpen] = React.useState<boolean>(false);\n const [viewToDelete, setViewToDelete] = React.useState<string | undefined>();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n editedCollectionId?: string,\n }>();\n\n const {\n values,\n setFieldValue,\n } = useFormex<EntityCollection>();\n\n const [subcollections, setSubcollections] = React.useState<EntityCollection[]>(collection.subcollections ?? []);\n const resolvedEntityViews = values.entityViews?.filter(e => typeof e === \"string\")\n .map(e => resolveEntityView(e, contextEntityViews))\n .filter(Boolean) as EntityCustomView[] ?? [];\n const hardCodedEntityViews = collection.entityViews?.filter(e => typeof e !== \"string\") as EntityCustomView[] ?? [];\n const totalEntityViews = resolvedEntityViews.length + hardCodedEntityViews.length;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"2xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n <div className={\"flex flex-col gap-16\"}>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h5\"}>\n Subcollections of {values.name}\n </Typography>\n\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n {subcollections && subcollections.length > 0 && <Table>\n <TableBody>\n {subcollections.map((subcollection) => (\n <TableRow key={subcollection.path}\n onClick={() => setCurrentDialog({\n isNewCollection: false,\n editedCollectionId: subcollection.id\n })}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {subcollection.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSubcollectionToDelete(subcollection.id);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>}\n\n <Button\n onClick={() => {\n setCurrentDialog({\n isNewCollection: true\n });\n }}\n variant={\"text\"}\n startIcon={<AddIcon/>}>\n Add subcollection\n </Button>\n\n </Paper>\n\n </div>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h5\"}>\n Custom views\n </Typography>\n\n {totalEntityViews === 0 &&\n <Alert action={<Button variant=\"text\"\n size={\"small\"}\n href={\"https://firecms.co/docs/cloud/quickstart\"}\n component={\"a\"}\n rel=\"noopener noreferrer\"\n target=\"_blank\">More info</Button>}>\n Define your own custom views by uploading them with the CLI.\n </Alert>\n }\n\n {<>\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n <Table>\n <TableBody>\n {resolvedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setViewToDelete(view.key);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n {hardCodedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n <Typography variant={\"caption\"} className={\"flex-grow\"}>\n This view is defined in code with\n key <code>{view.key}</code>\n </Typography>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n <Button\n onClick={() => {\n setAddEntityViewDialogOpen(true);\n }}\n variant={\"text\"}\n startIcon={<AddIcon/>}>\n Add custom entity view\n </Button>\n </Paper>\n\n </>}\n\n\n </div>\n\n </div>\n </Container>\n\n <div style={{ height: \"52px\" }}/>\n\n {subcollectionToDelete &&\n <ConfirmationDialog open={Boolean(subcollectionToDelete)}\n onAccept={() => {\n const props = {\n id: subcollectionToDelete,\n parentCollectionIds: [...(parentCollectionIds ?? []), collection.id]\n };\n console.debug(\"Deleting subcollection\", props)\n configController.deleteCollection(props).then(() => {\n setSubcollectionToDelete(undefined);\n setSubcollections(subcollections?.filter(e => e.id !== subcollectionToDelete))\n });\n }}\n onCancel={() => setSubcollectionToDelete(undefined)}\n title={<>Delete this subcollection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>}/>}\n {viewToDelete &&\n <ConfirmationDialog open={Boolean(viewToDelete)}\n onAccept={() => {\n setFieldValue(\"entityViews\", values.entityViews?.filter(e => e !== viewToDelete));\n setViewToDelete(undefined);\n }}\n onCancel={() => setViewToDelete(undefined)}\n title={<>Remove this view?</>}\n body={<>This will <b>not\n delete any data</b>, only\n the view in the CMS</>}/>}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={configController}\n parentCollection={collection}\n collectionInference={collectionInference}\n parentCollectionIds={[...parentCollectionIds ?? [], values.id]}\n isNewCollection={false}\n {...currentDialog}\n getUser={getUser}\n handleClose={(updatedCollection) => {\n if (updatedCollection && !subcollections.map(e => e.id).includes(updatedCollection.id)) {\n setSubcollections([...subcollections, updatedCollection]);\n }\n setCurrentDialog(undefined);\n }}/>\n\n <EntityCustomViewsSelectDialog\n open={addEntityViewDialogOpen}\n onClose={(selectedViewKey) => {\n if (selectedViewKey) {\n setFieldValue(\"entityViews\", [...(values.entityViews ?? []), selectedViewKey]);\n }\n setAddEntityViewDialogOpen(false);\n }}/>\n </div>\n );\n}\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const productsCollectionTemplate: EntityCollection = {\n id: \"products\",\n path: \"products\",\n name: \"Products\",\n singularName: \"Product\",\n icon: \"shopping_cart\",\n description: \"List of the products currently sold in your shop\",\n properties: makePropertiesEditable({\n name: {\n dataType: \"string\",\n name: \"Name\",\n description: \"Name of this product\",\n validation: {\n required: true\n }\n },\n brand: {\n dataType: \"string\",\n name: \"Brand\",\n validation: {\n required: true\n }\n },\n description: {\n dataType: \"string\",\n name: \"Description\",\n description: \"Description of this product, supports markdown\",\n markdown: true\n },\n main_image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n },\n description: \"Upload field for images\"\n },\n available: {\n dataType: \"boolean\",\n name: \"Available\",\n columnWidth: 100,\n description: \"Is this product available in the website\"\n },\n price: {\n dataType: \"number\",\n name: \"Price\",\n validation: {\n requiredMessage: \"You must set a positive price\",\n min: 0\n }\n },\n images: {\n dataType: \"array\",\n name: \"Images\",\n hideFromCollection: true,\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n },\n related_products: {\n dataType: \"array\",\n name: \"Related products\",\n description: \"Products related to this one\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n metadata: {\n name: \"Metadata\",\n description: \"This is an example of a map property\",\n dataType: \"map\",\n keyValue: true\n },\n added_on: {\n dataType: \"date\",\n name: \"Added on\",\n autoValue: \"on_create\"\n }\n })\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const blogCollectionTemplate:EntityCollection = {\n id: \"blog\",\n path: \"blog\",\n name: \"Blog\",\n singularName: \"Blog entry\",\n icon: \"article\",\n description: \"A collection of blog entries\",\n defaultSize: \"l\",\n properties: makePropertiesEditable({\n name: {\n name: \"Name\",\n validation: { required: true },\n dataType: \"string\"\n },\n header_image: {\n name: \"Header image\",\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n content: {\n name: \"Content\",\n description: \"Content blocks for the blog entry\",\n validation: { required: true },\n dataType: \"array\",\n oneOf: {\n typeField: \"type\",\n valueField: \"value\",\n properties: {\n text: {\n dataType: \"string\",\n name: \"Text\",\n markdown: true\n },\n quote: {\n dataType: \"string\",\n name: \"Quote\",\n multiline: true\n },\n images: {\n name: \"Images\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n description: \"This fields allows uploading multiple images at once and reordering\"\n },\n products: {\n name: \"Products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\",\n previewProperties: [\"name\", \"main_image\"]\n }\n }\n },\n propertiesOrder: [\"text\", \"quote\", \"images\", \"products\"]\n }\n },\n created_on: {\n name: \"Created on\",\n dataType: \"date\",\n autoValue: \"on_create\"\n },\n status: {\n name: \"Status\",\n validation: { required: true },\n dataType: \"string\",\n enumValues: {\n published: {\n id: \"published\",\n label: \"Published\",\n },\n draft: \"Draft\"\n },\n defaultValue: \"draft\"\n },\n publish_date: {\n name: \"Publish date\",\n dataType: \"date\",\n clearable: true\n },\n reviewed: {\n name: \"Reviewed\",\n dataType: \"boolean\"\n },\n tags: {\n name: \"Tags\",\n description: \"Example of generic array\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n previewAsTag: true\n }\n }\n }),\n initialFilter: {\n status: [\"==\", \"published\"]\n }\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const usersCollectionTemplate: EntityCollection = {\n id: \"users\",\n path: \"users\",\n name: \"Users\",\n singularName: \"User\",\n description: \"Registered users in the app/web\",\n icon: \"person\",\n properties: makePropertiesEditable({\n displayName: {\n name: \"Display name\",\n dataType: \"string\"\n },\n email: {\n name: \"Email\",\n dataType: \"string\",\n email: true\n },\n emailVerified: {\n name: \"Email verified\",\n dataType: \"boolean\"\n },\n phone: {\n name: \"Phone\",\n dataType: \"string\"\n },\n favourite_products: {\n name: \"Favourite products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n photoURL: {\n name: \"Photo URL\",\n dataType: \"string\",\n url: \"image\"\n }\n }),\n};\n","import { EntityCollection } from \"@firecms/core\";\n\nexport const pagesCollectionTemplate: EntityCollection = {\n id: \"pages\",\n path: \"pages\",\n name: \"Pages\",\n singularName: \"Page\",\n icon: \"insert_drive_file\",\n description: \"List of website pages that can be edited here\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Page Title\",\n validation: { required: true }\n },\n slug: {\n dataType: \"string\",\n name: \"URL Slug\",\n validation: {\n required: true,\n unique: true,\n matches: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\",\n matchesMessage: \"Must be lowercase, alphanumeric, and hyphenated\"\n }\n },\n hero_section: {\n dataType: \"map\",\n name: \"Hero Section\",\n properties: {\n headline: {\n dataType: \"string\",\n name: \"Headline\",\n validation: { required: true }\n },\n subhead: {\n dataType: \"string\",\n name: \"Subheadline\"\n },\n background_image: {\n dataType: \"string\",\n name: \"Background Image\",\n storage: {\n storagePath: \"page_hero/images\",\n acceptedFiles: [\"image/*\"],\n }\n },\n call_to_action: {\n dataType: \"string\",\n name: \"Call to Action\"\n },\n call_to_action_link: {\n dataType: \"string\",\n name: \"CTA Link\",\n url: true\n }\n }\n },\n content: {\n dataType: \"array\",\n name: \"Content\",\n oneOf: {\n properties: {\n section: {\n dataType: \"map\",\n name: \"Section\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Section Title\",\n validation: { required: true }\n },\n content: {\n dataType: \"string\",\n name: \"Section Content\",\n markdown: true\n },\n image: {\n dataType: \"string\",\n name: \"Section Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n link: {\n dataType: \"string\",\n name: \"Section Link\",\n url: true\n }\n }\n },\n image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n slider: {\n dataType: \"array\",\n name: \"Slider\",\n of: {\n dataType: \"map\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Title\",\n validation: { required: true }\n },\n image: {\n dataType: \"string\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n }\n }\n },\n }\n }\n },\n sidebar: {\n dataType: \"map\",\n name: \"Sidebar\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Sidebar Title\",\n validation: { required: false }\n },\n content: {\n dataType: \"string\",\n name: \"Sidebar Content\",\n markdown: true\n }\n }\n },\n seo_metadata: {\n dataType: \"map\",\n name: \"SEO Metadata\",\n properties: {\n meta_title: {\n dataType: \"string\",\n name: \"Meta Title\"\n },\n meta_description: {\n dataType: \"string\",\n name: \"Meta Description\"\n },\n focus_keywords: {\n dataType: \"array\",\n name: \"Focus Keywords\",\n of: {\n dataType: \"string\"\n }\n }\n }\n },\n footer_override: {\n dataType: \"string\",\n name: \"Footer Override\",\n markdown: true\n },\n publish_date: {\n dataType: \"date\",\n name: \"Publish Date\",\n validation: { required: true }\n },\n last_updated: {\n dataType: \"date\",\n name: \"Last Updated\",\n autoValue: \"on_update\"\n },\n is_published: {\n dataType: \"boolean\",\n name: \"Is Published\",\n columnWidth: 100,\n description: \"Should this page be live on the site?\"\n }\n }\n};\n","import React, { useEffect, useState } from \"react\";\nimport { EntityCollection, unslugify, } from \"@firecms/core\";\nimport { Button, Card, Chip, CircularProgress, cls, Container, Icon, Tooltip, Typography, } from \"@firecms/ui\";\n\nimport { productsCollectionTemplate } from \"./templates/products_template\";\nimport { blogCollectionTemplate } from \"./templates/blog_template\";\nimport { usersCollectionTemplate } from \"./templates/users_template\";\nimport { ImportFileUpload } from \"@firecms/data_import_export\";\nimport { pagesCollectionTemplate } from \"./templates/pages_template\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function CollectionEditorWelcomeView({\n path,\n pathSuggestions,\n parentCollection,\n onContinue,\n existingCollectionPaths\n }: {\n path: string;\n pathSuggestions?: (path: string) => Promise<string[]>;\n parentCollection?: EntityCollection;\n onContinue: (importData?: object[], propertiesOrder?: string[]) => void;\n existingCollectionPaths?: string[];\n}) {\n\n const [loadingPathSuggestions, setLoadingPathSuggestions] = useState(false);\n const [filteredPathSuggestions, setFilteredPathSuggestions] = useState<string[] | undefined>();\n useEffect(() => {\n if (pathSuggestions && existingCollectionPaths) {\n setLoadingPathSuggestions(true);\n pathSuggestions(path)\n .then(suggestions => {\n const filteredSuggestions = suggestions.filter(s => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === s.trim().toLowerCase()));\n setFilteredPathSuggestions(filteredSuggestions);\n })\n .finally(() => setLoadingPathSuggestions(false));\n }\n }, [existingCollectionPaths, path, pathSuggestions]);\n\n const {\n values,\n setFieldValue,\n setValues,\n submitCount\n } = useFormex<EntityCollection>();\n\n const noSuggestions = !loadingPathSuggestions && (filteredPathSuggestions ?? [])?.length === 0;\n if (!noSuggestions) {\n return null;\n }\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div\n className=\"flex flex-row py-2 pt-3 items-center\">\n <Typography variant={\"h4\"} className={\"flex-grow\"}>\n New collection\n </Typography>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Use one of the existing paths in your database:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {loadingPathSuggestions && !filteredPathSuggestions && <CircularProgress size={\"small\"}/>}\n\n {filteredPathSuggestions?.map((suggestion, index) => (\n <Chip key={suggestion}\n colorScheme={\"cyanLighter\"}\n onClick={() => {\n setFieldValue(\"name\", unslugify(suggestion));\n setFieldValue(\"id\", suggestion);\n setFieldValue(\"path\", suggestion);\n setFieldValue(\"properties\", undefined);\n onContinue();\n }}\n size=\"small\">\n {suggestion}\n </Chip>\n ))}\n\n </div>\n\n </div>\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Select a template:\n </Typography>\n\n <div className={\"flex gap-4\"}>\n <TemplateButton title={\"Products\"}\n subtitle={\"A collection of products with images, prices and stock\"}\n icon={<Icon size={\"small\"} iconKey={productsCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(productsCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Users\"}\n subtitle={\"A collection of users with emails, names and roles\"}\n icon={<Icon size={\"small\"} iconKey={usersCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(usersCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Blog posts\"}\n subtitle={\"A collection of blog posts with images, authors and complex content\"}\n icon={<Icon size={\"small\"} iconKey={blogCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(blogCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Pages\"}\n subtitle={\"A collection of pages with images, authors and complex content\"}\n icon={<Icon size={\"small\"} iconKey={pagesCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\n }}/>\n </div>\n\n </div>\n\n {!parentCollection && <div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create a collection from a file (csv, json, xls, xslx...)\n </Typography>\n\n <ImportFileUpload onDataAdded={(data, propertiesOrder) => onContinue(data, propertiesOrder)}/>\n\n </div>}\n\n <div>\n\n <Button variant={\"text\"} onClick={() => onContinue()} className={\"my-2\"}>\n Continue from scratch\n </Button>\n </div>\n\n {/*<div style={{ height: \"52px\" }}/>*/}\n\n </Container>\n </div>\n );\n}\n\nexport function TemplateButton({\n title,\n subtitle,\n icon,\n onClick\n }: {\n title: string,\n icon: React.ReactNode,\n subtitle: string,\n onClick?: () => void\n}) {\n\n return (\n <Tooltip title={subtitle}\n asChild={true}>\n <Card\n onClick={onClick}\n className={cls(\n \"my-2 rounded-md border mx-0 p-6 px-4 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-surface-700 dark:text-surface-accent-300\",\n \"hover:border-primary-dark hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n \"border-surface-400 dark:border-surface-600 \"\n )}\n >\n {icon}\n <div className={\"flex flex-col items-start\"}>\n\n <Typography variant={\"subtitle1\"}>\n {title}\n </Typography>\n\n </div>\n </Card>\n </Tooltip>\n );\n\n}\n","import {\n DataNewPropertiesMapping,\n getInferenceType,\n ImportConfig,\n ImportNewPropertyFieldPreview\n} from \"@firecms/data_import_export\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { getFieldConfig, getFieldId, Properties, Property, PropertyConfig, PropertyConfigBadge, } from \"@firecms/core\";\nimport { cls, Container, Select, SelectItem, Tooltip, Typography } from \"@firecms/ui\";\nimport React, { useState } from \"react\";\nimport { OnPropertyChangedParams, PropertyFormDialog, PropertyWithId } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { PersistedCollection } from \"../../../types/persisted_collection\";\nimport { updatePropertyFromWidget } from \"../utils/update_property_for_widget\";\nimport { supportedFields } from \"../utils/supported_fields\";\nimport { buildPropertyFromData } from \"@firecms/schema_inference\";\n\nexport function CollectionEditorImportMapping({\n importConfig,\n propertyConfigs,\n collectionEditable\n }:\n {\n importConfig: ImportConfig,\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean\n }) {\n\n // const {\n // values,\n // setFieldValue,\n // setFieldTouched,\n // setValues,\n // submitCount\n // } = useFormex();\n\n const {\n setFieldValue,\n setFieldTouched,\n values\n } = useFormex<PersistedCollection>();\n const [selectedProperty, setSelectedProperty] = useState<PropertyWithId | undefined>(undefined);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n const propertyKey = selectedProperty ? selectedProperty.id : undefined;\n const property = selectedProperty || undefined;\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // setSelectedProperty(property);\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"];\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n }\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n // replace previousId with id in headersMapping\n const newHeadersMapping = { ...importConfig.headersMapping };\n Object.keys(newHeadersMapping).forEach((key) => {\n if (newHeadersMapping[key] === previousId) {\n newHeadersMapping[key] = id ?? \"\";\n }\n });\n importConfig.setHeadersMapping(newHeadersMapping);\n\n // if (id) {\n // setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n // setSelectedPropertyKey(id);\n // }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n };\n const onPropertyTypeChanged = async ({\n id,\n importKey,\n property,\n namespace\n }: OnPropertyChangedParams & {\n importKey: string\n }) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // we try to infer the rest of the properties of a property, from the type and the data\n const propertyData = importConfig.importData.map((d) => getIn(d, importKey));\n const inferredNewProperty = {\n ...buildPropertyFromData(propertyData, property, getInferenceType),\n editable: true\n };\n\n if (propertyPath) {\n if (inferredNewProperty) {\n setFieldValue(propertyPath, inferredNewProperty, false);\n } else {\n setFieldValue(propertyPath, property, false);\n }\n setFieldTouched(propertyPath, true, false);\n }\n };\n\n return (\n\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"6xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <Typography variant=\"h6\" className={\"my-4 ml-3.5\"}>Data property mapping</Typography>\n\n <DataNewPropertiesMapping importConfig={importConfig}\n destinationProperties={values.properties as Properties}\n buildPropertyView={({\n property,\n propertyKey,\n importKey,\n isIdColumn\n }) => {\n if (isIdColumn) {\n return <Typography> This column will be used as ID</Typography>\n }\n\n return <ImportNewPropertyFieldPreview\n property={property}\n propertyKey={propertyKey}\n onPropertyNameChanged={(propertyKey: string, value: string) => setFieldValue(`properties.${propertyKey}.name`, value, false)}\n onEditClick={() => {\n if (!propertyKey || !property) return;\n setSelectedProperty({\n ...property,\n id: propertyKey,\n editable: true\n });\n }}\n propertyTypeView={<PropertySelect property={property}\n disabled={false}\n onPropertyChanged={(props) => onPropertyTypeChanged({\n ...props,\n importKey\n })}\n propertyKey={propertyKey}\n propertyConfigs={propertyConfigs}/>}\n />;\n }}/>\n </Container>\n\n <PropertyFormDialog\n open={selectedProperty !== undefined}\n propertyKey={propertyKey}\n property={property}\n inArray={false}\n autoUpdateId={false}\n onPropertyChanged={onPropertyChanged}\n allowDataInference={false}\n collectionEditable={collectionEditable}\n onOkClicked={() => {\n setSelectedProperty(undefined);\n }}\n onCancel={() => {\n setSelectedProperty(undefined);\n }}\n autoOpenTypeSelect={false}\n existingProperty={false}\n propertyConfigs={propertyConfigs}/>\n\n <div style={{ height: \"52px\" }}/>\n </div>\n );\n\n}\n\nfunction PropertySelect({\n property,\n onPropertyChanged,\n propertyKey,\n propertyConfigs,\n disabled\n }: {\n property: Property | null,\n propertyKey: string | null,\n onPropertyChanged: ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n disabled?: boolean\n}) {\n\n const fieldId = property ? getFieldId(property) : null;\n const widget = property ? getFieldConfig(property, propertyConfigs) : null;\n\n const [selectOpen, setSelectOpen] = useState(false);\n\n return <Tooltip title={property && widget ? `${widget?.name} - ${property.dataType}` : undefined}\n open={selectOpen ? false : undefined}>\n <Select\n open={selectOpen}\n onOpenChange={setSelectOpen}\n invisible={true}\n size={\"large\"}\n className={\"w-full\"}\n disabled={disabled}\n error={!widget}\n fullWidth={true}\n value={fieldId ?? \"\"}\n placeholder={\"Select a property widget\"}\n position={\"item-aligned\"}\n renderValue={(value) => {\n if (!widget) return null;\n return <PropertyConfigBadge propertyConfig={widget}/>\n }}\n onValueChange={(newSelectedWidgetId) => {\n const newProperty = updatePropertyFromWidget(property, newSelectedWidgetId, propertyConfigs)\n if (!propertyKey) return;\n onPropertyChanged({\n id: propertyKey,\n property: newProperty,\n previousId: propertyKey,\n namespace: undefined\n });\n }}>\n {Object.entries(supportedFields).map(([key, widget]) => {\n return <PropertySelectItem\n key={key}\n value={key}\n optionDisabled={false}\n propertyConfig={widget}\n existing={false}/>;\n })\n }\n </Select>\n </Tooltip>;\n}\n\nexport interface PropertySelectItemProps {\n value: string;\n optionDisabled: boolean;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function PropertySelectItem({ value, optionDisabled, propertyConfig, existing }: PropertySelectItemProps) {\n return <SelectItem value={value}\n disabled={optionDisabled}\n className={\"flex flex-row items-center\"}>\n <div\n className={cls(\n \"flex flex-row items-center text-base min-h-[48px]\",\n optionDisabled ? \"w-full\" : \"\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <div>\n <div>{propertyConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"disabled\"}\n className={\"max-w-sm\"}>\n {existing && optionDisabled ? \"You can only switch to widgets that use the same data type\" : propertyConfig.description}\n </Typography>\n </div>\n </div>\n </SelectItem>\n}\n","import { convertDataToEntity, ImportConfig } from \"@firecms/data_import_export\";\nimport {\n CircularProgressCenter,\n EntityCollectionTable,\n Properties,\n useAuthController,\n useSelectionController\n} from \"@firecms/core\";\nimport { useEffect, useState } from \"react\";\nimport { Typography } from \"@firecms/ui\";\n\nexport function CollectionEditorImportDataPreview({\n importConfig,\n properties,\n propertiesOrder\n }: {\n importConfig: ImportConfig,\n properties: Properties,\n propertiesOrder: string[]\n}) {\n\n const authController = useAuthController();\n const [loading, setLoading] = useState<boolean>(false);\n\n async function loadEntities() {\n // const propertiesMapping = getPropertiesMapping(importConfig.originProperties, properties, importConfig.headersMapping);\n const mappedData = importConfig.importData.map(d => convertDataToEntity(authController, d, importConfig.idColumn, importConfig.headersMapping, properties, \"TEMP_PATH\", importConfig.defaultValues));\n importConfig.setEntities(mappedData);\n }\n\n useEffect(() => {\n loadEntities().finally(() => setLoading(false));\n }, []);\n\n const selectionController = useSelectionController();\n if (loading)\n return <CircularProgressCenter/>\n\n return <EntityCollectionTable\n title={<div>\n <Typography variant={\"subtitle2\"}>Imported data preview</Typography>\n <Typography variant={\"caption\"}>Entities with the same id will be overwritten</Typography>\n </div>}\n tableController={{\n data: importConfig.entities,\n dataLoading: false,\n noMoreToLoad: false\n }}\n endAdornment={<div className={\"h-12\"}/>}\n filterable={false}\n sortable={false}\n selectionController={selectionController}\n displayedColumnIds={propertiesOrder.map(p => ({\n key: p,\n disabled: false\n }))}\n openEntityMode={\"side_panel\"}\n properties={properties}\n enablePopupIcon={false}/>\n\n}\n","import { Properties, slugify } from \"@firecms/core\";\nimport { ImportConfig } from \"@firecms/data_import_export\";\n\nexport function cleanPropertiesFromImport(properties: Properties, parentSlug = \"\"): {\n headersMapping: ImportConfig[\"headersMapping\"],\n properties: Properties,\n idColumn?: ImportConfig[\"idColumn\"],\n} {\n\n const result = Object.keys(properties).reduce((acc, key) => {\n const property = properties[key];\n const slug = slugify(key);\n const fullSlug = parentSlug ? `${parentSlug}.${slug}` : slug;\n\n if (property.dataType === \"map\" && property.properties) {\n const slugifiedResult = cleanPropertiesFromImport(property.properties as Properties, fullSlug);\n return {\n headersMapping: { ...acc.headersMapping, [key]: fullSlug },\n properties: {\n ...acc.properties,\n [slug]: {\n ...property,\n properties: slugifiedResult.properties,\n propertiesOrder: Object.keys(slugifiedResult.properties)\n }\n }\n }\n }\n\n const updatedProperties = {\n ...acc.properties,\n [slug]: property\n } as Properties;\n\n const headersMapping = { ...acc.headersMapping, [key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties,\n }\n }, { headersMapping: {}, properties: {} });\n\n const firstKey = Object.keys(result.headersMapping)?.[0];\n let idColumn: string | undefined;\n if (firstKey?.includes(\"id\") || firstKey?.includes(\"key\")) {\n idColumn = firstKey;\n }\n\n return {\n ...result,\n idColumn\n };\n}\n","import * as React from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n CircularProgressCenter,\n ConfirmationDialog,\n Entity,\n EntityCollection,\n ErrorView,\n isPropertyBuilder,\n MapProperty,\n mergeDeep,\n Properties,\n PropertiesOrBuilders,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n randomString,\n removeInitialAndTrailingSlashes,\n removeUndefined,\n TopNavigationResult,\n useAuthController,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n ArrowBackIcon,\n Button,\n CheckIcon,\n cls,\n coolIconKeys,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n LoadingButton,\n Tab,\n Tabs,\n Typography\n} from \"@firecms/ui\";\nimport { YupSchema } from \"./CollectionYupValidation\";\nimport { CollectionDetailsForm } from \"./CollectionDetailsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { UnsavedChangesDialog } from \"./UnsavedChangesDialog\";\nimport { SubcollectionsEditTab } from \"./SubcollectionsEditTab\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionEditorWelcomeView } from \"./CollectionEditorWelcomeView\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { getInferenceType, ImportSaveInProgress, useImportConfig } from \"@firecms/data_import_export\";\nimport { buildEntityPropertiesFromData } from \"@firecms/schema_inference\";\nimport { CollectionEditorImportMapping } from \"./import/CollectionEditorImportMapping\";\nimport { CollectionEditorImportDataPreview } from \"./import/CollectionEditorImportDataPreview\";\nimport { cleanPropertiesFromImport } from \"./import/clean_import_data\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { Formex, FormexController, useCreateFormex } from \"@firecms/formex\";\nimport { getFullIdPath } from \"./util\";\n\nexport interface CollectionEditorDialogProps {\n open: boolean;\n isNewCollection: boolean;\n initialValues?: {\n group?: string,\n path?: string,\n name?: string,\n }\n editedCollectionId?: string;\n fullPath?: string; // full path of this particular collection, like `products/123/locales`\n parentCollectionIds?: string[]; // path ids of the parent collection, like [`products`]\n handleClose: (collection?: EntityCollection) => void;\n configController: CollectionsConfigController;\n reservedGroups?: string[];\n collectionInference?: CollectionInference;\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n pathSuggestions?: (path?: string) => Promise<string[]>;\n getUser?: (uid: string) => User | null;\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n parentCollection?: PersistedCollection;\n existingEntities?: Entity<any>[];\n}\n\nexport function CollectionEditorDialog(props: CollectionEditorDialogProps) {\n\n const open = props.open;\n\n const [formDirty, setFormDirty] = React.useState<boolean>(false);\n const [unsavedChangesDialogOpen, setUnsavedChangesDialogOpen] = React.useState<boolean>(false);\n\n const handleCancel = () => {\n if (!formDirty) {\n props.handleClose(undefined);\n } else {\n setUnsavedChangesDialogOpen(true);\n }\n };\n\n useEffect(() => {\n if (!open) {\n setFormDirty(false);\n setUnsavedChangesDialogOpen(false);\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n fullWidth={true}\n fullHeight={true}\n scrollable={false}\n maxWidth={\"7xl\"}\n onOpenChange={(open) => !open ? handleCancel() : undefined}\n >\n <DialogTitle hidden>Collection editor</DialogTitle>\n {open && <CollectionEditor {...props}\n handleCancel={handleCancel}\n setFormDirty={setFormDirty}/>}\n\n <UnsavedChangesDialog\n open={unsavedChangesDialogOpen}\n handleOk={() => props.handleClose(undefined)}\n handleCancel={() => setUnsavedChangesDialogOpen(false)}\n body={\"There are unsaved changes in this collection\"}/>\n\n </Dialog>\n );\n}\n\ntype EditorView = \"welcome\"\n | \"details\"\n | \"import_data_mapping\"\n | \"import_data_preview\"\n | \"import_data_saving\"\n | \"properties\"\n | \"loading\"\n | \"extra_view\"\n | \"subcollections\";\n\nexport function CollectionEditor(props: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void\n}) {\n const { propertyConfigs } = useCustomizationController();\n const navigation = useNavigationController();\n const authController = useAuthController();\n\n const {\n topLevelNavigation,\n collections\n } = navigation;\n\n const initialValuesProp = props.initialValues;\n const includeTemplates = !initialValuesProp?.path && (props.parentCollectionIds ?? []).length === 0;\n const collectionsInThisLevel = (props.parentCollection ? props.parentCollection.subcollections : collections) ?? [];\n const existingPaths = collectionsInThisLevel.map(col => col.path.trim().toLowerCase());\n const existingIds = collectionsInThisLevel.map(col => col.id?.trim().toLowerCase()).filter(Boolean) as string[];\n const [collection, setCollection] = React.useState<PersistedCollection<any> | undefined>();\n const [initialLoadingCompleted, setInitialLoadingCompleted] = React.useState(false);\n\n useEffect(() => {\n try {\n if (navigation.initialised) {\n if (props.editedCollectionId) {\n setCollection(navigation.getCollectionFromPaths([...(props.parentCollectionIds ?? []), props.editedCollectionId]));\n } else {\n setCollection(undefined);\n }\n setInitialLoadingCompleted(true);\n }\n } catch (e) {\n console.error(e);\n }\n }, [props.editedCollectionId, props.parentCollectionIds, navigation.initialised, navigation.getCollectionFromPaths]);\n\n if (!topLevelNavigation) {\n throw Error(\"Internal: Navigation not ready in collection editor\");\n }\n\n const {\n groups\n }: TopNavigationResult = topLevelNavigation;\n\n const initialCollection = collection\n ? {\n ...collection,\n id: collection.id ?? collection.path ?? randomString(16)\n }\n : undefined;\n\n const initialValues: PersistedCollection<any> = initialCollection\n ? applyPropertyConfigs(initialCollection, propertyConfigs)\n : {\n id: initialValuesProp?.path ?? randomString(16),\n path: initialValuesProp?.path ?? \"\",\n name: initialValuesProp?.name ?? \"\",\n group: initialValuesProp?.group ?? \"\",\n properties: {} as PropertiesOrBuilders,\n propertiesOrder: [],\n icon: coolIconKeys[Math.floor(Math.random() * coolIconKeys.length)],\n ownerId: authController.user?.uid ?? \"\"\n };\n\n if (!initialLoadingCompleted) {\n return <CircularProgressCenter/>;\n }\n\n if (!props.isNewCollection && (!navigation.initialised || !initialLoadingCompleted)) {\n return <CircularProgressCenter/>;\n }\n\n return <CollectionEditorInternal\n {...props}\n initialValues={initialValues}\n existingPaths={existingPaths}\n existingIds={existingIds}\n includeTemplates={includeTemplates}\n collection={collection}\n setCollection={setCollection}\n groups={groups}\n propertyConfigs={propertyConfigs}/>\n\n}\n\nfunction CollectionEditorInternal<M extends Record<string, any>>({\n isNewCollection,\n configController,\n editedCollectionId,\n parentCollectionIds,\n fullPath,\n collectionInference,\n handleClose,\n reservedGroups,\n extraView,\n handleCancel,\n setFormDirty,\n pathSuggestions,\n getUser,\n parentCollection,\n getData,\n existingPaths,\n existingIds,\n includeTemplates,\n collection,\n setCollection,\n initialValues,\n propertyConfigs,\n groups,\n existingEntities\n }: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void,\n initialValues: PersistedCollection<M>,\n existingPaths: string[],\n existingIds: string[],\n includeTemplates: boolean,\n collection: PersistedCollection<M> | undefined,\n setCollection: (collection: PersistedCollection<M>) => void,\n propertyConfigs: Record<string, PropertyConfig<any>>,\n groups: string[],\n }\n) {\n\n const importConfig = useImportConfig();\n const navigation = useNavigationController();\n const snackbarController = useSnackbarController();\n\n // Use this ref to store which properties have errors\n const propertyErrorsRef = useRef({});\n\n const initialView = isNewCollection ? (includeTemplates ? \"welcome\" : \"details\") : \"properties\";\n const [currentView, setCurrentView] = useState<EditorView>(initialView); // this view can edit either the details view or the properties one\n\n const [error, setError] = React.useState<Error | undefined>();\n\n const saveCollection = (updatedCollection: PersistedCollection<M>): Promise<boolean> => {\n const id = updatedCollection.id || updatedCollection.path;\n\n return configController.saveCollection({\n id,\n collectionData: updatedCollection,\n previousId: editedCollectionId,\n parentCollectionIds\n })\n .then(() => {\n setError(undefined);\n return true;\n })\n .catch((e) => {\n setError(e);\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n };\n\n const setNextMode = () => {\n if (currentView === \"details\") {\n if (importConfig.inUse) {\n setCurrentView(\"import_data_saving\");\n } else if (extraView) {\n setCurrentView(\"extra_view\");\n } else {\n setCurrentView(\"properties\");\n }\n } else if (currentView === \"welcome\") {\n setCurrentView(\"details\");\n } else if (currentView === \"import_data_mapping\") {\n setCurrentView(\"import_data_preview\");\n } else if (currentView === \"import_data_preview\") {\n setCurrentView(\"details\");\n } else if (currentView === \"extra_view\") {\n setCurrentView(\"properties\");\n } else {\n setCurrentView(\"details\");\n }\n\n };\n\n const doCollectionInference = (collection: PersistedCollection<any>) => {\n if (!collectionInference) return undefined;\n return collectionInference?.(collection.path, collection.collectionGroup ?? false, parentPaths ?? []);\n };\n\n const inferCollectionFromData = async (newCollection: PersistedCollection<M>) => {\n\n try {\n if (!doCollectionInference) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n\n setCurrentView(\"loading\");\n\n const inferredCollection = await doCollectionInference?.(newCollection);\n\n if (!inferredCollection) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n const values = {\n ...(newCollection ?? {})\n };\n\n if (Object.keys(inferredCollection.properties ?? {}).length > 0) {\n values.properties = inferredCollection.properties as PropertiesOrBuilders<M>;\n values.propertiesOrder = inferredCollection.propertiesOrder as Extract<keyof M, string>[];\n }\n\n if (!values.propertiesOrder) {\n values.propertiesOrder = Object.keys(values.properties) as Extract<keyof M, string>[];\n return values;\n }\n\n setCollection(values);\n console.debug(\"Inferred collection\", {\n newCollection: newCollection ?? {},\n values\n });\n return values;\n } catch (e: any) {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error inferring collection: \" + (e.message ?? \"Details in the console\")\n });\n return newCollection;\n }\n };\n\n const onSubmit = (newCollectionState: PersistedCollection<M>, formexController: FormexController<PersistedCollection<M>>) => {\n console.debug(\"Submitting collection\", newCollectionState);\n try {\n\n if (!isNewCollection) {\n saveCollection(newCollectionState).then(() => {\n formexController.resetForm();\n handleClose(newCollectionState);\n });\n return;\n }\n\n if (currentView === \"welcome\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"details\") {\n if (extraView || importConfig.inUse) {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n } else if (isNewCollection) {\n inferCollectionFromData(newCollectionState)\n .then((values) => {\n formexController.resetForm({\n values: values ?? newCollectionState,\n touched: {\n path: true,\n name: true\n }\n });\n }).finally(() => {\n setNextMode();\n });\n } else {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n }\n } else if (currentView === \"extra_view\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"import_data_mapping\") {\n setNextMode();\n } else if (currentView === \"import_data_preview\") {\n setNextMode();\n } else if (currentView === \"properties\") {\n saveCollection(newCollectionState).then(() => {\n formexController.resetForm({ values: initialValues });\n setNextMode();\n handleClose(newCollectionState);\n });\n } else {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n }\n } catch (e: any) {\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n console.error(e);\n formexController.resetForm({ values: newCollectionState });\n }\n };\n\n const validation = (col: PersistedCollection) => {\n\n let errors: Record<string, any> = {};\n const schema = (currentView === \"properties\" || currentView === \"subcollections\" || currentView === \"details\") && YupSchema;\n if (schema) {\n try {\n schema.validateSync(col, { abortEarly: false });\n } catch (e: any) {\n e.inner.forEach((err: any) => {\n errors[err.path] = err.message;\n });\n }\n }\n if (currentView === \"properties\") {\n errors = { ...errors, ...propertyErrorsRef.current };\n }\n if (currentView === \"details\") {\n const pathError = validatePath(col.path, isNewCollection, existingPaths, col.id);\n if (pathError) {\n errors.path = pathError;\n }\n const idError = validateId(col.id, isNewCollection, existingPaths, existingIds);\n if (idError) {\n errors.id = idError;\n }\n }\n return errors;\n };\n\n const formController = useCreateFormex<PersistedCollection<M>>({\n initialValues,\n onSubmit,\n validation,\n debugId: \"COLLECTION_EDITOR\"\n });\n\n const {\n values,\n setFieldValue,\n isSubmitting,\n dirty,\n submitCount\n } = formController;\n\n // TODO: getting data is only working in root collections with this code\n const path = values.path;\n const updatedFullPath = fullPath?.includes(\"/\") ? fullPath?.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + path : path; // TODO: this path is wrong\n const pathError = validatePath(path, isNewCollection, existingPaths, values.id);\n\n const parentPaths = !pathError && parentCollectionIds ? navigation.convertIdsToPaths(parentCollectionIds) : undefined;\n const resolvedPath = !pathError ? navigation.resolveIdsFrom(updatedFullPath) : undefined;\n const getDataWithPath = resolvedPath && getData ? async () => {\n const data = await getData(resolvedPath, parentPaths ?? []);\n if (existingEntities) {\n const existingData = existingEntities.map(e => e.values);\n data.push(...existingData);\n }\n return data;\n } : undefined;\n\n useEffect(() => {\n setFormDirty(dirty);\n }, [dirty]);\n\n function onImportDataSet(data: object[], propertiesOrder?: string[]) {\n importConfig.setInUse(true);\n buildEntityPropertiesFromData(data, getInferenceType)\n .then((properties) => {\n const res = cleanPropertiesFromImport(properties);\n\n importConfig.setIdColumn(res.idColumn);\n importConfig.setImportData(data);\n importConfig.setHeadersMapping(res.headersMapping);\n const filteredHeadingsOrder = ((propertiesOrder ?? [])\n .filter((key) => res.headersMapping[key]) as string[]) ?? Object.keys(res.properties);\n importConfig.setHeadingsOrder(filteredHeadingsOrder);\n importConfig.setOriginProperties(res.properties);\n\n const mappedHeadings = (propertiesOrder ?? []).map((key) => res.headersMapping[key]).filter(Boolean) as string[] ?? Object.keys(res.properties);\n setFieldValue(\"properties\", res.properties);\n setFieldValue(\"propertiesOrder\", mappedHeadings);\n });\n }\n\n const validValues = Boolean(values.name) && Boolean(values.id);\n\n const onImportMappingComplete = () => {\n const updatedProperties = { ...values.properties };\n if (importConfig.idColumn)\n delete updatedProperties[importConfig.idColumn];\n setFieldValue(\"properties\", updatedProperties);\n // setFieldValue(\"propertiesOrder\", Object.values(importConfig.headersMapping));\n setNextMode();\n };\n\n const editable = collection?.editable === undefined || collection?.editable === true;\n // @ts-ignore\n const isMergedCollection = collection?.merged ?? false;\n const collectionEditable = editable || isNewCollection;\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n if (!collection) return;\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n handleCancel();\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n return <DialogContent fullHeight={true}>\n <Formex value={formController}>\n\n <>\n {!isNewCollection && <Tabs value={currentView}\n innerClassName={cls(defaultBorderMixin, \"px-4 h-14 w-full justify-end bg-surface-50 dark:bg-surface-950 border-b\")}\n onValueChange={(v) => setCurrentView(v as EditorView)}>\n <Tab value={\"details\"}>\n Details\n </Tab>\n <Tab value={\"properties\"}>\n Properties\n </Tab>\n <Tab value={\"subcollections\"}>\n Additional views\n </Tab>\n </Tabs>}\n\n <form noValidate\n onSubmit={formController.handleSubmit}\n className={cls(\n isNewCollection ? \"h-full\" : \"h-[calc(100%-48px)]\",\n \"flex-grow flex flex-col relative\")}>\n\n {currentView === \"loading\" &&\n <CircularProgressCenter/>}\n\n {currentView === \"extra_view\" &&\n path &&\n extraView?.View &&\n <extraView.View path={path}/>}\n\n {currentView === \"welcome\" &&\n <CollectionEditorWelcomeView\n path={path}\n onContinue={(importData, propertiesOrder) => {\n // console.log(\"Import data\", importData, propertiesOrder)\n if (importData) {\n onImportDataSet(importData, propertiesOrder);\n setCurrentView(\"import_data_mapping\");\n } else {\n setCurrentView(\"details\");\n }\n }}\n existingCollectionPaths={existingPaths}\n parentCollection={parentCollection}\n pathSuggestions={pathSuggestions}/>}\n\n {currentView === \"import_data_mapping\" && importConfig &&\n <CollectionEditorImportMapping importConfig={importConfig}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>}\n\n {currentView === \"import_data_preview\" && importConfig &&\n <CollectionEditorImportDataPreview importConfig={importConfig}\n properties={values.properties as Properties}\n propertiesOrder={values.propertiesOrder as string[]}/>}\n\n {currentView === \"import_data_saving\" && importConfig &&\n <ImportSaveInProgress importConfig={importConfig}\n collection={values}\n path={path}\n onImportSuccess={async (importedCollection) => {\n snackbarController.open({\n type: \"info\",\n message: \"Data imported successfully\"\n });\n await saveCollection(values);\n handleClose(importedCollection);\n }}\n />}\n\n {currentView === \"details\" &&\n <CollectionDetailsForm\n existingPaths={existingPaths}\n existingIds={existingIds}\n groups={groups}\n parentCollectionIds={parentCollectionIds}\n parentCollection={parentCollection}\n isNewCollection={isNewCollection}>\n {!isNewCollection && isMergedCollection && <div className={\"flex flex-col gap-4 mt-8\"}>\n <Typography variant={\"body2\"} color={\"secondary\"}>This collection is defined in code.\n The changes done in this editor will override the properties defined in code.\n You can delete the overridden values to revert to the state defined in code.\n </Typography>\n <Button color={\"neutral\"}\n onClick={() => {\n setDeleteRequested(true);\n }}>Reset to code</Button>\n </div>}\n </CollectionDetailsForm>}\n\n {currentView === \"subcollections\" && collection &&\n <SubcollectionsEditTab\n parentCollection={parentCollection}\n configController={configController}\n getUser={getUser}\n collectionInference={collectionInference}\n parentCollectionIds={parentCollectionIds}\n collection={collection}/>}\n\n {currentView === \"properties\" &&\n <CollectionPropertiesEditorForm\n showErrors={submitCount > 0}\n isNewCollection={isNewCollection}\n reservedGroups={reservedGroups}\n onPropertyError={(propertyKey, namespace, error) => {\n const current = removeUndefined({\n ...propertyErrorsRef.current,\n [getFullIdPath(propertyKey, namespace)]: removeUndefined(error, true)\n }, true);\n propertyErrorsRef.current = current;\n formController.validate();\n }}\n getUser={getUser}\n getData={getDataWithPath}\n doCollectionInference={doCollectionInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n extraIcon={extraView?.icon &&\n <IconButton\n color={\"primary\"}\n onClick={() => setCurrentView(\"extra_view\")}>\n {extraView.icon}\n </IconButton>}/>\n }\n\n {currentView !== \"welcome\" && <DialogActions\n position={\"absolute\"}>\n {error && <ErrorView error={error}/>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_mapping\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n importConfig.setInUse(false);\n return setCurrentView(\"welcome\");\n }}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_preview\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n setCurrentView(\"import_data_mapping\");\n }}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"details\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"welcome\")}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && currentView === \"properties\" && <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"details\")}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n <Button variant={\"text\"}\n onClick={() => {\n handleCancel();\n }}>\n Cancel\n </Button>\n\n {isNewCollection && currentView === \"import_data_mapping\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={onImportMappingComplete}\n >\n Next\n </Button>}\n\n {isNewCollection && currentView === \"import_data_preview\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={() => {\n setNextMode();\n }}\n >\n Next\n </Button>}\n\n {isNewCollection && (currentView === \"details\" || currentView === \"properties\") &&\n <LoadingButton\n variant={\"filled\"}\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n disabled={isSubmitting || (currentView === \"details\" && !validValues)}\n startIcon={currentView === \"properties\"\n ? <CheckIcon/>\n : undefined}\n >\n {currentView === \"details\" && \"Next\"}\n {currentView === \"properties\" && \"Create collection\"}\n </LoadingButton>}\n\n {!isNewCollection && <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Update collection\n </LoadingButton>}\n\n </DialogActions>}\n </form>\n </>\n\n </Formex>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete the stored config?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the stored config, and reset to the code state.</>}/>\n\n </DialogContent>\n\n}\n\nfunction applyPropertyConfigs<M extends Record<string, any> = any>(collection: PersistedCollection<M>, propertyConfigs: Record<string, PropertyConfig<any>>): PersistedCollection<M> {\n const {\n properties,\n ...rest\n } = collection;\n const propertiesResult: PropertiesOrBuilders<any> = {};\n if (properties) {\n Object.keys(properties).forEach((key) => {\n propertiesResult[key] = applyPropertiesConfig(properties[key] as PropertyOrBuilder, propertyConfigs);\n });\n }\n\n return {\n ...rest,\n properties: propertiesResult\n };\n}\n\nfunction applyPropertiesConfig(property: PropertyOrBuilder, propertyConfigs: Record<string, PropertyConfig<any>>) {\n let internalProperty = property;\n if (propertyConfigs && typeof internalProperty === \"object\" && internalProperty.propertyConfig) {\n const propertyConfig = propertyConfigs[internalProperty.propertyConfig];\n if (propertyConfig && isPropertyBuilder(propertyConfig.property)) {\n internalProperty = propertyConfig.property;\n } else {\n\n if (propertyConfig) {\n internalProperty = mergeDeep(propertyConfig.property, internalProperty);\n }\n\n if (!isPropertyBuilder(internalProperty) && internalProperty.dataType === \"map\" && internalProperty.properties) {\n const properties: Record<string, PropertyOrBuilder> = {};\n Object.keys(internalProperty.properties).forEach((key) => {\n properties[key] = applyPropertiesConfig(((internalProperty as MapProperty).properties as Properties)[key] as Property, propertyConfigs);\n });\n internalProperty = {\n ...internalProperty,\n properties\n };\n }\n\n }\n }\n return internalProperty;\n\n}\n\nconst validatePath = (value: string, isNewCollection: boolean, existingPaths: string[], idValue?: string) => {\n let error;\n if (!value) {\n error = \"You must specify a path in the database for this collection\";\n }\n // if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n // error = \"There is already a collection which uses this path as an id\";\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()) && !idValue)\n error = \"There is already a collection with the specified path. If you want to have multiple collections referring to the same database path, make sure the have different ids\";\n\n const subpaths = removeInitialAndTrailingSlashes(value).split(\"/\");\n if (subpaths.length % 2 === 0) {\n error = `Collection paths must have an odd number of segments: ${value}`;\n }\n return error;\n};\n\nconst validateId = (value: string, isNewCollection: boolean, existingPaths: string[], existingIds: string[]) => {\n if (!value) return undefined;\n let error;\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection that uses this value as a path\";\n if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection which uses this id\";\n // if (error) {\n // setAdvancedPanelExpanded(true);\n // }\n return error;\n};\n","import React, { PropsWithChildren, useCallback } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport {\n Entity,\n Property,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport { CollectionEditorDialog } from \"./ui/collection_editor/CollectionEditorDialog\";\nimport { useNavigate } from \"react-router\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { PropertyFormDialog } from \"./ui/collection_editor/PropertyEditView\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\n\nexport const ConfigControllerContext = React.createContext<CollectionsConfigController>({} as any);\nexport const CollectionEditorContext = React.createContext<CollectionEditorController>({} as any);\n\nexport interface ConfigControllerProviderProps {\n /**\n * Controller for managing the collections' config.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Callback used to infer the schema from the data.\n */\n collectionInference?: CollectionInference;\n\n /**\n * Use this builder to define the permissions for the configuration per user.\n */\n configPermissions?: CollectionEditorPermissionsBuilder;\n\n /**\n * Groups that cannot be used to create new collections.\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n getUser?: (uid: string) => User | null\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n}\n\nexport const ConfigControllerProvider = React.memo(\n function ConfigControllerProvider({\n children,\n collectionConfigController,\n configPermissions,\n reservedGroups,\n collectionInference,\n extraView,\n getUser,\n getData,\n onAnalyticsEvent,\n }: PropsWithChildren<ConfigControllerProviderProps>) {\n\n const navigation = useNavigationController();\n const navigate = useNavigate();\n const snackbarController = useSnackbarController();\n const { propertyConfigs } = useCustomizationController();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n parentCollection?: PersistedCollection,\n editedCollectionId?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n initialValues?: {\n path?: string,\n group?: string,\n name?: string\n },\n redirect: boolean,\n existingEntities?: Entity<any>[]\n }>();\n\n const [currentPropertyDialog, setCurrentPropertyDialog] = React.useState<{\n propertyKey?: string,\n property?: Property,\n namespace?: string,\n parentCollection?: PersistedCollection,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n fullPath?: string,\n parentCollectionIds: string[],\n collectionEditable: boolean;\n existingEntities?: Entity<any>[]\n }>();\n\n const defaultConfigPermissions: CollectionEditorPermissionsBuilder = useCallback(() => ({\n createCollections: true,\n editCollections: true,\n deleteCollections: true\n }), []);\n\n const editCollection = ({\n id,\n fullPath,\n parentCollectionIds,\n parentCollection,\n existingEntities\n }: {\n id?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection,\n existingEntities?: Entity<any>[]\n }) => {\n console.debug(\"Edit collection\", id, fullPath, parentCollectionIds, parentCollection);\n onAnalyticsEvent?.(\"edit_collection\", {\n id,\n fullPath\n });\n setCurrentDialog({\n editedCollectionId: id,\n fullPath,\n parentCollectionIds,\n isNewCollection: false,\n parentCollection,\n redirect: false,\n existingEntities\n });\n };\n\n const editProperty = ({\n propertyKey,\n property,\n editedCollectionId,\n currentPropertiesOrder,\n parentCollectionIds,\n collection,\n existingEntities\n }: {\n propertyKey?: string,\n property?: Property,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n parentCollectionIds: string[],\n collection: PersistedCollection,\n existingEntities?: Entity<any>[]\n }) => {\n console.debug(\"Edit property\", propertyKey, property, editedCollectionId, currentPropertiesOrder, parentCollectionIds, collection);\n onAnalyticsEvent?.(\"edit_property\", {\n propertyKey,\n editedCollectionId\n });\n // namespace is all the path until the last dot\n const namespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(0, propertyKey.lastIndexOf(\".\"))\n : undefined;\n const propertyKeyWithoutNamespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(propertyKey.lastIndexOf(\".\") + 1)\n : propertyKey;\n setCurrentPropertyDialog({\n propertyKey: propertyKeyWithoutNamespace,\n property,\n namespace,\n currentPropertiesOrder,\n editedCollectionId,\n parentCollectionIds,\n collectionEditable: collection?.editable ?? false,\n existingEntities\n });\n };\n\n const createCollection = ({\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n }: {\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection\n initialValues?: {\n group?: string,\n path?: string,\n name?: string\n },\n redirect: boolean,\n sourceClick?: string\n }) => {\n console.debug(\"Create collection\", {\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n });\n onAnalyticsEvent?.(\"create_collection\", {\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n });\n setCurrentDialog({\n isNewCollection: true,\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect\n });\n };\n\n return (\n <ConfigControllerContext.Provider value={collectionConfigController}>\n <CollectionEditorContext.Provider\n value={{\n editCollection,\n createCollection,\n editProperty,\n configPermissions: configPermissions ?? defaultConfigPermissions,\n }}>\n\n {children}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={collectionConfigController}\n isNewCollection={false}\n collectionInference={collectionInference}\n {...currentDialog}\n getData={getData}\n reservedGroups={reservedGroups}\n extraView={extraView}\n getUser={getUser}\n handleClose={(collection) => {\n if (currentDialog?.redirect) {\n if (collection && currentDialog?.isNewCollection && !currentDialog.parentCollectionIds.length) {\n const url = navigation.buildUrlCollectionPath(collection.id ?? collection.path);\n navigate(url);\n }\n }\n setCurrentDialog(undefined);\n }}/>\n\n {/* Used for editing properties*/}\n <PropertyFormDialog\n open={Boolean(currentPropertyDialog)}\n includeIdAndName={true}\n existingProperty={Boolean(currentPropertyDialog?.propertyKey)}\n autoUpdateId={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n autoOpenTypeSelect={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n inArray={false}\n collectionEditable={currentPropertyDialog?.collectionEditable ?? false}\n getData={getData && currentPropertyDialog?.editedCollectionId\n ? () => {\n console.debug(\"get data for property\", currentPropertyDialog?.editedCollectionId);\n const resolvedPath = navigation.resolveIdsFrom(currentPropertyDialog.editedCollectionId!)\n return getData(resolvedPath, []);\n }\n : undefined}\n onPropertyChanged={({\n id,\n property\n }) => {\n if (!currentPropertyDialog) return;\n if (!id) return;\n const newProperty = !(currentPropertyDialog.propertyKey);\n return collectionConfigController.saveProperty({\n path: currentPropertyDialog?.editedCollectionId,\n property,\n propertyKey: id,\n newPropertiesOrder: newProperty && currentPropertyDialog.currentPropertiesOrder ? [...currentPropertyDialog.currentPropertiesOrder, id] : undefined,\n namespace: currentPropertyDialog.namespace,\n parentCollectionIds: currentPropertyDialog.parentCollectionIds\n })\n .catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onPropertyChangedImmediate={false}\n onDelete={() => {\n if (!currentPropertyDialog?.propertyKey) return;\n const newPropertiesOrder = currentPropertyDialog?.currentPropertiesOrder?.filter(p => p !== currentPropertyDialog?.propertyKey);\n return collectionConfigController.deleteProperty({\n path: currentPropertyDialog?.editedCollectionId,\n propertyKey: currentPropertyDialog?.propertyKey,\n namespace: currentPropertyDialog?.namespace,\n newPropertiesOrder,\n parentCollectionIds: currentPropertyDialog?.parentCollectionIds\n })\n .then(() => {\n setCurrentPropertyDialog(undefined);\n }).catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onError={() => {\n }}\n onOkClicked={() => {\n setCurrentPropertyDialog(undefined);\n }}\n onCancel={() => {\n setCurrentPropertyDialog(undefined);\n }}\n initialErrors={{}}\n forceShowErrors={false}\n existingPropertyKeys={[]}\n allowDataInference={true}\n propertyConfigs={propertyConfigs}\n property={currentPropertyDialog?.property}\n propertyKey={currentPropertyDialog?.propertyKey}/>\n\n </CollectionEditorContext.Provider>\n\n </ConfigControllerContext.Provider>\n );\n }, equal);\n","import { CollectionActionsProps, useAuthController, useNavigationController } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionAction({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n const collectionEditorController = useCollectionEditorController();\n\n const parentCollection = navigationController.getCollectionFromIds(parentCollectionIds);\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n const editorButton = <Tooltip\n asChild={true}\n title={canEditCollection ? \"Edit collection\" : \"You don't have permissions to edit this collection\"}>\n <IconButton\n color={\"primary\"}\n disabled={!canEditCollection}\n onClick={canEditCollection\n ? () => collectionEditorController?.editCollection({\n id: collection.id,\n fullPath,\n parentCollectionIds,\n parentCollection: parentCollection as PersistedCollection,\n existingEntities: tableController?.data ?? []\n })\n : undefined}>\n <SettingsIcon/>\n </IconButton>\n </Tooltip>;\n\n return <>\n {editorButton}\n </>\n\n}\n\nfunction getObjectOrNull(o?: object): object | null {\n if (o && Object.keys(o).length === 0)\n return o\n return o ?? null;\n}\n","import { useContext } from \"react\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { ConfigControllerContext } from \"./ConfigControllerProvider\";\n\n/**\n * Use this hook to access the configuration controller.\n * You can use it to get the list of collections, and to save/delete collections.\n */\nexport const useCollectionsConfigController = (): CollectionsConfigController => useContext(ConfigControllerContext);\n","import {\n ConfirmationDialog,\n PluginHomePageActionsProps,\n useAuthController,\n useSnackbarController\n} from \"@firecms/core\";\nimport { DeleteIcon, IconButton, Menu, MenuItem, MoreVertIcon, SettingsIcon, } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useState } from \"react\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\n\nexport function HomePageEditorCollectionAction({\n path,\n collection\n }: PluginHomePageActionsProps) {\n\n\n const snackbarController = useSnackbarController();\n const authController = useAuthController();\n const configController = useCollectionsConfigController();\n const collectionEditorController = useCollectionEditorController();\n\n const permissions = collectionEditorController.configPermissions({\n user: authController.user,\n collection\n });\n\n const onEditCollectionClicked = () => {\n collectionEditorController?.editCollection({\n id: collection.id,\n parentCollectionIds: []\n });\n };\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n return <>\n\n <div>\n {permissions.deleteCollections &&\n <Menu\n trigger={<IconButton>\n <MoreVertIcon size={\"small\"}/>\n </IconButton>}\n >\n <MenuItem\n dense={true}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setDeleteRequested(true);\n }}>\n <DeleteIcon/>\n Delete\n </MenuItem>\n\n </Menu>\n\n }\n\n {permissions.editCollections &&\n <IconButton\n onClick={(event) => {\n onEditCollectionClicked();\n }}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>}\n </div>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete this collection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>}/>\n </>;\n\n}\n","import { EntityTableController, ResolvedProperty } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip } from \"@firecms/ui\";\nimport React from \"react\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function CollectionViewHeaderAction({\n propertyKey,\n onHover,\n property,\n fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: {\n property: ResolvedProperty,\n propertyKey: string,\n onHover: boolean,\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n tableController: EntityTableController;\n}) {\n\n const collectionEditorController = useCollectionEditorController();\n\n return (\n <Tooltip\n asChild={true}\n title={\"Edit\"}>\n <IconButton\n className={onHover ? \"bg-white dark:bg-surface-950\" : \"hidden\"}\n onClick={() => {\n collectionEditorController.editProperty({\n propertyKey,\n property,\n editedCollectionId: collection.id,\n parentCollectionIds,\n collection,\n existingEntities: tableController.data ?? []\n });\n }}\n size={\"small\"}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n )\n}\n","import { EntityTableController, getDefaultPropertiesOrder, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Tooltip } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function PropertyAddColumnComponent({\n fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: {\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n tableController: EntityTableController;\n}) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n return (\n <Tooltip\n asChild={true}\n title={canEditCollection ? \"Add new property\" : \"You don't have permission to add new properties\"}>\n <div\n className={\"p-0.5 w-20 h-full flex items-center justify-center cursor-pointer bg-surface-100 bg-opacity-40 hover:bg-surface-100 dark:bg-surface-950 dark:bg-opacity-40 dark:hover:bg-surface-950\"}\n // className={onHover ? \"bg-white dark:bg-surface-950\" : undefined}\n onClick={() => {\n collectionEditorController.editProperty({\n editedCollectionId: collection.id,\n parentCollectionIds,\n currentPropertiesOrder: getDefaultPropertiesOrder(collection),\n collection,\n existingEntities: tableController.data\n });\n }}>\n <AddIcon color={\"inherit\"}/>\n </div>\n </Tooltip>\n )\n}\n","import { AddIcon, Button } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionButton() {\n const collectionEditorController = useCollectionEditorController();\n return <div className={\"bg-surface-50 dark:bg-surface-900 min-w-fit rounded\"}>\n <Button className={\"min-w-fit\"}\n variant={\"outlined\"}\n onClick={() => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_button\"\n })}>\n <AddIcon/>\n New collection\n </Button>\n </div>\n}\n","import equal from \"react-fast-compare\"\n\nimport { CollectionActionsProps, mergeDeep, useAuthController, useSnackbarController } from \"@firecms/core\";\nimport { Button, SaveIcon, Tooltip, UndoIcon, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionActionStart({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const configController = useCollectionsConfigController();\n const snackbarController = useSnackbarController();\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n let saveDefaultFilterButton = null;\n if (!equal(getObjectOrNull(tableController.filterValues), getObjectOrNull(collection.initialFilter)) ||\n !equal(getObjectOrNull(tableController.sortBy), getObjectOrNull(collection.initialSort))) {\n saveDefaultFilterButton = <>\n <Tooltip\n asChild={true}\n title={tableController.sortBy || tableController.filterValues ? \"Save default filter and sort\" : \"Clear default filter and sort\"}>\n <Button\n color={\"primary\"}\n size={\"small\"}\n variant={\"outlined\"}\n onClick={() => configController\n ?.saveCollection({\n id: collection.id,\n parentCollectionIds,\n collectionData: mergeDeep(collection as PersistedCollection,\n {\n initialFilter: tableController.filterValues ?? null,\n initialSort: tableController.sortBy ?? null\n })\n }).then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"Default config saved\"\n });\n })}>\n <SaveIcon/>\n </Button>\n </Tooltip>\n\n {(collection.initialFilter || collection.initialSort) && <Tooltip\n title={\"Reset to default filter and sort\"}>\n <Button\n color={\"primary\"}\n size={\"small\"}\n variant={\"text\"}\n onClick={() => {\n tableController.clearFilter?.();\n if (collection?.initialFilter)\n tableController.setFilterValues?.(collection?.initialFilter);\n if (collection?.initialSort)\n tableController.setSortBy?.(collection?.initialSort);\n }}>\n <UndoIcon/>\n </Button>\n </Tooltip>}\n </>;\n }\n\n return <>\n {canEditCollection && saveDefaultFilterButton}\n </>\n\n}\n\nfunction getObjectOrNull(o?: object): object | null {\n if (o && Object.keys(o).length === 0)\n return o\n return o ?? null;\n}\n","import { PluginHomePageAdditionalCardsProps, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Card, cls, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionCard({\n group,\n context\n }: PluginHomePageAdditionalCardsProps) {\n\n if (!context.navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n return (\n <Card className={cls(\"h-full p-4 min-h-[124px]\")}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n initialValues: group ? { group } : undefined,\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n\n <div\n className=\"flex items-center justify-center h-full w-full flex-grow flex-col\">\n <AddIcon color=\"primary\" size={\"large\"}/>\n <Typography color=\"primary\"\n variant={\"caption\"}\n className={\"font-medium\"}>{\"Add new collection\".toUpperCase()}</Typography>\n\n {!canCreateCollections &&\n <Typography variant={\"caption\"}>You don't have permissions to create\n collections</Typography>\n }\n </div>\n\n </Card>\n );\n}\n","import React from \"react\";\nimport { FireCMSPlugin, useAuthController, useNavigationController, User } from \"@firecms/core\";\nimport { ConfigControllerProvider } from \"./ConfigControllerProvider\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { EditorCollectionAction } from \"./ui/EditorCollectionAction\";\nimport { HomePageEditorCollectionAction } from \"./ui/HomePageEditorCollectionAction\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { CollectionViewHeaderAction } from \"./ui/CollectionViewHeaderAction\";\nimport { PropertyAddColumnComponent } from \"./ui/PropertyAddColumnComponent\";\nimport { NewCollectionButton } from \"./ui/NewCollectionButton\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"./useCollectionEditorController\";\nimport { EditorCollectionActionStart } from \"./ui/EditorCollectionActionStart\";\nimport { NewCollectionCard } from \"./ui/NewCollectionCard\";\n\nexport interface CollectionConfigControllerProps<EC extends PersistedCollection = PersistedCollection, USER extends User = User> {\n\n /**\n * Firebase app where the configuration is saved.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Define what actions can be performed on the configuration.\n */\n configPermissions?: CollectionEditorPermissionsBuilder<USER, EC>;\n\n /**\n * The words you define here will not be allowed to be used as group\n * names when creating collections.\n * e.g. [\"admin\"]\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n collectionInference?: CollectionInference;\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n getUser?: (uid: string) => USER | null;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n includeIntroView?: boolean;\n\n}\n\n/**\n * Use this hook to initialise the Collection Editor plugin.\n * This is likely the only hook you will need to use.\n * @param firebaseApp Firebase app where your project data lives.\n * @param configPermissions\n * @param reservedGroups\n * @param extraView\n * @param getData\n * @param getUser\n * @param collectionInference\n */\nexport function useCollectionEditorPlugin<EC extends PersistedCollection = PersistedCollection, USER extends User = User>\n({\n collectionConfigController,\n configPermissions,\n reservedGroups,\n extraView,\n getUser,\n collectionInference,\n getData,\n onAnalyticsEvent,\n includeIntroView = true\n }: CollectionConfigControllerProps<EC, USER>): FireCMSPlugin<any, any, PersistedCollection> {\n\n return {\n key: \"collection_editor\",\n loading: collectionConfigController.loading,\n provider: {\n Component: ConfigControllerProvider,\n props: {\n collectionConfigController,\n configPermissions,\n collectionInference,\n reservedGroups,\n extraView,\n getUser,\n getData,\n onAnalyticsEvent,\n }\n },\n homePage: {\n additionalActions: <NewCollectionButton/>,\n additionalChildrenStart: includeIntroView ? <IntroWidget/> : undefined,\n // additionalChildrenEnd: <RootCollectionSuggestions introMode={introMode}/>,\n CollectionActions: HomePageEditorCollectionAction,\n AdditionalCards: NewCollectionCard,\n },\n collectionView: {\n CollectionActionsStart: EditorCollectionActionStart,\n CollectionActions: EditorCollectionAction,\n HeaderAction: CollectionViewHeaderAction,\n AddColumnComponent: PropertyAddColumnComponent\n }\n };\n}\n\nexport function IntroWidget() {\n\n const navigation = useNavigationController();\n if (!navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n if (!navigation.initialised || (navigation.collections ?? []).length > 0) {\n return null;\n }\n\n return (\n <Paper\n className={\"my-4 px-4 py-6 flex flex-col bg-white dark:bg-surface-accent-800 gap-2\"}>\n <Typography variant={\"subtitle2\"} className={\"uppercase\"}>No collections found</Typography>\n <Typography>\n Start building collections in FireCMS easily. Map them to your existing\n database data, import from files, or use our templates.\n </Typography>\n {canCreateCollections && <Button\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n <AddIcon/>Create your first collection\n </Button>}\n <Typography color={\"secondary\"}>\n You can also define collections programmatically.\n </Typography>\n </Paper>\n );\n}\n","import {\n EntityCallbacks,\n EntityCollection,\n joinCollectionLists,\n makePropertiesEditable,\n ModifyCollectionProps,\n Properties\n} from \"@firecms/core\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\n/**\n * Function in charge of merging collections defined in code with those stored in the backend.\n */\nexport const mergeCollections = (baseCollections: EntityCollection[],\n backendCollections: PersistedCollection[] = [],\n modifyCollection?: (props: ModifyCollectionProps) => EntityCollection | void\n) => {\n\n const markAsEditable = (c: PersistedCollection) => {\n makePropertiesEditable(c.properties as Properties);\n c.subcollections?.forEach(markAsEditable);\n };\n\n backendCollections.forEach(markAsEditable);\n\n const result = joinCollectionLists(baseCollections, backendCollections, [], modifyCollection);\n\n // sort the collections so they are in the same order as the base collections\n result.sort((a, b) => baseCollections.findIndex(c => c.id === a.id) - baseCollections.findIndex(c => c.id === b.id));\n console.debug(\"Collections result\", {\n baseCollections,\n backendCollections,\n result\n });\n\n return result;\n}\n","import { ErrorView, unslugify, useNavigationController } from \"@firecms/core\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { Button } from \"@firecms/ui\";\n\nexport function MissingReferenceWidget({ path: pathProp }: {\n path: string\n}) {\n const navigation = useNavigationController();\n const path = getLastSegment(pathProp);\n const parentCollectionIds = navigation.getParentCollectionIds(pathProp);\n const collectionEditor = useCollectionEditorController();\n return <div className={\"p-1 flex flex-col items-center\"}>\n <ErrorView error={\"No collection for path: \" + path}/>\n <Button className={\"mx-2\"} variant={\"outlined\"}\n size={\"small\"}\n onClick={() => {\n collectionEditor.createCollection({\n initialValues: { path, name: unslugify(path) },\n parentCollectionIds,\n redirect: false,\n sourceClick: \"missing_reference\"\n });\n }}>\n Create\n </Button>\n </div>;\n}\n\nfunction getParentPathSegments(path: string): string[] {\n const segments = path.split(\"/\");\n return segments.filter((segment, index) => index % 2 === 0 && index !== segments.length - 1);\n}\n\nfunction getLastSegment(path: string): string {\n const segments = path.split(\"/\");\n return segments[segments.length - 1];\n}\n"],"names":["YupSchema","Yup","object","shape","id","string","required","name","path","useCollectionEditorController","useContext","CollectionEditorContext","LayoutModeSwitch","t0","$","_c","value","onChange","className","t1","cls","t2","t3","Symbol","for","Typography","t4","t5","t6","t7","t8","VerticalSplitIcon","jsx","t9","Tooltip","Card","t10","t11","t12","t13","t14","SquareIcon","t15","t16","jsxs","t17","t18","CollectionDetailsForm","isNewCollection","reservedGroups","groups","parentCollection","children","groupRef","React","useRef","values","setFieldValue","handleChange","touched","errors","setFieldTouched","isSubmitting","submitCount","useFormex","iconDialogOpen","setIconDialogOpen","useState","advancedPanelExpanded","setAdvancedPanelExpanded","databaseId","undefined","updateDatabaseId","pathTouched","getIn","toSnakeCase","idTouched","singularNameTouched","singular","updateName","useEffect","IconForView","collectionIcon","groupOptions","filter","group","includes","ref","autoCompleteOpen","setAutoCompleteOpen","useAutoComplete","isSubcollection","customIdValue","customId","showErrors","T0","Container","IconButton","Chip","t19","t20","t21","e","target","t22","Boolean","t23","TextField","t24","t25","t26","FieldCaption","t27","t28","t29","t30","t31","t32","Field","DebouncedTextField","t33","t34","t35","t36","t37","event","Autocomplete","length","map","group_0","index","AutocompleteItem","t38","openEntityMode","t39","t40","t41","history","t42","v","t43","t44","BooleanSwitchWithLabel","t45","t46","t47","SettingsIcon","t48","t49","t50","t51","t52","t53","t54","t55","singularName","t56","e_0","t57","t58","t59","t60","t61","t62","t63","sideDialogWidth","t64","e_1","value_0","isNaN","Number","t65","t66","t67","CloseIcon","t68","t69","t70","t71","t72","t73","t74","t75","description","t76","t77","t78","t79","t80","t81","t82","defaultSize","t83","_temp2","t84","Select","_temp","t85","t86","v_0","Error","t87","t88","t89","t90","SelectItem","t91","_temp3","t92","v_1","t93","collectionGroup","t94","t95","t96","t97","v_2","t98","textSearchEnabled","t99","t100","t101","t102","t103","ExpandablePanel","t104","t105","t106","height","t107","icon","t108","SearchIconsView","t109","Dialog","t110","value_3","value_2","toUpperCase","value_1","DefaultDatabaseField","onDatabaseIdUpdate","idToPropertiesPath","replaceAll","namespaceToPropertiesPath","namespace","namespaceToPropertiesOrderPath","getFullId","propertyKey","propertyNamespace","getFullIdPath","keyWithNamespace","EnumForm","enumValues","onValuesChanged","onError","updateIds","disabled","allowDataInference","getData","forEach","enumValue","label","hasError","Object","keys","initialValues","validateOnChange","validation","formex","useCreateFormex","values_0","errors_0","Formex","EnumFormFields","enumValuesPath","shouldUpdateId","lastInternalIdAdded","setLastInternalIdAdded","editDialogIndex","setEditDialogIndex","inferring","setInferring","Set","inferredValuesRef","inferredValues","current","internalId","justAdded","entryError","has","buildEntry","then","data","flatData","flat","fieldData","Array","from","currentEnumValues","foundEnumValues","extractEnumFromValues","newEnumValues","some","enumValue_0","add","catch","finally","inferValues","ListIcon","Button","CircularProgress","AutorenewIcon","ArrayContainer","Paper","console","error","EnumEntry","memo","EnumEntryInternal","updateId","autoFocus","onDialogOpen","inferredEntry","shouldUpdateIdRef","idValue","labelValue","currentLabelRef","Badge","areEqual","prevProps","nextProps","equal","EnumEntryDialog","open","onClose","idError","open_0","DialogTitle","DialogContent","DialogActions","SwitchControl","field","form","tooltip","size","allowIndeterminate","checked","formControlLabel","GeneralPropertyValidation","validationRequired","validationUnique","field_0","form_0","validationRequiredMessage","StringPropertyValidation","lowercase","matches","max","min","trim","uppercase","matchesError","matchesValue","serializeRegExp","matchesStringValue","validationLowercase","validationUppercase","validationTrim","field_1","form_1","validationLength","validationMin","validationMax","validationMatches","ArrayPropertyValidation","ValidationPanel","RuleIcon","EnumPropertyField","multiselect","setFieldError","snackbarContext","useSnackbarController","defaultValue","valuesEnumValues","useMemo","resolveEnumValues","enumIds","type","message","Fragment","res","entry","toString","fileTypes","StoragePropertyField","multiple","existing","baseStoragePath","acceptedFiles","fileName","maxSize","storagePath","storeUrl","fileNameValue","storagePathValue","T1","maxSizeValue","storedValue","fileTypesValue","isArray","allFileTypesSelected","handleTypesChange","hasFilenameCallback","hasStoragePathCallback","CloudUploadIcon","entries","MultiSelectItem","preventDefault","stopPropagation","MultiSelect","parseInt","selected","join","editableProperty","property","isPropertyBuilder","eProperty","dataType","of","editable","removeNonEditableProperties","properties","_","key","propertyOrBuilder","reduce","a","b","PropertyFieldPreview","onClick","includeName","includeEditButton","propertyConfigs","useCustomizationController","getFieldConfig","propertyConfig","borderColorClass","PropertyConfigBadge","cardClickableMixin","cardSelectedMixin","cardMixin","ErrorBoundary","NonEditablePropertyPreview","FunctionsIcon","DoNotDisturbOnIcon","PropertyTree","selectedPropertyKey","onPropertyClick","propertiesOrder","propertiesOrderProp","additionalFields","onPropertyMove","onPropertyRemove","inferredPropertyKeys","collectionEditable","result","destination","startIndex","source","endIndex","newPropertiesOrder","removed","splice","onDragEnd","droppableProvided","droppableSnapshot","droppableProps","innerRef","additionalField","find","warn","Draggable","provided","snapshot","isDragging","placeholder","Droppable","DragDropContext","isSelected","startsWith","wasSelected","PropertyTreeEntry","isPropertyInferred","fullId","fullIdPath","subtree","defaultBorderMixin","left","top","bottom","RemoveIcon","DragHandleIcon","dragHandleProps","draggableProps","MapPropertyField","propertyDialogOpen","setPropertyDialogOpen","setSelectedPropertyKey","selectedPropertyNamespace","setSelectedPropertyNamespace","currentPropertiesOrder","onPropertyCreated","propertiesPath","propertiesOrderPath","currentPropertiesOrder_0","p","deleteProperty","selectedPropertyFullId","selectedProperty","empty","propertiesOrder_0","namespace_0","AddIcon","propertyKey_0","namespace_1","spreadChildren","RepeatPropertyField","ofProperty","ofPropertyError","onPropertyChanged","widget","CommonPropertyFields","forwardRef","disabledId","autoUpdateId","nameError","descriptionError","newNameValue","fontSize","newIdValue","nameTouched","unslugify","StringPropertyField","widgetId","BooleanPropertyField","BlockPropertyField","oneOf","addChildButton","namespace_2","NumberPropertyValidation","validationLessThan","validationMoreThan","validationPositive","validationNegative","validationInteger","NumberPropertyField","parseFloat","ReferencePropertyField","navigation","useNavigationController","pathPath","pathValue","pathError","CollectionsSelect","props","collections","ungroupedCollections","selectedCollection","collection","SelectGroup","collection_0","collection_1","flatMap","collection_2","col","DateTimePropertyField","modeValue","modeError","autoValueValue","autoValueError","modePath","autoValuePath","AdvancedPropertyValidation","hideFromCollection","readOnly","KeyValuePropertyField","updatePropertyFromWidget","propertyData","selectedWidgetId","updatedProperty","mergeDeep","storage","multiline","markdown","email","url","keyValue","mode","UrlPropertyField","urlValue","supportedFieldsIds","supportedFields","DEFAULT_FIELD_CONFIGS","config","MarkdownPropertyField","PropertyForm","includeIdAndName","autoOpenTypeSelect","existingProperty","inArray","existingPropertyKeys","onPropertyChangedImmediate","onDismiss","onDelete","initialErrors","forceShowErrors","getController","initialValue","previousId","lastSubmittedProperty","property_0","params","doOnPropertyChanged","newPropertyWithId","controller","debug","id_0","property_1","resetForm","validateName","validateId","isValidRegExp","debugId","validateOnInitialRender","onSubmit","formexController","PropertyFormDialog","formProps","onCancel","onOkClicked","formexRef","helpers","handleSubmit","PropertyEditFormFields","setValues","includeIdAndTitle","selectOpen","setSelectOpen","deleteDialogOpen","setDeleteDialogOpen","getFieldId","selectedFieldConfigId","setSelectedFieldConfigId","deferredValues","useDeferredValue","nameFieldRef","selectedWidgetError","isEmptyObject","newSelectedWidgetId","setTimeout","focus","onWidgetSelectChanged","childComponent","InfoLabel","hasValue","DeleteIcon","ConfirmationDialog","idRegEx","match","WIDGET_TYPE_MAP","text_field","switch","select","multi_select","number_input","number_select","multi_number_select","file_upload","multi_file_upload","reference","multi_references","date_time","key_value","repeat","custom_array","block","WidgetSelectView","initialProperty","onValueChange","onOpenChange","allSupportedFields","concat","displayedWidgets","key_0","propertyConfig_1","baseProperty","baseFieldConfig","computedFieldConfig","_temp4","fieldBackgroundDisabledMixin","fieldBackgroundHoverMixin","fieldBackgroundMixin","key_2","propertyConfig_2","groupKey","key_1","propertyConfig_0","WidgetSelectViewItem","shouldWarnChangingDataType","WarningIcon","camelCase","str","toLowerCase","parts","split","slice","part","charAt","substring","GetCodeDialog","snackbarController","code","JSON5","stringify","collectionToCode","Highlight","themes","vsDark","navigator","clipboard","writeText","ContentCopyIcon","style","tokens","getLineProps","getTokenProps","line","i","token","propertyCleanup","valueCopy","clone","childRes","fromBuilder","resolved","resolvedProperties","initialFilter","initialSort","subcollections","CollectionPropertiesEditorForm","propertyErrorsRef","onPropertyError","setDirty","extraIcon","getUser","doCollectionInference","dirty","largeLayout","useLargeLayout","asDialog","selectedPropertyIndex","setSelectedPropertyIndex","codeDialogOpen","setCodeDialogOpen","inferringProperties","setInferringProperties","newPropertyDialogOpen","setNewPropertyDialogOpen","setInferredPropertyKeys","currentPropertiesOrderRef","inferPropertiesFromData","newCollection","newPropertyKeys","updatedProperties","acc","updatedPropertiesOrder","updatePropertiesOrder","getCurrentPropertiesOrder","indexOf","propertyPath","previousFullId","previousPropertyPath","onPropertyErrorInternal","closePropertyDialog","emptyCollection","usedPropertiesOrder","owner","ownerId","body","displayName","CodeIcon","UnsavedChangesDialog","handleOk","handleCancel","title","EntityCustomViewsSelectDialog","entityViews","view","SubcollectionsEditTab","configController","collectionInference","parentCollectionIds","contextEntityViews","subcollectionToDelete","setSubcollectionToDelete","addEntityViewDialogOpen","setAddEntityViewDialogOpen","viewToDelete","setViewToDelete","currentDialog","setCurrentDialog","setSubcollections","T2","T3","resolvedEntityViews","resolveEntityView","hardCodedEntityViews","totalEntityViews","Table","TableBody","subcollection","TableRow","editedCollectionId","TableCell","e_2","Alert","e_3","deleteCollection","e_4","e_5","updatedCollection","selectedViewKey","e_6","view_0","productsCollectionTemplate","makePropertiesEditable","brand","main_image","available","columnWidth","price","requiredMessage","images","related_products","metadata","added_on","autoValue","blogCollectionTemplate","header_image","cacheControl","content","typeField","valueField","text","quote","products","previewProperties","created_on","status","published","draft","publish_date","clearable","reviewed","tags","previewAsTag","usersCollectionTemplate","emailVerified","phone","favourite_products","photoURL","pagesCollectionTemplate","slug","unique","matchesMessage","hero_section","headline","subhead","background_image","call_to_action","call_to_action_link","section","image","link","slider","sidebar","seo_metadata","meta_title","meta_description","focus_keywords","footer_override","last_updated","is_published","CollectionEditorWelcomeView","pathSuggestions","onContinue","existingCollectionPaths","loadingPathSuggestions","setLoadingPathSuggestions","filteredPathSuggestions","setFilteredPathSuggestions","suggestions","filteredSuggestions","s","c","noSuggestions","suggestion","Icon","ImportFileUpload","TemplateButton","subtitle","CollectionEditorImportMapping","importConfig","setSelectedProperty","newPropertiesOrder_0","newHeadersMapping","headersMapping","setHeadersMapping","importData","importKey","fullId_0","propertyPath_0","d","inferredNewProperty","buildPropertyFromData","getInferenceType","onPropertyTypeChanged","property_2","importKey_0","isIdColumn","ImportNewPropertyFieldPreview","propertyKey_1","DataNewPropertiesMapping","p_0","PropertySelect","fieldId","newProperty","widget_0","PropertySelectItem","optionDisabled","CollectionEditorImportDataPreview","authController","useAuthController","loading","setLoading","loadEntities","mappedData","convertDataToEntity","idColumn","defaultValues","setEntities","selectionController","useSelectionController","CircularProgressCenter","entities","dataLoading","noMoreToLoad","EntityCollectionTable","cleanPropertiesFromImport","parentSlug","slugify","fullSlug","slugifiedResult","firstKey","CollectionEditorDialog","formDirty","setFormDirty","unsavedChangesDialogOpen","setUnsavedChangesDialogOpen","handleClose","CollectionEditor","topLevelNavigation","initialValuesProp","includeTemplates","collectionsInThisLevel","existingPaths","existingIds","setCollection","initialLoadingCompleted","setInitialLoadingCompleted","initialised","getCollectionFromPaths","initialCollection","randomString","applyPropertyConfigs","coolIconKeys","Math","floor","random","user","uid","CollectionEditorInternal","fullPath","extraView","existingEntities","useImportConfig","initialView","currentView","setCurrentView","setError","saveCollection","collectionData","setNextMode","inUse","parentPaths","inferCollectionFromData","Promise","resolve","inferredCollection","newCollectionState","schema","validateSync","abortEarly","inner","err","validatePath","formController","updatedFullPath","convertIdsToPaths","resolvedPath","resolveIdsFrom","getDataWithPath","existingData","push","onImportDataSet","setInUse","buildEntityPropertiesFromData","setIdColumn","setImportData","filteredHeadingsOrder","setHeadingsOrder","setOriginProperties","mappedHeadings","validValues","onImportMappingComplete","isMergedCollection","merged","deleteRequested","setDeleteRequested","Tabs","Tab","View","ImportSaveInProgress","importedCollection","removeUndefined","validate","ErrorView","ArrowBackIcon","LoadingButton","CheckIcon","rest","propertiesResult","applyPropertiesConfig","internalProperty","subpaths","removeInitialAndTrailingSlashes","ConfigControllerContext","createContext","ConfigControllerProvider","collectionConfigController","configPermissions","onAnalyticsEvent","navigate","useNavigate","currentPropertyDialog","setCurrentPropertyDialog","defaultConfigPermissions","redirect","editCollection","parentCollectionIds_0","existingEntities_0","lastIndexOf","propertyKeyWithoutNamespace","editProperty","parentCollectionIds_1","parentCollection_0","sourceClick","createCollection","buildUrlCollectionPath","saveProperty","createCollections","editCollections","deleteCollections","EditorCollectionAction","tableController","navigationController","collectionEditorController","getCollectionFromIds","canEditCollection","editorButton","useCollectionsConfigController","HomePageEditorCollectionAction","permissions","onEditCollectionClicked","Menu","MoreVertIcon","MenuItem","event_0","CollectionViewHeaderAction","onHover","PropertyAddColumnComponent","getDefaultPropertiesOrder","NewCollectionButton","EditorCollectionActionStart","saveDefaultFilterButton","getObjectOrNull","filterValues","sortBy","SaveIcon","clearFilter","setFilterValues","setSortBy","UndoIcon","o","NewCollectionCard","context","canCreateCollections","useCollectionEditorPlugin","includeIntroView","Component","additionalActions","additionalChildrenStart","CollectionActions","AdditionalCards","CollectionActionsStart","HeaderAction","AddColumnComponent","provider","homePage","collectionView","IntroWidget","mergeCollections","baseCollections","backendCollections","modifyCollection","markAsEditable","joinCollectionLists","sort","findIndex","MissingReferenceWidget","pathProp","getLastSegment","getParentCollectionIds","collectionEditor","segments"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAEO,QAAMA,YAAYC,eAAIC,OAAO,EAAEC,MAAM;AAAA,IACxCC,IAAIH,eAAII,SAASC,SAAS,UAAU;AAAA,IACpCC,MAAMN,eAAII,SAASC,SAAS,UAAU;AAAA,IACtCE,MAAMP,eAAII,OAAO,EAAEC,SAAS,UAAU;AAAA,EAC1C,CAAC;ACEYG,QAAAA,gCAAgCA,MAAA;AAAA,WAAkCC,MAAAA,WAAAC,uBAAkC;AAAA,EAAC;ACN3G,WAAAC,iBAAAC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA0B,UAAA;AAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAAL;AAQhCM,QAAAA;AAAAL,QAAAA,SAAAI,WAAA;AAE0BC,WAAAC,OAAIF,SAAS;AAACJ,aAAAI;AAAAJ,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAC,QAAAA;AAAA,QAAAR,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;0CAChCC,iBAAoB,SAAA,SAAgB,OAAA,aAAwB,WAAA,UAAU,UAAa,gBAAA,CAAA;AACpEH,WAAAF,OAAI,qBAAqB;AAACN,aAAAO;AAAAP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAD,WAAAP,EAAA,CAAA;AAAAQ,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,SAAAG,UAAA;AAIrBS,WAAAA,MAAMT,SAAS,YAAY;AAACH,aAAAG;AAAAH,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAKjCa,UAAAA,KAAAX,UAAU,eAAe,uCAAuC;AAA4CY,QAAAA;AAAAd,QAAAA,SAAAa,IAAA;AAJrGC,WAAAR,GAAAA,IACP,oHACA,iDACA,sGACAO,EACJ;AAACb,aAAAa;AAAAb,aAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAC,QAAAA;AAAA,QAAAhB,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAEDK,0CAACE,GAAmB,mBAAA,EAAA;AACpBD,WAACE,2BAAA,IAAAP,eAAA,EAAoB,SAAA,SAAS,UAE9B,cAAA;AAAaX,aAAAe;AAAAf,aAAAgB;AAAAA,IAAAA,OAAA;AAAAD,WAAAf,EAAA,CAAA;AAAAgB,WAAAhB,EAAA,CAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAAY,EAAAA,MAAAA,MAAAZ,UAAAc,IAAA;AAbpB,WAAAI,2BAAAA,IAAAE,GAAAA,WAAe,OAAA,sCACZ,0CAACC,GACY,MAAA,EAAA,SAAAT,IACE,WAAAE,IAOXC,UAAAA;AAAAA,QAAAA;AAAAA,QACAC;AAAAA,MAAAA,EAAAA,CAGJ,EACJ,CAAA;AAAUhB,cAAAY;AAAAZ,cAAAc;AAAAd,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAAtB,QAAAA,UAAAG,UAAA;AAIOmB,YAAAA,MAAMnB,SAAS,aAAa;AAACH,cAAAG;AAAAH,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAKlCuB,UAAAA,MAAArB,UAAU,gBAAgB,uCAAuC;AAA4CsB,QAAAA;AAAAxB,QAAAA,UAAAuB,KAAA;AAJtGC,YAAAlB,GAAAA,IACP,oHACA,iDACA,sGACAiB,GACJ;AAACvB,cAAAuB;AAAAvB,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAAC,QAAAA;AAAA,QAAA1B,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAEDe,2CAACE,GAAY,YAAA,EAAA;AACbD,YAACR,2BAAA,IAAAP,eAAA,EAAoB,SAAA,SAAS,UAE9B,eAAA;AAAaX,cAAAyB;AAAAzB,cAAA0B;AAAAA,IAAAA,OAAA;AAAAD,YAAAzB,EAAA,EAAA;AAAA0B,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA,QAAA5B,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAwB,KAAA;AAbpB,YAAAN,2BAAAA,IAAAE,GAAAA,WAAe,OAAA,kCACZ,0CAACC,GACY,MAAA,EAAA,SAAAC,KACE,WAAAE,KAOXC,UAAAA;AAAAA,QAAAA;AAAAA,QACAC;AAAAA,MAAAA,EAAAA,CAGJ,EACJ,CAAA;AAAU1B,cAAAsB;AAAAtB,cAAAwB;AAAAxB,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA,QAAA7B,EAAA4B,EAAAA,MAAAA,OAAA5B,UAAAmB,IAAA;AAER,YAAAW,2BAAA,KAAA,OApCU,EAAA,WAAAtB,IAEZW,UAAAA;AAAAA,QAAAA;AAAAA,QAiBAS;AAAAA,MAAAA,GAiBJ;AAAM5B,cAAA4B;AAAA5B,cAAAmB;AAAAnB,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA,QAAA/B,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;2CACLC,iBAAoB,SAAA,WAAkB,OAAA,aAAwB,WAAA,UAAU,UAAkE,qEAAA,CAAA;AAAaX,cAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,EAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAA,QAAAhC,EAAAK,EAAAA,MAAAA,MAAAL,UAAA6B,KAAA;mDAvCrI,EAAA,WAAAxB,IACnBE,UAAAA;AAAAA,QAAAA;AAAAA,QACAsB;AAAAA,QAqCAE;AAAAA,MAAAA,GACJ;AAAM/B,cAAAK;AAAAL,cAAA6B;AAAA7B,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AAxCCgC,WAAAA;AAAAA,EAwCD;ACzBH,WAAAC,sBAAAlC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,GAAA;AAA+B,UAAA;AAAA,MAAAiC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAAvC;AAmBlCwC,UAAAA,WAAiBC,MAAAC,WAAmC;AACpD,UAAA;AAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,QASIC,iBAA4B;AAEuB,kCAAA;AAEvD,UAAA,CAAAC,gBAAAC,iBAAA,IAA4CC,MAAAA,cAAc;AAC1D,UAAA,CAAAC,uBAAAC,wBAAA,IAA0DF,MAAAA,cAAc;AAAEhD,QAAAA;AAAAL,QAAAA,SAAA2C,eAAA;AAEjDtC,WAAAmD,CAAA,eAAA;AACP,sBAAA,cAAcA,cAAUC,MAAa;AAAA,MAAC;AACvDzD,aAAA2C;AAAA3C,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAFD,UAAA0D,mBAAyBrD;AAExBE,QAAAA;AAAAP,QAAAA,EAAAkC,CAAAA,MAAAA,mBAAAlC,SAAA2C,iBAAA3C,EAAA,CAAA,MAAA6C,SAAA;AAEkBtC,WAAAd,CAAA,SAAA;AACfkD,sBAAc,QAAQlD,IAAI;AAE1BkE,cAAAA,cAAoBC,OAAAA,MAAMf,SAAS,MAAM;AACrC,YAAA,CAACc,eAAezB,mBAAmBzC,MAAI;AACzB,wBAAA,QAAQoE,iBAAYpE,IAAI,CAAC;AAAA,QAAA;AAG3CqE,cAAAA,YAAkBF,OAAAA,MAAMf,SAAS,IAAI;AACjC,YAAA,CAACiB,aAAa5B,mBAAmBzC,MAAI;AACvB,wBAAA,MAAMoE,iBAAYpE,IAAI,CAAC;AAAA,QAAA;AAGzCsE,cAAAA,sBAA4BH,OAAAA,MAAMf,SAAS,cAAc;AACrD,YAAA,CAACkB,uBAAuB7B,mBAAmBzC,MAAI;AACjC,wBAAA,gBAAgBuE,cAASvE,IAAI,CAAC;AAAA,QAAA;AAAA,MAAC;AAGpDO,aAAAkC;AAAAlC,aAAA2C;AAAA3C,aAAA6C;AAAA7C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAlBD,UAAAiE,aAAmB1D;AAkBjBC,QAAAA;AAAAI,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAA8C,OAAAxD,IAAA;AAEQkB,WAAAA,MAAA;AAAA,YACFsC,OAAMxD,IAAA;AACNiE,uCAA6B;AAAA,QAAA;AAAA,MAAC;AAEnC,WAAA,CAACT,OAAMxD,EAAA;AAAI,QAAA,CAAA,IAAAwD,OAAAxD;AAAAU,aAAAQ;AAAAR,aAAAY;AAAAA,IAAAA,OAAA;AAAAJ,WAAAR,EAAA,CAAA;AAAAY,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAJdkE,UAAAA,UAAU1D,IAIPI,EAAW;AAACC,QAAAA;AAAAb,QAAAA,SAAA0C,QAAA;0CAESyB,KAAAA,aAA8BzB,EAAAA,kBAAAA,OAAS,CAAA;AAAA1C,aAAA0C;AAAA1C,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAA/D,UAAAoE,iBAAuBvD;AAEvBwD,UAAAA,eAAqBjC,QAAMkC,OAAAC,CAAAA,UAAA,CAAqBpC,gBAAcqC,SAAWD,KAAK,CAAA;AAAGzD,QAAAA;AAAA,QAAAd,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAM7D,WAAA;AAAA,QAAA+D,KACXlC;AAAAA,MAAQ;AAChBvC,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAND,UAAA;AAAA,MAAA0E;AAAAA,MAAAC;AAAAA,IAAAA,IAIIC,GAAAA,gBAAgB9D,EAEnB;AAED+D,UAAAA,oBAA0BxC;AAEtByC,QAAAA;AACA,QAAA,OAAOpC,OAAMqC,aAAc,UAAQ;AACnBD,sBAAAA;AAAAA,IAAAA,OAAH;AACNpC,UAAAA,OAAMqC,aAAkB,MAAA;AACfD,wBAAAA;AAAAA,MAAAA,OAAH;AACNpC,YAAAA,OAAMqC,aAAmB,OAAA;AAChBD,0BAAAA;AAAAA,QAAAA,OAAH;AACNpC,cAAAA,OAAMqC,aAAc,YAAU;AACrBD,4BAAAA;AAAAA,UAAAA;AAAAA,QAAH;AAAA,MAAA;AAAA,IAAA;AAGjB,UAAAE,aAAmB/B,cAAe;AAGd,UAAAlC,KAAuB;AAClC,UAAAkE,KAAAC,GAAAA;AAAoB,UAAAlE,KAAK;AAAa,UAAAG,KAAgC;AAKtCG,UAAAA,MAACY,CAAAA,kBAAkB,OAAO;AAC1C,UAAAX,MAAAW,kBAAkB,mBAAmB,GAAGQ,QAAMjD,IAAA;AAAmB+B,QAAAA;AAAA,QAAAxB,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAuB,KAAA;AADtEC,2CAACb,GAAoB,YAAA,EAAA,SAAAW,KAA2C,WAAA,aAC3DC,UACL,KAAA;AAAavB,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAAzB,QAAAA,UAAA0D,oBAAA1D,EAAA0C,EAAAA,MAAAA,OAAAc,YAAA;AACb/B,2CAAC,sBAAiC,EAAA,YAAAiB,OAAMc,YACEE,oBAAAA,kBAAmB;AAAA1D,cAAA0D;AAAA,QAAA,EAAA,IAAAhB,OAAAc;AAAAxD,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAAA0B,QAAAA;AAAA,QAAA1B,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAM5CgB,YAAAA,MAAM0B,sBAAsB;AAACpD,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA5B,QAAAA,UAAAoE,gBAAA;AAJ9CxC,YAACV,2BAAAA,IAAAE,GAAAA,SAAA,EAAe,OAAA,eACE,SAAG,MACjB,UAACF,2BAAAA,IAAAiE,GAAAA,YAAA,EACU,OAAA,UACE,SAAAzD,KACK,yBAClB,CAAA,GACJ;AAAU1B,cAAAoE;AAAApE,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA7B,QAAAA,EAAAwB,EAAAA,MAAAA,OAAAxB,UAAAyB,OAAAzB,EAAA,EAAA,MAAA4B,KAAA;mDAdA,EAAA,WAAA,8CACVJ,UAAAA;AAAAA,QAAAA;AAAAA,QAGAC;AAAAA,QAGAG;AAAAA,MAAAA,GAQJ;AAAM5B,cAAAwB;AAAAxB,cAAAyB;AAAAzB,cAAA4B;AAAA5B,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA/B,QAAAA,UAAAqC,kBAAA;AAELA,YAAAA,mDAAqB+C,GAAkB,MAAA,EAAA,aAAA,cACpC,UAACtD,2BAAA,KAAAnB,GAAA,YAAA,EAAoB,SAAA,WAAW,UAAA;AAAA,QAAA;AAAA,QACDO,2BAAAA,IAA8B,KAA1BmB,EAAAA,UAAAA,iBAAgB5C,KAAM,CAAA;AAAA,MAAA,EAAA,CACzD,EACJ,CAAA;AAAOO,cAAAqC;AAAArC,cAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,EAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAA,QAAAhC,EAAA6B,EAAAA,MAAAA,OAAA7B,UAAA+B,KAAA;AAvBXC,4CAAA,OACIH,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAkBCE;AAAAA,MAAAA,GAML;AAAM/B,cAAA6B;AAAA7B,cAAA+B;AAAA/B,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AACU,UAAAqF,MAAyB;AAItBC,UAAAA,MAAA5C,OAAMjD,QAAS;AAAE8F,QAAAA;AAAAvF,QAAAA,UAAAiE,YAAA;AACdsB,YAAAC,CAAYvB,MAAAA,WAAWuB,EAACC,OAAAvF,KAAa;AAACF,cAAAiE;AAAAjE,cAAAuF;AAAAA,IAAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AAIzC,UAAA0F,MAAAV,cAAcW,QAAQ7C,OAAMrD,IAAK;AAACmG,QAAAA;AAAA5F,QAAAA,EAAAsF,EAAAA,MAAAA,OAAAtF,UAAAuF,OAAAvF,EAAA,EAAA,MAAA0F,KAAA;AAN7CE,YAAC1E,2BAAA,IAAA2E,GAAA,WAAA,EACU,OAAAP,KACG,UAAAC,KACH,OAAA,QACI,WAAG,MACd,UAAO,MACA,OAAAG,KAAqC;AAAA1F,cAAAsF;AAAAtF,cAAAuF;AAAAvF,cAAA0F;AAAA1F,cAAA4F;AAAAA,IAAAA,OAAA;AAAAA,YAAA5F,EAAA,EAAA;AAAA,IAAA;AAC3B,UAAA8F,MAAAjD,QAAOpD,QAASkG,QAAQ7C,OAAMrD,IAAK;AACnDsG,UAAAA,MAAAlD,QAAOpD,QAASkG,QAAQ7C,OAAMrD,IAAK,IAAIqD,OAAMrD,OAAQ;AAAgEuG,QAAAA;AAAA,QAAAhG,EAAA8F,EAAAA,MAAAA,OAAA9F,UAAA+F,KAAA;AAD1HC,YAAC9E,2BAAA,IAAA+E,mBAAA,EAAoB,OAAAH,KAChBC,UACL,KAAA;AAAe/F,cAAA8F;AAAA9F,cAAA+F;AAAA/F,cAAAgG;AAAAA,IAAAA,OAAA;AAAAA,YAAAhG,EAAA,EAAA;AAAA,IAAA;AAAAkG,QAAAA;AAAA,QAAAlG,EAAA4F,EAAAA,MAAAA,OAAA5F,UAAAgG,KAAA;AACb,YAAAlE,2BAAA,KAAA,OAXU,EAAA,WAAA,eACZ8D,UAAAA;AAAAA,QAAAA;AAAAA,QAOAI;AAAAA,MAAAA,GAGJ;AAAMhG,cAAA4F;AAAA5F,cAAAgG;AAAAhG,cAAAkG;AAAAA,IAAAA,OAAA;AAAAA,YAAAlG,EAAA,EAAA;AAAA,IAAA;AAE8BmG,UAAAA,MAAAtB,kBAAkB,KAAK;AAAeuB,QAAAA;AAAApG,QAAAA,UAAAmG,KAAA;AAA1D7F,YAAAA,GAAAA,IAAI,gBAAgB6F,GAAsC;AAACnG,cAAAmG;AAAAnG,cAAAoG;AAAAA,IAAAA,OAAA;AAAAA,YAAApG,EAAA,EAAA;AAAA,IAAA;AAItD,UAAAqG,OAACnE;AAEJ,UAAAoE,MAAAtB,cAAcW,QAAQ7C,OAAMpD,IAAK;AAAC6G,QAAAA;AAAA,QAAAvG,EAAAqG,EAAAA,MAAAA,OAAArG,UAAAsG,KAAA;AALhDC,YAACrF,2BAAA,IAAAsF,OAAA,OAAA,EAAY,MAAA,QACFC,IAAiBA,GAAAA,oBACd,OAAA,QACG,UAAAJ,KACV,UAAA,MACO,OAAAC,KAAqC;AAAAtG,cAAAqG;AAAArG,cAAAsG;AAAAtG,cAAAuG;AAAAA,IAAAA,OAAA;AAAAA,YAAAvG,EAAA,EAAA;AAAA,IAAA;AAE9B,UAAA0G,MAAA7D,QAAOnD,QAASiG,QAAQ7C,OAAMpD,IAAK;AACnDiH,UAAAA,MAAA9D,QAAOnD,QAASiG,QAAQ7C,OAAMpD,IAAK,IAC9BoD,OAAMpD,OACNmF,kBAAkB,qEAAqE;AAAyD+B,QAAAA;AAAA,QAAA5G,EAAA0G,EAAAA,MAAAA,OAAA1G,UAAA2G,KAAA;AAH1JC,YAAC1F,2BAAA,IAAA+E,mBAAA,EAAoB,OAAAS,KAChBC,UAGL,KAAA;AAAe3G,cAAA0G;AAAA1G,cAAA2G;AAAA3G,cAAA4G;AAAAA,IAAAA,OAAA;AAAAA,YAAA5G,EAAA,EAAA;AAAA,IAAA;AAAA6G,QAAAA;AAAA7G,QAAAA,EAAAoG,EAAAA,MAAAA,OAAApG,UAAAuG,OAAAvG,EAAA,EAAA,MAAA4G,KAAA;AAEb,YAAA9E,2BAAA,KAAA,OAdU,EAAA,WAAAsE,KACZG,UAAAA;AAAAA,QAAAA;AAAAA,QAOAK;AAAAA,MAAAA,GAMJ;AAAM5G,cAAAoG;AAAApG,cAAAuG;AAAAvG,cAAA4G;AAAA5G,cAAA6G;AAAAA,IAAAA,OAAA;AAAAA,YAAA7G,EAAA,EAAA;AAAA,IAAA;AAEL,UAAA8G,MAACjC,CAAAA,mBAAmB/C,2BAAA,KAAA,OAAA,EAAgB,WAAA,sCAEjC,UAAA;AAAA,MAAAZ,2BAAA,IAAC2E,GAAiB,WAAA,EAAA,OAAAb,cAAcW,QAAQ7C,OAAMyB,KAAM,GAC/BvB,UAAAA,cACH,OAAAN,OAAM6B,SAAU,IACV,cAAA,OACH,UAAAwC,CAAWpE,UAAAA,cAAc,SAASoE,MAAKtB,OAAAvF,KAAa,GACxD,MAAA,SACIqC,UAAAA,UACJ,OAAA,QAAO,CAAA;AAAA,qCACvByE,GAAAA,cACS,EAAA,MAAAtC,qBAAqBL,gBAAY,IAAM4C,SAAW,GAC/CtC,SAAkB,qBAC1BN,UAAAA,cAAY6C,IAAA,CAAAC,SAAAC,UACDlG,+BAAAmG,GAAAA,kBAAA,EAEK,SAAA,MAAA;AACL1C,iCAAyB;AACX,sBAAA,SAASJ,eAAa;AAAA,MAAC,GAGzC,UAEMrD,2BAAA,IAAA,OAAA,EAFU,WAAA,aACP,UACT,QAAA,CAAA,EAAA,GARKkG,QAAQ,MAAM7C,OASvB,CAAmB,EAE3B,CAAA;AAAA,MACArD,2BAAAA,IAAC+E,qBACIjB,UAAcW,cAAAA,QAAQ7C,OAAMyB,KAAM,IAAIzB,OAAMyB,QAAS,yBAC1D,CAAA;AAAA,IAAA,GAGJ;AAIW+C,UAAAA,MAAA5E,OAAM6E,kBAAmB;AAAYC,QAAAA;AAAAxH,QAAAA,UAAA2C,eAAA;AAClCzC,YAAAA,CAAAA,UAAWyC,cAAc,kBAAkBzC,KAAK;AAACF,cAAA2C;AAAA3C,cAAAwH;AAAAA,IAAAA,OAAA;AAAAA,YAAAxH,EAAA,EAAA;AAAA,IAAA;AAAAyH,QAAAA;AAAA,QAAAzH,EAAAsH,EAAAA,MAAAA,OAAAtH,UAAAwH,KAAA;AAH/DC,2CAAC,kBACc,EAAA,WAAA,eACJ,OAAAH,KACG,UAAAE,KAAoD;AAAAxH,cAAAsH;AAAAtH,cAAAwH;AAAAxH,cAAAyH;AAAAA,IAAAA,OAAA;AAAAA,YAAAzH,EAAA,EAAA;AAAA,IAAA;AAOnD,UAAA0H,MAAAhF,OAAMiF,YAAiB,OAAG,2DAC7BjF,OAAMiF,UAAW,uCAAuC;AAC3DC,QAAAA;AAAA5H,QAAAA,UAAA2C,eAAA;AACckF,YAAAA,CAAAA,MAAOlF,cAAc,WAAWkF,CAAC;AAAC7H,cAAA2C;AAAA3C,cAAA4H;AAAAA,IAAAA,OAAA;AAAAA,YAAA5H,EAAA,EAAA;AAAA,IAAA;AAC1C8H,UAAAA,MAAApF,OAAMiF,WAAgB;AAAAI,QAAAA;AAAA/H,QAAAA,EAAA0H,EAAAA,MAAAA,OAAA1H,UAAA4H,OAAA5H,EAAA,EAAA,MAAA8H,KAAA;AARjCC,YAAC7G,2BAAA,IAAA8G,GAAA,wBAAA,EACa,UAAA,SACJ,MAAA,SACc,0BACb,OAAAN,KAGQ,eAAAE,KACR,OAAAE,KACT;AAAA9H,cAAA0H;AAAA1H,cAAA4H;AAAA5H,cAAA8H;AAAA9H,cAAA+H;AAAAA,IAAAA,OAAA;AAAAA,YAAA/H,EAAA,EAAA;AAAA,IAAA;AAAAiI,QAAAA;AAAA,QAAAjI,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACFuH,4CAAChC,mBAAa,EAAA,UAAA;AAAA,QAAA;AAAA,QAGe/E,2BAAAA,IAAgB,OAAb,UAAS,YAAA,CAAA;AAAA,QAAI;AAAA,MAAA,GAC7C;AAAelB,cAAAiI;AAAAA,IAAAA,OAAA;AAAAA,YAAAjI,EAAA,EAAA;AAAA,IAAA;AAAAkI,QAAAA;AAAAlI,QAAAA,UAAA+H,KAAA;AACb,YAAAjG,2BAAA,KAAA,OAhBU,EAAA,WAAA,eACZiG,UAAAA;AAAAA,QAAAA;AAAAA,QAUAE;AAAAA,MAAAA,GAKJ;AAAMjI,cAAA+H;AAAA/H,cAAAkI;AAAAA,IAAAA,OAAA;AAAAA,YAAAlI,EAAA,EAAA;AAAA,IAAA;AAAAmI,QAAAA;AAAA,QAAAnI,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAQM,YAAAoB,2BAAA,KAAA,OAAe,EAAA,WAAA,kCACX,UAAA;AAAA,QAAAZ,2BAAA,IAACkH,GACD,cAAA,EAAA;AAAA,uCAACzH,GAAAA,YAAoB,EAAA,SAAA,aACC,WAAA,QAAO,UAE7B,WAAA,CAAA;AAAA,MAAA,GACJ;AAAMX,cAAAmI;AAAAA,IAAAA,OAAA;AAAAA,YAAAnI,EAAA,EAAA;AAAA,IAAA;AAOe,UAAAqI,OAACnG;AAEJ,UAAAoG,MAAAtD,cAAcW,QAAQ7C,OAAMxD,EAAG;AAACiJ,QAAAA;AAAA,QAAAvI,EAAAqI,EAAAA,MAAAA,OAAArI,UAAAsI,KAAA;AAJ9C,YAAApH,2BAAAA,IAACsF,OAAAA,OAAY,EAAA,MAAA,MACFC,IAAiBA,GACX,oBAAA,UAAA4B,KACH,OAAA,iBACA,OAAAC,IAAmC,CAAA;AAAAtI,cAAAqI;AAAArI,cAAAsI;AAAAtI,cAAAuI;AAAAA,IAAAA,OAAA;AAAAA,YAAAvI,EAAA,EAAA;AAAA,IAAA;AAC5B,UAAAwI,MAAA3F,QAAOvD,MAAOqG,QAAQ7C,OAAMxD,EAAG;AAC/CmJ,UAAAA,MAAA5F,QAAOvD,MAAOqG,QAAQ7C,OAAMxD,EAAG,IAAIwD,OAAMxD,KAAM;AAAqEoJ,QAAAA;AAAA,QAAA1I,EAAAwI,EAAAA,MAAAA,OAAAxI,UAAAyI,KAAA;AADzHC,YAACxH,2BAAA,IAAA+E,mBAAA,EAAoB,OAAAuC,KAChBC,UACL,KAAA;AAAezI,cAAAwI;AAAAxI,cAAAyI;AAAAzI,cAAA0I;AAAAA,IAAAA,OAAA;AAAAA,YAAA1I,EAAA,EAAA;AAAA,IAAA;AAAA2I,QAAAA;AAAA,QAAA3I,EAAAuI,EAAAA,MAAAA,OAAAvI,UAAA0I,KAAA;AACb,YAAA5G,2BAAA,KAAA,OATU,EAAA,WAAA,eACZyG,UAAAA;AAAAA,QAAAA;AAAAA,QAKAG;AAAAA,MAAAA,GAGJ;AAAM1I,cAAAuI;AAAAvI,cAAA0I;AAAA1I,cAAA2I;AAAAA,IAAAA,OAAA;AAAAA,YAAA3I,EAAA,EAAA;AAAA,IAAA;AAIS,UAAA4I,MAAA5D,cAAcW,QAAQ7C,OAAM+F,YAAa;AAACC,QAAAA;AAAA,QAAA9I,EAAA4C,EAAAA,MAAAA,gBAAA5C,UAAA+C,iBAAA;AAGvC+F,YAAAC,CAAA,QAAA;AACNhG,wBAAgB,gBAAc,IAAM;AAAC,eAC9BH,aAAa4C,GAAC;AAAA,MAAC;AACzBxF,cAAA4C;AAAA5C,cAAA+C;AAAA/C,cAAA8I;AAAAA,IAAAA,OAAA;AAAAA,YAAA9I,EAAA,EAAA;AAAA,IAAA;AACMgJ,UAAAA,MAAAtG,OAAMmG,gBAAiB;AAAEI,QAAAA;AAAAjJ,QAAAA,EAAA4I,EAAAA,MAAAA,OAAA5I,UAAA8I,OAAA9I,EAAA,EAAA,MAAAgJ,KAAA;AARpCC,YAAC/H,2BAAA,IAAA2E,GAAA,WAAA,EACU,OAAA+C,KACD,MAAA,gBACY,oBAAA,uBACR,UAAAE,KAIH,OAAAE,KACA,OAAA,iBAAkB;AAAAhJ,cAAA4I;AAAA5I,cAAA8I;AAAA9I,cAAAgJ;AAAAhJ,cAAAiJ;AAAAA,IAAAA,OAAA;AAAAA,YAAAjJ,EAAA,EAAA;AAAA,IAAA;AACR,UAAAkJ,MAAAlE,cAAcW,QAAQ7C,OAAM+F,YAAa;AACzD,UAAAM,MAAAnE,cAAcW,QAAQ7C,OAAM+F,YAAa,IAAI/F,OAAM+F,eAAgB;AAAqDO,QAAAA;AAAA,QAAApJ,EAAAkJ,EAAAA,MAAAA,OAAAlJ,UAAAmJ,KAAA;AAD7HC,YAAClI,2BAAA,IAAA+E,mBAAA,EAAoB,OAAAiD,KAChBC,UACL,KAAA;AAAenJ,cAAAkJ;AAAAlJ,cAAAmJ;AAAAnJ,cAAAoJ;AAAAA,IAAAA,OAAA;AAAAA,YAAApJ,EAAA,EAAA;AAAA,IAAA;AAAAqJ,QAAAA;AAAA,QAAArJ,EAAAiJ,EAAAA,MAAAA,OAAAjJ,UAAAoJ,KAAA;AACb,YAAAtH,2BAAA,KAAA,OAdU,EAAA,WAAA,eACZmH,UAAAA;AAAAA,QAAAA;AAAAA,QAUAG;AAAAA,MAAAA,GAGJ;AAAMpJ,cAAAiJ;AAAAjJ,cAAAoJ;AAAApJ,cAAAqJ;AAAAA,IAAAA,OAAA;AAAAA,YAAArJ,EAAA,EAAA;AAAA,IAAA;AAGS,UAAAsJ,MAAAtE,cAAcW,QAAQ7C,OAAMyG,eAAgB;AAACC,QAAAA;AAAA,QAAAxJ,EAAA+C,EAAAA,MAAAA,mBAAA/C,UAAA2C,eAAA;AAI1C6G,YAAAC,CAAA,QAAA;AACN1G,wBAAgB,mBAAiB,IAAM;AACvC2G,cAAAA,UAAclE,IAACC,OAAAvF;AAAc,YAAA,CACxBA,SAAK;AACNyC,wBAAc,mBAAiB,IAAM;AAAA,QAAA,OAAC;AAAA,cAAA,CAC9BgH,MAAMC,OAAO1J,OAAK,CAAC,GAAC;AACd,0BAAA,mBAAmB0J,OAAO1J,OAAK,CAAC;AAAA,UAAA;AAAA,QAAC;AAAA,MAAA;AAEtDF,cAAA+C;AAAA/C,cAAA2C;AAAA3C,cAAAwJ;AAAAA,IAAAA,OAAA;AAAAA,YAAAxJ,EAAA,EAAA;AAAA,IAAA;AAAA6J,QAAAA;AAAA7J,QAAAA,UAAA2C,eAAA;AAGYkH,YAAAA,MAAA;AACLlH,sBAAc,mBAAiB,IAAM;AAAA,MAAC;AACzC3C,cAAA2C;AAAA3C,cAAA6J;AAAAA,IAAAA,OAAA;AAAAA,YAAA7J,EAAA,EAAA;AAAA,IAAA;AACS8J,UAAAA,MAAA,CAACpH,OAAM6G;AAAgBQ,QAAAA;AAAA,QAAA/J,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;2CAChCsJ,GAAAA,WAAgB,EAAA,MAAA,QAAU,CAAA;AAAAhK,cAAA+J;AAAAA,IAAAA,OAAA;AAAAA,YAAA/J,EAAA,EAAA;AAAA,IAAA;AAAAiK,QAAAA;AAAA,QAAAjK,EAAA6J,EAAAA,MAAAA,OAAA7J,UAAA8J,KAAA;AANjB,YAAA5I,2BAAA,IAACiE,iBACL,MAAA,SACG,SAAA0E,KAGC,UAAAC,KACVC,UACJ,IAAA,CAAA;AAAa/J,cAAA6J;AAAA7J,cAAA8J;AAAA9J,cAAAiK;AAAAA,IAAAA,OAAA;AAAAA,YAAAjK,EAAA,EAAA;AAAA,IAAA;AACNkK,UAAAA,MAAAxH,OAAM6G,mBAAoB;AAAEY,QAAAA;AAAA,QAAAnK,EAAA,GAAA,MAAAsJ,OAAAtJ,EAAAwJ,GAAAA,MAAAA,OAAAxJ,EAAAiK,GAAAA,MAAAA,OAAAjK,WAAAkK,KAAA;AAtBvCC,2CAACtE,GAAAA,WACU,EAAA,OAAAyD,KACD,MAAA,mBACA,MAAA,UACY,oBAAA,0BACR,UAAAE,KASI,cAAAS,KAQP,OAAAC,KACA,OAAA,qBAAsB;AAAAlK,eAAAsJ;AAAAtJ,eAAAwJ;AAAAxJ,eAAAiK;AAAAjK,eAAAkK;AAAAlK,eAAAmK;AAAAA,IAAAA,OAAA;AAAAA,YAAAnK,EAAA,GAAA;AAAA,IAAA;AACZ,UAAAoK,MAAApF,cAAcW,QAAQ7C,OAAM+F,YAAa;AACzD,UAAAwB,MAAArF,cAAcW,QAAQ7C,OAAM+F,YAAa,IAAI/F,OAAM+F,eAAgB;AAAmFyB,QAAAA;AAAA,QAAAtK,EAAAoK,GAAAA,MAAAA,OAAApK,WAAAqK,KAAA;AAD3JC,YAACpJ,2BAAA,IAAA+E,mBAAA,EAAoB,OAAAmE,KAChBC,UACL,KAAA;AAAerK,eAAAoK;AAAApK,eAAAqK;AAAArK,eAAAsK;AAAAA,IAAAA,OAAA;AAAAA,YAAAtK,EAAA,GAAA;AAAA,IAAA;AAAAuK,QAAAA;AAAA,QAAAvK,EAAAmK,GAAAA,MAAAA,OAAAnK,WAAAsK,KAAA;AACb,YAAAxI,2BAAA,KAAA,OA5BU,EAAA,WAAA,eACZqI,UAAAA;AAAAA,QAAAA;AAAAA,QAwBAG;AAAAA,MAAAA,GAGJ;AAAMtK,eAAAmK;AAAAnK,eAAAsK;AAAAtK,eAAAuK;AAAAA,IAAAA,OAAA;AAAAA,YAAAvK,EAAA,GAAA;AAAA,IAAA;AAGS,UAAAwK,MAAAxF,cAAcW,QAAQ7C,OAAM2H,WAAY;AAExCC,UAAAA,MAAAhI,OAAM+H,eAAgB;AAAEE,QAAAA;AAAA3K,QAAAA,EAAA4C,GAAAA,MAAAA,gBAAA5C,WAAAwK,OAAAxK,EAAA,GAAA,MAAA0K,KAAA;AAHnCC,2CAAC9E,GAAAA,WACU,EAAA,OAAA2E,KACF,MAAA,eACE,OAAAE,KACG9H,UAAAA,cACV,WAAQ,MACC,SAAC,GACO,oBAAA,2BACX,OAAA,eACR;AAAA5C,eAAA4C;AAAA5C,eAAAwK;AAAAxK,eAAA0K;AAAA1K,eAAA2K;AAAAA,IAAAA,OAAA;AAAAA,YAAA3K,EAAA,GAAA;AAAA,IAAA;AACmB,UAAA4K,MAAA5F,cAAcW,QAAQ7C,OAAM2H,WAAY;AACxD,UAAAI,MAAA7F,cAAcW,QAAQ7C,OAAM2H,WAAY,IAAI3H,OAAM2H,cAAe;AAAqDK,QAAAA;AAAA,QAAA9K,EAAA4K,GAAAA,MAAAA,OAAA5K,WAAA6K,KAAA;AAD3HC,YAAC5J,2BAAA,IAAA+E,mBAAA,EAAoB,OAAA2E,KAChBC,UACL,KAAA;AAAe7K,eAAA4K;AAAA5K,eAAA6K;AAAA7K,eAAA8K;AAAAA,IAAAA,OAAA;AAAAA,YAAA9K,EAAA,GAAA;AAAA,IAAA;AAAA+K,QAAAA;AAAA,QAAA/K,EAAA2K,GAAAA,MAAAA,OAAA3K,WAAA8K,KAAA;AACb,YAAAhJ,2BAAA,KAAA,OAdU,EAAA,WAAA,eACZ6I,UAAAA;AAAAA,QAAAA;AAAAA,QAUAG;AAAAA,MAAAA,GAGJ;AAAM9K,eAAA2K;AAAA3K,eAAA8K;AAAA9K,eAAA+K;AAAAA,IAAAA,OAAA;AAAAA,YAAA/K,EAAA,GAAA;AAAA,IAAA;AAUSgL,UAAAA,MAAAtI,OAAMuI,eAAgB;AAAEC,QAAAA;AAAA,QAAAlL,EAAA,GAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAG7B,YAAA,CAAA,MAAM,KAAK,KAAK,KAAK,IAAI,EAAAwG,IAAAiE,QAM1B;AAACnL,eAAAkL;AAAAA,IAAAA,OAAA;AAAAA,YAAAlL,EAAA,GAAA;AAAA,IAAA;AAAAoL,QAAAA;AAAA,QAAApL,EAAA4C,GAAAA,MAAAA,gBAAA5C,WAAAgL,KAAA;AAjBV,YAAA9J,2BAAAA,IAAA,SAAgB,WAAA,eACZ,yCAACmK,GAAAA,QACQ,EAAA,MAAA,eACC,MAAA,SACK,WAAG,MACR,OAAA,oBACI,UAAA,gBACAzI,UAAW,cACd,OAAAoI,KACM,aAAAM,SAEZJ,UAAAA,IAAAA,CAOL,EACJ,CAAA;AAAMlL,eAAA4C;AAAA5C,eAAAgL;AAAAhL,eAAAoL;AAAAA,IAAAA,OAAA;AAAAA,YAAApL,EAAA,GAAA;AAAA,IAAA;AAQY,UAAAuL,MAAAzG,kBAAkB;AAAc0G,QAAAA;AAAAxL,QAAAA,WAAA2C,eAAA;AAC3B6I,YAAAC,CAAA,QAAA;AAAA,YACP5D,QAAM,gBAAc;AAAA6D,gBAAAA,IAAAA,MACJ,wBAAwB;AAAA,QAAA;AAC5C/I,sBAAc,YAAYkF,GAAC;AAAA,MAAC;AAC/B7H,eAAA2C;AAAA3C,eAAAwL;AAAAA,IAAAA,OAAA;AAAAA,YAAAxL,EAAA,GAAA;AAAA,IAAA;AACM,UAAA2L,MAAA7G,iBAAiB;AAAE8G,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAA,QAAA9L,EAAA,GAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAY1BkL,YAAC1K,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,SAAS,UAE5B,0CAAA;AACAF,YAAC3K,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,QAAQ,UAE3B,2BAAA;AACAD,YAAC5K,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,YAAY,UAE/B,kDAAA;AAAa/L,eAAA4L;AAAA5L,eAAA6L;AAAA7L,eAAA8L;AAAAA,IAAAA,OAAA;AAAAF,YAAA5L,EAAA,GAAA;AAAA6L,YAAA7L,EAAA,GAAA;AAAA8L,YAAA9L,EAAA,GAAA;AAAA,IAAA;AAAAgM,QAAAA;AAAAhM,QAAAA,EAAAuL,GAAAA,MAAAA,OAAAvL,WAAAwL,OAAAxL,EAAA,GAAA,MAAA2L,KAAA;AAEf,YAAAzK,2BAAAA,IAAA,SAnCU,WAAA,eACZ,0CAACmK,GACQ,QAAA,EAAA,MAAA,YACC,OAAA,2BACI,UAAA,gBACJ,MAAA,SACK,WAAA,MACD,UAAAE,KACK,eAAAC,KAKR,OAAAG,KACM,aAAAM,UAWbL,UAAAA;AAAAA,QAAAA;AAAAA,QAGAC;AAAAA,QAGAC;AAAAA,MAAAA,EAAAA,CAGJ,EACJ,CAAA;AAAM9L,eAAAuL;AAAAvL,eAAAwL;AAAAxL,eAAA2L;AAAA3L,eAAAgM;AAAAA,IAAAA,OAAA;AAAAA,YAAAhM,EAAA,GAAA;AAAA,IAAA;AAAAkM,QAAAA;AAAAlM,QAAAA,WAAA2C,eAAA;AAMiBwJ,YAAAA,CAAAA,QAAOxJ,cAAc,mBAAmBkF,GAAC;AAAC7H,eAAA2C;AAAA3C,eAAAkM;AAAAA,IAAAA,OAAA;AAAAA,YAAAlM,EAAA,GAAA;AAAA,IAAA;AAClDoM,UAAAA,MAAA1J,OAAM2J,mBAAyB;AAAAC,QAAAA;AAAA,QAAAtM,EAAAkM,GAAAA,MAAAA,OAAAlM,WAAAoM,KAAA;AAL1C,YAAAlL,2BAAAA,IAAC8G,GAAAA,wBACa,EAAA,UAAA,SACJ,MAAA,SACA,OAAA,oBACS,eAAAkE,KACR,OAAAE,IACT,CAAA;AAAApM,eAAAkM;AAAAlM,eAAAoM;AAAApM,eAAAsM;AAAAA,IAAAA,OAAA;AAAAA,YAAAtM,EAAA,GAAA;AAAA,IAAA;AAAAuM,QAAAA;AAAA,QAAAvM,EAAA,GAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;2CACDuF,KAAAA,gBAAa,UAId,iIAAA,CAAA;AAAejG,eAAAuM;AAAAA,IAAAA,OAAA;AAAAA,YAAAvM,EAAA,GAAA;AAAA,IAAA;AAAAwM,QAAAA;AAAAxM,QAAAA,WAAAsM,KAAA;AACb,YAAAxK,2BAAA,KAAA,OAbU,EAAA,WAAA,oBACZwK,UAAAA;AAAAA,QAAAA;AAAAA,QAOAC;AAAAA,MAAAA,GAKJ;AAAMvM,eAAAsM;AAAAtM,eAAAwM;AAAAA,IAAAA,OAAA;AAAAA,YAAAxM,EAAA,GAAA;AAAA,IAAA;AAAAyM,QAAAA;AAAAzM,QAAAA,WAAA2C,eAAA;AAMiB+J,YAAAA,CAAAA,QAAO/J,cAAc,qBAAqBkF,GAAC;AAAC7H,eAAA2C;AAAA3C,eAAAyM;AAAAA,IAAAA,OAAA;AAAAA,YAAAzM,EAAA,GAAA;AAAA,IAAA;AACpD2M,UAAAA,MAAAjK,OAAMkK,qBAA2B;AAAAC,QAAAA;AAAA,QAAA7M,EAAAyM,GAAAA,MAAAA,OAAAzM,WAAA2M,KAAA;AAL5C,YAAAzL,2BAAAA,IAAC8G,GAAAA,wBACa,EAAA,UAAA,SACJ,MAAA,SACA,OAAA,0CACS,eAAAyE,KACR,OAAAE,IACT,CAAA;AAAA3M,eAAAyM;AAAAzM,eAAA2M;AAAA3M,eAAA6M;AAAAA,IAAAA,OAAA;AAAAA,YAAA7M,EAAA,GAAA;AAAA,IAAA;AAAA8M,QAAAA;AAAA,QAAA9M,EAAA,GAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;4CACDuF,KAAAA,gBAAa,UAId,wOAAA,CAAA;AAAejG,eAAA8M;AAAAA,IAAAA,OAAA;AAAAA,aAAA9M,EAAA,GAAA;AAAA,IAAA;AAAA+M,QAAAA;AAAA/M,QAAAA,WAAA6M,KAAA;AACb,aAAA/K,2BAAA,KAAA,OAbU,EAAA,WAAA,eACZ+K,UAAAA;AAAAA,QAAAA;AAAAA,QAOAC;AAAAA,MAAAA,GAKJ;AAAM9M,eAAA6M;AAAA7M,eAAA+M;AAAAA,IAAAA,OAAA;AAAAA,aAAA/M,EAAA,GAAA;AAAA,IAAA;AAAAgN,QAAAA;AAAA,QAAAhN,EAAA,GAAA,MAAA+M,QAAA/M,EAAA,GAAA,MAAA2I,OAAA3I,EAAA,GAAA,MAAAqJ,OAAArJ,EAAAuK,GAAAA,MAAAA,OAAAvK,EAAA+K,GAAAA,MAAAA,OAAA/K,EAAAoL,GAAAA,MAAAA,OAAApL,EAAAgM,GAAAA,MAAAA,OAAAhM,WAAAwM,KAAA;AAGJ,aAAA1K,2BAAA,KAAA,OA/JU,EAAA,WAAA,+BAEZ6G,UAAAA;AAAAA,QAAAA;AAAAA,QAWAU;AAAAA,QAeAkB;AAAAA,QA6BAQ;AAAAA,QAgBAK;AAAAA,QAoBAY;AAAAA,QAoCAQ;AAAAA,QAcAO;AAAAA,MAAAA,GAgBJ;AAAM/M,eAAA+M;AAAA/M,eAAA2I;AAAA3I,eAAAqJ;AAAArJ,eAAAuK;AAAAvK,eAAA+K;AAAA/K,eAAAoL;AAAApL,eAAAgM;AAAAhM,eAAAwM;AAAAxM,eAAAgN;AAAAA,IAAAA,OAAA;AAAAA,aAAAhN,EAAA,GAAA;AAAA,IAAA;AAAAiN,QAAAA;AAAA,QAAAjN,EAAAsD,GAAAA,MAAAA,yBAAAtD,WAAAgN,MAAA;AA3KT,aAAA9L,2BAAAA,IAAAgM,GAAAA,iBACa5J,EAAAA,UAAAA,uBACQC,kBAAuB,0BAErC,OAAA4E,KAOe,mBAAA,OACnB6E,UAgKJ,KAAA,CAAA;AAAkBhN,eAAAsD;AAAAtD,eAAAgN;AAAAhN,eAAAiN;AAAAA,IAAAA,OAAA;AAAAA,aAAAjN,EAAA,GAAA;AAAA,IAAA;AAAAmN,QAAAA;AAAA,QAAAnN,EAAAsC,GAAAA,MAAAA,YAAAtC,WAAAiN,MAAA;AAIhB,aAAAnL,2BAAA,KAAA,OAjLU,EAAA,WAAA,oBACZmL,UAAAA;AAAAA,QAAAA;AAAAA,QA8KC3K;AAAAA,MAAAA,GAEL;AAAMtC,eAAAsC;AAAAtC,eAAAiN;AAAAjN,eAAAmN;AAAAA,IAAAA,OAAA;AAAAA,aAAAnN,EAAA,GAAA;AAAA,IAAA;AAAAoN,QAAAA;AAAApN,QAAAA,WAAAmN,QAAAnN,EAAAkG,GAAAA,MAAAA,OAAAlG,EAAA6G,GAAAA,MAAAA,OAAA7G,EAAA,GAAA,MAAA8G,OAAA9G,WAAAyH,OAAAzH,EAAA,GAAA,MAAAkI,KAAA;AA1QV,aAAApG,2BAAA,KAAA,OAAgB,EAAA,WAAAuD,KAEZa,UAAAA;AAAAA,QAAAA;AAAAA,QAaAW;AAAAA,QAgBCC;AAAAA,QAkCDW;AAAAA,QAKAS;AAAAA,QAmBAiF;AAAAA,MAAAA,GAmLJ;AAAMnN,eAAAmN;AAAAnN,eAAAkG;AAAAlG,eAAA6G;AAAA7G,eAAA8G;AAAA9G,eAAAyH;AAAAzH,eAAAkI;AAAAlI,eAAAoN;AAAAA,IAAAA,OAAA;AAAAA,aAAApN,EAAA,GAAA;AAAA,IAAA;AAAAqN,QAAAA;AAAA,QAAArN,EAAA,GAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAEN,aAAAQ,2BAAA,IAAA,SAAY,OAAA;AAAA,QAAAoM,QAAU;AAAA,MAAA,GAAW;AAAAtN,eAAAqN;AAAAA,IAAAA,OAAA;AAAAA,aAAArN,EAAA,GAAA;AAAA,IAAA;AAAAuN,QAAAA;AAAAvN,QAAAA,WAAA2C,eAAA;AAUQ4K,aAAAC,CAAA,SAAA;AACZpK,+BAAuB;AACvBT,sBAAc,QAAQ6K,IAAI;AAAA,MAAC;AAC9BxN,eAAA2C;AAAA3C,eAAAuN;AAAAA,IAAAA,OAAA;AAAAA,aAAAvN,EAAA,GAAA;AAAA,IAAA;AAAAyN,QAAAA;AAAAzN,QAAAA,WAAAuN,QAAAvN,EAAA0C,GAAAA,MAAAA,OAAA8K,MAAA;AALtB,aAAAtM,2BAAA,IAAA,OAAgB,EAAA,WAAA,mCACZ,UAAAA,2BAAA,IAACwM,KAA8B,iBAAA,EAAA,cAAAhL,OAAM8K,MACJ,gBAAAD,KAIrC,CAAA,GAAA;AAAMvN,eAAAuN;AAAA,QAAA,GAAA,IAAA7K,OAAA8K;AAAAxN,eAAAyN;AAAAA,IAAAA,OAAA;AAAAA,aAAAzN,EAAA,GAAA;AAAA,IAAA;AAAA2N,QAAAA;AAAA,QAAA3N,EAAAmD,GAAAA,MAAAA,kBAAAnD,WAAAyN,MAAA;AAZV,aAAAvM,2BAAAA,IAAC0M,GAAAA,QACSzK,EAAAA,MAAa,gBACLC,cAAAA,mBACJ,UAAA,MACV,WAAQ,MAERqK,UAQJ,KAAA,CAAA;AAASzN,eAAAmD;AAAAnD,eAAAyN;AAAAzN,eAAA2N;AAAAA,IAAAA,OAAA;AAAAA,aAAA3N,EAAA,GAAA;AAAA,IAAA;AAAA6N,QAAAA;AAAA,QAAA7N,EAAA,GAAA,MAAAiF,MAAAjF,EAAAoN,GAAAA,MAAAA,QAAApN,EAAA2N,GAAAA,MAAAA,QAAA3N,WAAAgC,KAAA;qDA3TD,WAAAjB,IACZ,0CAAC,IAAoB,EAAA,UAAAC,IAAkB,WAAAG,IAEnCa,UAAAA;AAAAA,QAAAA;AAAAA,QA0BAoL;AAAAA,QA8QAC;AAAAA,QAEAM;AAAAA,MAAAA,EAAAA,CAgBJ,EACJ,CAAA;AAAM3N,eAAAiF;AAAAjF,eAAAoN;AAAApN,eAAA2N;AAAA3N,eAAAgC;AAAAhC,eAAA6N;AAAAA,IAAAA,OAAA;AAAAA,aAAA7N,EAAA,GAAA;AAAA,IAAA;AA9TN6N,WAAAA;AAAAA,EA8TM;AA5ZP,WAAA5B,SAAA6B,SAAA;AAAA,QA6UyC5N,YAAU,gBAAc;AACjB,aAAA;AAAA,IAAA,OAAc;AAAA,UAChBA,YAAU,QAAM;AACd,eAAA;AAAA,MAAA,OAAyB;AAAA,YAC3BA,YAAU,YAAU;AAClB,iBAAA;AAAA,QAAA,OAAgD;AAEhD,iBAAA;AAAA,QAAA;AAAA,MAAwC;AAAA,IAAA;AAAA,EAAA;AApVxF,WAAAiL,SAAA4C,SAAA;AAsTqC,WAAA7M,2BAAA,IAAC6K,iBAEU7L,OAAI,SACVA,kBAAK8N,YAAa,EAAA,GAFC9N,eAAAA,OAAK,EAG7B;AAAA,EAAa;AA1TlD,WAAAoL,QAAA2C,SAAA;AAAA,WAmT8D/N,QAAK8N,YAAa;AAAA,EAAC;AA6GxF,WAAAE,qBAAAnO,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,CAAA;AAA8B,UAAA;AAAA,MAAAuD;AAAAA,MAAA2K;AAAAA,IAAAA,IAAApO;AAWJ,UAAAM,KAAAmD,cAAc;AAAEjD,QAAAA;AAAAP,QAAAA,SAAAmO,oBAAA;AACb5N,WAAAiF,CAAY2I,MAAAA,mBAAmB3I,EAACC,OAAAvF,KAAa;AAACF,aAAAmO;AAAAnO,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAAK,CAAAA,MAAAA,MAAAL,SAAAO,IAAA;AAPhE,WAAAW,2BAAAA,IAACE,GAAAA,WAAe,OAAA,eACD,MAAA,OACC,OAAA,SACnB,UAAAF,2BAAAA,IAAC2E,GAAAA,WAAgB,EAAA,MAAA,SACK,iBACK,gBAAA,YACT,OAAAxF,IACG,UAAAE,IACG,aAAA,YAAA,CAAW,EACvC,CAAA;AAAUP,aAAAK;AAAAL,aAAAO;AAAAP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AATHQ,WAAAA;AAAAA,EASG;ACzcP,WAAS4N,mBAAmB9O,IAAoB;AACnD,WAAO,gBAAgBA,GAAG+O,WAAW,KAAK,cAAc;AAAA,EAC5D;AAEO,WAASC,0BAA0BC,WAA4B;AAClE,WAAOA,YACD,gBAAgBA,UAAUF,WAAW,KAAK,cAAc,IAAI,gBAC5D;AAAA,EACV;AAEO,WAASG,+BAA+BD,WAA4B;AACvE,WAAOA,YACD,gBAAgBA,UAAUF,WAAW,KAAK,cAAc,IAAI,qBAC5D;AAAA,EACV;AAEgBI,WAAAA,UAAUC,aAAqBC,mBAAoC;AAC/E,WAAOA,oBACD,GAAGA,iBAAiB,IAAID,WAAW,KACnCA;AAAAA,EACV;AAEgBE,WAAAA,cAAcF,aAAqBC,mBAAoC;AACnF,UAAME,mBAAmBF,oBACnB,GAAGA,iBAAiB,IAAID,WAAW,KACnCA;AACN,WAAON,mBAAmBS,gBAAgB;AAAA,EAC9C;ACMO,WAAAC,SAAA/O,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAkB,UAAA;AAAA,MAAA8O;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAAtP;AAQgBM,QAAAA;AAAAL,QAAAA,SAAA+O,YAAA;AAKlB,WAAA;AAAA,QAAAA;AAAAA,MAAA;AAAc/O,aAAA+O;AAAA/O,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAP,QAAAA,SAAAiP,SAAA;AAEjB1O,WAAAmC,CAAA,WAAA;AACR,cAAAI,SAAA,CAAA;AAAuB,YACnBJ,OAAMqM,YAAA;AACNrM,iBAAMqM,WAAAO,QAAAC,CAAAA,WAAAnI,UAAA;AACGmI,gBAAAA,CAAAA,WAASC,OAAA;AACJT,qBAAAA,aAAcjM,OAAMiM,cAAiB,CAAA;AAC3CjM,qBAAMiM,WAAY3H,KAAK,IAAItE,OAAMiM,WAAY3H,KAAK,KAAO,CAAA;AACnD2H,qBAAAA,WAAY3H,KAAK,EAAAoI,QAAU;AAAA,YAAA;AAEhCD,gBAAAA,CAAAA,WAASjQ,IAAA;AACJyP,qBAAAA,aAAcjM,OAAMiM,cAAiB,CAAA;AAC3CjM,qBAAMiM,WAAY3H,KAAK,IAAItE,OAAMiM,WAAY3H,KAAK,KAAO,CAAA;AACnD2H,qBAAAA,WAAY3H,KAAK,EAAA9H,KAAO;AAAA,YAAA;AAAA,UAAkD,CAEvF;AAAA,QAAA;AAELmQ,cAAAA,WAAiB9J,QAAQ7C,QAAMiM,cAAgBW,OAAAC,KAAY7M,QAAMiM,UAAY,EAAC9H,UAAW;AACzFgI,kBAAUQ,QAAQ;AACX3M,eAAAA;AAAAA,MAAM;AAChB9C,aAAAiP;AAAAjP,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAAK,CAAAA,MAAAA,MAAAL,SAAAO,IAAA;AAtBF,WAAA;AAAA,QAAAqP,eACgBvP;AAAAA,QAAcwP,kBAAA;AAAA,QAAAC,YAEjBvP;AAAAA,MAmBX;AACJP,aAAAK;AAAAL,aAAAO;AAAAP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAzBD+P,UAAAA,WAAeC,uBAEZxP,EAuBF;AAED,UAAA;AAAA,MAAAkC,QAAAuN;AAAAA,MAAAnN,QAAAoN;AAAAA,IAAAA,IAA2BH;AAAOnP,QAAAA;AAAAZ,QAAAA,SAAAgP,mBAAAhP,EAAAiQ,CAAAA,MAAAA,SAAAlB,YAAA;AAExBnO,WAAAA,MAAA;AAAA,YACFoO,iBAAe;AACfA,0BAAgBtM,SAAMqM,UAAW;AAAA,QAAA;AAAA,MAAC;AAEzC/O,aAAAgP;AAAA,QAAA,CAAA,IAAAiB,SAAAlB;AAAA/O,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAA,EAAA,MAAAiQ,SAAAlB,YAAA;AAAE,WAAA,CAACrM,SAAMqM,UAAA;AAAY,QAAA,EAAA,IAAAkB,SAAAlB;AAAA/O,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAJtBkE,UAAAA,UAAUtD,IAIPC,EAAmB;AAACC,QAAAA;AAAAd,QAAAA,UAAAoP,sBAAApP,EAAAmP,EAAAA,MAAAA,YAAAnP,EAAAkQ,EAAAA,MAAAA,YAAAlQ,EAAA,EAAA,MAAAqP,WAAArP,UAAAkP,aAAAlP,EAAA,EAAA,MAAAiQ,UAAA;AAGnBnP,WAACI,2BAAA,IAAA,gBAAA,EAA+B,gBAAA,cACRwB,QAAAA,UACAI,QAAAA,UACQoM,gBAAAA,WACNC,UACUC,oBACXC,SAAU;AAAArP,cAAAoP;AAAApP,cAAAmP;AAAAnP,cAAAkQ;AAAAlQ,cAAAqP;AAAArP,cAAAkP;AAAAlP,cAAAiQ;AAAAjQ,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAA,QAAAf,EAAA+P,EAAAA,MAAAA,YAAA/P,UAAAc,IAAA;AAPhCC,WAACG,2BAAA,IAAAiP,eAAA,EAAcJ,OAAAA,UAClBjP,UAOJ,IAAA;AAASd,cAAA+P;AAAA/P,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AARFe,WAAAA;AAAAA,EAQE;AAiBb,WAAAqP,eAAArQ,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAwB,UAAA;AAAA,MAAAyC;AAAAA,MAAAI;AAAAA,MAAAqM;AAAAA,MAAAkB;AAAAA,MAAAC;AAAAA,MAAAlB;AAAAA,MAAAC;AAAAA,IAAAA,IAAAtP;AAUpB,UAAA;AAAA,MAAA4C;AAAAA,QAEIO,iBAAU;AAEd,UAAAqN,CAAAA,qBAAAC,sBAAA,IAAsDhO,MAAAa,SAAmC;AACzF,UAAAoN,CAAAA,iBAAAC,kBAAA,IAA8ClO,MAAAa,SAAmC;AACjF,UAAAsN,CAAAA,WAAAC,YAAA,IAAkCpO,MAAAa,cAAoB;AAAEhD,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAEjBL,+BAAAwQ,IAAA;AAAS7Q,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAhD8Q,UAAAA,oBAA0BtO,MAAAC,OAAapC,EAAS;AAChD,UAAA0Q,iBAAuBD,kBAAiBE;AAASzQ,QAAAA;AAAAP,QAAAA,EAAAmP,CAAAA,MAAAA,YAAAnP,EAAAqQ,CAAAA,MAAAA,kBAAArQ,EAAA8C,CAAAA,MAAAA,QAAAiM,cAAA/O,EAAA,CAAA,MAAAuQ,uBAAAvQ,EAAA,CAAA,MAAAsQ,kBAAAtQ,EAAA,CAAA,MAAA0C,OAAAqM,YAAA;AAE9BxO,WAAAC,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAA4G;AAAAA,UAAA6J;AAAAA,QAAAA,IAAAzQ;AAIhB,cAAA0Q,YAAkBX,wBAAwBU;AAC1C,cAAAE,aAAmBrO,QAAMiM,cAAgBjM,QAAMiM,WAAa3H,KAAK;AAC1D,eAAAlG,2BAAA,IAAC,WAAiBkG,EAAAA,OACG+H,UACMkB,gBACLa,WAAQ,WACPC,YACI,gBAAAb,kBAAkBY,WACpB,cAAMR,MAAAA,mBAAmBtJ,KAAK,GAC7B,eAAA2J,eAAcK,IAAK1O,OAAMqM,WAAY3H,KAAK,GAAA9H,EAAe,EAAA,GACnE,GAAG2R,UAAU,EAAK;AAAA,MAAA;AAC5CjR,aAAAmP;AAAAnP,aAAAqQ;AAAA,QAAA,CAAA,IAAAvN,QAAAiM;AAAA/O,aAAAuQ;AAAAvQ,aAAAsQ;AAAA,QAAA,CAAA,IAAA5N,OAAAqM;AAAA/O,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAfD,UAAAqR,aAAmB9Q;AAejBC,QAAAA;AAAA,QAAAR,EAAAqQ,CAAAA,MAAAA,kBAAArQ,SAAAqP,WAAArP,EAAA,EAAA,MAAA2C,iBAAA3C,EAAA0C,EAAAA,MAAAA,OAAAqM,YAAA;AAEkBvO,uBAAA;AAAA,YAAA,CACX6O,SAAO;AAAA;AAAA,QAAA;AAEZuB,yBAAiB;AACV,kBAAA,EAAAU,KAAAC,CAAA,SAAA;AAAA,cAAA,CACEA,MAAI;AAAA;AAAA,UAAA;AAGTC,gBAAAA,WAAiBD,KAAIE,KAAM;AAE3B,gBAAAC,YAAkBC,MAAAC,SAAAf,IAAmBW,QAAQ,CAAC;AAE9C,gBAAAK,oBAA0BnP,OAAMqM;AAChC+C,gBAAAA,kBAAwBC,uCAAsBL,SAAS;AAGvD,gBAAAM,gBAAsBF,gBAAexN,OAAAiL,CAAAA,cACzBsC,CAAAA,mBAAiBI,KAAApK,CAAAA,MAAmBA,EAACvI,OAAQiQ,UAASjQ,EAAG,CACpE;AAED0S,wBAAa1C,QAAA4C,CAAA,gBAAA;AACKC,2BAAAA,IAAK5C,YAASjQ,EAAG;AAAA,UAAA,CAClC;AACDqD,wBAAc0N,gBAAc,CAAA,GAAM2B,eAAkBH,GAAAA,iBAAiB,OAAO;AAAA,QAAA,CAACO,EAAAA,MAAA9G,OAAA,EAAA+G,QAI9DzB,MAAAA,kBAAkB,CAAC;AAAA,MAAA;AACzC5Q,aAAAqQ;AAAArQ,aAAAqP;AAAArP,cAAA2C;AAAA,QAAA,EAAA,IAAAD,OAAAqM;AAAA/O,cAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,EAAA;AAAA,IAAA;AA5BD,UAAAsS,cAAoB9R;AA4BnBI,QAAAA;AAAAC,QAAAA;AAAA,QAAAb,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAKWE,0CAAC2R,GAAU,UAAA,EAAA;AACX1R,0CAACF,GAAoB,YAAA,EAAA,SAAA,aACC,WAAA,aAAY,UAElC,UAAA;AAAaX,cAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAD,WAAAZ,EAAA,EAAA;AAAAa,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAA,EAAA,MAAAoP,sBAAApP,EAAAmP,EAAAA,MAAAA,YAAAnP,EAAAsS,EAAAA,MAAAA,eAAAtS,UAAA2Q,WAAA;AACZ7P,WAAAsO,sBACGtN,gCAAC0Q,GAAAA,QAAgB7B,EAAAA,SAAAA,WACC,UAAAxB,YAAYwB,WACb,SAAA,QACH,MAAA,SACG2B,SAAU,aACtB3B,UAAAA;AAAAA,QAAAA,2CAAa8B,GAAuB,kBAAA,EAAA,MAAA,WAAa,CAAA,mCAAIC;QAAgB;AAAA,MAAA,GAE1E;AAAS1S,cAAAoP;AAAApP,cAAAmP;AAAAnP,cAAAsS;AAAAtS,cAAA2Q;AAAA3Q,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,UAAAc,IAAA;kDAdF,EAAA,WAAA,qCACXF,UAAAA;AAAAA,QAAAA;AAAAA,QACAC;AAAAA,QAICC;AAAAA,MAAAA,GASL;AAAMd,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAAqQ,EAAAA,MAAAA,kBAAArQ,UAAA2C,eAAA;AAY6BzC,WAAAA,CAAAA,UAAWyC,cAAc0N,gBAAgBnQ,KAAK;AAACF,cAAAqQ;AAAArQ,cAAA2C;AAAA3C,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAC7C,WAAA;AAAA,QAAApB,IAAM;AAAA,QAAEkQ,OAAS;AAAA,MAAE;AAAExP,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAAtB,QAAAA,UAAAqR,cAAArR,EAAAmP,EAAAA,MAAAA,YAAAnP,EAAA,EAAA,MAAAqQ,kBAAArQ,UAAAgB,MAAAhB,EAAA0C,EAAAA,MAAAA,OAAAqM,YAAA;AATtD,YAAA7N,2BAAA,IAACyR,uBAA4BtC,6BACH,UAAA,kBACH,OAAA3N,OAAMqM,YACHI,UACJ,MAAA,SACMkC,YACOb,mBAAqB,wBACxB,gBAAA,MACD,eAAAxP,IACE,iBAAAG,GAAwB,CAAA;AAAAnB,cAAAqR;AAAArR,cAAAmP;AAAAnP,cAAAqQ;AAAArQ,cAAAgB;AAAA,QAAA,EAAA,IAAA0B,OAAAqM;AAAA/O,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAGlC,UAAAuB,MAAAkP,oBAAehN;AAAcjC,QAAAA;AAAA,QAAAxB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAE1Bc,YAAAA,MAAMkP,mBAAkBjN,MAAU;AAACzD,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAAzB,QAAAA,EAAAyQ,EAAAA,MAAAA,mBAAAzQ,UAAAqQ,kBAAArQ,EAAA,EAAA,MAAAuB,KAAA;AAH7D,YAAAL,2BAAA,IAAC,mBAAuBuP,wBACD,MAAAlP,KACU8O,gBACP,SAAA7O,IAAsC,CAAA;AAAAxB,cAAAyQ;AAAAzQ,cAAAqQ;AAAArQ,cAAAuB;AAAAvB,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAAA0B,QAAAA;AAAA,QAAA1B,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAyB,KAAA;AAhBnE,YAAAK,2BAAA,KAAA8Q,GAAgB,OAAA,EAAA,WAAA,WAEbtR,UAAAA;AAAAA,QAAAA;AAAAA,QAWAG;AAAAA,MAAAA,GAIJ;AAAQzB,cAAAsB;AAAAtB,cAAAyB;AAAAzB,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA,QAAA5B,EAAA0B,EAAAA,MAAAA,OAAA1B,UAAAe,IAAA;AACN,YAAAe,2BAAA,KAAA,OApCU,EAAA,WAAA,eACZf,UAAAA;AAAAA,QAAAA;AAAAA,QAiBAW;AAAAA,MAAAA,GAkBJ;AAAM1B,cAAA0B;AAAA1B,cAAAe;AAAAf,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AApCN4B,WAAAA;AAAAA,EAoCM;AAzGd,WAAA0J,QAAA9F,GAAA;AA+DYqN,YAAAC,MAActN,CAAC;AAAA,EAAC;AAyD5B,QAAMuN,YAAYvQ,MAAMwQ,KACpB,SAAAC,kBAAAlT,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA2B,UAAA;AAAA,MAAAmH;AAAAA,MAAAkJ,gBAAA4C;AAAAA,MAAA7C;AAAAA,MAAA8C;AAAAA,MAAAC;AAAAA,MAAAjE;AAAAA,MAAAkE;AAAAA,MAAAlC;AAAAA,IAAAA,IAAApR;AAWvB,UAAA;AAAA,MAAA2C;AAAAA,MAAAC;AAAAA,QAMIO,iBAAsB;AAE1BoQ,UAAAA,oBAA0B9Q,MAAAC,QAAcmB,OAAAA,MAAMlB,QAAQ,GAAG2N,cAAc,IAAIjJ,KAAK,MAAM,CAAC;AACvFkJ,UAAAA,iBAAuB4C,YAAYI,kBAAiBtC;AAEtB,UAAA3Q,KAAA,GAAGgQ,cAAc,IAAIjJ,KAAK;AAAM7G,QAAAA;AAAA,QAAAP,EAAAK,CAAAA,MAAAA,MAAAL,SAAA0C,QAAA;AAA9CkB,WAAAA,OAAAA,MAAMlB,QAAQrC,EAAgC;AAACL,aAAAK;AAAAL,aAAA0C;AAAA1C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAA/D,UAAAuT,UAAgBhT;AACiB,UAAAC,KAAA,GAAG6P,cAAc,IAAIjJ,KAAK;AAASxG,QAAAA;AAAA,QAAAZ,EAAAQ,CAAAA,MAAAA,MAAAR,SAAA0C,QAAA;AAAjDkB,WAAAA,OAAAA,MAAMlB,QAAQlC,EAAmC;AAACR,aAAAQ;AAAAR,aAAA0C;AAAA1C,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAArE,UAAAwT,aAAmB5S;AAEnB6S,UAAAA,kBAAwBjR,MAAAC,OAAa+Q,UAAU;AAAE3S,QAAAA;AAAAb,QAAAA,SAAAqQ,kBAAArQ,EAAAuT,CAAAA,MAAAA,WAAAvT,EAAAoH,CAAAA,MAAAA,SAAApH,EAAA,CAAA,MAAAwT,cAAAxT,UAAA2C,iBAAA3C,EAAA,EAAA,MAAAsQ,gBAAA;AAEjCzP,WAAAA,MAAA;AAAA,aACP4S,gBAAezC,YAAauC,WAAO,CAAKA,YAAYjD,gBAAc;AACnE3N,wBAAc,GAAG0N,cAAc,IAAIjJ,KAAK,QAAQoM,UAAU;AAAA,QAAA;AAE9DC,wBAAezC,UAAWwC;AAAAA,MAAU;AACvCxT,aAAAqQ;AAAArQ,aAAAuT;AAAAvT,aAAAoH;AAAApH,aAAAwT;AAAAxT,cAAA2C;AAAA3C,cAAAsQ;AAAAtQ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,UAAAwT,YAAA;AAAE1S,YAAC0S,UAAU;AAACxT,cAAAwT;AAAAxT,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AALfkE,UAAAA,UAAgBrD,IAKbC,EAAY;AAKU,UAAAC,KAAA,GAAGsP,cAAc,IAAIjJ,KAAK;AAASpG,QAAAA;AAAAhB,QAAAA,UAAAqT,eAAA;AAQ3BrS,WAAAqS,iBAAiBnS,2BAAA,IAACwR,GAAoB,eAAA,EAAA,MAAA,SAAU;AAAA1S,cAAAqT;AAAArT,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AACvDmB,UAAAA,KAAAwE,QAAQwL,YAAU3B,KAAO;AAAClO,QAAAA;AAAA,QAAAtB,EAAAmT,EAAAA,MAAAA,aAAAnT,EAAA,EAAA,MAAAmP,YAAAnP,EAAAe,EAAAA,MAAAA,MAAAf,EAAA,EAAA,MAAAgB,MAAAhB,UAAAmB,IAAA;AATxCG,2CAACkF,OAAY,OAAA,EAAA,MAAAzF,IACF0F,IAAAA,GAAAA,oBACO,WAAA,aACX,UAAO,MACG0I,UACL,MAAA,SACMgE,WACE,cAAA,OACC,cAAAnS,IACP,OAAAG,IAA6B;AAAAnB,cAAAmT;AAAAnT,cAAAmP;AAAAnP,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAmB;AAAAnB,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAA,QAAAvB,EAAA,EAAA,MAAAmP,YAAAnP,EAAA,EAAA,MAAAmR,YAAA7R,MAAAU,EAAA,EAAA,MAAAoT,cAAA;AAE1C,YAAA,CAACjE,YACEjO,2BAAAA,IAACwS,GAAAA,OAAa,EAAA,OAAA,SAAoB,YAACvC,YAAU7R,IACzC,UAAA4B,2BAAAA,IAACiE,GAAAA,YACQ,EAAA,MAAA,SACM,cAAA,QACA,WAAA,OACF,SAAA,MAAMiO,aACf,GAAA,UAAAlS,2BAAA,IAACkH,GAAmB,cAAA,EAAA,MAAA,QAAO,CAAA,EAC/B,CAAA,GACJ;AAAQpI,cAAAmP;AAAA,QAAA,EAAA,IAAAgC,YAAA7R;AAAAU,cAAAoT;AAAApT,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAAAwB,QAAAA;AAAA,QAAAxB,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAuB,KAAA;AAEV,YAAAO,2BAAA,KAAA,OAvBU,EAAA,WAAA,2CACZR,UAAAA;AAAAA,QAAAA;AAAAA,QAWCC;AAAAA,MAAAA,GAWL;AAAMvB,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAA,QAAAzB,EAAA,EAAA,MAAAmR,YAAA3B,OAAA;AAEL2B,YAAAA,YAAU3B,SAAYtO,2BAAA,IAAAP,GAAA,YAAA,EAAoB,SAAA,WACE,WAAA,yCACxCwQ,UAAAA,YAAU3B,MACf,CAAA;AAAa,QAAA,EAAA,IAAA2B,YAAA3B;AAAAxP,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAAA0B,QAAAA;AAAA,QAAA1B,EAAA,EAAA,MAAAmR,YAAA7R,IAAA;AAEZ6R,YAAAA,YAAU7R,MAAS4B,2BAAA,IAAAP,GAAA,YAAA,EAAoB,SAAA,WACE,WAAA,yCACrCwQ,UAAAA,YAAU7R,GACf,CAAA;AAAa,QAAA,EAAA,IAAA6R,YAAA7R;AAAAU,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA5B,QAAAA,EAAAwB,EAAAA,MAAAA,OAAAxB,UAAAyB,OAAAzB,EAAA,EAAA,MAAA0B,KAAA;AAlCjBE,YACIJ,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAyBCC;AAAAA,QAKAC;AAAAA,MAAAA,GAGY;AAEd1B,cAAAwB;AAAAxB,cAAAyB;AAAAzB,cAAA0B;AAAA1B,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AApCH4B,WAAAA;AAAAA,EAoCG,GAEX,SAAS+R,SAASC,WAA2BC,WAA2B;AAC7DD,WAAAA,UAAUxM,UAAUyM,UAAUzM,SACjCwM,UAAUvD,mBAAmBwD,UAAUxD,kBACvCuD,UAAUtD,mBAAmBuD,UAAUvD,kBACvCsD,UAAUP,kBAAkBQ,UAAUR,iBACtCS,MAAMF,UAAUzC,YAAY0C,UAAU1C,UAAU,KAChDyC,UAAUT,cAAcU,UAAUV;AAAAA,EAC1C,CACJ;AAEA,WAAAY,gBAAAhU,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAyB,UAAA;AAAA,MAAAmH;AAAAA,MAAA4M;AAAAA,MAAAC;AAAAA,MAAA5D;AAAAA,IAAAA,IAAAtQ;AAYrB,UAAA;AAAA,MAAA+C;AAAAA,QAEII,iBAAsB;AAAE7C,QAAAA;AAAAL,QAAAA,EAAAqQ,CAAAA,MAAAA,kBAAArQ,SAAA8C,UAAA9C,EAAA,CAAA,MAAAoH,OAAA;AAEZA,WAAAA,UAAK3D,SAAiBG,OAAAA,MAAMd,QAAQ,GAAGuN,cAAc,IAAIjJ,KAAK,MAAM,IAAC3D;AAAYzD,aAAAqQ;AAAArQ,aAAA8C;AAAA9C,aAAAoH;AAAApH,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAjG,UAAAkU,UAAgB7T;AAAkFE,QAAAA;AAAAP,QAAAA,SAAAiU,SAAA;AAKhF1T,WAAA4T,CAAU,WAAA,CAACH,SAAOC,QAASxQ,IAAAA;AAAYzD,aAAAiU;AAAAjU,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAErDF,WAACU,2BAAA,IAAAkT,gBAAA,EAAY,QAAK,MAAE,UAAgB,oBAAA;AAAcpU,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,EAAAqQ,CAAAA,MAAAA,kBAAArQ,SAAAkU,WAAAlU,EAAA,CAAA,MAAAoH,OAAA;AAE7CA,WAAAA,UAAK3D,UACF3B,2BAAA,KAYM,OAXF,EAAA,UAAA;AAAA,QAACZ,2BAAAA,IAAAsF,OAAA,OAAA,EAAY,MAAA,GAAG6J,cAAc,IAAIjJ,KAAK,QAC5BX,IAAAA,GACJ,oBAAA,UAAA,MACO,OAAA,MACF,MAAA,SACQ,cAAA,OACN,OAAAd,QAAQuO,OAAO,EAAC,CAAA;AAAA,uCAE7BjO,KAAAA,cAAoB,EAAA,OAAAN,QAAQuO,OAAO,GAC/BA,qBAAW,iCAChB,CAAA;AAAA,MAAA,GACJ;AAAMlU,aAAAqQ;AAAArQ,aAAAkU;AAAAlU,aAAAoH;AAAApH,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,UAAAY,IAAA;AAdd,WAAAM,2BAAAA,IAACmT,GAAAA,iBACIzT,UAcL,GAAA,CAAA;AAAgBZ,cAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,UAAAiU,SAAA;AAEhBnT,WAACI,2BAAAA,IAAAoT,GAAAA,eAAA,EACG,UAACpT,2BAAAA,IAAAsR,GAAA,QAAA,EACG,WAAQ,MACA,SAAA,YACCyB,SAAM,SACT,OAAA,WAAU,eAEpB,CAAA,GACJ;AAAgBjU,cAAAiU;AAAAjU,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAA,QAAAf,EAAA,EAAA,MAAAgU,QAAAhU,EAAAO,EAAAA,MAAAA,MAAAP,EAAAa,EAAAA,MAAAA,MAAAb,UAAAc,IAAA;AAhCZ,WAAAgB,2BAAA,KAAA8L,aACK,UAAA,MACO,mBAAA,oBACVoG,MACQ,cAAAzT,IAEdC,UAAAA;AAAAA,QAAAA;AAAAA,QACAK;AAAAA,QAiBAC;AAAAA,MAAAA,GAUJ;AAASd,cAAAgU;AAAAhU,cAAAO;AAAAP,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAlCFe,WAAAA;AAAAA,EAkCE;ACjWN,WAAAwT,cAAAxU,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAuB,UAAA;AAAA,MAAAuU;AAAAA,MAAAC;AAAAA,MAAAjF;AAAAA,MAAAkF;AAAAA,MAAAvF;AAAAA,MAAAwF,MAAAtU;AAAAA,MAAAuU;AAAAA,IAAAA,IAAA7U;AAMI4U,UAAAA,OAAAtU,OAAcoD,SAAP,UAAPpD;AAAcE,QAAAA;AAAAP,QAAAA,SAAAwU,MAAA/U,QAAAO,SAAAyU,MAAA;AAiBzBlU,WAAAsU,CAA4BJ,YAAAA,KAAI9R,cAAe6R,MAAK/U,MAAOoV,OAAO;AAAC,QAAA,CAAA,IAAAL,MAAA/U;AAAAO,aAAAyU;AAAAzU,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,EAAA4U,CAAAA,MAAAA,sBAAA5U,SAAAmP,YAAAnP,EAAA,CAAA,MAAAwU,MAAAtU,SAAAF,EAAAwP,CAAAA,MAAAA,SAAAxP,SAAA2U,QAAA3U,EAAA,CAAA,MAAAO,IAAA;AAP7DC,WAACU,2BAAA,IAAA8G,GAAA,wBAAA,EACfwH,OACDmF,MACI,UAAA,SACH,OAAAH,MAAKtU,OACFiP,UACUyF,oBACL,eAAArU,IAAsE;AAAAP,aAAA4U;AAAA5U,aAAAmP;AAAA,QAAA,CAAA,IAAAqF,MAAAtU;AAAAF,aAAAwP;AAAAxP,aAAA2U;AAAA3U,aAAAO;AAAAP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAPzF,UAAA8U,mBAAyBtU;AAOiE,QAEtFkU,SAAO;AAAA9T,UAAAA;AAAA,UAAAZ,EAAA8U,EAAAA,MAAAA,oBAAA9U,UAAA0U,SAAA;AAEH9T,aAACM,2BAAA,IAAAE,YAAA,EACUsT,OAAAA,SACS,UACpB,kBAAA;AAAU1U,gBAAA8U;AAAA9U,gBAAA0U;AAAA1U,gBAAAY;AAAAA,MAAAA,OAAA;AAAAA,aAAAZ,EAAA,EAAA;AAAA,MAAA;AAHVY,aAAAA;AAAAA,IAAAA;AAKDkU,WAAAA;AAAAA,EAAgB;AC/BpB,WAAAC,0BAAAhV,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAmC,UAAA;AAAA,MAAAkP;AAAAA,IAAAA,IAAApP;AAKtC,UAAA;AAAA,MAAA2C;AAAAA,MAAAE;AAAAA,QAAiCM,iBAAU;AAAE7C,QAAAA;AAAAL,QAAAA,SAAAmP,UAAA;iDASrB,EAAA,WAAA,cACZ,UAAAjO,2BAAA,IAACsF,OAAYwO,OAAAA,EAAAA,MARE,uBASH,MAAA,YACPzU,UAAAA,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAiU;AAAAA,UAAAC;AAAAA,QAAAA,IAAAlU;AACS,eAAAW,+BAAC,iBACMiO,UACH,OAAA,YACE,SAAA,kEACHsF,MACCD,OAAQ;AAAA,SAE3B,EACJ,CAAA;AAAMxU,aAAAmP;AAAAnP,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAP,QAAAA,SAAAmP,UAAA;iDAEU,EAAA,WAAA,cAEZ,UAAAjO,2BAAA,IAACsF,OAAYyO,OAAAA,EAAAA,MArBA,qBAsBD,MAAA,YACPzU,UAAAA,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAgU,OAAAU;AAAAA,UAAAT,MAAAU;AAAAA,QAAAA,IAAA3U;AACS,eAAAU,2BAAA,IAAC,eACMiO,EAAAA,UACH,OAAA,UACE,SAAA,yDACHsF,MAAAA,QACCD,OAAI,QAAI,CAAA;AAAA,SAE3B,EACJ,CAAA;AAAMxU,aAAAmP;AAAAnP,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,EAAAmP,CAAAA,MAAAA,YAAAnP,SAAA4C,gBAAA5C,EAAA,CAAA,MAAA0C,QAAA;AAELkB,WAAAA,OAAAA,MAAMlB,QApCY,qBAoCc,KAAKxB,2BAAAA,IAAA,SAAgB,WAAA,eAClD,UAACA,2BAAAA,IAAAuF,GAAAA,oBAAA,EACa0I,UACH,OAAAvL,OAAAA,MAAMlB,QAtCK,4BAsC4B,GACvC,OAAA,oBACD0S,MAxCY,8BAyCb,MAAA,SACKxS,UAAW,aAAA,CAC7B,EAAA,CAAA;AAAM5C,aAAAmP;AAAAnP,aAAA4C;AAAA5C,aAAA0C;AAAA1C,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,EAAAK,CAAAA,MAAAA,MAAAL,SAAAO,MAAAP,EAAA,EAAA,MAAAQ,IAAA;AAtCVI,WACIP,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAcAE;AAAAA,QAeCC;AAAAA,MAAAA,GAQK;AACPR,aAAAK;AAAAL,aAAAO;AAAAP,cAAAQ;AAAAR,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAvCHY,WAAAA;AAAAA,EAuCG;AClDJ,WAAAyU,yBAAAtV,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAkC,UAAA;AAAA,MAAAgH;AAAAA,MAAAqO;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAxG;AAAAA,IAAAA,IAAApP;AAsBrC,UAAA;AAAA,MAAA2C;AAAAA,MAAAE;AAAAA,MAAAE;AAAAA,QAIII,iBAAU;AAAE7C,QAAAA;AAAAL,QAAAA,SAAA8C,QAAA;AAUKc,WAAAA,OAAAA,MAAMd,QAJD,oBAI0B;AAAC9C,aAAA8C;AAAA9C,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAArD,UAAA4V,eAAqBvV;AAAiCE,QAAAA;AAAAP,QAAAA,SAAA0C,QAAA;AAEtDmT,YAAAA,eAAqBjS,OAAAA,MAAMlB,QAND,oBAM0B;AACzBnC,WAAA,OAAOsV,iBAAiB,WAAWA,eAAeC,KAAAA,gBAAgBD,YAAY;AAAC7V,aAAA0C;AAAA1C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAA1G,UAAA+V,qBAA2BxV;AAAgFC,QAAAA;AAAAR,QAAAA,SAAAmP,UAAA;0CAIlG,6BAAoCA,SAAW,CAAA;AAAAnP,aAAAmP;AAAAnP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAAmP,CAAAA,MAAAA,YAAAnP,SAAAsV,WAAA;AAI3C1U,WAAA0U,aAAapU,+BAAA,OAAgB,EAAA,WAAA,cAC1B,UAAAA,2BAAAA,IAACsF,OAAAA,OAAYwP,EAAAA,MAfD,wBAgBA,MAAA,YACPnV,UAAAA,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAA2T;AAAAA,UAAAC;AAAAA,QAAAA,IAAA5T;AAAiC,8CACvB,eACG,EAAA,OAAA,aACGsO,UACJsF,MACCD,OAAQ;AAAA,SAE3B,EACJ,CAAA;AAAMxU,aAAAmP;AAAAnP,aAAAsV;AAAAtV,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAAmP,CAAAA,MAAAA,YAAAnP,UAAA2V,WAAA;AAEL9U,WAAA8U,aAAazU,+BAAA,OAAgB,EAAA,WAAA,cAC1B,UAAAA,2BAAAA,IAACsF,OAAAA,OAAYyP,EAAAA,MA3BD,wBA4BA,MAAA,YACPnV,UAAAA,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAA0T,OAAAU;AAAAA,UAAAT,MAAAU;AAAAA,QAAAA,IAAArU;AACS,eAAAI,+BAAC,iBACG,OAAA,aACGiO,UACJsF,MAAG,QACFD,OAAI,SAAI;AAAA,SAE3B,EACJ,CAAA;AAAMxU,aAAAmP;AAAAnP,cAAA2V;AAAA3V,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA0V,MAAA;AAEL5U,WAAA4U,QAAQxU,+BAAA,OAAgB,EAAA,WAAA,cACrB,UAAAA,2BAAAA,IAACsF,OAAAA,OAAY0P,EAAAA,MA3CN,mBA4CK,MAAA,YACPnV,UAAAA,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAyT,OAAA2B;AAAAA,UAAA1B,MAAA2B;AAAAA,QAAAA,IAAArV;AACS,eAAAG,+BAAC,iBACG,OAAA,QACGiO,UACJsF,MAAG,QACFD,OAAI,SAAI;AAAA,SAE3B,EACJ,CAAA;AAAMxU,cAAAmP;AAAAnP,cAAA0V;AAAA1V,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,EAAAY,EAAAA,MAAAA,MAAAZ,UAAAa,MAAAb,EAAA,EAAA,MAAAc,IAAA;kDAvCM,EAAA,WAAA,uCAEXF,UAAAA;AAAAA,QAAAA;AAAAA,QAaAC;AAAAA,QAaAC;AAAAA,MAAAA,GAaL;AAAMd,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAA,EAAA,MAAAmP,YAAAnP,EAAA4C,EAAAA,MAAAA,gBAAA5C,EAAAiH,EAAAA,MAAAA,UAAAjH,UAAA0C,QAAA;AAGDuE,WAAAA,yCAAU,OAAgB,EAAA,WAAA,cACvB,UAAC/F,2BAAA,IAAAuF,GAAA,oBAAA,EACU,OAAA7C,OAAAA,MAAMlB,QA/DR,mBA+DgC,GAC9B,OAAA,gBACD2T,MAjED,qBAkEA,MAAA,UACA,MAAA,SAEKlH,UACAvM,UAAW,aAAA,CAC7B,EAAA,CAAA;AAAM5C,cAAAmP;AAAAnP,cAAA4C;AAAA5C,cAAAiH;AAAAjH,cAAA0C;AAAA1C,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAmP,YAAAnP,EAAA4C,EAAAA,MAAAA,gBAAA5C,EAAAyV,EAAAA,MAAAA,OAAAzV,UAAA0C,QAAA;AAEL+S,WAAAA,sCAAO,OAAgB,EAAA,WAAA,cACpB,UAACvU,2BAAA,IAAAuF,GAAA,oBAAA,EAA0B,OAAA7C,OAAAA,MAAMlB,QAzE3B,gBAyEgD,GAC3B,OAAA,cACD4T,MA3EpB,kBA4EmB,MAAA,UACA,MAAA,SAEKnH,UACAvM,UAAW,aAAA,CAC7C,EAAA,CAAA;AAAM5C,cAAAmP;AAAAnP,cAAA4C;AAAA5C,cAAAyV;AAAAzV,cAAA0C;AAAA1C,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAA,QAAAtB,EAAA,EAAA,MAAAmP,YAAAnP,EAAA4C,EAAAA,MAAAA,gBAAA5C,EAAAwV,EAAAA,MAAAA,OAAAxV,UAAA0C,QAAA;AAEL8S,YAAAA,sCAAO,OAAgB,EAAA,WAAA,cACpB,UAACtU,2BAAA,IAAAuF,GAAA,oBAAA,EAA0B,OAAA7C,OAAAA,MAAMlB,QAnF3B,gBAmFgD,GAC3B,OAAA,cACD6T,MArFpB,kBAsFmB,MAAA,UACA,MAAA,SAEKpH,UACAvM,UAAW,aAAA,CAC7C,EAAA,CAAA;AAAM5C,cAAAmP;AAAAnP,cAAA4C;AAAA5C,cAAAwV;AAAAxV,cAAA0C;AAAA1C,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAAvB,QAAAA,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAgB,MAAAhB,EAAA,EAAA,MAAAmB,IAAA;mDAjCM,EAAA,WAAA,uCACXH,UAAAA;AAAAA,QAAAA;AAAAA,QAYAG;AAAAA,QAWAG;AAAAA,MAAAA,GAWL;AAAMtB,cAAAsB;AAAAtB,cAAAgB;AAAAhB,cAAAmB;AAAAnB,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAAAwB,QAAAA;AAAA,QAAAxB,EAAA,EAAA,MAAAmP,YAAAnP,EAAAuV,EAAAA,MAAAA,WAAAvV,EAAA4V,EAAAA,MAAAA,gBAAA5V,UAAA+V,oBAAA;AAELvU,YAAA+T,WAAWzT,gCAAA,OAAgB,EAAA,WAAA,eACxB,UAAA;AAAA,QAAAZ,2BAAA,IAACsF,OAAYgQ,OAAAA,EAAAA,MA9FC,sBA+FH/P,IAAiBA,GAAAA,oBACd,OAAA,iBACF,MAAA,SACK0I,UACH4G,OAAiB,oBACjB,OAAApQ,QAAQiQ,YAAY,GAAC;AAAA,QACnC1U,+BAAC+E,KAAAA,gBAAoB,OAAAN,QAAQiQ,YAAY,GACpCA,UAAAA,eAAe,uBAAuB,gCAC3C,CAAA;AAAA,MAAA,GACJ;AAAM5V,cAAAmP;AAAAnP,cAAAuV;AAAAvV,cAAA4V;AAAA5V,cAAA+V;AAAA/V,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAA,QAAAzB,EAAA,EAAA,MAAAuB,OAAAvB,EAAAwB,EAAAA,MAAAA,OAAAxB,EAAAQ,EAAAA,MAAAA,MAAAR,UAAAe,IAAA;mDA/FM,EAAA,WAAA,2BAEZP,UAAAA;AAAAA,QAAAA;AAAAA,QAEAO;AAAAA,QA2CAQ;AAAAA,QAqCCC;AAAAA,MAAAA,GAaL;AAAMxB,cAAAuB;AAAAvB,cAAAwB;AAAAxB,cAAAQ;AAAAR,cAAAe;AAAAf,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAjGNyB,WAAAA;AAAAA,EAiGM;AC5IP,WAAAgV,wBAAA1W,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAiC,UAAA;AAAA,MAAAuV,KAAAnV;AAAAA,MAAAoV,KAAAlV;AAAAA,MAAA4O;AAAAA,IAAAA,IAAApP;AACIyV,UAAAA,MAAAnV,OAAUoD,gBAAVpD;AACAoV,UAAAA,MAAAlV,OAAUkD,gBAAVlD;AAQxC,UAAA;AAAA,MAAAmC;AAAAA,MAAAE;AAAAA,QAGIM,iBAAU;AAAE1C,QAAAA;AAAAR,QAAAA,SAAAmP,UAAA;0CAQP,6BAAoCA,SAAW,CAAA;AAAAnP,aAAAmP;AAAAnP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAAmP,YAAAnP,EAAA4C,CAAAA,MAAAA,gBAAA5C,EAAAyV,CAAAA,MAAAA,OAAAzV,SAAA0C,QAAA;AAE/C+S,WAAAA,sCAAO,OAAgB,EAAA,WAAA,cACpB,UAACvU,2BAAA,IAAAuF,GAAA,oBAAA,EAA0B,OAAA7C,OAAAA,MAAMlB,QATvB,gBAS4C,GACxByM,UACH,OAAA,cACDmH,MAZhB,kBAae,MAAA,UACA,MAAA,SACK1T,UAAW,aAAA,CAC7C,EAAA,CAAA;AAAM5C,aAAAmP;AAAAnP,aAAA4C;AAAA5C,aAAAyV;AAAAzV,aAAA0C;AAAA1C,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAA,CAAA,MAAAmP,YAAAnP,EAAA4C,CAAAA,MAAAA,gBAAA5C,EAAAwV,CAAAA,MAAAA,OAAAxV,UAAA0C,QAAA;AACL8S,WAAAA,sCAAO,OAAgB,EAAA,WAAA,cACpB,UAACtU,2BAAA,IAAAuF,GAAA,oBAAA,EAA0B,OAAA7C,OAAAA,MAAMlB,QAjBvB,gBAiB4C,GACxByM,UACH,OAAA,cACDoH,MApBhB,kBAqBe,MAAA,UACA,MAAA,SACK3T,UAAW,aAAA,CAC7C,EAAA,CAAA;AAAM5C,aAAAmP;AAAAnP,aAAA4C;AAAA5C,aAAAwV;AAAAxV,cAAA0C;AAAA1C,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,EAAAQ,EAAAA,MAAAA,MAAAR,UAAAY,MAAAZ,EAAA,EAAA,MAAAa,IAAA;kDArBM,EAAA,WAAA,2BAEZL,UAAAA;AAAAA,QAAAA;AAAAA,QAECI;AAAAA,QASAC;AAAAA,MAAAA,GASL;AAAMb,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAtBNc,WAAAA;AAAAA,EAsBM;AC3CP,WAAA4V,gBAAA3W,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,CAAA;AAAyB,UAAA;AAAA,MAAAqC;AAAAA,IAAAA,IAAAvC;AAEwBM,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAQxC,WAAAoB,2BAAA,KAAA,OAAe,EAAA,WAAA,kCACX,UAAA;AAAA,QAAAZ,2BAAA,IAACyV,GACD,UAAA,EAAA;AAAA,uCAAChW,GAAAA,YAAoB,EAAA,SAAA,aACC,WAAA,QAAO,UAE7B,aAAA,CAAA;AAAA,MAAA,GACJ;AAAMX,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAP,QAAAA,SAAAsC,UAAA;AAXd,WAAApB,2BAAAA,IAACgM,GAAAA,iBACsB,EAAA,mBAAI,OACd,SAAA,MACM,gBAAA,OAEX,OAAA7M,IASI,SAEZ,CAAA;AAAkBL,aAAAsC;AAAAtC,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAhBlBO,WAAAA;AAAAA,EAgBkB;ACfnB,WAASqW,kBAAkB;AAAA,IACIC;AAAAA,IACA3H;AAAAA,IACAC;AAAAA,IACAnK;AAAAA,IACAoK;AAAAA,IACAC;AAAAA,EAQtC,GAAG;AAEO,UAAA;AAAA,MACF3M;AAAAA,MACAoU;AAAAA,MACAnU;AAAAA,QACAO,iBAA0B;AAE9B,UAAM6T,kBAAkBC,KAAAA,sBAAsB;AAExC3G,UAAAA,iBAAiBwG,cAAc,kBAAkB;AAEjDI,UAAAA,eAAerT,OAAAA,MAAMlB,QAAQ,cAAc;AAE3CwU,UAAAA,mBAAmBtT,OAAAA,MAAMlB,QAAQ2N,cAAc;AAC/CtB,UAAAA,aAAgCoI,MAAAA,QAAQ,MAAM;AAChD,UAAI,CAACD,oBAAoB,OAAOA,qBAAqB,kBAC1C,CAAA;AACJE,aAAAA,KAAAA,kBAAkBF,gBAAgB,KAAK,CAAE;AAAA,IAAA,GACjD,CAACA,gBAAgB,CAAC;AAEflI,UAAAA,kBAAkBA,CAAC9O,UAA6B;AAClD,UAAI,CAACwC,OACD;AACJC,oBAAc0N,gBAAgBnQ,KAAK;AACnC,UAAI,CAAC2W,aAAa;AACd,cAAMQ,UAAUnX,MAAMoE,OAAOuD,CAAAA,MAAKlC,QAAQkC,GAAGvI,EAAE,CAAC,EAAE4H,IAAI,CAACW,QAAWA,IAAEvI,EAAE;AACtE,YAAI2X,gBAAgB,CAACI,QAAQ7S,SAASyS,YAAY,GAAG;AACjDtU,wBAAc,gBAAgBc,MAAS;AACvCsT,0BAAgB/C,KAAK;AAAA,YACjBsD,MAAM;AAAA,YACNC,SAAS;AAAA,UAAA,CACZ;AAAA,QAAA;AAAA,MACL;AAAA,IAER;AAEA,WAEQzV,2BAAA,KAAA0V,qBAAA,EAAA,UAAA;AAAA,MAACtW,2BAAA,IAAA,OAAA,EAAI,WAAW,eACZ,UAACA,2BAAAA,IAAA,UAAA,EAAS,YACA,WACA,UACA,oBACA,SAAUuO,CAAa,aAAA;AACLY,sBAAAA,gBAAgBZ,WAAW,8CAA8ChM,MAAS;AAAA,MACpG,GACA,SAAS4L,UACH,MAAMA,UACHiC,KAAKmG,CAAAA,QAAOA,IAAIvQ,IAAIwQ,CAAShV,UAAAA,OAAOpD,MAAMsE,OAAAA,MAAM8T,OAAOhV,OAAOpD,EAAE,CAAC,EAAEgF,OAAOqB,OAAO,CAAC,IACrFlC,QACN,gBAAA,CAAiC,EAC/C,CAAA;AAAA,MAECvC,+BAAA,OAAA,EAAI,WAAW,eAEZ,0CAAC,iBACI,EAAA,UAAA;AAAA,QAAA,CAAC2V,eACE3V,2BAAAA,IAAC,0BAAyB,EAAA,UACA,WAAyB,CAAA;AAAA,QACtD2V,eACI3V,2BAAA,IAAA,yBAAA,EAAwB,SAAqB,CAAA;AAAA,MAAA,EAAA,CACtD,EAEJ,CAAA;AAAA,MAEC,CAAC2V,eAAgB3V,2BAAAA,IAAA,OAAA,EAAI,WAAW,eAE7B,UAAAA,2BAAA,IAACmK,GACG,QAAA,EAAA,UACA,UAAU,gBACV,WAAW,MACX,eAAe,CAACnL,YAAkB;AAC9ByC,sBAAc,gBAAgBzC,OAAK;AAAA,MAAA,GAEvC,MAAM,SACN,OAAO,iBACP,OAAO+W,gBAAgB,IACtBlI,UACIzK,WAAAA,OAAQiL,CAAc5J,cAAAA,QAAQ4J,WAAWjQ,EAAE,CAAC,EAC5C4H,IAAKqI,CACF,gBAAArO,2BAAAA,IAAC6K,GAAAA,YACW,EAAA,OAAOwD,YAAUjQ,IAAIqY,SAC5BpI,GAAAA,UAAAA,YAAUC,MAFED,GAAAA,YAAUjQ,EAG3B,CACH,GACT,EAEJ,CAAA;AAAA,IAAA,GACJ;AAAA,EAER;AClGA,QAAMsY,YAAoC;AAAA,IACtC,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,EACd;AAEO,WAAAC,qBAAA9X,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,GAAA;AAA8B,UAAA;AAAA,MAAA6X;AAAAA,MAAAC;AAAAA,MAAA5I;AAAAA,IAAAA,IAAApP;AAUjC,UAAA;AAAA,MAAA2C;AAAAA,MAAAC;AAAAA,QAGIO,iBAAU;AAEd8U,UAAAA,kBAAwBF,WAAW,eAAe;AAClDG,UAAAA,gBAAsB,GAAGD,eAAe;AAGxCE,UAAAA,WAAiB,GAAGF,eAAe;AACnCG,UAAAA,UAAgB,GAAGH,eAAe;AAClCI,UAAAA,cAAoB,GAAGJ,eAAe;AACtCK,UAAAA,WAAiB,GAAGL,eAAe;AAAY3X,QAAAA;AAAA,QAAAL,EAAAkY,CAAAA,MAAAA,YAAAlY,SAAA0C,QAAA;AAEzBkB,WAAAA,OAAAA,MAAMlB,QAAQwV,QAAQ,KAAK;AAAelY,aAAAkY;AAAAlY,aAAA0C;AAAA1C,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAhE,UAAAsY,gBAAsBjY;AAA2CE,QAAAA;AAAA,QAAAP,EAAAoY,CAAAA,MAAAA,eAAApY,SAAA0C,QAAA;AACxCkB,WAAAA,OAAAA,MAAMlB,QAAQ0V,WAAW,KAAK;AAAGpY,aAAAoY;AAAApY,aAAA0C;AAAA1C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAA1D,UAAAuY,mBAAyBhY;AAAkC0E,QAAAA;AAAAuT,QAAAA;AAAAlX,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAlB,QAAAA;AAAAI,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAG,QAAAA;AAAA,QAAAnB,EAAAiY,CAAAA,MAAAA,iBAAAjY,EAAA,CAAA,MAAAmP,YAAAnP,SAAA+X,YAAA/X,EAAAkY,CAAAA,MAAAA,YAAAlY,EAAA,EAAA,MAAAsY,iBAAAtY,EAAAmY,EAAAA,MAAAA,WAAAnY,EAAA,EAAA,MAAA2C,iBAAA3C,UAAAoY,eAAApY,EAAAuY,EAAAA,MAAAA,oBAAAvY,EAAA,EAAA,MAAAqY,YAAArY,UAAA0C,QAAA;AAC3D+V,YAAAA,eAAqB7U,OAAAA,MAAMlB,QAAQyV,OAAO;AAAEvW,UAAAA;AAAA,UAAA5B,EAAAiY,EAAAA,MAAAA,iBAAAjY,UAAA0C,QAAA;AAExBd,eAAAgC,OAAAA,MAAMlB,QAAQuV,aAAa;AAACjY,gBAAAiY;AAAAjY,gBAAA0C;AAAA1C,gBAAA4B;AAAAA,MAAAA,OAAA;AAAAA,eAAA5B,EAAA,EAAA;AAAA,MAAA;AAAhD,YAAA0Y,cAAoB9W;AACpB,YAAA+W,iBAA6ChH,MAAAiH,QAAcF,WAAW,IAAIA,cAAWjV;AACrF,YAAAoV,uBAA6B,CAACF,kBAAkBA,eAAc1R,WAAa;AAACpF,UAAAA;AAAA,UAAA7B,EAAAiY,EAAAA,MAAAA,iBAAAjY,UAAA2C,eAAA;AAElDd,eAAA3B,CAAA,UAAA;AAAA,cAAA,CACjBA,OAAK;AAAEyC,0BAAcsV,eAAaxU,MAAW;AAAA,UAAA,OAAC;AAK9Cd,0BAAcsV,eAAe/X,KAAK;AAAA,UAAA;AAAA,QAAC;AAC3CF,gBAAAiY;AAAAjY,gBAAA2C;AAAA3C,gBAAA6B;AAAAA,MAAAA,OAAA;AAAAA,eAAA7B,EAAA,EAAA;AAAA,MAAA;AAPD,YAAA8Y,oBAA0BjX;AAS1BkX,YAAAA,sBAA4B,OAAOT,kBAAkB;AACrDU,YAAAA,yBAA+B,OAAOT,qBAAqB;AAKtB,YAAA;AAExBrL,WAAAA,GAAAA;AAAe,UAAAlN,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAER,cAAAoB,2BAAA,KAAA,OAAe,EAAA,WAAA,kCACX,UAAA;AAAA,UAAAZ,2BAAA,IAAC+X,GACD,iBAAA,EAAA;AAAA,yCAACtY,GAAAA,YAAoB,EAAA,SAAA,aACC,WAAA,QAAO,UAE7B,qBAAA,CAAA;AAAA,QAAA,GACJ;AAAMX,gBAAAyB;AAAAA,MAAAA,OAAA;AAAAA,cAAAzB,EAAA,EAAA;AAAA,MAAA;AAGmC,WAAA;AAAA+B,UAAAA;AAAA/B,UAAAA,UAAA2Y,gBAAA;AAS1B5W,eAAA4W,kBAAoB,CAAA;AAAA3Y,gBAAA2Y;AAAA3Y,gBAAA+B;AAAAA,MAAAA,OAAA;AAAAA,eAAA/B,EAAA,EAAA;AAAA,MAAA;AAEpBgC,YAAAA,OAAA6W,uBAAoBpV,SAAe;AAAoB4B,UAAAA;AAAA,UAAArF,EAAAiY,EAAAA,MAAAA,iBAAAjY,UAAA2C,eAAA;AAQ7D0C,eAAAqK,OAAAwJ,QAAAtB,SAAwB,EAAC1Q,IAAA5B,CAAAA,SAAA;AAAM,gBAAA,CAAAoE,SAAA8F,KAAA,IAAAlK;AAAc,iBACzCxD,2BAAAA,KAAAqX,GAAAA,iBAAA,EAAmCjZ,OAAI,SAAc,WAAA,2BAGlD,UAAA;AAAA,YAAAgB,2BAAA,IAAA,OAAA,EAAgB,WAAA,uBAEhB,OAAA;AAAA,2CACCsR,GAAAA,QAAa,EAAA,MAAA,SACG,SAAA,QACA,SAAAhN,CAAA,MAAA;AACLA,gBAAC4T,eAAgB;AACjB5T,gBAAC6T,gBAAiB;AAAC,qBACZ1W,cAAcsV,eAAgB/X,CAAAA,OAAK,CAAC;AAAA,YAAA,GAC5C,UAEX,OAAA,CAAA;AAAA,UAAA,EAAA,GAdkBA,OAetB;AAAA,QAAA,CACH;AAACF,gBAAAiY;AAAAjY,gBAAA2C;AAAA3C,gBAAAqF;AAAAA,MAAAA,OAAA;AAAAA,eAAArF,EAAA,EAAA;AAAA,MAAA;AAAAA,UAAAA,UAAAiY,iBAAAjY,EAAAmP,EAAAA,MAAAA,YAAAnP,EAAA8Y,EAAAA,MAAAA,qBAAA9Y,EAAA,EAAA,MAAA+B,QAAA/B,UAAAgC,QAAAhC,EAAA,EAAA,MAAAqF,MAAA;AAlCV,cAAAnE,2BAAAA,IAAA,SAAgB,WAAA,eAEZ,yCAACoY,GACc,aAAA,EAAA,WAAA,UACE,aAAA,0BACHnK,UACJ8I,MAAY,eACX,OAAAlW,MACQ+W,eAAgB,mBACxB,OAAA9W,MACO,cAAAiK,UAOb5G,UAAAA,KAAAA,CAmBL,EACJ,CAAA;AAAMrF,gBAAAiY;AAAAjY,gBAAAmP;AAAAnP,gBAAA8Y;AAAA9Y,gBAAA+B;AAAA/B,gBAAAgC;AAAAhC,gBAAAqF;AAAArF,gBAAAsB;AAAAA,MAAAA,OAAA;AAAAA,cAAAtB,EAAA,EAAA;AAAA,MAAA;AAOe,YAAAsF,OAAAyT,uBAAuB5J;AAC1B5J,YAAAA,OAAAwT,sBAAsB,MAAMT;AAAatY,UAAAA,EAAAkY,EAAAA,MAAAA,YAAAlY,UAAAsF,QAAAtF,EAAA,EAAA,MAAAuF,MAAA;AAN3DhE,oDAAgB,EAAA,WAAA,eACZ,UAACL,+BAAAsF,OAAAA,OAAA,EAAY0R,gBACFzR,IAAAA,GAAAA,oBACG,OAAA,aACD,MAAA,SACI,UAAAnB,MACH,OAAAC,KAAyC,CAAA,GAE3D;AAAMvF,gBAAAkY;AAAAlY,gBAAAsF;AAAAtF,gBAAAuF;AAAAvF,gBAAAuB;AAAAA,MAAAA,OAAA;AAAAA,cAAAvB,EAAA,EAAA;AAAA,MAAA;AAKe,YAAA0F,OAAAsT,0BAA0B7J;AAE7BvJ,YAAAA,OAAAoT,yBAAyB,MAAMT;AAAgBzS,UAAAA;AAAA9F,UAAAA,EAAAoY,EAAAA,MAAAA,eAAApY,UAAA0F,QAAA1F,EAAA,EAAA,MAAA4F,MAAA;AAL7DE,eAAC5E,2BAAA,IAAAsF,OAAY4R,OAAAA,EAAAA,MAAU,aACZ3R,IAAAA,GAAAA,oBACG,OAAA,gBACG,UAAAf,MACJ,MAAA,SACC,OAAAE,MACZ;AAAA5F,gBAAAoY;AAAApY,gBAAA0F;AAAA1F,gBAAA4F;AAAA5F,gBAAA8F;AAAAA,MAAAA,OAAA;AAAAA,eAAA9F,EAAA,EAAA;AAAA,MAAA;AAAA+F,UAAAA;AAAA,UAAA/F,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACFqF,cAACjE,2BAAAA,KAAAnB,GAAAA,YAAA,EAAoB,SAAA,WAAsB,WAAA,oBACvC,UAAA;AAAA,UAAAO,2BAAAA,IAAA,OAAG,UAEyB,mFAAA,CAAA;AAAA,0CASvB,MAPD,EAAA,UAAA;AAAA,YAAAA,2BAAAA,IAAoD,QAAP,UAAE,0CAAA,CAAA;AAAA,YAC/CA,2BAAAA,IAAsE,kBAAL,4DAAA,CAAA;AAAA,YACjEA,2BAAAA,YAAK,UAA8C,8CAAA,CAAA;AAAA,YACnDA,2BAAAA,IAA0C,kBAAL,gCAAA,CAAA;AAAA,YACrCA,2BAAAA,YAAK,UAAmC,mCAAA,CAAA;AAAA,YACxCA,2BAAAA,IAAA,QAAK,UAA+B,+BAAA,CAAA;AAAA,YACpCA,2BAAAA,IAAA,QAAyD,UAAE,sDAAA,CAAA;AAAA,UAAA,EAC/D,CAAA;AAAA,QAAA,GACJ;AAAalB,gBAAA+F;AAAAA,MAAAA,OAAA;AAAAA,cAAA/F,EAAA,EAAA;AAAA,MAAA;AAAAgG,UAAAA;AAAA,UAAAhG,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA+X,UAAA;AAIR/R,cAAAE,CAAAA,SAAA;AAAC,gBAAA;AAAA,YAAAsO;AAAAA,YAAAC;AAAAA,UAAAA,IAAAvO;AAIS,iBAAAhF,+BAAC,iBACG,OAAA,oCACG,UAAA6W,YAAY5I,UAChBsF,MACCD,OAAQ;AAAA,QAAA;AACtBxU,gBAAAmP;AAAAnP,gBAAA+X;AAAA/X,gBAAAgG;AAAAA,MAAAA,OAAA;AAAAA,cAAAhG,EAAA,EAAA;AAAA,MAAA;AAAAkG,UAAAA;AAAA,UAAAlG,EAAAqY,EAAAA,MAAAA,YAAArY,UAAAgG,KAAA;AAXLE,6CAACM,OAAY6R,OAAAA,EAAAA,gBACD,MAAA,YACPrS,UAUL,KAAA;AAAQhG,gBAAAqY;AAAArY,gBAAAgG;AAAAhG,gBAAAkG;AAAAA,MAAAA,OAAA;AAAAA,cAAAlG,EAAA,EAAA;AAAA,MAAA;AAAAmG,UAAAA;AAAA,UAAAnG,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAERyF,6CAACxF,GAAoB,YAAA,EAAA,SAAA,WAAsB,WAAA,oBAAoB,UAM/D,+JAAA;AAAaX,gBAAAmG;AAAAA,MAAAA,OAAA;AAAAA,cAAAnG,EAAA,EAAA;AAAA,MAAA;AAAA,UAAAA,EAAA8F,EAAAA,MAAAA,QAAA9F,UAAAkG,KAAA;qDA3CD,EAAA,WAAA,eACZJ,UAAAA;AAAAA,UAAAA;AAAAA,UAOAC;AAAAA,UAeAG;AAAAA,UAcAC;AAAAA,QAAAA,GAOJ;AAAMnG,gBAAA8F;AAAA9F,gBAAAkG;AAAAlG,gBAAAwB;AAAAA,MAAAA,OAAA;AAAAA,cAAAxB,EAAA,EAAA;AAAA,MAAA;AAEuB,WAAA;AACxByG,WAAAA,GAAAA;AAAyB0R,WAAAA;AACQ,WAAA;AACc,WAAA;AACf,WAAA;AACNpX,WAAA0X,iBAAYhV,UAAkBgV,iBAAY,OAAYA,aAAYd,aAAc;AAAE3X,aAAAiY;AAAAjY,aAAAmP;AAAAnP,aAAA+X;AAAA/X,aAAAkY;AAAAlY,cAAAsY;AAAAtY,cAAAmY;AAAAnY,cAAA2C;AAAA3C,cAAAoY;AAAApY,cAAAuY;AAAAvY,cAAAqY;AAAArY,cAAA0C;AAAA1C,cAAAiF;AAAAjF,cAAAwY;AAAAxY,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAwB;AAAAxB,cAAAyB;AAAAzB,cAAA0B;AAAA1B,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAA8D,WAAAjF,EAAA,EAAA;AAAAwY,WAAAxY,EAAA,EAAA;AAAAsB,YAAAtB,EAAA,EAAA;AAAAuB,YAAAvB,EAAA,EAAA;AAAAwB,YAAAxB,EAAA,EAAA;AAAAyB,YAAAzB,EAAA,EAAA;AAAA0B,YAAA1B,EAAA,EAAA;AAAAQ,WAAAR,EAAA,EAAA;AAAAY,WAAAZ,EAAA,EAAA;AAAAa,WAAAb,EAAA,EAAA;AAAAc,WAAAd,EAAA,EAAA;AAAAe,WAAAf,EAAA,EAAA;AAAAgB,WAAAhB,EAAA,EAAA;AAAAmB,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA,QAAA5B,EAAAmY,EAAAA,MAAAA,WAAAnY,UAAA2C,eAAA;AAC/Ef,YAAAmH,CAAA,QAAA;AACNkF,cAAAA,UAAczI,IAACC,OAAAvF;AAAc,YACzBA,YAAU,IAAE;AAAEyC,wBAAcwV,SAAO1U,MAAW;AAAA,QAAA,OAAC;AAChC0U,wBAAAA,SAASoB,SAASrZ,OAAK,CAAC;AAAA,QAAA;AAAA,MAAC;AAC/CF,cAAAmY;AAAAnY,cAAA2C;AAAA3C,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA7B,QAAAA,EAAAiF,EAAAA,MAAAA,MAAAjF,EAAA4B,EAAAA,MAAAA,OAAA5B,EAAAQ,EAAAA,MAAAA,MAAAR,UAAAY,MAAAZ,EAAA,EAAA,MAAAa,MAAAb,EAAA,EAAA,MAAAc,MAAAd,EAAA,EAAA,MAAAe,IAAA;AATrBc,YAACX,2BAAA,IAAA,IAAA,EAAyBiX,UACA,MAAAvX,IACC,OAAAC,IACD,MAAAC,IACC,OAAAC,IACG,UAAAa,KAK5B;AAAA5B,cAAAiF;AAAAjF,cAAA4B;AAAA5B,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAf,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA,QAAA/B,EAAA6B,EAAAA,MAAAA,OAAA7B,UAAAgB,IAAA;AAXNe,YAYMb,2BAAA,IAAA,OAAA,EAZU,WAAAF,IACZa,UAWJ,KAAA;AAAM7B,cAAA6B;AAAA7B,cAAAgB;AAAAhB,cAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,EAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAA,QAAAhC,EAAAsB,EAAAA,MAAAA,OAAAtB,EAAA,EAAA,MAAAuB,OAAAvB,EAAAwB,EAAAA,MAAAA,OAAAxB,EAAA,EAAA,MAAA+B,OAAA/B,UAAAmB,IAAA;AA5GV,YAAAW,2BAAA,KAAA,OAAgB,EAAA,WAAAX,IAEZG,UAAAA;AAAAA,QAAAA;AAAAA,QAuCAC;AAAAA,QASAC;AAAAA,QA8CAO;AAAAA,MAAAA,GAcJ;AAAM/B,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAwB;AAAAxB,cAAA+B;AAAA/B,cAAAmB;AAAAnB,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AAAAqF,QAAAA;AAAArF,QAAAA,EAAAwY,EAAAA,MAAAA,MAAAxY,UAAAyB,OAAAzB,EAAA,EAAA,MAAAgC,KAAA;AAzHVqD,YAACnE,2BAAA,IAAA,IAAA,EAEO,OAAAO,KASJO,UA+GJ,KAAA;AAAkBhC,cAAAwY;AAAAxY,cAAAyB;AAAAzB,cAAAgC;AAAAhC,cAAAqF;AAAAA,IAAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAAsF,QAAAA;AAAA,QAAAtF,EAAA0B,EAAAA,MAAAA,OAAA1B,UAAAqF,KAAA;AA5HtBC,YA8HMpE,2BAAA,IAAA,OAAA,EA9HU,WAAAQ,KAEZ2D,UA4HJ,KAAA;AAAMrF,cAAA0B;AAAA1B,cAAAqF;AAAArF,cAAAsF;AAAAA,IAAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AAAAuF,QAAAA;AAAA,QAAAvF,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA8X,UAAA;aAKIA,oDAA4B,WAAA,2BAC1B,UAAA5W,2BAAAA,IAAC,2BAAoCiO,EAAAA,SAAAA,CAAQ,EACjD,CAAA;AAAMnP,cAAAmP;AAAAnP,cAAA8X;AAAA9X,cAAAuF;AAAAA,IAAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AAAA0F,QAAAA;AAAA,QAAA1F,EAAAmP,EAAAA,MAAAA,YAAAnP,WAAA8X,UAAA;AACLA,YAAAA,kDAA4B,EAAA,WAAA,eACzB,UAAC5W,2BAAA,IAAA,yBAAA,EAAkCiO,UAAQ,EAC/C,CAAA;AAAMnP,cAAAmP;AAAAnP,eAAA8X;AAAA9X,eAAA0F;AAAAA,IAAAA,OAAA;AAAAA,YAAA1F,EAAA,GAAA;AAAA,IAAA;AAAA4F,QAAAA;AAAA,QAAA5F,EAAAuF,GAAAA,MAAAA,OAAAvF,WAAA0F,KAAA;AARdE,oDAAgB,WAAA,eAEZ,0CAAC,iBACIL,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAGAG;AAAAA,MAAAA,EAAAA,CAGL,EAEJ,CAAA;AAAM1F,eAAAuF;AAAAvF,eAAA0F;AAAA1F,eAAA4F;AAAAA,IAAAA,OAAA;AAAAA,YAAA5F,EAAA,GAAA;AAAA,IAAA;AAAA8F,QAAAA;AAAA,QAAA9F,EAAAsF,GAAAA,MAAAA,OAAAtF,WAAA4F,KAAA;AA7IVE,YAEIR,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAgIAM;AAAAA,MAAAA,GAWM;AACP5F,eAAAsF;AAAAtF,eAAA4F;AAAA5F,eAAA8F;AAAAA,IAAAA,OAAA;AAAAA,YAAA9F,EAAA,GAAA;AAAA,IAAA;AA9IH8F,WAAAA;AAAAA,EA8IG;AA3LJ,WAAAmG,SAAAuN,UAAA;AAAA,QAyEiC,CAACA,YAAYA,SAAQvS,WAAa,GAAA;AAAS,aAAA;AAAA,IAAA;AACxCuS,WAAAA,SAAQtS,IAAAoE,OAAgC,EAAChH,OAAA6G,QACX,EAACsO,KAC5B,IAAI;AAAA,EAAC;AA5E5C,WAAAtO,SAAAM,KAAA;AAAA,WA2EwD9F,QAAQkC,GAAC;AAAA,EAAC;AA3ElE,WAAAyD,QAAAzD,GAAA;AAAA,WAAA+P,UA0E0E/P,CAAC;AAAA,EAAA;ACjG3E,WAAS6R,iBAAiBC,UAA0D;AACnFC,QAAAA,KAAAA,kBAAkBD,QAAQ,EACnB,QAAA;AACPC,QAAAA,KAAAA,kBAAkBD,QAA6B,EACxC,QAAA;AAAA,SACN;AACD,YAAME,YAAYF;AAClB,UAAIE,UAAUC,aAAa,WAAW,OAAOD,UAAUE,OAAO,WACnD,QAAA;AAAA,eACFF,UAAUC,aAAa,WAAWnI,MAAMiH,QAAQiB,UAAUE,EAAE,EAC1D,QAAA;AACJpU,aAAAA,QAAQkU,UAAUG,QAAQ;AAAA,IAAA;AAAA,EAEzC;AAEO,WAASC,4BAA4BC,YAAmD;AAC3F,WAAOxK,OAAOwJ,QAAQgB,UAAU,EAC3B5V,OAAO,CAAC,CAAC6V,GAAGR,QAAQ,MAAMD,iBAAiBC,QAAQ,CAAC,EACpDzS,IAAI,CAAC,CAACkT,KAAKC,iBAAiB,MAAM;AAC/B,YAAMV,WAAWU;AACb,UAAA,CAACX,iBAAiBC,QAAQ,GAAG;AACtBlW,eAAAA;AAAAA,MACAkW,WAAAA,SAASG,aAAa,SAASH,SAASO,YAAY;AACpD,eAAA;AAAA,UACH,CAACE,GAAG,GAAG;AAAA,YACH,GAAGT;AAAAA,YACHO,YAAYD,4BAA4BN,SAASO,UAAkC;AAAA,UAAA;AAAA,QAE3F;AAAA,MAAA,OACG;AACI,eAAA;AAAA,UAAE,CAACE,GAAG,GAAGT;AAAAA,QAAS;AAAA,MAAA;AAAA,IAC7B,CACH,EACArV,OAAQkB,CAAMG,MAAAA,QAAQH,CAAC,CAAC,EACxB8U,OAAO,CAACC,GAAGC,OAAO;AAAA,MAAE,GAAGD;AAAAA,MAAG,GAAGC;AAAAA,IAAE,IAAI,CAAA,CAAE;AAAA,EAC9C;ACfO,WAAAC,qBAAA1a,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA8B,UAAA;AAAA,MAAA0Z;AAAAA,MAAAe;AAAAA,MAAAjL;AAAAA,MAAAkL;AAAAA,MAAAC;AAAAA,MAAApB;AAAAA,IAAAA,IAAAzZ;AAgBjC,UAAA;AAAA,MAAA8a;AAAAA,QAA4BC,gCAA2B;AAAEza,QAAAA;AAAA,QAAAL,EAAA2Z,CAAAA,MAAAA,YAAA3Z,SAAA6a,iBAAA;AAElCE,WAAAA,KAAAA,eAAepB,UAAUkB,eAAe;AAAC7a,aAAA2Z;AAAA3Z,aAAA6a;AAAA7a,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAhE,UAAAgb,iBAAuB3a;AACLqZ,qBAAiBC,QAAQ;AAE3C,UAAAsB,mBAAyBxL,WACnB,qGACC+J,WAAW,mBAAmB;AAAsBjZ,QAAAA;AAAAP,QAAAA,SAAAgb,gBAAA;AAMnDza,0CAEM,OAFU,EAAA,WAAA,OACZ,UAACW,2BAAAA,IAAAga,KAAA,qBAAA,EAAoCF,gBAAc,EACvD,CAAA;AAAMhb,aAAAgb;AAAAhb,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAMEQ,UAAAA,KAAAka,UAAOS,GAAAA,qBAAwB;AAC/Bva,UAAAA,KAAA4Y,WAAQ4B,GAAAA,oBAAuB;AAAEva,QAAAA;AAAAb,QAAAA,EAAAib,CAAAA,MAAAA,oBAAAjb,SAAAQ,MAAAR,EAAA,CAAA,MAAAY,IAAA;AAL1BC,WAAAP,GAAAA,IACP,UACA,gDAA8C+a,cAE9C7a,IACAI,IACA,uDACAqa,gBACJ;AAACjb,aAAAib;AAAAjb,aAAAQ;AAAAR,aAAAY;AAAAZ,aAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,CAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,SAAA2a,eAAA3a,EAAA2Z,EAAAA,MAAAA,SAAAla,MAAA;AAKIqB,WAAA6Z,eACIzZ,2BAAA,IAAAoa,oBAAA,EACG,UAACpa,2BAAAA,IAAAP,GAAA,YAAA,EAAmB,SAAA,SACE,WAAA,QACA,WAAA,kBACjBgZ,UAAQla,SAAAA,OACHka,SAAQla,OACR,IAEV,CAAA,GACJ;AAAgBO,aAAA2a;AAAA,QAAA,EAAA,IAAAhB,SAAAla;AAAAO,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAKSe,UAAAA,KAAA4Z,cAAc,UAAU;AAGxC,UAAA3Z,KAAAga,gBAAcvb;AAAM0B,QAAAA;AAAA,QAAAnB,EAAAe,EAAAA,MAAAA,MAAAf,UAAAgB,IAAA;AAL7BG,WAACD,2BAAAA,IAAAoa,KAAAA,eAAA,EACG,UAACpa,2BAAAA,IAAAP,GAAA,YAAA,EAAqB,WAAA,kBACD,SAAAI,IACC,WAAA,QACJ,OAAA,aACbC,aACL,CAAA,GACJ;AAAgBhB,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAA,QAAAtB,EAAA,EAAA,MAAA2Z,SAAAG,UAAA;AAChBxY,YAACJ,2BAAA,IAAAoa,oBAAA,EACG,UAACpa,+BAAAP,GAAAA,YAAA,EAAmB,SAAA,SACE,WAAA,QACJ,OAAA,YACbgZ,UAAQG,SAAAA,SACb,CAAA,GACJ;AAAgB,QAAA,EAAA,IAAAH,SAAAG;AAAA9Z,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAA,QAAAvB,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAmB,IAAA;AAEd,YAAAW,2BAAA,KAAA,OAjBS,EAAA,WAAA,8BACXX,UAAAA;AAAAA,QAAAA;AAAAA,QAQAG;AAAAA,MAAAA,GAQJ;AAAMtB,cAAAsB;AAAAtB,cAAAmB;AAAAnB,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAAAwB,QAAAA;AAAA,QAAAxB,EAAAuB,EAAAA,MAAAA,OAAAvB,UAAAc,IAAA;AACJ,YAAAgB,2BAAA,KAAA,OAhCS,EAAA,WAAA,wBAEVhB,UAAAA;AAAAA,QAAAA;AAAAA,QAYDS;AAAAA,MAAAA,GAkBJ;AAAMvB,cAAAuB;AAAAvB,cAAAc;AAAAd,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAAzB,QAAAA,UAAA4a,mBAAA;AAELnZ,YAAAmZ,qBAAqB1Z,2BAAAA,IAACP,GAAoB,YAAA,EAAA,SAAA,UAAU,UAErD,QAAA;AAAaX,cAAA4a;AAAA5a,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAAA0B,QAAAA;AAAA1B,QAAAA,EAAAwB,EAAAA,MAAAA,OAAAxB,UAAAyB,OAAAzB,EAAA,EAAA,MAAAa,IAAA;4CAhDhB+R,GACc,OAAA,EAAA,WAAA/R,IAWXW,UAAAA;AAAAA,QAAAA;AAAAA,QAkCCC;AAAAA,MAAAA,GAIL;AAAQzB,cAAAwB;AAAAxB,cAAAyB;AAAAzB,cAAAa;AAAAb,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA5B,QAAAA,EAAA0a,EAAAA,MAAAA,WAAA1a,UAAA0B,OAAA1B,EAAA,EAAA,MAAAO,IAAA;AAzDTqB,2CAAC0Z,oBACJ,EAAA,UAAAxZ,2BAAAA,KAyDM,OAxDO4Y,EAAAA,SACC,WAAA,uCACVna,UAAAA;AAAAA,QAAAA;AAAAA,QAGAmB;AAAAA,MAAAA,EAAAA,CAmDJ,EACJ,CAAA;AAAgB1B,cAAA0a;AAAA1a,cAAA0B;AAAA1B,cAAAO;AAAAP,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AA3DT4B,WAAAA;AAAAA,EA2DS;AAGb,WAAA2Z,2BAAAxb,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAoC,UAAA;AAAA,MAAAR;AAAAA,MAAA+Z;AAAAA,MAAAkB;AAAAA,MAAAf;AAAAA,IAAAA,IAAA5Z;AAYvC,UAAA;AAAA,MAAA8a;AAAAA,QAA4BC,gCAA2B;AAAEza,QAAAA;AAAA,QAAAL,EAAA2Z,CAAAA,MAAAA,YAAA3Z,SAAA6a,iBAAA;AAEjCjB,WAAAA,CAAAA,uBAAkBD,QAAQ,KAAKA,WAAWoB,oBAAepB,UAAUkB,eAAe,IAACpX;AAAYzD,aAAA2Z;AAAA3Z,aAAA6a;AAAA7a,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAvH,UAAAgb,iBAAuB3a;AAAiGE,QAAAA;AAAAP,QAAAA,SAAAgb,gBAAA;AAO3GA,WAAAA,kBAAmB9Z,2BAAAA,IAAAga,KAAAA,qBAAA,EAAoCF,eAAiB,CAAA;AAAAhb,aAAAgb;AAAAhb,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,SAAAgb,gBAAA;AACxExa,WAAA,CAACwa,kBAAkB9Z,2BAAAA,IAAA,OAAA,EACL,WAAA,6DACX,UAACA,2BAAAA,IAAAsa,GAAAA,eAAA,EAAqB,OAAA,WAAiB,MAAA,SAC3C,CAAA,GAAA;AAAMxb,aAAAgb;AAAAhb,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACNE,0CAAC6a,GAA0B,oBAAA,EAAA,OAAA,YAAkB,MAAA,SAAoB,WAAA,4BAA6B;AAAAzb,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAAO,CAAAA,MAAAA,MAAAP,SAAAQ,IAAA;kDANlF,EAAA,WAAA,gBACXD,UAAAA;AAAAA,QAAAA;AAAAA,QACAC;AAAAA,QAIDI;AAAAA,MAAAA,GACJ;AAAMZ,aAAAO;AAAAP,aAAAQ;AAAAR,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAKEc,UAAAA,KAAA4Z,UAAOS,GAAAA,qBAAwB;AAC/Bpa,UAAAA,KAAAyY,WAAQ4B,GAAAA,oBAAuB;AAE/Bpa,UAAAA,KAAAwY,WAAW,mBAAmB;AAAoBrY,QAAAA;AAAAnB,QAAAA,EAAAc,EAAAA,MAAAA,MAAAd,UAAAe,MAAAf,EAAA,EAAA,MAAAgB,IAAA;AAN3CG,WAAAb,OACP,gDAA8C+a,GAAAA,WAE9Cva,IACAC,IACA,uDACAC,EAAkD;AAAChB,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAO9C,UAAAsB,MAAAqY,UAAQla,OACHka,SAAQla,OACRA;AAAI8B,QAAAA;AAAAvB,QAAAA,UAAAsB,KAAA;AALd,YAAAJ,2BAAA,IAACP,iBAAmB,SAAA,SACE,WAAA,QACA,WAAA,kBACjBW,UAIL,IAAA,CAAA;AAAatB,cAAAsB;AAAAtB,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAAAwB,QAAAA;AAAAxB,QAAAA,UAAAgb,gBAAA;AAGRxZ,YAAAwZ,kBAAkB9Z,2BAAA,IAACP,GAAqB,YAAA,EAAA,WAAA,kBACD,SAAA,SACC,WAAA,QACJ,OAAA,aAChCqa,UAAAA,gBAAcvb,MACnB;AAAaO,cAAAgb;AAAAhb,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAAzB,QAAAA,UAAA2Z,UAAA;AAEZlY,YAAAkY,YAAQ,CAAKC,KAAAA,kBAAkBD,QAAQ,oCAAM2B,oBAC1C,EAAA,UAAApa,2BAAAA,IAACP,GAAmB,YAAA,EAAA,SAAA,SACE,WAAA,QACJ,OAAA,YACbgZ,UAAAA,SAAQG,SACb,CAAA,GACJ;AAAgB9Z,cAAA2Z;AAAA3Z,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAAA0B,QAAAA;AAAA1B,QAAAA,UAAA2Z,UAAA;AAEfjY,YAAAiY,YAAYC,KAAAA,kBAAkBD,QAAQ,oCAAM2B,KACzC,eAAA,EAAA,UAAApa,+BAACP,GAAAA,YAAmB,EAAA,SAAA,SACE,WAAA,QACJ,OAAA,YAAW,mEAE7B,CAAA,GACJ;AAAgBX,cAAA2Z;AAAA3Z,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA5B,QAAAA,UAAA2Z,UAAA;AAEf/X,YAAA,CAAC+X,YAAazY,2BAAA,IAAAoa,KAAA,eAAA,EACX,UAACpa,2BAAA,IAAAP,eAAA,EAAmB,SAAA,SACE,WAAA,QACJ,OAAA,YAAW,iEAE7B,CAAA,GACJ;AAAgBX,cAAA2Z;AAAA3Z,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA,QAAA7B,EAAA,EAAA,MAAAwB,OAAAxB,EAAAyB,EAAAA,MAAAA,OAAAzB,EAAA0B,EAAAA,MAAAA,OAAA1B,UAAA4B,KAAA;mDA9BL,EAAA,WAAA,8BACVJ,UAAAA;AAAAA,QAAAA;AAAAA,QAOAC;AAAAA,QAQAC;AAAAA,QAQAE;AAAAA,MAAAA,GAQL;AAAM5B,cAAAwB;AAAAxB,cAAAyB;AAAAzB,cAAA0B;AAAA1B,cAAA4B;AAAA5B,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA,QAAA/B,EAAAuB,EAAAA,MAAAA,OAAAvB,UAAA6B,KAAA;AAUJ,YAAAC,2BAAA,KAAA,OApDS,EAAA,WAAA,wBACXP,UAAAA;AAAAA,QAAAA;AAAAA,QASAM;AAAAA,MAAAA,GA0CJ;AAAM7B,cAAAuB;AAAAvB,cAAA6B;AAAA7B,cAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,EAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAA,QAAAhC,EAAA+B,EAAAA,MAAAA,OAAA/B,UAAAmB,IAAA;AA9DVa,YAACd,2BAAA,IAAA0R,UAAA,EACc,WAAAzR,IASXY,UAsDJ,KAAA;AAAQ/B,cAAA+B;AAAA/B,cAAAmB;AAAAnB,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AAAAqF,QAAAA;AAAArF,QAAAA,EAAA0a,EAAAA,MAAAA,WAAA1a,UAAAgC,OAAAhC,EAAA,EAAA,MAAAa,IAAA;AA3EZwE,qDACaqV,SACC,WAAA,uCACV7Z,UAAAA;AAAAA,QAAAA;AAAAA,QAQAmB;AAAAA,MAAAA,GAiEJ;AAAMhC,cAAA0a;AAAA1a,cAAAgC;AAAAhC,cAAAa;AAAAb,cAAAqF;AAAAA,IAAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AA5ENqF,WAAAA;AAAAA,EA4EM;ACzLP,QAAMqW,eAAelZ,MAAMwQ,KAC9B,SAAA0I,cAAA3b,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAEG,UAAA;AAAA,MAAAsO;AAAAA,MAAAoN;AAAAA,MAAAC;AAAAA,MAAA1B;AAAAA,MAAA2B,iBAAAC;AAAAA,MAAAC;AAAAA,MAAAjZ;AAAAA,MAAAkZ;AAAAA,MAAAC;AAAAA,MAAA7b;AAAAA,MAAA8b;AAAAA,MAAAC;AAAAA,IAAAA,IAAApc;AA0BFM,QAAAA;AAAA,QAAAL,EAAAka,CAAAA,MAAAA,cAAAla,SAAA8b,qBAAA;AAE2BA,WAAAA,uBAAuBpM,OAAAC,KAAYuK,UAAU;AAACla,aAAAka;AAAAla,aAAA8b;AAAA9b,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAtE,UAAA6b,kBAAwBxb;AAA+CE,QAAAA;AAAAP,QAAAA,EAAAuO,CAAAA,MAAAA,aAAAvO,SAAAgc,kBAAAhc,EAAA,CAAA,MAAA6b,iBAAA;AAErDtb,WAAA6b,CAAA,WAAA;AAETA,YAAAA,CAAAA,OAAMC,aAAA;AAAA;AAAA,QAAA;AAGXC,cAAAA,aAAmBF,OAAMG,OAAAnV;AACzBoV,cAAAA,WAAiBJ,OAAMC,YAAAjV;AAEvBqV,cAAAA,qBAA2B9K,MAAAC,KAAWiK,eAAe;AACrD,cAAAa,CAAAA,OAAA,IAAkBD,mBAAkBE,OAAQL,aAAa;AACvCK,2BAAAA,OAAQH,UAAQ,GAAKE,OAAO;AAAC,YAC3CV,gBAAc;AACdA,yBAAeS,oBAAoBlO,SAAS;AAAA,QAAA;AAAA,MAAC;AACpDvO,aAAAuO;AAAAvO,aAAAgc;AAAAhc,aAAA6b;AAAA7b,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAbD,UAAA4c,YAAkBrc;AAmBkBC,UAAAA,KAAa+N,aAAAA,SAAS;AAAE3N,QAAAA;AAAAZ,QAAAA,SAAA+b,oBAAA/b,EAAAI,CAAAA,MAAAA,aAAAJ,EAAA,CAAA,MAAAmc,sBAAAnc,UAAA8C,UAAA9C,EAAAkc,EAAAA,MAAAA,wBAAAlc,EAAAuO,EAAAA,MAAAA,aAAAvO,EAAA,EAAA,MAAA4b,mBAAA5b,UAAAgc,kBAAAhc,EAAAic,EAAAA,MAAAA,oBAAAjc,EAAA,EAAA,MAAAka,cAAAla,UAAA6b,mBAAA7b,EAAA,EAAA,MAAA2b,qBAAA;AAC3C/a,WAAAA,CAAAic,mBAAAC,sBACGhb,2BAAA,KAAA,OAAA,EACQ+a,GAAAA,kBAAiBE,gBAChB,KAAAF,kBAAiBG,UACX5c,WACVyb,UAAAA;AAAAA,QAAAA,mBAAmBA,gBAAe3U,IAAAwH,CAAAA,aAAAtH,UAAA;AAE3BuS,gBAAAA,WAAiBO,WAAWxL,WAAW;AACvC,gBAAAuO,kBAAwBlB,kBAAgBmB,KAAA1I,CAAgBA,UAAAA,MAAK4F,QAAS1L,WAAW;AAE7E,cAAA,CAACiL,YAAQ,CAAKsD,iBAAe;AAC7BE,oBAAAA,KAAa,YAAYzO,WAAW,8CAA8C;AAAC,mBAAA;AAAA,UAAA;AAAA,gDAIlF0O,eAEgB,EAAA,aAAA,eAAe7O,SAAS,IAAIG,WAAW,KAC7CtH,OACN,UAAA,CAAAiW,UAAAC,aAEOpc,2BAAAA,IAACoa,sBACG,UAACpa,+BAAA,mBAAA,EACgB,aACMyY,mBAAAA,UACFsD,iBACPI,UACFva,QACGyL,WACW2N,sBACNF,gBACEC,kBACD,iBAAAqB,SAAQC,aAAA9Z,SAA0BmY,iBAC9BD,qBACDQ,oBAAkB,EAE9C,CAAA,oBApBY5N,SAAS,IAAIG,WAAW,GAuBhD;AAAA,QAAA,CACP,EAACpK,OAAAqB,OAAe;AAAA,QAEpBkX,kBAAiBW;AAAAA,MAAAA,GAEtB;AACHxd,aAAA+b;AAAA/b,aAAAI;AAAAJ,aAAAmc;AAAAnc,cAAA8C;AAAA9C,cAAAkc;AAAAlc,cAAAuO;AAAAvO,cAAA4b;AAAA5b,cAAAgc;AAAAhc,cAAAic;AAAAjc,cAAAka;AAAAla,cAAA6b;AAAA7b,cAAA2b;AAAA3b,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAAQ,EAAAA,MAAAA,MAAAR,UAAAY,IAAA;AA9CLC,WAACK,2BAAA,IAAAuc,eAAA,EAAuB,aAAAjd,IACnBI,UA8CL,IAAA;AAAYZ,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAA4c,EAAAA,MAAAA,aAAA5c,UAAAa,IAAA;AAlDpBC,WAEII,2BAAA,IAAAsW,qBAAA,EAAA,UAAAtW,2BAAA,IAACwc,qBAA2Bd,EAAAA,WACxB/b,cAgDJ,EAAkB,CAAA;AAEnBb,cAAA4c;AAAA5c,cAAAa;AAAAb,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AArDHc,WAAAA;AAAAA,EAqDG,GAGX,CAAC8S,WAAWC,cAAc;AAEtB,UAAM8J,aAAa9J,UAAU8H,qBAAqBiC,WAAW/J,UAAUtF,aAAa,EAAE;AACtF,UAAMsP,cAAcjK,UAAU+H,qBAAqBiC,WAAWhK,UAAUrF,aAAa,EAAE;AACnFoP,QAAAA,cAAcE,YACP,QAAA;AAEJ/J,WAAAA,MAAMF,UAAUsG,YAAYrG,UAAUqG,UAAU,KACnDtG,UAAUiI,oBAAoBhI,UAAUgI,mBACxC/H,MAAMF,UAAUmI,kBAAkBlI,UAAUkI,gBAAgB,KAC5DjI,MAAMF,UAAU9Q,QAAQ+Q,UAAU/Q,MAAM,KACxCgR,MAAMF,UAAUgI,iBAAiB/H,UAAU+H,eAAe;AAAA;AAAA,IAG1DhI,UAAUrF,cAAcsF,UAAUtF,aAClCqF,UAAUuI,uBAAuBtI,UAAUsI;AAAAA,EACnD,CACJ;AAEO,WAAA2B,kBAAA/d,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA2B,UAAA;AAAA,MAAAyO;AAAAA,MAAAH;AAAAA,MAAA8L;AAAAA,MAAA4C;AAAAA,MAAAI;AAAAA,MAAA1B;AAAAA,MAAA7Y;AAAAA,MAAA8Y;AAAAA,MAAAI;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAApc;AA0BjCM,QAAAA;AAAAL,QAAAA,EAAAkc,CAAAA,MAAAA,wBAAAlc,SAAAuO,aAAAvO,EAAA,CAAA,MAAA0O,aAAA;AAE8BwN,WAAAA,sBAAoB1X,SAAW+J,YAAY,GAAGA,SAAS,IAAIG,WAAW,KAAKA,WAAW;AAAC1O,aAAAkc;AAAAlc,aAAAuO;AAAAvO,aAAA0O;AAAA1O,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAlH,UAAA+d,qBAA2B1d;AAAwFE,QAAAA;AAAA,QAAAP,EAAAuO,CAAAA,MAAAA,aAAAvO,SAAA0O,aAAA;AACpGD,WAAAA,UAAUC,aAAaH,SAAS;AAACvO,aAAAuO;AAAAvO,aAAA0O;AAAA1O,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAhD,UAAAge,SAAezd;AACf0d,UAAAA,aAAmBrP,cAAcF,aAAaH,SAAS;AACvD,UAAAkB,WAAiBwO,cAAcnb;AAE3Bob,QAAAA;AACA,QAAA,OAAO7D,sBAAsB,UAAQ;AACrC,YAAAV,WAAiBU;AAAkB,UAC/BV,SAAQG,aAAc,SAASH,SAAQO,YAAW;AAAA1Z,YAAAA;AAAA,YAAAR,EAAAmc,CAAAA,MAAAA,sBAAAnc,SAAA8C,UAAA9C,EAAA,CAAA,MAAAge,UAAAhe,UAAA4b,mBAAA5b,EAAAgc,EAAAA,MAAAA,kBAAAhc,UAAAic,oBAAAjc,EAAA,EAAA,MAAA2Z,SAAAO,cAAAla,UAAA2Z,SAAAkC,mBAAA7b,UAAA2b,qBAAA;AACxCnb,gBAACU,2BAAA,IAAA,cAAA,EACcya,qBACVqC,WAAK,QACJ,YAAArE,SAAQO,YACH,iBAAAP,SAAQkC,iBACjB/Y,QACS8Y,iBACDI,gBACEC,kBACEE,oBACtB;AAAAnc,iBAAAmc;AAAAnc,iBAAA8C;AAAA9C,iBAAAge;AAAAhe,kBAAA4b;AAAA5b,kBAAAgc;AAAAhc,kBAAAic;AAAA,YAAA,EAAA,IAAAtC,SAAAO;AAAA,YAAA,EAAA,IAAAP,SAAAkC;AAAA7b,kBAAA2b;AAAA3b,kBAAAQ;AAAAA,QAAAA,OAAA;AAAAA,gBAAAR,EAAA,EAAA;AAAA,QAAA;AAVQke,kBAAAA;AAAAA,MAAAA;AAAAA,IAAH;AAef,UAAA1E,WAAiBmC,wBAAwBqC;AAAOxd,QAAAA;AAAA,QAAAR,EAAAmc,EAAAA,MAAAA,sBAAAnc,UAAAqa,mBAAA;AAC/B7Z,WAAA6Z,sBAAuB8B,uBAAuBvC,KAAAA,kBAAkBS,iBAAiB,KAAMX,iBAAiBW,iBAAiB;AAAEra,cAAAmc;AAAAnc,cAAAqa;AAAAra,cAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,EAAA;AAAA,IAAA;AAA5I,UAAAga,WAAiBxZ;AAA4HI,QAAAA;AAAAZ,QAAAA,UAAAke,SAAA;AASpItd,WAAAsd,WAAWhd,2BAAAA,IAAA,OAAA,EACG,WAAA,uBAAoBid,uBACxB,OAAA;AAAA,QAAAC,MACG;AAAA,QAAMC,KACP;AAAA,QAAMC,QACH;AAAA,MAAA,GACR;AAAAte,cAAAke;AAAAle,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAA,EAAA,MAAAid,mBAAAjd,EAAA,EAAA,MAAAga,YAAAha,EAAA,EAAA,MAAAyP,YAAAzP,EAAAuO,EAAAA,MAAAA,aAAAvO,EAAA4b,EAAAA,MAAAA,mBAAA5b,EAAA0O,EAAAA,MAAAA,eAAA1O,EAAAqa,EAAAA,MAAAA,qBAAAra,UAAAwZ,UAAA;AAEP3Y,YAAC+Y,KAAAA,kBAAkBS,iBAAiB,MAAM4C,mBAAmBjD,WACxD9Y,2BAAAA,IAAC,sBACWmZ,EAAAA,UAAAA,mBACD,SAAAuB,kBAAwBA,MAAAA,gBAAgBlN,aAAaH,SAAS,IAAC9K,QAC3D,aAAG,MACN+V,UACA/J,cACXvO,2BAAAA,IAAA,4BAAA,EAAiCwN,MAAAA,aACI2L,UAAgB,mBACjB,SAAAuB,wBAAwBA,gBAAgBlN,aAAaH,SAAS,IAAC9K,QAC9D+V,UAAW;AAAAxZ,cAAAid;AAAAjd,cAAAga;AAAAha,cAAAyP;AAAAzP,cAAAuO;AAAAvO,cAAA4b;AAAA5b,cAAA0O;AAAA1O,cAAAqa;AAAAra,cAAAwZ;AAAAxZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,UAAA+d,oBAAA;AAIlDA,WAAAA,sBAAuB7c,2BAAA,IAAAE,GAAA,SAAA,EAAe,OAAA,qBACnC,UAACF,2BAAA,IAAAwR,GAAA,eAAA,EAAmB,MAAA,SAAmB,WAAA,MAAK,CAAA,GAChD;AAAU1S,cAAA+d;AAAA/d,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,EAAAuO,EAAAA,MAAAA,aAAAvO,UAAAic,oBAAAjc,EAAA,EAAA,MAAA0O,aAAA;AAETuN,WAAAA,oBAAqB/a,2BAAAA,IAAAE,GAAAA,SAAA,EAAe,OAAA,UACE,SAAG,MACtC,UAAAF,2BAAAA,IAACiE,GAAAA,YAAgB,EAAA,MAAA,SACC,OAAA,WACG,SAAM8W,MAAAA,iBAAiBvN,aAAaH,SAAS,GAC9D,yCAACgQ,GAAAA,YAAiB,EAAA,MAAA,QAAO,CAAA,EAAA,CAC7B,EACJ,CAAA;AAAUve,cAAAuO;AAAAvO,cAAAic;AAAAjc,cAAA0O;AAAA1O,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAAhB,QAAAA,UAAAgc,gBAAA;AAEThb,WAAAgb,kBAAmB9a,+BAAAE,GAAAA,SAAA,EAAe,OAAA,QACE,SAAA,MACjC,UAACF,2BAAA,IAAAiE,GAAA,YAAA,EACc,WAAA,QACN,MAAA,SAEL,UAAAjE,2BAAA,IAACsd,qBAAqB,MAAA,SAC1B,GAAA,EACJ,CAAA;AAAUxe,cAAAgc;AAAAhc,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAAnB,QAAAA,EAAAc,EAAAA,MAAAA,MAAAd,UAAAe,MAAAf,EAAA,EAAA,MAAAgB,IAAA;kDAvBC,EAAA,WAAA,yCAEVF,UAAAA;AAAAA,QAAAA;AAAAA,QAIAC;AAAAA,QASAC;AAAAA,MAAAA,GASL;AAAMhB,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAAtB,QAAAA,UAAAke,SAAA;AAEL5c,YAAA4c,WAAWhd,2BAAAA,IAAA,OAAgB,EAAA,WAAA,SAAUgd,UAAQ,SAAA;AAAMle,cAAAke;AAAAle,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAA,QAAAvB,EAAA,EAAA,MAAAqd,SAAAoB,mBAAAze,EAAAqd,EAAAA,MAAAA,SAAAqB,kBAAA1e,UAAAqd,SAAAL,YAAAhd,EAAA,EAAA,MAAAsB,OAAAtB,EAAAY,EAAAA,MAAAA,MAAAZ,EAAAa,EAAAA,MAAAA,MAAAb,UAAAmB,IAAA;AApDxDI,YAqDMO,2BAAA,KAAA,OAAA,EApDG,KAAAub,SAAQL,aACTK,SAAQqB,gBAAA,GACRrB,SAAQoB,iBACF,WAAA,kBAET7d,UAAAA;AAAAA,QAAAA;AAAAA,QAQAC;AAAAA,QAYDM;AAAAA,QA0BCG;AAAAA,MAAAA,GACL;AAAM,QAAA,EAAA,IAAA+b,SAAAoB;AAAA,QAAA,EAAA,IAAApB,SAAAqB;AAAA,QAAA,EAAA,IAAArB,SAAAL;AAAAhd,cAAAsB;AAAAtB,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAmB;AAAAnB,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AArDNuB,WAAAA;AAAAA,EAqDM;AClPP,WAAAod,iBAAA5e,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA0B,UAAA;AAAA,MAAAoP;AAAAA,MAAAD;AAAAA,MAAAyL;AAAAA,MAAAsB;AAAAA,IAAAA,IAAApc;AAQ7B,UAAA;AAAA,MAAA2C;AAAAA,MAAAC;AAAAA,QAGIO,iBAAuB;AAE3B,UAAA,CAAA0b,oBAAAC,qBAAA,IAAoDxb,MAAAA,cAAuB;AAC3E,UAAA,CAAAsY,qBAAAmD,sBAAA,IAAsDzb,eAA6B;AACnF,UAAA,CAAA0b,2BAAAC,4BAAA,IAAkE3b,eAA6B;AAAEhD,QAAAA;AAAAL,QAAAA,EAAA0C,CAAAA,MAAAA,OAAAwX,cAAAla,EAAA,CAAA,MAAA0C,OAAAmZ,iBAAA;AAEzExb,WAAAqC,OAAMmZ,mBAAoBnM,OAAAC,KAAYjN,OAAMwX,gBAAiB;AAAC,QAAA,CAAA,IAAAxX,OAAAwX;AAAA,QAAA,CAAA,IAAAxX,OAAAmZ;AAAA7b,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAtF,UAAA6b,kBAAwBxb;AAA+DE,QAAAA;AAAA,QAAAP,EAAA,CAAA,MAAA2C,iBAAA3C,EAAA0C,CAAAA,MAAAA,OAAAwX,cAAAla,EAAA0C,CAAAA,MAAAA,OAAAmZ,iBAAA;AAC7Dtb,WAAAC,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAlB;AAAAA,UAAAqa;AAAAA,QAAAA,IAAAnZ;AAGsC,YAAA,CACxDlB,IAAE;AAAA,gBACGoM,MAAM;AAAA,QAAA;AAChB/I,sBAAc,cAAY;AAAA,UAAA,GAClBD,OAAMwX,cAAiB,CAAA;AAAA,UAAA,CAC1B5a,EAAE,GAAGqa;AAAAA,WAAQ,KACV;AAERsF,cAAAA,yBAA+Bvc,OAAMmZ,mBAAoBnM,OAAAC,KAAYjN,OAAMwX,gBAAiB;AAC5FuC,cAAAA,qBAA2BwC,uBAAsBza,SAAUlF,EAAE,IAAI2f,yBAAsB,CAAA,GAAOA,wBAAwB3f,EAAE;AAC1G,sBAAA,mBAAmBmd,yBAAyB;AAE1DoC,mCAA2B;AAAA,MAAC;AAC/B7e,aAAA2C;AAAA,QAAA,CAAA,IAAAD,OAAAwX;AAAA,QAAA,CAAA,IAAAxX,OAAAmZ;AAAA7b,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAhBD,UAAAkf,oBAA0B3e;AAgBxBC,QAAAA;AAAA,QAAAR,EAAA2C,CAAAA,MAAAA,iBAAA3C,SAAA0C,QAAA;AAEqBlC,WAAAA,CAAAkO,aAAAH,cAAA;AACnB,cAAAyP,SAAetP,cAAcD,UAAUC,aAAaH,SAAS,IAAC9K;AAAa,YAAA,CACtEua,QAAM;AAAA,gBACDtS,MAAM,+BAA+B;AAAA,QAAA;AAE/CyT,cAAAA,iBAAuB/Q,mBAAmB4P,MAAM;AAChDoB,cAAAA,sBAA4B5Q,+BAA+BD,SAAS;AAEpE,cAAA8Q,2BAAyCzb,OAAAA,MAAMlB,QAAQ0c,mBAAmB,KAAK1P,OAAAC,KAAY/L,OAAAA,MAAMlB,QAAQ4L,0BAA0BC,SAAS,CAAC,CAAC;AAEhI4Q,sBAAAA,gBAAc1b,aAAkB;AAC9Cd,sBAAcyc,qBAAqBH,yBAAsB3a,OAAAgb,OAAeA,MAAM5Q,WAAW,QAAQ;AAEjGmQ,mCAA2B;AAC3BC,+BAAsBrb,MAAU;AAChCub,qCAA4Bvb,MAAU;AAAA,MAAC;AAC1CzD,aAAA2C;AAAA3C,aAAA0C;AAAA1C,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAhBD,UAAAuf,iBAAuB/e;AAgBrBI,QAAAA;AAAA,QAAAZ,EAAA,EAAA,MAAA2b,uBAAA3b,EAAA,EAAA,MAAA+e,6BAAA/e,EAAA,EAAA,MAAA0C,OAAAwX,YAAA;AAEF,YAAAsF,yBAA+B7D,sBAAsBlN,UAAUkN,qBAAqBoD,yBAAyB,IAACtb;AACrF+b,WAAAA,yBAAyB5b,aAAMlB,OAAMwX,YAAasF,uBAAsBnR,WAAY,KAAK,cAAc,CAAC,IAAC5K;AAAYzD,cAAA2b;AAAA3b,cAAA+e;AAAA,QAAA,EAAA,IAAArc,OAAAwX;AAAAla,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAA9I,UAAAyf,mBAAyB7e;AAEzB,UAAA8e,QAAc,CAAC7D,mBAAmBA,gBAAe5U,SAAW;AAACpG,QAAAA;AAAAb,QAAAA,UAAA2C,eAAA;AAEtC9B,WAAAA,CAAA8e,mBAAAC,gBAAA;AACnBjd,sBAAc6L,+BAA+BD,WAAS,GAAGsN,wBAAsB;AAAA,MAAC;AACnF7b,cAAA2C;AAAA3C,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAFD,UAAAgc,iBAAuBnb;AAErBC,QAAAA;AAAA,QAAAd,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAMcI,WAACI,2BAAA,IAAAP,eAAA,EAAoB,SAAA,aAAa,UAAwB,4BAAA;AAAaX,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAC,QAAAA;AAAA,QAAAhB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAI1DK,WAAAA,MAAM8d,0BAA0B;AAC9B7d,0CAAC6e,GAAS,SAAA,EAAA;AAAA7f,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAD,WAAAf,EAAA,EAAA;AAAAgB,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAEJmB,UAAAA,KAAAuB,OAAMjD,QAAS;AAAY6B,QAAAA;AAAAtB,QAAAA,UAAAmB,IAAA;mDARrC,EAAA,WAAA,uCACXL,UAAAA;AAAAA,QAAAA;AAAAA,QACAgB,2BAAAA,KAAC0Q,aACS,OAAA,WACG,SAAA,YACA,SAAAzR,IACE,WAAAC,IACd,UAAA;AAAA,UAAA;AAAA,UACoBG;AAAAA,QAAAA,EACrB,CAAA;AAAA,MAAA,GACJ;AAAMnB,cAAAmB;AAAAnB,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAA,QAAAvB,EAAA,EAAA,MAAA0C,OAAAwX,YAAA;AAGcxX,YAAAA,OAAMwX,cAAiB,CAAA;AAAA,QAAA,EAAA,IAAAxX,OAAAwX;AAAAla,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAAAwB,QAAAA;AAAA,QAAAxB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAE3Bc,YAAA,CAAA;AAAExB,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAA,QAAAzB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAEOe,YAAAA,CAAAqe,eAAAC,gBAAA;AACbjB,+BAAuBpQ,aAAW;AAClCsQ,qCAA6BzQ,WAAS;AACtCsQ,kCAA0B;AAAA,MAAC;AAC9B7e,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAAA0B,QAAAA;AAAA,QAAA1B,EAAA,EAAA,MAAAmc,sBAAAnc,EAAAgc,EAAAA,MAAAA,kBAAAhc,EAAA6b,EAAAA,MAAAA,mBAAA7b,UAAAuB,KAAA;AATJ,YAAAL,2BAAAA,IAAA,cACe,EAAA,YAAAK,KACKsa,iBACT,QAAAra,KACY2a,oBACH,iBAAA1a,KAKDua,eAAiB,CAAA;AAAAhc,cAAAmc;AAAAnc,cAAAgc;AAAAhc,cAAA6b;AAAA7b,cAAAuB;AAAAvB,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA5B,QAAAA,UAAA0f,OAAA;AAEpC9d,YAAA8d,SACIxe,+BAAAP,GAAAA,YAAA,EAAoB,SAAA,SACC,WAAA,+CAA8C,UAEpE,uCAAA,CAAA;AAAaX,cAAA0f;AAAA1f,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA,QAAA7B,EAAA0B,EAAAA,MAAAA,OAAA1B,UAAA4B,KAAA;AAjBpB,YAAAE,2BAAA,KAAA8Q,GAAgB,OAAA,EAAA,WAAA,YACblR,UAAAA;AAAAA,QAAAA;AAAAA,QAYCE;AAAAA,MAAAA,GAKL;AAAQ5B,cAAA0B;AAAA1B,cAAA4B;AAAA5B,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA,QAAA/B,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAA6B,KAAA;AACN,YAAAC,2BAAA,KAAA,OA/BU,EAAA,WAAA,eACZR,UAAAA;AAAAA,QAAAA;AAAAA,QAWAO;AAAAA,MAAAA,GAmBJ;AAAM7B,cAAAsB;AAAAtB,cAAA6B;AAAA7B,cAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,EAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAAhC,QAAAA,UAAA2C,eAAA;AAOiBkF,YAAAA,CAAAA,MAAOlF,cAAc,kBAAkBkF,CAAC;AAAC7H,cAAA2C;AAAA3C,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AACjDqF,UAAAA,MAAA3C,OAAMsd,kBAAwB;AAAA1a,QAAAA;AAAA,QAAAtF,EAAAgC,EAAAA,MAAAA,OAAAhC,UAAAqF,KAAA;AALzC,YAAAnE,2BAAAA,IAAC8G,GAAAA,wBACa,EAAA,UAAA,SACJ,MAAA,SACA,OAAA,8BACS,eAAAhG,KACR,OAAAqD,IACT,CAAA;AAAArF,cAAAgC;AAAAhC,cAAAqF;AAAArF,cAAAsF;AAAAA,IAAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AAAAuF,QAAAA;AAAA,QAAAvF,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;2CACDuF,KAAAA,gBAAa,UAGd,2IAAA,CAAA;AAAejG,cAAAuF;AAAAA,IAAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AAAA0F,QAAAA;AAAA1F,QAAAA,UAAAsF,KAAA;AACb,YAAAxD,2BAAA,KAAA,OAZU,EAAA,WAAA,eACZwD,UAAAA;AAAAA,QAAAA;AAAAA,QAOAC;AAAAA,MAAAA,GAIJ;AAAMvF,cAAAsF;AAAAtF,cAAA0F;AAAAA,IAAAA,OAAA;AAAAA,YAAA1F,EAAA,EAAA;AAAA,IAAA;AAAA4F,QAAAA;AAAAE,QAAAA;AAAA,QAAA9F,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAQQkF,YAAAA,MAAA;AACNiZ,mCAA2B;AAC3BC,+BAAsBrb,MAAU;AAChCub,qCAA4Bvb,MAAU;AAAA,MAAC;AAE9BqC,YAAAA,MAAA;AACT+Y,mCAA2B;AAC3BC,+BAAsBrb,MAAU;AAChCub,qCAA4Bvb,MAAU;AAAA,MAAC;AAC1CzD,cAAA4F;AAAA5F,cAAA8F;AAAAA,IAAAA,OAAA;AAAAF,YAAA5F,EAAA,EAAA;AAAA8F,YAAA9F,EAAA,EAAA;AAAA,IAAA;AAMiB+F,UAAAA,MAAAJ,QAAQgW,mBAAmB;AAC/B,UAAA3V,OAAC2V;AACK,UAAAzV,OAACyV;AAECxV,UAAAA,MAAAwV,sBAAmBlY,SAAeoY;AAAezV,QAAAA;AAAApG,QAAAA,EAAAoP,EAAAA,MAAAA,sBAAApP,UAAAmc,sBAAAnc,EAAA,EAAA,MAAAuf,kBAAAvf,EAAAqP,EAAAA,MAAAA,WAAArP,EAAAkf,EAAAA,MAAAA,qBAAAlf,EAAA6a,EAAAA,MAAAA,mBAAA7a,EAAA4e,EAAAA,MAAAA,sBAAA5e,EAAA,EAAA,MAAAyf,oBAAAzf,EAAA,EAAA,MAAA2b,uBAAA3b,EAAA+e,EAAAA,MAAAA,6BAAA/e,UAAA+F,OAAA/F,EAAA,EAAA,MAAAgG,OAAAhG,EAAA,EAAA,MAAAkG,OAAAlG,EAAA,EAAA,MAAAmG,KAAA;AAzB3EC,YAAClF,2BAAA,IAAA,oBAAA,EACY,SAAI,OACI,wBACX0d,MAAAA,oBACcxP,oBACA+M,oBACV,UAAAvW,KAKG,aAAAE,KAKJuJ,SACCkQ,UAAa,gBACV5D,kCACMoD,mBAAAA,2BACTU,UAAe,kBACP,kBAAA1Z,KACJ,cAAAC,KACM,oBAAAE,KACDgZ,mBAAgB,mBACb,sBAAA/Y,KACL0U,iBACnB;AAAA7a,cAAAoP;AAAApP,cAAAmc;AAAAnc,cAAAuf;AAAAvf,cAAAqP;AAAArP,cAAAkf;AAAAlf,cAAA6a;AAAA7a,cAAA4e;AAAA5e,cAAAyf;AAAAzf,cAAA2b;AAAA3b,cAAA+e;AAAA/e,cAAA+F;AAAA/F,cAAAgG;AAAAhG,cAAAkG;AAAAlG,cAAAmG;AAAAnG,cAAAoG;AAAAA,IAAAA,OAAA;AAAAA,YAAApG,EAAA,EAAA;AAAA,IAAA;AAAAqG,QAAAA;AAAArG,QAAAA,EAAA+B,EAAAA,MAAAA,OAAA/B,UAAA0F,OAAA1F,EAAA,EAAA,MAAAoG,KAAA;AA3ENC,YACItE,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAiCA2D;AAAAA,QAcAU;AAAAA,MAAAA,GA2BE;AAEHpG,cAAA+B;AAAA/B,cAAA0F;AAAA1F,cAAAoG;AAAApG,cAAAqG;AAAAA,IAAAA,OAAA;AAAAA,YAAArG,EAAA,EAAA;AAAA,IAAA;AA7EHqG,WAAAA;AAAAA,EA6EG;AC5IJ,WAAA4Z,oBAAAlgB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA6B,UAAA;AAAA,MAAA+E;AAAAA,MAAA+S;AAAAA,MAAA5I;AAAAA,MAAAE;AAAAA,MAAAD;AAAAA,MAAAyL;AAAAA,MAAAsB;AAAAA,IAAAA,IAAApc;AAkBhC,UAAA;AAAA,MAAA2C;AAAAA,MAAAI;AAAAA,MAAAH;AAAAA,MAAAE;AAAAA,QAMIK,iBAAyB;AAE7B,UAAA,CAAA0b,oBAAAC,qBAAA,IAAoDxb,MAAAA,cAAc;AAAE6c,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAA/f,QAAAA;AAAA,QAAAL,EAAA8C,CAAAA,MAAAA,UAAA9C,EAAA,CAAA,MAAA6a,mBAAA7a,EAAA2C,CAAAA,MAAAA,iBAAA3C,EAAA,CAAA,MAAA6C,WAAA7C,SAAA0C,QAAA;AACjDkB,mBAAAA,OAAAA,MAAMlB,QAAQ,IAAI;AAAEnC,UAAAA;AAAA,UAAAP,EAAA8C,CAAAA,MAAAA,UAAA9C,UAAA6C,SAAA;AACftC,cAAAqD,OAAMf,MAAAA,SAAS,IAAI,KAAKe,OAAAA,MAAMd,QAAQ,IAAI;AAAC9C,eAAA8C;AAAA9C,gBAAA6C;AAAA7C,gBAAAO;AAAAA,MAAAA,OAAA;AAAAA,cAAAP,EAAA,EAAA;AAAA,MAAA;AAA3CO,wBAAAA;AAA4CC,UAAAA;AAAAR,UAAAA,UAAA2C,eAAA;AAE1CnC,cAAAI,CAAAA,QAAA;AAAC,gBAAA;AAAA,YAAA+Y;AAAAA,UAAAA,IAAA/Y;AAEvB+B,wBAAc,MAAMgX,QAAQ;AAAA,QAAC;AAChC3Z,gBAAA2C;AAAA3C,gBAAAQ;AAAAA,MAAAA,OAAA;AAAAA,cAAAR,EAAA,EAAA;AAAA,MAAA;AAHyBQ,0BAAAA;AAKX0f,WAAAA,cAAcnF,oBAAemF,YAAYrF,eAAe;AAAC7a,aAAA8C;AAAA9C,aAAA6a;AAAA7a,aAAA2C;AAAA3C,aAAA6C;AAAA7C,aAAA0C;AAAA1C,aAAAkgB;AAAAlgB,aAAAmgB;AAAAngB,aAAAogB;AAAApgB,aAAAK;AAAAA,IAAAA,OAAA;AAAA6f,mBAAAlgB,EAAA,CAAA;AAAAmgB,wBAAAngB,EAAA,CAAA;AAAAogB,0BAAApgB,EAAA,CAAA;AAAAK,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAxE,UAAAqgB,SAAehgB;AAA0DE,QAAAA;AAAA,QAAAP,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAI7DH,WAACW,2BAAA,IAAAP,eAAA,EAAoB,SAAA,aAAa,UAElC,oBAAA;AAAaX,cAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,EAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,UAAAoP,sBAAApP,EAAAmc,EAAAA,MAAAA,sBAAAnc,EAAA,EAAA,MAAAmP,YAAAnP,UAAA+X,YAAA/X,EAAAqP,EAAAA,MAAAA,WAAArP,EAAAkgB,EAAAA,MAAAA,cAAAlgB,EAAA,EAAA,MAAAmgB,mBAAAngB,UAAAogB,qBAAApgB,EAAA6a,EAAAA,MAAAA,mBAAA7a,EAAA,EAAA,MAAA4e,sBAAA5e,UAAAgF,cAAAhF,EAAA,EAAA,MAAAqgB,QAAA;AAQR7f,WAAAI,CAAAA,QACIkB,2BAAA,KAAA8Q,GAAA,OAAA,EAAgB,WAAA,YAEZsN,UAAAA;AAAAA,QAAAA,6CAAe,sBACFA,EAAAA,sBACD,SAAA/Q,WAAQ1L,SAAqBob,MAAAA,0BAA0B,GACnD,aAAA,OACM,mBAAG,MACZ,UAAI,OACJ,iBAAK;AAAA,QAEjB1P,CAAAA,aAAa+Q,cAAepe,2BAAA,KAAA0Q,GAAA,QAAA,EAAgB,SAAA,QACH,MAAA,SACC,OAAA2N,kBAAkB,UAAU,WAC1B,eAAMtB,sBAAqB,IAAK,GAAG,UAAA;AAAA,UAAA;AAAA,aACpEwB,SAASA,OAAM5gB,OAAQ,kBAAkB;AAAA,QAAA,GACtD;AAAA,QAECyB,2BAAAA,IAAA,oBAAA,EACY,SAAA,MACH0d,MAAiB,oBACL7G,kBAAO,UAChB1I,SACK,cAAA,CAAC0I,UACK,oBAAA,CAACA,UACR,mBAAM8G,sBAAqB,KAAM,GAC1BzP,oBACV8Q,sBACQ,kBAAA,OACCE,mBACFpb,iBAAS,YACT6V,iBACGsB,mBAE5B,CAAA;AAAA,MAAA,GAAA;AACHnc,cAAAoP;AAAApP,cAAAmc;AAAAnc,cAAAmP;AAAAnP,cAAA+X;AAAA/X,cAAAqP;AAAArP,cAAAkgB;AAAAlgB,cAAAmgB;AAAAngB,cAAAogB;AAAApgB,cAAA6a;AAAA7a,cAAA4e;AAAA5e,cAAAgF;AAAAhF,cAAAqgB;AAAArgB,cAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,EAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAAkgB,EAAAA,MAAAA,cAAAlgB,UAAAQ,IAAA;AAGH,WAAAsB,2BAAA,KAAA,OAjDU,EAAA,WAAA,eACZvB,UAAAA;AAAAA,QAAAA;AAAAA,uCAGCiG,OAAAA,OACS,EAAA,MAAA,MACC0Z,OAAS,YAKf1f,UAoCL,GAAA,CAAA;AAAA,MAAA,GAEJ;AAAMR,cAAAkgB;AAAAlgB,cAAAQ;AAAAR,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,UAAAmP,UAAA;AAEN,WAAAjO,2BAAA,IAAA,OAAgB,EAAA,WAAA,eAEZ,UAAAA,2BAAA,IAAC,mBACG,UAACA,2BAAAA,IAAA,yBAAA,EAAkCiO,YACvC,CAAA,GAEJ;AAAMnP,cAAAmP;AAAAnP,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAAY,EAAAA,MAAAA,MAAAZ,UAAAa,IAAA;AA1DVC,WACIF,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAmDAC;AAAAA,MAAAA,GAMM;AACPb,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AA3DHc,WAAAA;AAAAA,EA2DG;AC3FJ,QAAMwf,uBAAuB9d,MAAM+d,WACtC,SAAAD,sBAAAvgB,IAAA0E,KAAA;AAAAzE,UAAAA,IAAAC,uBAAA,EAAA;AAA8B,UAAA;AAAA,MAAA+E;AAAAA,MAAAwb;AAAAA,MAAArR;AAAAA,MAAAsR;AAAAA,IAAAA,IAAA1gB;AAQ1B,UAAA;AAAA,MAAA+C;AAAAA,MAAAJ;AAAAA,MAAAC;AAAAA,MAAAI;AAAAA,MAAAF;AAAAA,QAOIK,iBAA0B;AAAE7C,QAAAA;AAAA,QAAAL,EAAA8C,CAAAA,MAAAA,UAAA9C,SAAAgF,YAAA;AAGdA,WAAAA,cAAcpB,aAAMd,QADzB,MACqC;AAAC9C,aAAA8C;AAAA9C,aAAAgF;AAAAhF,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAnD,UAAA0gB,YAAkBrgB;AAAkCE,QAAAA;AAAA,QAAAP,EAAA8C,CAAAA,MAAAA,UAAA9C,SAAAgF,YAAA;AAGpCA,WAAAA,cAAcpB,aAAMd,QADzB,IACmC;AAAC9C,aAAA8C;AAAA9C,aAAAgF;AAAAhF,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAA/C,UAAAkU,UAAgB3T;AAAgCC,QAAAA;AAAA,QAAAR,EAAA8C,CAAAA,MAAAA,UAAA9C,SAAAgF,YAAA;AAGvBA,WAAAA,cAAcpB,aAAMd,QADzB,aAC4C;AAAC9C,aAAA8C;AAAA9C,aAAAgF;AAAAhF,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAjE,UAAA2gB,mBAAyBngB;AAUF,UAAAI,KAAA8B,OAAMjD;AAAMoB,QAAAA;AAAA,QAAAb,EAAA,CAAA,MAAAygB,gBAAAzgB,EAAA+C,EAAAA,MAAAA,mBAAA/C,EAAA2C,EAAAA,MAAAA,iBAAA3C,UAAA6C,SAAA;AACThC,WAAA2E,CAAA,MAAA;AACNob,cAAAA,eAAqBpb,EAACC,OAAAvF;AACtB4D,cAAAA,YAAkBF,OAAAA,MAAMf,SAjBjC,IAiB4C;AAC/B,YAAA,CAACiB,aAAa2c,cAAY;AAC1B9d,wBAnBb,MAmB+Bie,eAAe/c,KAAAA,YAAY+c,YAAY,IAAI,IAAE,KAAO;AAAA,QAAA;AAtBjF,sBAAA,QAwB2BA,kBAAkB;AACtC7d,wBAzBP,QAAM,IAyB2B;AAAA,MAAC;AAC9B/C,aAAAygB;AAAAzgB,cAAA+C;AAAA/C,cAAA2C;AAAA3C,cAAA6C;AAAA7C,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACM,WAAA;AAAA,QAAAmgB,UAAA;AAAA,MAAA;AAAgB7gB,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAIhBe,UAAAA,KAAA4E,QAAQ+a,SAAS;AAAC1f,QAAAA;AAAAhB,QAAAA,UAAAmP,YAAAnP,EAAAyE,EAAAA,MAAAA,OAAAzE,EAAA,EAAA,MAAAa,MAAAb,UAAAe,MAAAf,EAAA0C,EAAAA,MAAAA,OAAAjD,MAAA;AAlB7B,WAAAyB,2BAAA,IAACsF,gBACS/G,MAdT,QAeagF,UAAAA,KACNgC,IAAAA,uBACG,OAAA7F,IACG,UAAAC,IASH,OAAAC,IACM,aAAA,cACb,gBACUqO,UACH,OAAApO,GAAqB,CAAA;AAAAf,cAAAmP;AAAAnP,cAAAyE;AAAAzE,cAAAa;AAAAb,cAAAe;AAAA,QAAA,EAAA,IAAA2B,OAAAjD;AAAAO,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAEXmB,UAAAA,KAAAwE,QAAQ+a,SAAS;AAACpf,QAAAA;AAAA,QAAAtB,EAAA0gB,EAAAA,MAAAA,aAAA1gB,UAAAmB,IAAA;AAAvCG,YAACJ,2BAAA,IAAA+E,mBAAA,EAAoB,OAAA9E,IAChBuf,UACL,WAAA;AAAe1gB,cAAA0gB;AAAA1gB,cAAAmB;AAAAnB,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAA,QAAAvB,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAgB,IAAA;AAvBnBO,4CAAA,OACIP,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAoBAM;AAAAA,MAAAA,GAGJ;AAAMtB,cAAAsB;AAAAtB,cAAAgB;AAAAhB,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAOS,UAAAwB,MAAAkB,OAAMpD;AAAImC,QAAAA;AAAA,QAAAzB,EAAA,EAAA,MAAAygB,gBAAAzgB,EAAA+C,EAAAA,MAAAA,mBAAA/C,EAAA2C,EAAAA,MAAAA,iBAAA3C,UAAA6C,SAAA;AACPpB,YAAAsH,CAAA,QAAA;AACN+X,cAAAA,aAAmBtb,IAACC,OAAAvF;AACpB6gB,cAAAA,cAAoBnd,OAAAA,MAAMf,SA9CjC,MA8C8C;AACnC,YAAA,CAACke,eAAeN,cAAY;AAC5B9d,wBAhDX,QAgD+Bme,aAAaE,KAAUF,UAAAA,UAAU,IAAI,EAAE;AAAA,QAAA;AA7CxE,sBAAA,MA+C2BA,gBAAgB;AAClC/d,wBAhDT,MAAI,IAgD6B;AAAA,MAAC;AAC5B/C,cAAAygB;AAAAzgB,cAAA+C;AAAA/C,cAAA2C;AAAA3C,cAAA6C;AAAA7C,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AACS,UAAA0B,MAAA8e,cAAcrR;AAGjBvN,UAAAA,MAAA+D,QAAQuO,OAAO;AAACrS,QAAAA;AAAA,QAAA7B,EAAAyB,EAAAA,MAAAA,OAAAzB,UAAA0B,OAAA1B,EAAA,EAAA,MAAA4B,OAAA5B,EAAA0C,EAAAA,MAAAA,OAAApD,IAAA;AAjB3BuC,2CAAC2E,OACSlH,OAAAA,EAAAA,MArCX,MAsCSmH,IAAiBA,GAAAA,oBACd,OAAA,MACA,OAAAjF,KACG,UAAAC,KASA,UAAAC,KACV,UAAA,MACK,MAAA,SACE,OAAAE,KAAmB;AAAA5B,cAAAyB;AAAAzB,cAAA0B;AAAA1B,cAAA4B;AAAA,QAAA,EAAA,IAAAc,OAAApD;AAAAU,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AACT+B,UAAAA,MAAA4D,QAAQuO,OAAO;AAAClS,QAAAA;AAAA,QAAAhC,EAAAkU,EAAAA,MAAAA,WAAAlU,UAAA+B,KAAA;AAArCC,YAACd,2BAAA,IAAA+E,mBAAA,EAAoB,OAAAlE,KAChBmS,UACL,SAAA;AAAelU,cAAAkU;AAAAlU,cAAA+B;AAAA/B,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AAAAqF,QAAAA;AAAA,QAAArF,EAAA6B,EAAAA,MAAAA,OAAA7B,UAAAgC,KAAA;AArBnBqD,4CAAA,OACIxD,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAkBAG;AAAAA,MAAAA,GAGJ;AAAMhC,cAAA6B;AAAA7B,cAAAgC;AAAAhC,cAAAqF;AAAAA,IAAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AAOYsF,UAAAA,MAAAK,QAAQgb,gBAAgB;AAACpb,QAAAA;AAAA,QAAAvF,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAAsF,KAAA;AAJvC,YAAApE,2BAAAA,IAACsF,OAAAA,OAAYiE,EAAAA,MAzDL,eA0DGhE,IAAiBA,uBACd,OAAA,eACG0I,UACH,OAAA7J,IAA4B,CAAA;AAAAtF,cAAAmP;AAAAnP,cAAAsF;AAAAtF,cAAAuF;AAAAA,IAAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AACrB0F,UAAAA,MAAAC,QAAQgb,gBAAgB;AAAC/a,QAAAA;AAAA,QAAA5F,EAAA2gB,EAAAA,MAAAA,oBAAA3gB,UAAA0F,KAAA;AAA9CE,YAAC1E,2BAAA,IAAA+E,mBAAA,EAAoB,OAAAP,KAChBib,UACL,kBAAA;AAAe3gB,cAAA2gB;AAAA3gB,cAAA0F;AAAA1F,cAAA4F;AAAAA,IAAAA,OAAA;AAAAA,YAAA5F,EAAA,EAAA;AAAA,IAAA;AAAA8F,QAAAA;AAAA,QAAA9F,EAAAuF,EAAAA,MAAAA,OAAAvF,UAAA4F,KAAA;AARnBE,4CAAA,OACIP,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAKAK;AAAAA,MAAAA,GAGJ;AAAM5F,cAAAuF;AAAAvF,cAAA4F;AAAA5F,cAAA8F;AAAAA,IAAAA,OAAA;AAAAA,YAAA9F,EAAA,EAAA;AAAA,IAAA;AAAA+F,QAAAA;AAAA/F,QAAAA,EAAAuB,EAAAA,MAAAA,OAAAvB,UAAAqF,OAAArF,EAAA,EAAA,MAAA8F,KAAA;mDA7DM,EAAA,WAAA,mCAEZvE,UAAAA;AAAAA,QAAAA;AAAAA,QA0BA8D;AAAAA,QAwBAS;AAAAA,MAAAA,GAWJ;AAAM9F,cAAAuB;AAAAvB,cAAAqF;AAAArF,cAAA8F;AAAA9F,cAAA+F;AAAAA,IAAAA,OAAA;AAAAA,YAAA/F,EAAA,EAAA;AAAA,IAAA;AA/DN+F,WAAAA;AAAAA,EA+DM,CAIlB;ACtGO,WAAAkb,oBAAAlhB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA6B,UAAA;AAAA,MAAAihB;AAAAA,MAAA/R;AAAAA,MAAAnK;AAAAA,IAAAA,IAAAjF;AAUhC,UAAA;AAAA,MAAA2C;AAAAA,MAAAC;AAAAA,QAAkCO,iBAAU;AAAE7C,QAAAA;AAAAL,QAAAA,EAAAmP,CAAAA,MAAAA,YAAAnP,SAAAgF,cAAAhF,EAAA,CAAA,MAAAkhB,UAAA;AAQ7B7gB,WAAA6gB,aAAa,gBACVhgB,+BAAC,4BAAmCiO,UACF,QAAG,MACA,WAAG,MACL,SAAA,MACJ,KAAA,MACA,KAAA,MACC,YACK,WAAG,MACFnK,YAAa;AAAAhF,aAAAmP;AAAAnP,aAAAgF;AAAAhF,aAAAkhB;AAAAlhB,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAP,QAAAA,EAAAmP,CAAAA,MAAAA,YAAAnP,SAAAgF,cAAAhF,EAAA,CAAA,MAAAkhB,UAAA;AACtD3gB,WAAA2gB,aAAa,eACVhgB,2BAAA,IAAC,0BAAmCiO,EAAAA,UACF,QAAA,MACG,WAAA,MACN,KAAA,MACA,KAAG,MACF,MAAA,MACK,WAAG,MACFnK,YAAa;AAAAhF,aAAAmP;AAAAnP,aAAAgF;AAAAhF,aAAAkhB;AAAAlhB,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,EAAAmP,CAAAA,MAAAA,YAAAnP,SAAAgF,cAAAhF,EAAA,EAAA,MAAAkhB,UAAA;AAEtDA,WAAAA,aAAa,WACVhgB,2BAAAA,IAAC,0BAAmCiO,EAAAA,UACL,KAAA,MACA,KAAG,MACF,MAAG,MACGnK,WAAa,CAAA;AAAAhF,aAAAmP;AAAAnP,aAAAgF;AAAAhF,cAAAkhB;AAAAlhB,cAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,EAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,EAAAK,EAAAA,MAAAA,MAAAL,UAAAO,MAAAP,EAAA,EAAA,MAAAQ,IAAA;AA7B/DI,WAAAM,2BAAAA,IAAA,OAAA,EAAgB,WAAA,eAEZ,0CAAC,iBAEIb,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAUAE;AAAAA,QAUAC;AAAAA,MAAAA,EAAAA,CAOL,EAEJ,CAAA;AAAMR,cAAAK;AAAAL,cAAAO;AAAAP,cAAAQ;AAAAR,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,UAAA2C,eAAA;AAMmB9B,WAAA2E,CAAA,MAAA;AACQ,sBAAA,gBAAgBA,EAACC,OAAAvF,UAAkB,KAAEuD,SAAe+B,EAACC,OAAAvF,KAAa;AAAA,MAAC;AACpFF,cAAA2C;AAAA3C,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,UAAA0C,QAAA;AAEMkB,WAAAA,OAAAA,MAAMlB,QAAQ,cAAc,KAAK;AAAE1C,cAAA0C;AAAA1C,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAAa,MAAAb,EAAA,EAAA,MAAAc,IAAA;AARzDC,WAUMG,2BAAAA,IAAA,OAAA,EAVU,WAAA,eAEZ,yCAAC2E,GAAAA,WAAgB,EAAA,MAAA,gBACIsJ,UACA,UAAAtO,IAGH,OAAA,iBACA,OAAAC,GAAmC,CAAA,GAEzD;AAAMd,cAAAmP;AAAAnP,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAAY,EAAAA,MAAAA,MAAAZ,UAAAe,IAAA;AA9CVC,WACIJ,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAmCAG;AAAAA,MAAAA,GAUM;AACPf,cAAAY;AAAAZ,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AA/CHgB,WAAAA;AAAAA,EA+CG;AC5DJ,WAAAmgB,qBAAAphB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA8B,UAAA;AAAA,MAAAkP;AAAAA,IAAAA,IAAApP;AAGjC,UAAA;AAAA,MAAA2C;AAAAA,QAAmBQ,iBAAU;AAAE7C,QAAAA;AAAAL,QAAAA,SAAA0C,QAAA;AACVkB,WAAAA,OAAAA,MAAMlB,QAAQ,cAAc;AAAC1C,aAAA0C;AAAA1C,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAlD,UAAAiX,eAAqB5W;AAA8BE,QAAAA;AAAAP,QAAAA,SAAAmP,UAAA;AAI3C,WAAAjO,2BAAA,IAAA,OAAgB,EAAA,WAAA,eAEZ,UAAAA,2BAAA,IAAC,mBACG,UAACA,2BAAAA,IAAA,2BAAA,EAAoCiO,YACzC,CAAA,GAEJ;AAAMnP,aAAAmP;AAAAnP,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAAiX,CAAAA,MAAAA,gBAAAjX,SAAAmP,UAAA;AAeA,WAAAjO,2BAAAA,IAAA,SAbU,WAAA,eAEZ,yCAACsF,OAAAA,OACS,EAAA,MAAA,gBACL5F,UAAAA,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAA4T;AAAAA,UAAAC;AAAAA,QAAAA,IAAA7T;AAAiC,8CACvB,eACG,EAAA,OAAAqW,iBAAqB,QAAIA,iBAAYxT,SAAiB,0BAA2B,sBAAsBwT,aAAYU,YAChHxI,UACU,oBAAG,MAAUqF,OAC3BC,MAAO;AAAA,SAEzB,EAEJ,CAAA;AAAMzU,aAAAiX;AAAAjX,aAAAmP;AAAAnP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAAO,CAAAA,MAAAA,MAAAP,SAAAQ,IAAA;AAtBVI,WACIL,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAQAC;AAAAA,MAAAA,GAaM;AACPR,aAAAO;AAAAP,aAAAQ;AAAAR,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAvBHY,WAAAA;AAAAA,EAuBG;ACvBJ,WAAAwgB,mBAAArhB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA4B,UAAA;AAAA,MAAAkP;AAAAA,MAAAE;AAAAA,MAAAD;AAAAA,MAAAyL;AAAAA,MAAAsB;AAAAA,IAAAA,IAAApc;AAc/B,UAAA;AAAA,MAAA2C;AAAAA,MAAAC;AAAAA,QAGIO,iBAAyB;AAE7B,UAAA,CAAA0b,oBAAAC,qBAAA,IAAoDxb,MAAAA,cAAuB;AAC3E,UAAA,CAAAsY,qBAAAmD,sBAAA,IAAsDzb,eAA6B;AACnF,UAAA,CAAA0b,2BAAAC,4BAAA,IAAkE3b,eAA6B;AAAEhD,QAAAA;AAAA,QAAAL,EAAA2C,CAAAA,MAAAA,iBAAA3C,EAAA,CAAA,MAAA0C,OAAA2e,OAAAnH,cAAAla,EAAA,CAAA,MAAA0C,OAAA2e,OAAAxF,iBAAA;AAEvExb,WAAAE,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAjB;AAAAA,UAAAiP;AAAAA,UAAAoL;AAAAA,QAAAA,IAAApZ;AAI0B,YAAA,CAC5CjB,IAAE;AAAA,gBACGoM,MAAM;AAAA,QAAA;AAEhB/I,sBAAc,WAAWiM,cAActP,IAAIiP,SAAS,GAAGoL,UAAQ,KAAO;AAEtEsF,cAAAA,yBAA+Bvc,OAAM2e,OAAAxF,mBAA2BnM,OAAAC,KAAYjN,OAAM2e,OAAAnH,gBAAwB;AAC1GuC,cAAAA,qBAA2BwC,uBAAsBza,SAAUlF,EAAE,IAAI2f,yBAAsB,CAAA,GAAOA,wBAAwB3f,EAAE;AACxHqD,sBAAc,WAAW6L,+BAA+BD,SAAS,GAAGkO,oBAAkB,KAAO;AAC7FoC,mCAA2B;AAAA,MAAC;AAC/B7e,aAAA2C;AAAAD,QAAAA,CAAAA,IAAAA,OAAA2e,OAAAnH;AAAAxX,QAAAA,CAAAA,IAAAA,OAAA2e,OAAAxF;AAAA7b,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAdD,UAAAogB,oBAA0B/f;AAcxBE,QAAAA;AAAA,QAAAP,EAAA,CAAA,MAAA2b,uBAAA3b,EAAA+e,CAAAA,MAAAA,6BAAA/e,EAAA0C,CAAAA,MAAAA,OAAA2e,OAAAnH,YAAA;AAEF,YAAAsF,yBAA+B7D,sBAAsBlN,UAAUkN,qBAAqBoD,yBAAyB,IAACtb;AACrF+b,WAAAA,yBAAyB5b,aAAMlB,OAAM2e,OAAAnH,YAAoBsF,uBAAsBnR,WAAY,KAAK,cAAc,CAAC,IAAC5K;AAAYzD,aAAA2b;AAAA3b,aAAA+e;AAAArc,QAAAA,CAAAA,IAAAA,OAAA2e,OAAAnH;AAAAla,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAArJ,UAAAyf,mBAAyBlf;AAA6HC,QAAAA;AAAA,QAAAR,EAAA2C,CAAAA,MAAAA,iBAAA3C,SAAA0C,QAAA;AAE/HlC,WAAAA,CAAAkO,aAAAkR,gBAAA;AACnB,cAAA5B,SAAetP,cAAcD,UAAUC,aAAaH,WAAS,IAAC9K;AAAa,YAAA,CACtEua,QAAM;AAAA,gBACDtS,MAAM,+BAA+B;AAAA,QAAA;AAE/C/I,sBAAc,SAASyL,mBAAmB4P,MAAM,CAAC,IAAEva,QAAA,KAAkB;AACrE,cAAA2b,sBAA4B,SAAS5Q,+BAA+BD,WAAS,CAAC;AAC9E,cAAA8Q,2BAAyCzb,OAAAA,MAAMlB,QAAQ0c,mBAAmB,KAAK1P,OAAAC,KAAY/L,OAAAA,MAAMlB,QAAQ4L,0BAA0BC,WAAS,CAAC,CAAC;AAC9I5L,sBAAcyc,qBAAqBH,yBAAsB3a,OAAAgb,OAAeA,MAAM5Q,WAAW,QAAQ;AAEjGmQ,mCAA2B;AAC3BC,+BAAsBrb,MAAU;AAChCub,qCAA4Bvb,MAAU;AAAA,MAAC;AAC1CzD,aAAA2C;AAAA3C,aAAA0C;AAAA1C,cAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,EAAA;AAAA,IAAA;AAbD,UAAAuf,iBAAuB/e;AAarBI,QAAAA;AAAAC,QAAAA;AAAA,QAAAb,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAMWE,WAAAA,MAAMie,0BAA0B;AAC9Bhe,0CAACgf,GAAS,SAAA,EAAA;AAAA7f,cAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAD,WAAAZ,EAAA,EAAA;AAAAa,WAAAb,EAAA,EAAA;AAAA,IAAA;AAEJc,UAAAA,KAAA4B,OAAMjD,QAAS;AAAYsB,QAAAA;AAAAf,QAAAA,UAAAc,IAAA;AAPxB,WAAAgB,2BAAAA,KAAA0Q,GAAAA,UACpB,WAAA,MACM,OAAA,WAEG,SAAA5R,IACE,WAAAC,IACd,UAAA;AAAA,QAAA;AAAA,QACoBC;AAAAA,MAAAA,GACrB;AAASd,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AART,UAAAshB,iBAAuBvgB;AAQbC,QAAAA;AAAAhB,QAAAA,UAAA2C,eAAA;AAEa3B,WAAAA,CAAA6a,iBAAAkE,gBAAA;AACnBpd,sBAAc,SAAS6L,+BAA+BD,WAAS,CAAC,IAAIsN,iBAAe,KAAO;AAAA,MAAC;AAC9F7b,cAAA2C;AAAA3C,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAFD,UAAAgc,iBAAuBhb;AAErBG,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAMcS,WAACD,2BAAA,IAAAP,eAAA,EAAoB,SAAA,aAAa,UAElC,4BAAA;AAAaX,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAAtB,QAAAA,UAAAshB,gBAAA;AAEX,YAAAxf,2BAAA,KAAA,OALU,EAAA,WAAA,4CACZX,UAAAA;AAAAA,QAAAA;AAAAA,QAGCmgB;AAAAA,MAAAA,GACL;AAAMthB,cAAAshB;AAAAthB,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAA,QAAAvB,EAAA0C,EAAAA,MAAAA,OAAA2e,OAAAnH,YAAA;AAIcxX,YAAAA,OAAM2e,OAAAnH,cAAwB,CAAA;AAAAxX,QAAAA,EAAAA,IAAAA,OAAA2e,OAAAnH;AAAAla,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AACzBwB,UAAAA,MAAAkB,OAAM2e,OAAAxF;AAAuBpa,QAAAA;AAAA,QAAAzB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACtCe,YAAA,CAAA;AAAEzB,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAAA0B,QAAAA;AAAA1B,QAAAA,UAAAmP,UAAA;AAEOzN,YAAAyN,WAAQ1L,SAAAqc,CAAAA,eAAAyB,gBAAA;AAGjBzC,+BAAuBpQ,aAAW;AAClCsQ,qCAA6BzQ,WAAS;AACtCsQ,kCAA0B;AAAA,MAAC;AAC9B7e,cAAAmP;AAAAnP,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AACW4B,UAAAA,MAAAuN,WAAQ1L,SAElBuY;AAAcna,QAAAA;AAAA,QAAA7B,EAAAmc,EAAAA,MAAAA,sBAAAnc,EAAA,EAAA,MAAAuB,OAAAvB,EAAAwB,EAAAA,MAAAA,OAAAxB,EAAA,EAAA,MAAA0B,OAAA1B,UAAA4B,KAAA;AAdxBC,YAACX,2BAAA,IAAA,cAAA,EACe,YAAAK,KACK,iBAAAC,KACT,QAAAC,KACY0a,oBACH,iBAAAza,KAOD,gBAAAE,KAEO;AAAA5B,cAAAmc;AAAAnc,cAAAuB;AAAAvB,cAAAwB;AAAAxB,cAAA0B;AAAA1B,cAAA4B;AAAA5B,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA/B,QAAAA,EAAA,EAAA,MAAAmP,YAAAnP,EAAA,EAAA,MAAA0C,OAAA2e,OAAAxF,iBAAA5U,QAAA;AAE1B,YAAA,CAACkI,YAAazM,OAAM2e,OAAAxF,iBAAA5U,gBACjB/F,2BAAAA,IAAA,OAAA,EAAe,WAAA,+CAA8C,UAE7D,uCAAA,CAAA;AAAMlB,cAAAmP;AAAAnP,cAAA0C,OAAA2e,OAAAxF,iBAAA5U;AAAAjH,cAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,EAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAA,QAAAhC,EAAA6B,EAAAA,MAAAA,OAAA7B,UAAA+B,KAAA;AArBb,YAAAD,2BAAA,KAAA8Q,GAAgB,OAAA,EAAA,WAAA,YAEb/Q,UAAAA;AAAAA,QAAAA;AAAAA,QAgBCE;AAAAA,MAAAA,GAKL;AAAQ/B,cAAA6B;AAAA7B,cAAA+B;AAAA/B,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AAAAqF,QAAAA;AAAA,QAAArF,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAgC,KAAA;AACN,YAAAF,2BAAA,KAAA,OA/BU,EAAA,WAAA,eACZR,UAAAA;AAAAA,QAAAA;AAAAA,QAMAU;AAAAA,MAAAA,GAwBJ;AAAMhC,cAAAsB;AAAAtB,cAAAgC;AAAAhC,cAAAqF;AAAAA,IAAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAAsF,QAAAA;AAAAtF,QAAAA,UAAAoP,sBAAApP,EAAAmc,EAAAA,MAAAA,sBAAAnc,EAAAuf,EAAAA,MAAAA,kBAAAvf,EAAA,EAAA,MAAAmP,YAAAnP,EAAA,EAAA,MAAAqP,WAAArP,EAAAogB,EAAAA,MAAAA,qBAAApgB,UAAA6a,mBAAA7a,EAAA4e,EAAAA,MAAAA,sBAAA5e,EAAA,EAAA,MAAAyf,oBAAAzf,EAAA,EAAA,MAAA2b,uBAAA3b,EAAA+e,EAAAA,MAAAA,6BAAA/e,UAAA0C,OAAA2e,OAAAxF,iBAAA;AAELvW,YAAC6J,CAAAA,YAAajO,2BAAAA,IAAA,oBAAA,EACF,SAAA,OACQ,wBACX0d,MAAiB,oBACdvP,SACWD,oBACV,UAAA,MAAA;AACNyP,mCAA2B;AAC3BC,+BAAsBrb,MAAU;AAChCub,qCAA4Bvb,MAAU;AAAA,MAAC,GAE9B,aAAA,MAAA;AACTob,mCAA2B;AAC3BC,+BAAsBrb,MAAU;AAChCub,qCAA4Bvb,MAAU;AAAA,MAAC,GAEvB0Y,oBACVoD,UAAa,gBACV5D,aAAkB,qBACZoD,mBAAAA,2BACTU,UAAAA,kBACQ,kBAAA9Z,QAAQgW,mBAAmB,GAC/B,cAACA,CAAAA,qBACK,oBAAA,CAACA,qBACFyE,mBACG,sBAAAzE,sBAAmBlY,SAAef,OAAM2e,OAAAxF,iBAC7ChB,gBAAkB,CAAA;AAAA7a,cAAAoP;AAAApP,cAAAmc;AAAAnc,cAAAuf;AAAAvf,cAAAmP;AAAAnP,cAAAqP;AAAArP,cAAAogB;AAAApgB,cAAA6a;AAAA7a,cAAA4e;AAAA5e,cAAAyf;AAAAzf,cAAA2b;AAAA3b,cAAA+e;AAAArc,QAAAA,EAAAA,IAAAA,OAAA2e,OAAAxF;AAAA7b,cAAAsF;AAAAA,IAAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AAAAuF,QAAAA;AAAA,QAAAvF,EAAAqF,EAAAA,MAAAA,OAAArF,UAAAsF,KAAA;AA5D3CC,YACIF,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAiCCC;AAAAA,MAAAA,GA0BsC;AAExCtF,cAAAqF;AAAArF,cAAAsF;AAAAtF,cAAAuF;AAAAA,IAAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AA9DHuF,WAAAA;AAAAA,EA8DG;AC7IJ,WAAAic,yBAAAzhB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAkC,UAAA;AAAA,MAAAkP;AAAAA,IAAAA,IAAApP;AAIrC,UAAA;AAAA,MAAA2C;AAAAA,MAAAE;AAAAA,QAGIM,iBAAU;AAAE7C,QAAAA;AAAAL,QAAAA,SAAAmP,UAAA;0CAaP,6BAAoCA,SAAW,CAAA;AAAAnP,aAAAmP;AAAAnP,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAP,QAAAA,SAAA0C,QAAA;AAIjBkB,WAAAA,OAAAA,MAAMlB,QAfvB,gBAe4C;AAAC1C,aAAA0C;AAAA1C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,EAAAmP,CAAAA,MAAAA,YAAAnP,SAAA4C,gBAAA5C,EAAA,CAAA,MAAAO,IAAA;AAD3DC,iDAAgB,EAAA,WAAA,cACZ,UAACU,+BAAAuF,GAAAA,oBAAA,EAA0B,OAAAlG,IACA,OAAA,aACD+V,MAjBhB,kBAkBe,MAAA,UACA,MAAA,SACKnH,UACAvM,wBAAY,EAC9C,CAAA;AAAM5C,aAAAmP;AAAAnP,aAAA4C;AAAA5C,aAAAO;AAAAP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,SAAA0C,QAAA;AAGyBkB,WAAAA,OAAAA,MAAMlB,QAxBvB,gBAwB4C;AAAC1C,aAAA0C;AAAA1C,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA4C,gBAAA5C,EAAA,EAAA,MAAAY,IAAA;AAD3DC,iDAAgB,EAAA,WAAA,cACZ,UAACK,+BAAAuF,GAAAA,oBAAA,EAA0B,OAAA7F,IACA,OAAA,aACD2V,MA1BhB,kBA2Be,MAAA,UACA,MAAA,SAEKpH,UACAvM,wBAAY,EAC9C,CAAA;AAAM5C,cAAAmP;AAAAnP,cAAA4C;AAAA5C,cAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,UAAA0C,QAAA;AAKSkB,WAAAA,OAAAA,MAAMlB,QApCF,qBAoC4B;AAAC1C,cAAA0C;AAAA1C,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA4C,gBAAA5C,EAAA,EAAA,MAAAc,IAAA;AAFhDC,iDAAgB,EAAA,WAAA,cACZ,UAACG,+BAAAuF,GAAAA,oBAAA,EACU,OAAA3F,IACA,OAAA,aACD2gB,MAtCK,uBAuCN,MAAA,UACA,MAAA,SAEKtS,UACAvM,wBAAY,EAC9B,CAAA;AAAM5C,cAAAmP;AAAAnP,cAAA4C;AAAA5C,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAAhB,QAAAA,UAAA0C,QAAA;AAISkB,WAAAA,OAAAA,MAAMlB,QA/CF,qBA+C4B;AAAC1C,cAAA0C;AAAA1C,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAAnB,QAAAA,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA4C,gBAAA5C,EAAA,EAAA,MAAAgB,IAAA;AAFhDG,iDAAgB,EAAA,WAAA,cACZ,UAACD,+BAAAuF,GAAAA,oBAAA,EACU,OAAAzF,IACA,OAAA,aACD0gB,MAjDK,uBAkDN,MAAA,UACA,MAAA,SAEKvS,UACAvM,wBAAY,EAC9B,CAAA;AAAM5C,cAAAmP;AAAAnP,cAAA4C;AAAA5C,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAAtB,QAAAA,UAAAmP,UAAA;kDAEU,EAAA,WAAA,cACZ,UAAAjO,2BAAA,IAACsF,OAAYmb,OAAAA,EAAAA,MAzDE,uBA0DH,MAAA,YACPpgB,UAAAA,CAAAA,SAAA;AAAC,cAAA;AAAA,UAAAiT;AAAAA,UAAAC;AAAAA,QAAAA,IAAAlT;AAAiC,8CACvB,eACG,EAAA,OAAA,kBACG4N,UACJsF,MACCD,OAAQ;AAAA,SAE3B,EACJ,CAAA;AAAMxU,cAAAmP;AAAAnP,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAAvB,QAAAA,UAAAmP,UAAA;kDACU,EAAA,WAAA,cACZ,UAAAjO,2BAAA,IAACsF,OAAYob,OAAAA,EAAAA,MApEE,uBAqEH,MAAA,YACPpgB,UAAAA,CAAAA,SAAA;AAAC,cAAA;AAAA,UAAAgT,OAAAU;AAAAA,UAAAT,MAAAU;AAAAA,QAAAA,IAAA3T;AACS,eAAAN,+BAAC,iBACG,OAAA,kBACGiO,UACJsF,MAAG,QACFD,OAAI,SAAI;AAAA,SAE3B,EACJ,CAAA;AAAMxU,cAAAmP;AAAAnP,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAAAwB,QAAAA;AAAAxB,QAAAA,UAAAmP,UAAA;kDACU,EAAA,WAAA,cACZ,UAAAjO,2BAAA,IAACsF,OAAYqb,OAAAA,EAAAA,MA/EC,sBAgFF,MAAA,YACPpgB,UAAAA,CAAAA,SAAA;AAAC,cAAA;AAAA,UAAA+S,OAAA2B;AAAAA,UAAA1B,MAAA2B;AAAAA,QAAAA,IAAA3U;AACS,eAAAP,+BAAC,iBACG,OAAA,iBACGiO,UACJsF,MAAG,QACFD,OAAI,SAAI;AAAA,SAE3B,EACJ,CAAA;AAAMxU,cAAAmP;AAAAnP,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAA,QAAAzB,EAAA,EAAA,MAAAK,MAAAL,EAAA,EAAA,MAAAsB,OAAAtB,EAAA,EAAA,MAAAuB,OAAAvB,EAAAwB,EAAAA,MAAAA,OAAAxB,EAAAQ,EAAAA,MAAAA,MAAAR,EAAAa,EAAAA,MAAAA,MAAAb,EAAAe,EAAAA,MAAAA,MAAAf,UAAAmB,IAAA;AACJ,YAAAW,2BAAA,KAAA,OAtFU,EAAA,WAAA,2BACZzB,UAAAA;AAAAA,QAAAA;AAAAA,QAGAG;AAAAA,QAUAK;AAAAA,QAYAE;AAAAA,QAYAI;AAAAA,QAYAG;AAAAA,QAYAC;AAAAA,QAYAC;AAAAA,MAAAA,GAYJ;AAAMxB,cAAAK;AAAAL,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAwB;AAAAxB,cAAAQ;AAAAR,cAAAa;AAAAb,cAAAe;AAAAf,cAAAmB;AAAAnB,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAtFNyB,WAAAA;AAAAA,EAsFM;AC1GP,WAAAqgB,oBAAA/hB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA6B,UAAA;AAAA,MAAAkP;AAAAA,IAAAA,IAAApP;AAIhC,UAAA;AAAA,MAAA2C;AAAAA,MAAAC;AAAAA,QAAkCO,iBAAU;AAAE7C,QAAAA;AAAAL,QAAAA,SAAAmP,UAAA;AAKtC,WAAAjO,2BAAA,IAAA,OAAgB,EAAA,WAAA,eAEZ,UAAAA,2BAAA,IAAC,mBACG,UAACA,2BAAAA,IAAA,0BAAA,EAAmCiO,YACxC,CAAA,GAEJ;AAAMnP,aAAAmP;AAAAnP,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAP,QAAAA,SAAA2C,eAAA;AAOmBpC,WAAAiF,CAAA,MAAA;AACQ,sBAAA,gBAAgBA,EAACC,OAAAvF,UAAkB,KAAEuD,SAAese,WAAWvc,EAACC,OAAAvF,KAAa,CAAC;AAAA,MAAC;AAChGF,aAAA2C;AAAA3C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,SAAA0C,QAAA;AAEMkB,WAAAA,OAAAA,MAAMlB,QAAQ,cAAc,KAAK;AAAE1C,aAAA0C;AAAA1C,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,EAAAmP,CAAAA,MAAAA,YAAAnP,SAAAO,MAAAP,EAAA,CAAA,MAAAQ,IAAA;AATzDI,iDAAgB,EAAA,WAAA,eAEZ,UAAAM,2BAAA,IAAC2E,gBAAgB,MAAA,gBACIsJ,UACJ,MAAA,UACI,UAAA5O,IAGH,OAAA,iBACA,OAAAC,GAAmC,CAAA,GAEzD;AAAMR,aAAAmP;AAAAnP,aAAAO;AAAAP,aAAAQ;AAAAR,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAAK,EAAAA,MAAAA,MAAAL,UAAAY,IAAA;AArBVC,WAEIR,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAQAO;AAAAA,MAAAA,GAWM;AACPZ,cAAAK;AAAAL,cAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAtBHa,WAAAA;AAAAA,EAsBG;AC9BJ,WAAAmhB,uBAAAjiB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAgC,UAAA;AAAA,MAAA8X;AAAAA,MAAAD;AAAAA,MAAA3I;AAAAA,MAAAnK;AAAAA,IAAAA,IAAAjF;AAYnC,UAAA;AAAA,MAAA2C;AAAAA,MAAAE;AAAAA,MAAAE;AAAAA,QAIII,iBAA2C;AAE/C,UAAA+e,aAAmBC,KAAAA,wBAAwB;AAAE,QAAA,CAExCD,YAAU;AAAA5hB,UAAAA;AAAA,UAAAL,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACJL,cAAAa,2BAAA,IAAA,OAAA,EAAgB,WAAA,eACnB,UAAAA,+BAACuR,GAAAA,mBACL,CAAA,GAAA;AAAMzS,eAAAK;AAAAA,MAAAA,OAAA;AAAAA,cAAAL,EAAA,CAAA;AAAA,MAAA;AAFCK,aAAAA;AAAAA,IAAAA;AAIX8hB,UAAAA,WAAiBrK,WAAW,YAAY;AAAOzX,QAAAA;AAAA,QAAAL,EAAAmiB,CAAAA,MAAAA,YAAAniB,SAAA0C,QAAA;AACTkB,WAAAA,OAAAA,MAAMlB,QAAQyf,QAAQ;AAACniB,aAAAmiB;AAAAniB,aAAA0C;AAAA1C,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAA7D,UAAAoiB,YAAsC/hB;AAAwBE,QAAAA;AAAAP,QAAAA,EAAA8C,CAAAA,MAAAA,UAAA9C,SAAAmiB,YAAAniB,EAAA,CAAA,MAAAgF,YAAA;AACxBA,WAAAA,cAAcpB,aAAMd,QAAQqf,QAAQ;AAACniB,aAAA8C;AAAA9C,aAAAmiB;AAAAniB,aAAAgF;AAAAhF,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAA3E,UAAAqiB,YAAsC9hB;AAST,UAAAC,KAACuX,YAAYpS,QAAQyc,SAAS,KAAMjT;AAAQvO,QAAAA;AAAA,QAAAZ,EAAA4C,CAAAA,MAAAA,gBAAA5C,EAAA,CAAA,MAAAqiB,aAAAriB,EAAAmiB,EAAAA,MAAAA,YAAAniB,EAAA,EAAA,MAAAoiB,aAAApiB,UAAAQ,IAAA;AANrE,WAAAU,2BAAAA,IAAAsW,WAAAA,UAAA,EACI,gDAAgB,EAAA,WAAA,eAEZ,UAACtW,2BAAA,IAAAsF,OAAA,OAAA,EAAY2b,MAAO,UACHA,UACL,MAAA,UACK,UAAA3hB,IACH4hB,kBACAC,OAAQ,WACDzf,cACV0f,IAAgBA,kBAE/B,CAAA,EAAA,CAAA,EAAM,CAAA;AAEPtiB,aAAA4C;AAAA5C,aAAAqiB;AAAAriB,cAAAmiB;AAAAniB,cAAAoiB;AAAApiB,cAAAQ;AAAAR,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAdHY,WAAAA;AAAAA,EAcG;AAIJ,WAAA0hB,kBAAAviB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAAkP,QAAAA;AAAA2D,QAAAA;AAAAlQ,QAAAA;AAAAuf,QAAAA;AAAAI,QAAAA;AAAAriB,QAAAA;AAAAF,QAAAA,SAAAD,IAAA;AAA2B,OAAA;AAAA,QAAAoP;AAAAA,QAAAgT;AAAAA,QAAAjiB;AAAAA,QAAA0C;AAAAA,QAAAkQ;AAAAA,QAAA,GAAAyP;AAAAA,MAAAA,IAAAxiB;AAajCC,aAAAD;AAAAC,aAAAmP;AAAAnP,aAAA8S;AAAA9S,aAAA4C;AAAA5C,aAAAmiB;AAAAniB,aAAAuiB;AAAAviB,aAAAE;AAAAA,IAAAA,OAAA;AAAAiP,iBAAAnP,EAAA,CAAA;AAAA8S,cAAA9S,EAAA,CAAA;AAAA4C,qBAAA5C,EAAA,CAAA;AAAAmiB,iBAAAniB,EAAA,CAAA;AAAAuiB,cAAAviB,EAAA,CAAA;AAAAE,cAAAF,EAAA,CAAA;AAAA,IAAA;AAEG,UAAAiiB,aAAmBC,KAAAA,wBAAwB;AAAE,QAAA,CAExCD,YAAU;AAAA5hB,UAAAA;AAAA,UAAAL,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACJL,cAAAa,2BAAA,IAAA,OAAA,EAAgB,WAAA,eACnB,UAAAA,+BAACuR,GAAAA,mBACL,CAAA,GAAA;AAAMzS,eAAAK;AAAAA,MAAAA,OAAA;AAAAA,cAAAL,EAAA,CAAA;AAAA,MAAA;AAFCK,aAAAA;AAAAA,IAAAA;AAEDA,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAAiiB,YAAAO,aAAA;AAEUP,WAAAA,YAAUO,eAAmB,CAAA;AAAA,QAAA,CAAA,IAAAP,YAAAO;AAAAxiB,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAjD,UAAAwiB,cAAoBniB;AAA8BE,QAAAA;AAAAP,QAAAA,EAAAwiB,EAAAA,MAAAA,eAAAxiB,EAAAmP,EAAAA,MAAAA,YAAAnP,EAAA8S,EAAAA,MAAAA,SAAA9S,UAAA4C,gBAAA5C,EAAA,EAAA,MAAAmiB,YAAAniB,EAAA,EAAA,MAAAuiB,SAAAviB,EAAA,EAAA,MAAAE,OAAA;AAElD,YAAAkC,SAAyBuP,MAAAC,KAAW,IAAAf,IAChCnB,OAAAhN,OAAc8f,WAAW,EAACtb,IAAAoE,OAAiB,EAAChH,OAAAqB,OAAe,CAAa,EAAAjD,QAClE;AAEV+f,YAAAA,uBAA6BD,YAAWle,OAAA6G,QAA2B;AAAE3K,UAAAA;AAAAR,UAAAA,UAAAwiB,aAAA;AAc5ChiB,cAAAgZ,CAAA,aAAA;AACTkJ,gBAAAA,qBAA2BF,YAAWtF,KAAAyF,CAAAA,eAAoBA,WAAUrjB,OAAQka,YAAYmJ,WAAUjjB,SAAU8Z,QAAQ;AAAE,cAAA,CACjHkJ,oBAAkB;AAAA,mBAAA;AAAA,UAAA;AAEnB,iBAAA5gB,2BAAA,YAAe,EAAA,WAAA,iBACX,UAAA;AAAA,YAACZ,2BAAAA,IAAAiD,KAAA,aAAA,EAA8Bue,kBAAiB,mBAChD,CAAA;AAAA,YAAAxhB,2BAAAA,IAACP,iBACY,SAAA,aACC,WAAA,oBACT+hB,UAAAA,oBAAkBjjB,KAAAuO,YAAAA,EACvB,CAAA;AAAA,UAAA,GACJ;AAAA,QAAM;AACbhO,gBAAAwiB;AAAAxiB,gBAAAQ;AAAAA,MAAAA,OAAA;AAAAA,cAAAR,EAAA,EAAA;AAAA,MAAA;AAAAY,UAAAA;AAAAZ,UAAAA,UAAAwiB,aAAA;AAGe5hB,cAAA2D,CACZ,UAAArD,2BAAAA,IAAC0hB,GAAAA,aAAmB,EAAA,OAAAre,SAAS,SAGrBie,UAAWle,YAAAA,OAAAue,CAAsBF,iBAAAA,aAAUpe,UAAWA,KAAK,EAAC2C,IAAA4b,CAAAA,iBAE5C5hB,2BAAAA,IAAA6K,GAAAA,YAAA,EAEG,OAAA4W,aAAUrjB,MAAOqjB,aAAUjjB,MAClC,UAAAoC,2BAAAA,KAOM,OAPS,EAAA,WAAA,iBACX,UAAA;AAAA,UAACZ,2BAAAA,IAAAiD,KAAA,aAAA,EAA8Bwe,kBAAS,aACxC,CAAA;AAAA,UAAAzhB,2BAAAA,IAACP,iBACY,SAAA,aACC,WAAA,oBACTgiB,UAAAA,cAAUljB,KAAAuO,YAAAA,EACf,CAAA;AAAA,QAAA,EACJ,CAAA,EATK,GAAA,GAAG2U,aAAUrjB,MAAOqjB,aAAUjjB,IAAK,IAAI6E,KAAK,EAUrD,CACH,EAhBK,GAAA,SAASA,KAAK,EAmBhC;AACHvE,gBAAAwiB;AAAAxiB,gBAAAY;AAAAA,MAAAA,OAAA;AAAAA,cAAAZ,EAAA,EAAA;AAAA,MAAA;2CA/CJqL,GAAAA,QACU,EAAA,OAAA1F,QAAQmN,KAAK,GACV3D,UACH,OAAAjP,SAAS,IACN,UAAA,gBACJiiB,MAAO,UACP,MAAA,SACK,WAAG,MACJvf,UAAW,cACd,OAAA,qBACM,aAAApC,KAaT+hB,GAAAA,OAEHngB,UAAAA;AAAAA,QAAAA,OAAM2gB,QAASniB,GAsBf;AAAA,QAEA6hB,uDAAyBG,GAAmB,aAAA,EAAA,OAAA,SACxCH,UAAoBvb,qBAAAA,IAAA+E,QAahB,EAGT,CAAA;AAAA,MAAA,GAEJ;AAASjM,cAAAwiB;AAAAxiB,cAAAmP;AAAAnP,cAAA8S;AAAA9S,cAAA4C;AAAA5C,cAAAmiB;AAAAniB,cAAAuiB;AAAAviB,cAAAE;AAAAF,cAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,EAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;0CAERuF,KAAAA,gBAAa,UAGd,kEAAA,CAAA;AAAejG,cAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,EAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,UAAAO,IAAA;AA1EnBK,WACIL,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAsEAC;AAAAA,MAAAA,GAGe;AAChBR,cAAAO;AAAAP,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AA3EHY,WAAAA;AAAAA,EA2EG;AA1GJ,WAAAqL,SAAA+W,cAAA;AAoF4B,WAAA9hB,2BAAAA,IAAC6K,GAAAA,YACkB,EAAA,OAAA4W,aAAUrjB,MAAOqjB,aAAUjjB,MACjD,UAAAoC,2BAAA,KAOM,OAPS,EAAA,WAAA,iBACX,UAAA;AAAA,MAACZ,2BAAAA,IAAAiD,KAAA,aAAA,EAA8Bwe,kBAAS;MACxCzhB,2BAAAA,IAACP,iBACY,SAAA,aACC,WAAA,oBACTgiB,UAAAA,cAAUljB,KAAAuO,YAAAA,EACf,CAAA;AAAA,IAAA,EAAA,CACJ,EAToB2U,GAAAA,aAAUrjB,MAAOqjB,aAAUjjB,IAUnD;AAAA,EAAa;AA9FlC,WAAAyL,SAAA8X,KAAA;AAAA,WA4BuDA,CAAAA,IAAG1e;AAAAA,EAAA;AA5B1D,WAAA+G,QAAA9F,GAAA;AAAA,WAyBqCA,EAACjB;AAAAA,EAAA;ACvEtC,WAAA2e,sBAAAnjB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA+B,UAAA;AAAA,MAAAkP;AAAAA,IAAAA,IAAApP;AAIlC,UAAA;AAAA,MAAA2C;AAAAA,MAAAI;AAAAA,MAAAD;AAAAA,MAAAF;AAAAA,QAKIO,iBAA2C;AAAE7C,QAAAA;AAAAL,QAAAA,SAAA0C,QAAA;AAGXkB,WAAAA,OAAAA,MAAMlB,QAD3B,MAC2C;AAAC1C,aAAA0C;AAAA1C,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAA7D,UAAAmjB,YAAsC9iB;AAAwBE,QAAAA;AAAA,QAAAP,EAAA8C,CAAAA,MAAAA,UAAA9C,SAAA6C,SAAA;AACxBtC,WAAAqD,aAAMf,SAF3B,MAE4C,KAAKe,OAAAA,MAAMd,QAFvD,MAEuE;AAAC9C,aAAA8C;AAAA9C,aAAA6C;AAAA7C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAzF,UAAAojB,YAAsC7iB;AAAoDC,QAAAA;AAAAR,QAAAA,SAAA0C,QAAA;AAG/CkB,WAAAA,OAAAA,MAAMlB,QAD3B,WACgD;AAAC1C,aAAA0C;AAAA1C,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAvE,UAAAqjB,iBAA2C7iB;AAA6BI,QAAAA;AAAA,QAAAZ,EAAA8C,CAAAA,MAAAA,UAAA9C,SAAA6C,SAAA;AAC7BjC,WAAAgD,aAAMf,SAF3B,WAEiD,KAAKe,OAAAA,MAAMd,QAF5D,WAEiF;AAAC9C,aAAA8C;AAAA9C,aAAA6C;AAAA7C,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAxG,UAAAsjB,iBAA2C1iB;AAOZ,UAAAC,KAAAsiB,aAAa;AACbriB,UAAAA,KAAA6E,QAAQyd,SAAS;AAACriB,QAAAA;AAAAf,QAAAA,UAAA2C,eAAA;AAEVkF,WAAAA,CAAAA,MAAOlF,cAhB7B,QAgBqDkF,CAAC;AAAC7H,cAAA2C;AAAA3C,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAAG,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAcpDM,WAACE,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,aAAa,UAAW,eAAA;AAC3C5K,WAACD,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,QAAQ,UAAM,UAAA;AAAa/L,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAH,WAAAhB,EAAA,EAAA;AAAAmB,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAA,QAAAtB,EAAA,EAAA,MAAAmP,YAAAnP,EAAAa,EAAAA,MAAAA,MAAAb,EAAAc,EAAAA,MAAAA,MAAAd,UAAAe,IAAA;AAnBlDO,4CAAC+J,GAAakY,QAAAA,EAAAA,MAZb,QAac,OAAA1iB,IACA,OAAAC,IACD,MAAA,SACS,eAAAC,IACR,OAAA,QACI,WAAG,MACD,aAAAuK,SAUH6D,UACdnO,UAAAA;AAAAA,QAAAA;AAAAA,QACAG;AAAAA,MAAAA,GACJ;AAASnB,cAAAmP;AAAAnP,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAf,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AACYuB,UAAAA,MAAAoE,QAAQyd,SAAS;AAAC5hB,QAAAA;AAAA,QAAAxB,EAAAojB,EAAAA,MAAAA,aAAApjB,UAAAuB,KAAA;AAAvCC,YAACN,2BAAA,IAAA+E,mBAAA,EAAoB,OAAA1E,KAChB6hB,UACL,WAAA;AAAepjB,cAAAojB;AAAApjB,cAAAuB;AAAAvB,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAA,QAAAzB,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAwB,KAAA;AAxBnBC,4CAAA,OACIH,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAqBAE;AAAAA,MAAAA,GAGJ;AAAMxB,cAAAsB;AAAAtB,cAAAwB;AAAAxB,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAMa,UAAA0B,MAAA2hB,kBAAkB;AAAEzhB,QAAAA;AAAA5B,QAAAA,UAAA2C,eAAA;AACZf,YAAAuK,SAAOxJ,cAvCxB,aAuCqDkF,QAAM,SAAgBA,OAAAA,GAAC;AAAC7H,cAAA2C;AAAA3C,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAWpE6B,UAAAA,MAAA8D,QAAQ2d,cAAc;AAACvhB,QAAAA;AAAAC,QAAAA;AAAAqD,QAAAA;AAAA,QAAArF,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAElCqB,YAACb,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,QAAQ,UAAM,UAAA;AACjC/J,YAACd,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,aAAa,UAAW,eAAA;AAC3C1G,YAACnE,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,aAAa,UAAe,mBAAA;AAAa/L,cAAA+B;AAAA/B,cAAAgC;AAAAhC,cAAAqF;AAAAA,IAAAA,OAAA;AAAAtD,YAAA/B,EAAA,EAAA;AAAAgC,YAAAhC,EAAA,EAAA;AAAAqF,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAAsF,QAAAA;AAAA,QAAAtF,EAAA,EAAA,MAAAmP,YAAAnP,EAAA0B,EAAAA,MAAAA,OAAA1B,EAAA4B,EAAAA,MAAAA,OAAA5B,UAAA6B,KAAA;AApBhEyD,4CAAC+F,GAAamY,QAAAA,EAAAA,MAlCR,aAmCYrU,UACJ,MAAA,SACK,WAAG,MACP,OAAAzN,KACQ,eAAAE,KACF,aAAAuJ,UAUN,OAAAtJ,KACA,OAAA,mBACXE,UAAAA;AAAAA,QAAAA;AAAAA,QACAC;AAAAA,QACAqD;AAAAA,MAAAA,GACJ;AAASrF,cAAAmP;AAAAnP,cAAA0B;AAAA1B,cAAA4B;AAAA5B,cAAA6B;AAAA7B,cAAAsF;AAAAA,IAAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AACYuF,UAAAA,MAAAI,QAAQ2d,cAAc;AACtC,UAAA5d,MAAA4d,kBAAkB;AAAsE1d,QAAAA;AAAA,QAAA5F,EAAAuF,EAAAA,MAAAA,OAAAvF,UAAA0F,KAAA;AAD7FE,YAAC1E,2BAAA,IAAA+E,mBAAA,EAAoB,OAAAV,KAChBG,UACL,KAAA;AAAe1F,cAAAuF;AAAAvF,cAAA0F;AAAA1F,cAAA4F;AAAAA,IAAAA,OAAA;AAAAA,YAAA5F,EAAA,EAAA;AAAA,IAAA;AAAA8F,QAAAA;AAAA,QAAA9F,EAAAsF,EAAAA,MAAAA,OAAAtF,UAAA4F,KAAA;AAzBnBE,4CAAA,OACIR,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAsBAM;AAAAA,MAAAA,GAGJ;AAAM5F,cAAAsF;AAAAtF,cAAA4F;AAAA5F,cAAA8F;AAAAA,IAAAA,OAAA;AAAAA,YAAA9F,EAAA,EAAA;AAAA,IAAA;AAAA+F,QAAAA;AAAA,QAAA/F,EAAAyB,EAAAA,MAAAA,OAAAzB,UAAA8F,KAAA;AAEJ,YAAAhE,2BAAA,KAAA,OAvDU,EAAA,WAAA,mCACZL,UAAAA;AAAAA,QAAAA;AAAAA,QA0BAqE;AAAAA,MAAAA,GA4BJ;AAAM9F,cAAAyB;AAAAzB,cAAA8F;AAAA9F,cAAA+F;AAAAA,IAAAA,OAAA;AAAAA,YAAA/F,EAAA,EAAA;AAAA,IAAA;AAAAgG,QAAAA;AAAAhG,QAAAA,UAAAmP,UAAA;AAEN,YAAAjO,2BAAA,IAAA,OAAgB,EAAA,WAAA,eACZ,UAAAA,2BAAA,IAAC,mBACG,UAACA,2BAAAA,IAAA,2BAAA,EAAoCiO,YACzC,CAAA,GACJ;AAAMnP,cAAAmP;AAAAnP,cAAAgG;AAAAA,IAAAA,OAAA;AAAAA,YAAAhG,EAAA,EAAA;AAAA,IAAA;AAAAkG,QAAAA;AAAA,QAAAlG,EAAA+F,EAAAA,MAAAA,OAAA/F,UAAAgG,KAAA;AA9DVE,YACIH,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAyDAC;AAAAA,MAAAA,GAIM;AACPhG,cAAA+F;AAAA/F,cAAAgG;AAAAhG,cAAAkG;AAAAA,IAAAA,OAAA;AAAAA,YAAAlG,EAAA,EAAA;AAAA,IAAA;AA/DHkG,WAAAA;AAAAA,EA+DG;AAnFJ,WAAAiF,SAAAuB,KAAA;AAAA,YAwDiC7E,KAAC;AAAA,MAAA,KACA,aAAW;AACL,eAAA;AAAA,MAAA;AAAA,MAAW,KACjB,aAAW;AACL,eAAA;AAAA,MAAA;AAAA,MAAe,SAAA;AAEf,eAAA;AAAA,MAAA;AAAA,IAAM;AAAA,EAAA;AA9D9C,WAAAyD,QAAAG,KAAA;AAAA,YA+BiC5D,KAAC;AAAA,MAAA,KACA,aAAW;AACL,eAAA;AAAA,MAAA;AAAA,MAAW,KACjB,QAAM;AACA,eAAA;AAAA,MAAA;AAAA,MAAM,SAAA;AAEN,eAAA;AAAA,MAAA;AAAA,IAAE;AAAA,EAAA;ACvC1C,WAAA4b,2BAAA1jB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,CAAA;AAAoC,UAAA;AAAA,MAAAkP;AAAAA,IAAAA,IAAApP;AAE1CM,QAAAA;AAAAL,QAAAA,SAAAmP,UAAA;iDAS2B,EAAA,WAAA,eACZ,UAAAjO,2BAAA,IAACsF,OAAW,OAAA,EAAA,MAAA,YAAiBkd,MAPd,sBAQVnjB,UAAAA,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAiU;AAAAA,UAAAC;AAAAA,QAAAA,IAAAlU;AACS,eAAAW,+BAAC,iBACG,OAAA,wBACGiO,UACJsF,MACG,SAAA,uFACFD,OAAQ;AAAA,SAE3B,EACJ,CAAA;AAAMxU,aAAAmP;AAAAnP,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAP,QAAAA,SAAAmP,UAAA;iDAEU,EAAA,WAAA,eACZ,UAAAjO,2BAAA,IAACsF,OAAYmd,OAAAA,EAAAA,MAnBR,YAoBO,MAAA,YACPnjB,UAAAA,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAgU,OAAAU;AAAAA,UAAAT,MAAAU;AAAAA,QAAAA,IAAA3U;AACS,eAAAU,2BAAA,IAAC,eACG,EAAA,OAAA,aACGiO,UACD,SAAA,wDACHsF,MAAAA,QACCD,OAAI,QAAI,CAAA;AAAA,SAE3B,EACJ,CAAA;AAAMxU,aAAAmP;AAAAnP,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAAK,CAAAA,MAAAA,MAAAL,SAAAO,IAAA;AACJ,WAAAuB,2BAAA,KAAA,OA3BU,EAAA,WAAA,2BACZzB,UAAAA;AAAAA,QAAAA;AAAAA,QAaAE;AAAAA,MAAAA,GAaJ;AAAMP,aAAAK;AAAAL,aAAAO;AAAAP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AA3BNQ,WAAAA;AAAAA,EA2BM;ACtCP,WAAAojB,sBAAA7jB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,CAAA;AAA+B,UAAA;AAAA,MAAAkP;AAAAA,IAAAA,IAAApP;AAErCM,QAAAA;AAAAL,QAAAA,SAAAmP,UAAA;AAGO9O,WACIa,2BAAAA,IAAAsW,WAAA,UAAA,EAAA,UAAAtW,2BAAA,WAAgB,EAAA,WAAA,eAEZ,UAAAA,2BAAA,IAAC,iBACG,EAAA,UAAAA,2BAAAA,IAAC,2BAAoCiO,EAAAA,YACzC,CAAA,EAEJ,CAAA,GAAM;AACPnP,aAAAmP;AAAAnP,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AARHK,WAAAA;AAAAA,EAQG;ACLKwjB,WAAAA,yBAAyBC,cACAC,kBACAlJ,iBAA2D;AAE5FmJ,QAAAA;AACJ,QAAID,qBAAqB,cAAc;AACnCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEkK,SAASzgB;AAAAA,QACT0gB,WAAW1gB;AAAAA,QACX2gB,UAAU3gB;AAAAA,QACV4gB,OAAO5gB;AAAAA,QACP6gB,KAAK7gB;AAAAA,QACLsL,YAAYtL;AAAAA,MAAAA,CAEpB;AAAA,IAAA,WACOsgB,qBAAqB,aAAa;AACzCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEmK,WAAW;AAAA,QACXD,SAASzgB;AAAAA,QACT2gB,UAAU3gB;AAAAA,QACV4gB,OAAO5gB;AAAAA,QACP6gB,KAAK7gB;AAAAA,QACLsL,YAAYtL;AAAAA,MAAAA,CAEpB;AAAA,IAAA,WACOsgB,qBAAqB,YAAY;AACxCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEkK,SAASzgB;AAAAA,QACT0gB,WAAW1gB;AAAAA,QACX2gB,UAAU;AAAA,QACVC,OAAO5gB;AAAAA,QACP6gB,KAAK7gB;AAAAA,MAAAA,CAEb;AAAA,IAAA,WACOsgB,qBAAqB,OAAO;AACnCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEkK,SAASzgB;AAAAA,QACT0gB,WAAW1gB;AAAAA,QACX2gB,UAAU3gB;AAAAA,QACV4gB,OAAO5gB;AAAAA,QACP6gB,KAAK;AAAA,QACLvV,YAAYtL;AAAAA,MAAAA,CAEpB;AAAA,IAAA,WACOsgB,qBAAqB,SAAS;AACrCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEkK,SAASzgB;AAAAA,QACT0gB,WAAW1gB;AAAAA,QACX2gB,UAAU3gB;AAAAA,QACV4gB,OAAO;AAAA,QACPC,KAAK7gB;AAAAA,QACLsL,YAAYtL;AAAAA,MAAAA,CAEpB;AAAA,IAAA,WACOsgB,qBAAqB,UAAU;AACtCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEkK,SAASzgB;AAAAA,QACT0gB,WAAW1gB;AAAAA,QACX2gB,UAAU3gB;AAAAA,QACV4gB,OAAO5gB;AAAAA,QACP6gB,KAAK7gB;AAAAA,QACLsL,YAAY+U,aAAa/U,cAAc,CAAA;AAAA,MAAA,CAE/C;AAAA,IAAA,WACOgV,qBAAqB,gBAAgB;AAC5CC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxED,IAAI;AAAA,UACAD,UAAU;AAAA,UACV/K,YAAY+U,aAAa/J,IAAIhL,cAAc,CAAA;AAAA,QAAA;AAAA,MAC/C,CAER;AAAA,IAAA,WACOgV,qBAAqB,gBAAgB;AAC5CC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEjL,YAAYtL;AAAAA,MAAAA,CAEpB;AAAA,IAAA,WACOsgB,qBAAqB,iBAAiB;AAC7CC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEjL,YAAY+U,aAAa/U,cAAc,CAAA;AAAA,MAAA,CAE/C;AAAA,IAAA,WACOgV,qBAAqB,uBAAuB;AACnDC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxED,IAAI;AAAA,UACAD,UAAU;AAAA,UACV/K,YAAY+U,aAAa/J,IAAIhL,cAAc,CAAA;AAAA,QAAA;AAAA,MAC/C,CAER;AAAA,IAAA,WACOgV,qBAAqB,eAAe;AAC3CC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEkK,SAAS;AAAA,UACL9L,aAAa;AAAA,QAAA;AAAA,MACjB,CAER;AAAA,IAAA,WACO2L,qBAAqB,qBAAqB;AACjDC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxED,IAAI;AAAA,UACAD,UAAU;AAAA,UACVoK,SAASJ,aAAa/J,IAAImK,WAAW;AAAA,YACjC9L,aAAa;AAAA,UAAA;AAAA,QACjB;AAAA,MACJ,CAER;AAAA,IAAA,WACO2L,qBAAqB,SAAS;AACrCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEuK,UAAU;AAAA,QACVrK,YAAY4J,aAAa5J,cAAc,CAAA;AAAA,MAAC,CAEhD;AAAA,IAAA,WACO6J,qBAAqB,aAAa;AACzCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEuK,UAAU;AAAA,QACVrK,YAAYzW;AAAAA,MAAAA,CAEpB;AAAA,IAAA,WACOsgB,qBAAqB,aAAa;AACzCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,MAAA,CAEhF;AAAA,IAAA,WACO+J,qBAAqB,oBAAoB;AAChDC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxED,IAAI;AAAA,UACAD,UAAU;AAAA,QAAA;AAAA,MACd,CAER;AAAA,IAAA,WACOiK,qBAAqB,UAAU;AACtCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,MAAA,CAEhF;AAAA,IAAA,WACO+J,qBAAqB,aAAa;AACzCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEwK,MAAM;AAAA,MAAA,CAEd;AAAA,IAAA,WACOT,qBAAqB,UAAU;AACtCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,MAAA,CAEhF;AAAA,IAAA,WACO+J,qBAAqB,SAAS;AACrCC,wBAAkBC,eACdH,cACA;AAAA,QACIhK,UAAU;AAAA,QACVkB,gBAAgB;AAAA,QAChBhB,UAAU8J,aAAa9J,aAAavW,SAAYqgB,aAAa9J,WAAW;AAAA,QACxEqH,OAAO;AAAA,UACHnH,YAAY,CAAA;AAAA,QAAC;AAAA,MACjB,CAER;AAAA,IACO6J,WAAAA,oBAAoBlJ,gBAAgBkJ,gBAAgB,GAAG;AAC5C,wBAAA;AAAA,QACd,GAAGlJ,gBAAgBkJ,gBAAgB,EAAEpK;AAAAA,QACrCqB,gBAAgB+I;AAAAA,MACpB;AAAA,IAAA;AAGGC,WAAAA;AAAAA,EACX;ACvQO,WAAAS,iBAAA1kB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA0B,UAAA;AAAA,MAAAkP;AAAAA,MAAAnK;AAAAA,IAAAA,IAAAjF;AAQ7B,UAAA;AAAA,MAAA2C;AAAAA,MAAAC;AAAAA,QAAkCO,iBAAU;AAAE7C,QAAAA;AAAAL,QAAAA,SAAA0C,QAAA;AAE7BkB,WAAAA,OAAAA,MAAMlB,QAAQ,KAAK;AAAC1C,aAAA0C;AAAA1C,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAArC,UAAA0kB,WAAiBrkB;AAAqBE,QAAAA;AAAAP,QAAAA,SAAA2C,eAAA;AAUPpC,WAAAL,CAAA,UAAA;AAAA,YACPA,UAAU,UAAQ;AAClByC,wBAAc,OAAK,IAAM;AAAA,QAAA,OAAC;AAE1BA,wBAAc,OAAOzC,KAAK;AAAA,QAAA;AAAA,MAAC;AAClCF,aAAA2C;AAAA3C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAcM,UAAAQ,KAAAkkB,YAAY;AAAQ9jB,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAA,QAAAf,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAC3BE,WAACM,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,UAAU,UAE7B,eAAA;AACAlL,WAACK,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,SAAS,UAE5B,SAAA;AACAjL,WAACI,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,SAAS,UAE5B,SAAA;AACAhL,WAACG,2BAAA,IAAA6K,eAAA,EAAkB,OAAA,SAAS,UAE5B,SAAA;AAAa/L,aAAAY;AAAAZ,aAAAa;AAAAb,aAAAc;AAAAd,aAAAe;AAAAA,IAAAA,OAAA;AAAAH,WAAAZ,EAAA,CAAA;AAAAa,WAAAb,EAAA,CAAA;AAAAc,WAAAd,EAAA,CAAA;AAAAe,WAAAf,EAAA,CAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAAhB,QAAAA,EAAAmP,CAAAA,MAAAA,YAAAnP,SAAAO,MAAAP,EAAA,EAAA,MAAAQ,IAAA;AArCrBQ,0CAuCM,OAvCU,EAAA,WAAA,eAEZ,UAACc,gCAAAuJ,GAAAA,QAAA,EACa8D,UACA,UAAA,gBACC,WAAG,MACC,eAAA5O,IAMR,OAAA,gBACM,aAAA+K,SAYN,OAAA9K,IACPI,UAAAA;AAAAA,QAAAA;AAAAA,QAGAC;AAAAA,QAGAC;AAAAA,QAGAC;AAAAA,MAAAA,EAAAA,CAGJ,EACJ,CAAA;AAAMf,aAAAmP;AAAAnP,aAAAO;AAAAP,cAAAQ;AAAAR,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAAgF,YAAA;AAEN7D,iDAAgB,EAAA,WAAA,eAEZ,UAAAD,+BAAC,mBAEG,UAACA,2BAAA,IAAA,0BAAA,EAAmCiO,UACL,KAAA,MACA,KAAA,MACC,MAAG,MACGnK,YAAU,GAEpD,EAEJ,CAAA;AAAMhF,cAAAmP;AAAAnP,cAAAgF;AAAAhF,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAAtB,QAAAA,UAAA2C,eAAA;AAMmBrB,YAAAkE,CAAA,MAAA;AACQ,sBAAA,gBAAgBA,EAACC,OAAAvF,UAAkB,KAAEuD,SAAe+B,EAACC,OAAAvF,KAAa;AAAA,MAAC;AACpFF,cAAA2C;AAAA3C,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAAvB,QAAAA,UAAA0C,QAAA;AAEMkB,YAAAA,OAAAA,MAAMlB,QAAQ,cAAc,KAAK;AAAE1C,cAAA0C;AAAA1C,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAAAwB,QAAAA;AAAAxB,QAAAA,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAAsB,OAAAtB,EAAA,EAAA,MAAAuB,KAAA;AARzDC,YAUMN,2BAAAA,IAAA,OAAA,EAVU,WAAA,eAEZ,yCAAC2E,GAAAA,WAAgB,EAAA,MAAA,gBACIsJ,UACA,UAAA7N,KAGH,OAAA,iBACA,OAAAC,IAAmC,CAAA,GAEzD;AAAMvB,cAAAmP;AAAAnP,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAAzB,QAAAA,EAAAwB,EAAAA,MAAAA,OAAAxB,UAAAgB,MAAAhB,EAAA,EAAA,MAAAmB,IAAA;AAlEVM,YACIT,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAyCAG;AAAAA,QAcAK;AAAAA,MAAAA,GAUM;AACPxB,cAAAwB;AAAAxB,cAAAgB;AAAAhB,cAAAmB;AAAAnB,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAnEHyB,WAAAA;AAAAA,EAmEG;AAhFJ,WAAA6J,QAAA5B,SAAA;AAAA,YA4ByBxJ,SAAK;AAAA,MAAA,KACJ,SAAO;AACD,eAAA;AAAA,MAAA;AAAA,MAAO,KACb,SAAO;AACD,eAAA;AAAA,MAAA;AAAA,MAAO,KACb,SAAO;AACD,eAAA;AAAA,MAAA;AAAA,MAAO,SAAA;AAEP,eAAA;AAAA,MAAA;AAAA,IAAa;AAAA,EAAA;ACzCvCykB,QAAAA,qBAAyC,CAClD,cACA,aACA,YACA,OACA,SACA,UACA,gBACA,gBACA,iBACA,uBACA,eACA,qBACA,aACA,oBACA,UACA,aACA,SACA,aACA,UACA,OAAO;AAGEC,QAAAA,kBAAkDlV,OAAOwJ,QAAQ2L,KAAAA,qBAAqB,EAC9FvgB,OAAO,CAAC,CAAChF,EAAE,MAAMqlB,mBAAmBngB,SAASlF,EAAsB,CAAC,EACpE4H,IAAI,CAAC,CAAC5H,IAAIwlB,MAAM,OAAO;AAAA,IAAE,CAACxlB,EAAE,GAAGwlB;AAAAA,EAAO,EAAE,EACxCxK,OAAO,CAACC,GAAGC,OAAO;AAAA,IAAE,GAAGD;AAAAA,IAAG,GAAGC;AAAAA,EAAE,IAAI,CAAA,CAAE;ACrBnC,WAAAuK,sBAAAhlB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA+B,UAAA;AAAA,MAAAkP;AAAAA,MAAAnK;AAAAA,IAAAA,IAAAjF;AAQlC,UAAA;AAAA,MAAA2C;AAAAA,MAAAC;AAAAA,QAGIO,iBAAU;AAKdgV,UAAAA,WAAiB,GAHO,SAAS;AAIjCC,UAAAA,UAAgB,GAJQ,SAAS;AAKjCC,UAAAA,cAAoB,GALI,SAAS;AAKoB/X,QAAAA;AAAAL,QAAAA,SAAA0C,QAAA;AAE/BkB,WAAAA,OAAAA,MAAMlB,QAAQwV,QAAQ,KAAK;AAAelY,aAAA0C;AAAA1C,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAhE,UAAAsY,gBAAsBjY;AAA2CE,QAAAA;AAAAP,QAAAA,SAAA0C,QAAA;AACxCkB,WAAAA,OAAAA,MAAMlB,QAAQ0V,WAAW,KAAK;AAAGpY,aAAA0C;AAAA1C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAA1D,UAAAuY,mBAAyBhY;AAAkC0E,QAAAA;AAAAuT,QAAAA;AAAAlX,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAlB,QAAAA;AAAAI,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAG,QAAAA;AAAA,QAAAnB,EAAAmP,CAAAA,MAAAA,YAAAnP,EAAA,CAAA,MAAAsY,iBAAAtY,EAAAgF,CAAAA,MAAAA,cAAAhF,EAAA,CAAA,MAAAuY,oBAAAvY,SAAA0C,QAAA;AAC3D+V,YAAAA,eAAqB7U,OAAAA,MAAMlB,QAAQyV,OAAO;AAE1CY,YAAAA,sBAA4B,OAAOT,kBAAkB;AACrDU,YAAAA,yBAA+B,OAAOT,qBAAqB;AAAW,UAAAvY,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAAgF,YAAA;AAI9D,cAAA9D,2BAAAA,IAAA,SAAgB,WAAA,eAEZ,yCAAC,iBAEG,EAAA,UAAAA,2BAAA,IAAC,0BAAmCiO,EAAAA,UACF,QAAA,MACG,WAAG,MACT,KAAG,MACH,KAAA,MACC,MAAG,MACE,WAAG,MACFnK,WAAU,CAAA,EAAA,CAEpD,EAEJ,CAAA;AAAMhF,gBAAAmP;AAAAnP,gBAAAgF;AAAAhF,gBAAA0B;AAAAA,MAAAA,OAAA;AAAAA,cAAA1B,EAAA,EAAA;AAAA,MAAA;AAEuB,YAAA;AACxBkN,WAAAA,GAAAA;AAAe,UAAAlN,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAER,cAAAoB,2BAAA,KAAA,OAAe,EAAA,WAAA,kCACX,UAAA;AAAA,UAAAZ,2BAAA,IAAC+X,GACD,iBAAA,EAAA;AAAA,yCAACtY,GAAAA,YAAoB,EAAA,SAAA,aACC,WAAA,QAAO,UAE7B,qBAAA,CAAA;AAAA,QAAA,GACJ;AAAMX,gBAAAwB;AAAAA,MAAAA,OAAA;AAAAA,cAAAxB,EAAA,EAAA;AAAA,MAAA;AAGmC,WAAA;AAQpB,YAAA4B,OAAAmX,uBAAuB5J;AAC1BtN,YAAAA,OAAAkX,sBAAsB,MAAMT;AAAa,UAAAtY,EAAA4B,EAAAA,MAAAA,QAAA5B,UAAA6B,MAAA;AAN3DP,oDAAgB,EAAA,WAAA,eACZ,UAACJ,+BAAAsF,OAAAA,OAAA,EAAY0R,gBACFzR,IAAAA,GAAAA,oBACG,OAAA,aACD,MAAA,SACI,UAAA7E,MACH,OAAAC,KAAyC,CAAA,GAE3D;AAAM7B,gBAAA4B;AAAA5B,gBAAA6B;AAAA7B,gBAAAsB;AAAAA,MAAAA,OAAA;AAAAA,cAAAtB,EAAA,EAAA;AAAA,MAAA;AAKe,YAAA+B,OAAAiX,0BAA0B7J;AAE7BnN,YAAAA,OAAAgX,yBAAyB,MAAMT;AAAgBlT,UAAAA;AAAA,UAAArF,EAAA+B,EAAAA,MAAAA,QAAA/B,UAAAgC,MAAA;AAL7DqD,eAACnE,2BAAA,IAAAsF,OAAY4R,OAAAA,EAAAA,MAAU,aACZ3R,IAAAA,GAAAA,oBACG,OAAA,gBACG,UAAA1E,MACJ,MAAA,SACC,OAAAC,MACZ;AAAAhC,gBAAA+B;AAAA/B,gBAAAgC;AAAAhC,gBAAAqF;AAAAA,MAAAA,OAAA;AAAAA,eAAArF,EAAA,EAAA;AAAA,MAAA;AAAAsF,UAAAA;AAAAC,UAAAA;AAAA,UAAAvF,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACF4E,eAACxD,2BAAAA,KAAAnB,GAAAA,YAAA,EAAoB,SAAA,WAAsB,WAAA,oBACvC,UAAA;AAAA,UAAAO,2BAAAA,IAAA,OAAG,UAEyB,mFAAA,CAAA;AAAA,0CASvB,MAPD,EAAA,UAAA;AAAA,YAAAA,2BAAAA,IAAoD,QAAP,UAAE,0CAAA,CAAA;AAAA,YAC/CA,2BAAAA,IAAsE,kBAAL,4DAAA,CAAA;AAAA,YACjEA,2BAAAA,YAAK,UAA8C,8CAAA,CAAA;AAAA,YACnDA,2BAAAA,IAA0C,kBAAL,gCAAA,CAAA;AAAA,YACrCA,2BAAAA,YAAK,UAAmC,mCAAA,CAAA;AAAA,YACxCA,2BAAAA,IAAA,QAAK,UAA+B,+BAAA,CAAA;AAAA,YACpCA,2BAAAA,IAAA,QAAyD,UAAE,sDAAA,CAAA;AAAA,UAAA,EAC/D,CAAA;AAAA,QAAA,GACJ;AAEAqE,eAACrE,2BAAAA,IAAAP,GAAA,YAAA,EAAoB,SAAA,WAAsB,WAAA,oBAAoB,UAI/D,yGAAA;AAAaX,gBAAAsF;AAAAtF,gBAAAuF;AAAAA,MAAAA,OAAA;AAAAD,eAAAtF,EAAA,EAAA;AAAAuF,eAAAvF,EAAA,EAAA;AAAA,MAAA;AAAAA,UAAAA,UAAAqF,MAAA;qDA3BD,EAAA,WAAA,eACZA,UAAAA;AAAAA,UAAAA;AAAAA,UAOAC;AAAAA,UAeAC;AAAAA,QAAAA,GAKJ;AAAMvF,gBAAAqF;AAAArF,gBAAAuB;AAAAA,MAAAA,OAAA;AAAAA,cAAAvB,EAAA,EAAA;AAAA,MAAA;AAEuB,WAAA;AACxByG,WAAAA,GAAAA;AAAyB0R,WAAAA;AACQ,WAAA;AACc,WAAA;AACf,WAAA;AACNpX,WAAA0X,iBAAYhV,UAAkBgV,iBAAY,OAAYA,aAAYd,aAAc;AAAE3X,aAAAmP;AAAAnP,aAAAsY;AAAAtY,aAAAgF;AAAAhF,aAAAuY;AAAAvY,aAAA0C;AAAA1C,aAAAiF;AAAAjF,cAAAwY;AAAAxY,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAwB;AAAAxB,cAAAyB;AAAAzB,cAAA0B;AAAA1B,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAA8D,WAAAjF,EAAA,CAAA;AAAAwY,WAAAxY,EAAA,EAAA;AAAAsB,YAAAtB,EAAA,EAAA;AAAAuB,YAAAvB,EAAA,EAAA;AAAAwB,YAAAxB,EAAA,EAAA;AAAAyB,YAAAzB,EAAA,EAAA;AAAA0B,YAAA1B,EAAA,EAAA;AAAAQ,WAAAR,EAAA,EAAA;AAAAY,WAAAZ,EAAA,EAAA;AAAAa,WAAAb,EAAA,EAAA;AAAAc,WAAAd,EAAA,EAAA;AAAAe,WAAAf,EAAA,EAAA;AAAAgB,WAAAhB,EAAA,EAAA;AAAAmB,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA5B,QAAAA,UAAA2C,eAAA;AAC/Ef,YAAA4D,CAAA,MAAA;AACNtF,cAAAA,QAAcsF,EAACC,OAAAvF;AAAc,YACzBA,UAAU,IAAE;AAAEyC,wBAAcwV,SAAO1U,MAAW;AAAA,QAAA,OAAC;AAChC0U,wBAAAA,SAASoB,SAASrZ,KAAK,CAAC;AAAA,QAAA;AAAA,MAAC;AAC/CF,cAAA2C;AAAA3C,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA7B,QAAAA,EAAAiF,EAAAA,MAAAA,MAAAjF,EAAA4B,EAAAA,MAAAA,OAAA5B,EAAAQ,EAAAA,MAAAA,MAAAR,UAAAY,MAAAZ,EAAA,EAAA,MAAAa,MAAAb,EAAA,EAAA,MAAAc,MAAAd,EAAA,EAAA,MAAAe,IAAA;AATrBc,YAACX,2BAAA,IAAA,IAAA,EAAyBiX,UACA,MAAAvX,IACC,OAAAC,IACD,MAAAC,IACC,OAAAC,IACG,UAAAa,KAK5B;AAAA5B,cAAAiF;AAAAjF,cAAA4B;AAAA5B,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAf,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA,QAAA/B,EAAA6B,EAAAA,MAAAA,OAAA7B,UAAAgB,IAAA;AAXNe,YAYMb,2BAAA,IAAA,OAAA,EAZU,WAAAF,IACZa,UAWJ,KAAA;AAAM7B,cAAA6B;AAAA7B,cAAAgB;AAAAhB,cAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,EAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAA,QAAAhC,EAAA,EAAA,MAAAsB,OAAAtB,EAAAuB,EAAAA,MAAAA,OAAAvB,EAAA+B,EAAAA,MAAAA,OAAA/B,UAAAmB,IAAA;mDAtDM,EAAA,WAAAA,IAGZG,UAAAA;AAAAA,QAAAA;AAAAA,QASAC;AAAAA,QA8BAQ;AAAAA,MAAAA,GAcJ;AAAM/B,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAA+B;AAAA/B,cAAAmB;AAAAnB,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AAAAqF,QAAAA;AAAArF,QAAAA,EAAAwY,EAAAA,MAAAA,MAAAxY,UAAAwB,OAAAxB,EAAA,EAAA,MAAAgC,KAAA;AAnEVqD,YAACnE,2BAAA,IAAA,IAAA,EAEO,OAAAM,KASJQ,UAyDJ,KAAA;AAAkBhC,cAAAwY;AAAAxY,cAAAwB;AAAAxB,cAAAgC;AAAAhC,cAAAqF;AAAAA,IAAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAAsF,QAAAA;AAAA,QAAAtF,EAAAyB,EAAAA,MAAAA,OAAAzB,UAAAqF,KAAA;AArEtBC,YAsEMpE,2BAAA,IAAA,OAAA,EAtEU,WAAAO,KACZ4D,UAqEJ,KAAA;AAAMrF,cAAAyB;AAAAzB,cAAAqF;AAAArF,cAAAsF;AAAAA,IAAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AAAAuF,QAAAA;AAAAvF,QAAAA,UAAA2C,eAAA;AAMmB4C,YAAAwD,CAAA,QAAA;AACQ,sBAAA,gBAAgBvD,IAACC,OAAAvF,UAAkB,KAAEuD,SAAe+B,IAACC,OAAAvF,KAAa;AAAA,MAAC;AACpFF,cAAA2C;AAAA3C,cAAAuF;AAAAA,IAAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AAAA0F,QAAAA;AAAA1F,QAAAA,UAAA0C,QAAA;AAEMkB,YAAAA,OAAAA,MAAMlB,QAAQ,cAAc,KAAK;AAAE1C,cAAA0C;AAAA1C,cAAA0F;AAAAA,IAAAA,OAAA;AAAAA,YAAA1F,EAAA,EAAA;AAAA,IAAA;AAAA4F,QAAAA;AAAA5F,QAAAA,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAAuF,OAAAvF,EAAA,EAAA,MAAA0F,KAAA;AARzDE,YAUM1E,2BAAAA,IAAA,OAAA,EAVU,WAAA,eAEZ,yCAAC2E,GAAAA,WAAgB,EAAA,MAAA,gBACIsJ,UACA,UAAA5J,KAGH,OAAA,iBACA,OAAAG,IAAmC,CAAA,GAEzD;AAAM1F,cAAAmP;AAAAnP,cAAAuF;AAAAvF,cAAA0F;AAAA1F,cAAA4F;AAAAA,IAAAA,OAAA;AAAAA,YAAA5F,EAAA,EAAA;AAAA,IAAA;AAAA8F,QAAAA;AAAA9F,QAAAA,EAAA0B,EAAAA,MAAAA,OAAA1B,UAAAsF,OAAAtF,EAAA,EAAA,MAAA4F,KAAA;AApGVE,YACIpE,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAiBA4D;AAAAA,QAwEAM;AAAAA,MAAAA,GAUM;AACP5F,cAAA0B;AAAA1B,cAAAsF;AAAAtF,cAAA4F;AAAA5F,cAAA8F;AAAAA,IAAAA,OAAA;AAAAA,YAAA9F,EAAA,EAAA;AAAA,IAAA;AArGH8F,WAAAA;AAAAA,EAqGG;AC9CJ,QAAMkf,eAAexiB,MAAMwQ,KAC9B,SAAAgS,cAAAzC,OAAA;AAAAviB,UAAAA,IAAAC,uBAAA,EAAA;AAEI,UAAA;AAAA,MAAAglB,kBAAAllB;AAAAA,MAAAmlB;AAAAA,MAAAC;AAAAA,MAAA1E;AAAAA,MAAA2E;AAAAA,MAAA1W;AAAAA,MAAA2W;AAAAA,MAAA1W;AAAAA,MAAAgL;AAAAA,MAAAyG;AAAAA,MAAAkF,4BAAAjlB;AAAAA,MAAAklB;AAAAA,MAAAC;AAAAA,MAAAvW;AAAAA,MAAAwW;AAAAA,MAAAC;AAAAA,MAAAtW;AAAAA,MAAAuW;AAAAA,MAAAtW;AAAAA,MAAAwL;AAAAA,MAAAsB;AAAAA,IAAAA,IAsBIoG;AArBA0C,UAAAA,mBAAAllB,OAAuB0D,gBAAvB1D;AAUAulB,UAAAA,6BAAAjlB,OAAiCoD,gBAAjCpD;AAAiCE,QAAAA;AAAA,QAAAP,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAaA,WAAA;AAAA,QAAApB,IAC7B;AAAA,QAAEG,MACA;AAAA,MAAE;AACXO,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAHD,UAAA4lB,eAAqCrlB;AAGjBC,QAAAA;AAAA,QAAAR,EAAAmc,CAAAA,MAAAA,sBAAAnc,SAAA2Z,UAAA;AAEFnZ,WAAAmF,QAAQgU,YAAQ,CAAKD,iBAAiBC,QAAQ,CAAC,KAAC,CAAKwC;AAAkBnc,aAAAmc;AAAAnc,aAAA2Z;AAAA3Z,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAzF,UAAAmP,WAAkB3O;AAAyEI,QAAAA;AAAA,QAAAZ,EAAA2Z,CAAAA,MAAAA,YAAA3Z,SAAA0O,aAAA;AAEjB9N,WAAA+Y,WAAQ;AAAA,QAAAra,IAC1EoP;AAAAA,QAAWmX,YACHnX;AAAAA,QAAWiL;AAAAA,MAAAA,IAAAlW;AAEdzD,aAAA2Z;AAAA3Z,aAAA0O;AAAA1O,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAJb8lB,UAAAA,wBAA8BrjB,aAA4C7B,EAI7D;AAAEC,QAAAA;AAAA,QAAAb,EAAAogB,CAAAA,MAAAA,qBAAApgB,SAAA2O,mBAAA;AAEa9N,WAAAC,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAxB;AAAAA,UAAAqa,UAAAoM;AAAAA,QAAAA,IAAAjlB;AAIzB,cAAAklB,SAAA;AAAA,UAAA1mB;AAAAA,UAAAumB,YAEgBC,sBAAqB9U,SAAA1R;AAAAA,UAAAqa,UACjCA;AAAAA,UAAQpL,WACGI;AAAAA,QAAiB;AAEhCmX,8BAAqB9U,UAAWgV;AAChC5F,4BAAoB4F,MAAM;AAAA,MAAA;AAC7BhmB,aAAAogB;AAAApgB,aAAA2O;AAAA3O,aAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,CAAA;AAAA,IAAA;AAZD,UAAAimB,sBAA4BplB;AAY1BC,QAAAA;AAAA,QAAAd,EAAA2Z,EAAAA,MAAAA,YAAA3Z,UAAA0O,aAAA;AAIiB5N,WAAA6Y,WAAQ;AAAA,QAAAra,IACXoP;AAAAA,QAAW,GAAKiL;AAAAA,MAAAA,IACtBiM;AAAY5lB,cAAA2Z;AAAA3Z,cAAA0O;AAAA1O,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAA,QAAAf,EAAAimB,EAAAA,MAAAA,uBAAAjmB,UAAAmlB,kBAAA;AAIRpkB,WAAAA,CAAAmlB,mBAAAC,eAAA;AACNC,gBAAAA,MAAc,YAAYF,iBAAiB;AAC3C,cAAA;AAAA,UAAA5mB,IAAA+mB;AAAAA,UAAA,GAAAC;AAAAA,QAAAA,IAGIJ;AACe,4BAAA;AAAA,UAAA5mB,IACfA;AAAAA,UAAEqa,UAAA;AAAA,YAAA,GAEKA;AAAAA,YAAQK,UACDL,WAAQK,YAAA;AAAA,UAAA;AAAA,QAAiB,CAE1C;AAAC,YAAA,CACGmL,kBAAgB;AACjBgB,qBAAUI,UAAA;AAAA,YAAA7jB,QAAqBkjB;AAAAA,UAAAA,CAAc;AAAA,QAAA;AAAA,MAAC;AACrD5lB,cAAAimB;AAAAjmB,cAAAmlB;AAAAnlB,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAAqlB,EAAAA,MAAAA,wBAAArlB,UAAAilB,kBAAA;AACWjkB,WAAA0B,CAAA,WAAA;AACR,cAAAI,SAAA,CAAA;AAAuC,YACnCmiB,kBAAgB;AACXviB,cAAAA,CAAAA,OAAMjD,MAAA;AACPqD,mBAAMrD,OAAQ;AAAA,UAAA,OAAU;AAExBihB,kBAAAA,YAAkB8F,aAAa9jB,OAAMjD,IAAK;AAAE,gBACxCihB,WAAS;AACT5d,qBAAMrD,OAAQihB;AAAAA,YAAAA;AAAAA,UAAS;AAE1Bhe,cAAAA,CAAAA,OAAMpD,IAAA;AACPwD,mBAAMxD,KAAM;AAAA,UAAA,OAAU;AAEtB,kBAAA4U,UAAgBuS,aAAW/jB,OAAMpD,IAAK+lB,oBAAoB;AAAE,gBACxDnR,SAAO;AACPpR,qBAAMxD,KAAM4U;AAAAA,YAAAA;AAAAA,UAAO;AAAA,QAAA;AAI3BxR,YAAAA,OAAMoX,aAAc,UAAQ;AACxBpX,cAAAA,OAAMoN,YAAAyF,YAAyBmR,KAAAA,cAAchkB,OAAMoN,YAAAyF,QAAAoC,UAA+B,GAAC;AACnF7U,mBAAMgN,aAAA;AAAA,cAAAyF,SACO;AAAA,YAA4B;AAAA,UAAA;AAAA,QAAA;AAAA,YAI7C7S,OAAMoX,aAAc,eAAgBpX,CAAAA,OAAMhD,MAAK;AAC/CoD,iBAAMpD,OAAQ;AAAA,QAAA;AAEdgD,YAAAA,OAAMsY,mBAAoB,UAAQ;AAAA,cAAA,CAC5BtY,OAAaqX,IAAA;AACfjX,mBAAMiX,KAAM;AAAA,UAAA;AAAA,QAAoC;AAGpDrX,YAAAA,OAAMsY,mBAAoB,SAAO;AAAA,cAAA,CAC3BtY,OAAa2e,OAAA;AACfve,mBAAMue,QAAS;AAAA,UAAA;AAAA,QAAkD;AAGlEve,eAAAA;AAAAA,MAAM;AAChB9C,cAAAqlB;AAAArlB,cAAAilB;AAAAjlB,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAylB,iBAAAzlB,EAAAc,EAAAA,MAAAA,MAAAd,EAAAe,EAAAA,MAAAA,MAAAf,UAAAgB,IAAA;AAhEoD,WAAA;AAAA,QAAA2lB,SAC5C;AAAA,QAAe/W,eACT9O;AAAAA,QAEG2kB;AAAAA,QAAA5V,kBAAA;AAAA,QAAA+W,yBAAA;AAAA,QAAAC,UAIR9lB;AAAAA,QAeT+O,YACW9O;AAAAA,MAwCX;AACJhB,cAAAylB;AAAAzlB,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAjED8mB,UAAAA,mBAAyB9W,uBAAgC7O,EAiExD;AAAEG,QAAAA;AAAAC,QAAAA;AAAA,QAAAvB,EAAA8mB,EAAAA,MAAAA,oBAAA9mB,UAAA2lB,eAAA;AAEOrkB,YAAAA,MAAA;AACNqkB,wBAAgBmB,gBAAgB;AAAA,MAAA;AACjC,YAAA,CAACA,kBAAkBnB,aAAa;AAAC3lB,cAAA8mB;AAAA9mB,cAAA2lB;AAAA3lB,cAAAsB;AAAAtB,cAAAuB;AAAAA,IAAAA,OAAA;AAAAD,YAAAtB,EAAA,EAAA;AAAAuB,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAFpCkE,UAAAA,UAAU5C,KAEPC,GAAiC;AAITC,UAAAA,MAAA8jB,6BACbW,sBAAmBxiB;AAObhC,UAAAA,MAAAikB,mBAAmBoB,iBAAgB7jB,cAAgB;AAAAvB,QAAAA;AAAA,QAAA1B,EAAA,EAAA,MAAAoP,sBAAApP,EAAA,EAAA,MAAAklB,sBAAAllB,EAAA,EAAA,MAAAygB,gBAAAzgB,EAAAmc,EAAAA,MAAAA,sBAAAnc,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAAmlB,oBAAAnlB,EAAA,EAAA,MAAA8mB,oBAAA9mB,EAAA,EAAA,MAAAqP,WAAArP,EAAAolB,EAAAA,MAAAA,WAAAplB,EAAAilB,EAAAA,MAAAA,oBAAAjlB,EAAAwlB,EAAAA,MAAAA,YAAAxlB,EAAAulB,EAAAA,MAAAA,aAAAvlB,EAAA,EAAA,MAAAiP,WAAAjP,EAAA,EAAA,MAAA6a,mBAAA7a,EAAA2O,EAAAA,MAAAA,qBAAA3O,EAAAwB,EAAAA,MAAAA,OAAAxB,UAAAyB,KAAA;2CATlE,0BACsB,mBAAAD,KAGTgkB,UACSP,mBAAAA,kBACAtW,mBACVM,SACEsW,WACC,YAAA9jB,KACF0jB,UAAAA,kBACI1E,cACL2E,SACWF,oBACV/V,UACDE,SACWD,oBACHyL,iBACGsB,oBAAkB,GAClC2K,iBAAmB,CAAA;AAAA9mB,cAAAoP;AAAApP,cAAAklB;AAAAllB,cAAAygB;AAAAzgB,cAAAmc;AAAAnc,cAAAmP;AAAAnP,cAAAmlB;AAAAnlB,cAAA8mB;AAAA9mB,cAAAqP;AAAArP,cAAAolB;AAAAplB,cAAAilB;AAAAjlB,cAAAwlB;AAAAxlB,cAAAulB;AAAAvlB,cAAAiP;AAAAjP,cAAA6a;AAAA7a,cAAA2O;AAAA3O,cAAAwB;AAAAxB,cAAAyB;AAAAzB,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA,QAAA5B,EAAA8mB,EAAAA,MAAAA,oBAAA9mB,UAAA0B,KAAA;AApBxBE,YAACV,2BAAA,IAAAiP,eAAA,EAAc2W,OAAAA,kBAClBplB,UAoBJ,KAAA;AAAS1B,cAAA8mB;AAAA9mB,cAAA0B;AAAA1B,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AArBF4B,WAAAA;AAAAA,EAqBE,GACV,CAAC2Y,GAAGC,MACHD,EAAElL,YAAYmL,EAAEnL,WAChBkL,EAAE7L,gBAAgB8L,EAAE9L,eACpB6L,EAAE5L,sBAAsB6L,EAAE7L,qBAC1B4L,EAAE0K,qBAAqBzK,EAAEyK,oBACzB1K,EAAE2K,uBAAuB1K,EAAE0K,sBAC3B3K,EAAEkG,iBAAiBjG,EAAEiG,gBACrBlG,EAAE8K,yBAAyB7K,EAAE6K,wBAC7B9K,EAAE4K,qBAAqB3K,EAAE2K,gBACjC;AAEO,WAAA4B,mBAAAhnB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAAkc,QAAAA;AAAA6K,QAAAA;AAAA3X,QAAAA;AAAA4X,QAAAA;AAAAC,QAAAA;AAAA9G,QAAAA;AAAApM,QAAAA;AAAAhU,QAAAA,SAAAD,IAAA;AAA4B,OAAA;AAAA,QAAAiU;AAAAA,QAAAiT;AAAAA,QAAAC;AAAAA,QAAA9G;AAAAA,QAAA/Q;AAAAA,QAAA8M;AAAAA,QAAA,GAAA6K;AAAAA,MAAAA,IAAAjnB;AAYlCC,aAAAD;AAAAC,aAAAmc;AAAAnc,aAAAgnB;AAAAhnB,aAAAqP;AAAArP,aAAAinB;AAAAjnB,aAAAknB;AAAAlnB,aAAAogB;AAAApgB,aAAAgU;AAAAA,IAAAA,OAAA;AAAAmI,2BAAAnc,EAAA,CAAA;AAAAgnB,kBAAAhnB,EAAA,CAAA;AAAAqP,gBAAArP,EAAA,CAAA;AAAAinB,iBAAAjnB,EAAA,CAAA;AAAAknB,oBAAAlnB,EAAA,CAAA;AAAAogB,0BAAApgB,EAAA,CAAA;AAAAgU,aAAAhU,EAAA,CAAA;AAAA,IAAA;AACG,UAAAmnB,YAAkB1kB,MAAAA,OAAyC;AAAEpC,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACvCL,WAAA+mB,CAAA,YAAA;AAClBD,kBAASnW,UAAWoW;AAAAA,MAAO;AAC9BpnB,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAFD,UAAA2lB,gBAAsBtlB;AAKZ,UAAAE,KAAAyT,QAAa;AAAAxT,QAAAA;AAAAI,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAMHF,WAAAgF,CAAA,MAAA;AACNA,UAAC4T,eAAgB;AACjB5T,UAAC6T,gBAAiB;AACTrI,kBAAAA,SAAAqW,aAAuB7hB,CAAC;AAAA,MAAA;AAEvC5E,WAACM,2BAAA,IAAAkT,gBAAA,EAAY,QAAK,MAAE,UAAkB,sBAAA;AAAcpU,aAAAQ;AAAAR,cAAAY;AAAAA,IAAAA,OAAA;AAAAJ,WAAAR,EAAA,CAAA;AAAAY,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAAknB,EAAAA,MAAAA,eAAAlnB,UAAAogB,mBAAA;AAKfvf,WAAAmlB,CAAA,WAAA;AACf5F,4BAAoB4F,MAAM;AACf,sBAAA;AAAA,MAAA;AACdhmB,cAAAknB;AAAAlnB,cAAAogB;AAAApgB,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAAmc,EAAAA,MAAAA,sBAAAnc,EAAA,EAAA,MAAAgnB,aAAAhnB,EAAAqP,EAAAA,MAAAA,WAAArP,EAAA,EAAA,MAAAinB,YAAAjnB,UAAAa,IAAA;AAPnBC,WAACI,2BAAAA,IAAAmT,GAAAA,eAAA,EAEG,UAACnT,2BAAAA,IAAA,cAAA,EAAY,GAAK8lB,WACOC,WAAAA,UACQ,mBAAApmB,IAICsb,oBACQ,4BAAI,OACjBwJ,eACNtW,QAE3B,CAAA,GAAA;AAAgBrP,cAAAmc;AAAAnc,cAAAgnB;AAAAhnB,cAAAqP;AAAArP,cAAAinB;AAAAjnB,cAAAa;AAAAb,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,UAAAinB,UAAA;AAIXlmB,WAAAkmB,YAAa/lB,+BAAAsR,GAAAA,QAAA,EACD,SAAA,QACA,SAAA,MAAA;AACI,iBAAA;AACT2U,kBAASnW,SAAAuV,UAAA;AAAA,MAAA,GACV,UAEP,UAAA;AAASvmB,cAAAinB;AAAAjnB,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;0CAER8R,aAAe,SAAA,YACF,MAAA,UACA,OAAA,WAAU,UAExB,KAAA,CAAA;AAASxS,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAAnB,QAAAA,UAAAe,IAAA;AAfbI,2CAACmT,kBAEIvT,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QASDC;AAAAA,MAAAA,GAKJ;AAAgBhB,cAAAe;AAAAf,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAA,QAAAtB,EAAAc,EAAAA,MAAAA,MAAAd,UAAAmB,IAAA;AAvCpBG,4CAAA,QAAkB,EAAA,YAAA,MACE,cAAA,OACJ,UAAAd,IAKZI,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,QAeAK;AAAAA,MAAAA,GAiBJ;AAAOnB,cAAAc;AAAAd,cAAAmB;AAAAnB,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAA,QAAAvB,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAO,IAAA;AA7CJ,YAAAW,2BAAA,IAAC0M,aACE,MAAArN,IACI,UAAA,MACC,WAAA,MAEXe,UAyCJ,IAAA,CAAA;AAAStB,cAAAsB;AAAAtB,cAAAO;AAAAP,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AA9CFuB,WAAAA;AAAAA,EA8CE;AAIb,WAAA+lB,uBAAAvnB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,GAAA;AAAgC,UAAA;AAAA,MAAAyC;AAAAA,MAAAI;AAAAA,MAAAykB;AAAAA,MAAAxP;AAAAA,MAAA0I,cAAApgB;AAAAA,MAAA6kB;AAAAA,MAAAsC;AAAAA,MAAApH;AAAAA,MAAAoF;AAAAA,MAAA7W;AAAAA,MAAA4W;AAAAA,MAAAtW;AAAAA,MAAAjK;AAAAA,MAAAmK;AAAAA,MAAAiW;AAAAA,MAAA/V;AAAAA,MAAAD;AAAAA,MAAAyL;AAAAA,MAAAsB;AAAAA,IAAAA,IAAApc;AAKI0gB,UAAAA,eAAApgB,OAAoBoD,iBAApBpD;AAkChC,UAAA,CAAAonB,YAAAC,aAAA,IAAoCrkB,MAAAA,SAAS6hB,kBAAkB;AAC/D,UAAA,CAAAyC,kBAAAC,mBAAA,IAAgDvkB,MAAAA,cAAc;AAAE9C,QAAAA;AAAAP,QAAAA,SAAA0C,QAAA;AACuBnC,WAAAmC,QAAMoX,WAAa+N,KAAAA,WAAWnlB,MAAM,IAACe;AAAYzD,aAAA0C;AAAA1C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAxI,UAAA,CAAA8nB,uBAAAC,wBAAA,IAA0D1kB,MAAAA,SAA6B9C,EAAiD;AAExIynB,UAAAA,iBAAuBC,uBAAiBvlB,MAAM;AAC9CwlB,UAAAA,eAAqBzlB,aAAA,IAA6B;AAElDqjB,UAAAA,wBAA8BrjB,aAAeC,MAAM;AAAElC,QAAAA;AAAA,QAAAR,EAAA8C,CAAAA,MAAAA,UAAA9C,SAAAgF,YAAA;AAEzBA,WAAAA,cAAcpB,aAAMd,QAAQ,gBAAgB;AAAC9C,aAAA8C;AAAA9C,aAAAgF;AAAAhF,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAzE,UAAAmoB,sBAA4B3nB;AAA8CI,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAAgoB,kBAAAhoB,EAAAwnB,CAAAA,MAAAA,qBAAAxnB,EAAAogB,CAAAA,MAAAA,qBAAApgB,SAAA2O,mBAAA;AAEhE/N,WAAAA,MAAA;AAAA,YACFwf,mBAAiB;AACZ,cAAA,CAACoH,qBAAqBQ,eAAc1oB,IAAG;AACxC,kBAAA;AAAA,cAAAA;AAAAA,cAAA,GAAAqa;AAAAA,YAAAA,IAGIqO;AAAe,gBAAA,CACdlU,MAAMkU,gBAAgBlC,sBAAqB9U,OAAQ,GAAC;AACpC,gCAAA;AAAA,gBAAA1R;AAAAA,gBAAAqa;AAAAA,gBAAApL,WAGFI;AAAAA,cAAAA,CACd;AACDmX,oCAAqB9U,UAAWgX;AAAAA,YAAAA;AAAAA,UAAc;AAAA,QAAA;AAAA,MAAA;AAI7DhoB,aAAAgoB;AAAAhoB,aAAAwnB;AAAAxnB,aAAAogB;AAAApgB,aAAA2O;AAAA3O,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,EAAAgoB,EAAAA,MAAAA,kBAAAhoB,UAAAwnB,qBAAAxnB,EAAA,EAAA,MAAA2O,mBAAA;AAAGqZ,WAAAA,CAAAA,gBAAgBR,mBAAmB7Y,iBAAiB;AAAC3O,cAAAgoB;AAAAhoB,cAAAwnB;AAAAxnB,cAAA2O;AAAA3O,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAjBzDkE,UAAAA,UAAUtD,IAiBPC,EAAsD;AAACC,QAAAA;AAAA,QAAAd,EAAA8C,EAAAA,MAAAA,UAAA9C,UAAAiP,WAAAjP,EAAA,EAAA,MAAA2O,qBAAA3O,EAAA0C,EAAAA,MAAAA,QAAApD,IAAA;AAEhDwB,WAAAA,MAAA;AAAA,YACF4B,QAAMpD,MAAQ2P,WAAYmZ,CAAAA,KAAAA,cAActlB,MAAM,GAAC;AACvCJ,kBAAAA,QAAMpD,IAAMqP,mBAAmB7L,MAAM;AAAA,QAAA;AAAA,MAAC;AAErD9C,cAAA8C;AAAA9C,cAAAiP;AAAAjP,cAAA2O;AAAA,QAAA,EAAA,IAAAjM,QAAApD;AAAAU,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAA8B,UAAAe,KAAA2B,QAAMpD;AAAI0B,QAAAA;AAAAhB,QAAAA,EAAA8C,EAAAA,MAAAA,UAAA9C,UAAA2O,qBAAA3O,EAAA,EAAA,MAAAe,IAAA;AAArC+B,WAAAA,CAAAA,QAAQ6L,mBAAmB5N,EAAU;AAACf,cAAA8C;AAAA9C,cAAA2O;AAAA3O,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAJ1CkE,UAAAA,UAAUpD,IAIPE,EAAuC;AAACG,QAAAA;AAAAnB,QAAAA,EAAA6a,EAAAA,MAAAA,mBAAA7a,UAAAunB,aAAAvnB,EAAA,EAAA,MAAA0C,QAAA;AAEbvB,WAAAknB,CAAA,wBAAA;AAC1BN,iCAAyBM,mBAAmB;AAC5Cd,kBAAU1D,yBAAyBnhB,QAAQ2lB,qBAAqBxN,eAAe,CAAC;AAEhFyN,mBAAA,MAAA;AACIJ,uBAAYlX,SAAAuX,MAAA;AAAA,WAAA,CACZ;AAAA,MAAC;AACRvoB,cAAA6a;AAAA7a,cAAAunB;AAAAvnB,cAAA0C;AAAA1C,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAPD,UAAAwoB,wBAA8BrnB;AAS1BsnB,QAAAA;AAAc,QACdX,0BAA0B,gBAC1BA,0BAA0B,eAC1BA,0BAA0B,SAAO;AAAAxmB,UAAAA;AAAAtB,UAAAA,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA8nB,yBAAA9nB,EAAA,EAAA,MAAAgF,YAAA;AAE7B1D,eAACJ,2BAAA,IAAA,qBAAA,EAA8B4mB,iCACA3Y,UACEnK,YAAa;AAAAhF,gBAAAmP;AAAAnP,gBAAA8nB;AAAA9nB,gBAAAgF;AAAAhF,gBAAAsB;AAAAA,MAAAA,OAAA;AAAAA,eAAAtB,EAAA,EAAA;AAAA,MAAA;AAF9CyoB,uBAAAA;AAAAA,IAAAA,OADU;AAAA,UAIPX,0BAA0B,OAAK;AAAAxmB,YAAAA;AAAA,YAAAtB,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAAgF,YAAA;AAElC1D,iBAACJ,2BAAAA,IAAA,kBAA2BiO,EAAAA,UACEnK,WAAa,CAAA;AAAAhF,kBAAAmP;AAAAnP,kBAAAgF;AAAAhF,kBAAAsB;AAAAA,QAAAA,OAAA;AAAAA,iBAAAtB,EAAA,EAAA;AAAA,QAAA;AAD3CyoB,yBAAAA;AAAAA,MAAAA,OADU;AAAA,YAGPX,0BAA0B,YAAU;AAAAxmB,cAAAA;AAAA,cAAAtB,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAAgF,YAAA;AAEvC1D,mBAACJ,2BAAAA,IAAA,uBAAgCiO,EAAAA,UACEnK,WAAa,CAAA;AAAAhF,oBAAAmP;AAAAnP,oBAAAgF;AAAAhF,oBAAAsB;AAAAA,UAAAA,OAAA;AAAAA,mBAAAtB,EAAA,EAAA;AAAA,UAAA;AADhDyoB,2BAAAA;AAAAA,QAAAA,OADU;AAGPX,cAAAA,0BAA0B,YACjCA,0BAA0B,iBAAe;AAI1B,kBAAAxmB,QAACyW;AAAQxW,gBAAAA;AAAA,gBAAAvB,EAAAoP,EAAAA,MAAAA,sBAAApP,EAAA,EAAA,MAAAmP,YAAAnP,EAAAqP,EAAAA,MAAAA,WAAArP,EAAA,EAAA,MAAAgF,cAAAhF,UAAAsB,MAAA;AAHPC,qBAACL,2BAAA,IAAA,mBAAA,EACD,aAAI,OACGkO,oBACT,WAAA9N,MACD6N,UACDE,SACGrK,WAAa,CAAA;AAAAhF,sBAAAoP;AAAApP,sBAAAmP;AAAAnP,sBAAAqP;AAAArP,sBAAAgF;AAAAhF,sBAAAsB;AAAAtB,sBAAAuB;AAAAA,YAAAA,OAAA;AAAAA,qBAAAvB,EAAA,EAAA;AAAA,YAAA;AANZyoB,6BAAAA;AAAAA,UAAAA,OAAH;AAOPX,gBAAAA,0BAA0B,kBACjCA,0BAA0B,uBAAqB;AAGhC,oBAAAxmB,QAACyW;AAAQxW,kBAAAA;AAAA,kBAAAvB,EAAAoP,EAAAA,MAAAA,sBAAApP,EAAA,EAAA,MAAAmP,YAAAnP,EAAAqP,EAAAA,MAAAA,WAAArP,EAAA,EAAA,MAAAgF,cAAAhF,UAAAsB,MAAA;AAFPC,uBAACL,2BAAA,IAAA,mBAAA,EACD,aAAG,MACL,WAAAI,MACD6N,UACUC,oBACXC,SACGrK,WAAa,CAAA;AAAAhF,wBAAAoP;AAAApP,wBAAAmP;AAAAnP,wBAAAqP;AAAArP,wBAAAgF;AAAAhF,wBAAAsB;AAAAtB,wBAAAuB;AAAAA,cAAAA,OAAA;AAAAA,uBAAAvB,EAAA,EAAA;AAAA,cAAA;AANZyoB,+BAAAA;AAAAA,YAAAA,OAAH;AAAA,kBAOPX,0BAA0B,eAAa;AAAAxmB,oBAAAA;AAAA,oBAAAtB,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA+X,UAAA;AAE1CzW,yBAACJ,2BAAA,IAAA,sBAAA,EAA+B6W,UACA,iBACA5I,UAAW;AAAAnP,0BAAAmP;AAAAnP,0BAAA+X;AAAA/X,0BAAAsB;AAAAA,gBAAAA,OAAA;AAAAA,yBAAAtB,EAAA,EAAA;AAAA,gBAAA;AAF3CyoB,iCAAAA;AAAAA,cAAAA,OADU;AAAA,oBAIPX,0BAA0B,qBAAmB;AAAAxmB,sBAAAA;AAAA,sBAAAtB,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA+X,UAAA;AAEhDzW,2BAACJ,2BAAA,IAAA,sBAAA,EAA+B6W,UACA,gBACA5I,UAAW;AAAAnP,4BAAAmP;AAAAnP,4BAAA+X;AAAA/X,4BAAAsB;AAAAA,kBAAAA,OAAA;AAAAA,2BAAAtB,EAAA,EAAA;AAAA,kBAAA;AAF3CyoB,mCAAAA;AAAAA,gBAAAA,OADU;AAAA,sBAIPX,0BAA0B,UAAQ;AAAAxmB,wBAAAA;AAAAtB,wBAAAA,UAAAmP,UAAA;AACxB7N,6BAACJ,2BAAA,IAAA,sBAAA,EAA+BiO,SAAW,CAAA;AAAAnP,8BAAAmP;AAAAnP,8BAAAsB;AAAAA,oBAAAA,OAAA;AAAAA,6BAAAtB,EAAA,EAAA;AAAA,oBAAA;AAA3CyoB,qCAAAA;AAAAA,kBAAAA,OAAH;AAAA,wBACPX,0BAA0B,gBAAc;AAAAxmB,0BAAAA;AAAAtB,0BAAAA,UAAAmP,UAAA;AAC9B7N,+BAACJ,2BAAA,IAAA,qBAAA,EAA8BiO,SAAW,CAAA;AAAAnP,gCAAAmP;AAAAnP,gCAAAsB;AAAAA,sBAAAA,OAAA;AAAAA,+BAAAtB,EAAA,EAAA;AAAA,sBAAA;AAA1CyoB,uCAAAA;AAAAA,oBAAAA,OAAH;AAAA,0BACPX,0BAA0B,SAAO;AAAAxmB,4BAAAA;AAAA,4BAAAtB,EAAAoP,EAAAA,MAAAA,sBAAApP,EAAA,EAAA,MAAAmc,sBAAAnc,EAAAmP,EAAAA,MAAAA,YAAAnP,EAAA,EAAA,MAAAqP,WAAArP,UAAA6a,iBAAA;AAEpCvZ,iCAACJ,2BAAAA,IAAA,kBAAA,EAA2BiO,UAAmBE,SAA6BD,oBACtC+M,oBACHtB,iBAAkB;AAAA7a,kCAAAoP;AAAApP,kCAAAmc;AAAAnc,kCAAAmP;AAAAnP,kCAAAqP;AAAArP,kCAAA6a;AAAA7a,kCAAAsB;AAAAA,wBAAAA,OAAA;AAAAA,iCAAAtB,EAAA,EAAA;AAAA,wBAAA;AAFrDyoB,yCAAAA;AAAAA,sBAAAA,OADU;AAAA,4BAIPX,0BAA0B,SAAO;AAAAxmB,8BAAAA;AAAA,8BAAAtB,EAAAoP,EAAAA,MAAAA,sBAAApP,EAAA,EAAA,MAAAmc,sBAAAnc,EAAAmP,EAAAA,MAAAA,YAAAnP,EAAA,EAAA,MAAAqP,WAAArP,UAAA6a,iBAAA;AAEpCvZ,mCAACJ,2BAAAA,IAAA,oBAAA,EAA6BiO,UAAmBE,SAA6BD,oBACtC+M,oBACHtB,iBAAkB;AAAA7a,oCAAAoP;AAAApP,oCAAAmc;AAAAnc,oCAAAmP;AAAAnP,oCAAAqP;AAAArP,oCAAA6a;AAAA7a,oCAAAsB;AAAAA,0BAAAA,OAAA;AAAAA,mCAAAtB,EAAA,EAAA;AAAA,0BAAA;AAFvDyoB,2CAAAA;AAAAA,wBAAAA,OADU;AAAA,8BAIPX,0BAA0B,aAAW;AAAAxmB,gCAAAA;AAAAtB,gCAAAA,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA+X,YAAA/X,EAAA,EAAA,MAAAgF,YAAA;AAExC1D,qCAACJ,2BAAAA,IAAA,wBAAA,EAAmC8D,YACF+S,UACA,UAAI,OACJ5I,UAAW;AAAAnP,sCAAAmP;AAAAnP,sCAAA+X;AAAA/X,sCAAAgF;AAAAhF,sCAAAsB;AAAAA,4BAAAA,OAAA;AAAAA,qCAAAtB,EAAA,EAAA;AAAA,4BAAA;AAH7CyoB,6CAAAA;AAAAA,0BAAAA,OADU;AAAA,gCAKPX,0BAA0B,aAAW;AAAAxmB,kCAAAA;AAAAtB,kCAAAA,UAAAmP,UAAA;AAC3B7N,uCAACJ,2BAAA,IAAA,uBAAA,EAAgCiO,SAAW,CAAA;AAAAnP,wCAAAmP;AAAAnP,wCAAAsB;AAAAA,8BAAAA,OAAA;AAAAA,uCAAAtB,EAAA,EAAA;AAAA,8BAAA;AAA5CyoB,+CAAAA;AAAAA,4BAAAA,OAAH;AAAA,kCACPX,0BAA0B,oBAAkB;AAAAxmB,oCAAAA;AAAAtB,oCAAAA,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA+X,YAAA/X,EAAA,EAAA,MAAAgF,YAAA;AAE/C1D,yCAACJ,2BAAAA,IAAA,wBAAA,EAAmC8D,YACF+S,UACA,UAAG,MACH5I,UAAW;AAAAnP,0CAAAmP;AAAAnP,0CAAA+X;AAAA/X,0CAAAgF;AAAAhF,0CAAAsB;AAAAA,gCAAAA,OAAA;AAAAA,yCAAAtB,EAAA,EAAA;AAAA,gCAAA;AAH7CyoB,iDAAAA;AAAAA,8BAAAA,OADU;AAAA,oCAKPX,0BAA0B,UAAQ;AAAAxmB,sCAAAA;AAAAtB,sCAAAA,EAAAoP,EAAAA,MAAAA,sBAAApP,EAAAmc,EAAAA,MAAAA,sBAAAnc,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA+X,YAAA/X,EAAA,EAAA,MAAAqP,WAAArP,EAAA,EAAA,MAAA6a,mBAAA7a,EAAA,EAAA,MAAAgF,YAAA;AAErC1D,0EAAC,qBAAgC0D,EAAAA,YACF+S,UACD1I,SACWD,oBACVD,UACUgN,oBACHtB,gBAAkB,CAAA;AAAA7a,4CAAAoP;AAAApP,4CAAAmc;AAAAnc,4CAAAmP;AAAAnP,4CAAA+X;AAAA/X,4CAAAqP;AAAArP,4CAAA6a;AAAA7a,4CAAAgF;AAAAhF,4CAAAsB;AAAAA,kCAAAA,OAAA;AAAAA,2CAAAtB,EAAA,EAAA;AAAA,kCAAA;AANxDyoB,mDAAAA;AAAAA,gCAAAA,OADU;AAAA,sCAQPX,0BAA0B,aAAW;AAAAxmB,wCAAAA;AAAAtB,wCAAAA,UAAAmP,UAAA;AAExC7N,6CAACJ,2BAAA,IAAA,uBAAA,EAAgCiO,SAAW,CAAA;AAAAnP,8CAAAmP;AAAAnP,8CAAAsB;AAAAA,oCAAAA,OAAA;AAAAA,6CAAAtB,EAAA,EAAA;AAAA,oCAAA;AAA5CyoB,qDAAAA;AAAAA,kCAAAA,OADU;AAGdA,qDAAAA;AAAAA,kCAAAA;AAAAA,gCAAc;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAAnnB,QAAAA;AAAAtB,QAAAA,UAAAmP,UAAA;AAKT7N,YAAA6N,YAAYrN,gCAAC4mB,GAAAA,WAAgB,EAAA,MAAA,QAC1B,UAAA;AAAA,QAAAxnB,2BAAAA,IAACP,iBAAW,UAAkC,gCAAA,CAAA;AAAA,QAC9CmB,2BAAAA,KAACnB,GAAAA,YAAoB,EAAA,SAAA,WAAW,UAAA;AAAA,UAAA;AAAA,UAEaO,2BAAAA,cAAM,UAAQ,WAAA,CAAA;AAAA;UAC3D,CAAA;AAAA,MAAA,GACJ;AAAYlB,cAAAmP;AAAAnP,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAMO,UAAAuB,MAAAumB;AAAyCtmB,QAAAA;AAAAxB,QAAAA,UAAAwoB,uBAAA;AACjCtoB,YAAAA,CAAAA,UAAWsoB,sBAAsBtoB,KAAyB;AAACF,cAAAwoB;AAAAxoB,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAAzB,QAAAA,UAAAulB,WAAA;AAE5D9jB,YAAAA,CAAAuS,MAAA2U,aAAA;AAAA,YAAA,CACLA,UAAQ;AACA,sBAAA;AAAA,QAAA;AAEbjB,sBAAc1T,IAAI;AAAA,MAAC;AACtBhU,cAAAulB;AAAAvlB,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAEU0B,UAAAA,MAAAiE,QAAQwiB,mBAAmB;AAACvmB,QAAAA;AAAA,QAAA5B,EAAAmP,EAAAA,MAAAA,YAAAnP,UAAA+X,YAAA/X,EAAA,EAAA,MAAAolB,WAAAplB,WAAA6a,mBAAA7a,EAAAynB,GAAAA,MAAAA,cAAAznB,WAAAuB,OAAAvB,EAAA,GAAA,MAAAwB,OAAAxB,EAAAyB,GAAAA,MAAAA,OAAAzB,EAAA,GAAA,MAAA0B,OAAA1B,WAAA0C,QAAA;AAZ3Cd,2CAAC,kBACoBc,EAAAA,iBAAK,QACf,OAAAnB,KACQ,eAAAC,KACTimB,MAAS,YACD,cAAAhmB,KAMJ0N,UACC,WAAAzN,KACDqW,UACO8C,iBACRuK,SAAU;AAAAplB,cAAAmP;AAAAnP,cAAA+X;AAAA/X,cAAAolB;AAAAplB,eAAA6a;AAAA7a,eAAAynB;AAAAznB,eAAAuB;AAAAvB,eAAAwB;AAAAxB,eAAAyB;AAAAzB,eAAA0B;AAAA1B,eAAA0C;AAAA1C,eAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,GAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA7B,QAAAA,WAAAmoB,qBAAA;AAEtBA,YAAAA,sDACIxnB,GAAmB,YAAA,EAAA,SAAA,WACG,WAAA,UACJ,OAAA,SAAS,UAAQ,WAAA,CAAA;AAAaX,eAAAmoB;AAAAnoB,eAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,GAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA,QAAA/B,EAAA4B,GAAAA,MAAAA,OAAA5B,WAAA6B,KAAA;AAKnD,YAAAC,2BAAA,KAAA,OA1BU,EAAA,WAAA,8BACZF,UAAAA;AAAAA,QAAAA;AAAAA,QAiBCC;AAAAA,MAAAA,GAQL;AAAM7B,eAAA4B;AAAA5B,eAAA6B;AAAA7B,eAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,GAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAA,QAAAhC,EAAA,GAAA,MAAAmP,YAAAnP,EAAA,GAAA,MAAAwlB,YAAAxlB,EAAA,GAAA,MAAA0C,QAAApD,IAAA;AAEL0C,YAAAwjB,YAAY9iB,QAAMpD,MACd4B,2BAAAA,IAAAiE,GAAAA,YAAA,EACY,SAAA,SACC,WAAA,OACAgK,UACD,SAAMyY,MAAAA,oBAAwB,IAAA,GACvC,UAAA1mB,+BAAC0nB,GAAAA,aACL,CAAA,GAAA;AAAa5oB,eAAAmP;AAAAnP,eAAAwlB;AAAA,QAAA,GAAA,IAAA9iB,QAAApD;AAAAU,eAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,GAAA;AAAA,IAAA;AAAAqF,QAAAA;AAAA,QAAArF,EAAA+B,GAAAA,MAAAA,OAAA/B,WAAAgC,KAAA;AACf,YAAAF,2BAAA,KAAA,OArCS,EAAA,WAAA,6BACXC,UAAAA;AAAAA,QAAAA;AAAAA,QA4BCC;AAAAA,MAAAA,GAQL;AAAMhC,eAAA+B;AAAA/B,eAAAgC;AAAAhC,eAAAqF;AAAAA,IAAAA,OAAA;AAAAA,YAAArF,EAAA,GAAA;AAAA,IAAA;AAAAsF,QAAAA;AAAA,QAAAtF,EAAAygB,GAAAA,MAAAA,gBAAAzgB,EAAA,GAAA,MAAAmP,YAAAnP,EAAA+X,GAAAA,MAAAA,YAAA/X,EAAA,GAAA,MAAAwnB,qBAAAxnB,WAAAgF,YAAA;AAGDM,YAAAkiB,qBACGtmB,2BAAA,IAAC,sBAAiC8D,EAAAA,YACA+S,YAAO,UACJ,eAACA,CAAAA,UACN5I,UACIsR,cACTyH,KAAAA,aAAe,CAAA;AAAAloB,eAAAygB;AAAAzgB,eAAAmP;AAAAnP,eAAA+X;AAAA/X,eAAAwnB;AAAAxnB,eAAAgF;AAAAhF,eAAAsF;AAAAA,IAAAA,OAAA;AAAAA,YAAAtF,EAAA,GAAA;AAAA,IAAA;AAAAuF,QAAAA;AAAAvF,QAAAA,WAAAmP,UAAA;AAI9C5J,2CAEM,OAFU,EAAA,WAAA,eACZ,UAACrE,2BAAAA,IAAA,4BAAA,EAAqCiO,UAAQ,EAClD,CAAA;AAAMnP,eAAAmP;AAAAnP,eAAAuF;AAAAA,IAAAA,OAAA;AAAAA,YAAAvF,EAAA,GAAA;AAAA,IAAA;AAAA0F,QAAAA;AAAA1F,QAAAA,EAAAyoB,GAAAA,MAAAA,kBAAAzoB,WAAAsF,OAAAtF,EAAA,GAAA,MAAAuF,KAAA;AACJ,YAAAzD,2BAAA,KAAA,OAdU,EAAA,WAAA,wCACXwD,UAAAA;AAAAA,QAAAA;AAAAA;QAUDC;AAAAA,MAAAA,GAGJ;AAAMvF,eAAAyoB;AAAAzoB,eAAAsF;AAAAtF,eAAAuF;AAAAvF,eAAA0F;AAAAA,IAAAA,OAAA;AAAAA,YAAA1F,EAAA,GAAA;AAAA,IAAA;AAAA4F,QAAAA;AAAA,QAAA5F,EAAA2nB,GAAAA,MAAAA,oBAAA3nB,WAAAwlB,YAAAxlB,EAAA,GAAA,MAAA2O,qBAAA3O,EAAA0C,GAAAA,MAAAA,QAAApD,IAAA;AAELkmB,YAAAA,YACItkB,2BAAAA,IAAA2nB,KAAA,oBAAA,EAAyBlB,MAAe,kBACX,UAAMnC,MAAAA,SAAS9iB,QAAMpD,IAAMqP,iBAAiB,GAC5C,UAAMiZ,MAAAA,yBAAyB,GAClC,OAAgC1mB,2BAAA,IAAA,SAA3B,UAAqB,wBAAA,CAAA,GAE7B,6CAAK,EAAA,UAAA;AAAA,QAAA;AAAA,QAAWA,2BAAAA,IACJ,OADO,UACX,sBAAA,CAAA;AAAA,QAAI;AAAA,MAAA,EAAA,CACG,EAChB,CAAA;AAAAlB,eAAA2nB;AAAA3nB,eAAAwlB;AAAAxlB,eAAA2O;AAAA,QAAA,GAAA,IAAAjM,QAAApD;AAAAU,eAAA4F;AAAAA,IAAAA,OAAA;AAAAA,YAAA5F,EAAA,GAAA;AAAA,IAAA;AAAA8F,QAAAA;AAAA,QAAA9F,EAAA,GAAA,MAAAsB,OAAAtB,EAAAqF,GAAAA,MAAAA,OAAArF,EAAA0F,GAAAA,MAAAA,OAAA1F,WAAA4F,KAAA;AAzE/BE,YACKxE,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAQD+D;AAAAA,QAuCAK;AAAAA,QAgBCE;AAAAA,MAAAA,GAS0B;AAE5B5F,eAAAsB;AAAAtB,eAAAqF;AAAArF,eAAA0F;AAAA1F,eAAA4F;AAAA5F,eAAA8F;AAAAA,IAAAA,OAAA;AAAAA,YAAA9F,EAAA,GAAA;AAAA,IAAA;AA3EH8F,WAAAA;AAAAA,EA2EG;AAIX,QAAMgjB,UAAU;AAEhB,WAASrC,aAAWvmB,OAAgBmlB,sBAAiC;AAE7DvS,QAAAA;AACJ,QAAI,CAAC5S,OAAO;AACA,cAAA;AAAA,IAAA;AAEZ,QAAIA,SAAS,CAACA,MAAM6oB,MAAMD,OAAO,GAAG;AACxB,cAAA;AAAA,IAAA;AAEZ,QAAI5oB,SAASmlB,wBAAwBA,qBAAqB7gB,SAAStE,KAAK,GAAG;AAC/D,cAAA;AAAA,IAAA;AAEL4S,WAAAA;AAAAA,EACX;AAEA,WAAS0T,aAAatmB,OAAe;AAC7B4S,QAAAA;AACJ,QAAI,CAAC5S,OAAO;AACA,cAAA;AAAA,IAAA;AAEL4S,WAAAA;AAAAA,EACX;AAEA,QAAMkW,kBAAoD;AAAA,IACtDC,YAAY;AAAA,IACZ9E,WAAW;AAAA,IACXC,UAAU;AAAA,IACVE,KAAK;AAAA,IACLD,OAAO;AAAA,IACP6E,QAAQ;AAAA,IACRC,QAAQ;AAAA,IACRC,cAAc;AAAA,IACdC,cAAc;AAAA,IACdC,eAAe;AAAA,IACfC,qBAAqB;AAAA,IACrBC,aAAa;AAAA,IACbC,mBAAmB;AAAA,IACnBC,WAAW;AAAA,IACXC,kBAAkB;AAAA,IAClBC,WAAW;AAAA,IACXrlB,OAAO;AAAA,IACPslB,WAAW;AAAA,IACXC,QAAQ;AAAA,IACRC,cAAc;AAAA,IACdC,OAAO;AAAA,EACX;AAEA,WAAAC,iBAAAlqB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA0B,UAAA;AAAA,MAAAiqB;AAAAA,MAAAhqB;AAAAA,MAAAiqB;AAAAA,MAAAnW;AAAAA,MAAAoW;AAAAA,MAAAjb;AAAAA,MAAA4I;AAAAA,MAAA8C;AAAAA,MAAAuK;AAAAA,IAAAA,IAAArlB;AAsBzBkF,QAAAA;AAAAuT,QAAAA;AAAAnY,QAAAA;AAAAE,QAAAA;AAAAC,QAAAA;AAAAI,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAA,QAAAd,EAAA,CAAA,MAAAmP,YAAAnP,EAAA+X,CAAAA,MAAAA,YAAA/X,SAAAolB,WAAAplB,EAAA,CAAA,MAAAkqB,mBAAAlqB,EAAAoqB,CAAAA,MAAAA,gBAAApqB,EAAAmqB,CAAAA,MAAAA,iBAAAnqB,EAAA,CAAA,MAAAgU,QAAAhU,EAAA6a,CAAAA,MAAAA,mBAAA7a,SAAAE,OAAA;AAEGmqB,YAAAA,qBAA2B3a,OAAAwJ,QAAA0L,eAA8B,EAAC0F,OAAQ5a,OAAAwJ,QAAe2B,eAAe,CAAC;AAEjG,YAAA0P,oBAA0BnF,UACpBiF,mBAAkB/lB,OAAAgH,OAA6H,IAC/I+e,oBAAkBnjB,IAAAiE,QAGlB,EAACmP,OAAArO,UAAA,CAAA,CAME;AAET,YAAAue,QAAYtqB;AACZ,YAAAuqB,mBAAuBrQ,QAAOyK,KAAAA,sBAAsBzK,KAAG,KAAKS,gBAAgBT,KAAG,IAAC3W;AAChF,YAAAinB,eAAqB1P,kBAAcrB;AAAW5Y,UAAAA;AAAAf,UAAAA,EAAA0qB,EAAAA,MAAAA,gBAAA1qB,UAAAyqB,oBAAAzqB,EAAA,EAAA,MAAA6a,iBAAA;AAC9C8P,cAAAA,kBAAwBD,gBAAiB9Q,CAAAA,uBAAkB8Q,YAAY,IAAI3P,oBAAe2P,cAAc7P,eAAe,IAACpX;AAC5F1C,cAAA4pB,mBAAmB3P,mBAAiBiJ,KAAU0G,UAAAA,iBAAiB3P,gBAAc,IAAIA;AAAchb,gBAAA0qB;AAAA1qB,gBAAAyqB;AAAAzqB,gBAAA6a;AAAA7a,gBAAAe;AAAAA,MAAAA,OAAA;AAAAA,cAAAf,EAAA,EAAA;AAAA,MAAA;AAA3H,YAAA4qB,sBAA4B7pB;AAE5B,YAAAqB,SAAA,CAAA,GAAA,IAAAyO,IAAqCnB,OAAAC,KAAY4a,gBAAgB,EAACrjB,IAAA2jB,QAMjE,CAAC,CAAA;AAAG7pB,UAAAA;AAAA,UAAAhB,EAAA,EAAA,MAAAmP,YAAAnP,EAAAoqB,EAAAA,MAAAA,gBAAApqB,EAAAgU,EAAAA,MAAAA,QAAAhU,UAAAE,OAAA;AAIYc,cAAAA,MAAA;AAAA,cAAA,CACAmO,UAAQ;AACTib,0BAAcpW,MAAMrO,QAAQzF,KAAK,CAAC;AAAA,UAAA;AAAA,QAAC;AAE1CF,gBAAAmP;AAAAnP,gBAAAoqB;AAAApqB,gBAAAgU;AAAAhU,gBAAAE;AAAAF,gBAAAgB;AAAAA,MAAAA,OAAA;AAAAA,cAAAhB,EAAA,EAAA;AAAA,MAAA;AAIGmB,YAAAA,MAAAgO,WAAQ2b,GAAAA,+BAAAC,GAAAA;AAA2DzpB,UAAAA;AAAAtB,UAAAA,UAAAmB,KAAA;AAH5DG,cAAAhB,GAAAA,IACP,sCAAoC0qB,GAAAA,sBAEpC7pB,KACA,4BACJ;AAACnB,gBAAAmB;AAAAnB,gBAAAsB;AAAAA,MAAAA,OAAA;AAAAA,cAAAtB,EAAA,EAAA;AAAA,MAAA;AAAAuB,UAAAA;AAAAvB,UAAAA,UAAAE,OAAA;AACAqB,eAACrB,gDAAa,UAAwB,4BAAA;AAAKF,gBAAAE;AAAAF,gBAAAuB;AAAAA,MAAAA,OAAA;AAAAA,cAAAvB,EAAA,EAAA;AAAA,MAAA;AAAAwB,UAAAA;AAAA,UAAAxB,EAAA4qB,EAAAA,MAAAA,uBAAA5qB,UAAAE,OAAA;AAC3CsB,cAAAtB,SAAS0qB,uBAAuB9oB,gCAa3B,SAZS,WAAAxB,GAAAA,IACP,mBAAmB,GACvB,UAAA;AAAA,UAAAY,2BAAAA,IAAA,SAAgB,WAAA,QACZ,yCAACga,KAAAA,qBAAoC0P,EAAAA,gBAAAA,qBACzC,EAAA,CAAA;AAAA,UACA9oB,2BAAAA,YAAgB,EAAA,WAAA,iDACZ,UAAA;AAAA,YAAAZ,2BAAAA,IAAA,OAAA,EAAM0pB,8BAAmBnrB,KAAM,CAAA;AAAA,2CAC9BkB,GAAAA,YAAoB,EAAA,SAAA,WACF,OAAA,aACdiqB,8BAAmBngB,YACxB,CAAA;AAAA,UAAA,EACJ,CAAA;AAAA,QAAA,GACJ;AAAMzK,gBAAA4qB;AAAA5qB,gBAAAE;AAAAF,gBAAAwB;AAAAA,MAAAA,OAAA;AAAAA,cAAAxB,EAAA,EAAA;AAAA,MAAA;AAAA,UAAAA,EAAA,EAAA,MAAAsB,OAAAtB,EAAAuB,EAAAA,MAAAA,OAAAvB,EAAAwB,EAAAA,MAAAA,OAAAxB,UAAAgB,KAAA;AA1BVH,aAAAiB,2BAAAA,KAAA,OAAA,EACa,SAAAd,KAKE,WAAAM,KAMVC,UAAAA;AAAAA,UAAAA;AAAAA,UACAC;AAAAA,QAAAA,GAcL;AAAMxB,gBAAAsB;AAAAtB,gBAAAuB;AAAAvB,gBAAAwB;AAAAxB,gBAAAgB;AAAAhB,gBAAAa;AAAAA,MAAAA,OAAA;AAAAA,aAAAb,EAAA,EAAA;AAAA,MAAA;AACL4N,WAAAA,GAAAA;AAAaoG,WAAAA;AAAI,UAAAhU,EAAAoqB,EAAAA,MAAAA,gBAAApqB,UAAAE,OAAA;AACIK,aAAA4T,CAAUiW,WAAAA,aAAapW,QAAMrO,QAAQzF,KAAK,CAAC;AAACF,gBAAAoqB;AAAApqB,gBAAAE;AAAAF,gBAAAO;AAAAA,MAAAA,OAAA;AAAAA,aAAAP,EAAA,EAAA;AAAA,MAAA;AAC3C,WAAA;AAAA,UAAAA,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;4CAClB0T,GAAAA,eAAY,UAEb,2BAAA,CAAA;AAAcpU,gBAAAY;AAAAA,MAAAA,OAAA;AAAAA,aAAAZ,EAAA,EAAA;AAAA,MAAA;AACbqU,WAAAA,GAAAA;AACG,WAAAnT,2BAAAA,IAAA,SACKkB,UAAM8E,OAAAA,IAAAC,aAoBGrF,2BAAA,KAAA,OAAA,EAnB6B,WAAA,QAC/B,UAAA;AAAA,QAACZ,2BAAA,IAAAP,GAAA,YAAA,EAAoB,SAAA,mBAAgB,SAAA;AAAA,QACrCO,2BAAAA,IAAA,SAAgB,WAAA,wDACXwO,iBAAAwJ,QAAeqR,gBAAgB,EAACrjB,IAAAzF,CAAA,QAAA;AAAM,gBAAA,CAAAwpB,OAAAC,gBAAA,IAAAzpB;AACnC0pB,gBAAAA,WAAAnC,gBAAiC5O,KAAuB;AAAE,cACtD+Q,aAAa5mB,SAAK;AAAA,mBACVrD,2BAAA,IAAA,sBAAA,EAEagpB,iBACR,SAAA,MAAA;AACLC,4BAAc/P,KAAG;AACjBgQ,sCAAwB;AAAA,YAEZpP,GAAAA,gBAAAA,kBACNjD,SAAAA,GAPH,KAOc;AAAA,UAAA;AAAA,iBAAA;AAAA,QAAA,CAGhC,EACL,CAAA;AAAA,MAAA,KAlBaxT,OAmBjB,CACH,GAYL;AAAMvE,aAAAmP;AAAAnP,aAAA+X;AAAA/X,aAAAolB;AAAAplB,aAAAkqB;AAAAlqB,aAAAoqB;AAAApqB,aAAAmqB;AAAAnqB,aAAAgU;AAAAhU,aAAA6a;AAAA7a,aAAAE;AAAAF,aAAAiF;AAAAjF,cAAAwY;AAAAxY,cAAAK;AAAAL,cAAAO;AAAAP,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAA,IAAAA,OAAA;AAAAmE,WAAAjF,EAAA,CAAA;AAAAwY,WAAAxY,EAAA,EAAA;AAAAK,WAAAL,EAAA,EAAA;AAAAO,WAAAP,EAAA,EAAA;AAAAQ,WAAAR,EAAA,EAAA;AAAAY,WAAAZ,EAAA,EAAA;AAAAa,WAAAb,EAAA,EAAA;AAAAc,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAA,QAAAf,EAAAiF,EAAAA,MAAAA,MAAAjF,UAAAc,IAAA;AAnCV,WAAAI,2BAAAA,IAAC,MACGJ,UAmCJ,GAAA,CAAA;AAAgBd,cAAAiF;AAAAjF,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAAhB,QAAAA,UAAAwY,MAAAxY,EAAAK,EAAAA,MAAAA,MAAAL,EAAAO,EAAAA,MAAAA,MAAAP,EAAA,EAAA,MAAAQ,MAAAR,UAAAY,MAAAZ,EAAA,EAAA,MAAAe,IAAA;AA1CpBC,2CAAC,IAAagT,EAAAA,MAAAA,IACQ,cAAAzT,IACJ,UAAAC,IACdI,UAAAA;AAAAA,QAAAA;AAAAA,QAGAG;AAAAA,MAAAA,GAqCJ;AAASf,cAAAwY;AAAAxY,cAAAK;AAAAL,cAAAO;AAAAP,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAAa,EAAAA,MAAAA,MAAAb,UAAAgB,IAAA;AAxENG,WACHN,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QA4BAG;AAAAA,MAAAA,GA2CS;AACVhB,cAAAa;AAAAb,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAzEImB,WAAAA;AAAAA,EAyEJ;AA9HP,WAAA0pB,SAAAO,OAAA;AA8CQ7mB,UAAAA,QAAAykB,gBAA8B5O,KAAuB;AAAE,QACnD7V,OAAK;AACEA,aAAAA;AAAAA,IAAAA;AAEJ,WAAA;AAAA,EAAc;AAlD7B,WAAA0H,SAAAsO,GAAAC,GAAA;AAAA,WAAA;AAAA,MAAA,GAkCmBD;AAAAA,MAAC,GACDC;AAAAA,IAAC;AAAA,EAAA;AAnCpB,WAAArP,SAAApL,IAAA;AA6Bc,UAAA,CAAAqa,KAAAiR,gBAAA,IAAAtrB;AAAqB,WAAA;AAAA,MAAA,CACtBqa,GAAG,GAAGY;AAAAA,IAAc;AAAA,EAAA;AA9BjC,WAAA1P,QAAAvL,IAAA;AA2BqCib,UAAAA,CAAAA,EAAAA,cAAA,IAAAjb;AAAmB,WAAK,CAAC6Z,KAAkBoB,kBAAAA,eAAcrB,QAAS,KAAKqB,eAAcrB,UAAAG,aAAwB;AAAA,EAAO;AA6GlJ,WAAAwR,qBAAAvrB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA8B,UAAA;AAAA,MAAAya;AAAAA,MAAAwP;AAAAA,MAAAlP;AAAAA,MAAAjD;AAAAA,IAAAA,IAAAhY;AAOjC,UAAA2qB,eAAqB1P,eAAcrB;AACnC4R,UAAAA,6BAAmCxT,YAAQ,CAAK6B,KAAAA,kBAAkB8Q,YAAY,KAAKA,aAAY5Q,aAAcoQ,iBAAepQ;AAAWzZ,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAMpHL,WAAAC,OACP,mDACJ;AAACN,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAA,QAAAP,EAAAgb,CAAAA,MAAAA,kBAAAhb,SAAAurB,4BAAA;AACD,WAAArqB,2BAAAA,IAAA,SAAgB,WAAA,QACZ,yCAACga,KAAAA,qBAAoCF,EAAAA,gBAA0BuQ,sCAA0B,EAC7F,CAAA;AAAMvrB,aAAAgb;AAAAhb,aAAAurB;AAAAvrB,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,SAAAurB,4BAAA;AAGGA,WAAAA,8BAA+BrqB,2BAAA,IAAAE,GAAA,SAAA,EACrB,OAAA,wHACP,UAACF,2BAAA,IAAAsqB,GAAA,aAAA,EAAiB,MAAA,YAAsB,WAAA,MAAK,CAAA,GACjD;AAAUxrB,aAAAurB;AAAAvrB,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAECY,UAAAA,KAAA2qB,6BAA6B,cAAW9nB;AAAY5C,QAAAA;AAAAb,QAAAA,SAAAgb,eAAAvb,QAAAO,SAAAY,IAAA;AAD/DC,WAACK,2BAAAA,IAAAP,GAAAA,YAAA,EACU,OAAAC,IAAuDoa,yBAAcvb,MAAM;AAAa,QAAA,CAAA,IAAAub,eAAAvb;AAAAO,aAAAY;AAAAZ,aAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,CAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAAQ,CAAAA,MAAAA,MAAAR,UAAAa,IAAA;AACjG,WAAAiB,2BAAA,KAAA,OAPU,EAAA,WAAA,oCACXtB,UAAAA;AAAAA,QAAAA;AAAAA,QAIDK;AAAAA,MAAAA,GAEJ;AAAMb,aAAAQ;AAAAR,cAAAa;AAAAb,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAA,QAAAf,EAAA,EAAA,MAAAgb,eAAAvQ,aAAA;AAEN,WAAAvJ,2BAAAA,IAACP,GAAAA,cAAoB,SAAA,WACF,OAAA,aACI,WAAA,YAClBqa,UAAAA,eAAcvQ,YACnB,CAAA;AAAa,QAAA,EAAA,IAAAuQ,eAAAvQ;AAAAzK,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAAc,EAAAA,MAAAA,MAAAd,UAAAe,IAAA;AAdjBC,2CAAA,OACIF,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QASAC;AAAAA,MAAAA,GAMJ;AAAMf,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAAO,EAAAA,MAAAA,MAAAP,UAAAgB,IAAA;AACJ,WAAAc,2BAAA,KAAA,OAvBS,EAAA,WAAAzB,IAGXE,UAAAA;AAAAA,QAAAA;AAAAA,QAGAS;AAAAA,MAAAA,GAiBJ;AAAMhB,cAAAO;AAAAP,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAA,QAAAtB,EAAA0a,EAAAA,MAAAA,WAAA1a,UAAAmB,IAAA;AA3BHG,YAACJ,2BAAAA,IAAAG,GAAAA,MAAA,EACKqZ,SACE,WAAA,wCACXvZ,UAyBJ,IAAA;AAAOnB,cAAA0a;AAAA1a,cAAAmB;AAAAnB,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AA5BAsB,WAAAA;AAAAA,EA4BA;ACvxBJ,WAASmqB,UAAUC,KAAqB;AACvC,QAAA,CAACA,IAAY,QAAA;AACjB,QAAIA,IAAIzkB,WAAW,EAAG,QAAOykB,IAAIC,YAAY;AAG7C,UAAMC,QAAQF,IAAIG,MAAM,QAAQ,EAAEvnB,OAAOqB,OAAO;AAE5CimB,QAAAA,MAAM3kB,WAAW,EAAU,QAAA;AAGxB2kB,WAAAA,MAAM,CAAC,EAAED,YAAY;AAAA,IAExBC,MAAME,MAAM,CAAC,EACR5kB,IAAI6kB,CAAQA,SAAAA,KAAKC,OAAO,CAAC,EAAEhe,gBAAgB+d,KAAKE,UAAU,CAAC,EAAEN,aAAa,EAC1ElS,KAAK,EAAE;AAAA,EACpB;ACPO,WAAAyS,cAAAnsB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAuB,UAAA;AAAA,MAAA0iB;AAAAA,MAAAyH;AAAAA,MAAApW;AAAAA,IAAAA,IAAAjU;AAM1B,UAAAosB,qBAA2BnV,KAAAA,sBAAsB;AAEjD,UAAAoV,OAAazJ,aACP,iEAAmEA,YAAUljB,OAASgsB,UAAU9I,WAAUljB,IAAK,IAAI,QAAQ,mCAAmC4sB,MAAAC,UAAgBC,iBAAA;AAAA,MAAA,GAAsB5J;AAAAA,IAAAA,CAAY,GAAC,MAAQ,GAAI,IAC7N;AAAyBtiB,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAA2iB,WAAAljB,MAAA;AAI1B,WAAAqC,2BAAA,KAAAsS,GAAqB,aAAA,EAAA,SAAA,MAAM,UAAA;AAAA,QAAA;AAAA,QAAUuO,WAAUljB;AAAAA,MAAAA,GAAM;AAAc,QAAA,CAAA,IAAAkjB,WAAAljB;AAAAO,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAA,QAAAP,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGhEH,WAACuB,2BAAAA,KAAAnB,GAAAA,YAAA,EAAoB,SAAA,SAAoB,WAAA,aAAa,UAAA;AAAA,QAAA;AAAA,uCAKQ,KADtD,EAAA,KAAA,uBACE,MAAA,4CAA4C,UAAI,QAAA;AAAA,QAAI;AAAA,MAAA,GAC9D;AAAaX,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,SAAAosB,MAAA;AARjB5rB,2CAAC6T,kBAEG9T,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAOAW,2BAAAA,IAACsrB,gCACU,OAAAC,0BAAAC,QACDN,MACG,UAAA,cAER9gB,UAiBLA,QAAA,CAAA;AAAA,MAAA,GAEJ;AAAgBtL,aAAAosB;AAAApsB,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAAosB,CAAAA,MAAAA,QAAApsB,SAAAmsB,oBAAA;AAKCvrB,WAAA4E,CAAA,MAAA;AACLA,UAAC6T,gBAAiB;AAClB7T,UAAC4T,eAAgB;AACjB+S,2BAAkBnY,KAAA;AAAA,UAAAsD,MACR;AAAA,UAASC,SACN;AAAA,QAAA,CACZ;AACMoV,eAAAA,UAAAC,UAAAC,UAA8BT,IAAI;AAAA,MAAC;AAC7CpsB,aAAAosB;AAAApsB,aAAAmsB;AAAAnsB,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;0CACAosB,GAAAA,iBAAsB,EAAA,MAAA,QAAU,CAAA;AAAA9sB,aAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,CAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,SAAAY,IAAA;AAZrCE,2CAAC0R,WACY,EAAA,SAAA,QACH,MAAA,SACG,SAAA5R,IASTC,UAAAA;AAAAA,QAAAA;AAAAA,QAAiC;AAAA,MAAA,GAErC;AAASb,aAAAY;AAAAZ,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,UAAAoqB,cAAA;AACTrpB,0CAACyR,GAAgB,QAAA,EAAA,SAAA,MAAM4X,aAAY,KAAM,GAAG,UAAK,SAAA;AAASpqB,cAAAoqB;AAAApqB,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAAc,EAAAA,MAAAA,MAAAd,UAAAe,IAAA;AAhB9DC,2CAACsT,kBACGxT,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAeAC;AAAAA,MAAAA,GACJ;AAAgBf,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAAoqB,EAAAA,MAAAA,gBAAApqB,EAAA,EAAA,MAAAgU,QAAAhU,EAAAK,EAAAA,MAAAA,MAAAL,EAAA,EAAA,MAAAQ,MAAAR,UAAAgB,IAAA;AAvDbG,WAACW,2BAAAA,KAAA8L,GAAAA,QAAA,EAAaoG,MACQoW,cACJ,UAAA,OACrB/pB,UAAAA;AAAAA,QAAAA;AAAAA,QACAG;AAAAA,QAkCAQ;AAAAA,MAAAA,GAkBJ;AAAShB,cAAAoqB;AAAApqB,cAAAgU;AAAAhU,cAAAK;AAAAL,cAAAQ;AAAAR,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAxDFmB,WAAAA;AAAAA,EAwDE;AAnEN,WAAAmK,QAAAvL,IAAA;AA6BW,UAAA;AAAA,MAAAgtB;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAAntB;AAMC,WACCmB,2BAAAA,IAAA,OAAA,EAAY6rB,OAAkB,WAAA,uBACzCC,UAAAA,OAAM9lB,IAAAimB,CAAAA,MAAAC,MACHlsB,2BAAA,IAAA,OAAA,EAAW,GAAM+rB,aAAY;AAAA,MAAAE;AAAAA,IAAS,CAAA,GACjCA,UAAAA,KAAIjmB,KAAAmmB,OAAAjT,QACDlZ,4CAAoBgsB,cAAa;AAAA,MAAAG;AAAAA,IAAAA,CAAU,EAA9B,GAAA,IAChB,EAHKD,GAAAA,CAIV,CACH,EACH,CAAA;AAAA,EAAM;AA0BZ,WAASb,iBAAiB5J,YAAsC;AAEtD2K,UAAAA,kBAAkBA,CAACptB,UAAoB;AACrCA,UAAAA,UAAUuD,UAAavD,UAAU,MAAM;AAChCA,eAAAA;AAAAA,MAAAA;AAELqtB,YAAAA,YAAYC,aAAMttB,KAAK;AACzB,UAAA,OAAOqtB,cAAc,YAAY;AAC1BA,eAAAA;AAAAA,MAAAA;AAEP5b,UAAAA,MAAMiH,QAAQ2U,SAAS,GAAG;AAC1B,eAAOA,UAAUrmB,IAAI,CAACW,MAAWylB,gBAAgBzlB,CAAC,CAAC;AAAA,MAAA;AAEnD,UAAA,OAAO0lB,cAAc,UAAU;AAC3BA,YAAAA,cAAc,KACPA,QAAAA;AACX7d,eAAOC,KAAK4d,SAAS,EAAEje,QAAS8K,CAAQ,QAAA;AAChC,cAAA,CAACgO,KAAAA,cAAcmF,SAAS,GAAG;AAC3B,kBAAME,WAAWH,gBAAgBC,UAAUnT,GAAG,CAAC;AAC3CqT,gBAAAA,aAAa,QAAQA,aAAahqB,UAAagqB,aAAa,SAAS,CAACrF,mBAAcqF,QAAQ,GAAG;AAC/FF,wBAAUnT,GAAG,IAAIqT;AAAAA,YAAAA,OACd;AACH,qBAAOF,UAAUnT,GAAG;AAAA,YAAA;AAAA,UACxB;AAAA,QACJ,CACH;AACD,eAAOmT,UAAUG;AACjB,eAAOH,UAAUI;AACjB,eAAOJ,UAAU1R;AACjB,eAAO0R,UAAUvS;AACjB,eAAOuS,UAAUK;AACjB,eAAOL,UAAUvT;AAAAA,MAAAA;AAIduT,aAAAA;AAAAA,IACX;AAEO,WAAA;AAAA,MACHjuB,IAAIqjB,WAAWrjB;AAAAA,MACfG,MAAMkjB,WAAWljB;AAAAA,MACjBoJ,cAAc8Z,WAAW9Z;AAAAA,MACzBnJ,MAAMijB,WAAWjjB;AAAAA,MACjB+K,aAAakY,WAAWlY;AAAAA,MACxBuP,UAAU;AAAA,MACV3N,iBAAiBsW,WAAWtW;AAAAA,MAC5BmB,MAAMmV,WAAWnV;AAAAA,MACjBjJ,OAAOoe,WAAWpe;AAAAA,MAClBQ,UAAU4d,WAAW5d;AAAAA,MACrB8oB,eAAelL,WAAWkL;AAAAA,MAC1BC,aAAanL,WAAWmL;AAAAA,MACxB5T,YAAYxK,OAAOwJ,QAAQ;AAAA,QACvB,GAAIyJ,WAAWzI,cAAc,CAAA;AAAA,MAChC,CAAA,EACIhT,IAAI,CAAC,CAACkT,KAAKla,KAAK,OAAO;AAAA,QACpB,CAACka,GAAG,GAAGkT,gBAAgBptB,KAAK;AAAA,MAC9B,EAAA,EACDoa,OAAO,CAACC,GAAGC,OAAO;AAAA,QAAE,GAAGD;AAAAA,QAAG,GAAGC;AAAAA,MAAE,IAAI,CAAA,CAAE;AAAA,MAC1CuT,iBAAiBpL,WAAWoL,kBAAkB,CAAE,GAAE7mB,IAAIqlB,gBAAgB;AAAA,IAC1E;AAAA,EAEJ;ACvFO,WAASyB,+BAA+B;AAAA,IACIhpB;AAAAA,IACA9C;AAAAA,IACA+rB;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAhsB;AAAAA,IACAisB;AAAAA,IACAC;AAAAA,IACAhf;AAAAA,IACAif;AAAAA,IACAzT;AAAAA,IACAsB;AAAAA,EACuB,GAAG;AAEnE,UAAA;AAAA,MACFzZ;AAAAA,MACAC;AAAAA,MACAmU;AAAAA,MACA/T;AAAAA,MACAD;AAAAA,MACAyrB;AAAAA,QACArrB,iBAA+B;AAEnC,UAAMipB,qBAAqBnV,KAAAA,sBAAsB;AAEjD,UAAMwX,cAAcC,KAAAA,eAAe;AACnC,UAAMC,WAAW,CAACF;AAGlB,UAAM,CAACG,uBAAuBC,wBAAwB,IAAIvrB,eAA6B;AACvF,UAAM,CAACsY,qBAAqBmD,sBAAsB,IAAIzb,eAA6B;AACnF,UAAM,CAAC0b,2BAA2BC,4BAA4B,IAAI3b,eAA6B;AAE/F,UAAMmc,yBAAyB7D,sBAAsBlN,UAAUkN,qBAAqBoD,yBAAyB,IAAItb;AAC3Ggc,UAAAA,mBAAmBD,yBAAyB5b,OAAAA,MAAMlB,OAAOwX,YAAYsF,uBAAuBnR,WAAW,KAAK,cAAc,CAAC,IAAI5K;AACrI,UAAM,CAACorB,gBAAgBC,iBAAiB,IAAIzrB,MAAAA,SAAkB,KAAK;AAEnE,UAAM,CAAC0rB,qBAAqBC,sBAAsB,IAAI3rB,MAAAA,SAAkB,KAAK;AAE7E,UAAM,CAAC4rB,uBAAuBC,wBAAwB,IAAI7rB,MAAAA,SAAkB,KAAK;AACjF,UAAM,CAAC6Y,sBAAsBiT,uBAAuB,IAAI9rB,MAAAA,SAAmB,CAAA,CAAE;AAE7E,UAAM+rB,4BAA4B5sB,MAAMC,OAErCC,OAAOmZ,kBAAkB;AAAA,MAAE,IAAInZ,OAAOmZ;AAAAA,IAAgB,IAAI,EAAE;AAE/D3X,UAAAA,UAAU,MAAM;AACRiqB,UAAAA,mBACSI,KAAK;AAAA,IAAA,GACnB,CAACA,KAAK,CAAC;AAEJc,UAAAA,0BAA0Bf,wBAC1B,MAAY;AACV,UAAI,CAACA,sBACD;AAEJU,6BAAuB,IAAI;AAELtsB,4BAAAA,MAAM,EACvB4O,KAAMge,CAAkB,kBAAA;AAEjBA,YAAAA,cACuBA,MAAAA,uBAAAA,cAAcpV,UAAwB;AAEjE,YAAI,CAACoV,eAAe;AAChBnD,6BAAmBnY,KAAK;AAAA,YACpBsD,MAAM;AAAA,YACNC,SAAS;AAAA,UAAA,CACZ;AACD;AAAA,QAAA;AAGJ,cAAMgY,mBAAmBD,cAAcpV,aAAaxK,OAAOC,KAAK2f,cAAcpV,UAAU,IAAI,CAAE,GACzF5V,OAAQoK,CAAgB,gBAAA,CAAChM,OAAOwX,WAAWxL,WAAW,CAAC;AACxD6gB,YAAAA,gBAAgBtoB,WAAW,GAAG;AAC9BklB,6BAAmBnY,KAAK;AAAA,YACpBsD,MAAM;AAAA,YACNC,SAAS;AAAA,UAAA,CACZ;AACD;AAAA,QAAA;AAGJ,cAAMiY,oBAAoB;AAAA,UACtB,GAAGD,gBAAgBjV,OAAO,CAACmV,KAAK/gB,kBAAgB;AAC5C+gB,gBAAI/gB,aAAW,KAAK4gB,cAAcpV,cAAc,IAAIxL,aAAW;AACxD+gB,mBAAAA;AAAAA,UACX,GAAG,EAEF;AAAA,UACD,GAAG/sB,OAAOwX;AAAAA,QACd;AACMwV,cAAAA,yBAAyB,CAC3B,GAAGH,iBACH,GAAI7sB,OAAOmZ,mBAAmB,EAAG;AAEvB,sBAAA,cAAc2T,mBAAmB,KAAK;AAEpDG,8BAAsBD,sBAAsB;AAE5CP,gCAAwBI,eAAe;AAAA,MAAA,CAC1C,EACAld,QAAQ,MAAM;AACX2c,+BAAuB,KAAK;AAAA,MAAA,CAC/B;AAAA,IAAA,IAEPvrB;AAEAmsB,UAAAA,4BAA4BA,CAACrhB,cAAuB;AAClD,UAAA,CAACA,UAAW,QAAO6gB,0BAA0Bpe,QAAQ,EAAE,KAAKpN,OAAAA,MAAMlB,QAAQ8L,gCAAgC;AACvG4gB,aAAAA,0BAA0Bpe,QAAQzC,SAAS,KAAK3K,aAAMlB,QAAQ8L,+BAA+BD,SAAS,CAAC;AAAA,IAClH;AAEMohB,UAAAA,wBAAwBA,CAAClT,oBAA8BlO,gBAAuB;AAC1E6Q,YAAAA,sBAAsB5Q,+BAA+BD,WAAS;AAEtD6Q,oBAAAA,qBAAqB3C,oBAAoB,KAAK;AAClCzL,gCAAAA,QAAQzC,eAAa,EAAE,IAAIkO;AAAAA,IAEzD;AAEM8C,UAAAA,iBAAiBA,CAAC7Q,eAAsBH,gBAAuB;AACjE,YAAMyP,SAAStP,gBAAcD,UAAUC,eAAaH,WAAS,IAAI9K;AACjE,UAAI,CAACua,OACKtS,OAAAA,MAAM,+BAA+B;AAE/C/I,oBAAcyL,mBAAmB4P,MAAM,GAAGva,QAAW,KAAK;AAEpDwb,YAAAA,yBAAyB2Q,0BAA0BrhB,WAAS;AAClE,UAAI0Q,wBAAwB;AACxB,cAAMxC,uBAAqBwC,uBAAuB3a,OAAQgb,CAAAA,MAAMA,MAAM5Q,aAAW;AACjFihB,8BAAsBlT,sBAAoBlO,WAAS;AAAA,MAAA;AAGvD2gB,+BAAyB,KAAK;AAE9BN,+BAAyBnrB,MAAS;AAClCqb,6BAAuBrb,MAAS;AAChCub,mCAA6Bvb,MAAS;AAAA,IAC1C;AAEMuY,UAAAA,iBAAiBA,CAACH,iBAA2BtN,gBAAuB;AACtE5L,oBAAc6L,+BAA+BD,WAAS,GAAGsN,iBAAiB,KAAK;AAAA,IACnF;AAEA,UAAMqD,oBAAoBA,CAAC;AAAA,MACI5f;AAAAA,MACAqa;AAAAA,IAAAA,MAIzB;AACF,UAAI,CAACra,IAAI;AACL,cAAMoM,MAAM,oDAAoD;AAAA,MAAA;AAEpE/I,oBAAc,cAAc;AAAA,QACxB,GAAID,OAAOwX,cAAc,CAAC;AAAA,QAC1B,CAAC5a,EAAE,GAAGqa;AAAAA,SACP,KAAK;AAEF8C,YAAAA,uBAAqB,CAAC,GAAI/Z,OAAOmZ,mBAAmBnM,OAAOC,KAAKjN,OAAOwX,UAAU,GAAI5a,EAAE;AAC7FqwB,4BAAsBlT,oBAAkB;AAExCyS,+BAAyB,KAAK;AAC9B,UAAIV,aAAa;AACY/R,iCAAAA,qBAAmBoT,QAAQvwB,EAAE,CAAC;AACvDwf,+BAAuBxf,EAAE;AAAA,MAAA;AAE7B0f,mCAA6Bvb,MAAS;AAAA,IAC1C;AAEA,UAAM2c,oBAAoBA,CAAC;AAAA,MACI9gB,IAAAA;AAAAA,MACAqa,UAAAA;AAAAA,MACAkM;AAAAA,MACAtX,WAAAA;AAAAA,IAAAA,MAC2B;AAEtD,YAAMyP,WAAS1e,OAAKmP,UAAUnP,MAAIiP,WAAS,IAAI9K;AAC/C,YAAMqsB,eAAe9R,WAAS5P,mBAAmB4P,QAAM,IAAIva;AAGvDoiB,UAAAA,cAAcA,eAAevmB,MAAI;AAE3BywB,cAAAA,iBAAiBthB,UAAUoX,YAAYtX,WAAS;AAChDyhB,cAAAA,uBAAuB5hB,mBAAmB2hB,cAAc;AAExD9Q,cAAAA,2BAAyB2Q,0BAA0BrhB,WAAS;AAGlE,cAAMkO,uBAAqBwC,yBACtB/X,IAAKoY,CAAAA,QAAMA,QAAMuG,aAAavmB,OAAKggB,GAAC,EACpChb,OAAQgb,CAAMA,QAAAA,QAAM7b,MAAS;AAElCksB,8BAAsBlT,sBAAoBlO,WAAS;AAEnD,YAAIjP,MAAI;AACqBmd,mCAAAA,qBAAmBoT,QAAQvwB,IAAE,CAAC;AACvDwf,iCAAuBxf,IAAE;AAAA,QAAA;AAEf0wB,sBAAAA,sBAAsBvsB,QAAW,KAAK;AACpCusB,wBAAAA,sBAAsB,OAAO,KAAK;AAAA,MAAA;AAGtDnd,cAAQuT,MAAM,qBAAqB;AAAA,QAC/B9mB,IAAAA;AAAAA,QACAqa,UAAAA;AAAAA,QACAkM;AAAAA,QACAtX,WAAAA;AAAAA,QACAuhB;AAAAA,MAAAA,CACH;AAED,UAAIA,cAAc;AACAA,sBAAAA,cAAcnW,YAAU,KAAK;AAC3BmW,wBAAAA,cAAc,MAAM,KAAK;AAAA,MAAA;AAAA,IAGjD;AAEA,UAAMG,0BAA0BA,CAAC3wB,MAAYiP,aAAoBuE,UAAgC;AAC7F,YAAMgd,iBAAexwB,OAAKmP,UAAUnP,MAAIiP,WAAS,IAAI9K;AACrDoP,cAAQuT,MAAM,2BAA2B;AAAA,QACrC9mB,IAAAA;AAAAA,QACAiP,WAAAA;AAAAA,QACAuE;AAAAA,QACAgd,cAAAA;AAAAA,MAAAA,CACH;AACD,UAAIA,gBAAc;AACd,cAAMrgB,WAAWqD,SAASpD,OAAOC,KAAKmD,KAAK,EAAE7L,SAAS;AACtDinB,wBAAgB5uB,MAAIiP,aAAWkB,WAAWqD,QAAQrP,MAAS;AAC3DqT,sBAAc1I,mBAAmB0hB,cAAY,GAAGrgB,WAAW,mBAAmBhM,MAAS;AAAA,MAAA;AAAA,IAE/F;AAEA,UAAMysB,sBAAsBA,MAAM;AAC9BtB,+BAAyBnrB,MAAS;AAClCqb,6BAAuBrb,MAAS;AAAA,IACpC;AAEMgiB,UAAAA,gBAAgB9J,uBAAuBsS,mBAAmBjd,SAASkJ,aAAa+T,kBAAkBjd,QAAQkJ,WAAWyB,mBAAmB,IAAIlY;AAElJ,UAAM0sB,kBAAkBztB,QAAQmZ,oBAAoBpY,UAAaf,OAAOmZ,gBAAgB5U,WAAW;AAE7FmpB,UAAAA,sBAAuB1tB,OAAOmZ,kBAC9BnZ,OAAOmZ,kBACPnM,OAAOC,KAAKjN,OAAOwX,UAAU;AAEnC,UAAMmW,QAAQlZ,MAAAA,QAAQ,MAAMzU,OAAO4tB,WAAWjC,UAAUA,QAAQ3rB,OAAO4tB,OAAO,IAAI,MAAM,CAACjC,SAAS3rB,OAAO4tB,OAAO,CAAC;AAE3G1U,UAAAA,kBAAkBA,CAAClN,eAAqBH,gBAAuB;AACjEsE,cAAQuT,MAAM,qCAAqC;AAAA,QAC/C1X,aAAAA;AAAAA,QACAH,WAAAA;AAAAA,MAAAA,CACH;AACwB6hB,+BAAAA,oBAAoBP,QAAQnhB,aAAW,CAAC;AACjEoQ,6BAAuBpQ,aAAW;AAClCsQ,mCAA6BzQ,WAAS;AAAA,IAC1C;AAEA,UAAMgiB,OACFzuB,2BAAAA,KAAC,OAAI,EAAA,WAAW,+DACZ,UAAA;AAAA,MAACA,2BAAAA,KAAA,OAAA,EAAI,WAAWxB,GAAAA,IACZ,qCACA,6BACA,kDACA,CAACouB,YAAY,cAAcvQ,GAC/B,kBAAA,GAEI,UAAA;AAAA,QAACrc,2BAAAA,KAAA,OAAA,EAAI,WAAU,aAEX,UAAA;AAAA,UAACA,2BAAAA,KAAA,OAAA,EAAI,WAAU,kBAEX,UAAA;AAAA,YAACZ,2BAAAA,IAAAsF,OAAA,OAAA,EACG,MAAM,QACN,IAAIC,uBACJ,WAAW,MACX,WAAU,SACV,gBAAe,yBACf,aAAa,mBACb,MAAM,SACN,UAAQ,MACR,OAAOd,QAAQ7C,QAAQrD,IAAI,EAAE,CAAA;AAAA,YAEhC4wB,yCACI1vB,eAAW,EAAA,SAAS,SACT,WAAW,QACX,OAAO,aAAY,UAAA;AAAA,cAAA;AAAA,cACf0vB,MAAMG;AAAAA,YAAAA,EACtB,CAAA;AAAA,UAAA,GACR;AAAA,UAECpC,aAAaltB,2BAAA,IAAC,OAAI,EAAA,WAAU,QACxBktB,UACL,WAAA;AAAA,UAEAtsB,2BAAAA,KAAC,OAAI,EAAA,WAAU,iCACX,UAAA;AAAA,YAAAZ,2BAAAA,IAACE,cAAQ,OAAO,oCACP,SAAS,MACd,UAAAF,2BAAAA,IAACiE,iBACG,SAAS,UACT,UAAU4pB,qBACV,SAAS,MAAMD,kBAAkB,IAAI,GACrC,UAAC5tB,2BAAAA,IAAAuvB,GAAA,UAAA,EAAQ,GACb,EACJ,CAAA;AAAA,YACCpB,2BAA4BnuB,2BAAAA,IAAAE,GAAAA,SAAA,EAAQ,OAAO,oCACP,SAAS,MAC1C,UAAAF,2BAAA,IAACiE,GACG,YAAA,EAAA,SAAS,UACT,UAAU4pB,qBACV,SAASM,yBACRN,UAAsB,sBAAA7tB,2BAAA,IAACuR,GAAiB,kBAAA,EAAA,MAAM,QAAQ,CAAA,IAAKvR,2BAAAA,IAACwR,GAAAA,eAAe,CAAA,CAAA,EAAA,CAChF,EACJ,CAAA;AAAA,2CACCtR,GAAAA,SAAQ,EAAA,OAAO,oBACP,SAAS,MACd,yCAACoR,GAAAA,QACG,EAAA,SAAS,YACT,SAAS,MAAM0c,yBAAyB,IAAI,GAC5C,UAAChuB,2BAAAA,IAAA2e,GAAA,SAAA,EAAO,GACZ,EACJ,CAAA;AAAA,UAAA,EACJ,CAAA;AAAA,QAAA,GACJ;AAAA,QAEC3e,2BAAA,IAAAoa,KAAA,eAAA,EACG,UAACpa,2BAAAA,IAAA,cAAA,EACG,WAAW,QACX,sBACA,qBAAqBya,sBAAsBlN,UAAUkN,qBAAqBoD,yBAAyB,IAAItb,QACvG,YAAYf,OAAOwX,YACnB,kBAAkBxX,OAAOqZ,kBACzB,iBAAiBqU,qBACjB,iBACA,gBACA,kBAAkBluB,kBAAkBqd,iBAAiB9b,QACrD,oBACA,OAAe,CAAA,GACvB;AAAA,uCAEC+O,GAAAA,QAAO,EAAA,WAAW,eACX,OAAM,WACN,SAAS,YACT,MAAM,SACN,SAAS,MAAM0c,yBAAyB,IAAI,GAC5C,WAAYhuB,+BAAA2e,GAAAA,SAAA,KAAU,UAE9B,mBAAA,CAAA;AAAA,MAAA,GACJ;AAAA,MAEC,CAAC6O,YACGxtB,2BAAA,IAAA,OAAA,EAAI,WAAW,qFACZ,UAAAY,2BAAAA,KAAC,OACG,EAAA,WAAU,+DAET0d,UAAAA;AAAAA,QAAAA,0BACGC,oBACA,CAAC7F,uBAAkB6F,gBAAgB,oCAClC,cACG,EAAA,SAAS,OAET,kBAAkB,CAACvd,iBACnB,cAAc,OACd,oBAAoB,CAACA,iBACrB,oBAAoB,OACpB,aAAayZ,qBACb,mBAAmBoD,2BACnB,UAAUU,kBACV,mBACA,UAAUF,gBACV,SAAS0Q,yBACT,iBAAiBjrB,YACjB,eACA,SACA,iBACA,mBAfK,GAAA,aAAa2pB,qBAAqB,EAgBzC;AAAA,QAEL,CAAClP,oBACG3d,2BAAAA,KAAA,OAAA,EAAI,WAAW,iEACZ,UAAA;AAAA,UAAAZ,2BAAAA,IAACP,iBAAW,SAAS,SAAS,WAAU,IACnCwvB,UAAAA,kBACK,wCACA,+BACV,CAAA;AAAA,UACAruB,gCAAC0Q,GAAAA,UAAO,SAAS,YACT,SAAS,MAAM0c,yBAAyB,IAAI,GAEhD,UAAA;AAAA,YAAAhuB,2BAAA,IAAC2e,GAAO,SAAA,EAAA;AAAA,YAAA;AAAA,UAAA,EAEZ,CAAA;AAAA,QAAA,GACJ;AAAA,QAEHJ,oBAAoB7F,KAAkB6F,kBAAAA,gBAAgB,KACnDve,2BAAA,IAACP,iBAAW,SAAS,SAAS,WAAU,oCACnC,UACL,yDAAA,CAAA;AAAA,MAAA,EAAA,CACR,EACJ,CAAA;AAAA,MAEH+tB,YAAaxtB,2BAAAA,IAAA,oBAAA,EACV,SAAS,OACT,MAAMytB,0BAA0BlrB,QAEhC,cAAc,CAACgc,kBACf,oBAAoB,CAACvd,iBACrB,kBAAkB,MAClB,oBAAoB,OACpB,aAAayZ,qBACb,mBAAmBoD,2BACnB,UAAUU,kBACV,mBACA,UAAUF,gBACV,SAAS0Q,yBACT,iBAAiBjrB,YACjB,eACA,SACA,iBACA,oBACA,UAAUkrB,qBACV,aAAaxB,WACPwB,sBACAzsB,UAnBD,aAAakrB,qBAAqB,EAoBpC;AAAA,IAAA,GAEX;AAEJ,WAES4B,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,MAAAA;AAAAA,MAGArvB,2BAAAA,IAAA,oBAAA,EACG,SAAS,OACT,kBAAkB,OAClB,oBAAoB,MACpB,cAAc,MACd,iBAAiB8D,YACjB,MAAMiqB,uBACN,UAAU,MAAMC,yBAAyB,KAAK,GAC9C,mBAAmBhQ,mBACnB,SACA,oBAAoB,CAAChd,iBACrB,iBACA,oBACA,sBAAsBQ,OAAOmZ,gBAA4B,CAAA;AAAA,MAE7D3a,2BAAAA,IAACoa,KAAAA,eACG,EAAA,UAAApa,2BAAAA,IAAC,eACG,EAAA,YAAYwB,QACZ,MAAMmsB,gBACN,cAAcC,kBAAkB,CAAA,EACxC,CAAA;AAAA,IAAA,GACJ;AAAA,EAER;AChfO,WAAA4B,qBAAA3wB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA8B,UAAA;AAAA,MAAA+T;AAAAA,MAAA2c;AAAAA,MAAAC;AAAAA,MAAAL;AAAAA,MAAAM;AAAAA,IAAAA,IAAA9wB;AAM4BM,QAAAA;AAAA,QAAAL,EAAA4wB,CAAAA,MAAAA,gBAAA5wB,SAAA2wB,UAAA;AAKvCtwB,WAAA8T,CAAUH,WAAAA,SAAO4c,aAAa,IAAID,SAAS;AAAC3wB,aAAA4wB;AAAA5wB,aAAA2wB;AAAA3wB,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAK5C,UAAAO,KAAAswB,SAAS;AAAiBrwB,QAAAA;AAAAR,QAAAA,SAAAO,IAAA;AAAxC,WAAAW,2BAAAA,IAACkT,GAAAA,eAAa7T,UAA2B,GAAA,CAAA;AAAcP,aAAAO;AAAAP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,SAAAuwB,MAAA;AAElDA,WAAAA,QAASrvB,2BAAA,IAAAP,GAAA,YAAA,EACF,UACR,MAAA;AAAaX,aAAAuwB;AAAAvwB,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;0CACZC,GAAAA,cAAW,UAEZ,gBAAA,CAAA;AAAaX,aAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,CAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,SAAAY,IAAA;AANjBE,2CAACuT,kBACIzT,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAGDC;AAAAA,MAAAA,GAIJ;AAAgBb,aAAAY;AAAAZ,aAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,UAAA4wB,cAAA;AAGZ,WAAA1vB,2BAAA,IAACsR,aAAe,SAAA,QAAgBoe,SAAAA,cAAc,WAAQ,MAAE,UAAQ,WAAA,CAAA;AAAS5wB,cAAA4wB;AAAA5wB,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAAhB,QAAAA,UAAA2wB,UAAA;AACzE3vB,WAACE,2BAAA,IAAAsR,WAAA,EAAgBme,SAAO,UAAG,UAAI,QAAA;AAAS3wB,cAAA2wB;AAAA3wB,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAAe,EAAAA,MAAAA,MAAAf,UAAAgB,IAAA;AAF5CG,2CAACmT,kBACGvT,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QACAC;AAAAA,MAAAA,GACJ;AAAgBhB,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAA,QAAAtB,EAAAgU,EAAAA,MAAAA,QAAAhU,EAAA,EAAA,MAAAK,MAAAL,EAAAQ,EAAAA,MAAAA,MAAAR,EAAA,EAAA,MAAAc,MAAAd,UAAAmB,IAAA;AArBnB,YAAAW,2BAAA,KAAA8L,aACSoG,MACQ,cAAA3T,IACE,mBAAA,sBACC,oBAAA,4BAGjBG,UAAAA;AAAAA,QAAAA;AAAAA,QACAM;AAAAA,QAUAK;AAAAA,MAAAA,GAIJ;AAASnB,cAAAgU;AAAAhU,cAAAK;AAAAL,cAAAQ;AAAAR,cAAAc;AAAAd,cAAAmB;AAAAnB,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAtBTsB,WAAAA;AAAAA,EAsBS;ACtCV,WAAAwvB,8BAAA/wB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAuC,UAAA;AAAA,MAAA+T;AAAAA,MAAAC;AAAAA,IAAAA,IAAAlU;AAI1C,UAAA;AAAA,MAAAgxB;AAAAA,QAEIjW,gCAA2B;AAAEza,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;0CAK5B0T,GAAAA,eAAY,UAAkB,qBAAA,CAAA;AAAcpU,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAA,QAAAP,EAAA+wB,CAAAA,MAAAA,eAAA/wB,SAAAiU,SAAA;AAExC1T,WAAAwwB,aAAW7pB,IAAA8pB,CACD,SAAAlvB,2BAAA,KAAC0Q,aAEK,SAAA,MAAMyB,QAAQ+c,KAAI5W,GAAI,GAC/B,WAAQ,MACC,SAAA,QAER4W,UAAAA;AAAAA,QAAIvxB,KAAAA;AAAAA,QAAM;AAAA,QAAGuxB,KAAI5W;AAAAA,QAAK;AAAA,MAAA,KALlB4W,KAAI5W,GAMb,CAAS;AACXpa,aAAA+wB;AAAA/wB,aAAAiU;AAAAjU,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,SAAA+wB,aAAA;AACAA,YAAAA,eAAW,IAAM9pB,gBACd/F,2BAAAA,IAAAP,GAAA,YAAA,EAAoB,SAAA,SAAS,UAE9B,0BAAA,CAAA;AAAaX,aAAA+wB;AAAA/wB,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAAO,CAAAA,MAAAA,MAAAP,SAAAQ,IAAA;AAdpB,WAAAsB,2BAAA,KAAAuS,GAAyB,eAAA,EAAA,WAAA,uBACrB9T,UAAAA;AAAAA,QAAAA;AAAAA,QAUAC;AAAAA,MAAAA,GAKL;AAAgBR,aAAAO;AAAAP,aAAAQ;AAAAR,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,SAAAiU,SAAA;AAChB,WAAA/S,2BAAA,IAACoT,GACG,eAAA,EAAA,UAAApT,2BAAAA,IAACsR,GAAAA,QAAgB,EAAA,SAAA,YAAqB,SAAMyB,MAAAA,QAAAA,GAAW,UAAA,SAAM,CAAA,GACjE;AAAgBjU,aAAAiU;AAAAjU,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,EAAAgU,EAAAA,MAAAA,QAAAhU,UAAAY,MAAAZ,EAAA,EAAA,MAAAa,IAAA;AAvBbC,WAACgB,2BAAA,KAAA8L,WAAA,EACM,UAAA,MACJoG,MACN3T,UAAAA;AAAAA,QAAAA;AAAAA,QACAO;AAAAA,QAiBAC;AAAAA,MAAAA,GAGJ;AAASb,cAAAgU;AAAAhU,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAxBFc,WAAAA;AAAAA,EAwBE;ACLN,WAAAmwB,sBAAAlxB,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,GAAA;AAA+B,UAAA;AAAA,MAAA0iB;AAAAA,MAAAuO;AAAAA,MAAAC;AAAAA,MAAA9C;AAAAA,MAAA+C;AAAAA,IAAAA,IAAArxB;AAgBlC,UAAA;AAAA,MAAAgxB,aAAAM;AAAAA,QAA4CvW,gCAA2B;AAEvE,UAAAwW,CAAAA,uBAAAC,wBAAA,IAA0D/uB,MAAAa,SAAmC;AAC7F,UAAAmuB,CAAAA,yBAAAC,0BAAA,IAA8DjvB,MAAAa,cAA6B;AAC3F,UAAAquB,CAAAA,cAAAC,eAAA,IAAwCnvB,MAAAa,SAAmC;AAE3E,UAAAuuB,CAAAA,eAAAC,gBAAA,IAA0CrvB,MAAAa,SAGvC;AAEH,UAAA;AAAA,MAAAX;AAAAA,MAAAC;AAAAA,QAGIO,iBAA4B;AAAE7C,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAA2iB,WAAAoL,gBAAA;AAE6CpL,WAAAA,WAAUoL,kBAAqB,CAAA;AAAA,QAAA,CAAA,IAAApL,WAAAoL;AAAA/tB,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAA9G,UAAA+tB,CAAAA,gBAAA+D,iBAAA,IAA4CtvB,MAAAa,SAAmChD,EAA+B;AAAE4E,QAAAA;AAAAuT,QAAAA;AAAAuZ,QAAAA;AAAAC,QAAAA;AAAA1wB,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAjB,QAAAA;AAAAC,QAAAA;AAAAI,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAC,QAAAA;AAAAG,QAAAA;AAAAnB,QAAAA,EAAA2iB,CAAAA,MAAAA,WAAAoO,eAAA/wB,EAAA,CAAA,MAAAqxB,sBAAArxB,EAAA,CAAA,MAAA+tB,kBAAA/tB,EAAA0C,CAAAA,MAAAA,OAAAquB,eAAA/wB,EAAA,CAAA,MAAA0C,OAAAjD,MAAA;AAChH,YAAAwyB,sBAA4BvvB,OAAMquB,aAAAzsB,OAAAgH,OAAA,EAAApE,IAAA6B,CAAAA,QACpBmpB,KAAkB1sB,kBAAAA,KAAG6rB,kBAAkB,CAAC,EAAA/sB,OAAAqB,OAAA,KACN,CAAA;AAChD,YAAAwsB,uBAA6BxP,WAAUoO,aAAAzsB,OAAA6G,QAAA,KAA4E,CAAA;AACnHinB,YAAAA,mBAAyBH,oBAAmBhrB,SAAUkrB,qBAAoBlrB;AAG/B,YAAA;AAClC/B,WAAAA,GAAAA;AAAyB,YAAA;AAA6C,YAAA;AAC5B,WAAA;AAAAzD,UAAAA;AAAA,UAAAzB,EAAA,EAAA,MAAA0C,OAAAjD,MAAA;AAG/BgC,eAACK,2BAAA,KAAAnB,GAAoB,YAAA,EAAA,SAAA,MAAM,UAAA;AAAA,UAAA;AAAA,UACJ+B,OAAMjD;AAAAA,QAAAA,GAC7B;AAAa,UAAA,EAAA,IAAAiD,OAAAjD;AAAAO,gBAAAyB;AAAAA,MAAAA,OAAA;AAAAA,eAAAzB,EAAA,EAAA;AAAA,MAAA;AAAA0B,UAAAA;AAAA1B,UAAAA,UAAA+tB,gBAAA;AAGRrsB,eAAAqsB,kBAAkBA,eAAc9mB,SAAA,oCAAgBorB,GAC7C,OAAA,EAAA,UAAAnxB,+BAACoxB,GAAAA,WACIvE,EAAAA,UAAAA,eAAc7mB,IAAAqrB,CACX,kBAAAzwB,2BAAA,KAAC0wB,aACkB,EAAA,eAAMX,iBAAgB;AAAA,UAAA3vB,iBAAA;AAAA,UAAAuwB,oBAEPF,cAAajzB;AAAAA,QACpC,CAAA,GACP,UAAA;AAAA,UAAC4B,2BAAA,IAAAwxB,GAAA,WAAA,EACS,OAAA,QACN,UAACxxB,2BAAA,IAAAP,eAAA,EAAoB,SAAA,aAAwB,WAAA,aACxC4xB,UAAa9yB,cAAAA,KAClB,CAAA,GACJ;AAAA,UACCyB,+BAAAwxB,GAAAA,WAAA,EACS,OAAA,SACN,yCAACtxB,YAAe,EAAA,OAAA,UACE,SAAA,MACd,UAACF,2BAAAA,IAAAiE,GAAA,YAAA,EAAgB,MAAA,SACI,SAAAwtB,CAAA,QAAA;AACLntB,gBAAC4T,eAAgB;AACjB5T,gBAAC6T,gBAAiB;AAClBkY,qCAAyBgB,cAAajzB,EAAG;AAAA,UAAC,GAExC,OAAA,WACd,UAAA4B,+BAAC0nB,GAAAA,cAAiB,MAAA,QAAA,GACtB,CAAA,EACJ,CAAA,EACJ,CAAA;AAAA,QAAA,EAAA,GAzBW2J,cAAa7yB,IA0B5B,CACH,EAAA,CACL,EACJ,CAAA;AAAQM,gBAAA+tB;AAAA/tB,gBAAA0B;AAAAA,MAAAA,OAAA;AAAAA,eAAA1B,EAAA,EAAA;AAAA,MAAA;AAAA4B,UAAAA;AAAA,UAAA5B,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGKkB,eAAAA,MAAA;AACW,2BAAA;AAAA,YAAAM,iBAAA;AAAA,UAAA,CAEf;AAAA,QAAC;AACLlC,gBAAA4B;AAAAA,MAAAA,OAAA;AAAAA,eAAA5B,EAAA,EAAA;AAAA,MAAA;AAAA6B,UAAAA;AAAA,UAAA7B,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AALLmB,eAACX,2BAAA,IAAAsR,GAAA,QAAA,EACY,SAAA5Q,MAKA,SAAA,QACE,WAAAV,2BAAAA,IAAC2e,GAAAA,SAAO,CAAA,CAAA,GAAI,UAE3B,oBAAA,CAAA;AAAS7f,gBAAA6B;AAAAA,MAAAA,OAAA;AAAAA,eAAA7B,EAAA,EAAA;AAAA,MAAA;AAAA+B,UAAAA;AAAA/B,UAAAA,UAAA0B,MAAA;AA5CbK,eAACD,2BAAA,KAAA8Q,GAAiB,OAAA,EAAA,WAAA,kCACblR,UAAAA;AAAAA,UAAAA;AAAAA,UAkCDG;AAAAA,QAAAA,GAWJ;AAAQ7B,gBAAA0B;AAAA1B,gBAAA+B;AAAAA,MAAAA,OAAA;AAAAA,eAAA/B,EAAA,EAAA;AAAA,MAAA;AAAA,UAAAA,EAAAyB,EAAAA,MAAAA,QAAAzB,UAAA+B,MAAA;AAEN,aAAAD,2BAAA,KAAA,OArDU,EAAA,WAAA,6CACZL,UAAAA;AAAAA,UAAAA;AAAAA,UAIAM;AAAAA,QAAAA,GAgDJ;AAAM/B,gBAAAyB;AAAAzB,gBAAA+B;AAAA/B,gBAAAmB;AAAAA,MAAAA,OAAA;AAAAA,aAAAnB,EAAA,EAAA;AAAA,MAAA;AAEsD,WAAA;AAAA,UAAAA,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACxDI,aAACI,2BAAA,IAAAP,eAAA,EAAoB,SAAA,MAAM,UAE3B,gBAAA;AAAaX,gBAAAc;AAAAA,MAAAA,OAAA;AAAAA,aAAAd,EAAA,EAAA;AAAA,MAAA;AAAAA,UAAAA,UAAAoyB,kBAAA;AAEZA,aAAAA,qBAAsB,KAClBlxB,2BAAA,IAAA0xB,GAAA,OAAA,EAAc,QAAC1xB,2BAAA,IAAAsR,GAAA,QAAA,EAAe,SAAA,QACF,MAAA,SACA,MAAA,4CACK,WAAA,KACP,KAAA,uBACG,QAAA,UAAS,UAAS,YAAA,CAAA,GAAW,UAE3D,+DAAA,CAAA;AAAQxS,gBAAAoyB;AAAApyB,gBAAAe;AAAAA,MAAAA,OAAA;AAAAA,aAAAf,EAAA,EAAA;AAAA,MAAA;AAIP4S,WAAAA,GAAAA;AAAiD,WAAA;AAC7Cyf,WAAAA,GAAAA;AACIC,WAAAA,GAAAA;AAAStwB,UAAAA;AAAA,UAAAhC,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACmBsB,eAAAgvB,CACrB,SAAAlvB,2BAAA,KAAC0wB,GACG,UAAA,EAAA,UAAA;AAAA,UAACtxB,2BAAA,IAAAwxB,GAAA,WAAA,EACS,OAAA,QACN,UAACxxB,2BAAA,IAAAP,eAAA,EAAoB,SAAA,aAAwB,WAAA,aACxCqwB,UAAIvxB,KAAAA,KACT,CAAA,GACJ;AAAA,UACCyB,+BAAAwxB,GAAAA,WAAA,EACS,OAAA,SACN,yCAACtxB,YAAe,EAAA,OAAA,UACE,SAAG,MACjB,UAACF,2BAAAA,IAAAiE,GAAA,YAAA,EAAgB,MAAA,SACI,SAAA0tB,CAAA,QAAA;AACLrtB,gBAAC4T,eAAgB;AACjB5T,gBAAC6T,gBAAiB;AAClBsY,4BAAgBX,KAAI5W,GAAI;AAAA,UAAC,GAEvB,OAAA,WACd,UAAAlZ,+BAAC0nB,GAAAA,cAAiB,MAAA,QAAA,GACtB,CAAA,EACJ,CAAA,EACJ,CAAA;AAAA,QAAA,EAAA,GArBWoI,KAAI5W,GAsBnB;AACHpa,gBAAAgC;AAAAA,MAAAA,OAAA;AAAAA,eAAAhC,EAAA,EAAA;AAAA,MAAA;AAxBAiyB,WAAAA,oBAAmB/qB,IAAKlF,IAwBxB;AACAmwB,WAAAA,qBAAoBjrB,IAAA+E,MAapB;AAAC,QAAA,CAAA,IAAA0W,WAAAoO;AAAA/wB,aAAAqxB;AAAArxB,aAAA+tB;AAAA,QAAA,CAAA,IAAArrB,OAAAquB;AAAA,QAAA,CAAA,IAAAruB,OAAAjD;AAAAO,aAAAiF;AAAAjF,aAAAwY;AAAAxY,aAAA+xB;AAAA/xB,cAAAgyB;AAAAhyB,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAwB;AAAAxB,cAAAO;AAAAP,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAA8D,WAAAjF,EAAA,CAAA;AAAAwY,WAAAxY,EAAA,CAAA;AAAA+xB,WAAA/xB,EAAA,CAAA;AAAAgyB,WAAAhyB,EAAA,EAAA;AAAAsB,YAAAtB,EAAA,EAAA;AAAAuB,YAAAvB,EAAA,EAAA;AAAAwB,YAAAxB,EAAA,EAAA;AAAAO,WAAAP,EAAA,EAAA;AAAAQ,WAAAR,EAAA,EAAA;AAAAY,WAAAZ,EAAA,EAAA;AAAAa,WAAAb,EAAA,EAAA;AAAAc,WAAAd,EAAA,EAAA;AAAAe,WAAAf,EAAA,EAAA;AAAAgB,WAAAhB,EAAA,EAAA;AAAAmB,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAAzB,QAAAA,EAAAiF,EAAAA,MAAAA,MAAAjF,UAAAO,MAAAP,EAAA,EAAA,MAAAQ,IAAA;AAvCNiB,4CAAC,IACIlB,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAyBAC;AAAAA,MAAAA,GAcL;AAAYR,cAAAiF;AAAAjF,cAAAO;AAAAP,cAAAQ;AAAAR,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAAA0B,QAAAA;AAAA,QAAA1B,EAAAwY,EAAAA,MAAAA,MAAAxY,UAAAyB,KAAA;AAzChB,YAAAP,2BAAAA,IAAC,MACGO,UAyCJ,IAAA,CAAA;AAAQzB,cAAAwY;AAAAxY,cAAAyB;AAAAzB,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA,QAAA5B,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGKkB,YAAAA,MAAA;AACL6vB,uCAA+B;AAAA,MAAC;AACnCzxB,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA,QAAA7B,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAHL,YAAAQ,2BAAA,IAACsR,GACY,QAAA,EAAA,SAAA5Q,KAGA,SAAA,QACE,WAAAV,2BAAAA,IAAC2e,GAAAA,SAAO,CAAA,CAAA,GAAI,UAE3B,yBAAA,CAAA;AAAS7f,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA/B,QAAAA,EAAA+xB,EAAAA,MAAAA,MAAA/xB,UAAA0B,OAAA1B,EAAA,EAAA,MAAAY,IAAA;AArDhBmB,YACGb,2BAAAA,IAAAsW,WAAA,UAAA,EAAA,UAAA1V,gCAAC,IAAiB,EAAA,WAAAlB,IACdc,UAAAA;AAAAA,QAAAA;AAAAA,QA4CAG;AAAAA,MAAAA,EAAAA,CAQJ,EAAQ,CAAA;AAET7B,cAAA+xB;AAAA/xB,cAAA0B;AAAA1B,cAAAY;AAAAZ,cAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,EAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAA,QAAAhC,EAAA,EAAA,MAAA+B,OAAA/B,EAAAa,EAAAA,MAAAA,MAAAb,EAAAc,EAAAA,MAAAA,MAAAd,UAAAe,IAAA;mDAxES,EAAA,WAAAF,IACZC,UAAAA;AAAAA,QAAAA;AAAAA,QAICC;AAAAA,QAWAgB;AAAAA,MAAAA,GA2DL;AAAM/B,cAAA+B;AAAA/B,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AAAAqF,QAAAA;AAAArF,QAAAA,EAAAgC,EAAAA,MAAAA,OAAAhC,UAAAgB,MAAAhB,EAAA,EAAA,MAAAmB,IAAA;AAEJ,YAAAW,2BAAA,KAAA,OAtIU,EAAA,WAAAd,IAEZG,UAAAA;AAAAA,QAAAA;AAAAA,QAuDAa;AAAAA,MAAAA,GA6EJ;AAAMhC,cAAAgC;AAAAhC,cAAAgB;AAAAhB,cAAAmB;AAAAnB,cAAAqF;AAAAA,IAAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAAsF,QAAAA;AAAA,QAAAtF,EAAA,EAAA,MAAAgyB,MAAAhyB,EAAAsB,EAAAA,MAAAA,OAAAtB,EAAAuB,EAAAA,MAAAA,OAAAvB,UAAAqF,KAAA;AAvIVC,2CAAC,IAAoB,EAAA,UAAAhE,KAAkB,WAAAC,KACnC8D,UAuIJ,KAAA;AAAYrF,cAAAgyB;AAAAhyB,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAqF;AAAArF,cAAAsF;AAAAA,IAAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AAAAuF,QAAAA;AAAA,QAAAvF,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAEZ,YAAAQ,2BAAA,IAAA,SAAY,OAAA;AAAA,QAAAoM,QAAU;AAAA,MAAA,GAAW;AAAAtN,cAAAuF;AAAAA,IAAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AAAA0F,QAAAA;AAAA1F,QAAAA,UAAA2iB,WAAArjB,MAAAU,UAAAkxB,oBAAAlxB,EAAAoxB,EAAAA,MAAAA,uBAAApxB,EAAA,EAAA,MAAAsxB,yBAAAtxB,UAAA+tB,gBAAA;AAEhCuD,YAAAA,wDACIzI,yBAAyB,EAAA,MAAAljB,QAAQ2rB,qBAAqB,GACzB,UAAA,MAAA;AACA,cAAA/O,QAAA;AAAA,UAAAjjB,IACQgyB;AAAAA,UAAqBF,yBACCA,uBAAmB,CAAA,GAASzO,WAAUrjB,EAAA;AAAA,QAAA;AAEpE8mB,gBAAAA,MAAc,0BAA0B7D,KAAK;AAC7C2O,yBAAgB4B,iBAAkBvQ,KAAK,EAACjR,KAAA,MAAA;AACpCigB,mCAAwB9tB,MAAU;AAClCquB,4BAAkB/D,gBAAczpB,OAAAyuB,CAAAA,QAAcvtB,IAAClG,OAAQgyB,qBAAqB,CAAC;AAAA,QAAA,CAChF;AAAA,MAAA,GAED,UAAMC,MAAAA,yBAAwB9tB,MAAU,GAC3C,OAAEvC,2BAAAA,IAAAsW,WAAA,UAAA,EAAA,UAAA,6BAA0B,CAAA,GAC7B,MAAE1V,2BAAAA,KAAA0V,WAAAA,UAAA,EAAA,UAAA;AAAA,QAAA;AAAA,QAAWtW,2BAAAA,IAAA,OAAG,UACG,sBAAA,CAAA;AAAA,QACU;AAAA,MAAA,EAAA,CAAA,EAAM,CAAA;AAAA,QAAA,EAAA,IAAAyhB,WAAArjB;AAAAU,cAAAkxB;AAAAlxB,cAAAoxB;AAAApxB,cAAAsxB;AAAAtxB,cAAA+tB;AAAA/tB,cAAA0F;AAAAA,IAAAA,OAAA;AAAAA,YAAA1F,EAAA,EAAA;AAAA,IAAA;AAAA4F,QAAAA;AAAA,QAAA5F,EAAA,EAAA,MAAA2C,iBAAA3C,EAAA,EAAA,MAAA0C,OAAAquB,eAAA/wB,EAAA,EAAA,MAAA0xB,cAAA;AAChEA,YAAAA,+CACI7I,yBAAyB,EAAA,MAAAljB,QAAQ+rB,YAAY,GAChB,UAAA,MAAA;AACA/uB,sBAAc,eAAeD,OAAMquB,aAAAzsB,OAAA0uB,CAA0BxtB,QAAAA,QAAMksB,YAAY,CAAC;AAChFC,wBAAeluB,MAAU;AAAA,MAAA,GAEzB,UAAMkuB,MAAAA,gBAAeluB,MAAU,GAClC,OAAEvC,2BAAAA,IAAAsW,WAAA,UAAA,EAAA,UAAA,oBAAiB,CAAA,GACpB,MAAE1V,2BAAAA,KAAA0V,WAAAA,UAAA,EAAA,UAAA;AAAA,QAAA;AAAA,QAAUtW,2BAAAA,IAAA,OAAG,UACI,sBAAA,CAAA;AAAA,QACI;AAAA,MAAA,EAAA,CAAA,EAAM,CAAA;AAAAlB,cAAA2C;AAAA,QAAA,EAAA,IAAAD,OAAAquB;AAAA/wB,cAAA0xB;AAAA1xB,cAAA4F;AAAAA,IAAAA,OAAA;AAAAA,YAAA5F,EAAA,EAAA;AAAA,IAAA;AAGjD8F,UAAAA,MAAAH,QAAQisB,aAAa;AAAC7rB,QAAAA;AAAA/F,QAAAA,UAAAoxB,qBAAA;AAIHrrB,YAAAqrB,uBAAyB,CAAA;AAAApxB,cAAAoxB;AAAApxB,cAAA+F;AAAAA,IAAAA,OAAA;AAAAA,YAAA/F,EAAA,EAAA;AAAA,IAAA;AAAAgG,QAAAA;AAAAhG,QAAAA,UAAA+F,OAAA/F,EAAA0C,EAAAA,MAAAA,OAAApD,IAAA;AAA7B0G,YAAID,CAAAA,GAAAA,KAA2BrD,OAAMpD,EAAA;AAAIU,cAAA+F;AAAA,QAAA,EAAA,IAAArD,OAAApD;AAAAU,cAAAgG;AAAAA,IAAAA,OAAA;AAAAA,YAAAhG,EAAA,EAAA;AAAA,IAAA;AAAAkG,QAAAA;AAAAlG,QAAAA,UAAA+tB,gBAAA;AAIjD7nB,YAAA+sB,CAAA,sBAAA;AACLA,YAAAA,qBAAiB,CAAKlF,eAAc7mB,IAAA2jB,MAAc,EAACrmB,SAAUyuB,kBAAiB3zB,EAAG,GAAC;AAClFwyB,4BAAsB/D,CAAAA,GAAAA,gBAAgBkF,iBAAiB,CAAC;AAAA,QAAA;AAE5DpB,yBAAgBpuB,MAAU;AAAA,MAAC;AAC9BzD,cAAA+tB;AAAA/tB,cAAAkG;AAAAA,IAAAA,OAAA;AAAAA,YAAAlG,EAAA,EAAA;AAAA,IAAA;AAAAmG,QAAAA;AAAA,QAAAnG,EAAA,EAAA,MAAA2iB,cAAA3iB,EAAA,EAAA,MAAAmxB,uBAAAnxB,EAAA,EAAA,MAAAkxB,oBAAAlxB,EAAA4xB,EAAAA,MAAAA,iBAAA5xB,EAAAquB,EAAAA,MAAAA,WAAAruB,EAAA8F,EAAAA,MAAAA,OAAA9F,EAAAgG,EAAAA,MAAAA,OAAAhG,UAAAkG,KAAA;AAdLC,2CAAC,wBACS,EAAA,MAAAL,KACYorB,kBACAvO,8BACGwO,qBACA,qBAAAnrB,KACJ,iBAAI,OACjB4rB,GAAAA,eACKvD,SACI,aAAAnoB,KAKT;AAAAlG,cAAA2iB;AAAA3iB,cAAAmxB;AAAAnxB,cAAAkxB;AAAAlxB,cAAA4xB;AAAA5xB,cAAAquB;AAAAruB,cAAA8F;AAAA9F,cAAAgG;AAAAhG,cAAAkG;AAAAlG,cAAAmG;AAAAA,IAAAA,OAAA;AAAAA,YAAAnG,EAAA,EAAA;AAAA,IAAA;AAAAoG,QAAAA;AAAApG,QAAAA,UAAA2C,iBAAA3C,EAAA0C,EAAAA,MAAAA,OAAAquB,aAAA;AAIK3qB,YAAA8sB,CAAA,oBAAA;AAAA,YACDA,iBAAe;AACD,wBAAA,eAAa,CAAA,GAAOxwB,OAAMquB,eAAkB,CAAA,GAAGmC,eAAe,CAAC;AAAA,QAAA;AAEjFzB,wCAAgC;AAAA,MAAC;AACpCzxB,cAAA2C;AAAA,QAAA,EAAA,IAAAD,OAAAquB;AAAA/wB,cAAAoG;AAAAA,IAAAA,OAAA;AAAAA,YAAApG,EAAA,EAAA;AAAA,IAAA;AAAAqG,QAAAA;AAAA,QAAArG,EAAAwxB,EAAAA,MAAAA,2BAAAxxB,UAAAoG,KAAA;AAPLC,YAACnF,2BAAA,IAAA,+BAAA,EACSswB,MAAAA,yBACG,SAAAprB,KAKL;AAAApG,cAAAwxB;AAAAxxB,cAAAoG;AAAApG,cAAAqG;AAAAA,IAAAA,OAAA;AAAAA,YAAArG,EAAA,EAAA;AAAA,IAAA;AAAAsG,QAAAA;AAAAtG,QAAAA,UAAAwB,OAAAxB,EAAAsF,EAAAA,MAAAA,OAAAtF,EAAA0F,EAAAA,MAAAA,OAAA1F,EAAA,GAAA,MAAA4F,OAAA5F,WAAAmG,OAAAnG,EAAA,GAAA,MAAAqG,KAAA;AAlMZ,YAAAvE,2BAAA,KAAA,OAAgB,EAAA,WAAAN,KACZ8D,UAAAA;AAAAA,QAAAA;AAAAA,QA0IAC;AAAAA,QAECG;AAAAA,QAkBAE;AAAAA,QAYDO;AAAAA,QAgBAE;AAAAA,MAAAA,GAQJ;AAAMrG,cAAAwB;AAAAxB,cAAAsF;AAAAtF,cAAA0F;AAAA1F,eAAA4F;AAAA5F,eAAAmG;AAAAnG,eAAAqG;AAAArG,eAAAsG;AAAAA,IAAAA,OAAA;AAAAA,YAAAtG,EAAA,GAAA;AAAA,IAAA;AAnMNsG,WAAAA;AAAAA,EAmMM;AA3OP,WAAAukB,OAAAsI,KAAA;AAAA,WA6N+D3tB,IAAClG;AAAAA,EAAA;AA7NhE,WAAA2M,OAAAmnB,QAAA;AAAA,WAiJsClyB,2BAAA,IAAAsxB,aAAA,EACG,UAAC1wB,2BAAAA,KAAA4wB,GAAAA,WAAA,EACS,OAAA,QACN,UAAA;AAAA,MAAAxxB,+BAACP,GAAAA,cAAoB,SAAA,aAAwB,WAAA,aACxCqwB,iBAAIvxB,MACT;AAAA,MACCqC,2BAAA,KAAAnB,GAAA,YAAA,EAAoB,SAAA,WAAsB,WAAA,aAAa,UAAA;AAAA,QAAA;AAAA,QAEhDO,2BAAAA,IAAuB,QAAhB8vB,EAAAA,UAAAA,OAAI5W,IAAK,CAAA;AAAA,MAAA,EACxB,CAAA;AAAA,IAAA,GACJ,EAAA,GAVW4W,OAAI5W,GAWnB;AAAA,EAAW;AA5JhD,WAAAjP,SAAA1B,KAAA;AAAA,WAoC8D,OAAOjE,QAAM;AAAA,EAAQ;AApCnF,WAAA8F,QAAA9F,GAAA;AAAA,WAiCyD,OAAOA,MAAM;AAAA,EAAQ;AC9D9E,QAAM6tB,6BAA+C;AAAA,IACxD/zB,IAAI;AAAA,IACJI,MAAM;AAAA,IACND,MAAM;AAAA,IACNoJ,cAAc;AAAA,IACd2E,MAAM;AAAA,IACN/C,aAAa;AAAA,IACbyP,YAAYoZ,KAAAA,uBAAuB;AAAA,MAC/B7zB,MAAM;AAAA,QACFqa,UAAU;AAAA,QACVra,MAAM;AAAA,QACNgL,aAAa;AAAA,QACbqF,YAAY;AAAA,UACRtQ,UAAU;AAAA,QAAA;AAAA,MAElB;AAAA,MACA+zB,OAAO;AAAA,QACHzZ,UAAU;AAAA,QACVra,MAAM;AAAA,QACNqQ,YAAY;AAAA,UACRtQ,UAAU;AAAA,QAAA;AAAA,MAElB;AAAA,MACAiL,aAAa;AAAA,QACTqP,UAAU;AAAA,QACVra,MAAM;AAAA,QACNgL,aAAa;AAAA,QACb2Z,UAAU;AAAA,MACd;AAAA,MACAoP,YAAY;AAAA,QACR1Z,UAAU;AAAA,QACVra,MAAM;AAAA,QACNykB,SAAS;AAAA,UACL9L,aAAa;AAAA,UACbH,eAAe,CAAC,SAAS;AAAA,QAC7B;AAAA,QACAxN,aAAa;AAAA,MACjB;AAAA,MACAgpB,WAAW;AAAA,QACP3Z,UAAU;AAAA,QACVra,MAAM;AAAA,QACNi0B,aAAa;AAAA,QACbjpB,aAAa;AAAA,MACjB;AAAA,MACAkpB,OAAO;AAAA,QACH7Z,UAAU;AAAA,QACVra,MAAM;AAAA,QACNqQ,YAAY;AAAA,UACR8jB,iBAAiB;AAAA,UACjBne,KAAK;AAAA,QAAA;AAAA,MAEb;AAAA,MACAoe,QAAQ;AAAA,QACJ/Z,UAAU;AAAA,QACVra,MAAM;AAAA,QACNikB,oBAAoB;AAAA,QACpB3J,IAAI;AAAA,UACAD,UAAU;AAAA,UACVoK,SAAS;AAAA,YACL9L,aAAa;AAAA,YACbH,eAAe,CAAC,SAAS;AAAA,UAAA;AAAA,QAC7B;AAAA,MAER;AAAA,MACA6b,kBAAkB;AAAA,QACdha,UAAU;AAAA,QACVra,MAAM;AAAA,QACNgL,aAAa;AAAA,QACbsP,IAAI;AAAA,UACAD,UAAU;AAAA,UACVpa,MAAM;AAAA,QAAA;AAAA,MAEd;AAAA,MACAq0B,UAAU;AAAA,QACNt0B,MAAM;AAAA,QACNgL,aAAa;AAAA,QACbqP,UAAU;AAAA,QACVyK,UAAU;AAAA,MACd;AAAA,MACAyP,UAAU;AAAA,QACNla,UAAU;AAAA,QACVra,MAAM;AAAA,QACNw0B,WAAW;AAAA,MAAA;AAAA,IAElB,CAAA;AAAA,EACL;ACrFO,QAAMC,yBAA0C;AAAA,IACnD50B,IAAI;AAAA,IACJI,MAAM;AAAA,IACND,MAAM;AAAA,IACNoJ,cAAc;AAAA,IACd2E,MAAM;AAAA,IACN/C,aAAa;AAAA,IACbQ,aAAa;AAAA,IACbiP,YAAYoZ,KAAAA,uBAAuB;AAAA,MAC/B7zB,MAAM;AAAA,QACFA,MAAM;AAAA,QACNqQ,YAAY;AAAA,UAAEtQ,UAAU;AAAA,QAAK;AAAA,QAC7Bsa,UAAU;AAAA,MACd;AAAA,MACAqa,cAAc;AAAA,QACV10B,MAAM;AAAA,QACNqa,UAAU;AAAA,QACVoK,SAAS;AAAA,UACL9L,aAAa;AAAA,UACbH,eAAe,CAAC,SAAS;AAAA,UACzB8b,UAAU;AAAA,YACNK,cAAc;AAAA,UAAA;AAAA,QAClB;AAAA,MAER;AAAA,MACAC,SAAS;AAAA,QACL50B,MAAM;AAAA,QACNgL,aAAa;AAAA,QACbqF,YAAY;AAAA,UAAEtQ,UAAU;AAAA,QAAK;AAAA,QAC7Bsa,UAAU;AAAA,QACVuH,OAAO;AAAA,UACHiT,WAAW;AAAA,UACXC,YAAY;AAAA,UACZra,YAAY;AAAA,YACRsa,MAAM;AAAA,cACF1a,UAAU;AAAA,cACVra,MAAM;AAAA,cACN2kB,UAAU;AAAA,YACd;AAAA,YACAqQ,OAAO;AAAA,cACH3a,UAAU;AAAA,cACVra,MAAM;AAAA,cACN0kB,WAAW;AAAA,YACf;AAAA,YACA0P,QAAQ;AAAA,cACJp0B,MAAM;AAAA,cACNqa,UAAU;AAAA,cACVC,IAAI;AAAA,gBACAD,UAAU;AAAA,gBACVoK,SAAS;AAAA,kBACL9L,aAAa;AAAA,kBACbH,eAAe,CAAC,SAAS;AAAA,kBACzB8b,UAAU;AAAA,oBACNK,cAAc;AAAA,kBAAA;AAAA,gBAClB;AAAA,cAER;AAAA,cACA3pB,aAAa;AAAA,YACjB;AAAA,YACAiqB,UAAU;AAAA,cACNj1B,MAAM;AAAA,cACNqa,UAAU;AAAA,cACVC,IAAI;AAAA,gBACAD,UAAU;AAAA,gBACVpa,MAAM;AAAA,gBACNi1B,mBAAmB,CAAC,QAAQ,YAAY;AAAA,cAAA;AAAA,YAC5C;AAAA,UAER;AAAA,UACA9Y,iBAAiB,CAAC,QAAQ,SAAS,UAAU,UAAU;AAAA,QAAA;AAAA,MAE/D;AAAA,MACA+Y,YAAY;AAAA,QACRn1B,MAAM;AAAA,QACNqa,UAAU;AAAA,QACVma,WAAW;AAAA,MACf;AAAA,MACAY,QAAQ;AAAA,QACJp1B,MAAM;AAAA,QACNqQ,YAAY;AAAA,UAAEtQ,UAAU;AAAA,QAAK;AAAA,QAC7Bsa,UAAU;AAAA,QACV/K,YAAY;AAAA,UACR+lB,WAAW;AAAA,YACPx1B,IAAI;AAAA,YACJkQ,OAAO;AAAA,UACX;AAAA,UACAulB,OAAO;AAAA,QACX;AAAA,QACA9d,cAAc;AAAA,MAClB;AAAA,MACA+d,cAAc;AAAA,QACVv1B,MAAM;AAAA,QACNqa,UAAU;AAAA,QACVmb,WAAW;AAAA,MACf;AAAA,MACAC,UAAU;AAAA,QACNz1B,MAAM;AAAA,QACNqa,UAAU;AAAA,MACd;AAAA,MACAqb,MAAM;AAAA,QACF11B,MAAM;AAAA,QACNgL,aAAa;AAAA,QACbqP,UAAU;AAAA,QACVC,IAAI;AAAA,UACAD,UAAU;AAAA,UACVsb,cAAc;AAAA,QAAA;AAAA,MAClB;AAAA,IACJ,CACH;AAAA,IACDvH,eAAe;AAAA,MACXgH,QAAQ,CAAC,MAAM,WAAW;AAAA,IAAA;AAAA,EAElC;AChHO,QAAMQ,0BAA4C;AAAA,IACrD/1B,IAAI;AAAA,IACJI,MAAM;AAAA,IACND,MAAM;AAAA,IACNoJ,cAAc;AAAA,IACd4B,aAAa;AAAA,IACb+C,MAAM;AAAA,IACN0M,YAAYoZ,KAAAA,uBAAuB;AAAA,MAC/B9C,aAAa;AAAA,QACT/wB,MAAM;AAAA,QACNqa,UAAU;AAAA,MACd;AAAA,MACAuK,OAAO;AAAA,QACH5kB,MAAM;AAAA,QACNqa,UAAU;AAAA,QACVuK,OAAO;AAAA,MACX;AAAA,MACAiR,eAAe;AAAA,QACX71B,MAAM;AAAA,QACNqa,UAAU;AAAA,MACd;AAAA,MACAyb,OAAO;AAAA,QACH91B,MAAM;AAAA,QACNqa,UAAU;AAAA,MACd;AAAA,MACA0b,oBAAoB;AAAA,QAChB/1B,MAAM;AAAA,QACNqa,UAAU;AAAA,QACVC,IAAI;AAAA,UACAD,UAAU;AAAA,UACVpa,MAAM;AAAA,QAAA;AAAA,MAEd;AAAA,MACA+1B,UAAU;AAAA,QACNh2B,MAAM;AAAA,QACNqa,UAAU;AAAA,QACVwK,KAAK;AAAA,MAAA;AAAA,IAEZ,CAAA;AAAA,EACL;ACvCO,QAAMoR,0BAA4C;AAAA,IACrDp2B,IAAI;AAAA,IACJI,MAAM;AAAA,IACND,MAAM;AAAA,IACNoJ,cAAc;AAAA,IACd2E,MAAM;AAAA,IACN/C,aAAa;AAAA,IACbyP,YAAY;AAAA,MACR2W,OAAO;AAAA,QACH/W,UAAU;AAAA,QACVra,MAAM;AAAA,QACNqQ,YAAY;AAAA,UAAEtQ,UAAU;AAAA,QAAA;AAAA,MAC5B;AAAA,MACAm2B,MAAM;AAAA,QACF7b,UAAU;AAAA,QACVra,MAAM;AAAA,QACNqQ,YAAY;AAAA,UACRtQ,UAAU;AAAA,UACVo2B,QAAQ;AAAA,UACRrgB,SAAS;AAAA,UACTsgB,gBAAgB;AAAA,QAAA;AAAA,MAExB;AAAA,MACAC,cAAc;AAAA,QACVhc,UAAU;AAAA,QACVra,MAAM;AAAA,QACNya,YAAY;AAAA,UACR6b,UAAU;AAAA,YACNjc,UAAU;AAAA,YACVra,MAAM;AAAA,YACNqQ,YAAY;AAAA,cAAEtQ,UAAU;AAAA,YAAA;AAAA,UAC5B;AAAA,UACAw2B,SAAS;AAAA,YACLlc,UAAU;AAAA,YACVra,MAAM;AAAA,UACV;AAAA,UACAw2B,kBAAkB;AAAA,YACdnc,UAAU;AAAA,YACVra,MAAM;AAAA,YACNykB,SAAS;AAAA,cACL9L,aAAa;AAAA,cACbH,eAAe,CAAC,SAAS;AAAA,YAAA;AAAA,UAEjC;AAAA,UACAie,gBAAgB;AAAA,YACZpc,UAAU;AAAA,YACVra,MAAM;AAAA,UACV;AAAA,UACA02B,qBAAqB;AAAA,YACjBrc,UAAU;AAAA,YACVra,MAAM;AAAA,YACN6kB,KAAK;AAAA,UAAA;AAAA,QACT;AAAA,MAER;AAAA,MACA+P,SAAS;AAAA,QACLva,UAAU;AAAA,QACVra,MAAM;AAAA,QACN4hB,OAAO;AAAA,UACHnH,YAAY;AAAA,YACRkc,SAAS;AAAA,cACLtc,UAAU;AAAA,cACVra,MAAM;AAAA,cACNya,YAAY;AAAA,gBACR2W,OAAO;AAAA,kBACH/W,UAAU;AAAA,kBACVra,MAAM;AAAA,kBACNqQ,YAAY;AAAA,oBAAEtQ,UAAU;AAAA,kBAAA;AAAA,gBAC5B;AAAA,gBACA60B,SAAS;AAAA,kBACLva,UAAU;AAAA,kBACVra,MAAM;AAAA,kBACN2kB,UAAU;AAAA,gBACd;AAAA,gBACAiS,OAAO;AAAA,kBACHvc,UAAU;AAAA,kBACVra,MAAM;AAAA,kBACNykB,SAAS;AAAA,oBACL9L,aAAa;AAAA,oBACbH,eAAe,CAAC,SAAS;AAAA,kBAAA;AAAA,gBAEjC;AAAA,gBACAqe,MAAM;AAAA,kBACFxc,UAAU;AAAA,kBACVra,MAAM;AAAA,kBACN6kB,KAAK;AAAA,gBAAA;AAAA,cACT;AAAA,YAER;AAAA,YACA+R,OAAO;AAAA,cACHvc,UAAU;AAAA,cACVra,MAAM;AAAA,cACNykB,SAAS;AAAA,gBACL9L,aAAa;AAAA,gBACbH,eAAe,CAAC,SAAS;AAAA,cAAA;AAAA,YAEjC;AAAA,YACAse,QAAQ;AAAA,cACJzc,UAAU;AAAA,cACVra,MAAM;AAAA,cACNsa,IAAI;AAAA,gBACAD,UAAU;AAAA,gBACVI,YAAY;AAAA,kBACR2W,OAAO;AAAA,oBACH/W,UAAU;AAAA,oBACVra,MAAM;AAAA,oBACNqQ,YAAY;AAAA,sBAAEtQ,UAAU;AAAA,oBAAA;AAAA,kBAC5B;AAAA,kBACA62B,OAAO;AAAA,oBACHvc,UAAU;AAAA,oBACVoK,SAAS;AAAA,sBACL9L,aAAa;AAAA,sBACbH,eAAe,CAAC,SAAS;AAAA,oBAAA;AAAA,kBAC7B;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MAER;AAAA,MACAue,SAAS;AAAA,QACL1c,UAAU;AAAA,QACVra,MAAM;AAAA,QACNya,YAAY;AAAA,UACR2W,OAAO;AAAA,YACH/W,UAAU;AAAA,YACVra,MAAM;AAAA,YACNqQ,YAAY;AAAA,cAAEtQ,UAAU;AAAA,YAAA;AAAA,UAC5B;AAAA,UACA60B,SAAS;AAAA,YACLva,UAAU;AAAA,YACVra,MAAM;AAAA,YACN2kB,UAAU;AAAA,UAAA;AAAA,QACd;AAAA,MAER;AAAA,MACAqS,cAAc;AAAA,QACV3c,UAAU;AAAA,QACVra,MAAM;AAAA,QACNya,YAAY;AAAA,UACRwc,YAAY;AAAA,YACR5c,UAAU;AAAA,YACVra,MAAM;AAAA,UACV;AAAA,UACAk3B,kBAAkB;AAAA,YACd7c,UAAU;AAAA,YACVra,MAAM;AAAA,UACV;AAAA,UACAm3B,gBAAgB;AAAA,YACZ9c,UAAU;AAAA,YACVra,MAAM;AAAA,YACNsa,IAAI;AAAA,cACAD,UAAU;AAAA,YAAA;AAAA,UACd;AAAA,QACJ;AAAA,MAER;AAAA,MACA+c,iBAAiB;AAAA,QACb/c,UAAU;AAAA,QACVra,MAAM;AAAA,QACN2kB,UAAU;AAAA,MACd;AAAA,MACA4Q,cAAc;AAAA,QACVlb,UAAU;AAAA,QACVra,MAAM;AAAA,QACNqQ,YAAY;AAAA,UAAEtQ,UAAU;AAAA,QAAA;AAAA,MAC5B;AAAA,MACAs3B,cAAc;AAAA,QACVhd,UAAU;AAAA,QACVra,MAAM;AAAA,QACNw0B,WAAW;AAAA,MACf;AAAA,MACA8C,cAAc;AAAA,QACVjd,UAAU;AAAA,QACVra,MAAM;AAAA,QACNi0B,aAAa;AAAA,QACbjpB,aAAa;AAAA,MAAA;AAAA,IACjB;AAAA,EAER;AC3KO,WAAAusB,4BAAAj3B,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAqC,UAAA;AAAA,MAAAP;AAAAA,MAAAu3B;AAAAA,MAAA50B;AAAAA,MAAA60B;AAAAA,MAAAC;AAAAA,IAAAA,IAAAp3B;AAcxC,UAAA,CAAAq3B,wBAAAC,yBAAA,IAA4Dh0B,MAAAA,cAAc;AAC1E,UAAA,CAAAi0B,yBAAAC,0BAAA,IAA8Dl0B,eAA+B;AAAEhD,QAAAA;AAAAE,QAAAA;AAAAP,QAAAA,EAAAm3B,CAAAA,MAAAA,2BAAAn3B,SAAAN,QAAAM,EAAA,CAAA,MAAAi3B,iBAAA;AACrF52B,WAAAA,MAAA;AAAA,YACF42B,mBAAmBE,yBAAuB;AAC1CE,wCAA8B;AACd33B,0BAAAA,IAAI,EAAC4R,KAAAkmB,CAAA,gBAAA;AAEbC,kBAAAA,sBAA4BD,YAAWlzB,OAAAozB,CAAAA,MAAA,EAAeP,+BAA6Bja,KAAAya,CAAAA,MAAYA,EAACjiB,KAAM,EAACiW,kBAAmB+L,EAAChiB,OAAOiW,YAAAA,CAAc,CAAC;AACjJ4L,uCAA2BE,mBAAmB;AAAA,UACjD,CAAA,EAACplB,cACaglB,0BAAyB,KAAM,CAAC;AAAA,QAAA;AAAA,MAAC;AAExDF,WAAAA,CAAAA,yBAAyBz3B,MAAMu3B,eAAe;AAACj3B,aAAAm3B;AAAAn3B,aAAAN;AAAAM,aAAAi3B;AAAAj3B,aAAAK;AAAAL,aAAAO;AAAAA,IAAAA,OAAA;AAAAF,WAAAL,EAAA,CAAA;AAAAO,WAAAP,EAAA,CAAA;AAAA,IAAA;AAVnDkE,UAAAA,UAAU7D,IAUPE,EAAgD;AAEnD,UAAA;AAAA,MAAAoC;AAAAA,MAAA4kB;AAAAA,QAKIrkB,iBAA4B;AAEhC,UAAA00B,gBAAsB,CAACR,2BAA2BE,2BAAuB,CAAA,IAAMrwB,WAAe;AAAC,QAAA,CAC1F2wB,eAAa;AAAA,aAAA;AAAA,IAAA;AAAAp3B,QAAAA;AAAA,QAAAR,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAQN,WAAAQ,2BAAA,IAAA,OACc,EAAA,WAAA,wCACV,UAAAA,+BAACP,GAAAA,YAAoB,EAAA,SAAA,MAAiB,WAAA,aAAa,UAAA,iBAEnD,CAAA,GACJ;AAAMX,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,SAAAqC,kBAAA;AAELA,WAAAA,mDAAqB+C,GAAkB,MAAA,EAAA,aAAA,cACpC,UAACtD,2BAAA,KAAAnB,GAAA,YAAA,EAAoB,SAAA,WAAW,UAAA;AAAA,QAAA;AAAA,QACDO,2BAAAA,IAA8B,KAA1BmB,EAAAA,UAAAA,iBAAgB5C,KAAM,CAAA;AAAA,MAAA,EAAA,CACzD,EACJ,CAAA;AAAOO,aAAAqC;AAAArC,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGHG,0CAACF,GAAoB,YAAA,EAAA,SAAA,WACF,OAAA,aAAa,UAEhC,qDAAA;AAAaX,aAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,CAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAAs3B,CAAAA,MAAAA,2BAAAt3B,UAAAo3B,wBAAA;AAGRt2B,WAAAs2B,0BAAsB,CAAKE,2BAA4Bp2B,2BAAAA,IAAAuR,GAAAA,kBAAA,EAAuB,MAAA,SAAU;AAAAzS,aAAAs3B;AAAAt3B,cAAAo3B;AAAAp3B,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,EAAAs3B,EAAAA,MAAAA,2BAAAt3B,UAAAk3B,cAAAl3B,EAAA,EAAA,MAAA2C,eAAA;AAExF20B,WAAAA,yBAAuBpwB,KAAA2wB,YAAAzwB,yCACnBhC,GAAAA,MACkB,EAAA,aAAA,eACJ,SAAA,MAAA;AACS,sBAAA,QAAQ4b,eAAU6W,UAAU,CAAC;AAC3Cl1B,sBAAc,MAAMk1B,UAAU;AAC9Bl1B,sBAAc,QAAQk1B,UAAU;AAChCl1B,sBAAc,cAAYc,MAAW;AAC1B,mBAAA;AAAA,MAAA,GAEV,MAAA,SACG,UAAA,WAAA,aACd,CAAO;AACTzD,cAAAs3B;AAAAt3B,cAAAk3B;AAAAl3B,cAAA2C;AAAA3C,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAAc,EAAAA,MAAAA,MAAAd,UAAAe,IAAA;AAtBV,WAAAe,2BAAA,KAAA,OAAgB,EAAA,WAAA,QACZjB,UAAAA;AAAAA,QAAAA;AAAAA,QAIAiB,2BAAAA,KAAA,OAAgB,EAAA,WAAA,4DAEXhB,UAAAA;AAAAA,UAAAA;AAAAA,UAEAC;AAAAA,QAAAA,EAeL,CAAA;AAAA,MAAA,GAEJ;AAAMf,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGFS,0CAACR,GAAoB,YAAA,EAAA,SAAA,WACF,OAAA,aAAa,UAEhC,wBAAA;AAAaX,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAA,QAAAtB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAKaY,2CAACw2B,GAAAA,MAAW,EAAA,MAAA,SAAkB,SAAAzE,2BAAA7lB,MAAmC;AAAAxN,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAA,QAAAvB,EAAAk3B,EAAAA,MAAAA,cAAAl3B,UAAAunB,WAAA;2CAFtF,kBAAsB,OAAA,YACG,UAAA,0DACJ,MAAAjmB,KACG,SAAA,MAAA;AACLimB,kBAAS8L,0BAA2B;AACzB,mBAAA;AAAA,MAAA,GACX;AAAArzB,cAAAk3B;AAAAl3B,cAAAunB;AAAAvnB,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAAAwB,QAAAA;AAAA,QAAAxB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGEc,2CAACs2B,GAAAA,MAAW,EAAA,MAAA,SAAkB,SAAAzC,wBAAA7nB,MAAgC;AAAAxN,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAA,QAAAzB,EAAAk3B,EAAAA,MAAAA,cAAAl3B,UAAAunB,WAAA;2CAFnF,kBAAsB,OAAA,SACG,UAAA,sDACJ,MAAA/lB,KACG,SAAA,MAAA;AACL+lB,kBAAS8N,uBAAwB;AACtB,mBAAA;AAAA,MAAA,GACX;AAAAr1B,cAAAk3B;AAAAl3B,cAAAunB;AAAAvnB,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AAAA0B,QAAAA;AAAA,QAAA1B,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGEgB,2CAACo2B,GAAAA,MAAW,EAAA,MAAA,SAAkB,SAAA5D,uBAAA1mB,MAA+B;AAAAxN,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA,QAAA5B,EAAAk3B,EAAAA,MAAAA,cAAAl3B,UAAAunB,WAAA;2CAFlF,kBAAsB,OAAA,cACG,UAAA,uEACJ,MAAA7lB,KACG,SAAA,MAAA;AACL6lB,kBAAS2M,sBAAuB;AACrB,mBAAA;AAAA,MAAA,GACX;AAAAl0B,cAAAk3B;AAAAl3B,cAAAunB;AAAAvnB,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA,QAAA7B,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGEmB,2CAACi2B,GAAAA,MAAW,EAAA,MAAA,SAAkB,SAAApC,wBAAAloB,MAAgC;AAAAxN,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAA,QAAA/B,EAAAk3B,EAAAA,MAAAA,cAAAl3B,UAAAunB,WAAA;2CAFnF,kBAAsB,OAAA,SACG,UAAA,kEACJ,MAAA1lB,KACG,SAAA,MAAA;AACL0lB,kBAASmO,uBAAwB;AACtB,mBAAA;AAAA,MAAA,GACX;AAAA11B,cAAAk3B;AAAAl3B,cAAAunB;AAAAvnB,cAAA+B;AAAAA,IAAAA,OAAA;AAAAA,YAAA/B,EAAA,EAAA;AAAA,IAAA;AAAAgC,QAAAA;AAAA,QAAAhC,EAAA,EAAA,MAAAuB,OAAAvB,EAAAyB,EAAAA,MAAAA,OAAAzB,EAAA4B,EAAAA,MAAAA,OAAA5B,UAAA+B,KAAA;AAGtB,YAAAD,2BAAA,KAAA,OArCU,EAAA,WAAA,QACZX,UAAAA;AAAAA,QAAAA;AAAAA,QAKAW,2BAAAA,KAAA,OAAgB,EAAA,WAAA,cACZP,UAAAA;AAAAA,UAAAA;AAAAA,UAOAE;AAAAA,UAOAG;AAAAA,UAOAG;AAAAA,QAAAA,EAOJ,CAAA;AAAA,MAAA,GAEJ;AAAM/B,cAAAuB;AAAAvB,cAAAyB;AAAAzB,cAAA4B;AAAA5B,cAAA+B;AAAA/B,cAAAgC;AAAAA,IAAAA,OAAA;AAAAA,YAAAhC,EAAA,EAAA;AAAA,IAAA;AAAAqF,QAAAA;AAAA,QAAArF,EAAAk3B,EAAAA,MAAAA,cAAAl3B,UAAAqC,kBAAA;aAEJA,oBAAoBP,2BAAA,YAElB,EAAA,UAAA;AAAA,QAAAZ,2BAAAA,IAACP,iBAAoB,SAAA,WACF,OAAA,aACI,WAAA,QAAQ,UAE/B,8DAAA,CAAA;AAAA,QAEAO,+BAAC62B,mBAAAA,oBAA8B,cAAAxmB,MAAAsK,oBAA2Bqb,WAAW3lB,MAAMsK,eAAe,EAAC,CAAA;AAAA,MAAA,GAE/F;AAAM7b,cAAAk3B;AAAAl3B,cAAAqC;AAAArC,cAAAqF;AAAAA,IAAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAAsF,QAAAA;AAAAtF,QAAAA,UAAAk3B,YAAA;AAEN5xB,YAAApE,2BAAA,IAAA,OAAA,EAEI,UAACA,+BAAAsR,GAAAA,QAAA,EAAgB,SAAA,QAAiB,SAAA,MAAM0kB,WAAW,GAAc,WAAA,QAAQ,kCAEzE,CAAA,GACJ;AAAMl3B,cAAAk3B;AAAAl3B,cAAAsF;AAAAA,IAAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AAAAuF,QAAAA;AAAA,QAAAvF,EAAAgC,EAAAA,MAAAA,OAAAhC,EAAA,EAAA,MAAAqF,OAAArF,EAAAsF,EAAAA,MAAAA,OAAAtF,EAAA,EAAA,MAAAY,MAAAZ,UAAAgB,IAAA;oDApGE,WAAA,yBACZ,0CAACkE,GAAoB,WAAA,EAAA,UAAA,OAAkB,WAAA,kCAEnC1E,UAAAA;AAAAA,QAAAA;AAAAA,QAOCI;AAAAA,QAMDI;AAAAA,QA4BAgB;AAAAA,QAuCCqD;AAAAA,QAYDC;AAAAA,MAAAA,EAAAA,CASJ,EACJ,CAAA;AAAMtF,cAAAgC;AAAAhC,cAAAqF;AAAArF,cAAAsF;AAAAtF,cAAAY;AAAAZ,cAAAgB;AAAAhB,cAAAuF;AAAAA,IAAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AAzGNuF,WAAAA;AAAAA,EAyGM;AAIP,WAAAyyB,eAAAj4B,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAwB,UAAA;AAAA,MAAA4wB;AAAAA,MAAAoH;AAAAA,MAAAzqB;AAAAA,MAAAkN;AAAAA,IAAAA,IAAA3a;AAU9BM,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAO0BL,WAAAC,GAAAA,IACP,gIACA,iDACA,gIACA,6CACJ;AAACN,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAP,QAAAA,SAAA6wB,OAAA;mDAGe,WAAA,6BAEZ,yCAAClwB,GAAAA,YAAoB,EAAA,SAAA,aACZ,UAAA,MAAA,CACT,EAEJ,CAAA;AAAMX,aAAA6wB;AAAA7wB,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,EAAAwN,CAAAA,MAAAA,QAAAxN,SAAA0a,WAAA1a,EAAA,CAAA,MAAAO,IAAA;AAhBVC,WAACsB,2BAAA,KAAAT,SAAA,EACYqZ,SACE,WAAAra,IAOP,UAAA;AAAA,QAAA;AAAA,QACJE;AAAAA,MAAAA,GAOJ;AAAOP,aAAAwN;AAAAxN,aAAA0a;AAAA1a,aAAAO;AAAAP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAAi4B,CAAAA,MAAAA,YAAAj4B,SAAAQ,IAAA;AAnBXI,0CAACQ,GAAe62B,SAAAA,EAAAA,OAAAA,UACE,SAAA,MACdz3B,UAkBJ,IAAA;AAAUR,aAAAi4B;AAAAj4B,aAAAQ;AAAAR,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AApBVY,WAAAA;AAAAA,EAoBU;AChLX,WAAAs3B,8BAAAn4B,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAuC,UAAA;AAAA,MAAAk4B;AAAAA,MAAAtd;AAAAA,MAAAsB;AAAAA,IAAAA,IAAApc;AAmB1C,UAAA;AAAA,MAAA4C;AAAAA,MAAAI;AAAAA,MAAAL;AAAAA,QAIIQ,iBAA+B;AACnC,UAAA,CAAAuc,kBAAA2Y,mBAAA,IAAgD/0B,MAAAA,SAAAI,MAA8C;AAAEpD,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAA0C,OAAAmZ,iBAAA;AAI7Fxb,WAAAqC,OAAMmZ,kBAAA;AAAA,QAAA,IAAyBnZ,OAAMmZ;AAAAA,MAAAA,IAAuB,CAAA;AAAA,QAAA,CAAA,IAAAnZ,OAAAmZ;AAAA7b,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAF/DovB,UAAAA,4BAAkC5sB,MAAAC,OAE/BpC,EAA4D;AAE/DqO,UAAAA,cAAoB+Q,mBAAmBA,iBAAgBngB,KAAAmE;AACvD,UAAAkW,WAAiB8F,oBAAgBhc;AAAclD,QAAAA;AAAA,QAAAP,EAAA,CAAA,MAAAm4B,gBAAAn4B,EAAA+C,CAAAA,MAAAA,mBAAA/C,EAAA2C,CAAAA,MAAAA,iBAAA3C,SAAA0C,QAAA;AAErBnC,WAAAC,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAlB;AAAAA,UAAAqa,UAAAoM;AAAAA,UAAAF;AAAAA,UAAAtX;AAAAA,QAAAA,IAAA/N;AAOvB,cAAAwd,SAAe1e,KAAKmP,UAAUnP,IAAIiP,SAAS,IAAC9K;AAC5C,cAAAqsB,eAAqB9R,SAAS5P,mBAAmB4P,MAAM,IAACva;AAGxD,cAAAmsB,4BAAAhQ,CAAA,gBAAA;AAAA,cAAA,CACSrR,aAAS;AAAS6gB,mBAAAA,0BAAyBpe,QAAS,EAAE;AAAA,UAAA;AACpDoe,iBAAAA,0BAAyBpe,QAASzC,WAAS,KAAK3K,aAAMlB,QAAQ8L,+BAA+BD,WAAS,CAAC;AAAA,QAAC;AAGnHohB,cAAAA,wBAAAA,CAAAlT,oBAAAsD,gBAAA;AACIX,gBAAAA,sBAA4B5Q,+BAA+BD,WAAS;AAEtD6Q,wBAAAA,qBAAqB3C,yBAAyB;AACnCzL,oCAAAA,QAASzC,eAAa,EAAE,IAAIkO;AAAAA,QAAkB;AAKvEoJ,YAAAA,cAAcA,eAAevmB,IAAE;AAC/BywB,gBAAAA,iBAAuBthB,UAAUoX,YAAYtX,SAAS;AACtDyhB,gBAAAA,uBAA6B5hB,mBAAmB2hB,cAAc;AAE9D9Q,gBAAAA,yBAA+B2Q,0BAA0BrhB,SAAS;AAGlE8pB,gBAAAA,uBAA2BpZ,uBAAsB/X,IAAAoY,CACjCA,MAAAA,MAAMuG,aAAavmB,KAAKggB,CAAC,EAAChb,OAAAgH,OACR;AAClCqkB,gCAAsBlT,sBAAoBlO,SAAS;AAGnD,gBAAA+pB,oBAAA;AAAA,YAAA,GAA+BH,aAAYI;AAAAA,UAAA;AAC3C7oB,iBAAAC,KAAY2oB,iBAAiB,EAAChpB,QAAA8K,CAAA,QAAA;AACtBke,gBAAAA,kBAAkBle,GAAG,MAAMyL,YAAU;AACnBzL,gCAAAA,GAAG,IAAI9a,MAAM;AAAA,YAAA;AAAA,UAAE,CAExC;AACD64B,uBAAYK,kBAAmBF,iBAAiB;AAMlCtI,wBAAAA,sBAAoBvsB,aAAkB;AACpCusB,0BAAAA,sBAAoB,OAAA,KAAc;AAAA,QAAA;AAAC,YAGnDF,cAAY;AACEA,wBAAAA,cAAcnW,iBAAe;AAC3BmW,0BAAAA,cAAY,MAAA,KAAa;AAAA,QAAA;AAAA,MAAC;AAEjD9vB,aAAAm4B;AAAAn4B,aAAA+C;AAAA/C,aAAA2C;AAAA3C,aAAA0C;AAAA1C,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AA1DD,UAAAogB,oBAA0B7f;AA0DxBC,QAAAA;AAAA,QAAAR,EAAA,CAAA,MAAAm4B,aAAAM,cAAAz4B,EAAA,CAAA,MAAA+C,mBAAA/C,EAAA,CAAA,MAAA2C,eAAA;AAC4BnC,kBAAAI,QAAA;AAAO,cAAA;AAAA,UAAAtB,IAAA+mB;AAAAA,UAAAqS;AAAAA,UAAA/e,UAAA2M;AAAAA,UAAA/X,WAAAgT;AAAAA,QAAAA,IAAA3gB;AASjC,cAAA+3B,WAAer5B,OAAKmP,UAAUnP,MAAIiP,WAAS,IAAC9K;AAC5C,cAAAm1B,iBAAqB5a,WAAS5P,mBAAmB4P,QAAM,IAACva;AAGxDqgB,cAAAA,eAAqBqU,aAAYM,WAAAvxB,IAAA2xB,OAAuBj1B,OAAMi1B,MAAAA,GAAGH,SAAS,CAAC;AAC3E,cAAAI,sBAAA;AAAA,UAAA,GACOC,uCAAsBjV,cAAcnK,YAAQqf,mCAAkB;AAAA,UAAChf,UAAA;AAAA,QAAA;AAEpE,YAEE8V,gBAAY;AACW;AACLA,0BAAAA,gBAAcgJ,0BAA0B;AAAA,UAAA;AAI1ChJ,0BAAAA,gBAAY,MAAA,KAAa;AAAA,QAAA;AAAA,MAAC;AAEjD,QAAA,CAAA,IAAAqI,aAAAM;AAAAz4B,aAAA+C;AAAA/C,aAAA2C;AAAA3C,cAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,EAAA;AAAA,IAAA;AA3BD,UAAAi5B,wBAA8Bz4B;AA2B5BI,QAAAA;AAAA,QAAAZ,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAOUE,0CAACD,GAAmB,YAAA,EAAA,SAAA,MAAgB,WAAA,eAAe,UAAqB,yBAAA;AAAaX,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAGpC,UAAAa,KAAA6B,OAAMwX;AAAyBpZ,QAAAA;AAAAd,QAAAA,EAAAi5B,EAAAA,MAAAA,yBAAAj5B,UAAA6a,mBAAA7a,EAAA,EAAA,MAAA2C,eAAA;AACnC7B,WAAAC,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAA4Y,UAAAuf;AAAAA,UAAAxqB,aAAAoR;AAAAA,UAAA4Y,WAAAS;AAAAA,UAAAC;AAAAA,QAAAA,IAAAr4B;AAKC,YACbq4B,YAAU;AACH,iBAAAl4B,2BAAA,IAACP,iBAAW,UAA+B,kCAAA,CAAA;AAAA,QAAA;AAAa,8CAG3D04B,mBACM1f,+BAAAA,EAAAA,UAAAA,YACGjL,aAAU,eACA,uBAAA4qB,CAAAA,eAAAp5B,UAAwCyC,cAAc,cAAc+L,aAAW,SAASxO,OAAK,KAAO,GAC9G,aAAA,MAAA;AACL,cAAA,CAACwO,iBAAW,CAAKiL,YAAQ;AAAA;AAAA,UAAA;AACV,8BAAA;AAAA,YAAA,GACZA;AAAAA,YAAQra,IACPoP;AAAAA,YAAWsL,UAAA;AAAA,UAAA,CAElB;AAAA,QAAC,GAEY,iDAAC,gBAAyBL,EAAAA,UAAO,YACP,iBACS,mBAAA4I,CAAAA,UAAW0W,sBAAqB;AAAA,UAAA,GAC5C1W;AAAAA,UAAKmW,WACRA;AAAAA,QACH,CAAA,GACYhqB,aAAU,eACNmM,iBAAe,EACpE,CAAA;AAAA,MAAA;AACL7a,cAAAi5B;AAAAj5B,cAAA6a;AAAA7a,cAAA2C;AAAA3C,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,EAAAm4B,EAAAA,MAAAA,gBAAAn4B,UAAAa,MAAAb,EAAA,EAAA,MAAAc,IAAA;AArC/BC,WAACe,2BAAAA,KAAAoD,GAAAA,WAAA,EAAoB,UAAA,OAAkB,WAAA,kCAEnCtE,UAAAA;AAAAA,QAAAA;AAAAA,uCAEC24B,mBAAuCpB,0BAAAA,EAAAA,cACS,uBAAAt3B,IACJ,mBAAAC,GAgCjD,CAAA;AAAA,MAAA,GAAA;AAAYd,cAAAm4B;AAAAn4B,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAGF,UAAAgB,KAAAye,qBAAgBhc;AAAcnC,QAAAA;AAAAH,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAQvBS,WAAAA,MAAA;AACTi3B,4BAAmB30B,MAAU;AAAA,MAAC;AAExBnC,YAAAA,MAAA;AACN82B,4BAAmB30B,MAAU;AAAA,MAAC;AACjCzD,cAAAsB;AAAAtB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAG,YAAAtB,EAAA,EAAA;AAAAmB,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAAvB,QAAAA,UAAAmc,sBAAAnc,EAAAogB,EAAAA,MAAAA,qBAAApgB,EAAA2Z,EAAAA,MAAAA,YAAA3Z,EAAA,EAAA,MAAA6a,mBAAA7a,UAAA0O,eAAA1O,EAAA,EAAA,MAAAgB,IAAA;AAdJ,YAAAE,2BAAA,IAAA,sBACS,MAAAF,IACO0N,aACHiL,UACD,SAAA,OACK,cAAA,OACKyG,mBACC,oBAAA,OACAjE,oBACP,aAAAhb,IAGH,UAAAG,KAGU,oBAAA,OACF,kBAAA,OACDuZ,gBAAkB,CAAA;AAAA7a,cAAAmc;AAAAnc,cAAAogB;AAAApgB,cAAA2Z;AAAA3Z,cAAA6a;AAAA7a,cAAA0O;AAAA1O,cAAAgB;AAAAhB,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAAAwB,QAAAA;AAAA,QAAAxB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAEvC,YAAAQ,2BAAA,IAAA,SAAY,OAAA;AAAA,QAAAoM,QAAU;AAAA,MAAA,GAAW;AAAAtN,cAAAwB;AAAAA,IAAAA,OAAA;AAAAA,YAAAxB,EAAA,EAAA;AAAA,IAAA;AAAAyB,QAAAA;AAAA,QAAAzB,EAAAuB,EAAAA,MAAAA,OAAAvB,UAAAe,IAAA;mDA5DrB,EAAA,WAAA,yBACZA,UAAAA;AAAAA,QAAAA;AAAAA,QAwCAQ;AAAAA,QAmBAC;AAAAA,MAAAA,GACJ;AAAMxB,cAAAuB;AAAAvB,cAAAe;AAAAf,cAAAyB;AAAAA,IAAAA,OAAA;AAAAA,YAAAzB,EAAA,EAAA;AAAA,IAAA;AA7DNyB,WAAAA;AAAAA,EA6DM;AAxLP,WAAA6J,QAAAkuB,KAAA;AAAA,WAmEwBla,QAAC7b;AAAAA,EAAc;AA0H9C,WAAAg2B,eAAA15B,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAwB,UAAA;AAAA,MAAA0Z;AAAAA,MAAAyG;AAAAA,MAAA1R;AAAAA,MAAAmM;AAAAA,MAAA1L;AAAAA,IAAAA,IAAApP;AAiBvBM,QAAAA;AAAAL,QAAAA,SAAA2Z,UAAA;AAEmBA,WAAAA,WAAWkO,gBAAWlO,QAAQ,IAAQ;AAAA3Z,aAAA2Z;AAAA3Z,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAtD,UAAA05B,UAAgBr5B;AAAuCE,QAAAA;AAAA,QAAAP,EAAA2Z,CAAAA,MAAAA,YAAA3Z,SAAA6a,iBAAA;AACxCta,WAAAoZ,WAAWoB,KAAAA,eAAepB,UAAUkB,eAAe,IAAQ;AAAA7a,aAAA2Z;AAAA3Z,aAAA6a;AAAA7a,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAA1E,UAAAqgB,SAAe9f;AAEf,UAAA,CAAAknB,YAAAC,aAAA,IAAoCrkB,MAAAA,cAAc;AAE3B7C,UAAAA,KAAAmZ,YAAY0G,SAAS,GAAGA,QAAM5gB,IAAA,MAAYka,SAAQG,QAAA,KAAWrW;AAC9D7C,UAAAA,KAAA6mB,aAAU,QAAAhkB;AAQjB,UAAA5C,MAACwf;AAED,UAAAvf,KAAA44B,WAAW;AAAE34B,QAAAA;AAAAf,QAAAA,SAAAqgB,QAAA;AAGPtf,WAAAb,CAAA,UAAA;AAAA,YAAA,CACJmgB,QAAM;AAAA,iBAAA;AAAA,QAAA;AACJ,eAAAnf,2BAAA,IAACga,KAAoCmF,qBAAAA,EAAAA,gBAAAA,OAAS,CAAA;AAAA,MAAA;AACxDrgB,aAAAqgB;AAAArgB,aAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,CAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAA,CAAA,MAAAogB,qBAAApgB,EAAA2Z,CAAAA,MAAAA,YAAA3Z,EAAA6a,CAAAA,MAAAA,mBAAA7a,UAAA0O,aAAA;AACc1N,WAAAqnB,CAAA,wBAAA;AACX,cAAAsR,cAAoB9V,yBAAyBlK,UAAU0O,qBAAqBxN,eAAe;AAAC,YAAA,CACvFnM,aAAW;AAAA;AAAA,QAAA;AACC,0BAAA;AAAA,UAAApP,IACToP;AAAAA,UAAWiL,UACLggB;AAAAA,UAAW9T,YACTnX;AAAAA,UAAWH,WAAA9K;AAAAA,QAAAA,CAE1B;AAAA,MAAC;AACLzD,aAAAogB;AAAApgB,aAAA2Z;AAAA3Z,aAAA6a;AAAA7a,cAAA0O;AAAA1O,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACAS,WAAAuO,OAAAwJ,QAAA0L,eAA8B,EAAC1d,IAAAiE,QAO/B;AAACnL,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAAtB,QAAAA,UAAAmP,YAAAnP,EAAAynB,EAAAA,MAAAA,cAAAznB,EAAAa,EAAAA,MAAAA,MAAAb,EAAA,EAAA,MAAAc,MAAAd,UAAAe,MAAAf,EAAA,EAAA,MAAAgB,IAAA;AAjCL,YAAAE,2BAAA,IAAAmK,GACSoc,QAAAA,EAAAA,MAAS,YACDC,cAAY,eACf,WAAG,MACR,MAAA,SACK,WAAA,UACDvY,UACH,OAAAtO,IACI,WAAA,MACJ,OAAAC,IACM,aAAA,4BACH,UAAA,gBACG,aAAAC,IAIE,eAAAC,IAUdG,UASL,IAAA;AAASnB,cAAAmP;AAAAnP,cAAAynB;AAAAznB,cAAAa;AAAAb,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAhB,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAAvB,QAAAA,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAQ,MAAAR,EAAA,EAAA,MAAAY,IAAA;AArCNW,2CAACH,GAAe,SAAA,EAAA,OAAAZ,IACD,MAAAI,IAClBU,UAoCJ,KAAA;AAAUtB,cAAAsB;AAAAtB,cAAAQ;AAAAR,cAAAY;AAAAZ,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAtCHuB,WAAAA;AAAAA,EAsCG;AA9Dd,WAAA4J,SAAApL,IAAA;AAoDkD,UAAA,CAAAqa,KAAAwf,QAAA,IAAA75B;AAC3B,WAAAmB,2BAAA,IAAC,oBAEGkZ,EAAAA,OAAAA,KACS,gBAAI,OACJiG,gBAAAA,UACN,UAAI,MAAA,GAJP,GAIW;AAAA,EAAA;AAc/B,WAAAwZ,mBAAA95B,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA4B,UAAA;AAAA,MAAAC;AAAAA,MAAA45B;AAAAA,MAAA9e;AAAAA,MAAAjD;AAAAA,IAAAA,IAAAhY;AAOnBM,UAAAA,KAAAy5B,iBAAiB,WAAW;AAAEv5B,QAAAA;AAAAP,QAAAA,SAAAK,IAAA;AAFvBC,WAAAA,GAAAA,IACP,qDACAD,EAA8B;AAACL,aAAAK;AAAAL,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,SAAAgb,gBAAA;AACnCxa,0CAEM,OAFU,EAAA,WAAA,QACZ,UAACU,2BAAAA,IAAAga,KAAA,qBAAA,EAAoCF,gBAAc,EACvD,CAAA;AAAMhb,aAAAgb;AAAAhb,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAAgb,eAAAvb,MAAA;AAEF,WAAAyB,2BAAA,IAAA,OAAM8Z,EAAAA,UAAAA,eAAcvb,MAAM;AAAM,QAAA,CAAA,IAAAub,eAAAvb;AAAAO,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAI3B,UAAAa,KAAAkX,YAAY+hB,iBAAiB,+DAA+D9e,eAAcvQ;AAAY3J,QAAAA;AAAAd,QAAAA,SAAAa,IAAA;AAH3H,WAAAK,2BAAA,IAACP,iBAAoB,SAAA,WACF,OAAA,YACI,WAAA,YAClBE,UACL,GAAA,CAAA;AAAab,aAAAa;AAAAb,aAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAAe,QAAAA;AAAA,QAAAf,EAAAY,CAAAA,MAAAA,MAAAZ,SAAAc,IAAA;AANjBC,2CAAA,OACIH,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,MAAAA,GAKJ;AAAMd,aAAAY;AAAAZ,aAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAAhB,QAAAA,EAAAO,EAAAA,MAAAA,MAAAP,UAAAQ,MAAAR,EAAA,EAAA,MAAAe,IAAA;AACJ,WAAAe,2BAAA,KAAA,OAdS,EAAA,WAAAvB,IAGXC,UAAAA;AAAAA,QAAAA;AAAAA,QAGAO;AAAAA,MAAAA,GAQJ;AAAMf,cAAAO;AAAAP,cAAAQ;AAAAR,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAAnB,QAAAA,EAAA85B,EAAAA,MAAAA,kBAAA95B,UAAAgB,MAAAhB,EAAA,EAAA,MAAAE,OAAA;AAlBHiB,0CAAC4K,eAAkB7L,EAAAA,OACG45B,UAAAA,gBACC,WAAA,8BAC1B94B,UAgBJ,GAAA,CAAA;AAAahB,cAAA85B;AAAA95B,cAAAgB;AAAAhB,cAAAE;AAAAF,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAnBNmB,WAAAA;AAAAA,EAmBM;AChSV,WAAA44B,kCAAAh6B,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA2C,UAAA;AAAA,MAAAk4B;AAAAA,MAAAje;AAAAA,MAAA2B;AAAAA,IAAAA,IAAA9b;AAU9C,UAAAi6B,iBAAuBC,KAAAA,kBAAkB;AACzC,UAAA,CAAAC,SAAAC,UAAA,IAA8B92B,MAAAA,cAAuB;AAAEhD,QAAAA;AAAAL,QAAAA,EAAAg6B,CAAAA,MAAAA,kBAAAh6B,SAAAm4B,gBAAAn4B,EAAA,CAAA,MAAAka,YAAA;AAEvD7Z,0BAAA+5B,gBAAA;AAEI,cAAAC,aAAmBlC,aAAYM,WAAAvxB,IAAA2xB,CAAAA,MAAqByB,uCAAoBN,gBAAgBnB,GAAGV,aAAYoC,UAAWpC,aAAYI,gBAAiBre,YAAY,aAAaie,aAAYqC,aAAc,CAAC;AACnMrC,qBAAYsC,YAAaJ,UAAU;AAAA,MAAC;AACvCr6B,aAAAg6B;AAAAh6B,aAAAm4B;AAAAn4B,aAAAka;AAAAla,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAJD,UAAAo6B,eAAA/5B;AAICE,QAAAA;AAAAP,QAAAA,SAAAo6B,cAAA;AAES75B,WAAAA,MAAA;AACN65B,qBAAc/nB,EAAAA,cAAe8nB,WAAU,KAAM,CAAC;AAAA,MAAC;AAClDn6B,aAAAo6B;AAAAp6B,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAAEF,WAAA,CAAA;AAAER,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAFLkE,UAAAA,UAAU3D,IAEPC,EAAE;AAEL,UAAAk6B,sBAA4BC,KAAAA,uBAAuB;AAAE,QACjDT,SAAO;AAAAt5B,UAAAA;AAAA,UAAAZ,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACAE,6CAACg6B,KAAwB,wBAAA,EAAA;AAAA56B,eAAAY;AAAAA,MAAAA,OAAA;AAAAA,cAAAZ,EAAA,CAAA;AAAA,MAAA;AAAzBY,aAAAA;AAAAA,IAAAA;AAAyBA,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGzBE,2CAAA,OACH,EAAA,UAAA;AAAA,QAACM,2BAAA,IAAAP,GAAA,YAAA,EAAoB,SAAA,aAAa,UAAqB,yBAAA;AAAA,QACtDO,2BAAA,IAAAP,GAAA,YAAA,EAAoB,SAAA,WAAW,UAA6C,gDAAA,CAAA;AAAA,MAAA,GACjF;AAAMX,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAA,CAAA,MAAAm4B,aAAA0C,UAAA;AACW,WAAA;AAAA,QAAAtpB,MACP4mB,aAAY0C;AAAAA,QAAAC,aAAA;AAAA,QAAAC,cAAA;AAAA,MAAA;AAGrB,QAAA,CAAA,IAAA5C,aAAA0C;AAAA76B,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACsC,WAAAQ,2BAAAA,IAAA,OAAT,EAAA,WAAA,OAAS,CAAA;AAAAlB,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,UAAA6b,iBAAA;AAInBA,WAAAA,gBAAe3U,IAAAoE,OAGjC;AAACtL,cAAA6b;AAAA7b,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAA,EAAA,MAAAka,cAAAla,EAAA06B,EAAAA,MAAAA,uBAAA16B,EAAAa,EAAAA,MAAAA,MAAAb,UAAAe,IAAA;AAjBAC,0CAACg6B,KACG,uBAAA,EAAA,OAAAp6B,IAIU,iBAAAC,IAKH,cAAAC,IACF,YAAI,OACN,UAAI,OACO45B,qBACD,oBAAA35B,IAIJ,gBAAA,cACJmZ,YACK,iBAAI,OAAI;AAAAla,cAAAka;AAAAla,cAAA06B;AAAA16B,cAAAa;AAAAb,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AApBtBgB,WAAAA;AAAAA,EAoBsB;AA/C1B,WAAAsK,QAAAgU,GAAA;AAAA,WAAA;AAAA,MAAAlF,KA0CUkF;AAAAA,MAACnQ,UAAA;AAAA,IAAA;AAAA,EAAA;AClDF8rB,WAAAA,0BAA0B/gB,YAAwBghB,aAAa,IAI7E;AAEQ9e,UAAAA,SAAS1M,OAAOC,KAAKuK,UAAU,EAAEI,OAAO,CAACmV,KAAKrV,QAAQ;AAClDT,YAAAA,WAAWO,WAAWE,GAAG;AACzBub,YAAAA,OAAOwF,aAAQ/gB,GAAG;AACxB,YAAMghB,WAAWF,aAAa,GAAGA,UAAU,IAAIvF,IAAI,KAAKA;AAExD,UAAIhc,SAASG,aAAa,SAASH,SAASO,YAAY;AACpD,cAAMmhB,kBAAkBJ,0BAA0BthB,SAASO,YAA0BkhB,QAAQ;AACtF,eAAA;AAAA,UACH7C,gBAAgB;AAAA,YAAE,GAAG9I,IAAI8I;AAAAA,YAAgB,CAACne,GAAG,GAAGghB;AAAAA,UAAS;AAAA,UACzDlhB,YAAY;AAAA,YACR,GAAGuV,IAAIvV;AAAAA,YACP,CAACyb,IAAI,GAAG;AAAA,cACJ,GAAGhc;AAAAA,cACHO,YAAYmhB,gBAAgBnhB;AAAAA,cAC5B2B,iBAAiBnM,OAAOC,KAAK0rB,gBAAgBnhB,UAAU;AAAA,YAAA;AAAA,UAC3D;AAAA,QAER;AAAA,MAAA;AAGJ,YAAMsV,oBAAoB;AAAA,QACtB,GAAGC,IAAIvV;AAAAA,QACP,CAACyb,IAAI,GAAGhc;AAAAA,MACZ;AAEA,YAAM4e,iBAAiB;AAAA,QAAE,GAAG9I,IAAI8I;AAAAA,QAAgB,CAACne,GAAG,GAAGghB;AAAAA,MAAS;AAEzD,aAAA;AAAA,QACH7C;AAAAA,QACAre,YAAYsV;AAAAA,MAChB;AAAA,IAAA,GACD;AAAA,MAAE+I,gBAAgB,CAAC;AAAA,MAAGre,YAAY,CAAA;AAAA,IAAC,CAAG;AAEzC,UAAMohB,WAAW5rB,OAAOC,KAAKyM,OAAOmc,cAAc,IAAI,CAAC;AACnDgC,QAAAA;AACJ,QAAIe,UAAU92B,SAAS,IAAI,KAAK82B,UAAU92B,SAAS,KAAK,GAAG;AAC5C82B,iBAAAA;AAAAA,IAAAA;AAGR,WAAA;AAAA,MACH,GAAGlf;AAAAA,MACHme;AAAAA,IACJ;AAAA,EACJ;ACoCO,WAAAgB,uBAAAhZ,OAAA;AAAAviB,UAAAA,IAAAC,uBAAA,EAAA;AAEH,UAAA+T,OAAauO,MAAKvO;AAElB,UAAAwnB,CAAAA,WAAAC,YAAA,IAAkCj5B,iBAAAa,cAA6B;AAC/D,UAAAq4B,CAAAA,0BAAAC,2BAAA,IAAgEn5B,iBAAAa,cAA6B;AAAEtD,QAAAA;AAAA,QAAAC,EAAAw7B,CAAAA,MAAAA,aAAAx7B,SAAAuiB,OAAA;AAE1ExiB,WAAAA,MAAA;AAAA,YAAA,CACZy7B,WAAS;AACVjZ,gBAAKqZ,YAAAn4B,MAAsB;AAAA,QAAA,OAAC;AAE5Bk4B,0CAAgC;AAAA,QAAA;AAAA,MAAC;AAExC37B,aAAAw7B;AAAAx7B,aAAAuiB;AAAAviB,aAAAD;AAAAA,IAAAA,OAAA;AAAAA,WAAAC,EAAA,CAAA;AAAA,IAAA;AAND,UAAA4wB,eAAqB7wB;AAMnBM,QAAAA;AAAAE,QAAAA;AAAAP,QAAAA,SAAAgU,MAAA;AAEQ3T,WAAAA,MAAA;AAAA,YAAA,CACD2T,MAAI;AACLynB,4BAAkB;AAClBE,2CAAiC;AAAA,QAAA;AAAA,MAAC;AAEvCp7B,YAACyT,IAAI;AAAChU,aAAAgU;AAAAhU,aAAAK;AAAAL,aAAAO;AAAAA,IAAAA,OAAA;AAAAF,WAAAL,EAAA,CAAA;AAAAO,WAAAP,EAAA,CAAA;AAAA,IAAA;AALTkE,UAAAA,UAAU7D,IAKPE,EAAM;AAACC,QAAAA;AAAAR,QAAAA,SAAA4wB,cAAA;AASYpwB,WAAA2T,CAAU,WAAA,CAACH,SAAO4c,aAAcntB,IAAAA;AAAYzD,aAAA4wB;AAAA5wB,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAE1DE,WAACM,2BAAA,IAAAkT,gBAAA,EAAY,QAAK,MAAE,UAAiB,qBAAA;AAAcpU,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,EAAA4wB,CAAAA,MAAAA,gBAAA5wB,UAAAgU,QAAAhU,EAAA,EAAA,MAAAuiB,OAAA;AAClD1hB,WAAAmT,QAAS9S,2BAAAA,IAAA,kBAAA,KAAqBqhB,OACUqO,cACA6K,cAAe;AAAAz7B,aAAA4wB;AAAA5wB,cAAAgU;AAAAhU,cAAAuiB;AAAAviB,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,UAAAuiB,OAAA;AAI1CzhB,WAAAA,MAAMyhB,MAAKqZ,YAAAn4B,MAAsB;AAACzD,cAAAuiB;AAAAviB,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAA,QAAAf,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAC9BK,WAAAA,MAAM46B,iCAAiC;AAAC37B,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAAc,EAAAA,MAAAA,MAAAd,UAAA07B,0BAAA;AAH1D,WAAAx6B,2BAAA,IAAC,wBACSw6B,MAAuB,0BACnB,UAAA56B,IACI,cAAAC,IACR,MAAA,+CAAiD,CAAA;AAAAf,cAAAc;AAAAd,cAAA07B;AAAA17B,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAgU,QAAAhU,EAAAQ,EAAAA,MAAAA,MAAAR,EAAAa,EAAAA,MAAAA,MAAAb,UAAAgB,IAAA;AAjB/DG,WAACW,2BAAA,KAAA8L,GAAA,QAAA,EACSoG,MACK,iBACC,YAAA,MACA,YAAI,OACN,UAAA,OACI,cAAAxT,IAEdI,UAAAA;AAAAA,QAAAA;AAAAA,QACCC;AAAAA,QAIDG;AAAAA,MAAAA,GAMJ;AAAShB,cAAAgU;AAAAhU,cAAAQ;AAAAR,cAAAa;AAAAb,cAAAgB;AAAAhB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAnBTmB,WAAAA;AAAAA,EAmBS;AAcV,WAAS06B,iBAAiBtZ,OAG9B;AACO,UAAA;AAAA,MAAE1H;AAAAA,QAAoBC,gCAA2B;AACvD,UAAMmH,aAAaC,KAAAA,wBAAwB;AAC3C,UAAM8X,iBAAiBC,KAAAA,kBAAkB;AAEnC,UAAA;AAAA,MACF6B;AAAAA,MACAtZ;AAAAA,IAAAA,IACAP;AAEJ,UAAM8Z,oBAAoBxZ,MAAM3S;AAC1BosB,UAAAA,mBAAmB,CAACD,mBAAmBr8B,SAAS6iB,MAAM6O,uBAAuB,IAAInqB,WAAW;AAClG,UAAMg1B,0BAA0B1Z,MAAMlgB,mBAAmBkgB,MAAMlgB,iBAAiB0rB,iBAAiBvL,gBAAgB,CAAE;AAC7G0Z,UAAAA,gBAAgBD,uBAAuB/0B,IAAI+b,CAAAA,QAAOA,IAAIvjB,KAAKgW,OAAOiW,aAAa;AACrF,UAAMwQ,cAAcF,uBAAuB/0B,IAAI+b,CAAAA,UAAOA,MAAI3jB,IAAIoW,KAAK,EAAEiW,YAAY,CAAC,EAAErnB,OAAOqB,OAAO;AAClG,UAAM,CAACgd,YAAYyZ,aAAa,IAAI55B,iBAAMa,SAA+C;AACzF,UAAM,CAACg5B,yBAAyBC,0BAA0B,IAAI95B,iBAAMa,SAAS,KAAK;AAElFa,UAAAA,UAAU,MAAM;AACR,UAAA;AACA,YAAI+d,WAAWsa,aAAa;AACxB,cAAIha,MAAMkQ,oBAAoB;AACZxQ,0BAAAA,WAAWua,uBAAuB,CAAC,GAAIja,MAAM6O,uBAAuB,IAAK7O,MAAMkQ,kBAAkB,CAAC,CAAC;AAAA,UAAA,OAC9G;AACH2J,0BAAc34B,MAAS;AAAA,UAAA;AAE3B64B,qCAA2B,IAAI;AAAA,QAAA;AAAA,eAE9B92B,GAAG;AACRqN,gBAAQC,MAAMtN,CAAC;AAAA,MAAA;AAAA,IACnB,GACD,CAAC+c,MAAMkQ,oBAAoBlQ,MAAM6O,qBAAqBnP,WAAWsa,aAAata,WAAWua,sBAAsB,CAAC;AAEnH,QAAI,CAACV,oBAAoB;AACrB,YAAMpwB,MAAM,qDAAqD;AAAA,IAAA;AAG/D,UAAA;AAAA,MACFtJ;AAAAA,IAAAA,IACqB05B;AAEzB,UAAMW,oBAAoB9Z,aACpB;AAAA,MACE,GAAGA;AAAAA,MACHrjB,IAAIqjB,WAAWrjB,MAAMqjB,WAAWjjB,QAAQg9B,kBAAa,EAAE;AAAA,IAAA,IAEzDj5B;AAEN,UAAMmM,gBAA0C6sB,oBAC1CE,qBAAqBF,mBAAmB5hB,eAAe,IACvD;AAAA,MACEvb,IAAIy8B,mBAAmBr8B,QAAQg9B,KAAAA,aAAa,EAAE;AAAA,MAC9Ch9B,MAAMq8B,mBAAmBr8B,QAAQ;AAAA,MACjCD,MAAMs8B,mBAAmBt8B,QAAQ;AAAA,MACjC8E,OAAOw3B,mBAAmBx3B,SAAS;AAAA,MACnC2V,YAAY,CAAC;AAAA,MACb2B,iBAAiB,CAAE;AAAA,MACnBrO,MAAMovB,GAAAA,aAAaC,KAAKC,MAAMD,KAAKE,OAAO,IAAIH,gBAAa31B,MAAM,CAAC;AAAA,MAClEqpB,SAAS0J,eAAegD,MAAMC,OAAO;AAAA,IACzC;AAEJ,QAAI,CAACZ,yBAAyB;AAC1B,4CAAQzB,KAAwB,wBAAA,EAAA;AAAA,IAAA;AAGpC,QAAI,CAACrY,MAAMrgB,oBAAoB,CAAC+f,WAAWsa,eAAe,CAACF,0BAA0B;AACjF,4CAAQzB,KAAwB,wBAAA,EAAA;AAAA,IAAA;AAG7B,WAAA15B,2BAAA,IAAC,0BACAqhB,EAAAA,GAAAA,OACJ,eACA,eACA,aACA,kBACA,YACA,eACA,QACA,gBAAmC,CAAA;AAAA,EAE3C;AAEA,WAAS2a,yBAAwD;AAAA,IACIh7B;AAAAA,IACAgvB;AAAAA,IACAuB;AAAAA,IACArB;AAAAA,IACA+L;AAAAA,IACAhM;AAAAA,IACAyK;AAAAA,IACAz5B;AAAAA,IACAi7B;AAAAA,IACAxM;AAAAA,IACA6K;AAAAA,IACAxE;AAAAA,IACA5I;AAAAA,IACAhsB;AAAAA,IACAgN;AAAAA,IACA6sB;AAAAA,IACAC;AAAAA,IACAH;AAAAA,IACArZ;AAAAA,IACAyZ;AAAAA,IACAxsB;AAAAA,IACAiL;AAAAA,IACAzY;AAAAA,IACAi7B;AAAAA,EAYJ,GAC/D;AAEE,UAAMlF,eAAemF,mBAAAA,gBAAgB;AACrC,UAAMrb,aAAaC,KAAAA,wBAAwB;AAC3C,UAAMiK,qBAAqBnV,KAAAA,sBAAsB;AAG3CiX,UAAAA,oBAAoBxrB,MAAO,OAAA,EAAE;AAEnC,UAAM86B,cAAcr7B,kBAAmB85B,mBAAmB,YAAY,YAAa;AACnF,UAAM,CAACwB,aAAaC,cAAc,IAAIp6B,MAAAA,SAAqBk6B,WAAW;AAEtE,UAAM,CAACzqB,OAAO4qB,QAAQ,IAAIl7B,iBAAMa,SAA4B;AAEtDs6B,UAAAA,iBAAiBA,CAAC1K,sBAAgE;AAC9E3zB,YAAAA,KAAK2zB,kBAAkB3zB,MAAM2zB,kBAAkBvzB;AAErD,aAAOwxB,iBAAiByM,eAAe;AAAA,QACnCr+B;AAAAA,QACAs+B,gBAAgB3K;AAAAA,QAChBpN,YAAY4M;AAAAA,QACZrB;AAAAA,MAAAA,CACH,EACI9f,KAAK,MAAM;AACRosB,iBAASj6B,MAAS;AACX,eAAA;AAAA,MAAA,CACV,EACA2O,MAAO5M,CAAM,MAAA;AACVk4B,iBAASl4B,CAAC;AACVqN,gBAAQC,MAAMtN,CAAC;AACf2mB,2BAAmBnY,KAAK;AAAA,UACpBsD,MAAM;AAAA,UACNC,SAAS,mCAAmC/R,EAAE+R,WAAW;AAAA,QAAA,CAC5D;AACM,eAAA;AAAA,MAAA,CACV;AAAA,IACT;AAEA,UAAMsmB,cAAcA,MAAM;AACtB,UAAIL,gBAAgB,WAAW;AAC3B,YAAIrF,aAAa2F,OAAO;AACpBL,yBAAe,oBAAoB;AAAA,mBAC5BL,WAAW;AAClBK,yBAAe,YAAY;AAAA,QAAA,OACxB;AACHA,yBAAe,YAAY;AAAA,QAAA;AAAA,MAC/B,WACOD,gBAAgB,WAAW;AAClCC,uBAAe,SAAS;AAAA,MAAA,WACjBD,gBAAgB,uBAAuB;AAC9CC,uBAAe,qBAAqB;AAAA,MAAA,WAC7BD,gBAAgB,uBAAuB;AAC9CC,uBAAe,SAAS;AAAA,MAAA,WACjBD,gBAAgB,cAAc;AACrCC,uBAAe,YAAY;AAAA,MAAA,OACxB;AACHA,uBAAe,SAAS;AAAA,MAAA;AAAA,IAGhC;AAEMnP,UAAAA,wBAAwBA,CAAC3L,iBAAyC;AAChE,UAAA,CAACwO,oBAA4B1tB,QAAAA;AAC1B0tB,aAAAA,sBAAsBxO,aAAWjjB,MAAMijB,aAAWtW,mBAAmB,OAAO0xB,eAAe,EAAE;AAAA,IACxG;AAEMC,UAAAA,0BAA0B,OAAO1O,kBAA0C;AAEzE,UAAA;AACA,YAAI,CAAChB,uBAAuB;AACxB8N,wBAAc9M,aAAa;AACpB2O,iBAAAA,QAAQC,QAAQ5O,aAAa;AAAA,QAAA;AAGxCmO,uBAAe,SAAS;AAElBU,cAAAA,qBAAqB,MAAM7P,wBAAwBgB,aAAa;AAEtE,YAAI,CAAC6O,oBAAoB;AACrB/B,wBAAc9M,aAAa;AACpB2O,iBAAAA,QAAQC,QAAQ5O,aAAa;AAAA,QAAA;AAExC,cAAM5sB,SAAS;AAAA,UACX,GAAI4sB,iBAAiB,CAAA;AAAA,QACzB;AAEI5f,YAAAA,OAAOC,KAAKwuB,mBAAmBjkB,cAAc,EAAE,EAAEjT,SAAS,GAAG;AAC7DvE,iBAAOwX,aAAaikB,mBAAmBjkB;AACvCxX,iBAAOmZ,kBAAkBsiB,mBAAmBtiB;AAAAA,QAAAA;AAG5C,YAAA,CAACnZ,OAAOmZ,iBAAiB;AACzBnZ,iBAAOmZ,kBAAkBnM,OAAOC,KAAKjN,OAAOwX,UAAU;AAC/CxX,iBAAAA;AAAAA,QAAAA;AAGX05B,sBAAc15B,MAAM;AACpBmQ,gBAAQuT,MAAM,uBAAuB;AAAA,UACjCkJ,eAAeA,iBAAiB,CAAC;AAAA,UACjC5sB;AAAAA,QAAAA,CACH;AACMA,eAAAA;AAAAA,eACF8C,KAAQ;AACbqN,gBAAQC,MAAMtN,GAAC;AACf2mB,2BAAmBnY,KAAK;AAAA,UACpBsD,MAAM;AAAA,UACNC,SAAS,kCAAkC/R,IAAE+R,WAAW;AAAA,QAAA,CAC3D;AACM+X,eAAAA;AAAAA,MAAAA;AAAAA,IAEf;AAEMzI,UAAAA,WAAWA,CAACuX,oBAA4CtX,qBAA+D;AACjHV,cAAAA,MAAM,yBAAyBgY,kBAAkB;AACrD,UAAA;AAEA,YAAI,CAACl8B,iBAAiB;AACHk8B,yBAAAA,kBAAkB,EAAE9sB,KAAK,MAAM;AAC1CwV,6BAAiBP,UAAU;AAC3BqV,wBAAYwC,kBAAkB;AAAA,UAAA,CACjC;AACD;AAAA,QAAA;AAGJ,YAAIZ,gBAAgB,WAAW;AACf,sBAAA;AACZ1W,2BAAiBP,UAAU;AAAA,YAAE7jB,QAAQ07B;AAAAA,UAAAA,CAAoB;AAAA,QAAA,WAClDZ,gBAAgB,WAAW;AAC9BJ,cAAAA,aAAajF,aAAa2F,OAAO;AACjChX,6BAAiBP,UAAU;AAAA,cAAE7jB,QAAQ07B;AAAAA,YAAAA,CAAoB;AAC7C,wBAAA;AAAA,qBACLl8B,iBAAiB;AACAk8B,oCAAAA,kBAAkB,EACrC9sB,KAAM5O,CAAW,aAAA;AACdokB,+BAAiBP,UAAU;AAAA,gBACvB7jB,QAAQA,YAAU07B;AAAAA,gBAClBv7B,SAAS;AAAA,kBACLnD,MAAM;AAAA,kBACND,MAAM;AAAA,gBAAA;AAAA,cACV,CACH;AAAA,YAAA,CACJ,EAAE4S,QAAQ,MAAM;AACL,0BAAA;AAAA,YAAA,CACf;AAAA,UAAA,OACE;AACHyU,6BAAiBP,UAAU;AAAA,cAAE7jB,QAAQ07B;AAAAA,YAAAA,CAAoB;AAC7C,wBAAA;AAAA,UAAA;AAAA,QAChB,WACOZ,gBAAgB,cAAc;AACzB,sBAAA;AACZ1W,2BAAiBP,UAAU;AAAA,YAAE7jB,QAAQ07B;AAAAA,UAAAA,CAAoB;AAAA,QAAA,WAClDZ,gBAAgB,uBAAuB;AAClC,sBAAA;AAAA,QAAA,WACLA,gBAAgB,uBAAuB;AAClC,sBAAA;AAAA,QAAA,WACLA,gBAAgB,cAAc;AACtBY,yBAAAA,kBAAkB,EAAE9sB,KAAK,MAAM;AAC1CwV,6BAAiBP,UAAU;AAAA,cAAE7jB,QAAQkN;AAAAA,YAAAA,CAAe;AACxC,wBAAA;AACZgsB,wBAAYwC,kBAAkB;AAAA,UAAA,CACjC;AAAA,QAAA,OACE;AACS,sBAAA;AACZtX,2BAAiBP,UAAU;AAAA,YAAE7jB,QAAQ07B;AAAAA,UAAAA,CAAoB;AAAA,QAAA;AAAA,eAExD54B,KAAQ;AACb2mB,2BAAmBnY,KAAK;AAAA,UACpBsD,MAAM;AAAA,UACNC,SAAS,mCAAmC/R,IAAE+R,WAAW;AAAA,QAAA,CAC5D;AACD1E,gBAAQC,MAAMtN,GAAC;AACfshB,yBAAiBP,UAAU;AAAA,UAAE7jB,QAAQ07B;AAAAA,QAAAA,CAAoB;AAAA,MAAA;AAAA,IAEjE;AAEMtuB,UAAAA,aAAaA,CAACmT,QAA6B;AAE7C,UAAIngB,SAA8B,CAAC;AACnC,YAAMu7B,UAAUb,gBAAgB,gBAAgBA,gBAAgB,oBAAoBA,gBAAgB,cAAct+B;AAClH,UAAIm/B,QAAQ;AACJ,YAAA;AACAA,iBAAOC,aAAarb,KAAK;AAAA,YAAEsb,YAAY;AAAA,UAAA,CAAO;AAAA,iBACzC/4B,KAAQ;AACXg5B,cAAAA,MAAMlvB,QAAQ,CAACmvB,QAAa;AACnBA,mBAAAA,IAAI/+B,IAAI,IAAI++B,IAAIlnB;AAAAA,UAAAA,CAC1B;AAAA,QAAA;AAAA,MACL;AAEJ,UAAIimB,gBAAgB,cAAc;AACrB,iBAAA;AAAA,UAAE,GAAG16B;AAAAA,UAAQ,GAAGmrB,kBAAkBjd;AAAAA,QAAQ;AAAA,MAAA;AAEvD,UAAIwsB,gBAAgB,WAAW;AAC3B,cAAMnb,YAAYqc,aAAazb,IAAIvjB,MAAMwC,iBAAiBg6B,eAAejZ,IAAI3jB,EAAE;AAC/E,YAAI+iB,WAAW;AACXvf,iBAAOpD,OAAO2iB;AAAAA,QAAAA;AAElB,cAAMnO,UAAUuS,WAAWxD,IAAI3jB,IAAI4C,iBAAiBg6B,eAAeC,WAAW;AAC9E,YAAIjoB,SAAS;AACTpR,iBAAOxD,KAAK4U;AAAAA,QAAAA;AAAAA,MAChB;AAEGpR,aAAAA;AAAAA,IACX;AAEA,UAAM67B,iBAAiB3uB,OAAAA,gBAAwC;AAAA,MAC3DJ;AAAAA,MACAiX;AAAAA,MACA/W;AAAAA,MACA6W,SAAS;AAAA,IAAA,CACZ;AAEK,UAAA;AAAA,MACFjkB,QAAAA;AAAAA,MACAC;AAAAA,MACAK;AAAAA,MACAurB;AAAAA,MACAtrB;AAAAA,IAAAA,IACA07B;AAGJ,UAAMj/B,OAAOgD,SAAOhD;AACpB,UAAMk/B,kBAAkBzB,UAAU34B,SAAS,GAAG,IAAI24B,UAAUtR,MAAM,GAAG,EAAEC,MAAM,GAAG,EAAE,EAAErS,KAAK,GAAG,IAAI,MAAM/Z,OAAOA;AAC7G,UAAM2iB,cAAYqc,aAAah/B,MAAMwC,iBAAiBg6B,eAAex5B,SAAOpD,EAAE;AAE9E,UAAMy+B,cAAc,CAAC1b,eAAa+O,sBAAsBnP,WAAW4c,kBAAkBzN,mBAAmB,IAAI3tB;AAC5G,UAAMq7B,eAAe,CAACzc,cAAYJ,WAAW8c,eAAeH,eAAe,IAAIn7B;AACzEu7B,UAAAA,kBAAkBF,gBAAgBzvB,UAAU,YAAY;AAC1D,YAAMkC,OAAO,MAAMlC,QAAQyvB,cAAcf,eAAe,CAAA,CAAE;AAC1D,UAAIV,kBAAkB;AAClB,cAAM4B,eAAe5B,iBAAiBn2B,IAAI1B,CAAAA,QAAKA,IAAE9C,MAAM;AAClDw8B,aAAAA,KAAK,GAAGD,YAAY;AAAA,MAAA;AAEtB1tB,aAAAA;AAAAA,IAAAA,IACP9N;AAEJS,UAAAA,UAAU,MAAM;AACZu3B,mBAAalN,KAAK;AAAA,IAAA,GACnB,CAACA,KAAK,CAAC;AAED4Q,aAAAA,gBAAgB5tB,QAAgBsK,iBAA4B;AACjEsc,mBAAaiH,SAAS,IAAI;AAC1BC,uBAAAA,8BAA8B9tB,QAAMynB,mBAAAA,gBAAgB,EAC/C1nB,KAAM4I,CAAe,eAAA;AACZzC,cAAAA,MAAMwjB,0BAA0B/gB,UAAU;AAEnColB,qBAAAA,YAAY7nB,IAAI8iB,QAAQ;AACrCpC,qBAAaoH,cAAchuB,MAAI;AAClBinB,qBAAAA,kBAAkB/gB,IAAI8gB,cAAc;AACjD,cAAMiH,yBAA0B3jB,mBAAmB,CAAA,GAC9CvX,OAAQ8V,CAAQ3C,QAAAA,IAAI8gB,eAAene,GAAG,CAAC,KAAkB1K,OAAOC,KAAK8H,IAAIyC,UAAU;AACxFie,qBAAasH,iBAAiBD,qBAAqB;AACtCE,qBAAAA,oBAAoBjoB,IAAIyC,UAAU;AAE/C,cAAMylB,kBAAkB9jB,mBAAmB,CAAA,GAAI3U,IAAKkT,WAAQ3C,IAAI8gB,eAAene,KAAG,CAAC,EAAE9V,OAAOqB,OAAO,KAAiB+J,OAAOC,KAAK8H,IAAIyC,UAAU;AAChI,sBAAA,cAAczC,IAAIyC,UAAU;AAC1CvX,sBAAc,mBAAmBg9B,cAAc;AAAA,MAAA,CAClD;AAAA,IAAA;AAGT,UAAMC,cAAcj6B,QAAQjD,SAAOjD,IAAI,KAAKkG,QAAQjD,SAAOpD,EAAE;AAE7D,UAAMugC,0BAA0BA,MAAM;AAClC,YAAMrQ,oBAAoB;AAAA,QAAE,GAAG9sB,SAAOwX;AAAAA,MAAW;AACjD,UAAIie,aAAaoC,SACN/K,QAAAA,kBAAkB2I,aAAaoC,QAAQ;AAClD53B,oBAAc,cAAc6sB,iBAAiB;AAEjC,kBAAA;AAAA,IAChB;AAEA,UAAMxV,WAAW2I,YAAY3I,aAAavW,UAAakf,YAAY3I,aAAa;AAE1E8lB,UAAAA,qBAAqBnd,YAAYod,UAAU;AACjD,UAAM5jB,qBAAqBnC,YAAY9X;AAEvC,UAAM,CAAC89B,iBAAiBC,kBAAkB,IAAI58B,MAAAA,SAAS,KAAK;AAE5D,UAAMyvB,mBAAmBA,MAAM;AAC3B,UAAI,CAACnQ,WAAY;AACjBuO,wBAAkB4B,iBAAiB;AAAA,QAAExzB,IAAIqjB,WAAWrjB;AAAAA,MAAAA,CAAI,EAAEgS,KAAK,MAAM;AACjE2uB,2BAAmB,KAAK;AACX,qBAAA;AACb9T,2BAAmBnY,KAAK;AAAA,UACpBuD,SAAS;AAAA,UACTD,MAAM;AAAA,QAAA,CACT;AAAA,MAAA,CACJ;AAAA,IACL;AAEO,WAAAxV,2BAAA,KAACuS,GAAc,eAAA,EAAA,YAAY,MAC9B,UAAA;AAAA,MAACnT,+BAAAiP,OAAAA,QAAA,EAAO,OAAOwuB,gBAEX,UACK78B,2BAAA,KAAA0V,qBAAA,EAAA,UAAA;AAAA,QAAA,CAACtV,mBAAmBJ,2BAAAA,KAACo+B,GAAK,MAAA,EAAA,OAAO1C,aACP,gBAAgBl9B,GAAAA,IAAI6d,GAAoB,oBAAA,yEAAyE,GACjH,eAAgBtW,CAAM41B,MAAAA,eAAe51B,CAAe,GAC3E,UAAA;AAAA,UAAC3G,2BAAA,IAAAi/B,GAAA,KAAA,EAAI,OAAO,WAAU,UAEtB,WAAA;AAAA,UACCj/B,2BAAA,IAAAi/B,GAAA,KAAA,EAAI,OAAO,cAAa,UAEzB,cAAA;AAAA,UACCj/B,2BAAA,IAAAi/B,GAAA,KAAA,EAAI,OAAO,kBAAiB,UAE7B,mBAAA,CAAA;AAAA,QAAA,GACJ;AAAA,QAECr+B,2BAAA,KAAA,QAAA,EAAK,YAAU,MACV,UAAU68B,eAAetX,cACzB,WAAW/mB,GAAAA,IACP4B,kBAAkB,WAAW,uBAC7B,kCAAkC,GAEvCs7B,UAAAA;AAAAA,UAAgB,gBAAA,4CACZ5C,KAAAA,wBAAwB,CAAA,CAAA;AAAA,UAE5B4C,gBAAgB,gBACb99B,QACA09B,WAAWgD,QACVl/B,2BAAA,IAAA,UAAU,MAAV,EAAe,MAAa;AAAA,UAEhCs8B,gBAAgB,aACZt8B,2BAAAA,IAAA,6BAAA,EACG,MACA,YAAY,CAACu3B,YAAY5c,sBAAoB;AAEzC,gBAAI4c,YAAY;AACZ0G,8BAAgB1G,YAAY5c,iBAAe;AAC3C4hB,6BAAe,qBAAqB;AAAA,YAAA,OACjC;AACHA,6BAAe,SAAS;AAAA,YAAA;AAAA,UAGhC,GAAA,yBAAyBvB,eACzB,kBACA,gBAAmC,CAAA;AAAA,UAE1CsB,gBAAgB,yBAAyBrF,+CACrC,+BAA8B,EAAA,cACA,oBACA,iBAAmC;AAAA,UAErEqF,gBAAgB,yBAAyBrF,gBACrCj3B,2BAAA,IAAA,mCAAA,EAAkC,cACA,YAAYwB,SAAOwX,YACnB,iBAAiBxX,SAAOmZ,gBAA8B,CAAA;AAAA,UAE5F2hB,gBAAgB,wBAAwBrF,gBACpCj3B,2BAAAA,IAAAm/B,mBAAAA,sBAAA,EAAqB,cACA,YAAY39B,UACZ,MACA,iBAAiB,OAAO49B,uBAAuB;AAC3CnU,+BAAmBnY,KAAK;AAAA,cACpBsD,MAAM;AAAA,cACNC,SAAS;AAAA,YAAA,CACZ;AACD,kBAAMomB,eAAej7B,QAAM;AAC3Bk5B,wBAAY0E,kBAAkB;AAAA,UAAA,GAEtD;AAAA,UAEL9C,gBAAgB,aACbt8B,2BAAAA,IAAC,uBACG,EAAA,eACA,aACA,QACA,qBACA,kBACA,iBACC,WAACgB,mBAAmB49B,sBAAuBh+B,2BAAAA,KAAA,OAAA,EAAI,WAAW,4BACvD,UAAA;AAAA,YAAAZ,+BAACP,GAAAA,YAAW,EAAA,SAAS,SAAS,OAAO,aAAa,UAGlD,kMAAA;AAAA,YACCO,2BAAAA,IAAAsR,GAAAA,QAAA,EAAO,OAAO,WACP,SAAS,MAAM;AACXytB,iCAAmB,IAAI;AAAA,YAAA,GACxB,UAAa,gBAAA,CAAA;AAAA,UAAA,EAAA,CAC5B,EACJ,CAAA;AAAA,UAEHzC,gBAAgB,oBAAoB7a,cAChCzhB,2BAAAA,IAAA,uBAAA,EACG,kBACA,kBACA,SACA,qBACA,qBACA,WAAyB,CAAA;AAAA,UAEhCs8B,gBAAgB,gBACZt8B,2BAAAA,IAAA,gCAAA,EACG,YAAY+B,cAAc,GAC1B,iBACA,gBACA,iBAAiB,CAACyL,aAAaH,WAAWuE,YAAU;AAChD,kBAAM9B,UAAUuvB,KAAAA,gBAAgB;AAAA,cAC5B,GAAGtS,kBAAkBjd;AAAAA,cACrB,CAACpC,cAAcF,aAAaH,SAAS,CAAC,GAAGgyB,KAAAA,gBAAgBztB,SAAO,IAAI;AAAA,eACrE,IAAI;AACPmb,8BAAkBjd,UAAUA;AAC5B2tB,2BAAe6B,SAAS;AAAA,UAC5B,GACA,SACA,SAASxB,iBACT,uBACA,iBACA,oBACA,WAAW5B,WAAW5vB,uCACjBrI,GAAAA,YACG,EAAA,OAAO,WACP,SAAS,MAAMs4B,eAAe,YAAY,GACzCL,UAAU5vB,UAAAA,KACf,CAAA,GACZ;AAAA,UAECgwB,gBAAgB,aAAc17B,gCAAAwS,GAAAA,eAAA,EAC3B,UAAU,YACTxB,UAAAA;AAAAA,YAAS,SAAA5R,2BAAA,IAACu/B,kBAAU,MAAe,CAAA;AAAA,YAEnCv+B,mBAAmB85B,oBAAoBwB,gBAAgB,yBACpD17B,2BAAAA,KAAC0Q,GAAAA,QAAO,EAAA,SAAS,QACT,MAAK,UACL,SAAS,MAAM;AACX2lB,2BAAaiH,SAAS,KAAK;AAC3B,qBAAO3B,eAAe,SAAS;AAAA,YAEvC,GAAA,UAAA;AAAA,cAAAv8B,2BAAA,IAACw/B,GAAa,eAAA,EAAA;AAAA,cAAA;AAAA,YAAA,GAElB;AAAA,YAEHx+B,mBAAmB85B,oBAAoBwB,gBAAgB,yBACpD17B,2BAAAA,KAAC0Q,GAAAA,QAAO,EAAA,SAAS,QACT,MAAK,UACL,SAAS,MAAM;AACXirB,6BAAe,qBAAqB;AAAA,YAE5C,GAAA,UAAA;AAAA,cAAAv8B,2BAAA,IAACw/B,GAAa,eAAA,EAAA;AAAA,cAAA;AAAA,YAAA,GAElB;AAAA,YAEHx+B,mBAAmB85B,oBAAoBwB,gBAAgB,6CACnDhrB,GAAO,QAAA,EAAA,SAAS,QACT,MAAK,UACL,SAAS,MAAMirB,eAAe,SAAS,GAC3C,UAAA;AAAA,cAAAv8B,2BAAA,IAACw/B,GAAa,eAAA,EAAA;AAAA,cAAA;AAAA,YAAA,GAElB;AAAA,YAEHx+B,mBAAmBs7B,gBAAgB,gBAAgB17B,2BAAA,KAAC0Q,GAAO,QAAA,EAAA,SAAS,QACT,MAAK,UACL,SAAS,MAAMirB,eAAe,SAAS,GAC/F,UAAA;AAAA,cAAAv8B,2BAAA,IAACw/B,GAAa,eAAA,EAAA;AAAA,cAAA;AAAA,YAAA,GAElB;AAAA,YAECx/B,2BAAAA,IAAAsR,GAAAA,QAAA,EAAO,SAAS,QACT,SAAS,MAAM;AACE,2BAAA;AAAA,YAAA,GACf,UAEV,UAAA;AAAA,YAECtQ,mBAAmBs7B,gBAAgB,yBAC/Bt8B,2BAAAA,IAAAsR,GAAAA,QAAA,EACG,SAAS,UACT,OAAM,WACN,SAASqtB,yBAAwB,UAGrC,OAAA,CAAA;AAAA,YAEH39B,mBAAmBs7B,gBAAgB,yBAC/Bt8B,2BAAAA,IAAAsR,GAAA,QAAA,EACG,SAAS,UACT,OAAM,WACN,SAAS,MAAM;AACC,0BAAA;AAAA,YAAA,GACd,UAGN,QAAA;AAAA,YAEHtQ,oBAAoBs7B,gBAAgB,aAAaA,gBAAgB,iBAC7D17B,2BAAA,KAAA6+B,GAAA,eAAA,EACG,SAAS,UACT,OAAM,WACN,MAAK,UACL,SAAS39B,cACT,UAAUA,gBAAiBw6B,gBAAgB,aAAa,CAACoC,aACzD,WAAWpC,gBAAgB,eACrBt8B,2BAAA,IAAC0/B,GAAS,WAAA,CAAA,CAAA,IACVn9B,QAEL+5B,UAAAA;AAAAA,cAAAA,gBAAgB,aAAa;AAAA,cAC7BA,gBAAgB,gBAAgB;AAAA,YAAA,GACrC;AAAA,YAEH,CAACt7B,mBAAoBhB,2BAAA,IAAAy/B,GAAA,eAAA,EAClB,SAAQ,UACR,OAAM,WACN,MAAK,UACL,SAAS39B,cAAa,UAG1B,oBAAA,CAAA;AAAA,UAAA,EAEJ,CAAA;AAAA,QAAA,EACJ,CAAA;AAAA,MAAA,EAAA,CACJ,EAEJ,CAAA;AAAA,qCAEC6lB,KAAAA,oBACG,EAAA,MAAMmX,iBACN,UAAUlN,kBACV,UAAU,MAAMmN,mBAAmB,KAAK,GACxC,OAAO/+B,+BAAAsW,WAAAA,UAAA,EAAE,UAAyB,4BAAA,CAAA,GAClC,MAAQ1V,2BAAA,KAAA0V,qBAAA,EAAA,UAAA;AAAA,QAAA;AAAA,QAAWtW,2BAAAA,IAAC,OAAE,UACH,sBAAA,CAAA;AAAA,QAAI;AAAA,MAAA,EAAA,CAC4B,EAAI,CAAA;AAAA,IAAA,GAE/D;AAAA,EAEJ;AAEA,WAASy7B,qBAA0Dha,YAAoC9H,iBAA8E;AAC3K,UAAA;AAAA,MACFX;AAAAA,MACA,GAAG2mB;AAAAA,IAAAA,IACHle;AACJ,UAAMme,mBAA8C,CAAC;AACrD,QAAI5mB,YAAY;AACZxK,aAAOC,KAAKuK,UAAU,EAAE5K,QAAS8K,CAAQ,QAAA;AACrC0mB,yBAAiB1mB,GAAG,IAAI2mB,sBAAsB7mB,WAAWE,GAAG,GAAwBS,eAAe;AAAA,MAAA,CACtG;AAAA,IAAA;AAGE,WAAA;AAAA,MACH,GAAGgmB;AAAAA,MACH3mB,YAAY4mB;AAAAA,IAChB;AAAA,EACJ;AAEA,WAASC,sBAAsBpnB,UAA6BkB,iBAAsD;AAC9G,QAAImmB,mBAAmBrnB;AACvB,QAAIkB,mBAAmB,OAAOmmB,qBAAqB,YAAYA,iBAAiBhmB,gBAAgB;AACtFA,YAAAA,iBAAiBH,gBAAgBmmB,iBAAiBhmB,cAAc;AACtE,UAAIA,kBAAkBpB,KAAAA,kBAAkBoB,eAAerB,QAAQ,GAAG;AAC9DqnB,2BAAmBhmB,eAAerB;AAAAA,MAAAA,OAC/B;AAEH,YAAIqB,gBAAgB;AACGiJ,6BAAAA,KAAAA,UAAUjJ,eAAerB,UAAUqnB,gBAAgB;AAAA,QAAA;AAGtE,YAAA,CAACpnB,KAAAA,kBAAkBonB,gBAAgB,KAAKA,iBAAiBlnB,aAAa,SAASknB,iBAAiB9mB,YAAY;AAC5G,gBAAMA,aAAgD,CAAC;AACvDxK,iBAAOC,KAAKqxB,iBAAiB9mB,UAAU,EAAE5K,QAAS8K,CAAQ,QAAA;AACtDF,uBAAWE,GAAG,IAAI2mB,sBAAwBC,iBAAiC9mB,WAA0BE,GAAG,GAAeS,eAAe;AAAA,UAAA,CACzI;AACkB,6BAAA;AAAA,YACf,GAAGmmB;AAAAA,YACH9mB;AAAAA,UACJ;AAAA,QAAA;AAAA,MACJ;AAAA,IAEJ;AAEG8mB,WAAAA;AAAAA,EAEX;AAEA,QAAMtC,eAAeA,CAACx+B,OAAegC,iBAA0Bg6B,eAAyB3oB,YAAqB;AACrGT,QAAAA;AACJ,QAAI,CAAC5S,OAAO;AACA,cAAA;AAAA,IAAA;AAIRgC,QAAAA,mBAAmBg6B,eAAe13B,SAAStE,MAAMwV,OAAOiW,aAAa,KAAK,CAACpY,QACnE,SAAA;AAEZ,UAAM0tB,WAAWC,KAAAA,gCAAgChhC,KAAK,EAAE2rB,MAAM,GAAG;AAC7DoV,QAAAA,SAASh6B,SAAS,MAAM,GAAG;AAC3B6L,cAAQ,yDAAyD5S,KAAK;AAAA,IAAA;AAEnE4S,WAAAA;AAAAA,EACX;AAEA,QAAM2T,aAAaA,CAACvmB,OAAegC,iBAA0Bg6B,eAAyBC,gBAA0B;AACxG,QAAA,CAACj8B,MAAcuD,QAAAA;AACfqP,QAAAA;AACA5Q,QAAAA,mBAAmBg6B,eAAe13B,SAAStE,MAAMwV,OAAOiW,YAAAA,CAAa,EAC7D,SAAA;AACRzpB,QAAAA,mBAAmBi6B,aAAa33B,SAAStE,MAAMwV,OAAOiW,YAAAA,CAAa,EAC3D,SAAA;AAIL7Y,WAAAA;AAAAA,EACX;AC/0BO,QAAMquB,0BAA0B3+B,MAAM4+B,cAA2C,EAAS;AAC1F,QAAMvhC,0BAA0B2C,MAAM4+B,cAA0C,EAAS;AAsCzF,QAAMC,2BAA2B7+B,MAAMwQ,KAC1C,SAAAquB,0BAAAthC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAkC,UAAA;AAAA,MAAAqC;AAAAA,MAAAg/B;AAAAA,MAAAC;AAAAA,MAAAp/B;AAAAA,MAAAgvB;AAAAA,MAAAiM;AAAAA,MAAA/O;AAAAA,MAAAhf;AAAAA,MAAAmyB;AAAAA,IAAAA,IAAAzhC;AAY9B,UAAAkiB,aAAmBC,KAAAA,wBAAwB;AAC3C,UAAAuf,WAAiBC,YAAAA,YAAY;AAC7B,UAAAvV,qBAA2BnV,KAAAA,sBAAsB;AACjD,UAAA;AAAA,MAAA6D;AAAAA,QAA4BC,gCAA2B;AAEvD,UAAA8W,CAAAA,eAAAC,gBAAA,IAA0CrvB,MAAAa,SAavC;AAEH,UAAAs+B,CAAAA,uBAAAC,wBAAA,IAA0Dp/B,MAAAa,SAWvD;AAEH,UAAAw+B,2BAAAv2B;AAIQjL,QAAAA;AAAAL,QAAAA,SAAAwhC,kBAAA;AAEenhC,WAAAE,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAjB;AAAAA,UAAA69B;AAAAA,UAAA/L;AAAAA,UAAA/uB;AAAAA,UAAAg7B;AAAAA,QAAAA,IAAA98B;AAapBsS,gBAAAuT,MAAc,mBAAmB9mB,IAAI69B,UAAU/L,qBAAqB/uB,gBAAgB;AACpFm/B,2BAAmB,mBAAiB;AAAA,UAAAliC;AAAAA,UAAA69B;AAAAA,QAAAA,CAAA;AAIpB,yBAAA;AAAA,UAAA1K,oBACQnzB;AAAAA,UAAE69B;AAAAA,UAAA/L;AAAAA,UAAAlvB,iBAAA;AAAA,UAAAG;AAAAA,UAAAy/B,UAAA;AAAA,UAAAzE;AAAAA,QAAAA,CAOzB;AAAA,MAAC;AACLr9B,aAAAwhC;AAAAxhC,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AA3BD,UAAA+hC,iBAAuB1hC;AA2BrBE,QAAAA;AAAAP,QAAAA,SAAAwhC,kBAAA;AAEmBjhC,WAAAC,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAkO;AAAAA,UAAAiL;AAAAA,UAAA8Y;AAAAA,UAAAxT;AAAAA,UAAAmS,qBAAA4Q;AAAAA,UAAArf;AAAAA,UAAA0a,kBAAA4E;AAAAA,QAAAA,IAAAzhC;AAiBlBqS,gBAAAuT,MAAc,iBAAiB1X,aAAaiL,UAAU8Y,oBAAoBxT,wBAAwBmS,uBAAqBzO,UAAU;AACjI6e,2BAAmB,iBAAe;AAAA,UAAA9yB;AAAAA,UAAA+jB;AAAAA,QAAAA,CAAA;AAKlC,cAAAlkB,YAAkBG,eAAeA,YAAWlK,SAAU,GAAG,IACnDkK,YAAWud,UAAcvd,GAAAA,YAAWwzB,YAAa,GAAG,CAAC,IAACz+B;AAE5D,cAAA0+B,8BAAoCzzB,eAAeA,YAAWlK,SAAU,GAAG,IACrEkK,YAAWud,UAAWvd,YAAWwzB,YAAa,GAAG,IAAC,CAAI,IACtDxzB;AACkB,iCAAA;AAAA,UAAAA,aACPyzB;AAAAA,UAA2BxoB;AAAAA,UAAApL;AAAAA,UAAA0Q;AAAAA,UAAAwT;AAAAA,UAAArB,qBAKxCA;AAAAA,UAAmBjV,oBACCwG,YAAU3I,YAAmB;AAAA,UAAAqjB,kBACjDA;AAAAA,QAAAA,CACH;AAAA,MAAC;AACLr9B,aAAAwhC;AAAAxhC,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAvCD,UAAAoiC,eAAqB7hC;AAuCnBC,QAAAA;AAAAR,QAAAA,SAAAwhC,kBAAA;AAEuBhhC,WAAAI,CAAAA,QAAA;AAAC,cAAA;AAAA,UAAAwwB,qBAAAiR;AAAAA,UAAAhgC,kBAAAigC;AAAAA,UAAA1yB;AAAAA,UAAAkyB;AAAAA,UAAAS;AAAAA,QAAAA,IAAA3hC;AAiBtBiS,gBAAAuT,MAAc,qBAAmB;AAAA,UAAAgL,qBAC7BA;AAAAA,UAAmB/uB,kBACnBA;AAAAA,UAAgBuN;AAAAA,UAAAkyB;AAAAA,UAAAS;AAAAA,QAAAA,CAInB;AACDf,2BAAmB,qBAAmB;AAAA,UAAApQ,qBAClCA;AAAAA,UAAmB/uB,kBACnBA;AAAAA,UAAgBuN;AAAAA,UAAAkyB;AAAAA,UAAAS;AAAAA,QAAAA,CAAA;AAKJ,yBAAA;AAAA,UAAArgC,iBAAA;AAAA,UAAAkvB,qBAEZA;AAAAA,UAAmB/uB,kBACnBA;AAAAA,UAAgBuN;AAAAA,UAAAkyB;AAAAA,QAAAA,CAGnB;AAAA,MAAC;AACL9hC,aAAAwhC;AAAAxhC,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAtCD,UAAAwiC,mBAAyBhiC;AA+CU,UAAAI,KAAA2gC,qBAAqBM;AAAwBhhC,QAAAA;AAAA,QAAAb,EAAA,CAAA,MAAAwiC,oBAAAxiC,EAAA+hC,CAAAA,MAAAA,kBAAA/hC,EAAAoiC,CAAAA,MAAAA,gBAAApiC,SAAAY,IAAA;AAJ7D,WAAA;AAAA,QAAAmhC;AAAAA,QAAAS;AAAAA,QAAAJ;AAAAA,QAAAb,mBAIgB3gC;AAAAA,MAA6C;AACnEZ,aAAAwiC;AAAAxiC,aAAA+hC;AAAA/hC,aAAAoiC;AAAApiC,aAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAKSc,UAAAA,KAAA6E,QAAQisB,aAAa;AAAC7wB,QAAAA;AAAAf,QAAAA,EAAA4xB,EAAAA,MAAAA,iBAAA5xB,UAAAyhC,YAAAzhC,EAAA,EAAA,MAAAiiB,YAAA;AASflhB,WAAA8hB,CAAA,iBAAA;AAAA,YACL+O,eAAakQ,UAAA;AAAA,cACTnf,gBAAciP,eAAa1vB,oBAAsB0vB,cAAaR,oBAAAnqB,QAA2B;AACzF,kBAAAqd,MAAYrC,WAAUwgB,uBAAwB9f,aAAUrjB,MAAOqjB,aAAUjjB,IAAK;AAC9E+hC,qBAASnd,GAAG;AAAA,UAAA;AAAA,QAAC;AAGrBuN,yBAAgBpuB,MAAU;AAAA,MAAC;AAC9BzD,cAAA4xB;AAAA5xB,cAAAyhC;AAAAzhC,cAAAiiB;AAAAjiB,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAA,EAAA,MAAAshC,8BAAAthC,EAAAmxB,EAAAA,MAAAA,uBAAAnxB,UAAA4xB,iBAAA5xB,EAAA,EAAA,MAAAo9B,aAAAp9B,EAAAqP,EAAAA,MAAAA,WAAArP,EAAAquB,EAAAA,MAAAA,WAAAruB,EAAA,EAAA,MAAAmC,kBAAAnC,EAAAc,EAAAA,MAAAA,MAAAd,UAAAe,IAAA;AAlBLC,0CAAC,wBACS,EAAA,MAAAF,IACYwgC,8CACD,iBAAI,OACAnQ,qBACjBS,GAAAA,eACKviB,SACOlN,gBACLi7B,WACF/O,SACI,aAAAttB,IAQT;AAAAf,cAAAshC;AAAAthC,cAAAmxB;AAAAnxB,cAAA4xB;AAAA5xB,cAAAo9B;AAAAp9B,cAAAqP;AAAArP,cAAAquB;AAAAruB,cAAAmC;AAAAnC,cAAAc;AAAAd,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAIEmB,UAAAA,KAAAwE,QAAQg8B,qBAAqB;AAEjBrgC,UAAAA,MAAAqE,QAAQg8B,uBAAqBjzB,WAAa;AAC9C,UAAAnN,MAACogC,CAAAA,wBAAiCA,QAAAA,CAAAA,uBAAqBjzB;AACjD,UAAAlN,MAACmgC,CAAAA,wBAAiCA,QAAAA,CAAAA,uBAAqBjzB;AAEvDjN,UAAAA,MAAAkgC,uBAAqBxlB,sBAA6B;AAAAza,QAAAA;AAAA1B,QAAAA,EAAA2hC,EAAAA,MAAAA,yBAAA3hC,UAAAqP,WAAArP,EAAA,EAAA,MAAAiiB,YAAA;AAC7D5S,YAAAA,WAAWsyB,uBAAqBlP,qBAAoB,MAAA;AAErDrM,gBAAAA,MAAc,yBAAyBub,uBAAqBlP,kBAAoB;AAChF,cAAAqM,eAAqB7c,WAAU8c,eAAgB4C,sBAAqBlP,kBAAoB;AACjFpjB,eAAAA,QAAQyvB,cAAY,EAAI;AAAA,MAAA,IAACr7B;AAEzBzD,cAAA2hC;AAAA3hC,cAAAqP;AAAArP,cAAAiiB;AAAAjiB,cAAA0B;AAAAA,IAAAA,OAAA;AAAAA,YAAA1B,EAAA,EAAA;AAAA,IAAA;AAAA4B,QAAAA;AAAA5B,QAAAA,EAAAshC,EAAAA,MAAAA,8BAAAthC,UAAA2hC,yBAAA3hC,EAAA,EAAA,MAAAmsB,oBAAA;AACIvqB,YAAAC,CAAAA,SAAA;AAAC,cAAA;AAAA,UAAAvC,IAAA+mB;AAAAA,UAAA1M,UAAAoM;AAAAA,QAAAA,IAAAlkB;AAGC,YAAA,CACZ8/B,uBAAqB;AAAA;AAAA,QAAA;AAAA,YAAA,CACrBriC,MAAE;AAAA;AAAA,QAAA;AACPq6B,cAAAA,cAAA,CAAsBgI,sBAAqBjzB;AAAc,eAClD4yB,2BAA0BoB,aAAA;AAAA,UAAAhjC,MACvBiiC,uBAAqBlP;AAAAA,UAAA9Y,UAC3BA;AAAAA,UAAQjL,aACKpP;AAAAA,UAAEmd,oBACKkd,eAAegI,sBAAqB1iB,yBAA8B0iB,CAAAA,GAAAA,sBAAqB1iB,wBAAyB3f,IAAE,IAAAmE;AAAAA,UAAa8K,WACxIozB,sBAAqBpzB;AAAAA,UAAA6iB,qBACXuQ,sBAAqBvQ;AAAAA,QAAAA,CAC7C,EAAChf,MAAA5M,CAAA,MAAA;AAEMqN,kBAAAC,MAActN,CAAC;AACf2mB,6BAAkBnY,KAAA;AAAA,YAAAsD,MACR;AAAA,YAAOC,SACJ,iCAAiC/R,EAAC+R,WAAY;AAAA,UAAA,CAC1D;AAAC,iBAAA;AAAA,QAAA,CAEL;AAAA,MAAC;AACTvX,cAAAshC;AAAAthC,cAAA2hC;AAAA3hC,cAAAmsB;AAAAnsB,cAAA4B;AAAAA,IAAAA,OAAA;AAAAA,YAAA5B,EAAA,EAAA;AAAA,IAAA;AAAA6B,QAAAA;AAAA,QAAA7B,EAAAshC,EAAAA,MAAAA,8BAAAthC,UAAA2hC,uBAAA1iB,0BAAAjf,EAAA2hC,EAAAA,MAAAA,uBAAAlP,sBAAAzyB,EAAA,EAAA,MAAA2hC,uBAAApzB,aAAAvO,EAAA2hC,EAAAA,MAAAA,uBAAAvQ,uBAAApxB,EAAA,EAAA,MAAA2hC,uBAAAjzB,eAAA1O,UAAAmsB,oBAAA;AAEStqB,YAAAA,MAAA;AACD8/B,YAAAA,CAAAA,uBAAqBjzB,aAAA;AAAA;AAAA,QAAA;AAC1B,cAAA+N,qBAA2BklB,uBAAqB1iB,wBAAA3a,OAAAgb,CAAsCA,MAAAA,MAAMqiB,uBAAqBjzB,WAAa;AAAE,eACzH4yB,2BAA0B/hB,eAAA;AAAA,UAAA7f,MACvBiiC,uBAAqBlP;AAAAA,UAAA/jB,aACdizB,uBAAqBjzB;AAAAA,UAAAH,WACvBozB,uBAAqBpzB;AAAAA,UAAAkO;AAAAA,UAAA2U,qBAEXuQ,uBAAqBvQ;AAAAA,QAAAA,CAC7C,EAAC9f,KAAA,MAAA;AAEMswB,mCAAwBn+B,MAAU;AAAA,QAAA,CACrC,EAAC2O,MAAArJ,CAAA,QAAA;AACE8J,kBAAAC,MAActN,GAAC;AACf2mB,6BAAkBnY,KAAA;AAAA,YAAAsD,MACR;AAAA,YAAOC,SACJ,+BAA+B/R,IAAC+R,WAAY;AAAA,UAAA,CACxD;AAAC,iBAAA;AAAA,QAAA,CAEL;AAAA,MAAC;AACTvX,cAAAshC;AAAA,QAAA,EAAA,IAAAK,uBAAA1iB;AAAA,QAAA,EAAA,IAAA0iB,uBAAAlP;AAAA,QAAA,EAAA,IAAAkP,uBAAApzB;AAAA,QAAA,EAAA,IAAAozB,uBAAAvQ;AAAA,QAAA,EAAA,IAAAuQ,uBAAAjzB;AAAA1O,cAAAmsB;AAAAnsB,cAAA6B;AAAAA,IAAAA,OAAA;AAAAA,YAAA7B,EAAA,EAAA;AAAA,IAAA;AAAA+B,QAAAA;AAAAC,QAAAA;AAAAqD,QAAAA;AAAA,QAAArF,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGYqB,YAAAA,MAAA;AACT6/B,iCAAwBn+B,MAAU;AAAA,MAAC;AAE7BzB,YAAAA,MAAA;AACN4/B,iCAAwBn+B,MAAU;AAAA,MAAC;AAExB4B,YAAA,CAAA;AAAErF,cAAA+B;AAAA/B,cAAAgC;AAAAhC,cAAAqF;AAAAA,IAAAA,OAAA;AAAAtD,YAAA/B,EAAA,EAAA;AAAAgC,YAAAhC,EAAA,EAAA;AAAAqF,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAAsF,QAAAA;AAAA,QAAAtF,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAEK4E,YAAA,CAAA;AAAEtF,cAAAsF;AAAAA,IAAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AAGd,UAAAuF,MAAAo8B,uBAAqBhoB;AAClB,UAAAjU,MAAAi8B,uBAAqBjzB;AAAa9I,QAAAA;AAAA,QAAA5F,EAAA6a,EAAAA,MAAAA,mBAAA7a,EAAA,EAAA,MAAAsB,OAAAtB,UAAAuB,OAAAvB,EAAAwB,EAAAA,MAAAA,OAAAxB,EAAA,EAAA,MAAAyB,OAAAzB,EAAA0B,EAAAA,MAAAA,OAAA1B,EAAA,EAAA,MAAA4B,OAAA5B,UAAA6B,OAAA7B,EAAAuF,EAAAA,MAAAA,OAAAvF,EAAA,EAAA,MAAA0F,OAAA1F,UAAAmB,IAAA;AA3EnDyE,2CAAC,oBACS,EAAA,MAAAzE,IACY,kBAAG,MACH,kBAAAG,KACJ,cAAAC,KACM,oBAAAC,KACX,SAAA,OACW,oBAAAC,KACX,SAAAC,KAOU,mBAAAE,KAwBS,4BAAI,OACtB,UAAAC,KAqBD,SAAAsJ,QAEI,aAAApJ,KAGH,UAAAC,KAGK,eAAAqD,KACE,iBAAI,OACC,sBAAAC,KACF,oBAAA,MACHuV,iBACP,UAAAtV,KACG,aAAAG,KAAqC;AAAA1F,cAAA6a;AAAA7a,cAAAsB;AAAAtB,cAAAuB;AAAAvB,cAAAwB;AAAAxB,cAAAyB;AAAAzB,cAAA0B;AAAA1B,cAAA4B;AAAA5B,cAAA6B;AAAA7B,cAAAuF;AAAAvF,cAAA0F;AAAA1F,cAAAmB;AAAAnB,cAAA4F;AAAAA,IAAAA,OAAA;AAAAA,YAAA5F,EAAA,EAAA;AAAA,IAAA;AAAA8F,QAAAA;AAAA,QAAA9F,EAAA,EAAA,MAAAsC,YAAAtC,EAAA4F,EAAAA,MAAAA,OAAA5F,EAAAa,EAAAA,MAAAA,MAAAb,UAAAgB,IAAA;AA1G1D8E,YACWhE,2BAAA,KAAA,wBAAA,UAAA,EAAA,OAAAjB,IAOC,UAAA;AAAA,QAAA;AAAA,QAERG;AAAAA,QAqBA4E;AAAAA,MAAAA,GA6EJ;AAAmC5F,cAAAsC;AAAAtC,cAAA4F;AAAA5F,cAAAa;AAAAb,cAAAgB;AAAAhB,cAAA8F;AAAAA,IAAAA,OAAA;AAAAA,YAAA9F,EAAA,EAAA;AAAA,IAAA;AAAA+F,QAAAA;AAAA,QAAA/F,EAAAshC,EAAAA,MAAAA,8BAAAthC,UAAA8F,KAAA;AA7GvCC,2CAAA,wBAAA,UAAA,EAAyCu7B,OAAAA,4BACrCx7B,UA8GJ,KAAA;AAAmC9F,cAAAshC;AAAAthC,cAAA8F;AAAA9F,cAAA+F;AAAAA,IAAAA,OAAA;AAAAA,YAAA/F,EAAA,EAAA;AAAA,IAAA;AA/GnC+F,WAAAA;AAAAA,EA+GmC,GAExC+N,KAAK;AAnRR,WAAAxI,QAAA;AAAA,WAAA;AAAA,MAAAq3B,mBAAA;AAAA,MAAAC,iBAAA;AAAA,MAAAC,mBAAA;AAAA,IAAA;AAAA,EAAA;AAAA,WAAA13B,SAAA;AAAA,EAAA;ACtDG,WAAA23B,uBAAA/iC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAgC,UAAA;AAAA,MAAAP,MAAAy9B;AAAAA,MAAA/L;AAAAA,MAAAzO;AAAAA,MAAAogB;AAAAA,IAAAA,IAAAhjC;AAOnC,UAAAi6B,iBAAuBC,KAAAA,kBAAkB;AACzC,UAAA+I,uBAA6B9gB,KAAAA,wBAAwB;AACrD,UAAA+gB,6BAAmCtjC,8BAA8B;AAAEU,QAAAA;AAAA,QAAAL,EAAAgjC,CAAAA,MAAAA,wBAAAhjC,SAAAoxB,qBAAA;AAE1C4R,WAAAA,qBAAoBE,qBAAsB9R,mBAAmB;AAACpxB,aAAAgjC;AAAAhjC,aAAAoxB;AAAApxB,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAvF,UAAAqC,mBAAyBhC;AAA+DE,QAAAA;AAAAP,QAAAA,EAAAg6B,CAAAA,MAAAA,kBAAAh6B,SAAA2iB,cAAA3iB,EAAA,CAAA,MAAAijC,4BAAA;AAE9DA,WAAAA,2BAA0B1B,oBAC9C0B,2BAA0B1B,kBAAA;AAAA,QAAAvE,MAClBhD,eAAcgD;AAAAA,QAAAra;AAAAA,MAAAA,CAEvB,EAACigB,kBACI;AAAA5iC,aAAAg6B;AAAAh6B,aAAA2iB;AAAA3iB,aAAAijC;AAAAjjC,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AALV,UAAAmjC,oBAA0B5iC;AASfC,UAAAA,KAAA2iC,oBAAoB,oBAAoB;AAGjC,UAAAviC,MAACuiC;AAAiBtiC,QAAAA;AAAA,QAAAb,EAAA,CAAA,MAAAmjC,qBAAAnjC,EAAA,CAAA,MAAA2iB,cAAA3iB,EAAA,CAAA,MAAAijC,8BAAAjjC,EAAA,EAAA,MAAAm9B,YAAAn9B,EAAA,EAAA,MAAAqC,oBAAArC,EAAA,EAAA,MAAAoxB,uBAAApxB,EAAA,EAAA,MAAA+iC,iBAAAxxB,MAAA;AACnB4xB,WAAAA,oBACGF,MAAAA,4BAA0BlB,eAAA;AAAA,QAAAziC,IAC1BqjB,WAAUrjB;AAAAA,QAAA69B;AAAAA,QAAA/L;AAAAA,QAAA/uB;AAAAA,QAG2Cg7B,kBACvC0F,iBAAexxB,QAAA,CAAA;AAAA,MAAY,CAAA,IAAA9N;AAEtCzD,aAAAmjC;AAAAnjC,aAAA2iB;AAAA3iB,aAAAijC;AAAAjjC,cAAAm9B;AAAAn9B,cAAAqC;AAAArC,cAAAoxB;AAAA,QAAA,EAAA,IAAA2R,iBAAAxxB;AAAAvR,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACfI,0CAACsH,GAAc,cAAA,EAAA;AAAApI,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAA,QAAAf,EAAAY,EAAAA,MAAAA,MAAAZ,UAAAa,IAAA;AAZnB,WAAAK,2BAAA,IAACiE,iBACU,OAAA,WACG,UAAAvE,IACD,SAAAC,IASTC,UACJ,GAAA,CAAA;AAAad,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAAQ,EAAAA,MAAAA,MAAAR,UAAAe,IAAA;AAhBIC,0CAACI,GACT,SAAA,EAAA,SAAA,MACF,OAAAZ,IACPO,UAcJ,IAAA;AAAUf,cAAAQ;AAAAR,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAjBV,UAAAojC,eAAqBpiC;AAiBVG,QAAAA;AAAAnB,QAAAA,UAAAojC,cAAA;AAEJjiC,2EACU,aAAA,CAAA;AACdnB,cAAAojC;AAAApjC,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAFImB,WAAAA;AAAAA,EAEJ;ACvCMkiC,QAAAA,iCAAiCA,MAAA;AAAA,WAAmCzjC,MAAAA,WAAAuhC,uBAAkC;AAAA,EAAC;ACG7G,WAAAmC,+BAAAvjC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAwC,UAAA;AAAA,MAAA0iB;AAAAA,IAAAA,IAAA5iB;AAM3C,UAAAosB,qBAA2BnV,KAAAA,sBAAsB;AACjD,UAAAgjB,iBAAuBC,KAAAA,kBAAkB;AACzC,UAAA/I,mBAAyBmS,+BAA+B;AACxD,UAAAJ,6BAAmCtjC,8BAA8B;AAAEU,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAAg6B,eAAAgD,QAAAh9B,EAAA,CAAA,MAAA2iB,cAAA3iB,EAAA,CAAA,MAAAijC,4BAAA;AAE/C5iC,WAAA4iC,2BAA0B1B,kBAAA;AAAA,QAAAvE,MACpChD,eAAcgD;AAAAA,QAAAra;AAAAA,MAAAA,CAEvB;AAAC,QAAA,CAAA,IAAAqX,eAAAgD;AAAAh9B,aAAA2iB;AAAA3iB,aAAAijC;AAAAjjC,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAHF,UAAAujC,cAAoBljC;AAGjBE,QAAAA;AAAA,QAAAP,EAAA2iB,CAAAA,MAAAA,cAAA3iB,SAAAijC,4BAAA;AAE6B1iC,WAAAA,MAAA;AAC5B0iC,oCAA0BlB,eAAA;AAAA,UAAAziC,IAClBqjB,WAAUrjB;AAAAA,UAAA8xB,qBAAA,CAAA;AAAA,QAAA,CAAA;AAAA,MAAA;AAGrBpxB,aAAA2iB;AAAA3iB,aAAAijC;AAAAjjC,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AALD,UAAAwjC,0BAAgCjjC;AAOhC,UAAA,CAAAy/B,iBAAAC,kBAAA,IAA8C58B,MAAAA,cAAc;AAAE7C,QAAAA;AAAAR,QAAAA,EAAA2iB,CAAAA,MAAAA,cAAA3iB,SAAAkxB,oBAAAlxB,EAAA,CAAA,MAAAmsB,oBAAA;AAErC3rB,WAAAA,MAAA;AACrB0wB,0BAAgB4B,iBAAA;AAAA,UAAAxzB,IAAyBqjB,WAAUrjB;AAAAA,QAAAA,CAAA,EAAAgS,KAAA,MAAA;AAC/C2uB,kCAAwB;AACxB9T,6BAAkBnY,KAAA;AAAA,YAAAuD,SACL;AAAA,YAAoBD,MACvB;AAAA,UAAA,CACT;AAAA,QAAA,CAAC;AAAA,MAAA;AAETtX,aAAA2iB;AAAA3iB,aAAAkxB;AAAAlxB,aAAAmsB;AAAAnsB,cAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,EAAA;AAAA,IAAA;AARD,UAAA8yB,mBAAyBtyB;AAQvBI,QAAAA;AAAA,QAAAZ,EAAA,EAAA,MAAAujC,YAAAV,mBAAA;AAKOjiC,WAAA2iC,YAAWV,qBACR3hC,2BAAAA,IAACuiC,GAAAA,QACY,wCAACt+B,iBACN,UAACjE,2BAAA,IAAAwiC,GAAA,cAAA,EAAmB,MAAA,QAAO,CAAA,GAC/B,GAEA,UAAA5hC,2BAAA,KAAC6hC,eACU,aACE,SAAA58B,CAAA,UAAA;AACLA,cAAKqS,eAAgB;AACrBrS,cAAKsS,gBAAiB;AACtB4mB,+BAAuB;AAAA,MAE3B,GAAA,UAAA;AAAA,QAAA/+B,2BAAA,IAAC0nB,GAAU,YAAA,EAAA;AAAA,QAAE;AAAA,MAAA,EAAA,CAEjB,EAEJ,CAAA;AAAO,QAAA,EAAA,IAAA2a,YAAAV;AAAA7iC,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,UAAAwjC,2BAAAxjC,EAAAujC,EAAAA,MAAAA,YAAAX,iBAAA;AAIV/hC,WAAA0iC,YAAWX,mBACP1hC,2BAAAA,IAAAiE,GAAAA,YAAA,EACY,SAAAy+B,CAAA,YAAA;AACmB,gCAAA;AAAA,MAAA,GAE5B,UAAA1iC,2BAAAA,IAACkH,GAAmB,cAAA,EAAA,MAAA,QAAO,CAAA,GAC/B;AAAapI,cAAAwjC;AAAA,QAAA,EAAA,IAAAD,YAAAX;AAAA5iC,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAAY,EAAAA,MAAAA,MAAAZ,UAAAa,IAAA;AA5BrBC,2CAAA,OACKF,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QAqBAC;AAAAA,MAAAA,GAOL;AAAMb,cAAAY;AAAAZ,cAAAa;AAAAb,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAC,QAAAA;AAAA,QAAAhB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAKQK,WAAAA,MAAMk/B,wBAAwB;AACjCj/B,iEAAE,UAAuB,0BAAA,CAAA;AAAGhB,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAD,WAAAf,EAAA,EAAA;AAAAgB,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAAAmB,QAAAA;AAAA,QAAAnB,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAC7BS,WAAEW,2BAAA,KAAA0V,qBAAA,EAAA,UAAA;AAAA,QAAA;AAAA,QAAWtW,2BAAAA,IAAA,OAAG,UACH,sBAAA,CAAA;AAAA,QACU;AAAA,MAAA,GAAA;AAAGlB,cAAAmB;AAAAA,IAAAA,OAAA;AAAAA,WAAAnB,EAAA,EAAA;AAAA,IAAA;AAAAsB,QAAAA;AAAA,QAAAtB,EAAA8yB,EAAAA,MAAAA,oBAAA9yB,UAAAggC,iBAAA;AAPnC,YAAA9+B,2BAAAA,IAAA2nB,KAAAA,oBACSmX,EAAAA,MAAAA,iBACIlN,UAAe,kBACf,UAAA/xB,IACH,OAAAC,IACD,MAAAG,GAE6B,CAAA;AAAAnB,cAAA8yB;AAAA9yB,cAAAggC;AAAAhgC,cAAAsB;AAAAA,IAAAA,OAAA;AAAAA,YAAAtB,EAAA,EAAA;AAAA,IAAA;AAAAuB,QAAAA;AAAA,QAAAvB,EAAAsB,EAAAA,MAAAA,OAAAtB,UAAAc,IAAA;AAxCpCS,YAEHT,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,QAAAA;AAAAA,QA+BAQ;AAAAA,MAAAA,GAOuC;AACxCtB,cAAAsB;AAAAtB,cAAAc;AAAAd,cAAAuB;AAAAA,IAAAA,OAAA;AAAAA,YAAAvB,EAAA,EAAA;AAAA,IAAA;AAzCIuB,WAAAA;AAAAA,EAyCJ;ACjFA,WAAAsiC,2BAAA9jC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAoC,UAAA;AAAA,MAAAyO;AAAAA,MAAAo1B;AAAAA,MAAAnqB;AAAAA,MAAAyX;AAAAA,MAAAzO;AAAAA,MAAAogB;AAAAA,IAAAA,IAAAhjC;AAkBvC,UAAAkjC,6BAAmCtjC,8BAA8B;AAO1CU,UAAAA,KAAAyjC,UAAU,iCAAiC;AAAQvjC,QAAAA;AAAAP,QAAAA,EAAA2iB,CAAAA,MAAAA,cAAA3iB,SAAAijC,8BAAAjjC,EAAA,CAAA,MAAAoxB,uBAAApxB,EAAA2Z,CAAAA,MAAAA,YAAA3Z,EAAA0O,CAAAA,MAAAA,eAAA1O,EAAA,CAAA,MAAA+iC,gBAAAxxB,MAAA;AACrDhR,WAAAA,MAAA;AACL0iC,mCAA0Bb,aAAA;AAAA,UAAA1zB;AAAAA,UAAAiL;AAAAA,UAAA8Y,oBAGF9P,WAAUrjB;AAAAA,UAAA8xB;AAAAA,UAAAzO;AAAAA,UAAA0a,kBAGZ0F,gBAAexxB,QAAA,CAAA;AAAA,QAAA,CACpC;AAAA,MAAC;AACLvR,aAAA2iB;AAAA3iB,aAAAijC;AAAAjjC,aAAAoxB;AAAApxB,aAAA2Z;AAAA3Z,aAAA0O;AAAA,QAAA,CAAA,IAAAq0B,gBAAAxxB;AAAAvR,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;0CAEA0H,GAAAA,cAAmB,EAAA,MAAA,QAAU,CAAA;AAAApI,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAAK,CAAAA,MAAAA,MAAAL,SAAAO,IAAA;AAhBtCK,WAACM,2BAAAA,IAAAE,GAAA,SAAA,EACY,eACF,OAAA,QACP,UAAAF,+BAACiE,GAAAA,YACc,EAAA,WAAA9E,IACF,SAAAE,IAUH,MAAA,SACNC,aACJ,CAAA,GACJ;AAAUR,aAAAK;AAAAL,aAAAO;AAAAP,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAlBVY,WAAAA;AAAAA,EAkBU;ACxCX,WAAAmjC,2BAAAhkC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAoC,UAAA;AAAA,MAAAmxB;AAAAA,MAAAzO;AAAAA,MAAAogB;AAAAA,IAAAA,IAAAhjC;AAYvC,UAAAi6B,iBAAuBC,KAAAA,kBAAkB;AACzC,UAAAgJ,6BAAmCtjC,8BAA8B;AACjE,UAAAwjC,oBAA0BF,2BAA0B1B,oBAC9C0B,2BAA0B1B,kBAAA;AAAA,MAAAvE,MAClBhD,eAAcgD;AAAAA,MAAAra;AAAAA,IAAAA,CAEvB,EAACigB,kBACI;AAKKviC,UAAAA,KAAA8iC,oBAAoB,qBAAqB;AAAiD5iC,QAAAA;AAAA,QAAAP,EAAA2iB,CAAAA,MAAAA,cAAA3iB,SAAAijC,8BAAAjjC,EAAA,CAAA,MAAAoxB,uBAAApxB,EAAA+iC,CAAAA,MAAAA,gBAAAxxB,MAAA;AAIpFhR,WAAAA,MAAA;AACL0iC,mCAA0Bb,aAAA;AAAA,UAAA3P,oBACF9P,WAAUrjB;AAAAA,UAAA8xB;AAAAA,UAAAnS,wBAEN+kB,+BAA0BrhB,UAAU;AAAA,UAACA;AAAAA,UAAA0a,kBAE3C0F,gBAAexxB;AAAAA,QAAAA,CACpC;AAAA,MAAC;AACLvR,aAAA2iB;AAAA3iB,aAAAijC;AAAAjjC,aAAAoxB;AAAA,QAAA,CAAA,IAAA2R,gBAAAxxB;AAAAvR,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;0CACAmf,GAAAA,SAAe,EAAA,OAAA,UAAY,CAAA;AAAA7f,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,SAAAO,IAAA;AAZhCK,iDACe,EAAA,WAAA,wLAEF,SAAAL,IASTC,UACJ,IAAA;AAAMR,aAAAO;AAAAP,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAAK,CAAAA,MAAAA,MAAAL,SAAAY,IAAA;AAhBVC,0CAACO,GACY,SAAA,EAAA,SAAA,MACF,OAAAf,IACPO,UAcJ,IAAA;AAAUZ,aAAAK;AAAAL,aAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAjBVa,WAAAA;AAAAA,EAiBU;ACzCX,WAAAojC,sBAAA;AAAAjkC,UAAAA,IAAAC,uBAAA,CAAA;AACH,UAAAgjC,6BAAmCtjC,8BAA8B;AAAEI,QAAAA;AAAAC,QAAAA,SAAAijC,4BAAA;AAI9CljC,WAAAA,MAAMkjC,2BAA0BT,iBAAA;AAAA,QAAApR,qBAAA,CAAA;AAAA,QAAA0Q,UAAA;AAAA,QAAAS,aAGxB;AAAA,MAAA,CAChB;AAACviC,aAAAijC;AAAAjjC,aAAAD;AAAAA,IAAAA,OAAA;AAAAA,WAAAC,EAAA,CAAA;AAAA,IAAA;AAAAK,QAAAA;AAAA,QAAAL,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACNL,0CAACwf,GAAS,SAAA,EAAA;AAAA7f,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAAO,QAAAA;AAAAP,QAAAA,SAAAD,IAAA;AAGZ,WAAAmB,2BAAA,IAAA,OAXiB,EAAA,WAAA,uDACnB,UAAAY,2BAAA,KAAC0Q,GAAkB,QAAA,EAAA,WAAA,aACF,SAAA,YACA,SAAAzS,IAKbM,UAAAA;AAAAA,QAAAA;AAAAA,QAAU;AAAA,MAAA,EAAA,CAEd,EACJ,CAAA;AAAML,aAAAD;AAAAC,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAXCO,WAAAA;AAAAA,EAWD;ACPH,WAAA2jC,4BAAAnkC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAqC,UAAA;AAAA,MAAAmxB;AAAAA,MAAAzO;AAAAA,MAAAogB;AAAAA,IAAAA,IAAAhjC;AAOxC,UAAAi6B,iBAAuBC,KAAAA,kBAAkB;AACzC,UAAAgJ,6BAAmCtjC,8BAA8B;AACjE,UAAAuxB,mBAAyBmS,+BAA+B;AACxD,UAAAlX,qBAA2BnV,KAAAA,sBAAsB;AAAE3W,QAAAA;AAAAL,QAAAA,EAAAg6B,CAAAA,MAAAA,kBAAAh6B,SAAA2iB,cAAA3iB,EAAA,CAAA,MAAAijC,4BAAA;AAEzBA,WAAAA,2BAA0B1B,oBAC9C0B,2BAA0B1B,kBAAA;AAAA,QAAAvE,MAClBhD,eAAcgD;AAAAA,QAAAra;AAAAA,MAAAA,CAEvB,EAACigB,kBACI;AAAA5iC,aAAAg6B;AAAAh6B,aAAA2iB;AAAA3iB,aAAAijC;AAAAjjC,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AALV,UAAAmjC,oBAA0B9iC;AAO1B,QAAA8jC,0BAAA;AACI,QAAA,CAACrwB,MAAMswB,gBAAgBrB,gBAAesB,YAAa,GAAGD,gBAAgBzhB,WAAUkL,aAAc,CAAC,KAAC,CAC/F/Z,MAAMswB,gBAAgBrB,gBAAeuB,MAAO,GAAGF,gBAAgBzhB,WAAUmL,WAAY,CAAC,GAAC;AAIzE,YAAAvtB,MAAAwiC,gBAAeuB,UAAWvB,gBAAesB,eAAgB,iCAAiC;AAA+B7jC,UAAAA;AAAAR,UAAAA,EAAA2iB,CAAAA,MAAAA,cAAA3iB,EAAAkxB,CAAAA,MAAAA,oBAAAlxB,EAAAoxB,CAAAA,MAAAA,uBAAApxB,SAAAmsB,sBAAAnsB,EAAA,CAAA,MAAA+iC,gBAAAsB,gBAAArkC,EAAA,CAAA,MAAA+iC,gBAAAuB,QAAA;AAKnH9jC,cAAAA,MAAM0wB,kBAAgByM,eAAA;AAAA,UAAAr+B,IAEnBqjB,WAAUrjB;AAAAA,UAAA8xB;AAAAA,UAAAwM,gBAEE3Z,eAAUtB,YAAiC;AAAA,YAAAkL,eAEpCkV,gBAAesB,gBAAqB;AAAA,YAAAvW,aACtCiV,gBAAeuB,UAAA;AAAA,UAC/B,CAAA;AAAA,QAAA,CAAC,EAAAhzB,KAAA,MAAA;AAEN6a,6BAAkBnY,KAAA;AAAA,YAAAsD,MACR;AAAA,YAASC,SACN;AAAA,UAAA,CACZ;AAAA,QAAA,CAAC;AACJvX,eAAA2iB;AAAA3iB,eAAAkxB;AAAAlxB,eAAAoxB;AAAApxB,eAAAmsB;AAAA,UAAA,CAAA,IAAA4W,gBAAAsB;AAAA,UAAA,CAAA,IAAAtB,gBAAAuB;AAAAtkC,gBAAAQ;AAAAA,MAAAA,OAAA;AAAAA,cAAAR,EAAA,EAAA;AAAA,MAAA;AAAAY,UAAAA;AAAA,UAAAZ,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACNE,4CAAC2jC,GAAU,UAAA,EAAA;AAAAvkC,gBAAAY;AAAAA,MAAAA,OAAA;AAAAA,aAAAZ,EAAA,EAAA;AAAA,MAAA;AAAAa,UAAAA;AAAAb,UAAAA,UAAAQ,KAAA;AAnBf,aAAAU,2BAAAA,IAACsR,GAAAA,QACU,EAAA,OAAA,WACD,MAAA,SACG,SAAA,YACA,SAAAhS,KAeTI,UACJ,GAAA,CAAA;AAASZ,gBAAAQ;AAAAR,gBAAAa;AAAAA,MAAAA,OAAA;AAAAA,aAAAb,EAAA,EAAA;AAAA,MAAA;AAAAc,UAAAA;AAAA,UAAAd,EAAAO,EAAAA,MAAAA,OAAAP,UAAAa,IAAA;AAvBbC,4CAACM,GACY,SAAA,EAAA,SAAA,MACF,OAAAb,KACPM,UAqBJ,IAAA;AAAUb,gBAAAO;AAAAP,gBAAAa;AAAAb,gBAAAc;AAAAA,MAAAA,OAAA;AAAAA,aAAAd,EAAA,EAAA;AAAA,MAAA;AAAAe,UAAAA;AAAA,UAAAf,EAAA,EAAA,MAAA2iB,WAAAkL,iBAAA7tB,EAAA2iB,EAAAA,MAAAA,WAAAmL,eAAA9tB,UAAA+iC,iBAAA;AAEThiC,cAAC4hB,WAAUkL,iBAAkBlL,WAAUmL,gBAAiB5sB,+BAACE,GAAAA,WAC/C,OAAA,oCACP,UAACF,+BAAAsR,GAAAA,QAAA,EACU,OAAA,WACD,MAAA,SACG,SAAA,QACA,SAAA,MAAA;AACLuwB,0BAAeyB,cAAA;AAAA,cACX7hB,YAAUkL,eAAA;AACK4W,4BAAAA,kBAAmB9hB,YAAUkL,aAAA;AAAA,UAAA;AAAA,cAC5ClL,YAAUmL,aAAA;AACK4W,4BAAAA,YAAa/hB,YAAUmL,WAAA;AAAA,UAAA;AAAA,QAAA,GAE9C,UAAA5sB,2BAAAA,IAACyjC,GAAAA,UAAQ,CAAA,CAAA,EAAA,CACb,EACJ,CAAA;AAAU,UAAA,EAAA,IAAAhiB,WAAAkL;AAAA,UAAA,EAAA,IAAAlL,WAAAmL;AAAA9tB,gBAAA+iC;AAAA/iC,gBAAAe;AAAAA,MAAAA,OAAA;AAAAA,aAAAf,EAAA,EAAA;AAAA,MAAA;AAAAgB,UAAAA;AAAA,UAAAhB,EAAAc,EAAAA,MAAAA,MAAAd,UAAAe,IAAA;AA1CYC,aACtBF,2BAAAA,KAAAA,qBAAAA,EAAAA,UAAAA;AAAAA,UAAAA;AAAAA,UA0BCC;AAAAA,QAAAA,GAeS;AACXf,gBAAAc;AAAAd,gBAAAe;AAAAf,gBAAAgB;AAAAA,MAAAA,OAAA;AAAAA,aAAAhB,EAAA,EAAA;AAAA,MAAA;AA3CuBmkC,gCAAAA;AAAAA,IAAAA;AA+CzB,UAAA5jC,KAAA4iC,qBAAqBgB;AAAuB3jC,QAAAA;AAAAR,QAAAA,UAAAO,IAAA;AAD1CC,iEACFD,UAA4C,GAAA,CAAA;AAC9CP,cAAAO;AAAAP,cAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,EAAA;AAAA,IAAA;AAFIQ,WAAAA;AAAAA,EAEJ;AAIP,WAAS4jC,gBAAgBQ,GAA2B;AAChD,QAAIA,KAAKl1B,OAAOC,KAAKi1B,CAAC,EAAE39B,WAAW,EACxB29B,QAAAA;AACX,WAAOA,KAAK;AAAA,EAChB;ACnFO,WAAAC,kBAAA9kC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAA2B,UAAA;AAAA,MAAAsE;AAAAA,MAAAugC;AAAAA,IAAAA,IAAA/kC;AAGqC,QAAA,CAE9D+kC,QAAO7iB,WAAA6Z,oBAAA;AAAA,YACFpwB,MAAM,yCAAyC;AAAA,IAAA;AAEzD,UAAAsuB,iBAAuBC,KAAAA,kBAAkB;AAEzC,UAAAgJ,6BAAmCtjC,8BAA8B;AAAEU,QAAAA;AAAA,QAAAL,EAAAg6B,CAAAA,MAAAA,kBAAAh6B,SAAAijC,4BAAA;AACtCA,WAAAA,2BAA0B1B,oBACjD0B,2BAA0B1B,kBAAA;AAAA,QAAAvE,MAClBhD,eAAcgD;AAAAA,MAAAA,CACvB,EAAC2F,oBACI;AAAA3iC,aAAAg6B;AAAAh6B,aAAAijC;AAAAjjC,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAJV,UAAA+kC,uBAA6B1kC;AAIlBE,QAAAA;AAAA,QAAAP,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAGUH,WAAAD,OAAI,0BAA0B;AAACN,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAAR,QAAAA,EAAA+kC,CAAAA,MAAAA,wBAAA/kC,SAAAijC,8BAAAjjC,EAAA,CAAA,MAAAuE,OAAA;AACjC/D,WAAAyiC,8BAA8B8B,uBAC3B9B,MAAAA,2BAA0BT,iBAAA;AAAA,QAAA5yB,eACfrL,QAAK;AAAA,UAAAA;AAAAA,QAAAA,IAAAd;AAAAA,QAAwB2tB,qBAAA,CAAA;AAAA,QAAA0Q,UAAA;AAAA,QAAAS,aAG/B;AAAA,MAChB,CAAA,IAAC9+B;AACSzD,aAAA+kC;AAAA/kC,aAAAijC;AAAAjjC,aAAAuE;AAAAvE,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAIbE,WAACM,2BAAA,IAAA2e,YAAA,EAAc,OAAA,WAAgB,MAAA,SAAU;AAAA7f,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACzC,WAAAQ,2BAAAA,IAACP,GAAAA,YAAiB,EAAA,OAAA,WACG,SAAA,WACE,WAAA,eAAoC,UAAAqN,qBAAAA,YAAe,EAAA,CAAA;AAAahO,aAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,CAAA;AAAA,IAAA;AAAAc,QAAAA;AAAAd,QAAAA,UAAA+kC,sBAAA;AAEtFjkC,WAACikC,CAAAA,wBACE7jC,2BAAAA,IAACP,GAAoB,YAAA,EAAA,SAAA,WAAW,UACjB,oDAAA;AAAaX,cAAA+kC;AAAA/kC,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAAf,QAAAA,UAAAc,IAAA;kDARtB,EAAA,WAAA,qEACVF,UAAAA;AAAAA,QAAAA;AAAAA,QACAC;AAAAA,QAICC;AAAAA,MAAAA,GAIL;AAAMd,cAAAc;AAAAd,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AAAAgB,QAAAA;AAAA,QAAAhB,EAAAQ,EAAAA,MAAAA,MAAAR,UAAAe,IAAA;AArBVC,0CAACK,GAAgB,MAAA,EAAA,WAAAd,IACF,SAAAC,IASXO,UAaJ,IAAA;AAAOf,cAAAQ;AAAAR,cAAAe;AAAAf,cAAAgB;AAAAA,IAAAA,OAAA;AAAAA,WAAAhB,EAAA,EAAA;AAAA,IAAA;AAvBPgB,WAAAA;AAAAA,EAuBO;ACqBR,WAAAgkC,0BAAAjlC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AACN,UAAA;AAAA,MAAAqhC;AAAAA,MAAAC;AAAAA,MAAAp/B;AAAAA,MAAAi7B;AAAAA,MAAA/O;AAAAA,MAAA8C;AAAAA,MAAA9hB;AAAAA,MAAAmyB;AAAAA,MAAAyD,kBAAA5kC;AAAAA,IAAAA,IAAAN;AASIklC,UAAAA,mBAAA5kC,OAAuBoD,gBAAvBpD;AAAuBE,QAAAA;AAAA,QAAAP,EAAA,CAAA,MAAAshC,8BAAAthC,EAAA,CAAA,MAAAmxB,uBAAAnxB,EAAA,CAAA,MAAAuhC,qBAAAvhC,EAAAo9B,CAAAA,MAAAA,aAAAp9B,EAAAqP,CAAAA,MAAAA,WAAArP,EAAAquB,CAAAA,MAAAA,WAAAruB,EAAAwhC,CAAAA,MAAAA,oBAAAxhC,SAAAmC,gBAAA;AAMV,WAAA;AAAA,QAAA+iC,WAAA7D;AAAAA,QAAA9e,OAAA;AAAA,UAAA+e;AAAAA,UAAAC;AAAAA,UAAApQ;AAAAA,UAAAhvB;AAAAA,UAAAi7B;AAAAA,UAAA/O;AAAAA,UAAAhf;AAAAA,UAAAmyB;AAAAA,QAAAA;AAAAA,MAAA;AAYTxhC,aAAAshC;AAAAthC,aAAAmxB;AAAAnxB,aAAAuhC;AAAAvhC,aAAAo9B;AAAAp9B,aAAAqP;AAAArP,aAAAquB;AAAAruB,aAAAwhC;AAAAxhC,aAAAmC;AAAAnC,aAAAO;AAAAA,IAAAA,OAAA;AAAAA,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAEsBF,0CAAC,qBAAqB,EAAA;AAAAR,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,UAAAilC,kBAAA;AAChBA,WAAAA,mBAAoB/jC,2BAAAA,IAAA,aAAA,CAAA,CAAW,IAAEuC;AAAYzD,cAAAilC;AAAAjlC,cAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,UAAAY,IAAA;AAFhE,WAAA;AAAA,QAAAukC,mBACa3kC;AAAAA,QAAsB4kC,yBAChBxkC;AAAAA,QAA6CykC,mBAAA/B;AAAAA,QAAAgC,iBAAAT;AAAAA,MAAA;AAIzE7kC,cAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAAAc,QAAAA;AAAA,QAAAd,EAAA,EAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACe,WAAA;AAAA,QAAA6kC,wBAAArB;AAAAA,QAAAmB,mBAAAvC;AAAAA,QAAA0C,cAAA3B;AAAAA,QAAA4B,oBAAA1B;AAAAA,MAAA;AAKf/jC,cAAAc;AAAAA,IAAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAAe,QAAAA;AAAA,QAAAf,EAAA,EAAA,MAAAshC,2BAAApH,WAAAl6B,EAAA,EAAA,MAAAO,MAAAP,EAAA,EAAA,MAAAa,IAAA;AA5BE,WAAA;AAAA,QAAAuZ,KACE;AAAA,QAAmB8f,SACfoH,2BAA0BpH;AAAAA,QAAAwL,UACzBnlC;AAAAA,QAYTolC,UACS9kC;AAAAA,QAMT+kC,gBACe9kC;AAAAA,MAKf;AACJ,QAAA,EAAA,IAAAwgC,2BAAApH;AAAAl6B,cAAAO;AAAAP,cAAAa;AAAAb,cAAAe;AAAAA,IAAAA,OAAA;AAAAA,WAAAf,EAAA,EAAA;AAAA,IAAA;AA7BMe,WAAAA;AAAAA,EA6BN;AAGE,WAAA8kC,cAAA;AAAA7lC,UAAAA,IAAAC,uBAAA,EAAA;AAEH,UAAAgiB,aAAmBC,KAAAA,wBAAwB;AACtCD,QAAAA,CAAAA,WAAU6Z,oBAAA;AAAA,YACLpwB,MAAM,yCAAyC;AAAA,IAAA;AAEzD,UAAAsuB,iBAAuBC,KAAAA,kBAAkB;AAEzC,UAAAgJ,6BAAmCtjC,8BAA8B;AAAEI,QAAAA;AAAA,QAAAC,EAAAg6B,CAAAA,MAAAA,kBAAAh6B,SAAAijC,4BAAA;AACtCA,WAAAA,2BAA0B1B,oBACjD0B,2BAA0B1B,kBAAA;AAAA,QAAAvE,MAClBhD,eAAcgD;AAAAA,MAAAA,CACvB,EAAC2F,oBACI;AAAA3iC,aAAAg6B;AAAAh6B,aAAAijC;AAAAjjC,aAAAD;AAAAA,IAAAA,OAAA;AAAAA,WAAAC,EAAA,CAAA;AAAA,IAAA;AAJV,UAAA+kC,uBAA6BhlC;AAMzB,QAAA,CAACkiB,WAAUsa,gBAAiBta,WAAUO,eAAA,CAAA,GAAkBvb,SAAY,GAAA;AAAA,aAAA;AAAA,IAAA;AAAA5G,QAAAA;AAAAE,QAAAA;AAAA,QAAAP,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AAOhEL,0CAACM,GAAoB,YAAA,EAAA,SAAA,aAAwB,WAAA,aAAa,UAAoB,wBAAA;0CAC7EA,GAAAA,cAAW,UAGZ,kIAAA,CAAA;AAAaX,aAAAK;AAAAL,aAAAO;AAAAA,IAAAA,OAAA;AAAAF,WAAAL,EAAA,CAAA;AAAAO,WAAAP,EAAA,CAAA;AAAA,IAAA;AAAAQ,QAAAA;AAAA,QAAAR,EAAA+kC,CAAAA,MAAAA,wBAAA/kC,SAAAijC,4BAAA;AACZ8B,WAAAA,wDAAyBvyB,WACb,EAAA,SAAAywB,8BAA8B8B,uBAC3B9B,MAAAA,2BAA0BT,iBAAA;AAAA,QAAApR,qBAAA,CAAA;AAAA,QAAA0Q,UAAA;AAAA,QAAAS,aAGjB;AAAA,MAAA,CAChB,IAAC9+B,QAEN,UAAA;AAAA,QAAAvC,2BAAA,IAAC2e,GAAS,SAAA,EAAA;AAAA,QAAA;AAAA,MAAA,GACd;AAAS7f,aAAA+kC;AAAA/kC,aAAAijC;AAAAjjC,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAA,QAAAZ,EAAA,CAAA,MAAAS,OAAAC,IAAA,2BAAA,GAAA;AACTE,WAACM,2BAAA,IAAAP,eAAA,EAAkB,OAAA,aAAa,UAEhC,qDAAA;AAAaX,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAAb,QAAAA,SAAAQ,IAAA;AAnBjB,WAAAsB,2BAAA,KAAC8Q,GACc,OAAA,EAAA,WAAA,2EACXvS,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,QAICC;AAAAA,QAUDI;AAAAA,MAAAA,GAGJ;AAAQZ,aAAAQ;AAAAR,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AApBRa,WAAAA;AAAAA,EAoBQ;AC1IHilC,QAAAA,mBAAmBA,CAACC,iBACAC,qBAA4C,CAAA,GAC5CC,qBAC5B;AAEKC,UAAAA,iBAAiBA,CAACvO,MAA2B;AAC/CrE,WAAAA,uBAAuBqE,EAAEzd,UAAwB;AAC/C6T,QAAAA,gBAAgBze,QAAQ42B,cAAc;AAAA,IAC5C;AAEAF,uBAAmB12B,QAAQ42B,cAAc;AAEzC,UAAM9pB,SAAS+pB,KAAAA,oBAAoBJ,iBAAiBC,oBAAoB,CAAA,GAAIC,gBAAgB;AAG5F7pB,WAAOgqB,KAAK,CAAC7rB,GAAGC,MAAMurB,gBAAgBM,UAAU1O,OAAKA,EAAEr4B,OAAOib,EAAEjb,EAAE,IAAIymC,gBAAgBM,UAAU1O,CAAAA,MAAKA,EAAEr4B,OAAOkb,EAAElb,EAAE,CAAC;AACnHuT,YAAQuT,MAAM,sBAAsB;AAAA,MAChC2f;AAAAA,MACAC;AAAAA,MACA5pB;AAAAA,IAAAA,CACH;AAEMA,WAAAA;AAAAA,EACX;AChCO,WAAAkqB,uBAAAvmC,IAAA;AAAAC,UAAAA,IAAAC,uBAAA,EAAA;AAAgC,UAAA;AAAA,MAAAP,MAAA6mC;AAAAA,IAAAA,IAAAxmC;AAGnC,UAAAkiB,aAAmBC,KAAAA,wBAAwB;AAC3CxiB,UAAAA,OAAa8mC,eAAeD,QAAQ;AAAElmC,QAAAA;AAAA,QAAAL,EAAAiiB,CAAAA,MAAAA,cAAAjiB,SAAAumC,UAAA;AACVtkB,WAAAA,WAAUwkB,uBAAwBF,QAAQ;AAACvmC,aAAAiiB;AAAAjiB,aAAAumC;AAAAvmC,aAAAK;AAAAA,IAAAA,OAAA;AAAAA,WAAAL,EAAA,CAAA;AAAA,IAAA;AAAvE,UAAAoxB,sBAA4B/wB;AAC5B,UAAAqmC,mBAAyB/mC,8BAA8B;AAEjC,UAAAY,KAA0B,6BAAGb;AAAIc,QAAAA;AAAAR,QAAAA,SAAAO,IAAA;AAAnD,WAAAW,2BAAAA,IAACu/B,KAAAA,WAAiB,EAAA,OAAAlgC,GAAoC,CAAA;AAAAP,aAAAO;AAAAP,aAAAQ;AAAAA,IAAAA,OAAA;AAAAA,WAAAR,EAAA,CAAA;AAAA,IAAA;AAAAY,QAAAA;AAAAZ,QAAAA,EAAA0mC,CAAAA,MAAAA,oBAAA1mC,SAAAoxB,uBAAApxB,EAAA,CAAA,MAAAN,MAAA;0CACrD8S,aAAkB,WAAA,QAAiB,SAAA,YACtB,MAAA,SACG,SAAA,MAAA;AACLk0B,yBAAgBlE,iBAAA;AAAA,UAAA5yB,eAAA;AAAA,YAAAlQ;AAAAA,YAAAD,MACiBuhB,eAAUthB,IAAI;AAAA,UAAC;AAAA,UAAA0xB;AAAAA,UAAA0Q,UAAA;AAAA,UAAAS,aAG/B;AAAA,QAAA,CAChB;AAAA,MAAA,GACF,UAEX,UAAA;AAASviC,aAAA0mC;AAAA1mC,aAAAoxB;AAAApxB,aAAAN;AAAAM,aAAAY;AAAAA,IAAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAAa,QAAAA;AAAA,QAAAb,EAAAQ,CAAAA,MAAAA,MAAAR,UAAAY,IAAA;AACP,WAAAkB,2BAAA,KAAA,OAdiB,EAAA,WAAA,kCACnBtB,UAAAA;AAAAA,QAAAA;AAAAA,QACAI;AAAAA,MAAAA,GAYJ;AAAMZ,aAAAQ;AAAAR,cAAAY;AAAAZ,cAAAa;AAAAA,IAAAA,OAAA;AAAAA,WAAAb,EAAA,EAAA;AAAA,IAAA;AAdCa,WAAAA;AAAAA,EAcD;AAQV,WAAS2lC,eAAe9mC,MAAsB;AACpCinC,UAAAA,WAAWjnC,KAAKmsB,MAAM,GAAG;AACxB8a,WAAAA,SAASA,SAAS1/B,SAAS,CAAC;AAAA,EACvC;;;;;;;;;;;;;;;"}
|