{"version":3,"file":"CMHeaderActions.mjs","sources":["../../../admin/src/components/CMHeaderActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { skipToken } from '@reduxjs/toolkit/query';\nimport {\n  useNotification,\n  useQueryParams,\n  Table,\n  useAPIErrorHandler,\n  useForm,\n} from '@strapi/admin/strapi-admin';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport {\n  type DocumentActionComponent,\n  type DocumentActionProps,\n  unstable_useDocument as useDocument,\n  unstable_useDocumentActions as useDocumentActions,\n  buildValidParams,\n  HeaderActionProps,\n} from '@strapi/content-manager/strapi-admin';\nimport {\n  Flex,\n  Status,\n  Typography,\n  Button,\n  Modal,\n  Field,\n  SingleSelect,\n  SingleSelectOption,\n  Dialog,\n  type StatusVariant,\n  Box,\n  Link,\n} from '@strapi/design-system';\nimport { WarningCircle, ListPlus, Trash, Earth, Cross, Plus, Sparkle, Loader } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAILocalizationJobsPolling } from '../hooks/useAILocalizationJobsPolling';\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs';\nimport { useLazyGetFillFromLocaleDataQuery } from '../services/fillFromLocale';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetManyDraftRelationCountQuery } from '../services/relations';\nimport { useGetSettingsQuery } from '../services/settings';\nimport { getTranslation } from '../utils/getTranslation';\nimport { capitalize } from '../utils/strings';\n\nimport { BulkLocaleActionModal, type LocaleValidationErrors } from './BulkLocaleActionModal';\n\nimport type { Locale } from '../../../shared/contracts/locales';\nimport type { I18nBaseQuery } from '../types';\nimport type { Modules } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * LocalePickerAction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocaleOptionProps {\n  isDraftAndPublishEnabled: boolean;\n  locale: Locale;\n  status: 'draft' | 'published' | 'modified';\n  entryExists: boolean;\n  translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n}\n\nconst statusVariants: Record<LocaleOptionProps['status'], StatusVariant> = {\n  draft: 'secondary',\n  published: 'success',\n  modified: 'alternative',\n};\n\nconst LocaleOption = ({\n  isDraftAndPublishEnabled,\n  locale,\n  status,\n  entryExists,\n}: LocaleOptionProps) => {\n  const { formatMessage } = useIntl();\n\n  if (!entryExists) {\n    return formatMessage(\n      {\n        id: getTranslation('CMEditViewLocalePicker.locale.create'),\n        defaultMessage: 'Create <bold>{locale}</bold> locale',\n      },\n      {\n        bold: (locale: React.ReactNode) => <b>{locale}</b>,\n        locale: locale.name,\n      }\n    );\n  }\n\n  return (\n    <Flex width=\"100%\" gap={1} justifyContent=\"space-between\">\n      <Typography>{locale.name}</Typography>\n      {isDraftAndPublishEnabled ? (\n        <Status\n          display=\"flex\"\n          paddingLeft=\"6px\"\n          paddingRight=\"6px\"\n          paddingTop=\"2px\"\n          paddingBottom=\"2px\"\n          size=\"S\"\n          variant={statusVariants[status]}\n        >\n          <Typography tag=\"span\" variant=\"pi\" fontWeight=\"bold\">\n            {capitalize(status)}\n          </Typography>\n        </Status>\n      ) : null}\n    </Flex>\n  );\n};\n\nconst LocaleOptionStartIcon = ({\n  entryWithLocaleExists,\n  translationStatus,\n  index,\n}: {\n  entryWithLocaleExists: boolean;\n  translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n  index?: number;\n}) => {\n  const isAiAvailable = useAIAvailability();\n\n  if (!entryWithLocaleExists) {\n    return <Plus />;\n  }\n\n  if (isAiAvailable && index !== 0 && translationStatus === 'failed') {\n    return <WarningCircle fill=\"warning600\" />;\n  }\n\n  return null;\n};\n\nconst LocalePickerAction = ({\n  document,\n  meta,\n  model,\n  collectionType,\n  documentId,\n}: HeaderActionProps) => {\n  const { formatMessage } = useIntl();\n  const [{ query }, setQuery] = useQueryParams<I18nBaseQuery>();\n  const { hasI18n, canCreate, canRead } = useI18n();\n  const { data: locales = [] } = useGetLocalesQuery();\n  const currentDesiredLocale = query.plugins?.i18n?.locale;\n  const { schema } = useDocument({\n    model,\n    collectionType,\n    documentId,\n    params: { locale: currentDesiredLocale },\n  });\n  const { data: jobData } = useGetAILocalizationJobsByDocumentQuery({\n    documentId: documentId!,\n    model: model!,\n    collectionType: collectionType!,\n  });\n  const { data: settings } = useGetSettingsQuery();\n  const isAiAvailable = useAIAvailability();\n\n  const handleSelect = React.useCallback(\n    (value: string) => {\n      setQuery(\n        {\n          plugins: {\n            ...query.plugins,\n            i18n: {\n              locale: value,\n            },\n          },\n        },\n        'push',\n        true\n      );\n    },\n    [query.plugins, setQuery]\n  );\n\n  // Non-localized prefill is handled in `useDocument.getInitialFormValues`\n  // so inherited values persist in initial form state, even after form resets or re-initialization.\n  // Doing this here with setValues would not persist if the cache is reused.\n\n  React.useEffect(() => {\n    if (!Array.isArray(locales) || !hasI18n) {\n      return;\n    }\n    /**\n     * Handle the case where the current locale query param doesn't exist\n     * in the list of available locales, so we redirect to the default locale\n     * when the user has access to it, or the first locale they can access.\n     */\n    const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n    const accessibleLocales = locales.filter((locale) => canRead.includes(locale.code));\n    const targetLocale =\n      accessibleLocales.find((locale) => locale.isDefault) ?? accessibleLocales[0];\n    if (!doesLocaleExist && targetLocale?.code) {\n      handleSelect(targetLocale.code);\n    }\n  }, [handleSelect, hasI18n, locales, currentDesiredLocale, canRead]);\n\n  const currentLocale = Array.isArray(locales)\n    ? locales.find((locale) => locale.code === currentDesiredLocale)\n    : undefined;\n\n  // Use meta.availableLocales instead of document.localizations\n  // meta.availableLocales contains all locales for the document, even when creating new locales\n  const availableLocales = meta?.availableLocales ?? [];\n  const documentLocalizations = document?.localizations ?? [];\n\n  // Prefer meta.availableLocales as it's more reliable, fallback to document.localizations\n  const allLocalizations = availableLocales.length > 0 ? availableLocales : documentLocalizations;\n\n  const allCurrentLocales = [\n    { status: getDocumentStatus(document, meta), locale: currentLocale?.code },\n    ...allLocalizations,\n  ];\n\n  if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n    return null;\n  }\n\n  const displayedLocales = locales.filter((locale) => {\n    /**\n     * If you can read we allow you to see the locale exists\n     * otherwise the locale is hidden.\n     */\n    return canRead.includes(locale.code);\n  });\n\n  const localesSortingDefaultFirst = displayedLocales.sort((a, b) =>\n    a.isDefault ? -1 : b.isDefault ? 1 : 0\n  );\n\n  return {\n    label: formatMessage({\n      id: getTranslation('Settings.locales.modal.locales.label'),\n      defaultMessage: 'Locales',\n    }),\n    options: localesSortingDefaultFirst.map((locale, index) => {\n      const entryWithLocaleExists = allCurrentLocales.some((doc) => doc.locale === locale.code);\n\n      const currentLocaleDoc = allCurrentLocales.find((doc) =>\n        'locale' in doc ? doc.locale === locale.code : false\n      );\n\n      const permissionsToCheck = currentLocaleDoc ? canRead : canCreate;\n\n      if (isAiAvailable && settings?.data?.aiLocalizations) {\n        return {\n          _render: () => (\n            <React.Fragment key={index}>\n              <SingleSelectOption\n                disabled={!permissionsToCheck.includes(locale.code)}\n                key={locale.code}\n                startIcon={\n                  <LocaleOptionStartIcon\n                    entryWithLocaleExists={entryWithLocaleExists}\n                    translationStatus={jobData?.data?.status}\n                    index={index}\n                  />\n                }\n                value={locale.code}\n              >\n                <LocaleOption\n                  isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n                  locale={locale}\n                  status={currentLocaleDoc?.status}\n                  entryExists={entryWithLocaleExists}\n                />\n              </SingleSelectOption>\n              {localesSortingDefaultFirst.length > 1 && index === 0 && (\n                <Box paddingRight={4} paddingLeft={4} paddingTop={2} paddingBottom={2}>\n                  <Typography variant=\"sigma\">\n                    {formatMessage({\n                      id: getTranslation('CMEditViewLocalePicker.locale.ai-translations'),\n                      defaultMessage: 'AI Translations',\n                    })}\n                  </Typography>\n                </Box>\n              )}\n            </React.Fragment>\n          ),\n        };\n      }\n\n      return {\n        disabled: !permissionsToCheck.includes(locale.code),\n        value: locale.code,\n        label: (\n          <LocaleOption\n            isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n            locale={locale}\n            status={currentLocaleDoc?.status}\n            entryExists={entryWithLocaleExists}\n            translationStatus={jobData?.data?.status}\n          />\n        ),\n        startIcon: <LocaleOptionStartIcon entryWithLocaleExists={entryWithLocaleExists} />,\n      };\n    }),\n    customizeContent: () => currentLocale?.name,\n    onSelect: handleSelect,\n    value: currentLocale,\n  };\n};\n\ntype UseDocument = typeof useDocument;\n\nconst getDocumentStatus = (\n  document: ReturnType<UseDocument>['document'],\n  meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n  const docStatus = document?.status;\n  const statuses = meta?.availableStatus ?? [];\n\n  /**\n   * Creating an entry\n   */\n  if (!docStatus) {\n    return 'draft';\n  }\n\n  /**\n   * We're viewing a draft, but the document could have a published version\n   */\n  if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n    return 'published';\n  }\n\n  return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AISettingsStatusAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst AITranslationStatusIcon = styled(Status)<{ $isAISettingEnabled: boolean }>`\n  display: flex;\n  gap: ${({ theme }) => theme.spaces[1]};\n  justify-content: center;\n  align-items: center;\n  height: 3.2rem;\n  width: 3.2rem;\n\n  // Disabled state\n  ${({ $isAISettingEnabled, theme }) =>\n    !$isAISettingEnabled &&\n    `\n    background-color: ${theme.colors.neutral150};\n  `}\n\n  svg {\n    ${({ $isAISettingEnabled, theme }) =>\n      !$isAISettingEnabled &&\n      `\n        fill: ${theme.colors.neutral300};\n      `}\n  }\n`;\n\nconst SpinningLoader = styled(Loader)`\n  @keyframes spin {\n    from {\n      transform: rotate(0deg);\n    }\n    to {\n      transform: rotate(360deg);\n    }\n  }\n\n  animation: spin 2s linear infinite;\n`;\n\nconst AITranslationStatusAction = ({ documentId, model, collectionType }: HeaderActionProps) => {\n  const { formatMessage } = useIntl();\n  const isAIAvailable = useAIAvailability();\n  const { data: settings } = useGetSettingsQuery();\n  const isAISettingEnabled = settings?.data?.aiLocalizations;\n  const { hasI18n } = useI18n();\n\n  // Poll for AI localizations jobs when AI is enabled and we have a documentId\n  const { status } = useAILocalizationJobsPolling({\n    documentId,\n    model,\n    collectionType,\n  });\n  const statusVariant = (() => {\n    if (status === 'failed') {\n      return 'warning';\n    }\n\n    if (isAISettingEnabled) {\n      return 'alternative';\n    }\n\n    return 'neutral';\n  })();\n\n  // Do not display this action when i18n is not available\n  if (!hasI18n) {\n    return null;\n  }\n\n  // Do not display this action when AI is not available\n  if (!isAIAvailable) {\n    return null;\n  }\n\n  return {\n    _status: {\n      message: (\n        <Flex\n          height=\"100%\"\n          alignItems=\"center\"\n          aria-label={formatMessage({\n            id: getTranslation('CMEditViewAITranslation.status-aria-label'),\n            defaultMessage: 'AI Translation Status',\n          })}\n        >\n          <AITranslationStatusIcon\n            $isAISettingEnabled={Boolean(isAISettingEnabled)}\n            variant={statusVariant}\n            size=\"S\"\n          >\n            {status === 'processing' ? <SpinningLoader /> : <Sparkle />}\n          </AITranslationStatusIcon>\n        </Flex>\n      ),\n      tooltip: (\n        <Flex direction=\"column\" padding={4} alignItems=\"flex-start\" width=\"25rem\">\n          <Typography variant=\"pi\" fontWeight=\"600\">\n            {formatMessage(\n              {\n                id: getTranslation('CMEditViewAITranslation.status-title'),\n                defaultMessage:\n                  '{enabled, select, true {AI translation enabled} false {AI translation disabled} other {AI translation disabled}}',\n              },\n              { enabled: isAISettingEnabled }\n            )}\n          </Typography>\n          <Typography variant=\"pi\" paddingTop={1} paddingBottom={3}>\n            {formatMessage({\n              id: getTranslation('CMEditViewAITranslation.status-description'),\n              defaultMessage:\n                'Our AI translates content in all locales each time you save a modification in the default locale.',\n            })}\n          </Typography>\n          <Link\n            fontSize=\"inherit\"\n            tag={NavLink}\n            to=\"/settings/internationalization\"\n            style={{ alignSelf: 'flex-end' }}\n          >\n            <Typography variant=\"pi\" textAlign=\"right\">\n              {formatMessage(\n                {\n                  id: getTranslation('CMEditViewAITranslation.settings-link'),\n                  defaultMessage:\n                    '{enabled, select, true {Disable it in settings} false {Enable it in settings} other {Enable it in settings}}',\n                },\n                { enabled: isAISettingEnabled }\n              )}\n            </Typography>\n          </Link>\n        </Flex>\n      ),\n    },\n  };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FillFromAnotherLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst FillFromAnotherLocaleAction = ({\n  documentId,\n  meta,\n  model,\n  collectionType,\n}: HeaderActionProps) => {\n  const { formatMessage } = useIntl();\n  const { toggleNotification } = useNotification();\n  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n  const [{ query }] = useQueryParams<I18nBaseQuery>();\n  const { hasI18n } = useI18n();\n  const currentDesiredLocale = query.plugins?.i18n?.locale;\n  const [localeSelected, setLocaleSelected] = React.useState<string | null>(null);\n  const setValues = useForm('FillFromAnotherLocale', (state) => state.setValues);\n\n  const [getFillFromLocaleData, { isLoading: isFillFromLocaleLoading }] =\n    useLazyGetFillFromLocaleDataQuery();\n  const { data: locales = [] } = useGetLocalesQuery();\n\n  const isAIAvailable = useAIAvailability();\n  const { data: settings } = useGetSettingsQuery();\n  const isAISettingEnabled = settings?.data?.aiLocalizations;\n\n  const availableLocales = Array.isArray(locales)\n    ? locales.filter((locale) => meta?.availableLocales.some((l) => l.locale === locale.code))\n    : [];\n\n  const fillFromLocale = (onClose: () => void) => async () => {\n    if (!localeSelected || !currentDesiredLocale) {\n      return;\n    }\n\n    try {\n      const { data } = await getFillFromLocaleData({\n        model,\n        documentId,\n        sourceLocale: localeSelected,\n        targetLocale: currentDesiredLocale,\n        collectionType: collectionType as 'collection-types' | 'single-types',\n      }).unwrap();\n\n      if (data) {\n        setValues(data);\n      }\n\n      onClose();\n    } catch (err) {\n      toggleNotification({\n        type: 'danger',\n        message: formatAPIError(err as Parameters<typeof formatAPIError>[0]),\n      });\n    }\n  };\n\n  if (!hasI18n) {\n    return null;\n  }\n\n  // Do not display this action when AI is available and AI translations are enabled\n  if (isAIAvailable && isAISettingEnabled) {\n    return null;\n  }\n\n  return {\n    type: 'icon',\n    icon: <Earth />,\n    disabled: availableLocales.length === 0,\n    label: formatMessage({\n      id: getTranslation('CMEditViewCopyLocale.copy-text'),\n      defaultMessage: 'Fill in from another locale',\n    }),\n    dialog: {\n      type: 'dialog',\n      title: formatMessage({\n        id: getTranslation('CMEditViewCopyLocale.dialog.title'),\n        defaultMessage: 'Confirmation',\n      }),\n      content: ({ onClose }: { onClose: () => void }) => (\n        <>\n          <Dialog.Body>\n            <Flex direction=\"column\" gap={3}>\n              <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n              <Typography textAlign=\"center\">\n                {formatMessage({\n                  id: getTranslation('CMEditViewCopyLocale.dialog.body'),\n                  defaultMessage:\n                    'Your current content will be erased and filled by the content of the selected locale:',\n                })}\n              </Typography>\n              <Field.Root width=\"100%\">\n                <Field.Label>\n                  {formatMessage({\n                    id: getTranslation('CMEditViewCopyLocale.dialog.field.label'),\n                    defaultMessage: 'Locale',\n                  })}\n                </Field.Label>\n                <SingleSelect\n                  value={localeSelected}\n                  placeholder={formatMessage({\n                    id: getTranslation('CMEditViewCopyLocale.dialog.field.placeholder'),\n                    defaultMessage: 'Select one locale...',\n                  })}\n                  // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n                  onChange={(value) => setLocaleSelected(value)}\n                >\n                  {availableLocales.map((locale) => (\n                    <SingleSelectOption key={locale.code} value={locale.code}>\n                      {locale.name}\n                    </SingleSelectOption>\n                  ))}\n                </SingleSelect>\n              </Field.Root>\n            </Flex>\n          </Dialog.Body>\n          <Dialog.Footer>\n            <Flex gap={2} width=\"100%\">\n              <Button\n                flex=\"auto\"\n                variant=\"tertiary\"\n                onClick={onClose}\n                disabled={isFillFromLocaleLoading}\n              >\n                {formatMessage({\n                  id: getTranslation('CMEditViewCopyLocale.cancel-text'),\n                  defaultMessage: 'No, cancel',\n                })}\n              </Button>\n              <Button\n                flex=\"auto\"\n                variant=\"success\"\n                onClick={fillFromLocale(onClose)}\n                loading={isFillFromLocaleLoading}\n                disabled={isFillFromLocaleLoading}\n              >\n                {formatMessage({\n                  id: getTranslation('CMEditViewCopyLocale.submit-text'),\n                  defaultMessage: 'Yes, fill in',\n                })}\n              </Button>\n            </Flex>\n          </Dialog.Footer>\n        </>\n      ),\n    },\n  };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteLocaleAction: DocumentActionComponent = ({\n  document,\n  documentId,\n  model,\n  collectionType,\n}) => {\n  const { formatMessage } = useIntl();\n  const navigate = useNavigate();\n  const { toggleNotification } = useNotification();\n  const { delete: deleteAction, isLoading } = useDocumentActions();\n  const { hasI18n, canDelete } = useI18n();\n\n  // Get the current locale object, using the URL instead of document so it works while creating\n  const [{ query }] = useQueryParams<I18nBaseQuery>();\n  const { data: locales = [] } = useGetLocalesQuery();\n  const currentDesiredLocale = query.plugins?.i18n?.locale;\n  const locale = !('error' in locales) && locales.find((loc) => loc.code === currentDesiredLocale);\n\n  if (!hasI18n) {\n    return null;\n  }\n\n  return {\n    disabled:\n      (document?.locale && !canDelete.includes(document.locale)) || !document || !document.id,\n    position: ['header', 'table-row'],\n    label: formatMessage(\n      {\n        id: getTranslation('actions.delete.label'),\n        defaultMessage: 'Delete entry ({locale})',\n      },\n      { locale: locale && locale.name }\n    ),\n    icon: <StyledTrash />,\n    variant: 'danger',\n    dialog: {\n      type: 'dialog',\n      title: formatMessage({\n        id: getTranslation('actions.delete.dialog.title'),\n        defaultMessage: 'Confirmation',\n      }),\n      content: (\n        <Flex direction=\"column\" gap={2}>\n          <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n          <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n            {formatMessage({\n              id: getTranslation('actions.delete.dialog.body'),\n              defaultMessage: 'Are you sure?',\n            })}\n          </Typography>\n        </Flex>\n      ),\n      loading: isLoading,\n      onConfirm: async () => {\n        const unableToDelete =\n          // We are unable to delete a collection type without a document ID\n          // & unable to delete generally if there is no document locale\n          (collectionType !== 'single-types' && !documentId) || !document?.locale;\n\n        if (unableToDelete) {\n          console.error(\n            \"You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue.\"\n          );\n\n          toggleNotification({\n            message: formatMessage({\n              id: getTranslation('actions.delete.error'),\n              defaultMessage: 'An error occurred while trying to delete the document locale.',\n            }),\n            type: 'danger',\n          });\n\n          return;\n        }\n\n        const res = await deleteAction({\n          documentId,\n          model,\n          collectionType,\n          params: { locale: document.locale },\n        });\n\n        if (!('error' in res)) {\n          navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n        }\n      },\n    },\n  };\n};\n\nexport type LocaleStatus = {\n  locale: string;\n  status: Modules.Documents.Params.PublicationStatus.Kind | 'modified';\n};\n\ninterface ExtendedDocumentActionProps extends DocumentActionProps {\n  action?: 'bulk-publish' | 'bulk-unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleAction\n *\n * This component is used to handle bulk publish and unpublish actions on locales.\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkLocaleAction: DocumentActionComponent = ({\n  document,\n  documentId,\n  model,\n  collectionType,\n  action,\n  meta,\n}: ExtendedDocumentActionProps) => {\n  const locale = document?.locale ?? null;\n  const [{ query }] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n  const params = React.useMemo(() => buildValidParams(query), [query]);\n  const isOnPublishedTab = query.status === 'published';\n\n  const { formatMessage } = useIntl();\n  const { hasI18n, canPublish } = useI18n();\n  const { toggleNotification } = useNotification();\n  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n  const [selectedRows, setSelectedRows] = React.useState<Array<LocaleStatus & { id: string }>>([]);\n  const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] =\n    React.useState<boolean>(false);\n\n  const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } =\n    useDocumentActions();\n\n  const { schema, validate } = useDocument(\n    {\n      model,\n      collectionType,\n      documentId,\n      params: {\n        locale,\n      },\n    },\n    {\n      // No need to fetch the document, the data is already available in the `document` prop\n      skip: true,\n    }\n  );\n\n  const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? undefined : skipToken);\n\n  const headers = [\n    {\n      label: formatMessage({\n        id: 'global.name',\n        defaultMessage: 'Name',\n      }),\n      name: 'name',\n    },\n    {\n      label: formatMessage({\n        id: getTranslation('CMEditViewBulkLocale.status'),\n        defaultMessage: 'Status',\n      }),\n      name: 'status',\n    },\n    {\n      label: formatMessage({\n        id: getTranslation('CMEditViewBulkLocale.publication-status'),\n        defaultMessage: 'Publication Status',\n      }),\n      name: 'publication-status',\n    },\n  ];\n\n  // Extract the rows for the bulk locale publish modal and any validation\n  // errors per locale\n  const [rows, validationErrors] = React.useMemo<[LocaleStatus[], LocaleValidationErrors]>(() => {\n    if (!document) {\n      return [[], {}];\n    }\n\n    const metaLocalizations = (meta?.availableLocales ?? []).map((locale) => ({\n      locale: locale.locale,\n      status: (locale.status ?? 'draft') as LocaleStatus['status'],\n    }));\n\n    const documentLocalizations = (\n      (document.localizations ?? []) as Array<{\n        locale?: string | null;\n        status?: Modules.Documents.Params.PublicationStatus.Kind | 'modified' | null;\n      }>\n    ).map((doc) => ({\n      locale: doc.locale ?? undefined,\n      status: (doc.status ?? 'draft') as LocaleStatus['status'],\n    }));\n\n    const localesMap = new Map<string, LocaleStatus>();\n\n    metaLocalizations.forEach(({ locale, status }) => {\n      if (locale) {\n        localesMap.set(locale, { locale, status });\n      }\n    });\n\n    documentLocalizations.forEach(({ locale, status }) => {\n      if (locale) {\n        localesMap.set(locale, { locale, status });\n      }\n    });\n\n    // Build the rows for the bulk locale publish modal by combining the current\n    // document with all the available locales from the document meta\n    const locales: LocaleStatus[] = [];\n\n    if (document?.locale) {\n      locales.push({\n        locale: document.locale,\n        status: (document.status ?? 'draft') as LocaleStatus['status'],\n      });\n    }\n\n    locales.push(\n      ...Array.from(localesMap.entries())\n        .filter(([locale]) => locale !== document?.locale)\n        .map(([, value]) => value)\n    );\n\n    if (locales.length === 0 && document?.locale) {\n      locales.push({\n        locale: document.locale,\n        status: (document.status ?? 'draft') as LocaleStatus['status'],\n      });\n    }\n\n    // Validate the current document locale only. Other locales have minimal\n    // data populated for performance reasons and will be validated server-side\n    // during the actual bulk publish operation.\n    const errors: LocaleValidationErrors = {};\n    if (document.locale) {\n      const validation = validate(document as Modules.Documents.AnyDocument);\n      if (validation !== null) {\n        errors[document.locale] = validation;\n      }\n    }\n\n    return [locales, errors];\n  }, [document, meta?.availableLocales, validate]);\n\n  const isBulkPublish = action === 'bulk-publish';\n  const localesForAction = selectedRows.reduce((acc: string[], selectedRow: LocaleStatus) => {\n    const isValidLocale =\n      // Validation errors are irrelevant if we are trying to unpublish\n      !isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale);\n\n    const shouldAddLocale = isBulkPublish\n      ? selectedRow.status !== 'published' && isValidLocale\n      : selectedRow.status !== 'draft' && isValidLocale;\n\n    if (shouldAddLocale) {\n      acc.push(selectedRow.locale);\n    }\n\n    return acc;\n  }, []);\n\n  // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately\n  // see https://www.notion.so/strapi/Count-draft-relations-56901b492efb45ab90d42fe975b32bd8?pvs=4\n  const enableDraftRelationsCount = false;\n  const {\n    data: draftRelationsCount = 0,\n    isLoading: isDraftRelationsLoading,\n    error: isDraftRelationsError,\n  } = useGetManyDraftRelationCountQuery(\n    {\n      model,\n      documentIds: [documentId!],\n      locale: localesForAction,\n    },\n    {\n      skip: !enableDraftRelationsCount || !documentId || localesForAction.length === 0,\n    }\n  );\n\n  React.useEffect(() => {\n    if (isDraftRelationsError) {\n      toggleNotification({\n        type: 'danger',\n        message: formatAPIError(isDraftRelationsError),\n      });\n    }\n  }, [isDraftRelationsError, toggleNotification, formatAPIError]);\n\n  if (!schema?.options?.draftAndPublish) {\n    return null;\n  }\n\n  if (!hasI18n) {\n    return null;\n  }\n\n  if (!documentId) {\n    return null;\n  }\n\n  // This document action can be enabled given that draft and publish and i18n are\n  // enabled and we can publish the current locale.\n\n  const publish = async () => {\n    await publishManyAction({\n      model,\n      documentIds: [documentId],\n      params: {\n        ...params,\n        locale: localesForAction,\n      },\n    });\n\n    setSelectedRows([]);\n  };\n\n  const unpublish = async () => {\n    await unpublishManyAction({\n      model,\n      documentIds: [documentId],\n      params: {\n        ...params,\n        locale: localesForAction,\n      },\n    });\n\n    setSelectedRows([]);\n  };\n\n  const handleAction = async () => {\n    if (draftRelationsCount > 0) {\n      setIsDraftRelationConfirmationOpen(true);\n    } else if (isBulkPublish) {\n      await publish();\n    } else {\n      await unpublish();\n    }\n  };\n\n  if (isDraftRelationConfirmationOpen) {\n    return {\n      label: formatMessage({\n        id: 'app.components.ConfirmDialog.title',\n        defaultMessage: 'Confirmation',\n      }),\n      variant: 'danger',\n      dialog: {\n        onCancel: () => {\n          setIsDraftRelationConfirmationOpen(false);\n        },\n        onConfirm: async () => {\n          await publish();\n\n          setIsDraftRelationConfirmationOpen(false);\n        },\n        type: 'dialog',\n        title: formatMessage({\n          id: getTranslation('actions.publish.dialog.title'),\n          defaultMessage: 'Confirmation',\n        }),\n        content: (\n          <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n            <WarningCircle width=\"2.4rem\" height=\"2.4rem\" fill=\"danger600\" />\n            <Typography textAlign=\"center\">\n              {formatMessage({\n                id: getTranslation('CMEditViewBulkLocale.draft-relation-warning'),\n                defaultMessage:\n                  'Some locales are related to draft entries. Publishing them could leave broken links in your app.',\n              })}\n            </Typography>\n            <Typography textAlign=\"center\">\n              {formatMessage({\n                id: getTranslation('CMEditViewBulkLocale.continue-confirmation'),\n                defaultMessage: 'Are you sure you want to continue?',\n              })}\n            </Typography>\n          </Flex>\n        ),\n      },\n    };\n  }\n\n  const hasPermission = selectedRows\n    .map(({ locale }) => locale)\n    .every((locale) => canPublish.includes(locale));\n\n  return {\n    label: formatMessage({\n      id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n      defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n    }),\n    variant: isBulkPublish ? 'secondary' : 'danger',\n    icon: isBulkPublish ? <ListPlus /> : <Cross />,\n    disabled: isOnPublishedTab || canPublish.length === 0,\n    position: ['panel'],\n    dialog: {\n      type: 'modal',\n      title: formatMessage({\n        id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n        defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n      }),\n      content: () => {\n        return (\n          <Table.Root\n            headers={headers}\n            rows={rows.map((row) => ({\n              ...row,\n              id: row.locale,\n            }))}\n            selectedRows={selectedRows}\n            onSelectedRowsChange={(tableSelectedRows) => setSelectedRows(tableSelectedRows)}\n          >\n            <BulkLocaleActionModal\n              validationErrors={validationErrors}\n              headers={headers}\n              rows={rows}\n              localesMetadata={localesMetadata as Locale[]}\n              action={action ?? 'bulk-publish'}\n            />\n          </Table.Root>\n        );\n      },\n      footer: () => (\n        <Modal.Footer justifyContent=\"flex-end\">\n          <Button\n            loading={isDraftRelationsLoading}\n            disabled={!hasPermission || localesForAction.length === 0}\n            variant=\"default\"\n            onClick={handleAction}\n          >\n            {formatMessage({\n              id: isBulkPublish ? 'app.utils.publish' : 'app.utils.unpublish',\n              defaultMessage: isBulkPublish ? 'Publish' : 'Unpublish',\n            })}\n          </Button>\n        </Modal.Footer>\n      ),\n    },\n  };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocalePublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocalePublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n  return BulkLocaleAction({ action: 'bulk-publish', ...props });\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleUnpublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocaleUnpublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n  return BulkLocaleAction({ action: 'bulk-unpublish', ...props });\n};\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledTrash = styled(Trash)`\n  path {\n    fill: currentColor;\n  }\n`;\n\nexport {\n  BulkLocalePublishAction,\n  BulkLocaleUnpublishAction,\n  DeleteLocaleAction,\n  LocalePickerAction,\n  FillFromAnotherLocaleAction,\n  AITranslationStatusAction,\n};\n"],"names":["statusVariants","draft","published","modified","LocaleOption","isDraftAndPublishEnabled","locale","status","entryExists","formatMessage","useIntl","id","getTranslation","defaultMessage","bold","_jsx","b","name","_jsxs","Flex","width","gap","justifyContent","Typography","Status","display","paddingLeft","paddingRight","paddingTop","paddingBottom","size","variant","tag","fontWeight","capitalize","LocaleOptionStartIcon","entryWithLocaleExists","translationStatus","index","isAiAvailable","useAIAvailability","Plus","WarningCircle","fill","LocalePickerAction","document","meta","model","collectionType","documentId","query","setQuery","useQueryParams","hasI18n","canCreate","canRead","useI18n","data","locales","useGetLocalesQuery","currentDesiredLocale","plugins","i18n","schema","useDocument","params","jobData","useGetAILocalizationJobsByDocumentQuery","settings","useGetSettingsQuery","handleSelect","React","useCallback","value","useEffect","Array","isArray","doesLocaleExist","find","loc","code","accessibleLocales","filter","includes","targetLocale","isDefault","currentLocale","undefined","availableLocales","documentLocalizations","localizations","allLocalizations","length","allCurrentLocales","getDocumentStatus","displayedLocales","localesSortingDefaultFirst","sort","a","label","options","map","some","doc","currentLocaleDoc","permissionsToCheck","aiLocalizations","_render","Fragment","SingleSelectOption","disabled","startIcon","draftAndPublish","Box","customizeContent","onSelect","docStatus","statuses","availableStatus","publishedAt","AITranslationStatusIcon","styled","theme","spaces","$isAISettingEnabled","colors","neutral150","neutral300","SpinningLoader","Loader","AITranslationStatusAction","isAIAvailable","isAISettingEnabled","useAILocalizationJobsPolling","statusVariant","_status","message","height","alignItems","aria-label","Boolean","Sparkle","tooltip","direction","padding","enabled","Link","fontSize","NavLink","to","style","alignSelf","textAlign","FillFromAnotherLocaleAction","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","localeSelected","setLocaleSelected","useState","setValues","useForm","state","getFillFromLocaleData","isLoading","isFillFromLocaleLoading","useLazyGetFillFromLocaleDataQuery","l","fillFromLocale","onClose","sourceLocale","unwrap","err","type","icon","Earth","dialog","title","content","_Fragment","Dialog","Body","Field","Root","Label","SingleSelect","placeholder","onChange","Footer","Button","flex","onClick","loading","DeleteLocaleAction","navigate","useNavigate","delete","deleteAction","useDocumentActions","canDelete","position","StyledTrash","onConfirm","unableToDelete","console","error","res","pathname","replace","BulkLocaleAction","action","useMemo","buildValidParams","isOnPublishedTab","canPublish","selectedRows","setSelectedRows","isDraftRelationConfirmationOpen","setIsDraftRelationConfirmationOpen","publishMany","publishManyAction","unpublishMany","unpublishManyAction","validate","skip","localesMetadata","skipToken","headers","rows","validationErrors","metaLocalizations","localesMap","Map","forEach","set","push","from","entries","errors","validation","isBulkPublish","localesForAction","reduce","acc","selectedRow","isValidLocale","Object","keys","shouldAddLocale","draftRelationsCount","isDraftRelationsLoading","isDraftRelationsError","useGetManyDraftRelationCountQuery","documentIds","publish","unpublish","handleAction","onCancel","hasPermission","every","ListPlus","Cross","Table","row","onSelectedRowsChange","tableSelectedRows","BulkLocaleActionModal","footer","Modal","BulkLocalePublishAction","props","BulkLocaleUnpublishAction","Trash"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAkEA,MAAMA,cAAAA,GAAqE;IACzEC,KAAAA,EAAO,WAAA;IACPC,SAAAA,EAAW,SAAA;IACXC,QAAAA,EAAU;AACZ,CAAA;AAEA,MAAMC,YAAAA,GAAe,CAAC,EACpBC,wBAAwB,EACxBC,MAAM,EACNC,MAAM,EACNC,WAAW,EACO,GAAA;IAClB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,IAAI,CAACF,WAAAA,EAAa;AAChB,QAAA,OAAOC,aAAAA,CACL;AACEE,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,sCAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;YACEC,IAAAA,EAAM,CAACR,uBAA4BS,GAAA,CAACC,GAAAA,EAAAA;AAAGV,oBAAAA,QAAAA,EAAAA;;AACvCA,YAAAA,MAAAA,EAAQA,OAAOW;AACjB,SAAA,CAAA;AAEJ,IAAA;AAEA,IAAA,qBACEC,IAAA,CAACC,IAAAA,EAAAA;QAAKC,KAAAA,EAAM,MAAA;QAAOC,GAAAA,EAAK,CAAA;QAAGC,cAAAA,EAAe,eAAA;;0BACxCP,GAAA,CAACQ,UAAAA,EAAAA;AAAYjB,gBAAAA,QAAAA,EAAAA,MAAAA,CAAOW;;AACnBZ,YAAAA,wBAAAA,iBACCU,GAAA,CAACS,MAAAA,EAAAA;gBACCC,OAAAA,EAAQ,MAAA;gBACRC,WAAAA,EAAY,KAAA;gBACZC,YAAAA,EAAa,KAAA;gBACbC,UAAAA,EAAW,KAAA;gBACXC,aAAAA,EAAc,KAAA;gBACdC,IAAAA,EAAK,GAAA;gBACLC,OAAAA,EAAS/B,cAAc,CAACO,MAAAA,CAAO;AAE/B,gBAAA,QAAA,gBAAAQ,GAAA,CAACQ,UAAAA,EAAAA;oBAAWS,GAAAA,EAAI,MAAA;oBAAOD,OAAAA,EAAQ,IAAA;oBAAKE,UAAAA,EAAW,MAAA;8BAC5CC,UAAAA,CAAW3B,MAAAA;;AAGd,aAAA,CAAA,GAAA;;;AAGV,CAAA;AAEA,MAAM4B,qBAAAA,GAAwB,CAAC,EAC7BC,qBAAqB,EACrBC,iBAAiB,EACjBC,KAAK,EAKN,GAAA;AACC,IAAA,MAAMC,aAAAA,GAAgBC,iBAAAA,EAAAA;AAEtB,IAAA,IAAI,CAACJ,qBAAAA,EAAuB;AAC1B,QAAA,qBAAOrB,GAAA,CAAC0B,IAAAA,EAAAA,EAAAA,CAAAA;AACV,IAAA;AAEA,IAAA,IAAIF,aAAAA,IAAiBD,KAAAA,KAAU,CAAA,IAAKD,iBAAAA,KAAsB,QAAA,EAAU;AAClE,QAAA,qBAAOtB,GAAA,CAAC2B,aAAAA,EAAAA;YAAcC,IAAAA,EAAK;;AAC7B,IAAA;IAEA,OAAO,IAAA;AACT,CAAA;AAEA,MAAMC,kBAAAA,GAAqB,CAAC,EAC1BC,QAAQ,EACRC,IAAI,EACJC,KAAK,EACLC,cAAc,EACdC,UAAU,EACQ,GAAA;IAClB,MAAM,EAAExC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEwC,KAAK,EAAE,EAAEC,SAAS,GAAGC,cAAAA,EAAAA;AAC9B,IAAA,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAEC,OAAO,EAAE,GAAGC,OAAAA,EAAAA;AACxC,IAAA,MAAM,EAAEC,IAAAA,EAAMC,OAAAA,GAAU,EAAE,EAAE,GAAGC,kBAAAA,EAAAA;AAC/B,IAAA,MAAMC,oBAAAA,GAAuBV,KAAAA,CAAMW,OAAO,EAAEC,IAAAA,EAAMxD,MAAAA;AAClD,IAAA,MAAM,EAAEyD,MAAM,EAAE,GAAGC,oBAAAA,CAAY;AAC7BjB,QAAAA,KAAAA;AACAC,QAAAA,cAAAA;AACAC,QAAAA,UAAAA;QACAgB,MAAAA,EAAQ;YAAE3D,MAAAA,EAAQsD;AAAqB;AACzC,KAAA,CAAA;AACA,IAAA,MAAM,EAAEH,IAAAA,EAAMS,OAAO,EAAE,GAAGC,uCAAAA,CAAwC;QAChElB,UAAAA,EAAYA,UAAAA;QACZF,KAAAA,EAAOA,KAAAA;QACPC,cAAAA,EAAgBA;AAClB,KAAA,CAAA;AACA,IAAA,MAAM,EAAES,IAAAA,EAAMW,QAAQ,EAAE,GAAGC,mBAAAA,EAAAA;AAC3B,IAAA,MAAM9B,aAAAA,GAAgBC,iBAAAA,EAAAA;AAEtB,IAAA,MAAM8B,YAAAA,GAAeC,KAAAA,CAAMC,WAAW,CACpC,CAACC,KAAAA,GAAAA;QACCtB,QAAAA,CACE;YACEU,OAAAA,EAAS;AACP,gBAAA,GAAGX,MAAMW,OAAO;gBAChBC,IAAAA,EAAM;oBACJxD,MAAAA,EAAQmE;AACV;AACF;AACF,SAAA,EACA,MAAA,EACA,IAAA,CAAA;IAEJ,CAAA,EACA;AAACvB,QAAAA,KAAAA,CAAMW,OAAO;AAAEV,QAAAA;AAAS,KAAA,CAAA;;;;AAO3BoB,IAAAA,KAAAA,CAAMG,SAAS,CAAC,IAAA;AACd,QAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAAClB,OAAAA,CAAAA,IAAY,CAACL,OAAAA,EAAS;AACvC,YAAA;AACF,QAAA;AACA;;;;QAKA,MAAMwB,kBAAkBnB,OAAAA,CAAQoB,IAAI,CAAC,CAACC,GAAAA,GAAQA,GAAAA,CAAIC,IAAI,KAAKpB,oBAAAA,CAAAA;QAC3D,MAAMqB,iBAAAA,GAAoBvB,OAAAA,CAAQwB,MAAM,CAAC,CAAC5E,SAAWiD,OAAAA,CAAQ4B,QAAQ,CAAC7E,MAAAA,CAAO0E,IAAI,CAAA,CAAA;QACjF,MAAMI,YAAAA,GACJH,iBAAAA,CAAkBH,IAAI,CAAC,CAACxE,MAAAA,GAAWA,MAAAA,CAAO+E,SAAS,CAAA,IAAKJ,iBAAiB,CAAC,CAAA,CAAE;QAC9E,IAAI,CAACJ,eAAAA,IAAmBO,YAAAA,EAAcJ,IAAAA,EAAM;AAC1CV,YAAAA,YAAAA,CAAac,aAAaJ,IAAI,CAAA;AAChC,QAAA;IACF,CAAA,EAAG;AAACV,QAAAA,YAAAA;AAAcjB,QAAAA,OAAAA;AAASK,QAAAA,OAAAA;AAASE,QAAAA,oBAAAA;AAAsBL,QAAAA;AAAQ,KAAA,CAAA;AAElE,IAAA,MAAM+B,aAAAA,GAAgBX,KAAAA,CAAMC,OAAO,CAAClB,OAAAA,CAAAA,GAChCA,OAAAA,CAAQoB,IAAI,CAAC,CAACxE,MAAAA,GAAWA,MAAAA,CAAO0E,IAAI,KAAKpB,oBAAAA,CAAAA,GACzC2B,SAAAA;;;IAIJ,MAAMC,gBAAAA,GAAmB1C,IAAAA,EAAM0C,gBAAAA,IAAoB,EAAE;IACrD,MAAMC,qBAAAA,GAAwB5C,QAAAA,EAAU6C,aAAAA,IAAiB,EAAE;;AAG3D,IAAA,MAAMC,gBAAAA,GAAmBH,gBAAAA,CAAiBI,MAAM,GAAG,IAAIJ,gBAAAA,GAAmBC,qBAAAA;AAE1E,IAAA,MAAMI,iBAAAA,GAAoB;AACxB,QAAA;AAAEtF,YAAAA,MAAAA,EAAQuF,kBAAkBjD,QAAAA,EAAUC,IAAAA,CAAAA;AAAOxC,YAAAA,MAAAA,EAAQgF,aAAAA,EAAeN;AAAK,SAAA;AACtEW,QAAAA,GAAAA;AACJ,KAAA;IAED,IAAI,CAACtC,OAAAA,IAAW,CAACsB,KAAAA,CAAMC,OAAO,CAAClB,OAAAA,CAAAA,IAAYA,OAAAA,CAAQkC,MAAM,KAAK,CAAA,EAAG;QAC/D,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,MAAMG,gBAAAA,GAAmBrC,OAAAA,CAAQwB,MAAM,CAAC,CAAC5E,MAAAA,GAAAA;AACvC;;;AAGC,QACD,OAAOiD,OAAAA,CAAQ4B,QAAQ,CAAC7E,OAAO0E,IAAI,CAAA;AACrC,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMgB,0BAAAA,GAA6BD,gBAAAA,CAAiBE,IAAI,CAAC,CAACC,CAAAA,EAAGlF,CAAAA,GAC3DkF,CAAAA,CAAEb,SAAS,GAAG,EAAC,GAAIrE,CAAAA,CAAEqE,SAAS,GAAG,CAAA,GAAI,CAAA,CAAA;IAGvC,OAAO;AACLc,QAAAA,KAAAA,EAAO1F,aAAAA,CAAc;AACnBE,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,sCAAA,CAAA;YACnBC,cAAAA,EAAgB;AAClB,SAAA,CAAA;AACAuF,QAAAA,OAAAA,EAASJ,0BAAAA,CAA2BK,GAAG,CAAC,CAAC/F,MAAAA,EAAQgC,KAAAA,GAAAA;YAC/C,MAAMF,qBAAAA,GAAwByD,iBAAAA,CAAkBS,IAAI,CAAC,CAACC,MAAQA,GAAAA,CAAIjG,MAAM,KAAKA,MAAAA,CAAO0E,IAAI,CAAA;AAExF,YAAA,MAAMwB,gBAAAA,GAAmBX,iBAAAA,CAAkBf,IAAI,CAAC,CAACyB,GAAAA,GAC/C,QAAA,IAAYA,GAAAA,GAAMA,GAAAA,CAAIjG,MAAM,KAAKA,MAAAA,CAAO0E,IAAI,GAAG,KAAA,CAAA;YAGjD,MAAMyB,kBAAAA,GAAqBD,mBAAmBjD,OAAAA,GAAUD,SAAAA;YAExD,IAAIf,aAAAA,IAAiB6B,QAAAA,EAAUX,IAAAA,EAAMiD,eAAAA,EAAiB;gBACpD,OAAO;oBACLC,OAAAA,EAAS,kBACPzF,IAAA,CAACqD,KAAAA,CAAMqC,QAAQ,EAAA;;8CACb7F,GAAA,CAAC8F,kBAAAA,EAAAA;AACCC,oCAAAA,QAAAA,EAAU,CAACL,kBAAAA,CAAmBtB,QAAQ,CAAC7E,OAAO0E,IAAI,CAAA;AAElD+B,oCAAAA,SAAAA,gBACEhG,GAAA,CAACoB,qBAAAA,EAAAA;wCACCC,qBAAAA,EAAuBA,qBAAAA;AACvBC,wCAAAA,iBAAAA,EAAmB6B,SAAST,IAAAA,EAAMlD,MAAAA;wCAClC+B,KAAAA,EAAOA;;AAGXmC,oCAAAA,KAAAA,EAAOnE,OAAO0E,IAAI;AAElB,oCAAA,QAAA,gBAAAjE,GAAA,CAACX,YAAAA,EAAAA;wCACCC,wBAAAA,EAA0B,CAAC,CAAC0D,MAAAA,EAAQqC,OAAAA,EAASY,eAAAA;wCAC7C1G,MAAAA,EAAQA,MAAAA;AACRC,wCAAAA,MAAAA,EAAQiG,gBAAAA,EAAkBjG,MAAAA;wCAC1BC,WAAAA,EAAa4B;;AAdV9B,iCAAAA,EAAAA,MAAAA,CAAO0E,IAAI,CAAA;AAiBjBgB,gCAAAA,0BAAAA,CAA2BJ,MAAM,GAAG,CAAA,IAAKtD,KAAAA,KAAU,mBAClDvB,GAAA,CAACkG,GAAAA,EAAAA;oCAAItF,YAAAA,EAAc,CAAA;oCAAGD,WAAAA,EAAa,CAAA;oCAAGE,UAAAA,EAAY,CAAA;oCAAGC,aAAAA,EAAe,CAAA;AAClE,oCAAA,QAAA,gBAAAd,GAAA,CAACQ,UAAAA,EAAAA;wCAAWQ,OAAAA,EAAQ,OAAA;kDACjBtB,aAAAA,CAAc;AACbE,4CAAAA,EAAAA,EAAIC,cAAAA,CAAe,+CAAA,CAAA;4CACnBC,cAAAA,EAAgB;AAClB,yCAAA;;;;AA1BayB,yBAAAA,EAAAA,KAAAA;AAgCzB,iBAAA;AACF,YAAA;YAEA,OAAO;AACLwE,gBAAAA,QAAAA,EAAU,CAACL,kBAAAA,CAAmBtB,QAAQ,CAAC7E,OAAO0E,IAAI,CAAA;AAClDP,gBAAAA,KAAAA,EAAOnE,OAAO0E,IAAI;AAClBmB,gBAAAA,KAAAA,gBACEpF,GAAA,CAACX,YAAAA,EAAAA;oBACCC,wBAAAA,EAA0B,CAAC,CAAC0D,MAAAA,EAAQqC,OAAAA,EAASY,eAAAA;oBAC7C1G,MAAAA,EAAQA,MAAAA;AACRC,oBAAAA,MAAAA,EAAQiG,gBAAAA,EAAkBjG,MAAAA;oBAC1BC,WAAAA,EAAa4B,qBAAAA;AACbC,oBAAAA,iBAAAA,EAAmB6B,SAAST,IAAAA,EAAMlD;;AAGtCwG,gBAAAA,SAAAA,gBAAWhG,GAAA,CAACoB,qBAAAA,EAAAA;oBAAsBC,qBAAAA,EAAuBA;;AAC3D,aAAA;AACF,QAAA,CAAA,CAAA;AACA8E,QAAAA,gBAAAA,EAAkB,IAAM5B,aAAAA,EAAerE,IAAAA;QACvCkG,QAAAA,EAAU7C,YAAAA;QACVG,KAAAA,EAAOa;AACT,KAAA;AACF;AAIA,MAAMQ,iBAAAA,GAAoB,CACxBjD,QAAAA,EACAC,IAAAA,GAAAA;AAEA,IAAA,MAAMsE,YAAYvE,QAAAA,EAAUtC,MAAAA;IAC5B,MAAM8G,QAAAA,GAAWvE,IAAAA,EAAMwE,eAAAA,IAAmB,EAAE;AAE5C;;MAGA,IAAI,CAACF,SAAAA,EAAW;QACd,OAAO,OAAA;AACT,IAAA;AAEA;;MAGA,IAAIA,SAAAA,KAAc,OAAA,IAAWC,QAAAA,CAASvC,IAAI,CAAC,CAACyB,GAAAA,GAAQA,GAAAA,CAAIgB,WAAW,KAAK,IAAA,CAAA,EAAO;QAC7E,OAAO,WAAA;AACT,IAAA;IAEA,OAAOH,SAAAA;AACT,CAAA;AAEA;;AAEkG,qGAElG,MAAMI,uBAAAA,GAA0BC,MAAAA,CAAOjG,MAAAA,CAAyC;;OAEzE,EAAE,CAAC,EAAEkG,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;;;EAOtC,EAAE,CAAC,EAAEC,mBAAmB,EAAEF,KAAK,EAAE,GAC/B,CAACE,mBAAAA,IACD;AACkB,sBAAA,EAAEF,KAAAA,CAAMG,MAAM,CAACC,UAAU,CAAC;AAC9C,EAAA,CAAC;;;IAGC,EAAE,CAAC,EAAEF,mBAAmB,EAAEF,KAAK,EAAE,GAC/B,CAACE,mBAAAA,IACD;AACQ,cAAA,EAAEF,KAAAA,CAAMG,MAAM,CAACE,UAAU,CAAC;AAClC,MAAA,CAAC;;AAEP,CAAC;AAED,MAAMC,cAAAA,GAAiBP,MAAAA,CAAOQ,MAAAA,CAAO;;;;;;;;;;;AAWrC,CAAC;AAED,MAAMC,yBAAAA,GAA4B,CAAC,EAAEjF,UAAU,EAAEF,KAAK,EAAEC,cAAc,EAAqB,GAAA;IACzF,MAAM,EAAEvC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMyH,aAAAA,GAAgB3F,iBAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEiB,IAAAA,EAAMW,QAAQ,EAAE,GAAGC,mBAAAA,EAAAA;IAC3B,MAAM+D,kBAAAA,GAAqBhE,UAAUX,IAAAA,EAAMiD,eAAAA;IAC3C,MAAM,EAAErD,OAAO,EAAE,GAAGG,OAAAA,EAAAA;;AAGpB,IAAA,MAAM,EAAEjD,MAAM,EAAE,GAAG8H,4BAAAA,CAA6B;AAC9CpF,QAAAA,UAAAA;AACAF,QAAAA,KAAAA;AACAC,QAAAA;AACF,KAAA,CAAA;IACA,MAAMsF,aAAAA,GAAgB,CAAC,IAAA;AACrB,QAAA,IAAI/H,WAAW,QAAA,EAAU;YACvB,OAAO,SAAA;AACT,QAAA;AAEA,QAAA,IAAI6H,kBAAAA,EAAoB;YACtB,OAAO,aAAA;AACT,QAAA;QAEA,OAAO,SAAA;IACT,CAAA,GAAA;;AAGA,IAAA,IAAI,CAAC/E,OAAAA,EAAS;QACZ,OAAO,IAAA;AACT,IAAA;;AAGA,IAAA,IAAI,CAAC8E,aAAAA,EAAe;QAClB,OAAO,IAAA;AACT,IAAA;IAEA,OAAO;QACLI,OAAAA,EAAS;AACPC,YAAAA,OAAAA,gBACEzH,GAAA,CAACI,IAAAA,EAAAA;gBACCsH,MAAAA,EAAO,MAAA;gBACPC,UAAAA,EAAW,QAAA;AACXC,gBAAAA,YAAAA,EAAYlI,aAAAA,CAAc;AACxBE,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,2CAAA,CAAA;oBACnBC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AAEA,gBAAA,QAAA,gBAAAE,GAAA,CAACyG,uBAAAA,EAAAA;AACCI,oBAAAA,mBAAAA,EAAqBgB,OAAAA,CAAQR,kBAAAA,CAAAA;oBAC7BrG,OAAAA,EAASuG,aAAAA;oBACTxG,IAAAA,EAAK,GAAA;8BAEJvB,MAAAA,KAAW,YAAA,iBAAeQ,GAAA,CAACiH,cAAAA,EAAAA,EAAAA,CAAAA,iBAAoBjH,GAAA,CAAC8H,OAAAA,EAAAA,EAAAA;;;AAIvDC,YAAAA,OAAAA,gBACE5H,IAAA,CAACC,IAAAA,EAAAA;gBAAK4H,SAAAA,EAAU,QAAA;gBAASC,OAAAA,EAAS,CAAA;gBAAGN,UAAAA,EAAW,YAAA;gBAAatH,KAAAA,EAAM,OAAA;;kCACjEL,GAAA,CAACQ,UAAAA,EAAAA;wBAAWQ,OAAAA,EAAQ,IAAA;wBAAKE,UAAAA,EAAW,KAAA;kCACjCxB,aAAAA,CACC;AACEE,4BAAAA,EAAAA,EAAIC,cAAAA,CAAe,sCAAA,CAAA;4BACnBC,cAAAA,EACE;yBACJ,EACA;4BAAEoI,OAAAA,EAASb;AAAmB,yBAAA;;kCAGlCrH,GAAA,CAACQ,UAAAA,EAAAA;wBAAWQ,OAAAA,EAAQ,IAAA;wBAAKH,UAAAA,EAAY,CAAA;wBAAGC,aAAAA,EAAe,CAAA;kCACpDpB,aAAAA,CAAc;AACbE,4BAAAA,EAAAA,EAAIC,cAAAA,CAAe,4CAAA,CAAA;4BACnBC,cAAAA,EACE;AACJ,yBAAA;;kCAEFE,GAAA,CAACmI,IAAAA,EAAAA;wBACCC,QAAAA,EAAS,SAAA;wBACTnH,GAAAA,EAAKoH,OAAAA;wBACLC,EAAAA,EAAG,gCAAA;wBACHC,KAAAA,EAAO;4BAAEC,SAAAA,EAAW;AAAW,yBAAA;AAE/B,wBAAA,QAAA,gBAAAxI,GAAA,CAACQ,UAAAA,EAAAA;4BAAWQ,OAAAA,EAAQ,IAAA;4BAAKyH,SAAAA,EAAU,OAAA;sCAChC/I,aAAAA,CACC;AACEE,gCAAAA,EAAAA,EAAIC,cAAAA,CAAe,uCAAA,CAAA;gCACnBC,cAAAA,EACE;6BACJ,EACA;gCAAEoI,OAAAA,EAASb;AAAmB,6BAAA;;;;;AAM1C;AACF,KAAA;AACF;AAEA;;qGAIA,MAAMqB,2BAAAA,GAA8B,CAAC,EACnCxG,UAAU,EACVH,IAAI,EACJC,KAAK,EACLC,cAAc,EACI,GAAA;IAClB,MAAM,EAAEvC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEgJ,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;AACpD,IAAA,MAAM,CAAC,EAAE5G,KAAK,EAAE,CAAC,GAAGE,cAAAA,EAAAA;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAGG,OAAAA,EAAAA;AACpB,IAAA,MAAMI,oBAAAA,GAAuBV,KAAAA,CAAMW,OAAO,EAAEC,IAAAA,EAAMxD,MAAAA;AAClD,IAAA,MAAM,CAACyJ,cAAAA,EAAgBC,iBAAAA,CAAkB,GAAGzF,KAAAA,CAAM0F,QAAQ,CAAgB,IAAA,CAAA;AAC1E,IAAA,MAAMC,YAAYC,OAAAA,CAAQ,uBAAA,EAAyB,CAACC,KAAAA,GAAUA,MAAMF,SAAS,CAAA;AAE7E,IAAA,MAAM,CAACG,qBAAAA,EAAuB,EAAEC,WAAWC,uBAAuB,EAAE,CAAC,GACnEC,iCAAAA,EAAAA;AACF,IAAA,MAAM,EAAE/G,IAAAA,EAAMC,OAAAA,GAAU,EAAE,EAAE,GAAGC,kBAAAA,EAAAA;AAE/B,IAAA,MAAMwE,aAAAA,GAAgB3F,iBAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEiB,IAAAA,EAAMW,QAAQ,EAAE,GAAGC,mBAAAA,EAAAA;IAC3B,MAAM+D,kBAAAA,GAAqBhE,UAAUX,IAAAA,EAAMiD,eAAAA;IAE3C,MAAMlB,gBAAAA,GAAmBb,MAAMC,OAAO,CAAClB,WACnCA,OAAAA,CAAQwB,MAAM,CAAC,CAAC5E,MAAAA,GAAWwC,MAAM0C,gBAAAA,CAAiBc,IAAAA,CAAK,CAACmE,CAAAA,GAAMA,CAAAA,CAAEnK,MAAM,KAAKA,MAAAA,CAAO0E,IAAI,CAAA,CAAA,GACtF,EAAE;IAEN,MAAM0F,cAAAA,GAAiB,CAACC,OAAAA,GAAwB,UAAA;YAC9C,IAAI,CAACZ,cAAAA,IAAkB,CAACnG,oBAAAA,EAAsB;AAC5C,gBAAA;AACF,YAAA;YAEA,IAAI;AACF,gBAAA,MAAM,EAAEH,IAAI,EAAE,GAAG,MAAM4G,qBAAAA,CAAsB;AAC3CtH,oBAAAA,KAAAA;AACAE,oBAAAA,UAAAA;oBACA2H,YAAAA,EAAcb,cAAAA;oBACd3E,YAAAA,EAAcxB,oBAAAA;oBACdZ,cAAAA,EAAgBA;AAClB,iBAAA,CAAA,CAAG6H,MAAM,EAAA;AAET,gBAAA,IAAIpH,IAAAA,EAAM;oBACRyG,SAAAA,CAAUzG,IAAAA,CAAAA;AACZ,gBAAA;AAEAkH,gBAAAA,OAAAA,EAAAA;AACF,YAAA,CAAA,CAAE,OAAOG,GAAAA,EAAK;gBACZpB,kBAAAA,CAAmB;oBACjBqB,IAAAA,EAAM,QAAA;AACNvC,oBAAAA,OAAAA,EAASqB,cAAAA,CAAeiB,GAAAA;AAC1B,iBAAA,CAAA;AACF,YAAA;AACF,QAAA,CAAA;AAEA,IAAA,IAAI,CAACzH,OAAAA,EAAS;QACZ,OAAO,IAAA;AACT,IAAA;;AAGA,IAAA,IAAI8E,iBAAiBC,kBAAAA,EAAoB;QACvC,OAAO,IAAA;AACT,IAAA;IAEA,OAAO;QACL2C,IAAAA,EAAM,MAAA;AACNC,QAAAA,IAAAA,gBAAMjK,GAAA,CAACkK,KAAAA,EAAAA,EAAAA,CAAAA;QACPnE,QAAAA,EAAUtB,gBAAAA,CAAiBI,MAAM,KAAK,CAAA;AACtCO,QAAAA,KAAAA,EAAO1F,aAAAA,CAAc;AACnBE,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,gCAAA,CAAA;YACnBC,cAAAA,EAAgB;AAClB,SAAA,CAAA;QACAqK,MAAAA,EAAQ;YACNH,IAAAA,EAAM,QAAA;AACNI,YAAAA,KAAAA,EAAO1K,aAAAA,CAAc;AACnBE,gBAAAA,EAAAA,EAAIC,cAAAA,CAAe,mCAAA,CAAA;gBACnBC,cAAAA,EAAgB;AAClB,aAAA,CAAA;AACAuK,YAAAA,OAAAA,EAAS,CAAC,EAAET,OAAO,EAA2B,iBAC5CzJ,IAAA,CAAAmK,QAAA,EAAA;;AACE,sCAAAtK,GAAA,CAACuK,OAAOC,IAAI,EAAA;AACV,4BAAA,QAAA,gBAAArK,IAAA,CAACC,IAAAA,EAAAA;gCAAK4H,SAAAA,EAAU,QAAA;gCAAS1H,GAAAA,EAAK,CAAA;;kDAC5BN,GAAA,CAAC2B,aAAAA,EAAAA;wCAActB,KAAAA,EAAM,MAAA;wCAAOqH,MAAAA,EAAO,MAAA;wCAAO9F,IAAAA,EAAK;;kDAC/C5B,GAAA,CAACQ,UAAAA,EAAAA;wCAAWiI,SAAAA,EAAU,QAAA;kDACnB/I,aAAAA,CAAc;AACbE,4CAAAA,EAAAA,EAAIC,cAAAA,CAAe,kCAAA,CAAA;4CACnBC,cAAAA,EACE;AACJ,yCAAA;;AAEF,kDAAAK,IAAA,CAACsK,MAAMC,IAAI,EAAA;wCAACrK,KAAAA,EAAM,MAAA;;AAChB,0DAAAL,GAAA,CAACyK,MAAME,KAAK,EAAA;0DACTjL,aAAAA,CAAc;AACbE,oDAAAA,EAAAA,EAAIC,cAAAA,CAAe,yCAAA,CAAA;oDACnBC,cAAAA,EAAgB;AAClB,iDAAA;;0DAEFE,GAAA,CAAC4K,YAAAA,EAAAA;gDACClH,KAAAA,EAAOsF,cAAAA;AACP6B,gDAAAA,WAAAA,EAAanL,aAAAA,CAAc;AACzBE,oDAAAA,EAAAA,EAAIC,cAAAA,CAAe,+CAAA,CAAA;oDACnBC,cAAAA,EAAgB;AAClB,iDAAA,CAAA;;gDAEAgL,QAAAA,EAAU,CAACpH,QAAUuF,iBAAAA,CAAkBvF,KAAAA,CAAAA;AAEtCe,gDAAAA,QAAAA,EAAAA,gBAAAA,CAAiBa,GAAG,CAAC,CAAC/F,MAAAA,iBACrBS,GAAA,CAAC8F,kBAAAA,EAAAA;AAAqCpC,wDAAAA,KAAAA,EAAOnE,OAAO0E,IAAI;AACrD1E,wDAAAA,QAAAA,EAAAA,MAAAA,CAAOW;AADeX,qDAAAA,EAAAA,MAAAA,CAAO0E,IAAI,CAAA;;;;;;;AAQ9C,sCAAAjE,GAAA,CAACuK,OAAOQ,MAAM,EAAA;AACZ,4BAAA,QAAA,gBAAA5K,IAAA,CAACC,IAAAA,EAAAA;gCAAKE,GAAAA,EAAK,CAAA;gCAAGD,KAAAA,EAAM,MAAA;;kDAClBL,GAAA,CAACgL,MAAAA,EAAAA;wCACCC,IAAAA,EAAK,MAAA;wCACLjK,OAAAA,EAAQ,UAAA;wCACRkK,OAAAA,EAAStB,OAAAA;wCACT7D,QAAAA,EAAUyD,uBAAAA;kDAET9J,aAAAA,CAAc;AACbE,4CAAAA,EAAAA,EAAIC,cAAAA,CAAe,kCAAA,CAAA;4CACnBC,cAAAA,EAAgB;AAClB,yCAAA;;kDAEFE,GAAA,CAACgL,MAAAA,EAAAA;wCACCC,IAAAA,EAAK,MAAA;wCACLjK,OAAAA,EAAQ,SAAA;AACRkK,wCAAAA,OAAAA,EAASvB,cAAAA,CAAeC,OAAAA,CAAAA;wCACxBuB,OAAAA,EAAS3B,uBAAAA;wCACTzD,QAAAA,EAAUyD,uBAAAA;kDAET9J,aAAAA,CAAc;AACbE,4CAAAA,EAAAA,EAAIC,cAAAA,CAAe,kCAAA,CAAA;4CACnBC,cAAAA,EAAgB;AAClB,yCAAA;;;;;;;AAMZ;AACF,KAAA;AACF;AAEA;;qGAIA,MAAMsL,kBAAAA,GAA8C,CAAC,EACnDtJ,QAAQ,EACRI,UAAU,EACVF,KAAK,EACLC,cAAc,EACf,GAAA;IACC,MAAM,EAAEvC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM0L,QAAAA,GAAWC,WAAAA,EAAAA;IACjB,MAAM,EAAE3C,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAE2C,MAAAA,EAAQC,YAAY,EAAEjC,SAAS,EAAE,GAAGkC,2BAAAA,EAAAA;AAC5C,IAAA,MAAM,EAAEnJ,OAAO,EAAEoJ,SAAS,EAAE,GAAGjJ,OAAAA,EAAAA;;AAG/B,IAAA,MAAM,CAAC,EAAEN,KAAK,EAAE,CAAC,GAAGE,cAAAA,EAAAA;AACpB,IAAA,MAAM,EAAEK,IAAAA,EAAMC,OAAAA,GAAU,EAAE,EAAE,GAAGC,kBAAAA,EAAAA;AAC/B,IAAA,MAAMC,oBAAAA,GAAuBV,KAAAA,CAAMW,OAAO,EAAEC,IAAAA,EAAMxD,MAAAA;AAClD,IAAA,MAAMA,MAAAA,GAAS,EAAE,OAAA,IAAWoD,OAAM,CAAA,IAAMA,OAAAA,CAAQoB,IAAI,CAAC,CAACC,GAAAA,GAAQA,GAAAA,CAAIC,IAAI,KAAKpB,oBAAAA,CAAAA;AAE3E,IAAA,IAAI,CAACP,OAAAA,EAAS;QACZ,OAAO,IAAA;AACT,IAAA;IAEA,OAAO;AACLyD,QAAAA,QAAAA,EACE,QAACjE,EAAUvC,MAAAA,IAAU,CAACmM,UAAUtH,QAAQ,CAACtC,QAAAA,CAASvC,MAAM,CAAA,IAAM,CAACuC,QAAAA,IAAY,CAACA,SAASlC,EAAE;QACzF+L,QAAAA,EAAU;AAAC,YAAA,QAAA;AAAU,YAAA;AAAY,SAAA;AACjCvG,QAAAA,KAAAA,EAAO1F,aAAAA,CACL;AACEE,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,sBAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;YAAEP,MAAAA,EAAQA,MAAAA,IAAUA,OAAOW;AAAK,SAAA,CAAA;AAElC+J,QAAAA,IAAAA,gBAAMjK,GAAA,CAAC4L,WAAAA,EAAAA,EAAAA,CAAAA;QACP5K,OAAAA,EAAS,QAAA;QACTmJ,MAAAA,EAAQ;YACNH,IAAAA,EAAM,QAAA;AACNI,YAAAA,KAAAA,EAAO1K,aAAAA,CAAc;AACnBE,gBAAAA,EAAAA,EAAIC,cAAAA,CAAe,6BAAA,CAAA;gBACnBC,cAAAA,EAAgB;AAClB,aAAA,CAAA;AACAuK,YAAAA,OAAAA,gBACElK,IAAA,CAACC,IAAAA,EAAAA;gBAAK4H,SAAAA,EAAU,QAAA;gBAAS1H,GAAAA,EAAK,CAAA;;kCAC5BN,GAAA,CAAC2B,aAAAA,EAAAA;wBAActB,KAAAA,EAAM,MAAA;wBAAOqH,MAAAA,EAAO,MAAA;wBAAO9F,IAAAA,EAAK;;kCAC/C5B,GAAA,CAACQ,UAAAA,EAAAA;wBAAWS,GAAAA,EAAI,GAAA;wBAAID,OAAAA,EAAQ,OAAA;wBAAQyH,SAAAA,EAAU,QAAA;kCAC3C/I,aAAAA,CAAc;AACbE,4BAAAA,EAAAA,EAAIC,cAAAA,CAAe,4BAAA,CAAA;4BACnBC,cAAAA,EAAgB;AAClB,yBAAA;;;;YAINqL,OAAAA,EAAS5B,SAAAA;YACTsC,SAAAA,EAAW,UAAA;gBACT,MAAMC,cAAAA;;AAGH7J,gBAAAA,cAAAA,KAAmB,cAAA,IAAkB,CAACC,UAAAA,IAAe,CAACJ,QAAAA,EAAUvC,MAAAA;AAEnE,gBAAA,IAAIuM,cAAAA,EAAgB;AAClBC,oBAAAA,OAAAA,CAAQC,KAAK,CACX,qHAAA,CAAA;oBAGFrD,kBAAAA,CAAmB;AACjBlB,wBAAAA,OAAAA,EAAS/H,aAAAA,CAAc;AACrBE,4BAAAA,EAAAA,EAAIC,cAAAA,CAAe,sBAAA,CAAA;4BACnBC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAkK,IAAAA,EAAM;AACR,qBAAA,CAAA;AAEA,oBAAA;AACF,gBAAA;gBAEA,MAAMiC,GAAAA,GAAM,MAAMT,YAAAA,CAAa;AAC7BtJ,oBAAAA,UAAAA;AACAF,oBAAAA,KAAAA;AACAC,oBAAAA,cAAAA;oBACAiB,MAAAA,EAAQ;AAAE3D,wBAAAA,MAAAA,EAAQuC,SAASvC;AAAO;AACpC,iBAAA,CAAA;AAEA,gBAAA,IAAI,EAAE,OAAA,IAAW0M,GAAE,CAAA,EAAI;oBACrBZ,QAAAA,CAAS;AAAEa,wBAAAA,QAAAA,EAAU,CAAC,GAAG,EAAEjK,cAAAA,CAAe,CAAC,EAAED,KAAAA,CAAAA;qBAAQ,EAAG;wBAAEmK,OAAAA,EAAS;AAAK,qBAAA,CAAA;AAC1E,gBAAA;AACF,YAAA;AACF;AACF,KAAA;AACF;AAWA;;;;AAIkG,qGAElG,MAAMC,gBAAAA,GAA4C,CAAC,EACjDtK,QAAQ,EACRI,UAAU,EACVF,KAAK,EACLC,cAAc,EACdoK,MAAM,EACNtK,IAAI,EACwB,GAAA;IAC5B,MAAMxC,MAAAA,GAASuC,UAAUvC,MAAAA,IAAU,IAAA;AACnC,IAAA,MAAM,CAAC,EAAE4C,KAAK,EAAE,CAAC,GAAGE,cAAAA,EAAAA;AAEpB,IAAA,MAAMa,SAASM,KAAAA,CAAM8I,OAAO,CAAC,IAAMC,iBAAiBpK,KAAAA,CAAAA,EAAQ;AAACA,QAAAA;AAAM,KAAA,CAAA;IACnE,MAAMqK,gBAAAA,GAAmBrK,KAAAA,CAAM3C,MAAM,KAAK,WAAA;IAE1C,MAAM,EAAEE,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAE2C,OAAO,EAAEmK,UAAU,EAAE,GAAGhK,OAAAA,EAAAA;IAChC,MAAM,EAAEkG,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;AAEpD,IAAA,MAAM,CAAC2D,YAAAA,EAAcC,eAAAA,CAAgB,GAAGnJ,KAAAA,CAAM0F,QAAQ,CAAuC,EAAE,CAAA;AAC/F,IAAA,MAAM,CAAC0D,+BAAAA,EAAiCC,kCAAAA,CAAmC,GACzErJ,KAAAA,CAAM0F,QAAQ,CAAU,KAAA,CAAA;AAE1B,IAAA,MAAM,EAAE4D,WAAAA,EAAaC,iBAAiB,EAAEC,aAAAA,EAAeC,mBAAmB,EAAE,GAC1ExB,2BAAAA,EAAAA;AAEF,IAAA,MAAM,EAAEzI,MAAM,EAAEkK,QAAQ,EAAE,GAAGjK,oBAAAA,CAC3B;AACEjB,QAAAA,KAAAA;AACAC,QAAAA,cAAAA;AACAC,QAAAA,UAAAA;QACAgB,MAAAA,EAAQ;AACN3D,YAAAA;AACF;KACF,EACA;;QAEE4N,IAAAA,EAAM;AACR,KAAA,CAAA;IAGF,MAAM,EAAEzK,MAAM0K,eAAAA,GAAkB,EAAE,EAAE,GAAGxK,kBAAAA,CAAmBN,UAAUkC,SAAAA,GAAY6I,SAAAA,CAAAA;AAEhF,IAAA,MAAMC,OAAAA,GAAU;AACd,QAAA;AACElI,YAAAA,KAAAA,EAAO1F,aAAAA,CAAc;gBACnBE,EAAAA,EAAI,aAAA;gBACJE,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAI,IAAAA,EAAM;AACR,SAAA;AACA,QAAA;AACEkF,YAAAA,KAAAA,EAAO1F,aAAAA,CAAc;AACnBE,gBAAAA,EAAAA,EAAIC,cAAAA,CAAe,6BAAA,CAAA;gBACnBC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAI,IAAAA,EAAM;AACR,SAAA;AACA,QAAA;AACEkF,YAAAA,KAAAA,EAAO1F,aAAAA,CAAc;AACnBE,gBAAAA,EAAAA,EAAIC,cAAAA,CAAe,yCAAA,CAAA;gBACnBC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAI,IAAAA,EAAM;AACR;AACD,KAAA;;;AAID,IAAA,MAAM,CAACqN,IAAAA,EAAMC,gBAAAA,CAAiB,GAAGhK,KAAAA,CAAM8I,OAAO,CAA2C,IAAA;AACvF,QAAA,IAAI,CAACxK,QAAAA,EAAU;YACb,OAAO;gBAAC,EAAE;gBAAE;AAAG,aAAA;AACjB,QAAA;AAEA,QAAA,MAAM2L,iBAAAA,GAAqB1L,CAAAA,IAAAA,EAAM0C,gBAAAA,IAAoB,EAAE,EAAEa,GAAG,CAAC,CAAC/F,MAAAA,IAAY;AACxEA,gBAAAA,MAAAA,EAAQA,OAAOA,MAAM;gBACrBC,MAAAA,EAASD,MAAAA,CAAOC,MAAM,IAAI;aAC5B,CAAA,CAAA;AAEA,QAAA,MAAMkF,qBAAAA,GACH5C,CAAAA,QAAAA,CAAS6C,aAAa,IAAI,EAAC,EAI5BW,GAAG,CAAC,CAACE,OAAS;gBACdjG,MAAAA,EAAQiG,GAAAA,CAAIjG,MAAM,IAAIiF,SAAAA;gBACtBhF,MAAAA,EAASgG,GAAAA,CAAIhG,MAAM,IAAI;aACzB,CAAA,CAAA;AAEA,QAAA,MAAMkO,aAAa,IAAIC,GAAAA,EAAAA;AAEvBF,QAAAA,iBAAAA,CAAkBG,OAAO,CAAC,CAAC,EAAErO,MAAM,EAAEC,MAAM,EAAE,GAAA;AAC3C,YAAA,IAAID,MAAAA,EAAQ;gBACVmO,UAAAA,CAAWG,GAAG,CAACtO,MAAAA,EAAQ;AAAEA,oBAAAA,MAAAA;AAAQC,oBAAAA;AAAO,iBAAA,CAAA;AAC1C,YAAA;AACF,QAAA,CAAA,CAAA;AAEAkF,QAAAA,qBAAAA,CAAsBkJ,OAAO,CAAC,CAAC,EAAErO,MAAM,EAAEC,MAAM,EAAE,GAAA;AAC/C,YAAA,IAAID,MAAAA,EAAQ;gBACVmO,UAAAA,CAAWG,GAAG,CAACtO,MAAAA,EAAQ;AAAEA,oBAAAA,MAAAA;AAAQC,oBAAAA;AAAO,iBAAA,CAAA;AAC1C,YAAA;AACF,QAAA,CAAA,CAAA;;;AAIA,QAAA,MAAMmD,UAA0B,EAAE;AAElC,QAAA,IAAIb,UAAUvC,MAAAA,EAAQ;AACpBoD,YAAAA,OAAAA,CAAQmL,IAAI,CAAC;AACXvO,gBAAAA,MAAAA,EAAQuC,SAASvC,MAAM;gBACvBC,MAAAA,EAASsC,QAAAA,CAAStC,MAAM,IAAI;AAC9B,aAAA,CAAA;AACF,QAAA;QAEAmD,OAAAA,CAAQmL,IAAI,IACPlK,KAAAA,CAAMmK,IAAI,CAACL,UAAAA,CAAWM,OAAO,EAAA,CAAA,CAC7B7J,MAAM,CAAC,CAAC,CAAC5E,MAAAA,CAAO,GAAKA,WAAWuC,QAAAA,EAAUvC,MAAAA,CAAAA,CAC1C+F,GAAG,CAAC,CAAC,GAAG5B,KAAAA,CAAM,GAAKA,KAAAA,CAAAA,CAAAA;AAGxB,QAAA,IAAIf,OAAAA,CAAQkC,MAAM,KAAK,CAAA,IAAK/C,UAAUvC,MAAAA,EAAQ;AAC5CoD,YAAAA,OAAAA,CAAQmL,IAAI,CAAC;AACXvO,gBAAAA,MAAAA,EAAQuC,SAASvC,MAAM;gBACvBC,MAAAA,EAASsC,QAAAA,CAAStC,MAAM,IAAI;AAC9B,aAAA,CAAA;AACF,QAAA;;;;AAKA,QAAA,MAAMyO,SAAiC,EAAC;QACxC,IAAInM,QAAAA,CAASvC,MAAM,EAAE;AACnB,YAAA,MAAM2O,aAAahB,QAAAA,CAASpL,QAAAA,CAAAA;AAC5B,YAAA,IAAIoM,eAAe,IAAA,EAAM;AACvBD,gBAAAA,MAAM,CAACnM,QAAAA,CAASvC,MAAM,CAAC,GAAG2O,UAAAA;AAC5B,YAAA;AACF,QAAA;QAEA,OAAO;AAACvL,YAAAA,OAAAA;AAASsL,YAAAA;AAAO,SAAA;IAC1B,CAAA,EAAG;AAACnM,QAAAA,QAAAA;QAAUC,IAAAA,EAAM0C,gBAAAA;AAAkByI,QAAAA;AAAS,KAAA,CAAA;AAE/C,IAAA,MAAMiB,gBAAgB9B,MAAAA,KAAW,cAAA;AACjC,IAAA,MAAM+B,gBAAAA,GAAmB1B,YAAAA,CAAa2B,MAAM,CAAC,CAACC,GAAAA,EAAeC,WAAAA,GAAAA;AAC3D,QAAA,MAAMC;QAEJ,CAACL,aAAAA,IAAiB,CAACM,MAAAA,CAAOC,IAAI,CAAClB,gBAAAA,CAAAA,CAAkBpJ,QAAQ,CAACmK,WAAAA,CAAYhP,MAAM,CAAA;QAE9E,MAAMoP,eAAAA,GAAkBR,aAAAA,GACpBI,WAAAA,CAAY/O,MAAM,KAAK,eAAegP,aAAAA,GACtCD,WAAAA,CAAY/O,MAAM,KAAK,OAAA,IAAWgP,aAAAA;AAEtC,QAAA,IAAIG,eAAAA,EAAiB;YACnBL,GAAAA,CAAIR,IAAI,CAACS,WAAAA,CAAYhP,MAAM,CAAA;AAC7B,QAAA;QAEA,OAAO+O,GAAAA;AACT,IAAA,CAAA,EAAG,EAAE,CAAA;AAKL,IAAA,MAAM,EACJ5L,IAAAA,EAAMkM,mBAAAA,GAAsB,CAAC,EAC7BrF,SAAAA,EAAWsF,uBAAuB,EAClC7C,KAAAA,EAAO8C,qBAAqB,EAC7B,GAAGC,iCAAAA,CACF;AACE/M,QAAAA,KAAAA;QACAgN,WAAAA,EAAa;AAAC9M,YAAAA;AAAY,SAAA;QAC1B3C,MAAAA,EAAQ6O;KACV,EACA;AACEjB,QAAAA,IAAAA,EAAM;AACR,KAAA,CAAA;AAGF3J,IAAAA,KAAAA,CAAMG,SAAS,CAAC,IAAA;AACd,QAAA,IAAImL,qBAAAA,EAAuB;YACzBnG,kBAAAA,CAAmB;gBACjBqB,IAAAA,EAAM,QAAA;AACNvC,gBAAAA,OAAAA,EAASqB,cAAAA,CAAegG,qBAAAA;AAC1B,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,qBAAAA;AAAuBnG,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;IAE9D,IAAI,CAAC9F,MAAAA,EAAQqC,OAAAA,EAASY,eAAAA,EAAiB;QACrC,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAI,CAAC3D,OAAAA,EAAS;QACZ,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAI,CAACJ,UAAAA,EAAY;QACf,OAAO,IAAA;AACT,IAAA;;;AAKA,IAAA,MAAM+M,OAAAA,GAAU,UAAA;AACd,QAAA,MAAMlC,iBAAAA,CAAkB;AACtB/K,YAAAA,KAAAA;YACAgN,WAAAA,EAAa;AAAC9M,gBAAAA;AAAW,aAAA;YACzBgB,MAAAA,EAAQ;AACN,gBAAA,GAAGA,MAAM;gBACT3D,MAAAA,EAAQ6O;AACV;AACF,SAAA,CAAA;AAEAzB,QAAAA,eAAAA,CAAgB,EAAE,CAAA;AACpB,IAAA,CAAA;AAEA,IAAA,MAAMuC,SAAAA,GAAY,UAAA;AAChB,QAAA,MAAMjC,mBAAAA,CAAoB;AACxBjL,YAAAA,KAAAA;YACAgN,WAAAA,EAAa;AAAC9M,gBAAAA;AAAW,aAAA;YACzBgB,MAAAA,EAAQ;AACN,gBAAA,GAAGA,MAAM;gBACT3D,MAAAA,EAAQ6O;AACV;AACF,SAAA,CAAA;AAEAzB,QAAAA,eAAAA,CAAgB,EAAE,CAAA;AACpB,IAAA,CAAA;AAEA,IAAA,MAAMwC,YAAAA,GAAe,UAAA;AACnB,QAAA,IAAIP,sBAAsB,CAAA,EAAG;YAC3B/B,kCAAAA,CAAmC,IAAA,CAAA;AACrC,QAAA,CAAA,MAAO,IAAIsB,aAAAA,EAAe;YACxB,MAAMc,OAAAA,EAAAA;QACR,CAAA,MAAO;YACL,MAAMC,SAAAA,EAAAA;AACR,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,IAAItC,+BAAAA,EAAiC;QACnC,OAAO;AACLxH,YAAAA,KAAAA,EAAO1F,aAAAA,CAAc;gBACnBE,EAAAA,EAAI,oCAAA;gBACJE,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAkB,OAAAA,EAAS,QAAA;YACTmJ,MAAAA,EAAQ;gBACNiF,QAAAA,EAAU,IAAA;oBACRvC,kCAAAA,CAAmC,KAAA,CAAA;AACrC,gBAAA,CAAA;gBACAhB,SAAAA,EAAW,UAAA;oBACT,MAAMoD,OAAAA,EAAAA;oBAENpC,kCAAAA,CAAmC,KAAA,CAAA;AACrC,gBAAA,CAAA;gBACA7C,IAAAA,EAAM,QAAA;AACNI,gBAAAA,KAAAA,EAAO1K,aAAAA,CAAc;AACnBE,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,8BAAA,CAAA;oBACnBC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AACAuK,gBAAAA,OAAAA,gBACElK,IAAA,CAACC,IAAAA,EAAAA;oBAAK4H,SAAAA,EAAU,QAAA;oBAASL,UAAAA,EAAW,QAAA;oBAASrH,GAAAA,EAAK,CAAA;;sCAChDN,GAAA,CAAC2B,aAAAA,EAAAA;4BAActB,KAAAA,EAAM,QAAA;4BAASqH,MAAAA,EAAO,QAAA;4BAAS9F,IAAAA,EAAK;;sCACnD5B,GAAA,CAACQ,UAAAA,EAAAA;4BAAWiI,SAAAA,EAAU,QAAA;sCACnB/I,aAAAA,CAAc;AACbE,gCAAAA,EAAAA,EAAIC,cAAAA,CAAe,6CAAA,CAAA;gCACnBC,cAAAA,EACE;AACJ,6BAAA;;sCAEFE,GAAA,CAACQ,UAAAA,EAAAA;4BAAWiI,SAAAA,EAAU,QAAA;sCACnB/I,aAAAA,CAAc;AACbE,gCAAAA,EAAAA,EAAIC,cAAAA,CAAe,4CAAA,CAAA;gCACnBC,cAAAA,EAAgB;AAClB,6BAAA;;;;AAIR;AACF,SAAA;AACF,IAAA;AAEA,IAAA,MAAMuP,gBAAgB3C,YAAAA,CACnBpH,GAAG,CAAC,CAAC,EAAE/F,MAAM,EAAE,GAAKA,MAAAA,CAAAA,CACpB+P,KAAK,CAAC,CAAC/P,MAAAA,GAAWkN,UAAAA,CAAWrI,QAAQ,CAAC7E,MAAAA,CAAAA,CAAAA;IAEzC,OAAO;AACL6F,QAAAA,KAAAA,EAAO1F,aAAAA,CAAc;YACnBE,EAAAA,EAAIC,cAAAA,CAAe,CAAC,qBAAqB,EAAEsO,gBAAgB,SAAA,GAAY,WAAA,CAAY,MAAM,CAAC,CAAA;AAC1FrO,YAAAA,cAAAA,EAAgB,CAAA,EAAGqO,aAAAA,GAAgB,SAAA,GAAY,WAAA,CAAY,iBAAiB;AAC9E,SAAA,CAAA;AACAnN,QAAAA,OAAAA,EAASmN,gBAAgB,WAAA,GAAc,QAAA;QACvClE,IAAAA,EAAMkE,aAAAA,iBAAgBnO,GAAA,CAACuP,QAAAA,EAAAA,EAAAA,CAAAA,iBAAcvP,GAAA,CAACwP,KAAAA,EAAAA,EAAAA,CAAAA;QACtCzJ,QAAAA,EAAUyG,gBAAAA,IAAoBC,UAAAA,CAAW5H,MAAM,KAAK,CAAA;QACpD8G,QAAAA,EAAU;AAAC,YAAA;AAAQ,SAAA;QACnBxB,MAAAA,EAAQ;YACNH,IAAAA,EAAM,OAAA;AACNI,YAAAA,KAAAA,EAAO1K,aAAAA,CAAc;gBACnBE,EAAAA,EAAIC,cAAAA,CAAe,CAAC,qBAAqB,EAAEsO,gBAAgB,SAAA,GAAY,WAAA,CAAY,MAAM,CAAC,CAAA;AAC1FrO,gBAAAA,cAAAA,EAAgB,CAAA,EAAGqO,aAAAA,GAAgB,SAAA,GAAY,WAAA,CAAY,iBAAiB;AAC9E,aAAA,CAAA;YACA9D,OAAAA,EAAS,IAAA;gBACP,qBACErK,GAAA,CAACyP,MAAM/E,IAAI,EAAA;oBACT4C,OAAAA,EAASA,OAAAA;AACTC,oBAAAA,IAAAA,EAAMA,IAAAA,CAAKjI,GAAG,CAAC,CAACoK,OAAS;AACvB,4BAAA,GAAGA,GAAG;AACN9P,4BAAAA,EAAAA,EAAI8P,IAAInQ;yBACV,CAAA,CAAA;oBACAmN,YAAAA,EAAcA,YAAAA;oBACdiD,oBAAAA,EAAsB,CAACC,oBAAsBjD,eAAAA,CAAgBiD,iBAAAA,CAAAA;AAE7D,oBAAA,QAAA,gBAAA5P,GAAA,CAAC6P,qBAAAA,EAAAA;wBACCrC,gBAAAA,EAAkBA,gBAAAA;wBAClBF,OAAAA,EAASA,OAAAA;wBACTC,IAAAA,EAAMA,IAAAA;wBACNH,eAAAA,EAAiBA,eAAAA;AACjBf,wBAAAA,MAAAA,EAAQA,MAAAA,IAAU;;;AAI1B,YAAA,CAAA;YACAyD,MAAAA,EAAQ,kBACN9P,GAAA,CAAC+P,KAAAA,CAAMhF,MAAM,EAAA;oBAACxK,cAAAA,EAAe,UAAA;AAC3B,oBAAA,QAAA,gBAAAP,GAAA,CAACgL,MAAAA,EAAAA;wBACCG,OAAAA,EAAS0D,uBAAAA;AACT9I,wBAAAA,QAAAA,EAAU,CAACsJ,aAAAA,IAAiBjB,gBAAAA,CAAiBvJ,MAAM,KAAK,CAAA;wBACxD7D,OAAAA,EAAQ,SAAA;wBACRkK,OAAAA,EAASiE,YAAAA;kCAERzP,aAAAA,CAAc;AACbE,4BAAAA,EAAAA,EAAIuO,gBAAgB,mBAAA,GAAsB,qBAAA;AAC1CrO,4BAAAA,cAAAA,EAAgBqO,gBAAgB,SAAA,GAAY;AAC9C,yBAAA;;;AAIR;AACF,KAAA;AACF,CAAA;AAEA;;qGAGA,MAAM6B,0BAAmD,CAACC,KAAAA,GAAAA;AACxD,IAAA,OAAO7D,gBAAAA,CAAiB;QAAEC,MAAAA,EAAQ,cAAA;AAAgB,QAAA,GAAG4D;AAAM,KAAA,CAAA;AAC7D;AAEA;;qGAGA,MAAMC,4BAAqD,CAACD,KAAAA,GAAAA;AAC1D,IAAA,OAAO7D,gBAAAA,CAAiB;QAAEC,MAAAA,EAAQ,gBAAA;AAAkB,QAAA,GAAG4D;AAAM,KAAA,CAAA;AAC/D;AAEA;;;AAGC,IACD,MAAMrE,WAAAA,GAAclF,MAAAA,CAAOyJ,KAAAA,CAAM;;;;AAIjC,CAAC;;;;"}