{"version":3,"file":"partnerwidget-eb39d9c3.js","sources":["../../src/modules/PartnerWidget/views/Error.vue","../../src/modules/PartnerWidget/helpers/strings.js","../../src/modules/PartnerWidget/helpers/tracking.js","../../src/modules/PartnerWidget/helpers/dates.js","../../src/modules/PartnerWidget/constants/index.js","../../src/hooks/usePartnerWidgetBundleLoader.js","../../src/hooks/usePartnerWidget.js","../../src/modules/PartnerWidget/components/Badge.vue","../../src/modules/PartnerWidget/components/Logo.vue","../../src/modules/PartnerWidget/views/Entry.vue","../../src/modules/PartnerWidget/helpers/formatters.js","../../src/modules/PartnerWidget/components/package/PackagePreview.vue","../../src/modules/PartnerWidget/views/Bundle.vue","../../src/modules/PartnerWidget/components/product/ProductDetail.vue","../../src/modules/PartnerWidget/components/TabsContainer.vue","../../src/modules/PartnerWidget/components/PartnerWidgetExpander.vue","../../src/modules/PartnerWidget/components/PartnerWidgetAccordion.vue","../../src/modules/PartnerWidget/components/package/PackageDetail.vue","../../src/validations/personEdit.js","../../src/modules/PartnerWidget/components/person/PersonEdit.vue","../../src/modules/PartnerWidget/views/Detail.vue","../../src/modules/PartnerWidget/PartnerWidget.vue","../../src/modules/PartnerWidget/PartnerWidget.js"],"sourcesContent":["\n\n\n\n\n","/**\n * Will replace {something} strings by the according value passed in 'params'\n * Example: str = 'My name is {name} and I work at {place}. My favorite game is {game}.'\n * params = {name: 'Jorinho', place: 'Infocentric', wtf: 'nothing'}\n * stringFormat(str, params) -> \"My name is Jorinho and I work at Infocentric. My favorite game is {game}.\"\n * note: the 'wtf' parameter doesn't hurt.\n * note 2: a not provided {placeholder} will simply be ignored and returned as is...\n * @param {String} str\n * @param {Object} params\n * @returns {String}\n */\nexport const resolve = (str = '', params = {}) => {\n const search = /\\{([\\s\\S]+?)\\}/g\n\n if (!str) {\n return ''\n }\n\n return str.replace(search, function (term) {\n let key = term.substring(1).slice(0, -1)\n return params[key] !== undefined ? params[key] : term\n })\n}\n","import tracker from 'sanitas-tracking'\n\nimport { DEFAULT_LANGUAGE } from '@/config/constants'\nimport { SOURCE } from '@/config/events'\n\nlet _referrer\n\nexport function getRouteData(options) {\n const { origin, search } = window.location\n const params = new URLSearchParams(search)\n const language = params.get('language') || DEFAULT_LANGUAGE\n const title = options.title\n const subRoutes = options.routes || []\n\n const url = [origin, ...subRoutes].join('/')\n\n let referrerUrl = document.referrer\n if (_referrer) {\n referrerUrl = _referrer.page.url\n }\n\n const description = [SOURCE.PARTNER_WIDGET, language.toUpperCase(), title].join(' - ')\n const descriptionWithoutLang = [SOURCE.PARTNER_WIDGET, title].join(' - ')\n\n // Get page and route data\n const data = {\n page: {\n title,\n description,\n descriptionWithoutLang,\n language,\n url,\n aliasUrl: url,\n referrerUrl,\n },\n }\n _referrer = { ...data }\n return data\n}\n\nexport function getPackageTrackingId(pwPackage) {\n if (!pwPackage) {\n console.error('Can not get tracking id, pwPackage was falsy')\n return ''\n }\n const packageId = pwPackage.id\n if (!packageId || packageId.split('-', 1).length === 0) {\n console.error('Could not extract tracking id')\n return ''\n }\n return 'package-' + packageId.split('-', 1)[0]\n}\n\nexport { tracker }\n","import { addMonths, isAfter, isValid, isPast, isToday } from 'date-fns'\nimport { DateTimeHelper } from '@/helpers'\nimport useBasket from '@/hooks/useBasket'\n\n// Hooks\nconst { getDefaultContractStartDate } = useBasket()\n\n// FLEX-1279 if date in the past or today or too far in future -> invalid, push contract start to next month\nexport const isInvalidContractStartDate = function (value) {\n if (!value) {\n return true\n }\n const ISODate = DateTimeHelper.parseDate(value)\n const isValidISODate = isValid(ISODate)\n const now = new Date()\n\n return !isValidISODate || isToday(ISODate) || isPast(ISODate) || isAfter(ISODate, addMonths(now, 20))\n}\n\n/**\n * If the start date in the bundle is not valid, the next valid contract start date is the start of the next month (FLEX-1279)\n * @returns {Promise} Promise resolving to ISO date\n */\nexport const getNewContractStartDate = async () => {\n return await getDefaultContractStartDate()\n}\n","// dynamic components\nexport const SCREEN = {\n BUNDLE: 'Bundle',\n DETAIL: 'Detail',\n ENTRY: 'Entry',\n ERROR: 'Error',\n}\n\nexport const BOOLEAN_CONFIG_KEYS = [\n 'animatedEntryLabelsOnClick',\n 'animatedEntryLabelsOnlyOnce',\n 'badge',\n 'dynamicSize',\n 'logo',\n 'openInSameWindow',\n 'skipEntryPage',\n 'skipPackagesOverview',\n 'showPackagesOverviewInfoIcon'\n]\n\nexport const CATEGORY_ADDITIONAL = 'ADDITIONAL'\nexport const CATEGORY_FURTHER_ADDITIONAL = 'FURTHER_ADDITIONAL'\n","import { ref, reactive } from 'vue'\nimport { v4 as uuidv4 } from 'uuid'\nimport { cloneDeep, isEmpty, pick } from 'lodash'\nimport { getRouteData } from '@/modules/PartnerWidget/helpers/tracking'\nimport { EVENT_OVP } from '@/config/events'\nimport { events$ } from '@/services'\n\nimport { getNewContractStartDate, isInvalidContractStartDate } from '@/modules/PartnerWidget/helpers/dates'\nimport { BOOLEAN_CONFIG_KEYS, SCREEN } from '@/modules/PartnerWidget/constants'\nimport { EVENT_LANGUAGE, EVENT_PARTNER_WIDGET } from '@/config/events'\nimport { CHANNEL, NOTIFICATION, PARTNER_WIDGET_RESTART_TIMEOUT } from '@/config/constants'\nimport config from '@/config'\n\nimport useBackend from '@/hooks/useBackend'\nimport useBasket from '@/hooks/useBasket'\nimport useDistribution from '@/hooks/useDistribution'\nimport useError from '@/hooks/useError'\nimport useMasterdata from '@/hooks/useMasterdata'\nimport useNotifications from '@/hooks/useNotifications'\nimport usePartnerWidget from '@/hooks/usePartnerWidget'\nimport useProduct from '@/hooks/useProduct'\nimport useI18n from '@/hooks/useI18n'\n\nimport { ReactivityUtil } from '@/utils/Reactivity'\n\nconst { doGet, setup } = useBackend()\nconst { updateOvpBasket } = useBasket()\nconst { createDistributionPartners } = useDistribution()\nconst { createErrorResponse } = useError()\nconst { fetchLocations } = useMasterdata()\nconst { addNotification } = useNotifications()\nconst { getCustomThemeCssUrl } = usePartnerWidget()\nconst { fetchProducts } = useProduct()\nconst { t } = useI18n()\n\nsetup('/partnerwidget', config.microserviceBaseUrl, {\n responseSuccess: response => {\n return response.data\n },\n responseError: error => {\n return createErrorResponse(error)\n },\n})\n\nevents$.once(EVENT_LANGUAGE.LOADED, () => {\n languageLoaded.value = true\n})\n\n// Data\nconst bundleId = ref('')\nconst displayMode = ref('')\nconst hasChosenPackage = ref(false)\nconst language = ref('')\nconst languageLoaded = ref(false)\nconst ready = ref(false)\nconst screen = ref(SCREEN.ENTRY)\nconst screensDefinition = ref({})\nconst theme = ref('')\nconst code = ref('')\nconst bundleConfig = reactive({})\nconst packages = reactive([])\n\nexport default function usePartnerWidgetBundleLoader() {\n function screensDefinitionInit() {\n screensDefinition.value = {\n Entry: {\n events: {\n enter: enter,\n },\n props: {},\n },\n Bundle: {\n events: {\n requireDetail: onDetailRequired,\n },\n props: {\n logo: false,\n packages: [],\n skipEntryPage: false,\n showPackagesOverviewInfoIcon: false,\n },\n },\n Detail: {\n events: {\n backToBundle: onBackToBundle,\n editScreenDefinitions: editScreenDefinitions,\n goToSanitas: goToSanitas,\n },\n props: {\n item: null,\n skipEntryPage: false,\n skipPackagesOverview: false,\n openInSameWindow: false,\n },\n },\n Error: {\n props: {\n messages: [],\n language: language.value,\n },\n },\n }\n }\n\n async function fetchBundle(__code, __language) {\n const response = await doGet(`/public/bundles/${__code}`, {}, false, { headers: { 'Accept-Language': __language } })\n return response.data\n }\n\n async function loadBundle(params) {\n try {\n const bundleResponse = await fetchBundle(bundleId.value, language.value)\n code.value = bundleResponse.code\n\n ReactivityUtil.reAssign(bundleConfig, overrideBundleWithUrlProps(bundleResponse))\n ReactivityUtil.resetData(packages)\n\n for (const bundleBasket of bundleResponse.baskets) {\n let location = params.location\n if (location) {\n const contractStartDate = bundleBasket.contractStartDate ?? (await getNewContractStartDate())\n location = await findLocation(location, contractStartDate)\n }\n let updatedBasketBundle = await overrideBasketBundleWithUrlProps(\n cloneDeep(bundleBasket),\n Object.assign({}, params, { location })\n )\n delete updatedBasketBundle.packages\n updatedBasketBundle = await createBasket(bundleBasket.packages, updatedBasketBundle)\n for (const __package of bundleBasket.packages) {\n const productsStructure = await loadProducts({\n persons: updatedBasketBundle.persons,\n collective: updatedBasketBundle?.collective,\n masterTreaty: updatedBasketBundle.masterTreaty,\n })\n const packageData = {\n ...__package,\n basket: updatedBasketBundle,\n productsStructure,\n showExampleOfferText: true,\n isPersonDataEdited: false,\n }\n packages.push(packageData)\n }\n }\n\n // general\n loadThemeCSS()\n setScreenDefinitions()\n\n if (bundleConfig.skipEntryPage) {\n enter()\n }\n } catch (e) {\n console.error(e)\n if (e.response) {\n screensDefinition.value.Error.props.messages = e.response.data.infoMessages\n }\n screen.value = SCREEN.ERROR\n }\n ready.value = true\n }\n\n async function createBasket(__packages, basket) {\n basket.basketId = __packages[0]?.id || uuidv4()\n\n const allPackageProducts = __packages.reduce((acc, pack) => {\n acc.push(...pack.products)\n return acc\n }, [])\n\n const payloadBasket = getBasketPayload(basket)\n const __basket = await updateOvpBasket(payloadBasket, { simulate: true })\n return await updateProductsInBasket(__basket, allPackageProducts)\n }\n\n // find matching location passed via url params\n async function findLocation(params, contractStartDate) {\n const query = params?.zipCode\n const locations = await fetchLocations({ query, contractStartDate }).catch(e => {\n console.warn('location service not available', e)\n })\n\n const locationData = locations?.data\n\n if (!locationData || locationData.length === 0) {\n return null\n }\n\n if (locationData.length === 1) {\n return locationData[0]\n }\n\n const matchingLocation = locationData.find(location => {\n const locationZipAddon = parseInt(location.zipCodeAddon, 10)\n const locationLocationNumber = parseInt(location.locationNumber, 10)\n\n const paramZipAddon = parseInt(params.zipCodeAddon, 10)\n const paramLocationNumber = parseInt(params.locationNumber, 10)\n\n return locationZipAddon === paramZipAddon && locationLocationNumber === paramLocationNumber\n })\n\n // fall back to first location for zipCode, if zipAddon or locationNumber don't match\n return matchingLocation ?? locationData[0]\n }\n\n /**\n * Updates the products in the basket (options with accident)\n * If selectProducts is true, the products are selected as well\n */\n function updateProductsInBasket(__basket, products, selectProducts = false, simulate = true) {\n const packageProducts = products\n const updatedBasket = cloneDeep(__basket)\n let personProducts = updatedBasket.persons[0].products.products\n\n resetProductSelection(personProducts)\n applyCriteriaAndSelectProducts(personProducts, packageProducts, selectProducts)\n\n return updateOvpBasket(updatedBasket, { simulate })\n }\n\n function resetProductSelection(personProducts) {\n // reset selection for products\n Object.values(personProducts).forEach(product => {\n product.selected = false\n product.prices.map(price => {\n price.selected = false\n return price\n })\n return product\n })\n }\n\n function applyCriteriaAndSelectProducts(personProducts, packageProducts, selectProducts) {\n packageProducts.forEach(p => {\n const { id, toggle, value } = p\n\n // select product\n const basketProduct = personProducts[p.id]\n if (!basketProduct) {\n return\n }\n\n const priceOptions = basketProduct.prices\n\n if (selectProducts) {\n basketProduct.selected = true\n }\n\n const selectedPriceOption = setSelectedPriceOption(priceOptions, value)\n setToggleAndSelectPriceOption(priceOptions, selectedPriceOption, toggle)\n\n // select product, set value & toggle\n if (selectProducts) {\n // reset selections for priceOptions\n priceOptions.forEach(price => {\n price.selected = false\n })\n if (selectedPriceOption) {\n selectedPriceOption.selected = true\n } else {\n console.error('Can not select correct price', id, toggle, value)\n }\n }\n })\n }\n\n function setSelectedPriceOption(priceOptions, value) {\n return priceOptions.length > 1\n ? priceOptions.find(price => {\n // check if value defined, value can be undefined for e.g. AB04Produkt\n const isPriceMatching = value ? price.value === parseInt(value, 10) : true\n const isDurationMatching = price.duration ? price.duration === '1' : true\n return isPriceMatching && isDurationMatching\n })\n : priceOptions[0]\n }\n\n // set toggle value and select this price option. Other toggle values will be set by backend\n function setToggleAndSelectPriceOption(priceOptions, selectedPriceOption, toggle) {\n if (selectedPriceOption && toggle !== undefined) {\n selectedPriceOption.toggle = toggle\n priceOptions.forEach(option => {\n option.selected = false\n })\n selectedPriceOption.selected = true\n }\n }\n\n function getBasketPayload(bundleBasket) {\n return {\n basketId: bundleBasket.basketId,\n createDate: new Date().toISOString(),\n channel: CHANNEL.PARTNERWIDGET,\n collective: isEmpty(bundleBasket.collective) ? null : bundleBasket.collective,\n masterTreaty: bundleBasket.masterTreaty,\n language: language.value.toUpperCase(),\n partnerWidgetBundleCode: code.value,\n distributionPartners: createDistributionPartners(bundleBasket.distributionPartnerNumber),\n contractStartDate: bundleBasket.contractStartDate,\n address: bundleBasket.address,\n route: 'basket',\n persons: [\n {\n collectivePersonGroup: bundleBasket.collectivePersonGroup,\n personId: uuidv4(),\n personData: {\n dateOfBirth: bundleBasket.person.dateOfBirth,\n firstName: bundleBasket.person.firstName,\n lastName: null,\n gender: bundleBasket.person.gender,\n },\n kvgContractStartDate: bundleBasket.contractStartDate,\n vvgContractStartDate: bundleBasket.contractStartDate,\n preInsurer: {},\n },\n ],\n }\n }\n\n async function loadProducts(__basket) {\n // use basket from backend response, contractStartdate may be set by BE\n return await fetchProducts(__basket).then(products => {\n return products\n })\n }\n\n function overrideBundleWithUrlProps(__bundle) {\n const { config: __config } = __bundle\n if (theme.value) {\n __config.theme = theme.value\n }\n if (displayMode.value) {\n __config.displayMode = displayMode.value\n }\n\n // parse boolean __configuration values from url\n BOOLEAN_CONFIG_KEYS.forEach(key => {\n if (__config[key]) {\n __config[key] = __config[key] === 'true' || __config[key]\n }\n })\n\n return __config\n }\n\n async function overrideBasketBundleWithUrlProps(bundleBasket, __options) {\n // Set current date if bundle contract start date are not valid\n if (\n !bundleBasket.contractStartDate ||\n (bundleBasket.contractStartDate && isInvalidContractStartDate(bundleBasket.contractStartDate))\n ) {\n bundleBasket.contractStartDate = await getNewContractStartDate()\n }\n // Set location if valid\n if (!isEmpty(__options.location)) {\n bundleBasket.address = __options.location\n }\n // Set gender if given gender available\n if (['MALE', 'FEMALE', 'UNBORN'].includes(__options.gender)) {\n bundleBasket.person.gender = __options.gender\n }\n\n if (__options.firstName) {\n bundleBasket.person.firstName = __options.firstName\n }\n\n // Set dateOfBirth\n if (__options.dateOfBirth) {\n bundleBasket.person.dateOfBirth = __options.dateOfBirth\n }\n\n return bundleBasket\n }\n\n function setScreenDefinitions() {\n screensDefinition.value.Entry.props = Object.assign(\n {},\n screensDefinition.value.Entry.props,\n pick(bundleConfig, ['logo', 'badge']),\n { basketAvailable: !!packages[0]?.basket?.basketId }\n )\n screensDefinition.value.Bundle.props = Object.assign(\n {},\n screensDefinition.value.Bundle.props,\n pick(bundleConfig, ['logo', 'skipEntryPage', 'showPackagesOverviewInfoIcon']),\n { packages }\n )\n screensDefinition.value.Detail.props = Object.assign({}, screensDefinition.value.Detail.props, {\n skipEntryPage: bundleConfig.skipEntryPage,\n skipPackagesOverview: bundleConfig.skipPackagesOverview,\n openInSameWindow: bundleConfig.openInSameWindow,\n })\n }\n\n function editScreenDefinitions(newScreenDefinitionsProps) {\n Object.assign(screensDefinition.value.Detail.props.item, newScreenDefinitionsProps)\n }\n\n function addStylesheet(url) {\n const themeFile = document.createElement('link')\n themeFile.setAttribute('rel', 'stylesheet')\n themeFile.setAttribute('type', 'text/css')\n\n themeFile.setAttribute('href', url)\n window.document.head.appendChild(themeFile)\n }\n\n function loadThemeCSS() {\n switch (bundleConfig.theme) {\n case 'light': // light theme is default, so doesn't load any css\n break\n case 'darkgreen':\n addStylesheet(`${import.meta.env.VITE_SANITAS_PUBLIC_PATH}partnerWidget/theme-darkgreen.css`)\n break\n case 'custom':\n // never show logo if custom theme is used\n bundleConfig.logo = false\n\n getCustomThemeCssUrl(code.value, bundleConfig.lastModifiedDate)\n .then(url => {\n addStylesheet(url)\n })\n .catch(e => {\n console.error(e)\n })\n break\n default:\n console.error(`Unknown theme: ${bundleConfig.theme}, falling back to default light theme`)\n }\n }\n\n function enter() {\n if (bundleConfig.skipPackagesOverview) {\n onDetailRequired(packages[0])\n } else {\n goToBundle()\n }\n }\n\n function onDetailRequired(pack) {\n screensDefinition.value.Detail.props.item = pack\n screen.value = SCREEN.DETAIL\n }\n\n function goToBundle() {\n screen.value = SCREEN.BUNDLE\n }\n\n function onBackToBundle() {\n screen.value = SCREEN.BUNDLE\n }\n\n async function goToSanitas(options) {\n if (hasChosenPackage.value) {\n return\n }\n\n events$.emit(EVENT_PARTNER_WIDGET.GOTO_SANITAS)\n\n try {\n const { item, target } = options\n hasChosenPackage.value = true\n // don't update store! Kvg without doctor can set the valid flag on the product to false,\n // causing the chosen package to be displayed as unavailable!\n let realBasket = cloneDeep(item.basket)\n delete realBasket.createDate\n delete realBasket.basketId\n realBasket = await updateProductsInBasket(realBasket, item.products, true, false)\n\n const routePayload = getRouteData({\n title: 'PersonSave',\n routes: ['person', 'save'],\n })\n events$.emit(EVENT_OVP.ENTERED, routePayload)\n\n // navigate to dvp\n const sanitasHref = `${import.meta.env.VITE_SANITAS_PATH}${t('screen.partnerWidget.dvpUrl')}${\n realBasket.reentryToken\n }`\n window.open(sanitasHref, target)\n\n addNotification(\n t('screen.partnerWidget.popupMessage', { sanitasHref, target }),\n NOTIFICATION.WARNING,\n PARTNER_WIDGET_RESTART_TIMEOUT\n )\n\n // wait before reloading the widget in case a popup has prevented the new tab from opening\n // due to the navigation, the popup blocker message disappears instantly otherwise.\n window.setTimeout(() => {\n restartWidgetWithData(item.basket)\n }, PARTNER_WIDGET_RESTART_TIMEOUT)\n } catch (e) {\n hasChosenPackage.value = false\n console.error(e)\n }\n }\n\n function restartWidgetWithData(basket) {\n const parsedUrl = new URL(window.location.href)\n let searchParams = parsedUrl.searchParams\n\n const { address, persons } = basket\n const firstPersonData = persons[0].personData\n\n // update search params with entered data\n searchParams.set('gender', firstPersonData.gender)\n searchParams.set('birthDate', firstPersonData.dateOfBirth)\n\n const { locationNumber, zipCode, zipCodeAddon } = address\n searchParams.set('locationNumber', locationNumber)\n searchParams.set('zipCode', zipCode)\n searchParams.set('zipCodeAddon', zipCodeAddon)\n\n // restart widget\n location.search = searchParams.toString()\n }\n\n // Setter methods\n function setBundleId(value) {\n bundleId.value = value\n }\n\n function setDisplayMode(value) {\n displayMode.value = value\n }\n\n function setLanguage(value) {\n language.value = value\n }\n\n function setTheme(value) {\n theme.value = value\n }\n\n return {\n // Data\n bundleConfig,\n bundleId,\n displayMode,\n hasChosenPackage,\n language,\n languageLoaded,\n ready,\n screen,\n screensDefinition,\n screensDefinitionInit,\n theme,\n\n // Methods\n loadBundle,\n\n // Setter Methods\n setBundleId,\n setDisplayMode,\n setLanguage,\n setTheme,\n }\n}\n","import { computed } from 'vue'\nimport { cloneDeep, isNil } from 'lodash'\nimport buildURL from 'axios/lib/helpers/buildURL'\nimport config from '@/config'\nimport { DATE_FORMAT_ISO } from '@/config/constants'\nimport { DateTimeHelper } from '@/helpers/DateTime'\nimport { SortUtil } from '@/utils/Sorting'\nimport { resolve } from '@/modules/PartnerWidget/helpers/strings'\nimport { isRequired, NotFoundError } from '@/utils/CustomErrors'\n\nimport useBackend from '@/hooks/useBackend'\nimport useError from '@/hooks/useError'\nimport usePartnerWidgetBundleLoader from '@/hooks/usePartnerWidgetBundleLoader'\n\nconst { getBaseUrl, setup } = useBackend()\nconst { createErrorResponse } = useError()\nconst { bundleConfig, displayMode, theme } = usePartnerWidgetBundleLoader()\n\nsetup('/partnerwidget', config.microserviceBaseUrl, {\n responseSuccess: response => {\n return response.data\n },\n responseError: error => {\n return createErrorResponse(error)\n },\n})\n\nfunction getProduct(person, productId) {\n return person?.products?.products[productId]\n}\n\nfunction getProductPrice(person, productId) {\n return getProduct(person, productId).prices.find(p => !!p.selected)\n}\n\n/**\n * The backend used id whereas the frontend works with productId everywhere. This function provides the mapping logic.\n * @param __products Set of products\n * @param __productId Id to identify the product\n */\nfunction mapIdToProductId(__products, __productId) {\n __products[__productId].productId = __productId\n delete __products[__productId].id\n}\n\n/**\n * Returns all existing products of a group sorted by the order field\n * @param __groups\n * @param __products\n * @param groupId\n * @return []\n */\nfunction _getSortedProductsFromGroup(\n __groups = isRequired('groups'),\n __products = isRequired('products'),\n groupId = isRequired('groupId')\n) {\n let groupsObject = { ...__groups }\n if (!groupsObject[groupId]) throw new NotFoundError('group with groupId', groupId)\n const productsCopy = cloneDeep(__products)\n return groupsObject[groupId].products\n .map(productId => {\n mapIdToProductId(productsCopy, productId)\n return productsCopy[productId]\n })\n .filter(product => product)\n .sort(SortUtil.sortByOrder)\n}\n\n/**\n * Returns all existing products of a category sorted by the order field\n * @param categoryId\n * @return []\n */\nfunction getSortedProductsFromCategory(productsStructure, categoryId = isRequired('categoryId')) {\n const { categories, groups, products } = productsStructure\n\n return categories[categoryId].groups\n .reduce((acc, groupId) => acc.concat(_getSortedProductsFromGroup(groups, products, groupId)), [])\n .sort(SortUtil.sortByOrder)\n}\n\nfunction getReferrerParams() {\n if (window.location && window.location.search) {\n const { search } = window.location\n const urlSearchParams = new URLSearchParams(search.toLowerCase())\n const params = {}\n urlSearchParams.forEach((value, key) => (params[key] = value))\n return params\n }\n return {}\n}\n\nfunction hasLabel(key) {\n return bundleConfig?.labels ? !!bundleConfig.labels[key] : false\n}\n\nfunction getLabel(key, params = {}) {\n if (!hasLabel(key)) {\n return key\n }\n return resolve(bundleConfig.labels[key], params)\n}\n\nfunction getOfferText(persons, showExampleOfferText = true) {\n if (!persons || persons.length < 1) return ''\n const person = persons[0]\n const age = person?.age || DateTimeHelper.getAge(person?.personData.dateOfBirth)\n const gender = person.personData.gender.toLowerCase()\n\n if (showExampleOfferText) {\n return getLabel('preview_example_' + gender, { age })\n }\n // currently no labels exist for unborn child\n const isBornChild = age > 0 && age < 16\n const textVariant = isBornChild ? 'child' : gender\n\n return getLabel('personal_offer_text_' + textVariant, { age })\n}\n\nexport default function usePartnerWidget() {\n const partnerWidgetTheme = computed(() => {\n if (Object.keys(bundleConfig).length === 0) {\n return theme.value\n }\n return bundleConfig.theme\n })\n\n const partnerWidgetDisplayMode = computed(() => {\n if (Object.keys(bundleConfig).length === 0) {\n return displayMode.value\n }\n return bundleConfig.displayMode\n })\n\n function getCustomThemeCssUrl(code, lastModifiedDate) {\n return Promise.resolve(buildURL(`${getBaseUrl}/public/bundles/${code}/css?v=${lastModifiedDate}`))\n }\n\n function getPackageTotalPrice(packageProducts, person) {\n if (isNil(packageProducts)) {\n throw new Error('getPackageTotalPrice: Invalid parameter packageProducts', packageProducts)\n }\n if (isNil(person)) {\n throw new Error(`getPackageTotalPrice: Invalid parameter personId, ${person}`)\n }\n\n return packageProducts.reduce((acc, product) => {\n const value = !isNil(product.value) ? parseInt(product.value) : null\n if (!isNil(value)) {\n acc += getProductPriceOptionForFranchise(person, product.id, value).price\n } else {\n acc += getProductPrice(person, product.id).price\n }\n return acc\n }, 0)\n }\n\n function getProductPriceOptionForFranchise(person, productId, value) {\n if (isNil(person) || isNil(productId) || isNil(value)) {\n throw new Error(\n `getProductPriceForFranchise missing required parameter(s) person: ${person} productId: ${productId} value: ${value}`\n )\n }\n\n const storeProduct = getProduct(person, productId)\n const price = storeProduct.prices.find(p => p.value === value)\n if (isNil(price)) {\n throw new Error(`getProductPriceForFranchise could not find price for product ${productId} franchise: ${value}`)\n }\n\n return price\n }\n\n /**\n * Select all customize parameters form the URL\n *\n * Available parameters:\n * - birthDate ==> Set the date of birth from the person, alias birthdate e.g. 2001-09-09\n * - firstName ==> Set the first name from the person, alias firstName\n * - gender ==> Set the gender from the person (MALE, FEMALE, UNBORN)\n * - zipcode ==> Set the zipCode for the location objecct\n * - zipcodeaddon ==> Set the zipCodeAddon for the location objecct\n * - locationnumber ==> Set the locationNumber for the location objecct\n *\n * @urlParams Object Get proper url parameters for setting a new person\n */\n function getQueryParams() {\n const params = getReferrerParams()\n const { locationnumber, zipcode, zipcodeaddon, birthdate, firstname } = params\n\n let gender\n if (params.gender) {\n gender = params.gender.toUpperCase()\n }\n\n let dateOfBirth\n if (DateTimeHelper.isValidBirthDate(birthdate)) {\n dateOfBirth = DateTimeHelper.formatDate(birthdate, DATE_FORMAT_ISO)\n }\n\n let location\n if (zipcode) {\n location = {\n locationNumber: locationnumber,\n zipCode: zipcode,\n zipCodeAddon: zipcodeaddon,\n }\n }\n\n return {\n gender,\n dateOfBirth,\n location,\n firstName: firstname,\n }\n }\n\n function isPackageValid(products) {\n const anyProductInvalid = products.some(product => {\n // product not found in basket => not valid (e.g. Kinderwunsch product not in basket, if person is male)\n if (!product) {\n return true\n }\n // special case medical private: ignore MEDICAL_PRIVATE_CONDITIONS_UNFULFILLED error, as products in basket\n // are not selected and valid will always be false\n if (\n product.id === 'PE04Produkt' &&\n product.messages.length === 1 &&\n product.messages[0].key === 'MEDICAL_PRIVATE_CONDITIONS_UNFULFILLED'\n ) {\n return false\n }\n return product.valid === false\n })\n return !anyProductInvalid\n }\n\n function isPackageAvailable(pack) {\n let isInvalid = false\n\n const firstPerson = pack.basket?.persons[0]\n\n // @TODO check for better way to handle products with franchises not matching for a person age\n try {\n getPackageTotalPrice(pack.products, firstPerson)\n } catch {\n return false\n }\n\n const products = pack.products.map(p => {\n const storeProduct = getProduct(firstPerson, p.id)\n\n if (!storeProduct) {\n isInvalid = true\n }\n\n return {\n id: p.id,\n ...storeProduct,\n }\n })\n\n if (isInvalid) {\n return false\n }\n\n return isPackageValid(products)\n }\n\n return {\n // Data\n partnerWidgetDisplayMode,\n partnerWidgetTheme,\n\n // Methods\n getCustomThemeCssUrl,\n getLabel,\n getOfferText,\n getPackageTotalPrice,\n getProductPrice,\n getProductPriceOptionForFranchise,\n getSortedProductsFromCategory,\n getQueryParams,\n hasLabel,\n isPackageAvailable,\n isPackageValid,\n }\n}\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n\n\n\n\n","export const currency = value => {\n if (!value) return '0.00'\n let formatted = parseFloat(value).toFixed(2)\n if (formatted > 999) {\n formatted = formatted.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \"'\")\n }\n return formatted\n}\n","\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n\n","\n\n\n\n\n","import { required } from '@vuelidate/validators'\nimport { dateOfBirth } from '@/validations/components'\nimport { ValidatorsUtil } from '@/utils/Validators'\n\nexport default {\n address: {\n required,\n location: ValidatorsUtil.isLocation,\n },\n dateOfBirth,\n gender: {\n required,\n },\n}\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n","\n\n\n\n\n\n\n","import PartnerWidget from '@/modules/PartnerWidget/PartnerWidget.vue'\nimport 'vite/modulepreload-polyfill'\n\n// global css variables for partner widget\nimport '@/modules/PartnerWidget/assets/styles/variables.css'\nimport { createApp, setup } from '@/setup'\n// parse querystring\nconst search = window.location.search\n .substr(1)\n .split('&')\n .reduce((acc, pair) => {\n const tab = pair.split('=')\n acc[tab[0]] = tab[1]\n return acc\n }, {})\n\nconst element = document.getElementById('partnerWidget')\n\nconst props = { ...element.dataset, ...search }\n\nconst app = setup(createApp(PartnerWidget, props))\napp.mount(element)\n"],"names":["translations","computed","resolve","str","params","search","term","key","_referrer","getRouteData","options","origin","language","DEFAULT_LANGUAGE","title","subRoutes","url","referrerUrl","description","SOURCE","descriptionWithoutLang","data","getPackageTrackingId","pwPackage","packageId","getDefaultContractStartDate","useBasket","isInvalidContractStartDate","value","ISODate","DateTimeHelper","isValidISODate","isValid","now","isToday","isPast","isAfter","addMonths","getNewContractStartDate","SCREEN","BOOLEAN_CONFIG_KEYS","CATEGORY_ADDITIONAL","CATEGORY_FURTHER_ADDITIONAL","doGet","setup","useBackend","updateOvpBasket","createDistributionPartners","useDistribution","createErrorResponse","useError","fetchLocations","useMasterdata","addNotification","useNotifications","getCustomThemeCssUrl","usePartnerWidget","fetchProducts","useProduct","t","useI18n","config","response","error","events$","EVENT_LANGUAGE","languageLoaded","bundleId","ref","displayMode","hasChosenPackage","ready","screen","screensDefinition","theme","code","bundleConfig","reactive","packages","usePartnerWidgetBundleLoader","screensDefinitionInit","enter","onDetailRequired","onBackToBundle","editScreenDefinitions","goToSanitas","fetchBundle","__code","__language","loadBundle","bundleResponse","ReactivityUtil","overrideBundleWithUrlProps","bundleBasket","location","contractStartDate","findLocation","updatedBasketBundle","overrideBasketBundleWithUrlProps","cloneDeep","createBasket","__package","productsStructure","loadProducts","packageData","loadThemeCSS","setScreenDefinitions","e","__packages","basket","uuidv4","allPackageProducts","acc","pack","payloadBasket","getBasketPayload","__basket","updateProductsInBasket","query","locationData","locationZipAddon","locationLocationNumber","paramZipAddon","paramLocationNumber","products","selectProducts","simulate","packageProducts","updatedBasket","personProducts","resetProductSelection","applyCriteriaAndSelectProducts","product","price","p","id","toggle","basketProduct","priceOptions","selectedPriceOption","setSelectedPriceOption","setToggleAndSelectPriceOption","isPriceMatching","isDurationMatching","option","CHANNEL","isEmpty","__bundle","__config","__options","pick","newScreenDefinitionsProps","addStylesheet","themeFile","goToBundle","EVENT_PARTNER_WIDGET","item","target","realBasket","routePayload","EVENT_OVP","sanitasHref","NOTIFICATION","PARTNER_WIDGET_RESTART_TIMEOUT","restartWidgetWithData","searchParams","address","persons","firstPersonData","locationNumber","zipCode","zipCodeAddon","setBundleId","setDisplayMode","setLanguage","setTheme","getBaseUrl","getProduct","person","productId","getProductPrice","mapIdToProductId","__products","__productId","_getSortedProductsFromGroup","__groups","isRequired","groupId","groupsObject","NotFoundError","productsCopy","SortUtil","getSortedProductsFromCategory","categoryId","categories","groups","getReferrerParams","urlSearchParams","hasLabel","getLabel","getOfferText","showExampleOfferText","age","gender","textVariant","partnerWidgetTheme","partnerWidgetDisplayMode","lastModifiedDate","buildURL","getPackageTotalPrice","isNil","getProductPriceOptionForFranchise","getQueryParams","locationnumber","zipcode","zipcodeaddon","birthdate","firstname","dateOfBirth","DATE_FORMAT_ISO","isPackageValid","isPackageAvailable","isInvalid","firstPerson","storeProduct","badgeTitle","content","hasBadgeTitle","colors","startPathColor","endPathColor","textIndex","show","entryLabels","animationIntervalId","displayedText","hasEntrySmallTitle","hasAnimatedEntryLabels","entry","showEntrySmallTitle","textPositionClass","transition","transitionName","transitionMode","defaultTransition","setEntryLabels","i","nextText","setTransitionInterval","timeInterval","onAnimationClick","onMounted","currency","formatted","showIllustration","offerText","props","available","onCardClicked","emit","once","sortedPackages","trackPartnerWidgetDisplayedAndPageViewed","trackingPayload","itemData","inject","setCurrency","tm","activeCategory","emitOpen","setActiveCategory","category","emitOpened","$emit","open","init","onOpened","getSortedCategories","useCategories","packageTrackingId","useAccordion","productsIds","productsByCategory","bundleProduct","prod","folder","PartnerWidgetAccordion","TabsContainer","handleResize","width","handleTracking","onOpenedCategory","detailOpenedCategoryPayload","onBeforeUnmount","validations","required","ValidatorsUtil","formData","useVuelidate","isUnborn","isUnbornFunc","save","trackPersonScreenShown","pageData","EVENT_PERSONS_FORM_DISPLAYED","date","isFuture","parseISO","personData","watch","isSavingPersonData","personModal","buttonLabel","showBackButton","provide","buttonAction","onEditPerson","savePerson","updatedPerson","basketPayload","views","Bundle","Detail","Error","Entry","screenEvents","screenProps","classes","pair","tab","element","app","createApp","PartnerWidget"],"mappings":"4oDA+BA,MAAMA,EAAeC,EAAS,KACrB,CACL,MAAO,CACL,GAAI,sBACL,EACD,+BAAgC,CAC9B,GAAI,mEACL,CACF,EACF,2TC7BYC,GAAU,CAACC,EAAM,GAAIC,EAAS,CAAA,IAAO,CAChD,MAAMC,EAAS,kBAEf,OAAKF,EAIEA,EAAI,QAAQE,EAAQ,SAAUC,EAAM,CACzC,IAAIC,EAAMD,EAAK,UAAU,CAAC,EAAE,MAAM,EAAG,EAAE,EACvC,OAAOF,EAAOG,CAAG,IAAM,OAAYH,EAAOG,CAAG,EAAID,CACrD,CAAG,EANQ,EAOX,ECjBA,IAAIE,GAEG,SAASC,GAAaC,EAAS,CACpC,KAAM,CAAE,OAAAC,EAAQ,OAAAN,CAAQ,EAAG,OAAO,SAE5BO,EADS,IAAI,gBAAgBP,CAAM,EACjB,IAAI,UAAU,GAAKQ,GACrCC,EAAQJ,EAAQ,MAChBK,EAAYL,EAAQ,QAAU,CAAE,EAEhCM,EAAM,CAACL,EAAQ,GAAGI,CAAS,EAAE,KAAK,GAAG,EAE3C,IAAIE,EAAc,SAAS,SACvBT,KACFS,EAAcT,GAAU,KAAK,KAG/B,MAAMU,EAAc,CAACC,GAAO,eAAgBP,EAAS,YAAW,EAAIE,CAAK,EAAE,KAAK,KAAK,EAC/EM,EAAyB,CAACD,GAAO,eAAgBL,CAAK,EAAE,KAAK,KAAK,EAGlEO,EAAO,CACX,KAAM,CACJ,MAAAP,EACA,YAAAI,EACA,uBAAAE,EACA,SAAAR,EACA,IAAAI,EACA,SAAUA,EACV,YAAAC,CACD,CACF,EACD,OAAAT,GAAY,CAAE,GAAGa,CAAM,EAChBA,CACT,CAEO,SAASC,GAAqBC,EAAW,CAC9C,GAAI,CAACA,EACH,eAAQ,MAAM,8CAA8C,EACrD,GAET,MAAMC,EAAYD,EAAU,GAC5B,MAAI,CAACC,GAAaA,EAAU,MAAM,IAAK,CAAC,EAAE,SAAW,GACnD,QAAQ,MAAM,+BAA+B,EACtC,IAEF,WAAaA,EAAU,MAAM,IAAK,CAAC,EAAE,CAAC,CAC/C,CC9CA,KAAM,CAAE,4BAAAC,EAA6B,EAAGC,GAAW,EAGtCC,GAA6B,SAAUC,EAAO,CACzD,GAAI,CAACA,EACH,MAAO,GAET,MAAMC,EAAUC,GAAe,UAAUF,CAAK,EACxCG,EAAiBC,GAAQH,CAAO,EAChCI,EAAM,IAAI,KAEhB,MAAO,CAACF,GAAkBG,GAAQL,CAAO,GAAKM,GAAON,CAAO,GAAKO,GAAQP,EAASQ,GAAUJ,EAAK,EAAE,CAAC,CACtG,EAMaK,GAA0B,SAC9B,MAAMb,GAA6B,ECvB/Bc,GAAS,CACpB,OAAQ,SACR,OAAQ,SACR,MAAO,QACP,MAAO,OACT,EAEaC,GAAsB,CACjC,6BACA,8BACA,QACA,cACA,OACA,mBACA,gBACA,uBACA,8BACF,EAEaC,GAAsB,aACtBC,GAA8B,qBCIrC,CAAE,MAAAC,GAAK,MAAEC,EAAO,EAAGC,GAAY,EAC/B,CAAE,gBAAAC,EAAiB,EAAGpB,GAAW,EACjC,CAAE,2BAAAqB,EAA4B,EAAGC,GAAiB,EAClD,CAAEC,oBAAAA,EAAqB,EAAGC,GAAU,EACpC,CAAE,eAAAC,EAAgB,EAAGC,GAAe,EACpC,CAAE,gBAAAC,EAAiB,EAAGC,GAAkB,EACxC,CAAE,qBAAAC,EAAsB,EAAGC,EAAkB,EAC7C,CAAE,cAAAC,EAAe,EAAGC,GAAY,EAChC,CAAE,EAAAC,EAAG,EAAGC,GAAS,EAEvBhB,GAAM,iBAAkBiB,GAAO,oBAAqB,CAClD,gBAAiBC,GACRA,EAAS,KAElB,cAAeC,GACNd,GAAoBc,CAAK,CAEpC,CAAC,EAEDC,EAAQ,KAAKC,GAAe,OAAQ,IAAM,CACxCC,GAAe,MAAQ,EACzB,CAAC,EAGD,MAAMC,GAAWC,EAAI,EAAE,EACjBC,GAAcD,EAAI,EAAE,EACpBE,GAAmBF,EAAI,EAAK,EAC5BxD,GAAWwD,EAAI,EAAE,EACjBF,GAAiBE,EAAI,EAAK,EAC1BG,GAAQH,EAAI,EAAK,EACjBI,GAASJ,EAAI7B,GAAO,KAAK,EACzBkC,EAAoBL,EAAI,EAAE,EAC1BM,GAAQN,EAAI,EAAE,EACdO,GAAOP,EAAI,EAAE,EACbQ,EAAeC,GAAS,EAAE,EAC1BC,GAAWD,GAAS,EAAE,EAEb,SAASE,IAA+B,CACrD,SAASC,GAAwB,CAC/BP,EAAkB,MAAQ,CACxB,MAAO,CACL,OAAQ,CACN,MAAOQ,CACR,EACD,MAAO,CAAE,CACV,EACD,OAAQ,CACN,OAAQ,CACN,cAAeC,CAChB,EACD,MAAO,CACL,KAAM,GACN,SAAU,CAAE,EACZ,cAAe,GACf,6BAA8B,EAC/B,CACF,EACD,OAAQ,CACN,OAAQ,CACN,aAAcC,EACd,sBAAuBC,EACvB,YAAaC,CACd,EACD,MAAO,CACL,KAAM,KACN,cAAe,GACf,qBAAsB,GACtB,iBAAkB,EACnB,CACF,EACD,MAAO,CACL,MAAO,CACL,SAAU,CAAE,EACZ,SAAUzE,GAAS,KACpB,CACF,CACF,CACF,CAED,eAAe0E,EAAYC,EAAQC,EAAY,CAE7C,OADiB,MAAM7C,GAAM,mBAAmB4C,IAAU,GAAI,GAAO,CAAE,QAAS,CAAE,kBAAmBC,CAAY,CAAA,CAAE,GACnG,IACjB,CAED,eAAeC,EAAWrF,EAAQ,CAChC,GAAI,CACF,MAAMsF,EAAiB,MAAMJ,EAAYnB,GAAS,MAAOvD,GAAS,KAAK,EACvE+D,GAAK,MAAQe,EAAe,KAE5BC,GAAe,SAASf,EAAcgB,EAA2BF,CAAc,CAAC,EAChFC,GAAe,UAAUb,EAAQ,EAEjC,UAAWe,KAAgBH,EAAe,QAAS,CACjD,IAAII,EAAW1F,EAAO,SACtB,GAAI0F,EAAU,CACZ,MAAMC,EAAoBF,EAAa,mBAAsB,MAAMvD,GAAuB,EAC1FwD,EAAW,MAAME,EAAaF,EAAUC,CAAiB,CAC1D,CACD,IAAIE,EAAsB,MAAMC,EAC9BC,EAAAA,UAAUN,CAAY,EACtB,OAAO,OAAO,CAAA,EAAIzF,EAAQ,CAAE,SAAA0F,CAAQ,CAAE,CACvC,EACD,OAAOG,EAAoB,SAC3BA,EAAsB,MAAMG,EAAaP,EAAa,SAAUI,CAAmB,EACnF,UAAWI,KAAaR,EAAa,SAAU,CAC7C,MAAMS,EAAoB,MAAMC,EAAa,CAC3C,QAASN,EAAoB,QAC7B,WAAYA,GAAqB,WACjC,aAAcA,EAAoB,YAC9C,CAAW,EACKO,EAAc,CAClB,GAAGH,EACH,OAAQJ,EACR,kBAAAK,EACA,qBAAsB,GACtB,mBAAoB,EACrB,EACDxB,GAAS,KAAK0B,CAAW,CAC1B,CACF,CAGDC,EAAc,EACdC,EAAsB,EAElB9B,EAAa,eACfK,EAAO,CAEV,OAAQ0B,EAAP,CACA,QAAQ,MAAMA,CAAC,EACXA,EAAE,WACJlC,EAAkB,MAAM,MAAM,MAAM,SAAWkC,EAAE,SAAS,KAAK,cAEjEnC,GAAO,MAAQjC,GAAO,KACvB,CACDgC,GAAM,MAAQ,EACf,CAED,eAAe6B,EAAaQ,EAAYC,EAAQ,CAC9CA,EAAO,SAAWD,EAAW,CAAC,GAAG,IAAME,GAAQ,EAE/C,MAAMC,EAAqBH,EAAW,OAAO,CAACI,EAAKC,KACjDD,EAAI,KAAK,GAAGC,EAAK,QAAQ,EAClBD,GACN,EAAE,EAECE,EAAgBC,EAAiBN,CAAM,EACvCO,EAAW,MAAMtE,GAAgBoE,EAAe,CAAE,SAAU,GAAM,EACxE,OAAO,MAAMG,EAAuBD,EAAUL,CAAkB,CACjE,CAGD,eAAef,EAAa5F,EAAQ2F,EAAmB,CACrD,MAAMuB,EAAQlH,GAAQ,QAKhBmH,GAJY,MAAMpE,GAAe,CAAE,MAAAmE,EAAO,kBAAAvB,EAAmB,EAAE,MAAMY,GAAK,CAC9E,QAAQ,KAAK,iCAAkCA,CAAC,CACtD,CAAK,IAE+B,KAEhC,MAAI,CAACY,GAAgBA,EAAa,SAAW,EACpC,KAGLA,EAAa,SAAW,EACnBA,EAAa,CAAC,EAGEA,EAAa,KAAKzB,GAAY,CACrD,MAAM0B,EAAmB,SAAS1B,EAAS,aAAc,EAAE,EACrD2B,GAAyB,SAAS3B,EAAS,eAAgB,EAAE,EAE7D4B,GAAgB,SAAStH,EAAO,aAAc,EAAE,EAChDuH,GAAsB,SAASvH,EAAO,eAAgB,EAAE,EAE9D,OAAOoH,IAAqBE,IAAiBD,KAA2BE,EAC9E,CAAK,GAG0BJ,EAAa,CAAC,CAC1C,CAMD,SAASF,EAAuBD,EAAUQ,EAAUC,EAAiB,GAAOC,EAAW,GAAM,CAC3F,MAAMC,EAAkBH,EAClBI,EAAgB7B,EAAS,UAACiB,CAAQ,EACxC,IAAIa,EAAiBD,EAAc,QAAQ,CAAC,EAAE,SAAS,SAEvD,OAAAE,EAAsBD,CAAc,EACpCE,EAA+BF,EAAgBF,EAAiBF,CAAc,EAEvE/E,GAAgBkF,EAAe,CAAE,SAAAF,EAAU,CACnD,CAED,SAASI,EAAsBD,EAAgB,CAE7C,OAAO,OAAOA,CAAc,EAAE,QAAQG,IACpCA,EAAQ,SAAW,GACnBA,EAAQ,OAAO,IAAIC,IACjBA,EAAM,SAAW,GACVA,EACR,EACMD,EACR,CACF,CAED,SAASD,EAA+BF,EAAgBF,EAAiBF,EAAgB,CACvFE,EAAgB,QAAQO,GAAK,CAC3B,KAAM,CAAE,GAAAC,EAAI,OAAAC,EAAQ,MAAA5G,CAAO,EAAG0G,EAGxBG,EAAgBR,EAAeK,EAAE,EAAE,EACzC,GAAI,CAACG,EACH,OAGF,MAAMC,GAAeD,EAAc,OAE/BZ,IACFY,EAAc,SAAW,IAG3B,MAAME,GAAsBC,EAAuBF,GAAc9G,CAAK,EACtEiH,EAA8BH,GAAcC,GAAqBH,CAAM,EAGnEX,IAEFa,GAAa,QAAQL,IAAS,CAC5BA,GAAM,SAAW,EAC3B,CAAS,EACGM,GACFA,GAAoB,SAAW,GAE/B,QAAQ,MAAM,+BAAgCJ,EAAIC,EAAQ5G,CAAK,EAGzE,CAAK,CACF,CAED,SAASgH,EAAuBF,EAAc9G,EAAO,CACnD,OAAO8G,EAAa,OAAS,EACzBA,EAAa,KAAKL,GAAS,CAEzB,MAAMS,EAAkBlH,EAAQyG,EAAM,QAAU,SAASzG,EAAO,EAAE,EAAI,GAChEmH,EAAqBV,EAAM,SAAWA,EAAM,WAAa,IAAM,GACrE,OAAOS,GAAmBC,CACpC,CAAS,EACDL,EAAa,CAAC,CACnB,CAGD,SAASG,EAA8BH,EAAcC,EAAqBH,EAAQ,CAC5EG,GAAuBH,IAAW,SACpCG,EAAoB,OAASH,EAC7BE,EAAa,QAAQM,GAAU,CAC7BA,EAAO,SAAW,EAC1B,CAAO,EACDL,EAAoB,SAAW,GAElC,CAED,SAASxB,EAAiBtB,EAAc,CACtC,MAAO,CACL,SAAUA,EAAa,SACvB,WAAY,IAAI,KAAM,EAAC,YAAa,EACpC,QAASoD,GAAQ,cACjB,WAAYC,EAAO,QAACrD,EAAa,UAAU,EAAI,KAAOA,EAAa,WACnE,aAAcA,EAAa,aAC3B,SAAUjF,GAAS,MAAM,YAAa,EACtC,wBAAyB+D,GAAK,MAC9B,qBAAsB5B,GAA2B8C,EAAa,yBAAyB,EACvF,kBAAmBA,EAAa,kBAChC,QAASA,EAAa,QACtB,MAAO,SACP,QAAS,CACP,CACE,sBAAuBA,EAAa,sBACpC,SAAUiB,GAAQ,EAClB,WAAY,CACV,YAAajB,EAAa,OAAO,YACjC,UAAWA,EAAa,OAAO,UAC/B,SAAU,KACV,OAAQA,EAAa,OAAO,MAC7B,EACD,qBAAsBA,EAAa,kBACnC,qBAAsBA,EAAa,kBACnC,WAAY,CAAE,CACf,CACF,CACF,CACF,CAED,eAAeU,EAAaa,EAAU,CAEpC,OAAO,MAAM3D,GAAc2D,CAAQ,EAAE,KAAKQ,GACjCA,CACR,CACF,CAED,SAAShC,EAA2BuD,EAAU,CAC5C,KAAM,CAAE,OAAQC,CAAQ,EAAKD,EAC7B,OAAIzE,GAAM,QACR0E,EAAS,MAAQ1E,GAAM,OAErBL,GAAY,QACd+E,EAAS,YAAc/E,GAAY,OAIrC7B,GAAoB,QAAQjC,GAAO,CAC7B6I,EAAS7I,CAAG,IACd6I,EAAS7I,CAAG,EAAI6I,EAAS7I,CAAG,IAAM,QAAU6I,EAAS7I,CAAG,EAEhE,CAAK,EAEM6I,CACR,CAED,eAAelD,EAAiCL,EAAcwD,EAAW,CAEvE,OACE,CAACxD,EAAa,mBACbA,EAAa,mBAAqBlE,GAA2BkE,EAAa,iBAAiB,KAE5FA,EAAa,kBAAoB,MAAMvD,GAAyB,GAG7D4G,EAAO,QAACG,EAAU,QAAQ,IAC7BxD,EAAa,QAAUwD,EAAU,UAG/B,CAAC,OAAQ,SAAU,QAAQ,EAAE,SAASA,EAAU,MAAM,IACxDxD,EAAa,OAAO,OAASwD,EAAU,QAGrCA,EAAU,YACZxD,EAAa,OAAO,UAAYwD,EAAU,WAIxCA,EAAU,cACZxD,EAAa,OAAO,YAAcwD,EAAU,aAGvCxD,CACR,CAED,SAASa,GAAuB,CAC9BjC,EAAkB,MAAM,MAAM,MAAQ,OAAO,OAC3C,CAAE,EACFA,EAAkB,MAAM,MAAM,MAC9B6E,EAAAA,KAAK1E,EAAc,CAAC,OAAQ,OAAO,CAAC,EACpC,CAAE,gBAAiB,CAAC,CAACE,GAAS,CAAC,GAAG,QAAQ,QAAU,CACrD,EACDL,EAAkB,MAAM,OAAO,MAAQ,OAAO,OAC5C,CAAE,EACFA,EAAkB,MAAM,OAAO,MAC/B6E,EAAAA,KAAK1E,EAAc,CAAC,OAAQ,gBAAiB,8BAA8B,CAAC,EAC5E,CAAE,SAAAE,EAAU,CACb,EACDL,EAAkB,MAAM,OAAO,MAAQ,OAAO,OAAO,CAAA,EAAIA,EAAkB,MAAM,OAAO,MAAO,CAC7F,cAAeG,EAAa,cAC5B,qBAAsBA,EAAa,qBACnC,iBAAkBA,EAAa,gBACrC,CAAK,CACF,CAED,SAASQ,EAAsBmE,EAA2B,CACxD,OAAO,OAAO9E,EAAkB,MAAM,OAAO,MAAM,KAAM8E,CAAyB,CACnF,CAED,SAASC,EAAcxI,EAAK,CAC1B,MAAMyI,EAAY,SAAS,cAAc,MAAM,EAC/CA,EAAU,aAAa,MAAO,YAAY,EAC1CA,EAAU,aAAa,OAAQ,UAAU,EAEzCA,EAAU,aAAa,OAAQzI,CAAG,EAClC,OAAO,SAAS,KAAK,YAAYyI,CAAS,CAC3C,CAED,SAAShD,GAAe,CACtB,OAAQ7B,EAAa,MAAK,CACxB,IAAK,QACH,MACF,IAAK,YACH4E,EAAc,wCAA8E,EAC5F,MACF,IAAK,SAEH5E,EAAa,KAAO,GAEpBrB,GAAqBoB,GAAK,MAAOC,EAAa,gBAAgB,EAC3D,KAAK5D,GAAO,CACXwI,EAAcxI,CAAG,CAC7B,CAAW,EACA,MAAM2F,GAAK,CACV,QAAQ,MAAMA,CAAC,CAC3B,CAAW,EACH,MACF,QACE,QAAQ,MAAM,kBAAkB/B,EAAa,4CAA4C,CAC5F,CACF,CAED,SAASK,GAAQ,CACXL,EAAa,qBACfM,EAAiBJ,GAAS,CAAC,CAAC,EAE5B4E,EAAY,CAEf,CAED,SAASxE,EAAiB+B,EAAM,CAC9BxC,EAAkB,MAAM,OAAO,MAAM,KAAOwC,EAC5CzC,GAAO,MAAQjC,GAAO,MACvB,CAED,SAASmH,GAAa,CACpBlF,GAAO,MAAQjC,GAAO,MACvB,CAED,SAAS4C,GAAiB,CACxBX,GAAO,MAAQjC,GAAO,MACvB,CAED,eAAe8C,EAAY3E,EAAS,CAClC,GAAI,CAAA4D,GAAiB,MAIrB,CAAAN,EAAQ,KAAK2F,EAAqB,YAAY,EAE9C,GAAI,CACF,KAAM,CAAE,KAAAC,EAAM,OAAAC,CAAM,EAAKnJ,EACzB4D,GAAiB,MAAQ,GAGzB,IAAIwF,EAAa3D,EAAAA,UAAUyD,EAAK,MAAM,EACtC,OAAOE,EAAW,WAClB,OAAOA,EAAW,SAClBA,EAAa,MAAMzC,EAAuByC,EAAYF,EAAK,SAAU,GAAM,EAAK,EAEhF,MAAMG,EAAetJ,GAAa,CAChC,MAAO,aACP,OAAQ,CAAC,SAAU,MAAM,CACjC,CAAO,EACDuD,EAAQ,KAAKgG,GAAU,QAASD,CAAY,EAG5C,MAAME,EAAc,0BAAuCtG,GAAE,6BAA6B,IACxFmG,EAAW,eAEb,OAAO,KAAKG,EAAaJ,CAAM,EAE/BxG,GACEM,GAAE,oCAAqC,CAAE,YAAAsG,EAAa,OAAAJ,CAAM,CAAE,EAC9DK,GAAa,QACbC,EACD,EAID,OAAO,WAAW,IAAM,CACtBC,EAAsBR,EAAK,MAAM,CAClC,EAAEO,EAA8B,CAClC,OAAQxD,EAAP,CACArC,GAAiB,MAAQ,GACzB,QAAQ,MAAMqC,CAAC,CAChB,EACF,CAED,SAASyD,EAAsBvD,EAAQ,CAErC,IAAIwD,EADc,IAAI,IAAI,OAAO,SAAS,IAAI,EACjB,aAE7B,KAAM,CAAE,QAAAC,EAAS,QAAAC,CAAO,EAAK1D,EACvB2D,EAAkBD,EAAQ,CAAC,EAAE,WAGnCF,EAAa,IAAI,SAAUG,EAAgB,MAAM,EACjDH,EAAa,IAAI,YAAaG,EAAgB,WAAW,EAEzD,KAAM,CAAE,eAAAC,EAAgB,QAAAC,EAAS,aAAAC,EAAc,EAAGL,EAClDD,EAAa,IAAI,iBAAkBI,CAAc,EACjDJ,EAAa,IAAI,UAAWK,CAAO,EACnCL,EAAa,IAAI,eAAgBM,EAAY,EAG7C,SAAS,OAASN,EAAa,SAAU,CAC1C,CAGD,SAASO,GAAYhJ,EAAO,CAC1BuC,GAAS,MAAQvC,CAClB,CAED,SAASiJ,EAAejJ,EAAO,CAC7ByC,GAAY,MAAQzC,CACrB,CAED,SAASkJ,GAAYlJ,EAAO,CAC1BhB,GAAS,MAAQgB,CAClB,CAED,SAASmJ,EAASnJ,EAAO,CACvB8C,GAAM,MAAQ9C,CACf,CAED,MAAO,CAET,aAAIgD,EACA,SAAAT,GACJ,YAAIE,GACA,iBAAAC,GACA,SAAA1D,GACA,eAAAsD,GACA,MAAAK,GACA,OAAAC,GACA,kBAAAC,EACA,sBAAAO,EACJ,MAAIN,GAGA,WAAAe,EAGA,YAAAmF,GACA,eAAAC,EACA,YAAAC,GACA,SAAAC,CACD,CACH,CCliBA,KAAM,CAAE,WAAAC,GAAY,MAAApI,EAAO,EAAGC,GAAY,EACpC,CAAE,oBAAAI,EAAqB,EAAGC,GAAU,EACpC,CAAE,aAAA0B,GAAc,YAAAP,GAAa,MAAAK,EAAK,EAAKK,GAA8B,EAE3EnC,GAAM,iBAAkBiB,GAAO,oBAAqB,CAClD,gBAAiBC,GACRA,EAAS,KAElB,cAAeC,GACNd,GAAoBc,CAAK,CAEpC,CAAC,EAED,SAASkH,GAAWC,EAAQC,EAAW,CACrC,OAAOD,GAAQ,UAAU,SAASC,CAAS,CAC7C,CAEA,SAASC,GAAgBF,EAAQC,EAAW,CAC1C,OAAOF,GAAWC,EAAQC,CAAS,EAAE,OAAO,KAAK7C,GAAK,CAAC,CAACA,EAAE,QAAQ,CACpE,CAOA,SAAS+C,GAAiBC,EAAYC,EAAa,CACjDD,EAAWC,CAAW,EAAE,UAAYA,EACpC,OAAOD,EAAWC,CAAW,EAAE,EACjC,CASA,SAASC,GACPC,EAAWC,GAAW,QAAQ,EAC9BJ,EAAaI,GAAW,UAAU,EAClCC,EAAUD,GAAW,SAAS,EAC9B,CACA,IAAIE,EAAe,CAAE,GAAGH,CAAU,EAClC,GAAI,CAACG,EAAaD,CAAO,EAAG,MAAM,IAAIE,GAAc,qBAAsBF,CAAO,EACjF,MAAMG,EAAe3F,EAAS,UAACmF,CAAU,EACzC,OAAOM,EAAaD,CAAO,EAAE,SAC1B,IAAIR,IACHE,GAAiBS,EAAcX,CAAS,EACjCW,EAAaX,CAAS,EAC9B,EACA,OAAO/C,GAAWA,CAAO,EACzB,KAAK2D,GAAS,WAAW,CAC9B,CAOA,SAASC,GAA8B1F,EAAmB2F,EAAaP,GAAW,YAAY,EAAG,CAC/F,KAAM,CAAE,WAAAQ,EAAY,OAAAC,EAAQ,SAAAvE,CAAU,EAAGtB,EAEzC,OAAO4F,EAAWD,CAAU,EAAE,OAC3B,OAAO,CAACjF,EAAK2E,IAAY3E,EAAI,OAAOwE,GAA4BW,EAAQvE,EAAU+D,CAAO,CAAC,EAAG,CAAA,CAAE,EAC/F,KAAKI,GAAS,WAAW,CAC9B,CAEA,SAASK,IAAoB,CAC3B,GAAI,OAAO,UAAY,OAAO,SAAS,OAAQ,CAC7C,KAAM,CAAE,OAAA/L,GAAW,OAAO,SACpBgM,EAAkB,IAAI,gBAAgBhM,EAAO,YAAW,CAAE,EAC1DD,EAAS,CAAE,EACjB,OAAAiM,EAAgB,QAAQ,CAACzK,EAAOrB,IAASH,EAAOG,CAAG,EAAIqB,CAAM,EACtDxB,CACR,CACD,MAAO,CAAE,CACX,CAEA,SAASkM,GAAS/L,EAAK,CACrB,OAAOqE,IAAc,OAAS,CAAC,CAACA,GAAa,OAAOrE,CAAG,EAAI,EAC7D,CAEA,SAASgM,GAAShM,EAAKH,EAAS,GAAI,CAClC,OAAKkM,GAAS/L,CAAG,EAGVL,GAAQ0E,GAAa,OAAOrE,CAAG,EAAGH,CAAM,EAFtCG,CAGX,CAEA,SAASiM,GAAajC,EAASkC,EAAuB,GAAM,CAC1D,GAAI,CAAClC,GAAWA,EAAQ,OAAS,EAAG,MAAO,GAC3C,MAAMW,EAASX,EAAQ,CAAC,EAClBmC,EAAMxB,GAAQ,KAAOpJ,GAAe,OAAOoJ,GAAQ,WAAW,WAAW,EACzEyB,EAASzB,EAAO,WAAW,OAAO,YAAa,EAErD,GAAIuB,EACF,OAAOF,GAAS,mBAAqBI,EAAQ,CAAE,IAAAD,CAAG,CAAE,EAItD,MAAME,EADcF,EAAM,GAAKA,EAAM,GACH,QAAUC,EAE5C,OAAOJ,GAAS,uBAAyBK,EAAa,CAAE,IAAAF,CAAG,CAAE,CAC/D,CAEe,SAASlJ,GAAmB,CACzC,MAAMqJ,EAAqB5M,EAAS,IAC9B,OAAO,KAAK2E,EAAY,EAAE,SAAW,EAChCF,GAAM,MAERE,GAAa,KACrB,EAEKkI,EAA2B7M,EAAS,IACpC,OAAO,KAAK2E,EAAY,EAAE,SAAW,EAChCP,GAAY,MAEdO,GAAa,WACrB,EAED,SAASrB,EAAqBoB,EAAMoI,EAAkB,CACpD,OAAO,QAAQ,QAAQC,GAAS,GAAGhC,qBAA6BrG,WAAcoI,GAAkB,CAAC,CAClG,CAED,SAASE,EAAqBlF,EAAiBmD,EAAQ,CACrD,GAAIgC,EAAAA,MAAMnF,CAAe,EACvB,MAAM,IAAI,MAAM,0DAA2DA,CAAe,EAE5F,GAAImF,EAAAA,MAAMhC,CAAM,EACd,MAAM,IAAI,MAAM,qDAAqDA,GAAQ,EAG/E,OAAOnD,EAAgB,OAAO,CAACf,EAAKoB,IAAY,CAC9C,MAAMxG,EAASsL,EAAK,MAAC9E,EAAQ,KAAK,EAA8B,KAA1B,SAASA,EAAQ,KAAK,EAC5D,OAAK8E,EAAAA,MAAMtL,CAAK,EAGdoF,GAAOoE,GAAgBF,EAAQ9C,EAAQ,EAAE,EAAE,MAF3CpB,GAAOmG,EAAkCjC,EAAQ9C,EAAQ,GAAIxG,CAAK,EAAE,MAI/DoF,CACR,EAAE,CAAC,CACL,CAED,SAASmG,EAAkCjC,EAAQC,EAAWvJ,EAAO,CACnE,GAAIsL,EAAAA,MAAMhC,CAAM,GAAKgC,EAAAA,MAAM/B,CAAS,GAAK+B,EAAAA,MAAMtL,CAAK,EAClD,MAAM,IAAI,MACR,qEAAqEsJ,gBAAqBC,YAAoBvJ,GAC/G,EAIH,MAAMyG,EADe4C,GAAWC,EAAQC,CAAS,EACtB,OAAO,KAAK7C,GAAKA,EAAE,QAAU1G,CAAK,EAC7D,GAAIsL,EAAAA,MAAM7E,CAAK,EACb,MAAM,IAAI,MAAM,gEAAgE8C,gBAAwBvJ,GAAO,EAGjH,OAAOyG,CACR,CAeD,SAAS+E,GAAiB,CACxB,MAAMhN,EAASgM,GAAmB,EAC5B,CAAE,eAAAiB,EAAgB,QAAAC,EAAS,aAAAC,EAAc,UAAAC,EAAW,UAAAC,CAAS,EAAKrN,EAExE,IAAIuM,EACAvM,EAAO,SACTuM,EAASvM,EAAO,OAAO,YAAa,GAGtC,IAAIsN,EACA5L,GAAe,iBAAiB0L,CAAS,IAC3CE,EAAc5L,GAAe,WAAW0L,EAAWG,EAAe,GAGpE,IAAI7H,EACJ,OAAIwH,IACFxH,EAAW,CACT,eAAgBuH,EAChB,QAASC,EACT,aAAcC,CACf,GAGI,CACL,OAAAZ,EACA,YAAAe,EACA,SAAA5H,EACA,UAAW2H,CACZ,CACF,CAED,SAASG,EAAehG,EAAU,CAiBhC,MAAO,CAhBmBA,EAAS,KAAKQ,GAEjCA,EAMHA,EAAQ,KAAO,eACfA,EAAQ,SAAS,SAAW,GAC5BA,EAAQ,SAAS,CAAC,EAAE,MAAQ,yCAErB,GAEFA,EAAQ,QAAU,GAXhB,EAYV,CAEF,CAED,SAASyF,EAAmB5G,EAAM,CAChC,IAAI6G,EAAY,GAEhB,MAAMC,EAAc9G,EAAK,QAAQ,QAAQ,CAAC,EAG1C,GAAI,CACFgG,EAAqBhG,EAAK,SAAU8G,CAAW,CACrD,MAAM,CACA,MAAO,EACR,CAED,MAAMnG,EAAWX,EAAK,SAAS,IAAI,GAAK,CACtC,MAAM+G,EAAe/C,GAAW8C,EAAa,EAAE,EAAE,EAEjD,OAAKC,IACHF,EAAY,IAGP,CACL,GAAI,EAAE,GACN,GAAGE,CACJ,CACP,CAAK,EAED,OAAIF,EACK,GAGFF,EAAehG,CAAQ,CAC/B,CAED,MAAO,CAEL,yBAAAkF,EACA,mBAAAD,EAGA,qBAAAtJ,EACA,SAAAgJ,GACA,aAAAC,GACA,qBAAAS,EACA,gBAAA7B,GACA,kCAAA+B,EACA,8BAAAnB,GACA,eAAAoB,EACA,SAAAd,GACA,mBAAAuB,EACA,eAAAD,CACD,CACH,qHCxQA,KAAM,CAAE,SAAArB,EAAU,SAAAD,CAAU,EAAG9I,EAAkB,EAG3CyK,EAAahO,EAAS,IACnBsM,EAAS,mBAAmB,CACpC,EAEK2B,EAAUjO,EAAS,IAChBsM,EAAS,aAAa,CAC9B,EAEK4B,EAAgBlO,EAAS,IACtB,CAAC,CAACqM,EAAS,mBAAmB,CACtC,ycCTD,KAAM,CAAE,mBAAAO,CAAoB,EAAGrJ,EAAkB,EAG3C4K,EAAShK,EAAI,CACjB,MAAO,CACL,UAAW,UACX,QAAS,SACV,EACD,UAAW,CACT,UAAW,UACX,QAAS,SACV,CACH,CAAC,EAGKiK,EAAiBpO,EAAS,IAC1B,CAAC4M,EAAmB,OAAS,CAACuB,EAAO,MAAMvB,EAAmB,KAAK,EAC9D,GAEFuB,EAAO,MAAMvB,EAAmB,KAAK,EAAE,SAC/C,EAEKyB,EAAerO,EAAS,IACxB,CAAC4M,EAAmB,OAAS,CAACuB,EAAO,MAAMvB,EAAmB,KAAK,EAC9D,GAEFuB,EAAO,MAAMvB,EAAmB,KAAK,EAAE,OAC/C,w4IC6BD,KAAM,CAAE,SAAAN,EAAU,SAAAD,CAAU,EAAG9I,EAAkB,EAC3C,CAAE,aAAAoB,CAAc,EAAGG,GAA8B,EAcjDwJ,EAAYnK,EAAI,CAAC,EACjBoK,EAAOpK,EAAI,EAAI,EACfqK,EAAc5J,GAAS,EAAE,EAC/B,IAAI6J,EAAsB,KAG1B,MAAMC,EAAgB1O,EAAS,IACtBwO,EAAYF,EAAU,KAAK,CACnC,EAEKK,EAAqB3O,EAAS,IAC3B,CAAC,CAACqM,EAAS,mBAAmB,CACtC,EAEKuC,EAAyB5O,EAAS,IAC/B2E,EAAa,yBAA2B,GAAK6J,EAAY,KAAKK,GAAS,CAAC,CAACA,CAAK,CACtF,EAEKC,EAAsB9O,EAAS,IAC5BsO,EAAU,QAAUE,EAAY,OAAS,GAAK,CAACI,EAAuB,KAC9E,EAEKG,EAAoB/O,EAAS,IAC1B2E,EAAa,8BAAgC,MAAQ,aAAe,UAC5E,EAEKqK,EAAahP,EAAS,IAAM,CAChC,MAAMiP,EAAiB,aACjBC,EAAiB,SAEjBC,EAAoB,CACxB,KAAMF,EACN,KAAMC,CACP,EAED,OAAQvK,EAAa,wBAAuB,CAC1C,IAAK,aACH,OAAOwK,EACT,IAAK,iBACH,MAAO,CACL,KAAM,SACN,KAAMD,CACP,EACH,IAAK,cACH,MAAO,CACL,KAAM,MACN,KAAMA,CACP,EACH,QACE,OAAOC,CACV,CACH,CAAC,EAGD,SAASC,GAAiB,CACpBzK,EAAa,yBAA2B,GAChB,CAAC,GAAG,MAAMA,EAAa,yBAA2B,CAAC,EAAE,KAAM,CAAA,EAAE,IACrF0K,GAAK,kBAAkBA,EAAI,GAC5B,EACiB,KAAI,EAAG,QAAQ/O,GAAO,CACtCkO,EAAY,KAAK7J,EAAa,OAAOrE,CAAG,CAAC,CAC/C,CAAK,CAEL,CAEA,SAASgP,GAAW,CAClB,GAAIhB,EAAU,MAAQ,GAAKE,EAAY,QAAU7J,EAAa,4BAA6B,CACzF,cAAc8J,CAAmB,EACjC,MACD,CACDH,EAAU,OAASA,EAAU,MAAQ,GAAKE,EAAY,MACxD,CAEA,SAASe,GAAwB,CAE/B,MAAMC,EAAe7K,EAAa,4BAA8B,IAChE8J,EAAsB,YAAYa,EAAUE,CAAY,CAC1D,CAEA,SAASC,GAAmB,CACtB9K,EAAa,6BACf,cAAc8J,CAAmB,EACjCa,EAAU,EACVC,EAAuB,EAE3B,CAGA,OAAAG,GAAU,IAAM,CACdN,EAAgB,EAChBG,EAAuB,CACzB,CAAC,8qCC9LYI,GAAWhO,GAAS,CAC/B,GAAI,CAACA,EAAO,MAAO,OACnB,IAAIiO,EAAY,WAAWjO,CAAK,EAAE,QAAQ,CAAC,EAC3C,OAAIiO,EAAY,MACdA,EAAYA,EAAU,SAAQ,EAAG,QAAQ,wBAAyB,GAAG,GAEhEA,CACT,4bCuEM,CAAE,SAAAtD,EAAU,qBAAAU,EAAsB,mBAAAY,EAAoB,aAAArB,EAAc,yBAAAM,CAA0B,EAClGtJ,EAAkB,EAsBdsM,EAAmB7P,EAAS,IACzB6M,EAAyB,QAAU,MAC3C,EAEKiD,EAAY9P,EAAS,IAClBuM,EAAawD,EAAM,KAAK,OAAO,QAASA,EAAM,KAAK,oBAAoB,CAC/E,EAEKC,EAAYhQ,EAAS,IAClB4N,EAAmBmC,EAAM,IAAI,CACrC,EAEKjC,EAAc9N,EAAS,IACpB+P,EAAM,KAAK,QAAQ,QAAQ,CAAC,CACpC,EAEK3H,EAAQpI,EAAS,IAChBgQ,EAAU,MACRL,GAAS3C,EAAqB+C,EAAM,KAAK,SAAUjC,EAAY,KAAK,CAAC,EAD/C,EAE9B,EAGD,SAASmC,GAAgB,CACvBC,EAAK,SAAS,CAChB,ujDC1DMC,EAAOnQ,EAAS,IACb+P,EAAM,SAAS,SAAW,CAClC,EAEKK,EAAiBpQ,EAAS,IACb,CAAC,GAAG+P,EAAM,QAAQ,EACnB,KAAKjE,GAAS,WAAW,CAC1C,EAGD,SAASuE,GAA2C,CAClD,MAAMC,EAAkB9P,GAAa,CACnC,MAAO,kBACP,OAAQ,CAAC,SAAS,CACtB,CAAG,EACDuD,EAAQ,KAAK2F,EAAqB,UAAW4G,CAAe,EAC5DvM,EAAQ,KAAK2F,EAAqB,WAAW,CAC/C,CAGA,OAAAgG,GAAU,IAAM,CACTK,EAAM,eACTM,EAA0C,CAE9C,CAAC,+uBC3DK,CAAE,SAAA/D,EAAU,aAAAC,CAAc,EAAGhJ,EAAkB,EAe/C,CAAE,SAAAgN,CAAQ,EAAKC,GAAO,aAAa,EAEnCV,EAAY9P,EAAS,IAClBuM,EAAagE,EAAS,MAAM,OAAO,QAASA,EAAS,MAAM,oBAAoB,CACvF,EAGD,SAASE,GAAc,CACrB,OAAOd,GAASI,EAAM,QAAQ,KAAK,CACrC,ivBClBM,CAAE,EAAArM,EAAG,GAAAgN,CAAI,EAAG/M,GAAS,EACrB,CAAE,aAAAgB,CAAc,EAAGG,GAA8B,EAajD,CAAE,SAAAyL,CAAQ,EAAKC,GAAO,aAAa,EAGnCG,EAAiBxM,EAAI,IAAI,EAGzBwD,EAAW3H,EAAS,IACnB2Q,EAAe,MACbZ,EAAM,aAAaY,EAAe,KAAK,EADZ,CAAE,CAErC,EAGDjB,GAAU,IAAM,CACd,MAAMkB,EAAW,EAAEjM,EAAa,sBAAwBA,EAAa,eACrEkM,EAAkB,OAAO,KAAKd,EAAM,YAAY,EAAE,CAAC,EAAGa,CAAQ,CAChE,CAAC,EAGD,SAASC,EAAkBC,EAAUC,EAAa,GAAM,CACtDJ,EAAe,MAAQG,EACnBC,GACFC,EAAM,SAAUF,CAAQ,CAE5B,0iCCpBMG,EAAO9M,EAAI,EAAK,EAItB+M,EAAM,EAGN,SAASA,GAAO,CACVnB,EAAM,mBAERkB,EAAK,MAAQ,GAEjB,CAEA,SAAS1I,GAAS,CAChB0I,EAAK,MAAQ,CAACA,EAAK,MAEfA,EAAK,OACPD,EAAM,QAAQ,CAElB,+oBC9CA,KAAM,CAAE,EAAG,GAAAN,CAAI,EAAG/M,GAAS,EAc3B,SAASwN,EAASnF,EAAY,CAC5BkE,EAAK,SAAUlE,CAAU,CAC3B,wgCCcM,CAAE,oBAAAoF,CAAqB,EAAGC,GAAe,EACzC,CACJ,SAAA/E,EACA,qBAAAU,EACA,kCAAAE,EACA,gBAAA/B,EACA,8BAAAY,EACA,aAAAQ,EACA,yBAAAM,CACF,EAAItJ,EAAkB,EA0BhB+N,EAAoBnN,EAAI,EAAE,EAC1BoN,EAAepN,EAAI,IAAI,EAGvB2J,EAAc9N,EAAS,IACpB+P,EAAM,KAAK,QAAQ,QAAQ,CAAC,CACpC,EAEKD,EAAY9P,EAAS,IAClBuM,EAAawD,EAAM,KAAK,OAAO,QAASA,EAAM,KAAK,oBAAoB,CAC/E,EAEK3H,EAAQpI,EAAS,IACd2P,GAAS3C,EAAqB+C,EAAM,KAAK,SAAUjC,EAAY,KAAK,CAAC,CAC7E,EAEK0D,EAAcxR,EAAS,IACpB+P,EAAM,KAAK,SAAS,IAAI1H,GAAKA,EAAE,EAAE,CACzC,EAEKoJ,EAAqBzR,EAAS,IACToR,EAAoBrB,EAAM,KAAK,kBAAkB,UAAU,EAC5D,OAAO,CAAChJ,EAAK+J,KAAa,CAChD,MAAM9E,EAAa8E,GAAS,GACtBhJ,GAAkBiE,EAA8BgE,EAAM,KAAK,kBAAmB/D,CAAU,EAC3F,OAAO7D,GAAWqJ,EAAY,MAAM,SAASrJ,EAAQ,SAAS,CAAC,EAC/D,IAAIA,GAAW,CAEdA,EAAQ,UAAY4H,EAAM,KAAK,GAE/B,MAAM2B,EAAgB3B,EAAM,KAAK,SAAS,KAAK4B,GAAQA,EAAK,KAAOxJ,EAAQ,SAAS,EAC9ExG,EAASsL,GAAMyE,EAAc,KAAK,EAAoC,KAAhC,SAASA,EAAc,KAAK,EACxE,OAAKzE,GAAMtL,CAAK,EAGdwG,EAAQ,MAAQgD,EAAgB2C,EAAY,MAAO3F,EAAQ,SAAS,EAAE,MAFtEA,EAAQ,MAAQ+E,EAAkCY,EAAY,MAAO3F,EAAQ,UAAWxG,CAAK,EAAE,MAI1FwG,CACf,CAAO,EACH,GAAIL,GAAgB,OAAS,EAAG,CAC9B,GAAIkE,IAAevJ,GACjB,OAAAsE,EAAIvE,EAAmB,EAAIuE,EAAIvE,EAAmB,GAAK,CAAE,EACzDuE,EAAIvE,EAAmB,EAAE,KAAK,GAAGsF,EAAe,EACzCf,EAETA,EAAIiF,CAAU,EAAIlE,EACnB,CACD,OAAOf,CACR,EAAE,EAAE,CACN,EAEK6K,EAAS5R,EAAS,IAClBuR,EAAa,QAAU,KAClB,KAEFA,EAAa,MAAQM,GAAyBC,EACtD,EAGD,SAASC,GAAe,CACtB,MAAMC,EAAQ,OAAO,YAAc,SAAS,gBAAgB,aAAe,SAAS,KAAK,YACzFT,EAAa,MAAQ1E,EAAyB,QAAU,UAAYmF,GAAS,GAC/E,CAEA,SAASC,GAAiB,CAExB,GAAIlC,EAAM,eAAiBA,EAAM,qBAC/B,OAEFuB,EAAkB,MAAQjQ,GAAqB0O,EAAM,IAAI,EACzD,MAAMO,EAAkB9P,GAAa,CACnC,MAAO,eACP,OAAQ,CAAC,UAAW,SAAUuP,EAAM,KAAK,QAAQ,wBAAyBuB,EAAkB,KAAK,CACrG,CAAG,EAEGvB,EAAM,eAAiBA,EAAM,sBAC/BhM,EAAQ,KAAK2F,EAAqB,UAAW4G,CAAe,EAExDzD,EAAyB,QAAU,UACrC9I,EAAQ,KAAK2F,EAAqB,YAAa4G,CAAe,GAEvDzD,EAAyB,QAAU,UAC5C9I,EAAQ,KAAK2F,EAAqB,YAAa4G,CAAe,CAElE,CAEA,SAAS4B,EAAiBpB,EAAU,CAClC,MAAMqB,EAA8B3R,GAAa,CAC/C,MAAO,eAAiBsQ,EACxB,OAAQ,CAAC,UAAW,SAAUf,EAAM,KAAK,QAAQ,wBAAyBuB,EAAkB,MAAOR,CAAQ,CAC/G,CAAG,EACD/M,EAAQ,KAAK2F,EAAqB,UAAWyI,CAA2B,EACxEpO,EAAQ,KAAK2F,EAAqB,YAAayI,CAA2B,CAC5E,CAGA,OAAAzC,GAAU,IAAM,CACd,OAAO,iBAAiB,SAAUqC,CAAY,EAC9CA,EAAc,EACdE,EAAgB,CAClB,CAAC,EAEDG,GAAgB,IAAM,CACpB,OAAO,oBAAoB,SAAUL,CAAY,CACnD,CAAC,q2BClMcM,GAAA,CACb,QAAS,CACP,SAAAC,GACA,SAAUC,GAAe,UAC1B,EACD,YAAA9E,GACA,OAAQ,CACN,SAAA6E,EACD,CACH,0MCyDM,CAAE,SAAAhG,CAAU,EAAG/I,EAAkB,EACjC,CAAE,aAAAoB,CAAc,EAAGG,GAA8B,EAYjD0N,EAAW5N,GAAS,CACxB,QAAS,CAAE,EACX,OAAQ,KACR,YAAa,IACf,CAAC,EACK,EAAI6N,GAAaJ,GAAaG,EAAU,CAAE,MAAO,GAAM,EAGvD/F,EAAMzM,EAAS,IACZ6B,GAAe,OAAO2Q,EAAS,WAAW,CAClD,EAEKE,EAAW1S,EAAS,IACjB2S,EAAaH,EAAS,WAAW,CACzC,EAGD,SAASI,GAAO,CACd,EAAE,MAAM,OAAQ,EACZ,GAAE,MAAM,UAGZ1C,EAAK,OAAQsC,CAAQ,CACvB,CAEA,SAASK,GAAyB,CAChC,MAAMC,EAAWtS,GAAa,CAC5B,MAAO,aACP,OAAQ,CAAC,SAAU,MAAM,CAC7B,CAAG,EACGmE,EAAa,sBAAwBA,EAAa,eACpDZ,EAAQ,KAAK2F,EAAqB,UAAWoJ,CAAQ,EAEvD/O,EAAQ,KAAKgP,GAA8B,CACzC,OAAQ7R,GAAO,eACf,aAAc4R,CAClB,CAAG,CACH,CAEA,SAASH,EAAaK,EAAM,CAC1B,OAAOA,GAAQA,EAAK,SAAW,IAAMC,GAASC,GAASF,CAAI,CAAC,CAC9D,CAGA,OAAAtD,GAAU,IAAM,CACd,MAAMrF,EAAU0F,EAAM,OAAO,QACvBoD,EAAapD,EAAM,OAAO,QAAQ,CAAC,EAAE,WACvC1F,IACFmI,EAAS,QAAU,CAAE,GAAGnI,CAAS,GAE/B8I,IACFX,EAAS,YAAcW,EAAW,YAClCX,EAAS,OAASW,EAAW,QAE/BN,EAAwB,CAC1B,CAAC,EAGDO,GACE,IAAMV,EACN/Q,GAAS,CAEH,CAACA,GAAS6Q,EAAS,SAAW,WAChCA,EAAS,OAAS,MAGhB7Q,IACF6Q,EAAS,OAAS,SAErB,CACH,g6DC3EM,CAAE,gBAAA3P,CAAiB,EAAGpB,GAAW,EACjC,CAAE,SAAA6K,EAAU,mBAAAsB,CAAoB,EAAGrK,EAAkB,EACrD,CAAE,iBAAAc,CAAkB,EAAGS,GAA8B,EAkCrDuO,EAAqBlP,EAAI,EAAK,EAC9BmP,EAAcnP,EAAI,EAAK,EAGvBoM,EAAWvQ,EAAS,IACjB+P,EAAM,IACd,EAEKwD,EAAcvT,EAAS,IACpB+P,EAAM,KAAK,mBAAqBzD,EAAS,uBAAuB,EAAIA,EAAS,eAAe,CACpG,EAEK0D,EAAYhQ,EAAS,IAClB4N,EAAmBmC,EAAM,IAAI,CACrC,EAEKyD,EAAiBxT,EAAS,IAC1B+P,EAAM,qBACD,GAEF,CAAC1L,EAAiB,KAC1B,EAEDoP,GAAQ,cAAe,CACrB,SAAAlD,CACF,CAAC,EAGD,SAASmD,GAAe,CACtB,MAAMjT,EAAU,CACd,KAAMsP,EAAM,KACZ,OAAQA,EAAM,iBAAmB,OAAS,QAC3C,EACD,OAAOA,EAAM,KAAK,mBAAqBiB,EAAM,cAAevQ,CAAO,EAAIkT,EAAc,CACvF,CAEA,SAASA,GAAe,CACtBL,EAAY,MAAQ,EACtB,CAEA,eAAeM,EAAW3I,EAAQ,CAEhC,GAAI,CAACA,EAAO,SAAW,CAACA,EAAO,YAC7B,OAGFoI,EAAmB,MAAQ,GAE3B,MAAMQ,EAAgB3N,GAAU6J,EAAM,KAAK,OAAO,QAAQ,CAAC,CAAC,EAC5D8D,EAAc,WAAa,CACzB,GAAGA,EAAc,WACjB,YAAa5I,EAAO,YACpB,OAAQA,EAAO,MAChB,EACD4I,EAAc,iBAAmB,GAEjC,GAAI,CACF,MAAMC,EAAgB,OAAO,OAAO,CAAA,EAAI5N,GAAU6J,EAAM,KAAK,MAAM,EAAG,CACpE,QAAS9E,EAAO,QAChB,QAAS,CAAC4I,CAAa,CAC7B,CAAK,EAED7C,EAAM,wBAAyB,CAAE,mBAAoB,GAAM,qBAAsB,GAAO,EAExFtL,GAAe,SAASqK,EAAM,KAAK,OAAQ,MAAMlN,EAAgBiR,EAAe,CAAE,SAAU,EAAM,CAAA,CAAC,EAEnGR,EAAY,MAAQ,EACrB,OAAQ5M,EAAP,CACA,QAAQ,MAAMA,CAAC,EACfsK,EAAM,wBAAyB,CAAE,mBAAoB,EAAK,CAAE,CAChE,QAAY,CACRqC,EAAmB,MAAQ,EAC5B,CACH,mhDClIM,CAAE,eAAAlG,EAAgB,yBAAAN,EAA0B,mBAAAD,CAAkB,EAAKrJ,EAAkB,EACrF,CACJ,WAAAiC,EACA,eAAAvB,EACA,MAAAK,EACA,OAAAC,EACA,kBAAAC,EACA,sBAAAO,EAEA,YAAA4F,EACA,eAAAC,EACA,YAAAC,EACA,SAAAC,CACF,EAAIhG,GAA8B,EAG5BiP,EAAQ,CACZ,OAAAC,GACA,OAAAC,GACF,MAAEC,GACA,MAAAC,EACF,EAGMC,EAAejQ,EAAI,EAAE,EACrBkQ,EAAclQ,EAAI,EAAE,EAGpBmQ,EAAUtU,EAAS,IAChB,CAAC,SAAS4M,EAAmB,QAASC,EAAyB,MAAO,UAAUtI,EAAO,OAAO,CACtG,EAGD,SAAS2M,GAAO,CACdvG,EAAYoF,EAAM,QAAQ,EAC1BnF,EAAemF,EAAM,WAAW,EAChClF,EAAYkF,EAAM,QAAQ,EAC1BjF,EAASiF,EAAM,KAAK,CACtB,CACA,OAAAmB,EAAM,EAGNxB,GAAU,IAAM,CACd3K,EAAuB,EACvBS,EAAW2H,EAAc,CAAE,CAC7B,CAAC,EAGDiG,GACE,IAAM7O,EACN,IAAM,CACAA,EAAO,QACT6P,EAAa,MAAQ5P,EAAkB,MAAMD,EAAO,KAAK,EAAE,OAC3D8P,EAAY,MAAQ7P,EAAkB,MAAMD,EAAO,KAAK,EAAE,MAE7D,EACD,CAAE,KAAM,EAAM,CAChB,EAEA6O,GACE,IAAM5O,EACN,IAAM,CACJ4P,EAAa,MAAQ5P,EAAkB,MAAMD,EAAO,KAAK,EAAE,OAC3D8P,EAAY,MAAQ7P,EAAkB,MAAMD,EAAO,KAAK,EAAE,KAC3D,EACD,CAAE,KAAM,EAAM,CAChB,EAGA6O,GACE,IAAMrD,EAAM,SACZpO,GAAS,CACHA,GACFgJ,EAAYhJ,CAAK,CAEpB,CACH,EAEAyR,GACE,IAAMrD,EAAM,YACZpO,GAAS,CACHA,GACFiJ,EAAejJ,CAAK,CAEvB,CACH,EAEAyR,GACE,IAAMrD,EAAM,SACZpO,GAAS,CACHA,GACFkJ,EAAYlJ,CAAK,CAEpB,CACH,EAEAyR,GACE,IAAMrD,EAAM,MACZpO,GAAS,CACHA,GACFmJ,EAASnJ,CAAK,CAEjB,CACH,iSCzJA,MAAMvB,GAAS,OAAO,SAAS,OAC5B,OAAO,CAAC,EACR,MAAM,GAAG,EACT,OAAO,CAAC2G,EAAKwN,IAAS,CACrB,MAAMC,EAAMD,EAAK,MAAM,GAAG,EAC1B,OAAAxN,EAAIyN,EAAI,CAAC,CAAC,EAAIA,EAAI,CAAC,EACZzN,CACR,EAAE,EAAE,EAED0N,GAAU,SAAS,eAAe,eAAe,EAEjD1E,GAAQ,CAAE,GAAG0E,GAAQ,QAAS,GAAGrU,EAAQ,EAEzCsU,GAAM/R,GAAMgS,GAAUC,GAAe7E,EAAK,CAAC,EACjD2E,GAAI,MAAMD,EAAO"}