Files
klz-cables.com/.pnpm-store/v10/files/f4/cfe294d42ae705e3d403317e96ab1d0fc65242ee21441dd231a81d94f8839c9a94d456bdade011f0b9f67f244d8f6ea8af38c3c05c453475465069dde3f007
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

1 line
28 KiB
Plaintext

{"version":3,"sources":["../../src/config/sanitize.ts"],"sourcesContent":["import type { AcceptedLanguages } from '@payloadcms/translations'\n\nimport { en } from '@payloadcms/translations/languages/en'\nimport { deepMergeSimple } from '@payloadcms/translations/utilities'\n\nimport type { CollectionSlug, GlobalSlug, SanitizedCollectionConfig } from '../index.js'\nimport type { SanitizedJobsConfig } from '../queues/config/types/index.js'\nimport type {\n Config,\n LocalizationConfigWithLabels,\n LocalizationConfigWithNoLabels,\n SanitizedConfig,\n Timezone,\n WidgetInstance,\n} from './types.js'\n\nimport { defaultUserCollection } from '../auth/defaultUser.js'\nimport { authRootEndpoints } from '../auth/endpoints/index.js'\nimport { sanitizeCollection } from '../collections/config/sanitize.js'\nimport { migrationsCollection } from '../database/migrations/migrationsCollection.js'\nimport { DuplicateCollection, InvalidConfiguration } from '../errors/index.js'\nimport { defaultTimezones } from '../fields/baseFields/timezone/defaultTimezones.js'\nimport { addFolderCollection } from '../folders/addFolderCollection.js'\nimport { addFolderFieldToCollection } from '../folders/addFolderFieldToCollection.js'\nimport { sanitizeGlobal } from '../globals/config/sanitize.js'\nimport { baseBlockFields, formatLabels, sanitizeFields } from '../index.js'\nimport {\n getLockedDocumentsCollection,\n lockedDocumentsCollectionSlug,\n} from '../locked-documents/config.js'\nimport { getPreferencesCollection, preferencesCollectionSlug } from '../preferences/config.js'\nimport { getQueryPresetsConfig, queryPresetsCollectionSlug } from '../query-presets/config.js'\nimport { getDefaultJobsCollection, jobsCollectionSlug } from '../queues/config/collection.js'\nimport { getJobStatsGlobal } from '../queues/config/global.js'\nimport { flattenBlock } from '../utilities/flattenAllFields.js'\nimport { hasScheduledPublishEnabled } from '../utilities/getVersionsConfig.js'\nimport { validateTimezones } from '../utilities/validateTimezones.js'\nimport { getSchedulePublishTask } from '../versions/schedule/job.js'\nimport { addDefaultsToConfig } from './defaults.js'\nimport { setupOrderable } from './orderable/index.js'\n\nconst sanitizeAdminConfig = (configToSanitize: Config): Partial<SanitizedConfig> => {\n const sanitizedConfig = { ...configToSanitize }\n\n if (configToSanitize?.compatibility?.allowLocalizedWithinLocalized) {\n process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized = 'true'\n }\n\n // default logging level will be 'error' if not provided\n sanitizedConfig.loggingLevels = {\n Forbidden: 'info',\n Locked: 'info',\n MissingFile: 'info',\n NotFound: 'info',\n ValidationError: 'info',\n ...(sanitizedConfig.loggingLevels || {}),\n }\n ;(sanitizedConfig.admin!.dashboard ??= { widgets: [] }).widgets.push({\n slug: 'collections',\n ComponentPath: '@payloadcms/next/rsc#CollectionCards',\n minWidth: 'full',\n })\n sanitizedConfig.admin!.dashboard.defaultLayout ??= [\n {\n widgetSlug: 'collections',\n width: 'full',\n } satisfies WidgetInstance,\n ]\n\n // add default user collection if none provided\n if (!sanitizedConfig?.admin?.user) {\n const firstCollectionWithAuth = sanitizedConfig.collections!.find(({ auth }) => Boolean(auth))\n\n if (firstCollectionWithAuth) {\n sanitizedConfig.admin!.user = firstCollectionWithAuth.slug\n } else {\n sanitizedConfig.admin!.user = defaultUserCollection.slug\n sanitizedConfig.collections!.push(defaultUserCollection)\n }\n }\n\n const userCollection = sanitizedConfig.collections!.find(\n ({ slug }) => slug === sanitizedConfig.admin!.user,\n )\n\n if (!userCollection || !userCollection.auth) {\n throw new InvalidConfiguration(\n `${sanitizedConfig.admin!.user} is not a valid admin user collection`,\n )\n }\n\n if (sanitizedConfig?.admin?.timezones) {\n if (typeof configToSanitize?.admin?.timezones?.supportedTimezones === 'function') {\n sanitizedConfig.admin.timezones.supportedTimezones =\n configToSanitize.admin.timezones.supportedTimezones({ defaultTimezones })\n }\n\n if (!sanitizedConfig?.admin?.timezones?.supportedTimezones) {\n sanitizedConfig.admin.timezones.supportedTimezones = defaultTimezones\n }\n } else {\n sanitizedConfig.admin!.timezones = {\n supportedTimezones: defaultTimezones,\n }\n }\n\n validateTimezones({\n source: 'admin.timezones.supportedTimezones',\n timezones: sanitizedConfig.admin!.timezones.supportedTimezones as Timezone[],\n })\n\n return sanitizedConfig as unknown as Partial<SanitizedConfig>\n}\n\nexport const sanitizeConfig = async (incomingConfig: Config): Promise<SanitizedConfig> => {\n const configWithDefaults = addDefaultsToConfig(incomingConfig)\n\n const config: Partial<SanitizedConfig> = sanitizeAdminConfig(configWithDefaults)\n\n // Add orderable fields\n setupOrderable(config as SanitizedConfig)\n\n if (!config.endpoints) {\n config.endpoints = []\n }\n\n for (const endpoint of authRootEndpoints) {\n config.endpoints.push(endpoint)\n }\n\n if (config.localization && config.localization.locales?.length > 0) {\n // clone localization config so to not break everything\n const firstLocale = config.localization.locales[0]\n if (typeof firstLocale === 'string') {\n config.localization.localeCodes = [\n ...(config.localization as unknown as LocalizationConfigWithNoLabels).locales,\n ]\n\n // is string[], so convert to Locale[]\n config.localization.locales = (\n config.localization as unknown as LocalizationConfigWithNoLabels\n ).locales.map((locale) => ({\n code: locale,\n label: locale,\n rtl: false,\n toString: () => locale,\n }))\n } else {\n // is Locale[], so convert to string[] for localeCodes\n config.localization.localeCodes = config.localization.locales.map((locale) => locale.code)\n\n config.localization.locales = (\n config.localization as LocalizationConfigWithLabels\n ).locales.map((locale) => ({\n ...locale,\n toString: () => locale.code,\n }))\n }\n\n // Default fallback to true if not provided\n config.localization.fallback = config.localization?.fallback ?? true\n }\n\n const i18nConfig: SanitizedConfig['i18n'] = {\n fallbackLanguage: 'en',\n supportedLanguages: {\n en,\n },\n translations: {},\n }\n\n if (incomingConfig?.i18n) {\n i18nConfig.supportedLanguages =\n incomingConfig.i18n?.supportedLanguages || i18nConfig.supportedLanguages\n\n const supportedLangKeys = <AcceptedLanguages[]>Object.keys(i18nConfig.supportedLanguages)\n const fallbackLang = incomingConfig.i18n?.fallbackLanguage || i18nConfig.fallbackLanguage\n\n i18nConfig.fallbackLanguage = supportedLangKeys.includes(fallbackLang)\n ? fallbackLang\n : supportedLangKeys[0]!\n i18nConfig.translations =\n (incomingConfig.i18n?.translations as SanitizedConfig['i18n']['translations']) ||\n i18nConfig.translations\n }\n\n config.i18n = i18nConfig\n\n const richTextSanitizationPromises: Array<(config: SanitizedConfig) => Promise<void>> = []\n\n const schedulePublishCollections: CollectionSlug[] = []\n\n const queryPresetsCollections: CollectionSlug[] = []\n\n const schedulePublishGlobals: GlobalSlug[] = []\n\n const collectionSlugs = new Set<CollectionSlug>()\n\n const validRelationships = [\n ...(config.collections?.map((c) => c.slug) ?? []),\n jobsCollectionSlug,\n lockedDocumentsCollectionSlug,\n preferencesCollectionSlug,\n ]\n\n if (config.folders !== false) {\n validRelationships.push(config.folders!.slug)\n }\n\n /**\n * Blocks sanitization needs to happen before collections, as collection/global join field sanitization needs config.blocks\n * to be populated with the sanitized blocks\n */\n config.blocks = []\n\n if (incomingConfig.blocks?.length) {\n for (const block of incomingConfig.blocks) {\n const sanitizedBlock = block\n\n if (sanitizedBlock._sanitized === true) {\n continue\n }\n sanitizedBlock._sanitized = true\n\n sanitizedBlock.fields = sanitizedBlock.fields.concat(baseBlockFields)\n\n sanitizedBlock.labels = !sanitizedBlock.labels\n ? formatLabels(sanitizedBlock.slug)\n : sanitizedBlock.labels\n\n sanitizedBlock.fields = await sanitizeFields({\n config: config as unknown as Config,\n existingFieldNames: new Set(),\n fields: sanitizedBlock.fields,\n parentIsLocalized: false,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n const flattenedSanitizedBlock = flattenBlock({ block })\n\n config.blocks.push(flattenedSanitizedBlock)\n }\n }\n\n const folderEnabledCollections: SanitizedCollectionConfig[] = []\n\n for (let i = 0; i < config.collections!.length; i++) {\n if (collectionSlugs.has(config.collections![i]!.slug)) {\n throw new DuplicateCollection('slug', config.collections![i]!.slug)\n }\n\n collectionSlugs.add(config.collections![i]!.slug)\n\n const draftsConfig = config.collections![i]?.versions?.drafts\n\n if (typeof draftsConfig === 'object' && draftsConfig.schedulePublish) {\n schedulePublishCollections.push(config.collections![i]!.slug)\n }\n\n if (config.collections![i]!.enableQueryPresets) {\n queryPresetsCollections.push(config.collections![i]!.slug)\n\n if (!validRelationships.includes(queryPresetsCollectionSlug)) {\n validRelationships.push(queryPresetsCollectionSlug)\n }\n }\n\n if (config.folders !== false && config.collections![i]!.folders) {\n addFolderFieldToCollection({\n collection: config.collections![i]!,\n collectionSpecific: config.folders!.collectionSpecific,\n folderFieldName: config.folders!.fieldName,\n folderSlug: config.folders!.slug,\n })\n }\n\n config.collections![i] = await sanitizeCollection(\n config as unknown as Config,\n config.collections![i]!,\n richTextSanitizationPromises,\n validRelationships,\n )\n\n if (config.folders !== false && config.collections![i]!.folders) {\n folderEnabledCollections.push(config.collections![i]!)\n }\n }\n\n if (config.globals!.length > 0) {\n for (let i = 0; i < config.globals!.length; i++) {\n if (hasScheduledPublishEnabled(config.globals![i]!)) {\n schedulePublishGlobals.push(config.globals![i]!.slug)\n }\n\n config.globals![i] = await sanitizeGlobal(\n config as unknown as Config,\n config.globals![i]!,\n richTextSanitizationPromises,\n validRelationships,\n )\n }\n }\n\n if (schedulePublishCollections.length || schedulePublishGlobals.length) {\n ;((config.jobs ??= {} as SanitizedJobsConfig).tasks ??= []).push(\n getSchedulePublishTask({\n adminUserSlug: config.admin!.user,\n collections: schedulePublishCollections,\n globals: schedulePublishGlobals,\n }),\n )\n }\n\n ;(config.jobs ??= {} as SanitizedJobsConfig).enabled = Boolean(\n (Array.isArray(configWithDefaults.jobs?.tasks) && configWithDefaults.jobs?.tasks?.length) ||\n (Array.isArray(configWithDefaults.jobs?.workflows) &&\n configWithDefaults.jobs?.workflows?.length),\n )\n\n // Need to add default jobs collection before locked documents collections\n if (config.jobs.enabled) {\n // Check for schedule property in both tasks and workflows\n const hasScheduleProperty =\n (config?.jobs?.tasks?.length && config.jobs.tasks.some((task) => task.schedule)) ||\n (config?.jobs?.workflows?.length &&\n config.jobs.workflows.some((workflow) => workflow.schedule))\n\n if (hasScheduleProperty) {\n config.jobs.scheduling = true\n // Add payload-jobs-stats global for tracking when a job of a specific slug was last run\n ;(config.globals ??= []).push(\n await sanitizeGlobal(\n config as unknown as Config,\n getJobStatsGlobal(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n config.jobs.stats = true\n }\n\n let defaultJobsCollection = getDefaultJobsCollection(config.jobs)\n\n if (typeof config.jobs.jobsCollectionOverrides === 'function') {\n defaultJobsCollection = config.jobs.jobsCollectionOverrides({\n defaultJobsCollection,\n })\n\n const hooks = defaultJobsCollection?.hooks\n // @todo - delete this check in 4.0\n if (hooks && config?.jobs?.runHooks !== true) {\n for (const [hookKey, hook] of Object.entries(hooks)) {\n const defaultAmount = hookKey === 'afterRead' || hookKey === 'beforeChange' ? 1 : 0\n if (hook.length > defaultAmount) {\n // eslint-disable-next-line no-console\n console.warn(\n `The jobsCollectionOverrides function is returning a collection with an additional ${hookKey} hook defined. These hooks will not run unless the jobs.runHooks option is set to true. Setting this option to true will negatively impact performance.`,\n )\n break\n }\n }\n }\n }\n const sanitizedJobsCollection = await sanitizeCollection(\n config as unknown as Config,\n defaultJobsCollection,\n richTextSanitizationPromises,\n validRelationships,\n )\n\n ;(config.collections ??= []).push(sanitizedJobsCollection)\n }\n\n if (config.folders !== false && folderEnabledCollections.length) {\n await addFolderCollection({\n collectionSpecific: config.folders!.collectionSpecific,\n config: config as unknown as Config,\n folderEnabledCollections,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n const lockedDocumentsCollection = getLockedDocumentsCollection(config as unknown as Config)\n\n if (lockedDocumentsCollection) {\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n lockedDocumentsCollection,\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n }\n\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getPreferencesCollection(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n\n const migrations = await sanitizeCollection(\n config as unknown as Config,\n migrationsCollection,\n richTextSanitizationPromises,\n validRelationships,\n )\n\n // @ts-expect-error indexSortableFields is only valid for @payloadcms/db-mongodb\n if (config?.db?.indexSortableFields) {\n migrations.indexes = [\n {\n fields: ['batch', 'name'],\n unique: false,\n },\n ]\n }\n configWithDefaults.collections!.push(migrations)\n\n if (queryPresetsCollections.length > 0) {\n configWithDefaults.collections!.push(\n await sanitizeCollection(\n config as unknown as Config,\n getQueryPresetsConfig(config as unknown as Config),\n richTextSanitizationPromises,\n validRelationships,\n ),\n )\n }\n\n if (config.serverURL !== '') {\n config.csrf!.push(config.serverURL!)\n }\n\n const uploadAdapters = new Set<string>()\n // interact with all collections\n for (const collection of config.collections!) {\n // deduped upload adapters\n if (collection.upload?.adapter) {\n uploadAdapters.add(collection.upload.adapter)\n }\n }\n\n if (!config.upload) {\n config.upload = { adapters: [] }\n }\n\n config.upload.adapters = Array.from(\n new Set(config.collections!.map((c) => c.upload?.adapter).filter(Boolean) as string[]),\n )\n\n // Pass through the email config as is so adapters don't break\n if (incomingConfig.email) {\n config.email = incomingConfig.email\n }\n\n /*\n Execute richText sanitization\n */\n if (typeof incomingConfig.editor === 'function') {\n config.editor = await incomingConfig.editor({\n config: config as SanitizedConfig,\n isRoot: true,\n parentIsLocalized: false,\n })\n if (config.editor.i18n && Object.keys(config.editor.i18n).length >= 0) {\n config.i18n.translations = deepMergeSimple(config.i18n.translations, config.editor.i18n)\n }\n }\n\n const promises: Promise<void>[] = []\n\n for (const sanitizeFunction of richTextSanitizationPromises) {\n promises.push(sanitizeFunction(config as SanitizedConfig))\n }\n\n await Promise.all(promises)\n\n return config as SanitizedConfig\n}\n"],"names":["en","deepMergeSimple","defaultUserCollection","authRootEndpoints","sanitizeCollection","migrationsCollection","DuplicateCollection","InvalidConfiguration","defaultTimezones","addFolderCollection","addFolderFieldToCollection","sanitizeGlobal","baseBlockFields","formatLabels","sanitizeFields","getLockedDocumentsCollection","lockedDocumentsCollectionSlug","getPreferencesCollection","preferencesCollectionSlug","getQueryPresetsConfig","queryPresetsCollectionSlug","getDefaultJobsCollection","jobsCollectionSlug","getJobStatsGlobal","flattenBlock","hasScheduledPublishEnabled","validateTimezones","getSchedulePublishTask","addDefaultsToConfig","setupOrderable","sanitizeAdminConfig","configToSanitize","sanitizedConfig","compatibility","allowLocalizedWithinLocalized","process","env","NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized","loggingLevels","Forbidden","Locked","MissingFile","NotFound","ValidationError","admin","dashboard","widgets","push","slug","ComponentPath","minWidth","defaultLayout","widgetSlug","width","user","firstCollectionWithAuth","collections","find","auth","Boolean","userCollection","timezones","supportedTimezones","source","sanitizeConfig","incomingConfig","configWithDefaults","config","endpoints","endpoint","localization","locales","length","firstLocale","localeCodes","map","locale","code","label","rtl","toString","fallback","i18nConfig","fallbackLanguage","supportedLanguages","translations","i18n","supportedLangKeys","Object","keys","fallbackLang","includes","richTextSanitizationPromises","schedulePublishCollections","queryPresetsCollections","schedulePublishGlobals","collectionSlugs","Set","validRelationships","c","folders","blocks","block","sanitizedBlock","_sanitized","fields","concat","labels","existingFieldNames","parentIsLocalized","flattenedSanitizedBlock","folderEnabledCollections","i","has","add","draftsConfig","versions","drafts","schedulePublish","enableQueryPresets","collection","collectionSpecific","folderFieldName","fieldName","folderSlug","globals","jobs","tasks","adminUserSlug","enabled","Array","isArray","workflows","hasScheduleProperty","some","task","schedule","workflow","scheduling","stats","defaultJobsCollection","jobsCollectionOverrides","hooks","runHooks","hookKey","hook","entries","defaultAmount","console","warn","sanitizedJobsCollection","lockedDocumentsCollection","migrations","db","indexSortableFields","indexes","unique","serverURL","csrf","uploadAdapters","upload","adapter","adapters","from","filter","email","editor","isRoot","promises","sanitizeFunction","Promise","all"],"mappings":"AAEA,SAASA,EAAE,QAAQ,wCAAuC;AAC1D,SAASC,eAAe,QAAQ,qCAAoC;AAapE,SAASC,qBAAqB,QAAQ,yBAAwB;AAC9D,SAASC,iBAAiB,QAAQ,6BAA4B;AAC9D,SAASC,kBAAkB,QAAQ,oCAAmC;AACtE,SAASC,oBAAoB,QAAQ,iDAAgD;AACrF,SAASC,mBAAmB,EAAEC,oBAAoB,QAAQ,qBAAoB;AAC9E,SAASC,gBAAgB,QAAQ,oDAAmD;AACpF,SAASC,mBAAmB,QAAQ,oCAAmC;AACvE,SAASC,0BAA0B,QAAQ,2CAA0C;AACrF,SAASC,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,eAAe,EAAEC,YAAY,EAAEC,cAAc,QAAQ,cAAa;AAC3E,SACEC,4BAA4B,EAC5BC,6BAA6B,QACxB,gCAA+B;AACtC,SAASC,wBAAwB,EAAEC,yBAAyB,QAAQ,2BAA0B;AAC9F,SAASC,qBAAqB,EAAEC,0BAA0B,QAAQ,6BAA4B;AAC9F,SAASC,wBAAwB,EAAEC,kBAAkB,QAAQ,iCAAgC;AAC7F,SAASC,iBAAiB,QAAQ,6BAA4B;AAC9D,SAASC,YAAY,QAAQ,mCAAkC;AAC/D,SAASC,0BAA0B,QAAQ,oCAAmC;AAC9E,SAASC,iBAAiB,QAAQ,oCAAmC;AACrE,SAASC,sBAAsB,QAAQ,8BAA6B;AACpE,SAASC,mBAAmB,QAAQ,gBAAe;AACnD,SAASC,cAAc,QAAQ,uBAAsB;AAErD,MAAMC,sBAAsB,CAACC;IAC3B,MAAMC,kBAAkB;QAAE,GAAGD,gBAAgB;IAAC;IAE9C,IAAIA,kBAAkBE,eAAeC,+BAA+B;QAClEC,QAAQC,GAAG,CAACC,+DAA+D,GAAG;IAChF;IAEA,wDAAwD;IACxDL,gBAAgBM,aAAa,GAAG;QAC9BC,WAAW;QACXC,QAAQ;QACRC,aAAa;QACbC,UAAU;QACVC,iBAAiB;QACjB,GAAIX,gBAAgBM,aAAa,IAAI,CAAC,CAAC;IACzC;IACEN,CAAAA,gBAAgBY,KAAK,CAAEC,SAAS,KAAK;QAAEC,SAAS,EAAE;IAAC,CAAA,EAAGA,OAAO,CAACC,IAAI,CAAC;QACnEC,MAAM;QACNC,eAAe;QACfC,UAAU;IACZ;IACAlB,gBAAgBY,KAAK,CAAEC,SAAS,CAACM,aAAa,KAAK;QACjD;YACEC,YAAY;YACZC,OAAO;QACT;KACD;IAED,+CAA+C;IAC/C,IAAI,CAACrB,iBAAiBY,OAAOU,MAAM;QACjC,MAAMC,0BAA0BvB,gBAAgBwB,WAAW,CAAEC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKC,QAAQD;QAExF,IAAIH,yBAAyB;YAC3BvB,gBAAgBY,KAAK,CAAEU,IAAI,GAAGC,wBAAwBP,IAAI;QAC5D,OAAO;YACLhB,gBAAgBY,KAAK,CAAEU,IAAI,GAAGpD,sBAAsB8C,IAAI;YACxDhB,gBAAgBwB,WAAW,CAAET,IAAI,CAAC7C;QACpC;IACF;IAEA,MAAM0D,iBAAiB5B,gBAAgBwB,WAAW,CAAEC,IAAI,CACtD,CAAC,EAAET,IAAI,EAAE,GAAKA,SAAShB,gBAAgBY,KAAK,CAAEU,IAAI;IAGpD,IAAI,CAACM,kBAAkB,CAACA,eAAeF,IAAI,EAAE;QAC3C,MAAM,IAAInD,qBACR,GAAGyB,gBAAgBY,KAAK,CAAEU,IAAI,CAAC,qCAAqC,CAAC;IAEzE;IAEA,IAAItB,iBAAiBY,OAAOiB,WAAW;QACrC,IAAI,OAAO9B,kBAAkBa,OAAOiB,WAAWC,uBAAuB,YAAY;YAChF9B,gBAAgBY,KAAK,CAACiB,SAAS,CAACC,kBAAkB,GAChD/B,iBAAiBa,KAAK,CAACiB,SAAS,CAACC,kBAAkB,CAAC;gBAAEtD;YAAiB;QAC3E;QAEA,IAAI,CAACwB,iBAAiBY,OAAOiB,WAAWC,oBAAoB;YAC1D9B,gBAAgBY,KAAK,CAACiB,SAAS,CAACC,kBAAkB,GAAGtD;QACvD;IACF,OAAO;QACLwB,gBAAgBY,KAAK,CAAEiB,SAAS,GAAG;YACjCC,oBAAoBtD;QACtB;IACF;IAEAkB,kBAAkB;QAChBqC,QAAQ;QACRF,WAAW7B,gBAAgBY,KAAK,CAAEiB,SAAS,CAACC,kBAAkB;IAChE;IAEA,OAAO9B;AACT;AAEA,OAAO,MAAMgC,iBAAiB,OAAOC;IACnC,MAAMC,qBAAqBtC,oBAAoBqC;IAE/C,MAAME,SAAmCrC,oBAAoBoC;IAE7D,uBAAuB;IACvBrC,eAAesC;IAEf,IAAI,CAACA,OAAOC,SAAS,EAAE;QACrBD,OAAOC,SAAS,GAAG,EAAE;IACvB;IAEA,KAAK,MAAMC,YAAYlE,kBAAmB;QACxCgE,OAAOC,SAAS,CAACrB,IAAI,CAACsB;IACxB;IAEA,IAAIF,OAAOG,YAAY,IAAIH,OAAOG,YAAY,CAACC,OAAO,EAAEC,SAAS,GAAG;QAClE,uDAAuD;QACvD,MAAMC,cAAcN,OAAOG,YAAY,CAACC,OAAO,CAAC,EAAE;QAClD,IAAI,OAAOE,gBAAgB,UAAU;YACnCN,OAAOG,YAAY,CAACI,WAAW,GAAG;mBAC7B,AAACP,OAAOG,YAAY,CAA+CC,OAAO;aAC9E;YAED,sCAAsC;YACtCJ,OAAOG,YAAY,CAACC,OAAO,GAAG,AAC5BJ,OAAOG,YAAY,CACnBC,OAAO,CAACI,GAAG,CAAC,CAACC,SAAY,CAAA;oBACzBC,MAAMD;oBACNE,OAAOF;oBACPG,KAAK;oBACLC,UAAU,IAAMJ;gBAClB,CAAA;QACF,OAAO;YACL,sDAAsD;YACtDT,OAAOG,YAAY,CAACI,WAAW,GAAGP,OAAOG,YAAY,CAACC,OAAO,CAACI,GAAG,CAAC,CAACC,SAAWA,OAAOC,IAAI;YAEzFV,OAAOG,YAAY,CAACC,OAAO,GAAG,AAC5BJ,OAAOG,YAAY,CACnBC,OAAO,CAACI,GAAG,CAAC,CAACC,SAAY,CAAA;oBACzB,GAAGA,MAAM;oBACTI,UAAU,IAAMJ,OAAOC,IAAI;gBAC7B,CAAA;QACF;QAEA,2CAA2C;QAC3CV,OAAOG,YAAY,CAACW,QAAQ,GAAGd,OAAOG,YAAY,EAAEW,YAAY;IAClE;IAEA,MAAMC,aAAsC;QAC1CC,kBAAkB;QAClBC,oBAAoB;YAClBpF;QACF;QACAqF,cAAc,CAAC;IACjB;IAEA,IAAIpB,gBAAgBqB,MAAM;QACxBJ,WAAWE,kBAAkB,GAC3BnB,eAAeqB,IAAI,EAAEF,sBAAsBF,WAAWE,kBAAkB;QAE1E,MAAMG,oBAAyCC,OAAOC,IAAI,CAACP,WAAWE,kBAAkB;QACxF,MAAMM,eAAezB,eAAeqB,IAAI,EAAEH,oBAAoBD,WAAWC,gBAAgB;QAEzFD,WAAWC,gBAAgB,GAAGI,kBAAkBI,QAAQ,CAACD,gBACrDA,eACAH,iBAAiB,CAAC,EAAE;QACxBL,WAAWG,YAAY,GACrB,AAACpB,eAAeqB,IAAI,EAAED,gBACtBH,WAAWG,YAAY;IAC3B;IAEAlB,OAAOmB,IAAI,GAAGJ;IAEd,MAAMU,+BAAkF,EAAE;IAE1F,MAAMC,6BAA+C,EAAE;IAEvD,MAAMC,0BAA4C,EAAE;IAEpD,MAAMC,yBAAuC,EAAE;IAE/C,MAAMC,kBAAkB,IAAIC;IAE5B,MAAMC,qBAAqB;WACrB/B,OAAOX,WAAW,EAAEmB,IAAI,CAACwB,IAAMA,EAAEnD,IAAI,KAAK,EAAE;QAChD1B;QACAN;QACAE;KACD;IAED,IAAIiD,OAAOiC,OAAO,KAAK,OAAO;QAC5BF,mBAAmBnD,IAAI,CAACoB,OAAOiC,OAAO,CAAEpD,IAAI;IAC9C;IAEA;;;GAGC,GACDmB,OAAOkC,MAAM,GAAG,EAAE;IAElB,IAAIpC,eAAeoC,MAAM,EAAE7B,QAAQ;QACjC,KAAK,MAAM8B,SAASrC,eAAeoC,MAAM,CAAE;YACzC,MAAME,iBAAiBD;YAEvB,IAAIC,eAAeC,UAAU,KAAK,MAAM;gBACtC;YACF;YACAD,eAAeC,UAAU,GAAG;YAE5BD,eAAeE,MAAM,GAAGF,eAAeE,MAAM,CAACC,MAAM,CAAC9F;YAErD2F,eAAeI,MAAM,GAAG,CAACJ,eAAeI,MAAM,GAC1C9F,aAAa0F,eAAevD,IAAI,IAChCuD,eAAeI,MAAM;YAEzBJ,eAAeE,MAAM,GAAG,MAAM3F,eAAe;gBAC3CqD,QAAQA;gBACRyC,oBAAoB,IAAIX;gBACxBQ,QAAQF,eAAeE,MAAM;gBAC7BI,mBAAmB;gBACnBjB;gBACAM;YACF;YAEA,MAAMY,0BAA0BtF,aAAa;gBAAE8E;YAAM;YAErDnC,OAAOkC,MAAM,CAACtD,IAAI,CAAC+D;QACrB;IACF;IAEA,MAAMC,2BAAwD,EAAE;IAEhE,IAAK,IAAIC,IAAI,GAAGA,IAAI7C,OAAOX,WAAW,CAAEgB,MAAM,EAAEwC,IAAK;QACnD,IAAIhB,gBAAgBiB,GAAG,CAAC9C,OAAOX,WAAW,AAAC,CAACwD,EAAE,CAAEhE,IAAI,GAAG;YACrD,MAAM,IAAI1C,oBAAoB,QAAQ6D,OAAOX,WAAW,AAAC,CAACwD,EAAE,CAAEhE,IAAI;QACpE;QAEAgD,gBAAgBkB,GAAG,CAAC/C,OAAOX,WAAW,AAAC,CAACwD,EAAE,CAAEhE,IAAI;QAEhD,MAAMmE,eAAehD,OAAOX,WAAW,AAAC,CAACwD,EAAE,EAAEI,UAAUC;QAEvD,IAAI,OAAOF,iBAAiB,YAAYA,aAAaG,eAAe,EAAE;YACpEzB,2BAA2B9C,IAAI,CAACoB,OAAOX,WAAW,AAAC,CAACwD,EAAE,CAAEhE,IAAI;QAC9D;QAEA,IAAImB,OAAOX,WAAW,AAAC,CAACwD,EAAE,CAAEO,kBAAkB,EAAE;YAC9CzB,wBAAwB/C,IAAI,CAACoB,OAAOX,WAAW,AAAC,CAACwD,EAAE,CAAEhE,IAAI;YAEzD,IAAI,CAACkD,mBAAmBP,QAAQ,CAACvE,6BAA6B;gBAC5D8E,mBAAmBnD,IAAI,CAAC3B;YAC1B;QACF;QAEA,IAAI+C,OAAOiC,OAAO,KAAK,SAASjC,OAAOX,WAAW,AAAC,CAACwD,EAAE,CAAEZ,OAAO,EAAE;YAC/D1F,2BAA2B;gBACzB8G,YAAYrD,OAAOX,WAAW,AAAC,CAACwD,EAAE;gBAClCS,oBAAoBtD,OAAOiC,OAAO,CAAEqB,kBAAkB;gBACtDC,iBAAiBvD,OAAOiC,OAAO,CAAEuB,SAAS;gBAC1CC,YAAYzD,OAAOiC,OAAO,CAAEpD,IAAI;YAClC;QACF;QAEAmB,OAAOX,WAAW,AAAC,CAACwD,EAAE,GAAG,MAAM5G,mBAC7B+D,QACAA,OAAOX,WAAW,AAAC,CAACwD,EAAE,EACtBpB,8BACAM;QAGF,IAAI/B,OAAOiC,OAAO,KAAK,SAASjC,OAAOX,WAAW,AAAC,CAACwD,EAAE,CAAEZ,OAAO,EAAE;YAC/DW,yBAAyBhE,IAAI,CAACoB,OAAOX,WAAW,AAAC,CAACwD,EAAE;QACtD;IACF;IAEA,IAAI7C,OAAO0D,OAAO,CAAErD,MAAM,GAAG,GAAG;QAC9B,IAAK,IAAIwC,IAAI,GAAGA,IAAI7C,OAAO0D,OAAO,CAAErD,MAAM,EAAEwC,IAAK;YAC/C,IAAIvF,2BAA2B0C,OAAO0D,OAAO,AAAC,CAACb,EAAE,GAAI;gBACnDjB,uBAAuBhD,IAAI,CAACoB,OAAO0D,OAAO,AAAC,CAACb,EAAE,CAAEhE,IAAI;YACtD;YAEAmB,OAAO0D,OAAO,AAAC,CAACb,EAAE,GAAG,MAAMrG,eACzBwD,QACAA,OAAO0D,OAAO,AAAC,CAACb,EAAE,EAClBpB,8BACAM;QAEJ;IACF;IAEA,IAAIL,2BAA2BrB,MAAM,IAAIuB,uBAAuBvB,MAAM,EAAE;;QACpE,CAAA,AAACL,CAAAA,OAAO2D,IAAI,KAAK,CAAC,CAAuB,EAAGC,KAAK,KAAK,EAAE,AAAD,EAAGhF,IAAI,CAC9DpB,uBAAuB;YACrBqG,eAAe7D,OAAOvB,KAAK,CAAEU,IAAI;YACjCE,aAAaqC;YACbgC,SAAS9B;QACX;IAEJ;;IAEE5B,CAAAA,OAAO2D,IAAI,KAAK,CAAC,CAAuB,EAAGG,OAAO,GAAGtE,QACrD,AAACuE,MAAMC,OAAO,CAACjE,mBAAmB4D,IAAI,EAAEC,UAAU7D,mBAAmB4D,IAAI,EAAEC,OAAOvD,UAC/E0D,MAAMC,OAAO,CAACjE,mBAAmB4D,IAAI,EAAEM,cACtClE,mBAAmB4D,IAAI,EAAEM,WAAW5D;IAG1C,0EAA0E;IAC1E,IAAIL,OAAO2D,IAAI,CAACG,OAAO,EAAE;QACvB,0DAA0D;QAC1D,MAAMI,sBACJ,AAAClE,QAAQ2D,MAAMC,OAAOvD,UAAUL,OAAO2D,IAAI,CAACC,KAAK,CAACO,IAAI,CAAC,CAACC,OAASA,KAAKC,QAAQ,KAC7ErE,QAAQ2D,MAAMM,WAAW5D,UACxBL,OAAO2D,IAAI,CAACM,SAAS,CAACE,IAAI,CAAC,CAACG,WAAaA,SAASD,QAAQ;QAE9D,IAAIH,qBAAqB;YACvBlE,OAAO2D,IAAI,CAACY,UAAU,GAAG;YAEvBvE,CAAAA,OAAO0D,OAAO,KAAK,EAAE,AAAD,EAAG9E,IAAI,CAC3B,MAAMpC,eACJwD,QACA5C,kBAAkB4C,SAClByB,8BACAM;YAIJ/B,OAAO2D,IAAI,CAACa,KAAK,GAAG;QACtB;QAEA,IAAIC,wBAAwBvH,yBAAyB8C,OAAO2D,IAAI;QAEhE,IAAI,OAAO3D,OAAO2D,IAAI,CAACe,uBAAuB,KAAK,YAAY;YAC7DD,wBAAwBzE,OAAO2D,IAAI,CAACe,uBAAuB,CAAC;gBAC1DD;YACF;YAEA,MAAME,QAAQF,uBAAuBE;YACrC,mCAAmC;YACnC,IAAIA,SAAS3E,QAAQ2D,MAAMiB,aAAa,MAAM;gBAC5C,KAAK,MAAM,CAACC,SAASC,KAAK,IAAIzD,OAAO0D,OAAO,CAACJ,OAAQ;oBACnD,MAAMK,gBAAgBH,YAAY,eAAeA,YAAY,iBAAiB,IAAI;oBAClF,IAAIC,KAAKzE,MAAM,GAAG2E,eAAe;wBAC/B,sCAAsC;wBACtCC,QAAQC,IAAI,CACV,CAAC,kFAAkF,EAAEL,QAAQ,uJAAuJ,CAAC;wBAEvP;oBACF;gBACF;YACF;QACF;QACA,MAAMM,0BAA0B,MAAMlJ,mBACpC+D,QACAyE,uBACAhD,8BACAM;QAGA/B,CAAAA,OAAOX,WAAW,KAAK,EAAE,AAAD,EAAGT,IAAI,CAACuG;IACpC;IAEA,IAAInF,OAAOiC,OAAO,KAAK,SAASW,yBAAyBvC,MAAM,EAAE;QAC/D,MAAM/D,oBAAoB;YACxBgH,oBAAoBtD,OAAOiC,OAAO,CAAEqB,kBAAkB;YACtDtD,QAAQA;YACR4C;YACAnB;YACAM;QACF;IACF;IAEA,MAAMqD,4BAA4BxI,6BAA6BoD;IAE/D,IAAIoF,2BAA2B;QAC7BrF,mBAAmBV,WAAW,CAAET,IAAI,CAClC,MAAM3C,mBACJ+D,QACAoF,2BACA3D,8BACAM;IAGN;IAEAhC,mBAAmBV,WAAW,CAAET,IAAI,CAClC,MAAM3C,mBACJ+D,QACAlD,yBAAyBkD,SACzByB,8BACAM;IAIJ,MAAMsD,aAAa,MAAMpJ,mBACvB+D,QACA9D,sBACAuF,8BACAM;IAGF,gFAAgF;IAChF,IAAI/B,QAAQsF,IAAIC,qBAAqB;QACnCF,WAAWG,OAAO,GAAG;YACnB;gBACElD,QAAQ;oBAAC;oBAAS;iBAAO;gBACzBmD,QAAQ;YACV;SACD;IACH;IACA1F,mBAAmBV,WAAW,CAAET,IAAI,CAACyG;IAErC,IAAI1D,wBAAwBtB,MAAM,GAAG,GAAG;QACtCN,mBAAmBV,WAAW,CAAET,IAAI,CAClC,MAAM3C,mBACJ+D,QACAhD,sBAAsBgD,SACtByB,8BACAM;IAGN;IAEA,IAAI/B,OAAO0F,SAAS,KAAK,IAAI;QAC3B1F,OAAO2F,IAAI,CAAE/G,IAAI,CAACoB,OAAO0F,SAAS;IACpC;IAEA,MAAME,iBAAiB,IAAI9D;IAC3B,gCAAgC;IAChC,KAAK,MAAMuB,cAAcrD,OAAOX,WAAW,CAAG;QAC5C,0BAA0B;QAC1B,IAAIgE,WAAWwC,MAAM,EAAEC,SAAS;YAC9BF,eAAe7C,GAAG,CAACM,WAAWwC,MAAM,CAACC,OAAO;QAC9C;IACF;IAEA,IAAI,CAAC9F,OAAO6F,MAAM,EAAE;QAClB7F,OAAO6F,MAAM,GAAG;YAAEE,UAAU,EAAE;QAAC;IACjC;IAEA/F,OAAO6F,MAAM,CAACE,QAAQ,GAAGhC,MAAMiC,IAAI,CACjC,IAAIlE,IAAI9B,OAAOX,WAAW,CAAEmB,GAAG,CAAC,CAACwB,IAAMA,EAAE6D,MAAM,EAAEC,SAASG,MAAM,CAACzG;IAGnE,8DAA8D;IAC9D,IAAIM,eAAeoG,KAAK,EAAE;QACxBlG,OAAOkG,KAAK,GAAGpG,eAAeoG,KAAK;IACrC;IAEA;;GAEC,GACD,IAAI,OAAOpG,eAAeqG,MAAM,KAAK,YAAY;QAC/CnG,OAAOmG,MAAM,GAAG,MAAMrG,eAAeqG,MAAM,CAAC;YAC1CnG,QAAQA;YACRoG,QAAQ;YACR1D,mBAAmB;QACrB;QACA,IAAI1C,OAAOmG,MAAM,CAAChF,IAAI,IAAIE,OAAOC,IAAI,CAACtB,OAAOmG,MAAM,CAAChF,IAAI,EAAEd,MAAM,IAAI,GAAG;YACrEL,OAAOmB,IAAI,CAACD,YAAY,GAAGpF,gBAAgBkE,OAAOmB,IAAI,CAACD,YAAY,EAAElB,OAAOmG,MAAM,CAAChF,IAAI;QACzF;IACF;IAEA,MAAMkF,WAA4B,EAAE;IAEpC,KAAK,MAAMC,oBAAoB7E,6BAA8B;QAC3D4E,SAASzH,IAAI,CAAC0H,iBAAiBtG;IACjC;IAEA,MAAMuG,QAAQC,GAAG,CAACH;IAElB,OAAOrG;AACT,EAAC"}