{"version":3,"sources":["webpack://topoffer/webpack/universalModuleDefinition","webpack://topoffer/webpack/bootstrap","webpack://topoffer/external {\"commonjs\":\"@shop/common\",\"commonjs2\":\"@shop/common\",\"amd\":\"@shop/common\",\"root\":\"common\"}","webpack://topoffer/external {\"root\":\"_\",\"commonjs\":\"underscore\",\"commonjs2\":\"underscore\",\"amd\":\"underscore\"}","webpack://topoffer/./src/web/ts/domain/TariffSelectionType.ts","webpack://topoffer/./src/web/ts/domain/hardware/AbstractTechnicalDetailsValue.ts","webpack://topoffer/./src/web/ts/domain/criteria/CriteriaGroupType.ts","webpack://topoffer/./src/web/ts/domain/hardware/StockHintType.ts","webpack://topoffer/./src/web/ts/domain/hardware/StringTechnicalDetailsValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/EmptyTechnicalDetailsValue.ts","webpack://topoffer/./src/web/ts/domain/criteria/LogicType.ts","webpack://topoffer/./src/web/ts/domain/hardware/MediaGalleryItemType.ts","webpack://topoffer/./src/web/ts/util/helpers.ts","webpack://topoffer/./src/web/ts/tracking/EventListenerRegistry.ts","webpack://topoffer/./src/web/ts/main.ts","webpack://topoffer/./src/web/ts/components/filter/coFilter/coFilter.ts","webpack://topoffer/./src/web/ts/components/filter/coFilter/FilterController.ts","webpack://topoffer/./src/web/ts/components/filter/coFilter/coFilterTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coOffers/coOffers.ts","webpack://topoffer/./src/web/ts/components/offers/coOffers/OffersController.ts","webpack://topoffer/./src/web/ts/components/offers/coOffers/coOffersTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coOfferDetailsDescription/coOfferDetailsDescription.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferDetailsDescription/OfferDetailsDescriptionController.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferDetailsDescription/coOfferDetailsDescriptionTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coOfferHardware/CoOfferHardware.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferHardware/OfferHardwareController.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferHardware/coOfferHardwareTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coOfferHardwareColors/CoOfferHardwareColors.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferHardwareColors/OfferHardwareColorsController.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferHardwareColors/coOfferHardwareColorsTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coPriceDisplayPlain/coPriceDisplayPlain.ts","webpack://topoffer/./src/web/ts/components/offers/coPriceDisplayPlain/PriceDisplayPlainController.ts","webpack://topoffer/./src/web/ts/components/offers/coPriceDisplayPlain/coPriceDisplayPlainTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coOfferPrices/CoOfferPrices.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferPrices/OfferPricesController.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferPrices/coOfferPricesTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coPriceDisplay/CoPriceDisplay.ts","webpack://topoffer/./src/web/ts/components/offers/coPriceDisplay/PriceDisplayController.ts","webpack://topoffer/./src/web/ts/components/offers/coPriceDisplay/coPriceDisplayTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coOfferStockHint/CoOfferStockHint.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferStockHint/OfferStockHintController.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferStockHint/coOfferStockHintTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coOfferHardwareStorages/CoOfferHardwareStorages.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferHardwareStorages/OfferHardwareStoragesController.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferHardwareStorages/coOfferHardwareStoragesTemplate.html","webpack://topoffer/./src/web/ts/services/DataService.ts","webpack://topoffer/./src/web/ts/services/UiStateService.ts","webpack://topoffer/./src/web/ts/services/ListElementService.ts","webpack://topoffer/./src/web/ts/services/IListElementService.ts","webpack://topoffer/./src/web/ts/services/SortingService.ts","webpack://topoffer/./src/web/ts/services/ConfigurationChangeService.ts","webpack://topoffer/./src/web/ts/components/filter/FilterComponentService.ts","webpack://topoffer/./src/web/ts/components/offers/OffersComponentService.ts","webpack://topoffer/./src/web/ts/components/tabs/TabsComponentService.ts","webpack://topoffer/./src/web/ts/domain/TopOfferPageValue.ts","webpack://topoffer/./src/web/ts/domain/ConfigurationValue.ts","webpack://topoffer/./src/web/ts/domain/ConfigurationCalls.ts","webpack://topoffer/./src/web/ts/domain/CurrentConfigurationValue.ts","webpack://topoffer/./src/web/ts/domain/PriceValue.ts","webpack://topoffer/./src/web/ts/domain/PriceContentsValue.ts","webpack://topoffer/./src/web/ts/domain/SortingValue.ts","webpack://topoffer/./src/web/ts/domain/SortingContentsValue.ts","webpack://topoffer/./src/web/ts/domain/TopOfferSelectionTypeUrl.ts","webpack://topoffer/./src/web/ts/domain/criteria/CriteriaGroupValue.ts","webpack://topoffer/./src/web/ts/domain/criteria/CriteriaValue.ts","webpack://topoffer/./src/web/ts/domain/criteria/CriteriaContentsValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/ColorOptionValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/ColorOptionContentsValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/ColorOptionCalls.ts","webpack://topoffer/./src/web/ts/domain/hardware/HardwareContentsValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/HardwareValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/MediaGalleryItemValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/MediaGalleryItemContentsValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/MediaGalleryValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/StockHintValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/StockHintContentsValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/StorageOptionValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/StorageOptionContentsValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/StorageOptionCalls.ts","webpack://topoffer/./src/web/ts/domain/tariff/PackGroupValue.ts","webpack://topoffer/./src/web/ts/domain/tariff/PackGroupContentsValue.ts","webpack://topoffer/./src/web/ts/domain/tariff/PackValue.ts","webpack://topoffer/./src/web/ts/domain/tariff/PackContentsValue.ts","webpack://topoffer/./src/web/ts/domain/tariff/PackCalls.ts","webpack://topoffer/./src/web/ts/domain/tariff/TariffContentsValue.ts","webpack://topoffer/./src/web/ts/domain/tariff/TariffValue.ts","webpack://topoffer/./src/web/ts/domain/TariffOptionValue.ts","webpack://topoffer/./src/web/ts/domain/TariffOptionContentsValue.ts","webpack://topoffer/./src/web/ts/domain/TariffOptionCalls.ts","webpack://topoffer/./src/web/ts/components/productDetails/coProductDetails/coProductDetails.ts","webpack://topoffer/./src/web/ts/components/productDetails/coProductDetails/coProductDetailsTemplate.html","webpack://topoffer/./src/web/ts/components/productDetails/coProductDetails/ProductDetailsController.ts","webpack://topoffer/./src/web/ts/components/productDetails/coHardwareDetails/coHardwareDetails.ts","webpack://topoffer/./src/web/ts/components/productDetails/coHardwareDetails/HardwareDetailsController.ts","webpack://topoffer/./src/web/ts/components/productDetails/coHardwareDetails/coHardwareDetailsTemplate.html","webpack://topoffer/./src/web/ts/components/productDetails/ProductDetailsComponentService.ts","webpack://topoffer/./src/web/ts/domain/hardware/BooleanTechnicalDetailsValue.ts","webpack://topoffer/./src/web/ts/domain/hardware/TechnicalDetailsGroupType.ts","webpack://topoffer/./src/web/ts/domain/hardware/TechnicalDetailsGroupValue.ts","webpack://topoffer/./src/web/ts/components/productDetails/coTariffDetails/coTariffDetails.ts","webpack://topoffer/./src/web/ts/components/productDetails/coTariffDetails/TariffDetailsController.ts","webpack://topoffer/./src/web/ts/components/productDetails/coTariffDetails/coTariffDetailsTemplate.html","webpack://topoffer/./src/web/ts/components/productDetails/coTariffPacks/coTariffPacks.ts","webpack://topoffer/./src/web/ts/components/productDetails/coTariffPacks/TariffPacksController.ts","webpack://topoffer/./src/web/ts/components/productDetails/coTariffPacks/coTariffPacksTemplate.html","webpack://topoffer/./src/web/ts/components/filter/coTariffOptions/CoTariffOptions.ts","webpack://topoffer/./src/web/ts/components/filter/coTariffOptions/TariffOptionsController.ts","webpack://topoffer/./src/web/ts/components/filter/coTariffOptions/coTariffOptionsTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coHardwareMedia/coHardwareMedia.ts","webpack://topoffer/./src/web/ts/components/offers/coHardwareMedia/HardwareMediaController.ts","webpack://topoffer/./src/web/ts/components/offers/coHardwareMedia/coHardwareMediaTemplate.html","webpack://topoffer/./src/web/ts/domain/ListElementValue.ts","webpack://topoffer/./src/web/ts/components/tabs/coTabs/coTabs.ts","webpack://topoffer/./src/web/ts/components/tabs/coTabs/TabsController.ts","webpack://topoffer/./src/web/ts/components/tabs/coTabs/coTabsTemplate.html","webpack://topoffer/./src/web/ts/domain/PageCalls.ts","webpack://topoffer/./src/web/ts/services/TopOfferFeatureToggleService.ts","webpack://topoffer/./src/web/ts/domain/FeatureTogglesValue.ts","webpack://topoffer/./src/web/ts/components/topOffer/coTopOffer/coTopOffer.ts","webpack://topoffer/./src/web/ts/components/topOffer/coTopOffer/TopOfferController.ts","webpack://topoffer/./src/web/ts/components/topOffer/coTopOffer/coTopOfferTemplate.html","webpack://topoffer/./src/web/ts/components/topOffer/TopOfferComponentService.ts","webpack://topoffer/./src/web/ts/app/App.ts","webpack://topoffer/./src/web/ts/app/appTemplate.html","webpack://topoffer/./src/web/ts/domain/TargetGroupSwitcherValue.ts","webpack://topoffer/./src/web/ts/components/targetGroupSwitcher/coTargetGroupSwitcher/coTargetGroupSwitcher.ts","webpack://topoffer/./src/web/ts/components/targetGroupSwitcher/coTargetGroupSwitcher/coTargetGroupSwitcher.html","webpack://topoffer/./src/web/ts/components/targetGroupSwitcher/coTargetGroupSwitcher/TargetGroupSwitcherController.ts","webpack://topoffer/./src/web/ts/components/targetGroupSwitcher/TargetGroupSwitcherComponentService.ts","webpack://topoffer/./src/web/ts/components/offers/coTariffSwitcher/coTariffSwitcher.ts","webpack://topoffer/./src/web/ts/components/offers/coTariffSwitcher/coTariffSwitcherController.ts","webpack://topoffer/./src/web/ts/components/offers/coTariffSwitcher/coTariffSwitcherTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coOfferCartDisplay/coOfferCartDisplay.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferCartDisplay/coOfferCartDisplayController.ts","webpack://topoffer/./src/web/ts/components/offers/coOfferCartDisplay/coOfferCartDisplayTemplate.html","webpack://topoffer/./src/web/ts/tracking/TopOfferTrackingService.ts","webpack://topoffer/external \"angular\"","webpack://topoffer/./src/web/ts/domain/EcommerceProductValue.ts","webpack://topoffer/./src/web/ts/domain/LoginStatusTrackingValue.ts","webpack://topoffer/./src/web/ts/components/offers/coNewOffers/coNewOffers.ts","webpack://topoffer/./src/web/ts/components/offers/coNewOffers/OffersController.ts","webpack://topoffer/./src/web/ts/components/offers/coNewOffers/coNewOffersTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coHardwareTile/hardwareTile.ts","webpack://topoffer/./src/web/ts/components/offers/coHardwareTile/hardwareTileController.ts","webpack://topoffer/./src/web/ts/components/offers/coHardwareTile/hardwareTileTemplate.html","webpack://topoffer/./src/web/ts/components/offers/coPriceSection/coPriceSection.ts","webpack://topoffer/./src/web/ts/components/offers/coPriceSection/PriceSectionController.ts","webpack://topoffer/./src/web/ts/components/offers/coPriceSection/coPriceSection.html","webpack://topoffer/./src/web/ts/domain/hardware/EnergyEfficiency.ts"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__135__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","common_1","TariffSelectionType","this","argsContract","arguments","META_INFO","enumMetaInfo","POSTPAID","PREPAID","HARDWARE_ONLY","AbstractTechnicalDetailsValue","isBooleanTypedField","Error","CriteriaGroupType","_values","forName","obj","values","_","MANUFACTURER","OTHER","StockHintType","ON_STOCK","ON_STOCK_LIMITED_AVAILABILITY","VIRTUAL_STOCK","OUT_OF_STOCK","StringTechnicalDetailsValue","_super","__extends","valueMetaInfo","keyName","keyValue","AbstractTechnicalDetailsValue_1","EmptyTechnicalDetailsValue","LogicType","AND","OR","MediaGalleryItemType","PICTURE","VIDEO","THREE_D","getFormattedDataVolumeGigabytes","datVolumeMbNumeric","alternativeDisplayText","suffixLTE","trimmedDatVolumeMbNumeric","replace","trim","length","match","Math","floor","parseInt","getTariffInfoValue","tariffInfoDetails","tariffInfoText","DOMParser","parseFromString","querySelector","textContent","EventListenerRegistry","$inject","Events","coFilter_1","coOffers_1","coOfferDetailsDescription_1","CoOfferHardware_1","CoOfferHardwareColors_1","coPriceDisplayPlain_1","CoOfferPrices_1","CoPriceDisplay_1","CoOfferStockHint_1","CoOfferHardwareStorages_1","DataService_1","UiStateService_1","ListElementService_1","SortingService_1","ConfigurationChangeService_1","FilterComponentService_1","OffersComponentService_1","TabsComponentService_1","TopOfferPageValue_1","ConfigurationValue_1","ConfigurationCalls_1","CurrentConfigurationValue_1","PriceValue_1","PriceContentsValue_1","SortingValue_1","SortingContentsValue_1","TopOfferSelectionTypeUrl_1","TariffSelectionType_1","CriteriaGroupValue_1","CriteriaValue_1","CriteriaContentsValue_1","LogicType_1","ColorOptionValue_1","ColorOptionContentsValue_1","ColorOptionCalls_1","HardwareContentsValue_1","HardwareValue_1","MediaGalleryItemType_1","MediaGalleryItemValue_1","MediaGalleryItemContentsValue_1","MediaGalleryValue_1","StockHintType_1","StockHintValue_1","StockHintContentsValue_1","StorageOptionValue_1","StorageOptionContentsValue_1","StorageOptionCalls_1","PackGroupValue_1","PackGroupContentsValue_1","PackValue_1","PackContentsValue_1","PackCalls_1","TariffContentsValue_1","TariffValue_1","TariffOptionValue_1","TariffOptionContentsValue_1","TariffOptionCalls_1","coProductDetails_1","coHardwareDetails_1","ProductDetailsComponentService_1","BooleanTechnicalDetailsValue_1","EmptyTechnicalDetailsValue_1","StringTechnicalDetailsValue_1","TechnicalDetailsGroupType_1","TechnicalDetailsGroupValue_1","coTariffDetails_1","coTariffPacks_1","CoTariffOptions_1","coHardwareMedia_1","ListElementValue_1","coTabs_1","PageCalls_1","CriteriaGroupType_1","TopOfferFeatureToggleService_1","FeatureTogglesValue_1","coTopOffer_1","TopOfferComponentService_1","App_1","TargetGroupSwitcherValue_1","coTargetGroupSwitcher_1","TargetGroupSwitcherComponentService_1","coTariffSwitcher_1","coOfferCartDisplay_1","EventListenerRegistry_1","TopOfferTrackingService_1","angular","EcommerceProductValue_1","LoginStatusTrackingValue_1","coNewOffers_1","hardwareTile_1","coPriceSection_1","EnergyEfficiency_1","directive","coHardwareMedia","component","CoTopOffer","CoTabs","CoTargetGroupSwitcher","CoTariffSwitcher","CoFilter","CoOffers","CoNewOffers","HardwareTile","CoOfferDetailsDescription","CoOfferHardware","CoOfferHardwareColors","CoOfferHardwareStorages","CoOfferPrices","CoPriceDisplay","CoPriceDisplayPlain","CoPriceSection","CoOfferCartDisplay","CoOfferStockHint","CoProductDetails","CoTariffDetails","CoTariffPacks","CoHardwareDetails","CoTariffOptions","App","classToFactory","DataService","UiStateService","ListElementService","SortingService","TopOfferComponentService","ConfigurationChangeService","FilterComponentService","OffersComponentService","TabsComponentService","TargetGroupSwitcherComponentService","ProductDetailsComponentService","TopOfferFeatureToggleService","service","TopOfferTrackingService","run","noop","eventService","emit","TOP_OFFER_TRACKING_INITIALIZED","config","mappingServiceProvider","addAnnotatedType","TopOfferPageValue","LoginStatusTrackingValue","ListElementValue","ConfigurationValue","EcommerceProductValue","ConfigurationCalls","PageCalls","CurrentConfigurationValue","PriceValue","PriceContentsValue","SortingValue","SortingContentsValue","TopOfferSelectionTypeUrl","FeatureTogglesValue","TargetGroupSwitcherValue","CriteriaGroupValue","CriteriaValue","CriteriaContentsValue","BooleanTechnicalDetailsValue","ColorOptionValue","ColorOptionContentsValue","ColorOptionCalls","HardwareContentsValue","HardwareValue","MediaGalleryItemValue","MediaGalleryItemContentsValue","MediaGalleryValue","StockHintValue","StockHintContentsValue","StorageOptionValue","StorageOptionContentsValue","TechnicalDetailsGroupType","TechnicalDetailsGroupValue","StorageOptionCalls","EnergyEfficiency","PackGroupValue","PackGroupContentsValue","PackValue","PackContentsValue","PackCalls","TariffContentsValue","TariffValue","TariffOptionValue","TariffOptionContentsValue","TariffOptionCalls","snapshotService","snapshot","externalService","initExternalApps","FilterController_1","coFilterTemplate_html_1","controller","FilterController","template","default","filterComponentService","_manufacturer","showAllManufacturer","switchManufacturer","getSelectedSortingEntry","entry","setSelectedSortingEntry","getSortingEntries","toggleCriteriaValue","criteriaValue","toggleCriteriaValues","criteriaKeyValue","getCriteriaValue","getCriteriaValues","resetCriteriaSelection","getManufacturerCriteriaValues","isFilterDisabled","isTariffOptionSwitchEnabled","navigateToAllDevices","getListElementIds","__webpack_exports__","OffersController_1","coOffersTemplate_html_1","OffersController","offersComponentService","topOfferTrackingService","_this","alreadyTrackedProducts","addEventListener","pushTrackedProductsToDataLayer","moreRowsToShow","showMoreRows","isAllDetailsOpen","id","toggleAllDetails","$event","preventDefault","closeReviewsModal","isReviewsModalOpen","getRatingReviews","getActiveReviewsHardwareName","getExternalId","modalContentResolved","$","document","trigger","getNoOffersAvailableText","getBlauHardwareFlexText","getHardwarePdpLink","getHardwareImageLink","getHardwareName","getInfoIconToggle","getConfiguration","hardware","contents","infoIconToggle","getHardwareColors","getEnergyLevel","getFormattedRecurringAmount","prices","getPrices","showSinglePrice","console","log","amount","singlePriceAmount","recurringAmount","formatPrice","getFormattedStrikeThroughPrice","getOcclModalInfoId","externalId","getFormattedNonRecurringAmount","nonRecurringAmount","getContractDurationDescription","price","contractDurationDescription","duration","getTotalPriceAmount","totalPrice","totalPriceAmount","isTotalPriceDisplayEnabled","enabled","isRedirectionEnabled","isPdpStoreRedirectionForHWO","getFilterStatus","setFilterStatus","childrenDivIds","querySelectorAll","visitedDivIds","divId","divTop","getBoundingClientRect","top","divBottom","bottom","innerHeight","push","trackingHwProducts","filter","hw","some","visitedId","trackedProduct","ids","slice","ecommerceProductValues","i_1","ecommerceProductValue","buildTrackingObjectForProductImpression","getSelectedCriteriaValue","_a","apply","i_2","_b","OfferDetailsDescriptionController_1","coOfferDetailsDescriptionTemplate_html_1","bindings","OfferDetailsDescriptionController","dataService","find","getTariffOptionEntries","selected","selectOptionEntry","isHardwareOnlySelected","getHardwareDescription","getTariffFeatures","openReviewsModal","getRatingStars","getSchemaData","rawSchema","JSON","parse","stringify","toString","OfferHardwareController_1","coOfferHardwareTemplate_html_1","OfferHardwareController","temp","createElement","innerHTML","image","forEach","img","setAttribute","tempDataSheet","getProductDataSheet","anchor","href","openMediaGallery","isMediaGalleryAvailable","OfferHardwareColorsController_1","coOfferHardwareColorsTemplate_html_1","OfferHardwareColorsController","setHardwareColor","color","PriceDisplayPlainController_1","coPriceDisplayPlainTemplate_html_1","type","footnotes","PriceDisplayPlainController","_type","v","getPriceInteger","getPrice","getPriceDecimal","hardwarePriceAmount","tariffPriceAmount","getFootnotes","getContents","getActivationFeeDescription","activationFeeDescription","getHardwareMonthlyPrice","Number","toFixed","getContractDuration","raw","getTotalPrice","data","getHardwareContents","OfferPricesController_1","coOfferPricesTemplate_html_1","OfferPricesController","isPostpaidSelected","isPrepaidSelected","PriceDisplayController_1","coPriceDisplayTemplate_html_1","PriceDisplayController","getPreDescription","hardwarePrePriceDescription","tariffPrePriceDescription","singlePrePriceDescription","getPostDescription","hardwarePostPriceDescription","tariffPostPriceDescription","singlePostPriceDescription","OfferStockHintController_1","coOfferStockHintTemplate_html_1","OfferStockHintController","getStockHintText","getStockHint","hint","getCssClassForStockHint","hintType","OfferHardwareStoragesController_1","coOfferHardwareStoragesTemplate_html_1","OfferHardwareStoragesController","getHardwareStorages","setHardwareStorage","storage","pageValueProvider","callService","loggerService","configurationForListElementId","logger","$onInit","listElements","concat","getPageValue","postpaidListElements","prepaidListElements","hardwareOnlyListElements","reduce","map","listElement","configurations","initialConfigurationId","criteriaGroups","getManufacturerCriteriaGroup","criteriaValues","criteriaGroup","criteriaGroupType","criterias","criteria","title","toLocaleLowerCase","getAllCriteriaGroup","submitSelected","handleCall","calls","submitCall","wwwCall","listElementId","setConfiguration","configuration","getHardware","getTransformedHardwareTechnicalDetailGroups","technicalDetailGroups","chain","technicalDetailsGroup","technicalDetails","technicalDetailsEntry","categoryItem","getHardwareOverviewItems","overviewOne","overviewTwo","overviewThree","overviewFour","getMediaGallery","mediaGallery","getInitialMediaGalleryItemType","items","item","contentAvailable","isSubmitEnabled","submitEnabled","tariff","stockHint","getTariff","colorOptions","storageOptions","getTariffContents","getTariffName","getTariffOverviewItems","getTariffConditions","conditions","getTariffNumberPorting","numberPorting","dataVolume","bandwidth","phoneFlat","smsFlat","roaming","getTariffDataVolume","getSeoHeadlineText","seoHeadlineText","getSeoTopTeaserText","seoTopTeaserText","getSeoBottomTeaserText","seoBottomTeaserText","getPackGroups","packGroups","round","substr","ratingStars","ratingReviews","getTargetGroupSwitcherValue","targetGroupSwitcherValue","switchTargetGroup","noOffersAvailableText","blauHardwareFlexText","getBundleHwCatalogUrl","topOfferSelectionTypeUrl","bundleHwCatalogUrl","getHardwareOnlyHwCatalogUrl","hardwareOnlyHwCatalogUrl","schemaDataElements","energyEfficiency","energyEfficiencyLabel","productDataSheet","getTariffInfoText","pdpStoreRedirectionForHWO","uiState","UIState","isShowMediaGallery","getUIState","showMediaGallery","activeMediaGalleryId","closeMediaGallery","getActiveMediaGalleryItemType","undefined","activeMediaGalleryItemTypeById","getActiveMediaGalleryId","setActiveMediaGalleryItemType","getTileState","allDetailsOpen","isTariffAccordionEntryOpen","entryId","openTariffAccordionEntryId","isHardwareAccordionEntryOpen","openHardwareAccordionEntryId","toggleTariffAccordionEntry","toggleHardwareAccordionEntry","getActiveReviewsModalId","activeReviewModalId","showReviewsModal","tileStates","TileState","getSubmitInProgress","submitInProgress","setSubmitInProgress","filterclicked","filterClicked","IListElementService_1","visibleListElements","sortingEntries","moreRowsAvailable","currentCriteriaValue","pageValue","tariffSelectionType","tariffSelection","sortingValues","sortingValue","SortingEntry","flatten","selectedSortingEntry","resetRowsToShow","updateListElementIds","group","each","resetSelectedValues","setTariffSelection","getVisibleListElements","getVisibleListElementIds","listElementValue","getTariffSelection","filterListElementValues","elements","sortedElements","sort","e1","e2","sortingOrder","descending","sortingName","indexBySortingName","min","elementCountToShow","debug","originalListElements","listElementIds","getListElements","every","criteriaGroupValue","selectedValues","logicType","intersection","difference","PAGE_SIZE","rowsToShow","getCurrentCriteriaValue","busyService","trackingService","newActiveColor","changeColorOptionCall","getNewConfiguration","newActiveStorage","changeStorageOptionCall","selectTariffOptionEntry","newSelectedEntry","changeTariffCall","selectPack","packGroupIndex","packGroup","newActivePack","changePackCall","busy","then","newConfiguration","track","trackingCall","listElementService","topOfferFeatureToggleService","element","isFiltersEnabled","configurationChangeService","uiStateService","isSubmitPossible","hwIndex","indexOf","trackProductClick","catch","hardwareImageLink","hardwarePdpLink","description","tariffOptionEntries","withoutTrailingZeros","integer","selectedEntry","isNull","isEmpty","attributes","strikePrice","aep_monthly_price_base","aep_monthly_price_pack_base","numericStrikePrice","String","isNaN","currentPrice","currentRecurringAmount","split","productType","featureTogglesValue","unifiedTrackingEnabled","loginStatusTrackingValue","shopContext","targetGroup","hardwareOfferName","tariffOfferName","selectedTariffPackNames","getSelectedValues","toggle","append","parseHTML","imageHtml","attr","optionName","growHint","networkHint","packList","markup","packs","details","tariffDataVolumeMbNumeric","coProductDetailsTemplate_html_1","ProductDetailsController_1","ProductDetailsController","productDetailsComponentService","displayTariffDetails","HardwareDetailsController_1","coHardwareDetailsTemplate_html_1","HardwareDetailsController","isHardwareOverviewItemsEmpty","isAccordionEntryOpen","toggleAccordionEntry","clickedPack","CAMERA","DISPLAY","DEVICE","MEMORY","technicalDetailsGroupType","TariffDetailsController_1","coTariffDetailsTemplate_html_1","TariffDetailsController","isTariffNumberPortingEmpty","isTariffConditionEmpty","isTariffOverviewItemsEmpty","getPackGroupName","TariffPacksController_1","coTariffPacksTemplate_html_1","TariffPacksController","onAnchorKeydown","event","target","click","getPacks","pack","getPackName","getPackDescription","getPackDetails","getPackPriceInteger","getPackPriceDecimal","TariffOptionsController_1","coTariffOptionsTemplate_html_1","TariffOptionsController","isTariffSelectionHardwareOnly","setTariffSelectionHardwareOnly","location","isTariffSelectionPostpaid","setTariffSelectionPostpaid","substring","isTariffSelectionPrepaid","setTariffSelectionPrepaid","HardwareMediaController_1","coHardwareMediaTemplate_html_1","scope","HardwareMediaController","bindToController","controllerAs","getTabName","isMediaGalleryTypeActive","isMediaGalleryTabShown","TabsController_1","coTabsTemplate_html_1","TabsController","onTabChange","tabsComponentService","isNoActiveManufacturer","isActiveManufacturer","filtersEnabled","totalPriceDisplayEnabled","tariffOptionSwitchEnabled","isNewBlauPlpEnabled","newBlauPlpEnabled","TopOfferController_1","coTopOfferTemplate_html_1","TopOfferController","topOfferComponentService","activeTabIndex","getPlpToggleValue","setActiveTabIndex","index","appTemplate_html_1","bannerMarkup","visible","coTargetGroupSwitcher_html_1","TargetGroupSwitcherController_1","TargetGroupSwitcherController","targetGroupSwitcherService","targetGroupName","coTariffSwitcherController_1","coTariffSwitcherTemplate_html_1","entries","CoTariffSwitcherController","helpers_1","onEntryClick","_selectedEntry","dataVolumeMbNumeric","tariffName","hasTariffOptions","getEntries","coOfferCartDisplayController_1","coOfferCartDisplayTemplate_html_1","CoOfferCartDisplayController","isUnifiedTrackingEnabled","subscribe","trackPage","page","content","category","productCategory","application","pageCategory","filterValue","__assign","quantity","list","position","eCat","eAct","eLab","nonInteraction","eshop_login_status","ecommerce","impressions","actionField","products","ConstantCall","rawContent","cust_cookie_value","logged_in","user_type","coNewOffersTemplate_html_1","rawData","positionCounter","schemaData","@type","finalSchemaData","@context","itemListElement","getActiveTabPanelId","getActiveTabId","hardwareTileController_1","hardwareTileTemplate_html_1","hardwareTileController","isMobile","detectMobileDevice","userAgent","navigator","vendor","test","toLowerCase","resolvePrices","_prices","isLazyLoadEnabled","useEnergyImageWidth","anchors","energyImageStyle","getBrand","brand","getHardwareDisplayName","getHardwareRuntime","getTariffBundleName","dimension59","getTariffContractMonths","metric17","getTariffMonthlyRate","aep_monthly_price_final","getConnectionFeeDescription","getConnectionFeeValue","getMonthlyAfterBenefit","parseFloat","getHardwareRuntimePlus","desc","getTariffDataVolumeGb","getGrowHintText","getBrandNetworkHintText","getEuRoamingPackText","getMonthlyHwPrice","PriceSectionController_1","coPriceSection_html_1","PriceSectionController"],"mappings":"CAAA,SAAAA,iCAAAC,KAAAC,SACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,QAAAG,QAAA,gBAAAA,QAAA,cAAAA,QAAA,YACA,mBAAAC,eAAAC,IACAD,OAAA,wCAAAJ,SACA,iBAAAC,QACAA,QAAA,SAAAD,QAAAG,QAAA,gBAAAA,QAAA,cAAAA,QAAA,YAEAJ,KAAA,SAAAC,QAAAD,KAAA,OAAAA,KAAA,EAAAA,KAAA,SARA,CASCO,OAAA,SAAAC,+BAAAC,+BAAAC,kCACD,yBCTA,IAAAC,iBAAA,GAGA,SAAAC,oBAAAC,UAGA,GAAAF,iBAAAE,UACA,OAAAF,iBAAAE,UAAAX,QAGA,IAAAC,OAAAQ,iBAAAE,UAAA,CACAC,EAAAD,SACAE,GAAA,EACAb,QAAA,IAUA,OANAc,QAAAH,UAAAI,KAAAd,OAAAD,QAAAC,cAAAD,QAAAU,qBAGAT,OAAAY,GAAA,EAGAZ,OAAAD,QA0DA,OArDAU,oBAAAM,EAAAF,QAGAJ,oBAAAO,EAAAR,iBAGAC,oBAAAQ,EAAA,SAAAlB,QAAAmB,KAAAC,QACAV,oBAAAW,EAAArB,QAAAmB,OACAG,OAAAC,eAAAvB,QAAAmB,KAAA,CAA0CK,YAAA,EAAAC,IAAAL,UAK1CV,oBAAAgB,EAAA,SAAA1B,SACA,oBAAA2B,eAAAC,aACAN,OAAAC,eAAAvB,QAAA2B,OAAAC,YAAA,CAAwDC,MAAA,WAExDP,OAAAC,eAAAvB,QAAA,cAAiD6B,OAAA,KAQjDnB,oBAAAoB,EAAA,SAAAD,MAAAE,MAEA,GADA,EAAAA,OAAAF,MAAAnB,oBAAAmB,QACA,EAAAE,KAAA,OAAAF,MACA,KAAAE,MAAA,iBAAAF,oBAAAG,WAAA,OAAAH,MACA,IAAAI,GAAAX,OAAAY,OAAA,MAGA,GAFAxB,oBAAAgB,EAAAO,IACAX,OAAAC,eAAAU,GAAA,WAAyCT,YAAA,EAAAK,cACzC,EAAAE,MAAA,iBAAAF,MAAA,QAAAM,OAAAN,MAAAnB,oBAAAQ,EAAAe,GAAAE,IAAA,SAAAA,KAAgH,OAAAN,MAAAM,MAAqBC,KAAA,KAAAD,MACrI,OAAAF,IAIAvB,oBAAA2B,EAAA,SAAApC,QACA,IAAAmB,OAAAnB,eAAA+B,WACA,SAAAM,aAA2B,OAAArC,OAAA,SAC3B,SAAAsC,mBAAiC,OAAAtC,QAEjC,OADAS,oBAAAQ,EAAAE,OAAA,IAAAA,QACAA,QAIAV,oBAAAW,EAAA,SAAAmB,OAAAC,UAAsD,OAAAnB,OAAAoB,UAAAC,eAAA5B,KAAAyB,OAAAC,WAGtD/B,oBAAAkC,EAAA,GAIAlC,wCAAAmC,EAAA,+BClFA5C,OAAAD,QAAAM,yDCAAL,OAAAD,QAAAO,iJCAA,IAAAuC,SAAApC,oBAAA,GACAqC,oBAAA,WAQI,SAAAA,oBAAmB5B,MAAA6B,KAAA7B,UACf8B,aAAaC,UAAW,OAEhC,OATWH,oBAAAI,UAAqBL,SAAAM,aAAa,gCAElCL,oBAAAM,SAA+B,IAAIN,oBAAoB,YACvDA,oBAAAO,QAA8B,IAAIP,oBAAoB,WACtDA,oBAAAQ,cAAoC,IAAIR,oBAAoB,iBAKvEA,oBAXA,GAAa/C,QAAA+C,0JCDb,IAAAS,8BAAA,oBAAAA,iCAMA,OAHWA,8BAAAd,UAAAe,oBAAP,WACI,MAAM,IAAIC,MAAM,4BAExBF,8BANA,GAAaxD,QAAAwD,8KCAb,IAAAV,SAAApC,oBAAA,GACAiD,kBAAA,WAsBI,SAAAA,kBAAmBxC,MAAA6B,KAAA7B,UACf8B,aAAaC,UAAW,OACxBS,kBAAkBC,QAAQzC,MAAQ6B,KAG1C,OArBWW,kBAAAE,QAAP,SAAeC,KAEX,OADAb,aAAaC,UAAW,iBACZ,OAARY,IACO,KAEJH,kBAAkBC,QAAQE,MAG9BH,kBAAAI,OAAP,WACI,OAAOC,EAAED,OAAOJ,kBAAkBC,UAb/BD,kBAAAR,UAAqBL,SAAAM,aAAa,8BAE1BO,kBAAAC,QAA4C,GAepDD,kBAAAM,aAAiC,IAAIN,kBAAkB,gBACvDA,kBAAAO,MAA0B,IAAIP,kBAAkB,SAO3DA,kBA3BA,GAAa3D,QAAA2D,sJCDb,IAAAb,SAAApC,oBAAA,GACAyD,cAAA,WASI,SAAAA,cAAmBhD,MAAA6B,KAAA7B,UACf8B,aAAaC,UAAW,OAEhC,OAVWiB,cAAAhB,UAAqBL,SAAAM,aAAa,0BAElCe,cAAAC,SAAyB,IAAID,cAAc,YAC3CA,cAAAE,8BAA8C,IAAIF,cAAc,iCAChEA,cAAAG,cAA8B,IAAIH,cAAc,iBAChDA,cAAAI,aAA6B,IAAIJ,cAAc,gBAK1DA,cAZA,GAAanE,QAAAmE,yhBCDb,IAAArB,SAAApC,oBAAA,GAGA8D,4BAAA,SAAAC,QAAA,SAAAD,uFAYA,OAZiDE,UAAAF,4BAAAC,QAStCD,4BAAA9B,UAAAe,oBAAP,WACI,OAAO,GARJe,4BAAArB,UAAYL,SAAA6B,cAAc,uCAAwC,CACrEC,QAAS,gBACTC,SAAU,kBAQlBL,4BAZA,CAFA9D,oBAAA,GAEiD8C,+BAApCxD,QAAAwE,qjBCHb,IAAAM,gCAAApE,oBAAA,GACAoC,SAAApC,oBAAA,GAEAqE,2BAAA,SAAAN,QAAA,SAAAM,sFASA,OATgDL,UAAAK,2BAAAN,QAMrCM,2BAAArC,UAAAe,oBAAP,WACI,OAAO,GALJsB,2BAAA5B,UAAYL,SAAA6B,cAAc,sCAAuC,CACpEC,QAAS,kBAMjBG,2BATA,CAAgDD,gCAAAtB,+BAAnCxD,QAAA+E,wKCHb,IAAAjC,SAAApC,oBAAA,GACAsD,EAAAtD,oBAAA,GACAsE,UAAA,WAuBI,SAAAA,UAAoB7D,MAAA6B,KAAA7B,UAEhB8B,aAAaC,UAAW,OACxB8B,UAAUpB,QAAQzC,MAAQ6B,KAGlC,OAvBWgC,UAAAnB,QAAP,SAAeC,KAGX,OADAb,aAAaC,UAAW,iBACZ,OAARY,IACO,KAEJkB,UAAUpB,QAAQE,MAGtBkB,UAAAjB,OAAP,WACI,OAAOC,EAAED,OAAOiB,UAAUpB,UAdvBoB,UAAA7B,UAAqBL,SAAAM,aAAa,sBAE1B4B,UAAApB,QAAoC,GAgB5CoB,UAAAC,IAAgB,IAAID,UAAU,OAC9BA,UAAAE,GAAe,IAAIF,UAAU,MAQxCA,UA7BA,GAAahF,QAAAgF,sICFb,IAAAlC,SAAApC,oBAAA,GACAsD,EAAAtD,oBAAA,GACAyE,qBAAA,WAuBI,SAAAA,qBAAoBhE,MAAA6B,KAAA7B,UAEhB8B,aAAaC,UAAW,OACxBiC,qBAAqBvB,QAAQzC,MAAQ6B,KAG7C,OAvBWmC,qBAAAtB,QAAP,SAAeC,KAGX,OADAb,aAAaC,UAAW,OACZ,OAARY,IACO,KAEJqB,qBAAqBvB,QAAQE,MAGjCqB,qBAAApB,OAAP,WACI,OAAOC,EAAED,OAAOoB,qBAAqBvB,UAdlCuB,qBAAAhC,UAAqBL,SAAAM,aAAa,iCAE1B+B,qBAAAvB,QAA+C,GAevDuB,qBAAAC,QAA+B,IAAID,qBAAqB,WACxDA,qBAAAE,MAA6B,IAAIF,qBAAqB,SACtDA,qBAAAG,QAA+B,IAAIH,qBAAqB,WAQnEA,qBA7BA,GAAanF,QAAAmF,4JCGbnF,QAAAuF,gCAAA,SAAgBA,gCACZC,mBACAC,uBACAC,gBAAA,IAAAA,sBAAA,QAEF,IAAMC,0BAA4BH,mBAC/BI,QAAQ,OAAQ,IAChBC,OAEH,MAAkC,OAA9BF,0BACK,iBAIgC,IAArCA,0BAA0BG,QACzBH,0BAA0BI,MAAM,YAW3BC,KAAKC,MAAMC,SAASP,2BAA6B,MAAK,MAAMD,UAT7DD,wBAaXzF,QAAAmG,mBAAA,SAAiBA,mBAAmBC,mBAClC,IAEMC,gBAFS,IAAIC,WACQC,gBAAgBH,kBAAmB,mBAC3BI,cAAc,cAEjD,OAAOH,eAAiBA,eAAeI,YAAc,wHCxCvD,IAAAC,sBAAA,oBAAAA,yBAEA,OADWA,sBAAAC,QAAoB,CAAC,2BAChCD,sBAFA,GAAa1G,QAAA0G,4CAIb,SAAYE,QACRA,OAAA,sDADJ,CAAY5G,QAAA4G,SAAA5G,QAAA4G,OAAM,4MCJlB,IAAAC,WAAAnG,oBAAA,IACAoG,WAAApG,oBAAA,IACAqG,4BAAArG,oBAAA,IACAsG,kBAAAtG,oBAAA,IACAuG,wBAAAvG,oBAAA,IACAwG,sBAAAxG,oBAAA,IACAyG,gBAAAzG,oBAAA,IACA0G,iBAAA1G,oBAAA,IACA2G,mBAAA3G,oBAAA,IACA4G,0BAAA5G,oBAAA,IACA6G,cAAA7G,oBAAA,IACA8G,iBAAA9G,oBAAA,IACAoC,SAAApC,oBAAA,GACA+G,qBAAA/G,oBAAA,IACAgH,iBAAAhH,oBAAA,IACAiH,6BAAAjH,oBAAA,IACAkH,yBAAAlH,oBAAA,IACAmH,yBAAAnH,oBAAA,IACAoH,uBAAApH,oBAAA,IACAqH,oBAAArH,oBAAA,IACAsH,qBAAAtH,oBAAA,IACAuH,qBAAAvH,oBAAA,IACAwH,4BAAAxH,oBAAA,IACAyH,aAAAzH,oBAAA,IACA0H,qBAAA1H,oBAAA,IACA2H,eAAA3H,oBAAA,IACA4H,uBAAA5H,oBAAA,IACA6H,2BAAA7H,oBAAA,IACA8H,sBAAA9H,oBAAA,GACA+H,qBAAA/H,oBAAA,IACAgI,gBAAAhI,oBAAA,IACAiI,wBAAAjI,oBAAA,IACAkI,YAAAlI,oBAAA,GACAmI,mBAAAnI,oBAAA,IACAoI,2BAAApI,oBAAA,IACAqI,mBAAArI,oBAAA,IACAsI,wBAAAtI,oBAAA,IACAuI,gBAAAvI,oBAAA,IACAwI,uBAAAxI,oBAAA,GACAyI,wBAAAzI,oBAAA,IACA0I,gCAAA1I,oBAAA,IACA2I,oBAAA3I,oBAAA,IACA4I,gBAAA5I,oBAAA,GACA6I,iBAAA7I,oBAAA,IACA8I,yBAAA9I,oBAAA,IACA+I,qBAAA/I,oBAAA,IACAgJ,6BAAAhJ,oBAAA,IACAiJ,qBAAAjJ,oBAAA,IACAkJ,iBAAAlJ,oBAAA,IACAmJ,yBAAAnJ,oBAAA,IACAoJ,YAAApJ,oBAAA,IACAqJ,oBAAArJ,oBAAA,IACAsJ,YAAAtJ,oBAAA,IACAuJ,sBAAAvJ,oBAAA,IACAwJ,cAAAxJ,oBAAA,IACAyJ,oBAAAzJ,oBAAA,IACA0J,4BAAA1J,oBAAA,IACA2J,oBAAA3J,oBAAA,IACA4J,mBAAA5J,oBAAA,IACA6J,oBAAA7J,oBAAA,IACA8J,iCAAA9J,oBAAA,IACA+J,+BAAA/J,oBAAA,IACAgK,6BAAAhK,oBAAA,GACAiK,8BAAAjK,oBAAA,GACAkK,4BAAAlK,oBAAA,IACAmK,6BAAAnK,oBAAA,IACAoK,kBAAApK,oBAAA,IACAqK,gBAAArK,oBAAA,KACAsK,kBAAAtK,oBAAA,KACAuK,kBAAAvK,oBAAA,KACAwK,mBAAAxK,oBAAA,KACAyK,SAAAzK,oBAAA,KACA0K,YAAA1K,oBAAA,KACA2K,oBAAA3K,oBAAA,GACA4K,+BAAA5K,oBAAA,KACA6K,sBAAA7K,oBAAA,KACA8K,aAAA9K,oBAAA,KACA+K,2BAAA/K,oBAAA,KACAgL,MAAAhL,oBAAA,KACAiL,2BAAAjL,oBAAA,KACAkL,wBAAAlL,oBAAA,KACAmL,sCAAAnL,oBAAA,KACAoL,mBAAApL,oBAAA,KACAqL,qBAAArL,oBAAA,KACAsL,wBAAAtL,oBAAA,IACAuL,0BAAAvL,oBAAA,KACAwL,QAAAxL,oBAAA,KACAyL,wBAAAzL,oBAAA,KACA0L,2BAAA1L,oBAAA,KACA2L,cAAA3L,oBAAA,KACA4L,eAAA5L,oBAAA,KACA6L,iBAAA7L,oBAAA,KACA8L,mBAAA9L,oBAAA,KAEAwL,QAAQjM,OAAO,qBAAsB,CAAC,kBAAmB,oBAEpDwM,UAAU,kBAAmBxB,kBAAAyB,iBAE7BC,UAAU,aAAc,IAAInB,aAAAoB,YAC5BD,UAAU,SAAU,IAAIxB,SAAA0B,QACxBF,UAAU,wBAAyB,IAAIf,wBAAAkB,uBACvCH,UAAU,mBAAmB,IAAIb,mBAAAiB,kBACjCJ,UAAU,WAAY,IAAI9F,WAAAmG,UAC1BL,UAAU,WAAY,IAAI7F,WAAAmG,UAC1BN,UAAU,cAAe,IAAIN,cAAAa,aAC7BP,UAAU,iBAAkB,IAAIL,eAAAa,cAChCR,UAAU,4BAA6B,IAAI5F,4BAAAqG,2BAC3CT,UAAU,kBAAmB,IAAI3F,kBAAAqG,iBACjCV,UAAU,wBAAyB,IAAI1F,wBAAAqG,uBACvCX,UAAU,0BAA2B,IAAIrF,0BAAAiG,yBACzCZ,UAAU,gBAAiB,IAAIxF,gBAAAqG,eAC/Bb,UAAU,iBAAkB,IAAIvF,iBAAAqG,gBAChCd,UAAU,sBAAuB,IAAIzF,sBAAAwG,qBACrCf,UAAU,iBAAkB,IAAIJ,iBAAAoB,gBAChChB,UAAU,qBAAsB,IAAIZ,qBAAA6B,oBACpCjB,UAAU,mBAAoB,IAAItF,mBAAAwG,kBAClClB,UAAU,mBAAoB,IAAIrC,mBAAAwD,kBAClCnB,UAAU,kBAAmB,IAAI7B,kBAAAiD,iBACjCpB,UAAU,gBAAiB,IAAI5B,gBAAAiD,eAC/BrB,UAAU,oBAAqB,IAAIpC,oBAAA0D,mBACnCtB,UAAU,kBAAmB,IAAI3B,kBAAAkD,iBACjCvB,UAAU,MAAO,IAAIjB,MAAAyC,KAErBpO,QAAQ,cAAe+C,SAAAsL,eAAe7G,cAAA8G,cACtCtO,QAAQ,iBAAkB+C,SAAAsL,eAAe5G,iBAAA8G,iBACzCvO,QAAQ,qBAAsB+C,SAAAsL,eAAe3G,qBAAA8G,qBAC7CxO,QAAQ,iBAAkB+C,SAAAsL,eAAe1G,iBAAA8G,iBACzCzO,QAAQ,2BAA4B+C,SAAAsL,eAAe3C,2BAAAgD,2BACnD1O,QAAQ,6BAA8B+C,SAAAsL,eAAezG,6BAAA+G,6BACrD3O,QAAQ,yBAA0B+C,SAAAsL,eAAexG,yBAAA+G,yBACjD5O,QAAQ,yBAA0B+C,SAAAsL,eAAevG,yBAAA+G,yBACjD7O,QAAQ,uBAAwB+C,SAAAsL,eAAetG,uBAAA+G,uBAC/C9O,QAAQ,sCAAuC+C,SAAAsL,eAAevC,sCAAAiD,sCAC9D/O,QAAQ,iCAAkC+C,SAAAsL,eAAe5D,iCAAAuE,iCACzDhP,QAAQ,+BAAgC+C,SAAAsL,eAAe9C,+BAAA0D,+BAEvDjP,QAAQ,wBAAyB+C,SAAAsL,eAAepC,wBAAAtF,wBAChDuI,QAAQ,0BAA2BnM,SAAAsL,eAAenC,0BAAAiD,0BAElDC,IAAI,CAAC,wBAAyBjD,QAAQkD,OACtCD,IAAI,CAAC,eAAgB,SAACE,cACfA,aAAaC,KAAKtD,wBAAApF,OAAO2I,mCAGhCC,OAAO,CAAC,yBAA0B,SAAUC,wBAEzCA,uBAAuBC,iBAAiB3H,oBAAA4H,mBACxCF,uBAAuBC,iBAAiBtD,2BAAAwD,0BACxCH,uBAAuBC,iBAAiBxE,mBAAA2E,kBACxCJ,uBAAuBC,iBAAiB1H,qBAAA8H,oBACxCL,uBAAuBC,iBAAiBvD,wBAAA4D,uBACxCN,uBAAuBC,iBAAiBzH,qBAAA+H,oBACxCP,uBAAuBC,iBAAiBtE,YAAA6E,WACxCR,uBAAuBC,iBAAiBxH,4BAAAgI,2BACxCT,uBAAuBC,iBAAiBvH,aAAAgI,YACxCV,uBAAuBC,iBAAiBtH,qBAAAgI,oBACxCX,uBAAuBC,iBAAiBrH,eAAAgI,cACxCZ,uBAAuBC,iBAAiBpH,uBAAAgI,sBACxCb,uBAAuBC,iBAAiBnH,2BAAAgI,0BACxCd,uBAAuBC,iBAAiBlH,sBAAAzF,qBACxC0M,uBAAuBC,iBAAiBnE,sBAAAiF,qBACxCf,uBAAuBC,iBAAiB/D,2BAAA8E,0BAExChB,uBAAuBC,iBAAiBjH,qBAAAiI,oBACxCjB,uBAAuBC,iBAAiBhH,gBAAAiI,eACxClB,uBAAuBC,iBAAiBrE,oBAAA1H,mBACxC8L,uBAAuBC,iBAAiB/G,wBAAAiI,uBACxCnB,uBAAuBC,iBAAiB9G,YAAA5D,WAExCyK,uBAAuBC,iBAAiBjF,+BAAAoG,8BACxCpB,uBAAuBC,iBAAiB7G,mBAAAiI,kBACxCrB,uBAAuBC,iBAAiB5G,2BAAAiI,0BACxCtB,uBAAuBC,iBAAiB3G,mBAAAiI,kBACxCvB,uBAAuBC,iBAAiBhF,6BAAA3F,4BACxC0K,uBAAuBC,iBAAiB1G,wBAAAiI,uBACxCxB,uBAAuBC,iBAAiBzG,gBAAAiI,eACxCzB,uBAAuBC,iBAAiBxG,uBAAA/D,sBACxCsK,uBAAuBC,iBAAiBvG,wBAAAgI,uBACxC1B,uBAAuBC,iBAAiBtG,gCAAAgI,+BACxC3B,uBAAuBC,iBAAiBrG,oBAAAgI,mBACxC5B,uBAAuBC,iBAAiBpG,gBAAAnF,eACxCsL,uBAAuBC,iBAAiBnG,iBAAA+H,gBACxC7B,uBAAuBC,iBAAiBlG,yBAAA+H,wBACxC9B,uBAAuBC,iBAAiBjG,qBAAA+H,oBACxC/B,uBAAuBC,iBAAiBhG,6BAAA+H,4BACxChC,uBAAuBC,iBAAiB/E,8BAAAnG,6BACxCiL,uBAAuBC,iBAAiB9E,4BAAA8G,2BACxCjC,uBAAuBC,iBAAiB7E,6BAAA8G,4BACxClC,uBAAuBC,iBAAiB/F,qBAAAiI,oBACxCnC,uBAAuBC,iBAAiBlD,mBAAAqF,kBAExCpC,uBAAuBC,iBAAiB9F,iBAAAkI,gBACxCrC,uBAAuBC,iBAAiB7F,yBAAAkI,wBACxCtC,uBAAuBC,iBAAiB5F,YAAAkI,WACxCvC,uBAAuBC,iBAAiB3F,oBAAAkI,mBACxCxC,uBAAuBC,iBAAiB1F,YAAAkI,WACxCzC,uBAAuBC,iBAAiBzF,sBAAAkI,qBACxC1C,uBAAuBC,iBAAiBxF,cAAAkI,aACxC3C,uBAAuBC,iBAAiBvF,oBAAAkI,mBACxC5C,uBAAuBC,iBAAiBtF,4BAAAkI,2BACxC7C,uBAAuBC,iBAAiBrF,oBAAAkI,sBAG3CpD,IAAI,CAAC,kBAAmB,SAAUqD,iBAC/BA,gBAAgBC,cAEnBtD,IAAI,CAAC,kBAAmB,SAACuD,iBACtBA,gBAAgBC,wIC/MxB,IAAAC,mBAAAlS,oBAAA,IACAmS,wBAAAnS,oBAAA,IAGAsM,SAAA,WAGA,OAHA,SAAAA,WACQhK,KAAA8P,WAAiBF,mBAAAG,iBACjB/P,KAAAgQ,SAAkBH,wBAAAI,SAF1B,GAAajT,QAAAgN,oICAb,IAAA+F,iBAAA,WAII,SAAAA,iBAAoBG,wBAAAlQ,KAAAkQ,8CA0DxB,OAvDI5R,OAAAC,eAAIwR,iBAAArQ,UAAA,eAAY,KAShB,WACI,OAAOM,KAAKmQ,mBAVhB,SAAiBlS,GACJ,OAANA,EACC+B,KAAKkQ,uBAAuBE,sBAE5BpQ,KAAKkQ,uBAAuBG,mBAAmBpS,GAEnD+B,KAAKmQ,cAAgBlS,mCAOzBK,OAAAC,eAAIwR,iBAAArQ,UAAA,uBAAoB,KAIxB,WACI,OAAOM,KAAKkQ,uBAAuBI,+BALvC,SAAyBC,OACrBvQ,KAAKkQ,uBAAuBM,wBAAwBD,wCAOjDR,iBAAArQ,UAAA+Q,kBAAP,WACI,OAAOzQ,KAAKkQ,uBAAuBO,qBAGhCV,iBAAArQ,UAAAgR,oBAAP,SAA2BC,eACvB3Q,KAAKkQ,uBAAuBU,qBAAqBD,cAAcE,mBAG5Dd,iBAAArQ,UAAAoR,iBAAP,WACI,OAAO9Q,KAAKkQ,uBAAuBa,qBAGhChB,iBAAArQ,UAAAsR,uBAAP,WACIhR,KAAKkQ,uBAAuBc,0BAGzBjB,iBAAArQ,UAAAuR,8BAAP,WACI,OAAOjR,KAAKkQ,uBAAuBe,iCAGhClB,iBAAArQ,UAAAwR,iBAAP,WACI,OAAOlR,KAAKkQ,uBAAuBgB,oBAGhCnB,iBAAArQ,UAAAyR,4BAAP,WACI,OAAOnR,KAAKkQ,uBAAuBiB,+BAGhCpB,iBAAArQ,UAAA0R,qBAAP,WACI,OAAOpR,KAAKkQ,uBAAuBkB,wBAEhCrB,iBAAArQ,UAAA2R,kBAAP,WACI,OAAOrR,KAAKkQ,uBAAuBmB,qBA3DhCtB,iBAAApM,QAAmB,CAAC,0BA6D/BoM,iBA9DA,GAAa/S,QAAA+S,yGCJbrS,oBAAAgB,EAAA4S,qBAAeA,oBAAA,q7FCAf,IAAAC,mBAAA7T,oBAAA,IACA8T,wBAAA9T,oBAAA,IACAuM,SAAA,WAGA,OAHA,SAAAA,WACIjK,KAAA8P,WAAiByB,mBAAAE,iBACjBzR,KAAAgQ,SAAkBwB,wBAAAvB,SAFtB,GAAajT,QAAAiN,oICKb,IAAAwH,iBAAA,WAGI,SAAAA,iBAAoBC,uBACAxB,uBACAyB,yBAFpB,IAAAC,MAAA5R,KAAoBA,KAAA0R,8CACA1R,KAAAkQ,8CACAlQ,KAAA2R,gDAHpB3R,KAAA6R,uBAAyB,GAKrBxU,OAAOyU,iBAAiB,OAAQ,WAE5BF,MAAKG,mCAIT1U,OAAOyU,iBAAiB,SAAU,WAE9BF,MAAKG,mCAiMjB,OA7LWN,iBAAA/R,UAAA2R,kBAAP,WACI,OAAOrR,KAAKkQ,uBAAuBmB,qBAGhCI,iBAAA/R,UAAAsS,eAAP,WACI,OAAOhS,KAAKkQ,uBAAuB8B,kBAGhCP,iBAAA/R,UAAAuS,aAAP,WACIjS,KAAKkQ,uBAAuB+B,gBAGzBR,iBAAA/R,UAAAwS,iBAAP,SAAwBC,IACpB,OAAOnS,KAAK0R,uBAAuBQ,iBAAiBC,KAGjDV,iBAAA/R,UAAA0S,iBAAP,SAAwBD,GAAWE,QAC/BA,OAAOC,iBACPtS,KAAK0R,uBAAuBU,iBAAiBD,KAG1CV,iBAAA/R,UAAA6S,kBAAP,WACIvS,KAAK0R,uBAAuBa,qBAGzBd,iBAAA/R,UAAA8S,mBAAP,WACI,OAAOxS,KAAK0R,uBAAuBc,sBAGhCf,iBAAA/R,UAAA+S,iBAAP,WACI,OAAOzS,KAAK0R,uBAAuBe,oBAGhChB,iBAAA/R,UAAAgT,6BAAP,WACI,OAAO1S,KAAK0R,uBAAuBgB,gCAGhCjB,iBAAA/R,UAAAiT,cAAP,SAAqBR,IACjB,OAAOnS,KAAK0R,uBAAuBiB,cAAcR,KAG9CV,iBAAA/R,UAAAkT,qBAAP,WACIC,EAAEC,UAAUC,QAAQ,iBAGjBtB,iBAAA/R,UAAAsT,yBAAP,WACI,OAAOhT,KAAK0R,uBAAuBsB,4BAGhCvB,iBAAA/R,UAAAuT,wBAAP,WACI,OAAOjT,KAAK0R,uBAAuBuB,2BAGhCxB,iBAAA/R,UAAAwT,mBAAP,SAA0Bf,IACtB,OAAOnS,KAAK0R,uBAAuBwB,mBAAmBf,IAAM,kBAGzDV,iBAAA/R,UAAAyT,qBAAP,SAA4BhB,IACxB,OAAOnS,KAAK0R,uBAAuByB,qBAAqBhB,KAGrDV,iBAAA/R,UAAA0T,gBAAP,SAAuBjB,IACnB,OAAOnS,KAAK0R,uBAAuB0B,gBAAgBjB,KAGhDV,iBAAA/R,UAAA2T,kBAAP,SAAyBlB,IACrB,IAAM3F,OAASxM,KAAK0R,uBAAuB4B,iBAAiBnB,IAC5D,SAAU3F,QAAUA,OAAO+G,UAAY/G,OAAO+G,SAASC,UAAYhH,OAAO+G,SAASC,SAASC,iBAGzFhC,iBAAA/R,UAAAgU,kBAAP,SAAyBvB,IACrB,OAAOnS,KAAK0R,uBAAuBgC,kBAAkBvB,KAGlDV,iBAAA/R,UAAAiU,eAAP,SAAsBxB,IAClB,OAAOnS,KAAK0R,uBAAuBiC,eAAexB,KAG/CV,iBAAA/R,UAAAkU,4BAAP,SAAmCzB,IAC/B,IAAM0B,OAAS7T,KAAK0R,uBAAuBoC,UAAU3B,IACrD,IAAK0B,SAAWA,OAAOE,gBAEnB,OADAC,QAAQC,IAAI,wEAAyE9B,IAC9E,GAEX,IAAM+B,OAAqC,MAA5BL,OAAOM,kBAA4BN,OAAOM,kBAAoB,EACvEC,gBAAkBpU,KAAK0R,uBAAuB2C,YAAYH,QAAQ,GAAS,KAEjF,OADAF,QAAQC,IAAI,oCAAqC,CAAE9B,GAAEA,GAAEiC,gBAAeA,kBAC/DA,iBAGJ3C,iBAAA/R,UAAA4U,+BAAP,SAAsCnC,IAClC,OAAOnS,KAAK0R,uBAAuB4C,+BAA+BnC,KAG/DV,iBAAA/R,UAAA6U,mBAAP,SAA0BpC,IACtB,IAAMqC,WAAaxU,KAAK0R,uBAAuBiB,cAAcR,IAC7D,OAAKqC,WAGE,YAAcA,WAFV,aAAerC,IAKvBV,iBAAA/R,UAAA+U,+BAAP,SAAsCtC,IAClC,IAAM0B,OAAS7T,KAAK0R,uBAAuBoC,UAAU3B,IAC/C+B,OAASL,QAAuC,MAA7BA,OAAOa,mBAA6Bb,OAAOa,mBAAqB,EACzF,OAAO1U,KAAK0R,uBAAuB2C,YAAYH,QAAQ,GAAQ,MAG5DzC,iBAAA/R,UAAAiV,+BAAP,SAAsCxC,IAClC,IAAM3F,OAASxM,KAAK0R,uBAAuB4B,iBAAiBnB,IAC5D,GAAI3F,QAAUA,OAAOoI,OAASpI,OAAOoI,MAAMpB,UAAYhH,OAAOoI,MAAMpB,SAASqB,4BAA6B,CACtG,IAAMC,SAAWtI,OAAOoI,MAAMpB,SAASqB,4BAEvC,OADAb,QAAQC,IAAI,qCAAsC,CAAE9B,GAAEA,GAAE2C,SAAQA,WACzDA,SAGX,OADAd,QAAQC,IAAI,6CAA8C9B,IACnD,IAGJV,iBAAA/R,UAAAqV,oBAAP,SAA2B5C,IACvB,IAAM0B,OAAS7T,KAAK0R,uBAAuBoC,UAAU3B,IAC/C6C,WAAanB,QAAqC,MAA3BA,OAAOoB,iBAC9BjV,KAAK0R,uBAAuB2C,YAAYR,OAAOoB,kBAAkB,GAAS,KAC1E,GAEN,OADAjB,QAAQC,IAAI,+BAAgC,CAAE9B,GAAEA,GAAE6C,WAAUA,aACrDA,YAGJvD,iBAAA/R,UAAAwV,2BAAP,WACI,IAAMC,QAAUnV,KAAK0R,uBAAuBwD,6BAE5C,OADAlB,QAAQC,IAAI,8CAA+CkB,SACpDA,SAGJ1D,iBAAA/R,UAAA0V,qBAAP,WACI,OAAOpV,KAAK0R,uBAAuB2D,+BAG/B5D,iBAAA/R,UAAAqS,+BAAR,qBAAAH,MAAA5R,KACOA,KAAK0R,uBAAuB4D,oBAC3BtV,KAAK6R,uBAAyB,GAC9B7R,KAAK0R,uBAAuB6D,iBAAgB,IAKhD,IAHA,IAAMC,eAAiB1C,SAAS2C,iBAAiB,8EAC3CC,cAAgB,GAEb9X,EAAI,EAAGA,EAAI4X,eAAe1S,OAAQlF,IAAK,CAC5C,IAAI+X,MAAQH,eAAe5X,GAAGuU,GAC1ByD,OAASJ,eAAe5X,GAAGiY,wBAAwBC,IACnDC,UAAYP,eAAe5X,GAAGiY,wBAAwBG,OAEtDJ,OAASvY,OAAO4Y,aAAeF,WAAa,GAC5CL,cAAcQ,KAAKP,OAG3B,IAEMQ,mBAFgBnW,KAAKqR,oBACa+E,OAAO,SAAAC,IAAM,OAAAX,cAAcY,KAAK,SAAAC,WAAa,OAAAA,YAAcF,OACtDD,OAAO,SAAAC,IAAM,OAACzE,MAAKC,uBAAuByE,KAAK,SAAAE,gBAAkB,OAAAA,iBAAmBH,OAEjI,GAAIF,mBAAmBrT,QAAU,EAAG,CAKhC,IAFA,IAAM2T,IAAMN,mBAAmBO,MAAM,EAAG,GAClCC,uBAAyB,GACtBC,IAAI,EAAGA,IAAIH,IAAI3T,OAAQ8T,MAAK,CAGH,QADxBC,sBAAwB7W,KAAK0R,uBAAuB4B,iBAAiBmD,IAAIG,MAAIC,wBAE/EF,uBAAuBT,KAAKW,uBAGpC7W,KAAK2R,wBAAwBmF,wCAAwCH,uBAAwB3W,KAAK0R,uBAAuBqF,2BAA4B/W,KAAK6R,uBAAuB/O,SACjLkU,GAAAhX,KAAK6R,wBAAuBqE,KAAIe,MAAAD,GAAIb,mBAAmBO,MAAM,EAAG,SAC7D,GAAIP,mBAAmBrT,OAAS,EAAG,CAGhC2T,IAAMN,mBACNQ,uBAAyB,GAC/B,IAFA,IAESO,IAAI,EAAGA,IAAIT,IAAI3T,OAAQoU,MAAK,CAEjC,IAAML,sBACwB,QADxBA,sBAAwB7W,KAAK0R,uBAAuB4B,iBAAiBmD,IAAIS,MAAIL,wBAE/EF,uBAAuBT,KAAKW,uBAGpC7W,KAAK2R,wBAAwBmF,wCAAwCH,uBAAwB3W,KAAK0R,uBAAuBqF,2BAA4B/W,KAAK6R,uBAAuB/O,SACjLqU,GAAAnX,KAAK6R,wBAAuBqE,KAAIe,MAAAE,GAAIhB,sBA5MrC1E,iBAAA9N,QAAmB,CAAC,yBAA0B,yBAA0B,2BA+MnF8N,iBAhNA,GAAazU,QAAAyU,yGCPb/T,oBAAAgB,EAAA4S,qBAAeA,oBAAA,s6LCAf,IAAA8F,oCAAA1Z,oBAAA,IACA2Z,yCAAA3Z,oBAAA,IAEA0M,0BAAA,WAMA,OANA,SAAAA,4BACIpK,KAAAsX,SAAe,CACXnF,GAAI,gCAERnS,KAAA8P,WAAiBsH,oCAAAG,kCACjBvX,KAAAgQ,SAAkBqH,yCAAApH,SALtB,GAAajT,QAAAoN,sKCDb,IAAApJ,EAAAtD,oBAAA,GAGA6Z,kCAAA,WAKI,SAAAA,kCAAoB7F,uBAAwD8F,aAAxDxX,KAAA0R,8CAAwD1R,KAAAwX,wBA4ChF,OAzCIlZ,OAAAC,eAAIgZ,kCAAA7X,UAAA,gBAAa,KAIjB,WACI,OAAOsB,EAAEyW,KAAKzX,KAAK0X,yBAA0B,SAACnH,OAA8B,OAAOA,MAAMoH,gBAL7F,SAAkBpH,OACdvQ,KAAK0R,uBAAuBkG,kBAAkB5X,KAAKmS,GAAI5B,wCAOpDgH,kCAAA7X,UAAAmY,uBAAP,WACI,OAAO7X,KAAK0R,uBAAuBmG,0BAGhCN,kCAAA7X,UAAA0T,gBAAP,WACI,OAAOpT,KAAK0R,uBAAuB0B,gBAAgBpT,KAAKmS,KAGrDoF,kCAAA7X,UAAAoY,uBAAP,WACI,OAAO9X,KAAK0R,uBAAuBoG,uBAAuB9X,KAAKmS,KAG5DoF,kCAAA7X,UAAAqY,kBAAP,WACI,OAAO/X,KAAK0R,uBAAuBqG,kBAAkB/X,KAAKmS,KAGvDoF,kCAAA7X,UAAAgY,uBAAP,WACI,OAAO1X,KAAK0R,uBAAuBgG,uBAAuB1X,KAAKmS,KAG5DoF,kCAAA7X,UAAAsY,iBAAP,WACIhY,KAAK0R,uBAAuBsG,iBAAiBhY,KAAKmS,KAG/CoF,kCAAA7X,UAAAuY,eAAP,WACI,OAAOjY,KAAK0R,uBAAuBuG,eAAejY,KAAKmS,KAEpDoF,kCAAA7X,UAAAwY,cAAP,WACI,IAAIC,UAAYC,KAAKC,MAAMrY,KAAKwX,YAAYU,cAAclY,KAAKmS,KAG/D,OADe,sCADIiG,KAAKE,UAAUH,WACoC,cACtDI,YA9CbhB,kCAAA5T,QAAmB,CAAC,yBAA0B,eAgDzD4T,kCAjDA,GAAava,QAAAua,2ICLb7Z,oBAAAgB,EAAA4S,qBAAeA,oBAAA,giCCAf,IAAAkH,0BAAA9a,oBAAA,IACA+a,+BAAA/a,oBAAA,IAEA2M,gBAAA,WAMA,OANA,SAAAA,kBACIrK,KAAAsX,SAAe,CACXnF,GAAI,sBAERnS,KAAA8P,WAAiB0I,0BAAAE,wBACjB1Y,KAAAgQ,SAAkByI,+BAAAxI,SALtB,GAAajT,QAAAqN,kJCFb,IAAAqO,wBAAA,WAKI,SAAAA,wBAAoBhH,wBAAA1R,KAAA0R,8CAqCxB,OAlCWgH,wBAAAhZ,UAAAiU,eAAP,WACI,IAAIgF,KAAO7F,SAAS8F,cAAc,OAClCD,KAAKE,UAAY7Y,KAAK0R,uBAAuBiC,eAAe3T,KAAKmS,IACjE,IAAI2G,MAAQH,KAAKlD,iBAAiB,OAC9BqD,OACAA,MAAMC,QAAQ,SAACC,KACXA,IAAIC,aAAa,QAAS,gBAGlC,IAAIC,cAAgBpG,SAAS8F,cAAc,OAQ3C,OAPAM,cAAcL,UAAY7Y,KAAK0R,uBAAuByH,oBAAoBnZ,KAAKmS,IAGxD+G,cAAczD,iBAAiB,KACrCsD,QAAQ,SAAAK,QACrBA,OAAOH,aAAa,UAAW,gEAAgEG,OAAOC,KAAI,mBAEvG,4HAA8HH,cAAcL,UAAY,mCAAoCF,KAAKE,UAAW,gBAEhNH,wBAAAhZ,UAAA0T,gBAAP,WACI,OAAOpT,KAAK0R,uBAAuB0B,gBAAgBpT,KAAKmS,KAGrDuG,wBAAAhZ,UAAAyT,qBAAP,WACI,OAAOnT,KAAK0R,uBAAuByB,qBAAqBnT,KAAKmS,KAG1DuG,wBAAAhZ,UAAA4Z,iBAAP,WACItZ,KAAK0R,uBAAuB4H,iBAAiBtZ,KAAKmS,KAG/CuG,wBAAAhZ,UAAA6Z,wBAAP,WACI,OAAOvZ,KAAK0R,uBAAuB6H,wBAAwBvZ,KAAKmS,KAvC7DuG,wBAAA/U,QAAmB,CAAC,0BAyC/B+U,wBA1CA,GAAa1b,QAAA0b,uHCDbhb,oBAAAgB,EAAA4S,qBAAeA,oBAAA,uzBCAf,IAAAkI,gCAAA9b,oBAAA,IACA+b,qCAAA/b,oBAAA,IAEA4M,sBAAA,WAMA,OANA,SAAAA,wBACItK,KAAAsX,SAAe,CACXnF,GAAI,4BAERnS,KAAA8P,WAAiB0J,gCAAAE,8BACjB1Z,KAAAgQ,SAAkByJ,qCAAAxJ,SALtB,GAAajT,QAAAsN,8JCDb,IAAAoP,8BAAA,WAKI,SAAAA,8BAAoBhI,wBAAA1R,KAAA0R,8CAUxB,OAPWgI,8BAAAha,UAAAgU,kBAAP,WACI,OAAO1T,KAAK0R,uBAAuBgC,kBAAkB1T,KAAKmS,KAGvDuH,8BAAAha,UAAAia,iBAAP,SAAwBC,OACpB5Z,KAAK0R,uBAAuBiI,iBAAiB3Z,KAAKmS,GAAIyH,QAZnDF,8BAAA/V,QAAmB,CAAC,0BAc/B+V,8BAfA,GAAa1c,QAAA0c,mICFbhc,oBAAAgB,EAAA4S,qBAAeA,oBAAA,4pBCAf,IAAAuI,8BAAAnc,oBAAA,IACAoc,mCAAApc,oBAAA,IAEAgN,oBAAA,WASA,OATA,SAAAA,sBACI1K,KAAAsX,SAAe,CACXyC,KAAM,sBACNlG,OAAQ,wBACRmG,UAAU,2BACV7H,GAAI,qBAERnS,KAAA8P,WAAiB+J,8BAAAI,4BACjBja,KAAAgQ,SAAkB8J,mCAAA7J,SARtB,GAAajT,QAAA0N,0JCEb,IAAAuP,4BAAA,WASI,SAAAA,4BAAoBvI,uBAAwD8F,aAAxDxX,KAAA0R,8CAAwD1R,KAAAwX,wBAuGhF,OApGIlZ,OAAAC,eAAI0b,4BAAAva,UAAA,OAAI,KAKR,WACI,OAAOM,KAAKka,WANhB,SAASC,GACLla,aAAaC,UAAW,sDACxBF,KAAKka,MAAQC,mCAOVF,4BAAAva,UAAA0a,gBAAP,WACI,OAAOpa,KAAK0R,uBAAuB0I,gBAAgBpa,KAAKqa,aAGrDJ,4BAAAva,UAAA4a,gBAAP,WACI,OAAOta,KAAK0R,uBAAuB4I,gBAAgBta,KAAKqa,aAGpDJ,4BAAAva,UAAA2a,SAAR,WACI,OAAQra,KAAK+Z,MACT,IAAK,WACD,OAAO/Z,KAAK6T,OAAO0G,oBACvB,IAAK,SACD,OAAOva,KAAK6T,OAAO2G,kBACvB,IAAK,SACD,OAAOxa,KAAK6T,OAAOM,kBACvB,QACI,OAAO,IAIZ8F,4BAAAva,UAAAwV,2BAAP,WACI,IAAMC,QAAUnV,KAAK0R,uBAAuBwD,6BAE5C,OADAlB,QAAQC,IAAI,yDAA0DkB,SAC/DA,SAGJ8E,4BAAAva,UAAA+a,aAAP,WACI,OAAOza,KAAKga,WAGTC,4BAAAva,UAAAiV,+BAAP,WACI,OAAO3U,KAAK0a,cAAc7F,6BAGvBoF,4BAAAva,UAAA+U,+BAAP,WACI,OAAOzU,KAAK0R,uBAAuB2C,YAAYrU,KAAK6T,OAAOa,oBAAmB,IAG3EuF,4BAAAva,UAAAkU,4BAAP,WACI,IAAMQ,gBAAkBpU,KAAK0R,uBAAuB2C,YAAYrU,KAAKqa,YAAW,GAEhF,OADArG,QAAQC,IAAI,+CAAgDG,iBACrDA,iBAIJ6F,4BAAAva,UAAAib,4BAAP,WACI,OAAO3a,KAAK0a,cAAcE,0BAGtBX,4BAAAva,UAAAgb,YAAR,WACI,OAAO1a,KAAK6T,OAAOL,UAGhByG,4BAAAva,UAAA6U,mBAAP,WACI,OAAKvU,KAAKmS,GAGH,aAAenS,KAAKmS,GAAGvP,QAAQ,OAAQ,KAFnC,sBAIRqX,4BAAAva,UAAAmb,wBAAP,WAEI,OADYC,OAAO9a,KAAK6T,QAAU7T,KAAK6T,OAAOM,mBAAqB,GACtD4G,QAAQ,GAAK,MAEvBd,4BAAAva,UAAAsb,oBAAP,WACI,IAAIxH,SAAWxT,KAAK0a,cAChBO,IAAMzH,UAAYA,SAASqB,4BAC/B,IAAKoG,IACD,MAAO,GAEX,IAAIlY,MAAQkY,IAAIlY,MAAM,kBACtB,OAAOA,MAAQA,MAAM,GAAK,UAAYkY,KAEnChB,4BAAAva,UAAAwb,cAAP,WACI,IACMlG,WADM8F,OAAO9a,KAAK6T,QAAU7T,KAAK6T,OAAOoB,kBAAoB,GACzC8F,QAAQ,GAAK,KAEtC,OADA/G,QAAQC,IAAI,0CAA2Ce,YAChDA,YAGJiF,4BAAAva,UAAAqV,oBAAP,WACI,IAAME,iBAAmBjV,KAAKkb,gBAE9B,OADAlH,QAAQC,IAAI,iDAAkDgB,kBACvDA,kBAGJgF,4BAAAva,UAAA2T,kBAAP,WACI,IAAM8H,KAAOnb,KAAKwX,YAAY4D,oBAAoBpb,KAAKmS,IACvD,SAAOgJ,MAA+B,MAAvBA,KAAK1H,iBAAyB0H,KAAK1H,gBA5G/CwG,4BAAAtW,QAAmB,CAAC,yBAAyB,eA+GxDsW,4BAhHA,GAAajd,QAAAid,+HCLbvc,oBAAAgB,EAAA4S,qBAAeA,oBAAA,2/CCAf,IAAA+J,wBAAA3d,oBAAA,IACA4d,6BAAA5d,oBAAA,IAEA8M,cAAA,WAMA,OANA,SAAAA,gBACIxK,KAAAsX,SAAe,CACXnF,GAAI,oBAERnS,KAAA8P,WAAiBuL,wBAAAE,sBACjBvb,KAAAgQ,SAAkBsL,6BAAArL,SALtB,GAAajT,QAAAwN,8ICAb,IAAA+Q,sBAAA,WAMI,SAAAA,sBAAoB7J,wBAAA1R,KAAA0R,8CAsBxB,OAnBW6J,sBAAA7b,UAAAoU,UAAP,WACI,OAAO9T,KAAK0R,uBAAuBoC,UAAU9T,KAAKmS,KAG/CoJ,sBAAA7b,UAAA+a,aAAP,WACI,OAAOza,KAAK0R,uBAAuB+I,aAAaza,KAAKmS,KAGlDoJ,sBAAA7b,UAAA8b,mBAAP,WACI,OAAOxb,KAAK0R,uBAAuB8J,sBAGhCD,sBAAA7b,UAAA+b,kBAAP,WACI,OAAOzb,KAAK0R,uBAAuB+J,qBAGhCF,sBAAA7b,UAAAmY,uBAAP,WACI,OAAO7X,KAAK0R,uBAAuBmG,0BAxBhC0D,sBAAA5X,QAAmB,CAAC,0BA0B/B4X,sBA5BA,GAAave,QAAAue,mHCHb7d,oBAAAgB,EAAA4S,qBAAeA,oBAAA,gqDCAf,IAAAoK,yBAAAhe,oBAAA,IACAie,8BAAAje,oBAAA,IAEA+M,eAAA,WAOA,OAPA,SAAAA,iBACIzK,KAAAsX,SAAe,CACXyC,KAAM,sBACNlG,OAAQ,yBAEZ7T,KAAA8P,WAAiB4L,yBAAAE,uBACjB5b,KAAAgQ,SAAkB2L,8BAAA1L,SANtB,GAAajT,QAAAyN,gJCCb,IAAAmR,uBAAA,WAOI,SAAAA,uBAAoBlK,wBAAA1R,KAAA0R,8CAsExB,OAnEIpT,OAAAC,eAAIqd,uBAAAlc,UAAA,OAAI,KAKR,WACI,OAAOM,KAAKka,WANhB,SAASC,GACLla,aAAaC,UAAW,sDACxBF,KAAKka,MAAQC,mCAOVyB,uBAAAlc,UAAAmc,kBAAP,WACI,OAAQ7b,KAAK+Z,MACT,IAAK,WACD,OAAO/Z,KAAK0a,cAAcoB,4BAC9B,IAAK,SACD,OAAO9b,KAAK0a,cAAcqB,0BAC9B,IAAK,SACD,OAAO/b,KAAK0a,cAAcsB,0BAC9B,QACI,MAAO,KAIZJ,uBAAAlc,UAAAuc,mBAAP,WACI,OAAQjc,KAAK+Z,MACT,IAAK,WACD,OAAO/Z,KAAK0a,cAAcwB,6BAC9B,IAAK,SACD,OAAOlc,KAAK0a,cAAcyB,2BAC9B,IAAK,SACD,OAAOnc,KAAK0a,cAAc0B,2BAC9B,QACI,MAAO,KAIZR,uBAAAlc,UAAA0a,gBAAP,WACI,OAAOpa,KAAK0R,uBAAuB0I,gBAAgBpa,KAAKqa,aAGrDuB,uBAAAlc,UAAA4a,gBAAP,WACI,OAAOta,KAAK0R,uBAAuB4I,gBAAgBta,KAAKqa,aAGpDuB,uBAAAlc,UAAA2a,SAAR,WACI,OAAQra,KAAK+Z,MACT,IAAK,WACD,OAAO/Z,KAAK6T,OAAO0G,oBACvB,IAAK,SACD,OAAOva,KAAK6T,OAAO2G,kBACvB,IAAK,SACD,OAAOxa,KAAK6T,OAAOM,kBACvB,QACI,OAAO,IAIZyH,uBAAAlc,UAAAwV,2BAAP,WACI,OAAOlV,KAAK0R,uBAAuBwD,8BAG/B0G,uBAAAlc,UAAAwb,cAAR,WACI,OAAOlb,KAAK6T,OAAOoB,kBAGf2G,uBAAAlc,UAAAgb,YAAR,WACI,OAAO1a,KAAK6T,OAAOL,UA1EhBoI,uBAAAjY,QAAmB,CAAC,0BA4E/BiY,uBA7EA,GAAa5e,QAAA4e,qHCJble,oBAAAgB,EAAA4S,qBAAeA,oBAAA,kkBCAf,IAAA+K,2BAAA3e,oBAAA,IACA4e,gCAAA5e,oBAAA,IAEAmN,iBAAA,WAMA,OANA,SAAAA,mBACI7K,KAAAsX,SAAe,CACXnF,GAAI,uBAERnS,KAAA8P,WAAiBuM,2BAAAE,yBACjBvc,KAAAgQ,SAAkBsM,gCAAArM,SALtB,GAAajT,QAAA6N,oJCFb,IAAAvE,gBAAA5I,oBAAA,GAEA6e,yBAAA,WAMI,SAAAA,yBAAoB7K,wBAAA1R,KAAA0R,8CA2BxB,OAxBW6K,yBAAA7c,UAAA8c,iBAAP,WACI,OAAOxc,KAAKyc,eAAejJ,SAASkJ,MAGjCH,yBAAA7c,UAAAid,wBAAP,WAGI,OAF+B3c,KAAKyc,eAElBG,UACd,KAAKtW,gBAAAnF,cAAcI,aACf,MAAO,gBACX,KAAK+E,gBAAAnF,cAAcE,8BACf,MAAO,QACX,KAAKiF,gBAAAnF,cAAcC,SACnB,KAAKkF,gBAAAnF,cAAcG,cACf,MAAO,YACX,QACI,MAAO,KAIXib,yBAAA7c,UAAA+c,aAAR,WACI,OAAOzc,KAAK0R,uBAAuB+K,aAAazc,KAAKmS,KA5BlDoK,yBAAA5Y,QAAmB,CAAC,0BA+B/B4Y,yBAjCA,GAAavf,QAAAuf,yHCHb7e,oBAAAgB,EAAA4S,qBAAeA,oBAAA,6QCAf,IAAAuL,kCAAAnf,oBAAA,IACAof,uCAAApf,oBAAA,IAEA6M,wBAAA,WAMA,OANA,SAAAA,0BACIvK,KAAAsX,SAAe,CACXnF,GAAI,8BAERnS,KAAA8P,WAAiB+M,kCAAAE,gCACjB/c,KAAAgQ,SAAkB8M,uCAAA7M,SALtB,GAAajT,QAAAuN,kKCDb,IAAAwS,gCAAA,WAKI,SAAAA,gCAAoBrL,wBAAA1R,KAAA0R,8CAUxB,OAPWqL,gCAAArd,UAAAsd,oBAAP,WACI,OAAOhd,KAAK0R,uBAAuBsL,oBAAoBhd,KAAKmS,KAGzD4K,gCAAArd,UAAAud,mBAAP,SAA0BC,SACtBld,KAAK0R,uBAAuBuL,mBAAmBjd,KAAKmS,GAAI+K,UAZrDH,gCAAApZ,QAAmB,CAAC,0BAc/BoZ,gCAfA,GAAa/f,QAAA+f,uICFbrf,oBAAAgB,EAAA4S,qBAAeA,oBAAA,8cCiBf,IAAA3J,8BAAAjK,oBAAA,GAEAgK,6BAAAhK,oBAAA,GAGA2K,oBAAA3K,oBAAA,GAGAsD,EAAAtD,oBAAA,GAEA2N,YAAA,WAWI,SAAAA,YAAoB8R,kBACAC,YACRC,eAFQrd,KAAAmd,oCACAnd,KAAAod,wBAJZpd,KAAAsd,8BAAiE,GAMrEtd,KAAKud,OAASF,cAAcne,OAAO,eAsS3C,OAnSWmM,YAAA3L,UAAA8d,QAAP,eAAA5L,MAAA5R,KAGQyd,aAAe,GACdC,OAAO1d,KAAK2d,eAAeC,sBAC3BF,OAAO1d,KAAK2d,eAAeE,qBAC3BH,OAAO1d,KAAK2d,eAAeG,0BAEhC9d,KAAKsd,8BAAgCG,aAAaM,OAAO,SAACC,IAAKC,aAE3D,OADAD,IAAIC,YAAY9L,IAAMP,MAAK+L,eAAeO,eAAeD,YAAYE,wBAC9DH,KACR,KAGC3S,YAAA3L,UAAAqR,kBAAR,WACI,OAAO/Q,KAAK2d,eAAeS,gBAGxB/S,YAAA3L,UAAA2e,6BAAP,WACI,IAAIC,eAAiBte,KAAK+Q,oBACrBqF,OAAO,SAACmI,eAAqC,OAAAA,cAAcC,oBAAsBnW,oBAAA1H,kBAAkBM,eAAc,GACjHwd,UAEL,OAAOzd,EAAE+c,OAAOO,eACR,SAACN,IAAwCU,UAErC,OADAV,IAAIU,SAASC,MAAMC,qBAAuBF,SACnCV,KACmB,KAGnC3S,YAAA3L,UAAAmf,oBAAP,WACI,OAAO7e,KAAK+Q,oBACPqF,OAAO,SAACmI,eAAqC,OAAAA,cAAcC,oBAAsBnW,oBAAA1H,kBAAkBM,gBAGrGoK,YAAA3L,UAAAof,eAAP,SAAsB3M,IAElB,OAD+BnS,KAAKod,YAAY2B,WAAW/e,KAAKsT,iBAAiBnB,IAAI6M,MAAMC,aAIxF5T,YAAA3L,UAAA0R,qBAAP,WACIpR,KAAKod,YAAY2B,WAAW/e,KAAK2d,eAAeqB,MAAME,UAGnD7T,YAAA3L,UAAA4T,iBAAP,SAAwB6L,eACpB,OAAOnf,KAAKsd,8BAA8B6B,gBAGvC9T,YAAA3L,UAAA0f,iBAAP,SAAwBD,cAAsBE,eAC1Crf,KAAKsd,8BAA8B6B,eAAiBE,eAGjDhU,YAAA3L,UAAA4f,YAAP,SAAmBnN,IACf,OAAOnS,KAAKsT,iBAAiBnB,IAAIoB,UAM9BlI,YAAA3L,UAAA6f,4CAAP,SAAmDpN,IA8B/C,OAAOnR,EAAEhB,KAAKsf,YAAYnN,IAAIqN,uBAAuBC,QAChDzB,IAxB2B,SAAU0B,uBAMtC,OAJAA,sBAAsBC,iBAClB3e,EAAE0e,sBAAsBC,kBAAkBvJ,OAAO,SAACwJ,uBAC9C,QAASA,iCAAiClY,6BAAA3F,8BAE3C2d,wBAmBN1B,IAhBiC,SAAU0B,uBAW5C,OATAA,sBAAsBC,iBAClB3e,EAAE0e,sBAAsBC,kBAAkBvJ,OAAO,SAACwJ,uBAC9C,QACKA,iCAAiCjY,8BAAAnG,8BACoC,KAApCoe,sBAAuB/d,UACY,MAAnC+d,sBAAuB/d,aAI9D6d,wBAMNtJ,OA/BiC,SAAUyJ,cAE5C,OAAQA,aAAaF,iBAAiB7c,OAAS,IA8B9CjE,SAGFwM,YAAA3L,UAAA0T,gBAAP,SAAuBjB,IACnB,OAAOnS,KAAKob,oBAAoBjJ,IAAIhU,MAGjCkN,YAAA3L,UAAAogB,yBAAP,SAAgC3N,IAC5B,IAAIqB,SAAWxT,KAAKob,oBAAoBjJ,IACxC,MAAO,CAACqB,SAASuM,YAAavM,SAASwM,YAAaxM,SAASyM,cAAezM,SAAS0M,eAGlF7U,YAAA3L,UAAAygB,gBAAP,SAAuBhO,IACnB,OAAOnS,KAAKsf,YAAYnN,IAAIiO,cAGzB/U,YAAA3L,UAAA2gB,+BAAP,SAAsClO,IAMlC,OALiDnR,EAAEyW,KAAKzX,KAAKmgB,gBAAgBhO,IAAImO,MAAO,SAACC,MACrF,OAAOA,KAAKC,mBAIYzG,MAGzB1O,YAAA3L,UAAA6Z,wBAAP,SAA+BpH,IAC3B,OAAOnR,EAAEoV,OAAOpW,KAAKmgB,gBAAgBhO,IAAImO,MAAO,SAACC,MACzC,OAAOA,KAAKC,mBACb1d,OAAS,GAGbuI,YAAA3L,UAAAoU,UAAP,SAAiB3B,IACb,OAAOnS,KAAKsT,iBAAiBnB,IAAIyC,OAG9BvJ,YAAA3L,UAAA+gB,gBAAP,SAAuBtO,IACnB,OAAOnS,KAAKsT,iBAAiBnB,IAAIuO,eAG9BrV,YAAA3L,UAAA+a,aAAP,SAAoBtI,IAChB,IAAIwO,OAAS3gB,KAAKsT,iBAAiBnB,IAAIwO,OACvC,OAAKA,OAGEA,OAAOnN,SAASwG,UAFZ,MAKR3O,YAAA3L,UAAA+c,aAAP,SAAoBtK,IAChB,OAAOnS,KAAKsf,YAAYnN,IAAIyO,WAGzBvV,YAAA3L,UAAAmhB,UAAP,SAAiB1O,IACb,OAAOnS,KAAKsT,iBAAiBnB,IAAIwO,QAG9BtV,YAAA3L,UAAA0b,oBAAP,SAA2BjJ,IACvB,OAAOnS,KAAKsf,YAAYnN,IAAIqB,UAGzBnI,YAAA3L,UAAAgU,kBAAP,SAAyBvB,IACrB,OAAOnS,KAAKsf,YAAYnN,IAAI2O,cAGzBzV,YAAA3L,UAAAsd,oBAAP,SAA2B7K,IACvB,OAAOnS,KAAKsf,YAAYnN,IAAI4O,gBAGzB1V,YAAA3L,UAAAshB,kBAAP,SAAyB7O,IACrB,IAAMwO,OAAqB3gB,KAAK6gB,UAAU1O,IAC1C,OAAc,OAAXwO,OACQA,OAAOnN,SAEX,MAGJnI,YAAA3L,UAAAuhB,cAAP,SAAqB9O,IACjB,OAAOnS,KAAKghB,kBAAkB7O,IAAIhU,MAG/BkN,YAAA3L,UAAAwhB,uBAAP,SAA8B/O,IAC1B,IAAIqB,SAAWxT,KAAKghB,kBAAkB7O,IACtC,MAAO,CAACqB,SAASuM,YAAavM,SAASwM,YAAaxM,SAASyM,cAAezM,SAAS0M,eAGlF7U,YAAA3L,UAAAyhB,oBAAP,SAA2BhP,IACvB,OAAOnS,KAAKghB,kBAAkB7O,IAAIiP,YAG/B/V,YAAA3L,UAAA2hB,uBAAP,SAA8BlP,IAC1B,OAAOnS,KAAKghB,kBAAkB7O,IAAImP,eAG/BjW,YAAA3L,UAAAqY,kBAAP,SAAyB5F,IACrB,IAAIqB,SAA+BxT,KAAKghB,kBAAkB7O,IAC1D,MAAO,CAACqB,SAAS+N,WAAY/N,SAASgO,UAAWhO,SAASiO,UAAWjO,SAASkO,QAASlO,SAASmO,UAG7FtW,YAAA3L,UAAAkiB,oBAAP,SAA2BzP,IAEvB,OADmCnS,KAAKghB,kBAAkB7O,IAC1CoP,YAGblW,YAAA3L,UAAAmiB,mBAAP,WACI,OAAO7hB,KAAK2d,eAAemE,iBAGxBzW,YAAA3L,UAAAqiB,oBAAP,WACI,OAAO/hB,KAAK2d,eAAeqE,kBAGxB3W,YAAA3L,UAAAuiB,uBAAP,WACI,OAAOjiB,KAAK2d,eAAeuE,qBAGvB7W,YAAA3L,UAAAie,aAAR,WACI,OAAO3d,KAAKmd,kBAAkBQ,gBAI3BtS,YAAA3L,UAAAyiB,cAAP,SAAqBhQ,IACjB,IAAMwO,OAAuB3gB,KAAK6gB,UAAU1O,IAC5C,OAAc,OAAXwO,OACQA,OAAOyB,WAEX,IAGJ/W,YAAA3L,UAAA0a,gBAAP,SAAuBxF,OACnB,OAAO5R,KAAKC,MAAM2R,OAAO2D,YAItBlN,YAAA3L,UAAA4a,gBAAP,SAAuB1F,OACnB,OAAkB,IAAVA,MAAe,KAAO5R,KAAKqf,MAAc,IAARzN,OAAa2D,WAAW+J,QAAQ,IAGtEjX,YAAA3L,UAAAuY,eAAP,SAAsB9F,IAClB,OAAOnS,KAAKob,oBAAoBjJ,IAAIoQ,aAGjClX,YAAA3L,UAAA+S,iBAAP,SAAwBN,IACpB,OAAOnS,KAAKob,oBAAoBjJ,IAAIqQ,eAGjCnX,YAAA3L,UAAAiT,cAAP,SAAqBR,IACjB,OAAOnS,KAAKob,oBAAoBjJ,IAAIqC,YAGjCnJ,YAAA3L,UAAA+iB,4BAAP,WACI,OAAOziB,KAAK2d,eAAe+E,0BAGxBrX,YAAA3L,UAAAijB,kBAAP,WAEI3iB,KAAKod,YAAY2B,WAAW/e,KAAK2d,eAAe+E,yBAAyB3kB,OAGtEsN,YAAA3L,UAAAsT,yBAAP,WACI,OAAOhT,KAAK2d,eAAeiF,uBAGxBvX,YAAA3L,UAAAuT,wBAAP,WACI,OAAOjT,KAAK2d,eAAekF,sBAAwB,IAGhDxX,YAAA3L,UAAAojB,sBAAP,WACI,OAAI,MAAQ9iB,KAAK2d,eAAeoF,yBACrB/iB,KAAK2d,eAAeoF,yBAAyBC,mBAEjD,MAGJ3X,YAAA3L,UAAAujB,4BAAP,WACI,OAAI,MAAQjjB,KAAK2d,eAAeoF,yBACrB/iB,KAAK2d,eAAeoF,yBAAyBG,yBAEjD,MAGJ7X,YAAA3L,UAAAwY,cAAP,SAAqB/F,IACjB,OAAOnS,KAAKsT,iBAAiBnB,IAAIgR,oBAG9B9X,YAAA3L,UAAAiU,eAAP,SAAsBxB,IAClB,OAAOnS,KAAKsT,iBAAiBnB,IAAIoB,SAASC,SAAS4P,iBAAiBC,uBAGjEhY,YAAA3L,UAAAyZ,oBAAP,SAA2BhH,IACvB,OAAOnS,KAAKsT,iBAAiBnB,IAAIoB,SAASC,SAAS4P,iBAAiBE,kBAGjEjY,YAAA3L,UAAA6jB,kBAAP,SAAyBpR,IACrB,OAAOnS,KAAKghB,kBAAkB7O,IAAI9O,gBAE/BgI,YAAA3L,UAAA2V,4BAAP,WACI,OAAOrV,KAAK2d,eAAe6F,2BA/SxBnY,YAAA1H,QAAmB,CACtB,oBACA,cACA,iBA+SR0H,YApTA,GAAarO,QAAAqO,0ICxBb,IAAAC,eAAA,WAGI,SAAAA,iBACItL,KAAKyjB,QAAU,IAAIC,QA2G3B,OAxGWpY,eAAA5L,UAAAikB,mBAAP,WACI,OAAO3jB,KAAK4jB,aAAaC,kBAGtBvY,eAAA5L,UAAA4Z,iBAAP,SAAwBnH,IACpBnS,KAAK4jB,aAAaE,qBAAuB3R,GACzCnS,KAAK4jB,aAAaC,kBAAmB,GAGlCvY,eAAA5L,UAAAqkB,kBAAP,WACI/jB,KAAK4jB,aAAaC,kBAAmB,EACrC7jB,KAAK4jB,aAAaE,qBAAuB,IAGtCxY,eAAA5L,UAAAskB,8BAAP,WACI,YAAsFC,IAAnFjkB,KAAK4jB,aAAaM,+BAA+BlkB,KAAKmkB,2BAC9C,KAGAnkB,KAAK4jB,aAAaM,+BAA+BlkB,KAAKmkB,4BAI9D7Y,eAAA5L,UAAA0kB,8BAAP,SAAqCrK,MAEjC/Z,KAAK4jB,aAAaM,+BAA+BlkB,KAAKmkB,2BAA6BpK,MAGhFzO,eAAA5L,UAAAykB,wBAAP,WACI,OAAOnkB,KAAKyjB,QAAQK,sBAGjBxY,eAAA5L,UAAAwS,iBAAP,SAAwBC,IACpB,OAAOnS,KAAKqkB,aAAalS,IAAImS,gBAG1BhZ,eAAA5L,UAAA0S,iBAAP,SAAwBD,IACpBnS,KAAKqkB,aAAalS,IAAImS,gBAAkBtkB,KAAKqkB,aAAalS,IAAImS,gBAG3DhZ,eAAA5L,UAAA6kB,2BAAP,SAAkCpS,GAAWqS,SAEzC,OADAvkB,aAAaC,UAAW,kBACjBF,KAAKqkB,aAAalS,IAAIsS,6BAA+BD,SAGzDlZ,eAAA5L,UAAAglB,6BAAP,SAAoCvS,GAAWqS,SAE3C,OADAvkB,aAAaC,UAAW,kBACjBF,KAAKqkB,aAAalS,IAAIwS,+BAAiCH,SAG3DlZ,eAAA5L,UAAAklB,2BAAP,SAAkCzS,GAAWqS,SACzCvkB,aAAaC,UAAW,kBACxBF,KAAKqkB,aAAalS,IAAIsS,2BAA6BzkB,KAAKqkB,aAAalS,IAAIsS,6BAA+BD,QAAU,GAAKA,SAGpHlZ,eAAA5L,UAAAmlB,6BAAP,SAAoC1S,GAAWqS,SAC3CvkB,aAAaC,UAAW,kBACxBF,KAAKqkB,aAAalS,IAAIwS,6BAA+B3kB,KAAKqkB,aAAalS,IAAIwS,+BAAiCH,QAAU,GAAKA,SAGxHlZ,eAAA5L,UAAAolB,wBAAP,WACI,OAAO9kB,KAAK4jB,aAAamB,qBAGtBzZ,eAAA5L,UAAAsY,iBAAP,SAAwB7F,IACpBnS,KAAK4jB,aAAamB,oBAAsB5S,GACxCnS,KAAK4jB,aAAaoB,kBAAmB,GAGlC1Z,eAAA5L,UAAA6S,kBAAP,WACIvS,KAAK4jB,aAAaoB,kBAAmB,EACrChlB,KAAK4jB,aAAamB,oBAAsB,IAGrCzZ,eAAA5L,UAAA8S,mBAAP,WACI,OAAOxS,KAAK4jB,aAAaoB,kBAGrB1Z,eAAA5L,UAAAkkB,WAAR,WACI,OAAO5jB,KAAKyjB,SAGRnY,eAAA5L,UAAA2kB,aAAR,SAAqBlS,IAIjB,OAHKnS,KAAK4jB,aAAaqB,WAAW9S,MAC9BnS,KAAK4jB,aAAaqB,WAAW9S,IAAM,IAAI+S,WAEpCllB,KAAK4jB,aAAaqB,WAAW9S,KAGjC7G,eAAA5L,UAAAylB,oBAAP,WACI,OAAOnlB,KAAK4jB,aAAawB,kBAGtB9Z,eAAA5L,UAAA2lB,oBAAP,SAA2BD,kBACvBplB,KAAK4jB,aAAawB,iBAAmBA,kBAGlC9Z,eAAA5L,UAAA6V,gBAAP,SAAuB+P,eACnBtlB,KAAK4jB,aAAa2B,cAAgBD,eAG/Bha,eAAA5L,UAAA4V,gBAAP,WACI,OAAOtV,KAAK4jB,aAAa2B,eAEjCja,eA/GA,GAAatO,QAAAsO,8BAiHb,IAAAoY,QAAA,WAUA,OAVA,SAAAA,UACI1jB,KAAA6jB,kBAA2B,EAC3B7jB,KAAA8jB,qBAA8B,GAC9B9jB,KAAAglB,kBAA2B,EAC3BhlB,KAAA+kB,oBAA6B,GAC7B/kB,KAAAilB,WAAyB,GAEzBjlB,KAAAkkB,+BAAoC,GACpClkB,KAAAolB,kBAA2B,EAC3BplB,KAAAulB,eAAyB,GAT7B,GAYAL,UAAA,WAWA,OANI,SAAAA,YACIllB,KAAKskB,gBAAiB,EAEtBtkB,KAAKykB,2BAA6B,kBAClCzkB,KAAK2kB,6BAA+B,qBAT5C,qHC7HA,IAAA/e,YAAAlI,oBAAA,GAEA8H,sBAAA9H,oBAAA,GAKA2K,oBAAA3K,oBAAA,GACA8nB,sBAAA9nB,oBAAA,IAEAsD,EAAAtD,oBAAA,GACA6N,mBAAA,WAyBI,SAAAA,mBAAoB4R,kBACAE,eADArd,KAAAmd,oCACAnd,KAAAqd,4BAjBZrd,KAAA6d,oBAAyC,GACzC7d,KAAA4d,qBAA0C,GAC1C5d,KAAA8d,yBAA8C,GAC9C9d,KAAAylB,oBAAyC,GACzCzlB,KAAA0lB,eAAgC,GAGhC1lB,KAAAse,eAAsC,GAMtCte,KAAA2lB,mBAA4B,EAC5B3lB,KAAA4lB,qBAA8B,GAIlC5lB,KAAKud,OAASF,cAAcne,OAAO,eAuM3C,OApMWqM,mBAAA7L,UAAA8d,QAAP,WACI,IAAIqI,UAAY7lB,KAAK2d,eACrB3d,KAAK6d,oBAAsBgI,UAAUhI,oBACrC7d,KAAK4d,qBAAuBiI,UAAUjI,qBACtC5d,KAAK8d,yBAA2B+H,UAAU/H,yBAC1C9d,KAAK8lB,oBAAsBD,UAAUE,gBACrC/lB,KAAKse,eAAiBuH,UAAUzH,eAChCpe,KAAK0lB,eAAiB1kB,EAAE6kB,UAAUG,eAC7BvG,QACAzB,IAAI,SAACiI,cACF,MAAO,CACH,IAAIT,sBAAAU,aAAaD,aAAazS,SAASmL,MAAOsH,aAAazS,SAASrV,MAAM,GAC1E,IAAIqnB,sBAAAU,aAAaD,aAAazS,SAASmL,MAAOsH,aAAazS,SAASrV,MAAM,MAGjFgoB,UACAtnB,QAELmB,KAAKomB,qBAAuBpmB,KAAK0lB,eAAe,GAEhD1lB,KAAKqmB,kBACLrmB,KAAKsmB,wBAGD/a,mBAAA7L,UAAAie,aAAR,WACI,OAAO3d,KAAKmd,kBAAkBQ,gBAI3BpS,mBAAA7L,UAAA2Q,mBAAP,SAA0BQ,kBACtB7Q,KAAK4lB,qBAAuB/U,iBAC5B7P,EAAEhB,KAAK+Q,qBACF0O,QACArJ,OAAO,SAACmQ,OAA6B,OAAAle,oBAAA1H,kBAAkBM,eAAiBslB,MAAM/H,oBAC9ER,IAAI,SAACuI,OAA6B,OAAAA,MAAM9H,YACxC0H,UACAK,KAAK,SAAC9H,UAA2B,OAAAA,SAAS/G,UAAW,IACrDvB,OAAO,SAACsI,UAA2B,OAAAA,SAAS7N,kBAAoBA,mBAChE2V,KAAK,SAAC9H,UAA2B,OAAAA,SAAS/G,UAAW,IAC1D3X,KAAKsmB,wBAGF/a,mBAAA7L,UAAA0Q,oBAAP,WACIpP,EAAEhB,KAAK+Q,qBACF0O,QACArJ,OAAO,SAACmQ,OAA6B,OAAAle,oBAAA1H,kBAAkBM,eAAiBslB,MAAM/H,oBAC9ER,IAAI,SAACuI,OAA6B,OAAAA,MAAM9H,YACxC0H,UACAK,KAAK,SAAC9H,UAA2B,OAAAA,SAAS/G,UAAW,IAC1D3X,KAAKsmB,wBAGF/a,mBAAA7L,UAAAgR,oBAAP,SAA2BG,kBACvB7P,EAAEhB,KAAK+Q,qBACF0O,QACAzB,IAAI,SAACuI,OAA6B,OAAAA,MAAM9H,YACxC0H,UACA/P,OAAO,SAACsI,UAA2B,OAAAA,SAAS7N,kBAAoBA,mBAChE2V,KAAK,SAAC9H,UAA2B,OAAAA,SAAS/G,UAAY+G,SAAS/G,WAEpE3X,KAAKsmB,wBAGF/a,mBAAA7L,UAAAsR,uBAAP,WACIhQ,EAAEwlB,KAAKxmB,KAAKse,eAAgB,SAAC3N,eAC1BA,cAAc8V,wBAEjBzmB,KAAK0mB,mBAAmB1mB,KAAK2d,eAAeoI,kBAGzCxa,mBAAA7L,UAAAinB,uBAAP,WACI,OAAO3mB,KAAKylB,qBAGTla,mBAAA7L,UAAAknB,yBAAP,WACI,OAAO5mB,KAAK2mB,yBAAyB3I,IAAI,SAAA6I,kBAAoB,OAAAA,iBAAiB1U,MAG3E5G,mBAAA7L,UAAAqR,kBAAP,WACI,OAAO/Q,KAAKse,gBAGT/S,mBAAA7L,UAAA+Q,kBAAP,WACI,OAAOzQ,KAAK0lB,gBAGTna,mBAAA7L,UAAA8Q,wBAAP,SAA+BD,OAC3BvQ,KAAKomB,qBAAuB7V,MAC5BvQ,KAAKqmB,kBACLrmB,KAAKsmB,wBAGF/a,mBAAA7L,UAAA4Q,wBAAP,WACI,OAAOtQ,KAAKomB,sBAGT7a,mBAAA7L,UAAAonB,mBAAP,WACI,OAAO9mB,KAAK8lB,qBAGTva,mBAAA7L,UAAAgnB,mBAAP,SAA0B3M,MACtB/Z,KAAK8lB,oBAAsB/L,KAC3B/Z,KAAKqmB,kBACLrmB,KAAKsmB,wBAGF/a,mBAAA7L,UAAA8b,mBAAP,WACI,OAAOxb,KAAK8mB,uBAAyBthB,sBAAAzF,oBAAoBM,UAGtDkL,mBAAA7L,UAAA+b,kBAAP,WACI,OAAOzb,KAAK8mB,uBAAyBthB,sBAAAzF,oBAAoBO,SAGtDiL,mBAAA7L,UAAAmY,uBAAP,WACI,OAAO7X,KAAK8mB,uBAAyBthB,sBAAAzF,oBAAoBQ,eAGrDgL,mBAAA7L,UAAA4mB,qBAAR,eAAA1U,MAAA5R,KAEIA,KAAK+mB,0BACL,IAAIC,SAAWhnB,KAAK2mB,yBAEhBM,eAAiBD,SAASE,KAAK,SAACC,GAAqBC,IAErD,IAAIC,aAAezV,MAAKwU,qBAAqBkB,WAAa,GAAK,EAC3DC,YAAc3V,MAAKwU,qBAAqBmB,YAG5C,OAAQJ,GAAGK,mBAAmBD,aAAeH,GAAGI,mBAAmBD,cAAgBF,eAEvFrnB,KAAKylB,oBAAsBwB,eAAevQ,MAAM,EAAG1T,KAAKykB,IAAIznB,KAAK0nB,mBAAoBT,eAAenkB,SAEpG9C,KAAK2lB,kBAAoB3lB,KAAKylB,oBAAoB3iB,OAASmkB,eAAenkB,OAE1E9C,KAAKud,OAAOoK,MAAM,uBAAwB,CACtCC,qBAAsBZ,SACtBa,eAAgB7nB,KAAKylB,oBACrBE,kBAAmB3lB,KAAK2lB,qBAIxBpa,mBAAA7L,UAAAooB,gBAAR,WACI,OAAQ9nB,KAAK8mB,sBACT,KAAKthB,sBAAAzF,oBAAoBO,QACrB,OAAON,KAAK6d,oBAChB,KAAKrY,sBAAAzF,oBAAoBQ,cACrB,OAAOP,KAAK8d,yBAChB,QACI,OAAO9d,KAAK4d,uBAIhBrS,mBAAA7L,UAAAqnB,wBAAR,eAAAnV,MAAA5R,KACIA,KAAKylB,oBAAsBzkB,EAAEoV,OAAOpW,KAAK8nB,kBAAmB,SAACjB,kBAErD,OAAO7lB,EAAE+mB,MAAMnW,MAAKb,oBAAqB,SAACiX,oBAClC,IAAIC,eAAiBjnB,EAAEgnB,mBAAmBvJ,WACrCrI,OAAO,SAACsI,UAAa,OAAAA,SAAS/G,WAC9BqG,IAAI,SAACU,UAAa,OAAAA,SAAS7N,mBAEhC,OAA8B,IAA1BoX,eAAenlB,SAIfklB,mBAAmBE,YAActiB,YAAA5D,UAAUE,GAEuC,IAA3ElB,EAAEmnB,aAAaF,eAAgBpB,iBAAiBvI,gBAAgBxb,OAGvEklB,mBAAmBE,YAActiB,YAAA5D,UAAUC,IAEqC,IAAzEjB,EAAEonB,WAAWH,eAAgBpB,iBAAiBvI,gBAAgBxb,YAFzE,QASZyI,mBAAA7L,UAAA2mB,gBAAR,WACIrmB,KAAK0nB,mBAAqBnc,mBAAmB8c,UAC7CroB,KAAKud,OAAOoK,MAAM,kBAAmB,CAAEW,WAAYtoB,KAAK0nB,sBAGrDnc,mBAAA7L,UAAAuS,aAAP,WACIjS,KAAK0nB,oBAAsBnc,mBAAmB8c,UAC9CroB,KAAKud,OAAOoK,MAAM,eAAgB,CAAEW,WAAYtoB,KAAK0nB,qBACrD1nB,KAAKsmB,wBAGF/a,mBAAA7L,UAAAsS,eAAP,WACI,OAAOhS,KAAK2lB,mBAEhBpa,mBAAA7L,UAAA6oB,wBAAA,WACI,OAAOvoB,KAAK4lB,sBA9NTra,mBAAA5H,QAAmB,CACtB,oBACA,iBAGW4H,mBAAA8c,UAAY,GA2N/B9c,mBAlOA,GAAavO,QAAAuO,wJCYb,IAAA2a,aAAA,WAMA,OALI,SAAAA,aACWvH,MACA4I,YACAD,YAFAtnB,KAAA2e,YACA3e,KAAAunB,wBACAvnB,KAAAsnB,uBAJf,GAAatqB,QAAAkpB,4ICzBb,IAAA1a,eAAA,oBAAAA,kBAEA,OADWA,eAAA7H,QAAmB,GAC9B6H,eAFA,GAAaxO,QAAAwO,gJCSb,IAAAE,2BAAA,WAGI,SAAAA,2BAAoB8L,YAAkC4F,YAAkCoL,YAAkCC,iBAAtGzoB,KAAAwX,wBAAkCxX,KAAAod,wBAAkCpd,KAAAwoB,wBAAkCxoB,KAAAyoB,gCA+B9H,OA5BW/c,2BAAAhM,UAAAia,iBAAP,SAAwBxH,GAAWuW,gBAC/B,IAAI3qB,KAAmC2qB,eAAe1J,MAAM2J,sBAC5D3oB,KAAK4oB,oBAAoB7qB,KAAMoU,KAG5BzG,2BAAAhM,UAAAud,mBAAP,SAA0B9K,GAAW0W,kBACjC,IAAI9qB,KAAgC8qB,iBAAiB7J,MAAM8J,wBAC3D9oB,KAAK4oB,oBAAoB7qB,KAAMoU,KAG5BzG,2BAAAhM,UAAAqpB,wBAAP,SAA+B5W,GAAW6W,kBACrC,IAAIjrB,KAAgCirB,iBAAiBhK,MAAMiK,iBAC5DjpB,KAAK4oB,oBAAoB7qB,KAAMoU,KAG5BzG,2BAAAhM,UAAAwpB,WAAP,SAAkB/W,GAAWgX,eAAuBC,UAA0BC,eAC1E,IAAItrB,KAAgCsrB,cAAcrK,MAAMsK,eACxDtpB,KAAK4oB,oBAAoB7qB,KAAMoU,KAG3BzG,2BAAAhM,UAAAkpB,oBAAR,SAA4B7qB,KAA+BoU,IAA3D,IAAAP,MAAA5R,KACIA,KAAKwoB,YAAYe,KACbvpB,KAAKod,YAAY2B,WAAWhhB,MAAMyrB,KAAK,SAACC,kBACpC7X,MAAK4F,YAAY4H,iBAAiBjN,GAAIsX,kBACtC7X,MAAK6W,gBAAgBiB,MAAMD,iBAAiBzK,MAAM2K,kBA7BvDje,2BAAA/H,QAAmB,CAAC,cAAe,cAAe,cAAe,mBAiC5E+H,2BAlCA,GAAa1O,QAAA0O,wKCAb,IAAAC,uBAAA,WAQI,SAAAA,uBAAoB6L,YACAoS,mBACAC,8BAFA7pB,KAAAwX,wBACAxX,KAAA4pB,sCACA5pB,KAAA6pB,0DA8ExB,OA3EWle,uBAAAjM,UAAA0Q,oBAAP,WACI,OAAOpQ,KAAK4pB,mBAAmBxZ,uBAG5BzE,uBAAAjM,UAAA2Q,mBAAP,SAA0BQ,kBACtB,OAAO7Q,KAAK4pB,mBAAmBvZ,mBAAmBQ,mBAG/ClF,uBAAAjM,UAAAkR,qBAAP,SAA4BC,kBACxB,OAAO7Q,KAAK4pB,mBAAmBlZ,oBAAoBG,mBAGhDlF,uBAAAjM,UAAAqR,kBAAP,WACI,OAAO/Q,KAAKwX,YAAYqH,uBAGrBlT,uBAAAjM,UAAAsR,uBAAP,WACIhR,KAAK4pB,mBAAmB5Y,0BAGrBrF,uBAAAjM,UAAAuR,8BAAP,WACI,OAAOjR,KAAKwX,YAAY6G,gCAGrB1S,uBAAAjM,UAAAonB,mBAAP,WACI,OAAO9mB,KAAK4pB,mBAAmB9C,sBAG5Bnb,uBAAAjM,UAAAgnB,mBAAP,SAA0B3M,MACtB/Z,KAAK4pB,mBAAmBlD,mBAAmB3M,OAGxCpO,uBAAAjM,UAAA2R,kBAAP,WACI,OAAOrR,KAAK4pB,mBAAmBjD,yBAAyB3I,IAAI,SAAC8L,SAA6B,OAAAA,QAAQ3X,MAG/FxG,uBAAAjM,UAAAsS,eAAP,WACI,OAAOhS,KAAK4pB,mBAAmB5X,kBAG5BrG,uBAAAjM,UAAAuS,aAAP,WACI,OAAOjS,KAAK4pB,mBAAmB3X,gBAG5BtG,uBAAAjM,UAAAwR,iBAAP,WACI,OAAQlR,KAAK6pB,6BAA6BE,oBAGvCpe,uBAAAjM,UAAAyR,4BAAP,WACI,OAAOnR,KAAK6pB,6BAA6B1Y,+BAGtCxF,uBAAAjM,UAAA0R,qBAAP,WACIpR,KAAKwX,YAAYpG,wBAGdzF,uBAAAjM,UAAA+Q,kBAAP,WACI,OAAOzQ,KAAK4pB,mBAAmBnZ,qBAG5B9E,uBAAAjM,UAAA8Q,wBAAP,SAA+BD,OAC3BvQ,KAAK4pB,mBAAmBpZ,wBAAwBD,QAG7C5E,uBAAAjM,UAAA4Q,wBAAP,WACI,OAAOtQ,KAAK4pB,mBAAmBtZ,2BAG5B3E,uBAAAjM,UAAAojB,sBAAP,WACI,OAAO9iB,KAAKwX,YAAYsL,yBAGrBnX,uBAAAjM,UAAAujB,4BAAP,WACI,OAAOjjB,KAAKwX,YAAYyL,+BApFrBtX,uBAAAhI,QAAmB,CACtB,cACA,qBACA,gCAmFRgI,uBAxFA,GAAa3O,QAAA2O,gKCKb,IAAA3K,EAAAtD,oBAAA,GAGAkO,uBAAA,WAWI,SAAAA,uBAAoB4L,YACAwS,2BACAC,eACAL,mBACAC,6BACAlY,yBALA3R,KAAAwX,wBACAxX,KAAAgqB,sDACAhqB,KAAAiqB,8BACAjqB,KAAA4pB,sCACA5pB,KAAA6pB,0DACA7pB,KAAA2R,gDAgQxB,OA7PW/F,uBAAAlM,UAAAof,eAAP,SAAsB3M,IAAtB,IAAAP,MAAA5R,KACI,GAAGA,KAAKkqB,iBAAiB/X,IAAK,CAC1BnS,KAAKiqB,eAAe5E,qBAAoB,GACxC,IAAM8E,QAAUnqB,KAAK4pB,mBAAmBjD,yBAAyB3I,IAAI,SAASnf,OAAS,OAAOA,MAAMsT,KAAMiY,QAAQjY,IAClHnS,KAAK2R,wBAAwB0Y,kBAAkBrqB,KAAKsT,iBAAiBnB,IAAI0E,sBAAsB7W,KAAK+W,2BAA2BoT,SACjHnqB,KAAKwX,YAAYsH,eAAe3M,IACtCmY,MAAM,WACV1Y,MAAKqY,eAAe5E,qBAAoB,OAK7CzZ,uBAAAlM,UAAAwqB,iBAAP,SAAwB/X,IACpB,OAAQnS,KAAKiqB,eAAe9E,uBAAyBnlB,KAAKwX,YAAYiJ,gBAAgBtO,KAGnFvG,uBAAAlM,UAAA8b,mBAAP,WACI,OAAOxb,KAAK4pB,mBAAmBpO,sBAG5B5P,uBAAAlM,UAAA+b,kBAAP,WACI,OAAOzb,KAAK4pB,mBAAmBnO,qBAG5B7P,uBAAAlM,UAAAmY,uBAAP,WACI,OAAO7X,KAAK4pB,mBAAmB/R,0BAG5BjM,uBAAAlM,UAAAoU,UAAP,SAAiB3B,IACb,OAAOnS,KAAKwX,YAAY1D,UAAU3B,KAG/BvG,uBAAAlM,UAAA+a,aAAP,SAAoBtI,IAChB,OAAOnS,KAAKwX,YAAYiD,aAAatI,KAGlCvG,uBAAAlM,UAAA+c,aAAP,SAAoBtK,IAChB,OAAOnS,KAAKwX,YAAYiF,aAAatK,KAGlCvG,uBAAAlM,UAAA0T,gBAAP,SAAuBjB,IACnB,OAAOnS,KAAKwX,YAAY4D,oBAAoBjJ,IAAIhU,MAG7CyN,uBAAAlM,UAAAyT,qBAAP,SAA4BhB,IACxB,OAAOnS,KAAKwX,YAAY4D,oBAAoBjJ,IAAIoY,mBAG7C3e,uBAAAlM,UAAAwT,mBAAP,SAA0Bf,IACtB,OAAOnS,KAAKwX,YAAY4D,oBAAoBjJ,IAAIqY,iBAG7C5e,uBAAAlM,UAAAoY,uBAAP,SAA8B3F,IAC1B,OAAOnS,KAAKwX,YAAY4D,oBAAoBjJ,IAAIsY,aAG7C7e,uBAAAlM,UAAAgU,kBAAP,SAAyBvB,IACrB,OAAOnS,KAAKwX,YAAY9D,kBAAkBvB,KAGvCvG,uBAAAlM,UAAAsd,oBAAP,SAA2B7K,IACvB,OAAOnS,KAAKwX,YAAYwF,oBAAoB7K,KAGzCvG,uBAAAlM,UAAAqY,kBAAP,SAAyB5F,IACrB,OAAOnS,KAAKwX,YAAYO,kBAAkB5F,KAGvCvG,uBAAAlM,UAAAgY,uBAAP,SAA8BvF,IAC1B,OAAOnS,KAAKwX,YAAYlE,iBAAiBnB,IAAIuY,qBAG1C9e,uBAAAlM,UAAAia,iBAAP,SAAwBxH,GAAWyH,OAC/B5Z,KAAKgqB,2BAA2BrQ,iBAAiBxH,GAAIyH,QAGlDhO,uBAAAlM,UAAAud,mBAAP,SAA0B9K,GAAW+K,SACjCld,KAAKgqB,2BAA2B/M,mBAAmB9K,GAAI+K,UAGpDtR,uBAAAlM,UAAA0a,gBAAP,SAAuBxF,OACnB,OAAO5U,KAAKwX,YAAY4C,gBAAgBxF,QAGrChJ,uBAAAlM,UAAA4a,gBAAP,SAAuB1F,OACnB,OAAO5U,KAAKwX,YAAY8C,gBAAgB1F,QAGrChJ,uBAAAlM,UAAA2U,YAAP,SACIO,MACA+V,2BAAA,IAAAA,6CAAA,GAEA,IAAMC,QAAU5qB,KAAKoa,gBAAgBxF,OAGrC,MAAgB,OAFA5U,KAAKsa,gBAAgB1F,QAEb+V,qBACbC,QAGD5qB,KAAKoa,gBAAgBxF,OAAM,IAAI5U,KAAKsa,gBAAgB1F,QAG3DhJ,uBAAAlM,UAAAkY,kBAAP,SAAyBzF,GAAW0Y,eAChC7qB,KAAKgqB,2BAA2BjB,wBAAwB5W,GAAI0Y,gBAGzDjf,uBAAAlM,UAAAikB,mBAAP,WACI,OAAO3jB,KAAKiqB,eAAetG,sBAGxB/X,uBAAAlM,UAAA4Z,iBAAP,SAAwBnH,IACpBnS,KAAKiqB,eAAe3Q,iBAAiBnH,KAGlCvG,uBAAAlM,UAAAqkB,kBAAP,WACI/jB,KAAKiqB,eAAelG,qBAGjBnY,uBAAAlM,UAAAygB,gBAAP,WACI,IAAIhO,GAAKnS,KAAKiqB,eAAe9F,0BAC7B,OAAOnkB,KAAKwX,YAAY2I,gBAAgBhO,KAGrCvG,uBAAAlM,UAAAskB,8BAAP,WACI,IAAI7R,GAAKnS,KAAKiqB,eAAe9F,0BAI7B,OAHInjB,EAAE8pB,OAAO9qB,KAAKiqB,eAAejG,kCAC7BhkB,KAAKiqB,eAAe7F,8BAA8BpkB,KAAKwX,YAAY6I,+BAA+BlO,KAE/FnS,KAAKiqB,eAAejG,iCAGxBpY,uBAAAlM,UAAA0kB,8BAAP,SAAqCrK,MACjC/Z,KAAKiqB,eAAe7F,8BAA8BrK,OAG/CnO,uBAAAlM,UAAA6Z,wBAAP,SAA+BpH,IAC3B,OAAOnS,KAAKwX,YAAY+B,wBAAwBpH,KAG7CvG,uBAAAlM,UAAAwS,iBAAP,SAAwBC,IACpB,OAAOnS,KAAKiqB,eAAe/X,iBAAiBC,KAGzCvG,uBAAAlM,UAAA0S,iBAAP,SAAwBD,IACpBnS,KAAKiqB,eAAe7X,iBAAiBD,KAGlCvG,uBAAAlM,UAAAwV,2BAAP,WACI,OAAOlV,KAAK6pB,6BAA6B3U,8BAGtCtJ,uBAAAlM,UAAAuY,eAAP,SAAsB9F,IAClB,OAAOnS,KAAKwX,YAAYS,eAAe9F,KAGpCvG,uBAAAlM,UAAAsY,iBAAP,SAAwB7F,IACpBnS,KAAKiqB,eAAejS,iBAAiB7F,KAGlCvG,uBAAAlM,UAAA6S,kBAAP,WACIvS,KAAKiqB,eAAe1X,qBAGjB3G,uBAAAlM,UAAA8S,mBAAP,WACI,OAAOxS,KAAKiqB,eAAezX,sBAGxB5G,uBAAAlM,UAAA+S,iBAAP,WACI,IAAIN,GAAKnS,KAAKiqB,eAAenF,0BAC7B,OAAG9jB,EAAE+pB,QAAQ5Y,IACF,GAEJnS,KAAKwX,YAAY/E,iBAAiBN,KAGtCvG,uBAAAlM,UAAAgT,6BAAP,WACI,IAAIP,GAAKnS,KAAKiqB,eAAenF,0BAC7B,OAAG9jB,EAAE+pB,QAAQ5Y,IACF,GAEJnS,KAAKwX,YAAY4D,oBAAoBjJ,IAAIhU,MAG7CyN,uBAAAlM,UAAAiT,cAAP,SAAqBR,IACjB,OAAOnS,KAAKwX,YAAY7E,cAAcR,KAGnCvG,uBAAAlM,UAAAsT,yBAAP,WACI,OAAOhT,KAAKwX,YAAYxE,4BAGrBpH,uBAAAlM,UAAAuT,wBAAP,WACI,OAAOjT,KAAKwX,YAAYvE,2BAGrBrH,uBAAAlM,UAAA4U,+BAAP,SAAsCnC,IAClC,IAAM3F,OAASxM,KAAKsT,iBAAiBnB,IAC/B6Y,WAAaxe,QAAUA,OAAOqK,uBAAyBrK,OAAOqK,sBAAsBmU,WACpFC,YAAcD,aAAeA,WAAWE,wBAA0BF,WAAWG,6BAEnF,GAAmB,MAAfF,aAAuC,KAAhBA,YACvB,MAAO,GAGX,IAAMG,mBAAqBtQ,OAAOuQ,OAAOJ,aAAaroB,QAAQ,IAAK,MACnE,GAAI0oB,MAAMF,oBACN,MAAO,GAGX,IAAMG,aAAevrB,KAAK8T,UAAU3B,IAC9BqZ,uBAAyBD,cAAkD,MAAlCA,aAAapX,kBACtD2G,OAAOyQ,aAAapX,mBACpB,KAEN,OAA8B,MAA1BqX,wBAAkCJ,oBAAsBI,uBACjD,GAGJxrB,KAAKqU,YAAY+W,oBAAoB,GAAS,MAGzDxf,uBAAAlM,UAAA4T,iBAAA,SAAiBnB,IACb,OAAOnS,KAAKwX,YAAYlE,iBAAiBnB,KAE7CvG,uBAAAlM,UAAAqX,yBAAA,WACI,IAAIpG,cAAqE,IAArD3Q,KAAK4pB,mBAAmBrB,0BAAkC,OAASvoB,KAAK4pB,mBAAmBrB,0BAA0BkD,MAAM,KAAK,GACpJ9a,cAAiCsT,MAAjBtT,cAA6B,WAAaA,cAC1D,IAAM+a,YAAe1rB,KAAK4pB,mBAAmB/R,yBAA2B,UAAY,SAEpF,OAD+B7X,KAAKwX,YAAYqK,qBAAoB,IAAI6J,YAAW,IAAI/a,cAAa,IAAI3Q,KAAK4pB,mBAAmBjD,yBAAyB7jB,OAAM,iBAAiB9C,KAAK4pB,mBAAmBtZ,0BAA0BiX,YAAW,kBAI1O3b,uBAAAlM,UAAA6V,gBAAP,SAAuB+P,eACnBtlB,KAAKiqB,eAAe1U,gBAAgB+P,gBAGjC1Z,uBAAAlM,UAAA4V,gBAAP,WACI,OAAOtV,KAAKiqB,eAAe3U,mBAGxB1J,uBAAAlM,UAAAkiB,oBAAP,SAA2BzP,IACvB,OAAOnS,KAAKwX,YAAYoK,oBAAoBzP,KAGzCvG,uBAAAlM,UAAAiU,eAAP,SAAsBxB,IAClB,OAAOnS,KAAKwX,YAAY7D,eAAexB,KAEpCvG,uBAAAlM,UAAAyZ,oBAAP,SAA2BhH,IACvB,OAAOnS,KAAKwX,YAAY2B,oBAAoBhH,KAEzCvG,uBAAAlM,UAAA2V,4BAAP,WACI,OAAOrV,KAAKwX,YAAYnC,+BA7QrBzJ,uBAAAjI,QAAmB,CACtB,cACA,6BACA,iBACA,qBACA,+BACA,2BAyQRiI,uBAhRA,GAAa5O,QAAA4O,gKCbb,IAAAC,qBAAA,WAGI,SAAAA,qBAAoB2L,YACAoS,mBACAC,8BAFA7pB,KAAAwX,wBACAxX,KAAA4pB,sCACA5pB,KAAA6pB,0DAyBxB,OAvBWhe,qBAAAnM,UAAAwR,iBAAP,WACI,OAAQlR,KAAK6pB,6BAA6BE,oBAGvCle,qBAAAnM,UAAA2Q,mBAAP,SAA0BQ,kBACtB7Q,KAAK4pB,mBAAmBvZ,mBAAmBQ,mBAGxChF,qBAAAnM,UAAAuR,8BAAP,WACI,OAAOjR,KAAKwX,YAAY6G,gCAGrBxS,qBAAAnM,UAAA0Q,oBAAP,WACIpQ,KAAK4pB,mBAAmBxZ,uBAGrBvE,qBAAAnM,UAAAmiB,mBAAP,WACI,OAAO7hB,KAAKwX,YAAYqK,sBAGrBhW,qBAAAnM,UAAAqiB,oBAAP,WACI,OAAO/hB,KAAKwX,YAAYuK,uBA3BrBlW,qBAAAlI,QAAmB,CAAC,cAAe,qBAAsB,gCA6BpEkI,qBA9BA,GAAa7O,QAAA6O,4JCLb,IAAA/L,SAAApC,oBAAA,GAYAiP,kBAAA,oBAAAA,qBA2CA,OAzCWA,kBAAAxM,UAAqBL,SAAA6B,cAAc,6BAA8B,CACpEkc,oBAAqB,qBACrBD,qBAAsB,qBACtBE,yBAA0B,qBAC1BM,eAAgB,uBAChB4H,cAAe,iBACfD,gBAAiB,sBACjB7H,eAAgB,yBAChBc,MAAO,YACP8C,gBAAiB,SACjBE,iBAAkB,SAClBE,oBAAqB,SACrByJ,oBAAqB,sBACrBjJ,yBAA0B,2BAC1BE,sBAAuB,SACvBC,qBAAsB,gBACtB+I,uBAAwB,UACxB7I,yBAA0B,kCAC1B8I,yBAA0B,2BAC1BrI,0BAA2B,YAsBnC7W,kBA3CA,GAAa3P,QAAA2P,sJCZb,IAAA7M,SAAApC,oBAAA,GAOAoP,mBAAA,oBAAAA,sBAuBA,OArBWA,mBAAA3M,UAAqBL,SAAA6B,cAAc,8BAA+B,CACrEwQ,GAAG,SACHoB,SAAU,gBACVoN,OAAQ,qBACR+J,oBAAqB,6BACrB9V,MAAO,aACPoK,MAAO,qBACP0B,cAAe,UACf7J,sBAAuB,+BACvBsM,mBAAoB,QAY5BrW,mBAvBA,GAAa9P,QAAA8P,wJCPb,IAAAhN,SAAApC,oBAAA,GACAsP,mBAAA,oBAAAA,sBAQA,OAPWA,mBAAA7M,UAAqBL,SAAA6B,cAAc,8BAA+B,CACrEsd,WAAY,OACZ0K,aAAc,SAKtB3c,mBARA,GAAahQ,QAAAgQ,wJCDb,IAAAlN,SAAApC,oBAAA,GACAwP,0BAAA,oBAAAA,6BAeA,OAbWA,0BAAA/M,UAAqBL,SAAA6B,cAAc,qCAAsC,CAC5EmqB,YAAa,SACbC,YAAa,SACbC,kBAAmB,SACnBC,gBAAiB,gBACjBC,wBAAyB,oBAQjChf,0BAfA,GAAalQ,QAAAkQ,sKCDb,IAAApN,SAAApC,oBAAA,GAEAyP,WAAA,oBAAAA,cAmBA,OAjBWA,WAAAhN,UAAqBL,SAAA6B,cAAc,sBAAuB,CAC7DoS,gBAAiB,UACjBI,kBAAmB,gBACnBqG,kBAAmB,gBACnBD,oBAAqB,gBACrBtF,iBAAkB,gBAClBzB,SAAU,qBACVkB,mBAAmB,kBAU3BvH,WAnBA,GAAanQ,QAAAmQ,wICFb,IAAArN,SAAApC,oBAAA,GACA0P,mBAAA,oBAAAA,sBAoBA,OAnBWA,mBAAAjN,UAAqBL,SAAA6B,cAAc,8BAA+B,CACrEma,4BAA6B,gBAC7BI,6BAA8B,gBAC9BH,0BAA2B,gBAC3BI,2BAA4B,gBAC5BH,0BAA2B,gBAC3BI,2BAA4B,gBAC5BvH,4BAA6B,gBAC7B+F,yBAA0B,kBAWlCxN,mBApBA,GAAapQ,QAAAoQ,wJCDb,IAAAtN,SAAApC,oBAAA,GAEA2P,aAAA,oBAAAA,gBAUA,OARWA,aAAAlN,UAAqBL,SAAA6B,cAAc,wBAAyB,CAC/D6R,SAAU,uBACVmE,SAAU,YAMlBtK,aAVA,GAAarQ,QAAAqQ,4ICFb,IAAAvN,SAAApC,oBAAA,GACA4P,qBAAA,oBAAAA,wBASA,OAPWA,qBAAAnN,UAAqBL,SAAA6B,cAAc,gCAAiC,CACvExD,KAAM,SACNwgB,MAAO,WAKfrR,qBATA,GAAatQ,QAAAsQ,4JCDb,IAAAxN,SAAApC,oBAAA,GAEA6P,yBAAA,oBAAAA,4BASA,OAPWA,yBAAApN,UAAYL,SAAA6B,cAAc,oCAAqC,CAClEqhB,mBAAoB,SACpBE,yBAA0B,WAKlC3V,yBATA,GAAavQ,QAAAuQ,oKCFb,IAAAzN,SAAApC,oBAAA,GAIAsD,EAAAtD,oBAAA,GACAgQ,mBAAA,oBAAAA,sBA8BA,OAhBIA,mBAAAhO,UAAAysB,kBAAA,WACI,IAAIxU,SAAW3W,EAAEoV,OAAOpW,KAAKye,UACzB,SAACC,UAAa,OAAAA,SAAS/G,WAG3B,OAAO3W,EAAEgd,IACLrG,SACA,SAAC+G,UAAa,OAAAA,SAAS7N,oBAI/BnD,mBAAAhO,UAAA+mB,oBAAA,WACIzlB,EAAEwlB,KAAKxmB,KAAKye,UAAW,SAACC,UACpBA,SAAS/G,UAAW,KAzBrBjK,mBAAAvN,UAAqBL,SAAA6B,cAAc,8BAA+B,CACrEgd,MAAO,SACPH,kBAAmB,gCACnBC,UAAW,kBACXyJ,UAAW,0BAwBnBxa,mBA9BA,GAAa1Q,QAAA0Q,wJCLb,IAAA5N,SAAApC,oBAAA,GAEAiQ,cAAA,oBAAAA,iBAgBA,OAJIA,cAAAjO,UAAA0sB,OAAA,WACIpsB,KAAK2X,UAAY3X,KAAK2X,UAXnBhK,cAAAxN,UAAqBL,SAAA6B,cAAc,yBAA0B,CAChEgd,MAAM,SACN9N,iBAAiB,SACjB8G,SAAU,YAWlBhK,cAhBA,GAAa3Q,QAAA2Q,8ICFb,IAAA7N,SAAApC,oBAAA,GACAkQ,sBAAA,oBAAAA,yBAWA,OATWA,sBAAAzN,UAAqBL,SAAA6B,cAAc,iCAAkC,CACxExD,KAAM,SACNwgB,MAAO,SACP9f,MAAO,WAMf+O,sBAXA,GAAa5Q,QAAA4Q,8JCDb,IAAA9N,SAAApC,oBAAA,GAGAoQ,iBAAA,oBAAAA,oBAWA,OATWA,iBAAA3N,UAAqBL,SAAA6B,cAAc,4BAA6B,CACnE6R,SAAU,2BACVmE,SAAU,UACVqH,MAAO,qBAMflR,iBAXA,GAAa9Q,QAAA8Q,oJCHb,IAAAhO,SAAApC,oBAAA,GACAqQ,yBAAA,oBAAAA,4BAiBA,OAPIzP,OAAAC,eAAIwP,yBAAArO,UAAA,WAAQ,KAAZ,WAII,OAAOmT,EAAE,SAASwZ,OAAOxZ,EAAEyZ,UAAUtsB,KAAKusB,YAAY9U,KAAK,OAAO+U,KAAK,wCAZpEze,yBAAA5N,UAAqBL,SAAA6B,cAAc,oCAAqC,CAC3E8qB,WAAY,SACZF,UAAW,kBAanBxe,yBAjBA,GAAa/Q,QAAA+Q,oKCDb,IAAAjO,SAAApC,oBAAA,GAEAsQ,iBAAA,oBAAAA,oBAOA,OALWA,iBAAA7N,UAAqBL,SAAA6B,cAAc,4BAA6B,CACnEgnB,sBAAuB,YAI/B3a,iBAPA,GAAahR,QAAAgR,oJCFb,IAAAlO,SAAApC,oBAAA,GAEAuQ,sBAAA,oBAAAA,yBAsCA,OApCWA,sBAAA9N,UAAqBL,SAAA6B,cAAc,iCAAkC,CACxExD,KAAM,SACNosB,kBAAmB,SACnBC,gBAAiB,SACjBzK,YAAa,SACbC,YAAa,SACbC,cAAe,SACfC,aAAc,SACduK,YAAa,SACblI,YAAa,SACbC,cAAe,UACfhO,WAAY,SACZ4O,iBAAkB,mBAClBsJ,SAAU,SACVC,YAAa,SACbC,SAAU,SACVnZ,eAAgB,YAoBxBxF,sBAtCA,GAAajR,QAAAiR,8JCFb,IAAAnO,SAAApC,oBAAA,GAQAwQ,cAAA,oBAAAA,iBAiBA,OAfWA,cAAA/N,UAAqBL,SAAA6B,cAAc,yBAA0B,CAChE6R,SAAU,wBACVsN,aAAc,qBACdC,eAAgB,uBAChBX,aAAc,oBACdZ,sBAAuB,+BACvBoB,UAAW,mBASnB1S,cAjBA,GAAalR,QAAAkR,8ICRb,IAAApO,SAAApC,oBAAA,GAGAyQ,sBAAA,oBAAAA,yBAYA,OAVWA,sBAAAhO,UAAqBL,SAAA6B,cAAc,iCAAkC,CACxE6R,SAAU,gCACVuG,KAAM,uBACNyG,iBAAkB,YAO1BrS,sBAZA,GAAanR,QAAAmR,8JCHb,IAAArO,SAAApC,oBAAA,GACA0Q,8BAAA,oBAAAA,iCAOA,OALWA,8BAAAjO,UAAqBL,SAAA6B,cAAc,yCAA0C,CAChFkrB,OAAQ,WAIhBze,8BAPA,GAAapR,QAAAoR,8KCDb,IAAAtO,SAAApC,oBAAA,GAEA2Q,kBAAA,oBAAAA,qBAOA,OALWA,kBAAAlO,UAAqBL,SAAA6B,cAAc,6BAA8B,CACpE2e,MAAO,4BAIfjS,kBAPA,GAAarR,QAAAqR,sJCFb,IAAAvO,SAAApC,oBAAA,GAGA4Q,eAAA,oBAAAA,kBASA,OARWA,eAAAnO,UAAqBL,SAAA6B,cAAc,0BAA2B,CACjE6R,SAAU,yBACVoJ,SAAU,kBAMlBtO,eATA,GAAatR,QAAAsR,gJCHb,IAAAxO,SAAApC,oBAAA,GACA6Q,uBAAA,oBAAAA,0BAOA,OALWA,uBAAApO,UAAqBL,SAAA6B,cAAc,kCAAmC,CACzE+a,KAAM,WAIdnO,uBAPA,GAAavR,QAAAuR,gKCDb,IAAAzO,SAAApC,oBAAA,GAGA8Q,mBAAA,oBAAAA,sBAUA,OATWA,mBAAArO,UAAqBL,SAAA6B,cAAc,8BAA+B,CACrE6R,SAAU,6BACVmE,SAAU,UACVqH,MAAO,uBAMfxQ,mBAVA,GAAaxR,QAAAwR,wJCHb,IAAA1O,SAAApC,oBAAA,GACA+Q,2BAAA,oBAAAA,8BAQA,OAPWA,2BAAAtO,UAAqBL,SAAA6B,cAAc,sCAAuC,CAC7E8qB,WAAY,SACZvY,OAAQ,WAKhBzF,2BARA,GAAazR,QAAAyR,wKCAb,IAAA3O,SAAApC,oBAAA,GAEAkR,mBAAA,oBAAAA,sBAMA,OALWA,mBAAAzO,UAAqBL,SAAA6B,cAAc,8BAA+B,CACrEmnB,wBAAyB,YAIjCla,mBANA,GAAa5R,QAAA4R,wJCFb,IAAA9O,SAAApC,oBAAA,GAEAoR,eAAA,oBAAAA,kBAaA,OAXWA,eAAA3O,UAAqBL,SAAA6B,cAAc,0BAA2B,CACjEwQ,GAAI,SACJqB,SAAU,yBACVsZ,MAAO,gBAQfhe,eAbA,GAAa9R,QAAA8R,gJCHb,IAAAhP,SAAApC,oBAAA,GACAqR,uBAAA,oBAAAA,0BAOA,OALWA,uBAAA5O,UAAqBL,SAAA6B,cAAc,kCAAmC,CACzEgd,MAAO,WAIf5P,uBAPA,GAAa/R,QAAA+R,gKCDb,IAAAjP,SAAApC,oBAAA,GAGAsR,UAAA,oBAAAA,aAWA,OATWA,UAAA7O,UAAqBL,SAAA6B,cAAc,qBAAsB,CAC5D6R,SAAU,oBACVmE,SAAU,UACVqH,MAAO,cAMfhQ,UAXA,GAAahS,QAAAgS,sICHb,IAAAlP,SAAApC,oBAAA,GACAuR,kBAAA,oBAAAA,qBAaA,OAXWA,kBAAA9O,UAAqBL,SAAA6B,cAAc,6BAA8B,CACpExD,KAAM,SACNyW,MAAO,SACP6V,YAAa,gBACbsC,QAAS,kBAOjB9d,kBAbA,GAAajS,QAAAiS,sJCDb,IAAAnP,SAAApC,oBAAA,GACAwR,UAAA,oBAAAA,aAOA,OALWA,UAAA/O,UAAqBL,SAAA6B,cAAc,qBAAsB,CAC5D2nB,eAAgB,SAIxBpa,UAPA,GAAalS,QAAAkS,sICDb,IAAApP,SAAApC,oBAAA,GACAyR,oBAAA,oBAAAA,uBAmCI,OAjCOA,oBAAAhP,UAAqBL,SAAA6B,cAAc,+BAAgC,CACtExD,KAAM,SACNssB,YAAa,SACb1K,YAAa,SACbC,YAAa,SACbC,cAAe,SACfC,aAAc,SACdqB,WAAY,SACZC,UAAW,SACXC,UAAW,SACXC,QAAS,SACTC,QAAS,SACTP,WAAY,SACZE,cAAe,SACftH,UAAW,SACX3W,eAAgB,WAkBpB8L,oBAnCJ,GAAanS,QAAAmS,0JCDb,IAAArP,SAAApC,oBAAA,GAGA0R,YAAA,oBAAAA,eAUA,OARWA,YAAAjP,UAAqBL,SAAA6B,cAAc,uBAAwB,CAC9D6R,SAAU,sBACV4O,WAAY,qBAMpBhT,YAVA,GAAapS,QAAAoS,0ICHb,IAAAtP,SAAApC,oBAAA,GAGA2R,kBAAA,oBAAAA,qBAaA,OAXWA,kBAAAlP,UAAqBL,SAAA6B,cAAc,6BAA8B,CACpEwQ,GAAI,SACJqB,SAAU,4BACVmE,SAAU,UACVqH,MAAO,sBAOf3P,kBAbA,GAAarS,QAAAqS,sJCHb,IAAAvP,SAAApC,oBAAA,GACA4R,0BAAA,oBAAAA,6BASA,OAPWA,0BAAAnP,UAAqBL,SAAA6B,cAAc,qCAAsC,CAC5ExD,KAAM,SACN6uB,0BAA2B,kBAKnC1d,0BATA,GAAatS,QAAAsS,sKCDb,IAAAxP,SAAApC,oBAAA,GACA6R,kBAAA,oBAAAA,qBAOA,OALWA,kBAAApP,UAAqBL,SAAA6B,cAAc,6BAA8B,CACpEsnB,iBAAkB,SAI1B1Z,kBAPA,GAAavS,QAAAuS,sJCDb,IAAA0d,gCAAAvvB,oBAAA,IACAwvB,2BAAAxvB,oBAAA,IAEAoN,iBAAA,WAMA,OANA,SAAAA,mBACI9K,KAAAsX,SAAe,CACXnF,GAAI,uBAERnS,KAAAgQ,SAAkBid,gCAAAhd,QAClBjQ,KAAA8P,WAAiBod,2BAAAC,0BALrB,GAAanwB,QAAA8N,yGCHbpN,oBAAAgB,EAAA4S,qBAAeA,oBAAA,8fCCf,IAAA9L,sBAAA9H,oBAAA,GAEAyvB,yBAAA,WAKI,SAAAA,yBAAoBC,gCAAAptB,KAAAotB,8DAMxB,OAHWD,yBAAAztB,UAAA2tB,qBAAP,WACI,OAAOrtB,KAAKotB,+BAA+BtG,uBAAyBthB,sBAAAzF,oBAAoBQ,eARrF4sB,yBAAAxpB,QAAmB,CAAC,kCAU/BwpB,yBAXA,GAAanwB,QAAAmwB,oKCHb,IAAAG,4BAAA5vB,oBAAA,IACA6vB,iCAAA7vB,oBAAA,IAEAuN,kBAAA,WAMA,OANA,SAAAA,oBACIjL,KAAAsX,SAAe,CACXnF,GAAI,wBAERnS,KAAA8P,WAAiBwd,4BAAAE,0BACjBxtB,KAAAgQ,SAAkBud,iCAAAtd,SALtB,GAAajT,QAAAiO,sJCAb,IAAAjK,EAAAtD,oBAAA,GAEA8vB,0BAAA,WAMI,SAAAA,0BAAoBJ,gCAAAptB,KAAAotB,8DA2BxB,OAxBWI,0BAAA9tB,UAAA0T,gBAAP,WACI,OAAOpT,KAAKotB,+BAA+Bha,gBAAgBpT,KAAKmS,KAG7Dqb,0BAAA9tB,UAAAogB,yBAAP,WACI,OAAO9f,KAAKotB,+BAA+BtN,yBAAyB9f,KAAKmS,KAGtEqb,0BAAA9tB,UAAA+tB,6BAAP,WACI,OAAOzsB,EAAE+pB,QAAQ/qB,KAAK8f,6BAGnB0N,0BAAA9tB,UAAA6f,4CAAP,WACI,OAAOvf,KAAKotB,+BAA+B7N,4CAA4Cvf,KAAKmS,KAGzFqb,0BAAA9tB,UAAAguB,qBAAP,SAA4BlJ,SACxB,OAAOxkB,KAAKotB,+BAA+B1I,6BAA6B1kB,KAAKmS,GAAIqS,UAG9EgJ,0BAAA9tB,UAAAiuB,qBAAP,SAA4BnJ,QAAgBnS,QACxCA,OAAOC,iBACPtS,KAAKotB,+BAA+BvI,6BAA6B7kB,KAAKmS,GAAIqS,UA7BvEgJ,0BAAA7pB,QAAmB,CAAC,kCA+B/B6pB,0BAjCA,GAAaxwB,QAAAwwB,2HCLb9vB,oBAAAgB,EAAA4S,qBAAeA,oBAAA,qgECWf,IAAAvF,+BAAA,WAGI,SAAAA,+BAAoByL,YAAkCwS,2BAAgEC,eAAwCL,oBAA1I5pB,KAAAwX,wBAAkCxX,KAAAgqB,sDAAgEhqB,KAAAiqB,8BAAwCjqB,KAAA4pB,sCAkElK,OA/DW7d,+BAAArM,UAAA0T,gBAAP,SAAuBjB,IACnB,OAAOnS,KAAKwX,YAAYpE,gBAAgBjB,KAGrCpG,+BAAArM,UAAAogB,yBAAP,SAAgC3N,IAC5B,OAAOnS,KAAKwX,YAAYsI,yBAAyB3N,KAG9CpG,+BAAArM,UAAA6f,4CAAP,SAAmDpN,IAC/C,OAAOnS,KAAKwX,YAAY+H,4CAA4CpN,KAGjEpG,+BAAArM,UAAAuhB,cAAP,SAAqB9O,IACjB,OAAOnS,KAAKwX,YAAYyJ,cAAc9O,KAGnCpG,+BAAArM,UAAAwhB,uBAAP,SAA8B/O,IAC1B,OAAOnS,KAAKwX,YAAY0J,uBAAuB/O,KAG5CpG,+BAAArM,UAAAyhB,oBAAP,SAA2BhP,IACvB,OAAOnS,KAAKwX,YAAY2J,oBAAoBhP,KAGzCpG,+BAAArM,UAAA2hB,uBAAP,SAA8BlP,IAC1B,OAAOnS,KAAKwX,YAAY6J,uBAAuBlP,KAG5CpG,+BAAArM,UAAAonB,mBAAP,WACI,OAAO9mB,KAAK4pB,mBAAmB9C,sBAG5B/a,+BAAArM,UAAAyiB,cAAP,SAAqBhQ,IACjB,OAAOnS,KAAKwX,YAAY2K,cAAchQ,KAGnCpG,+BAAArM,UAAAwpB,WAAP,SAAkB/W,GAAWgX,eAAuBC,UAA0BwE,aAC1E5tB,KAAKgqB,2BAA2Bd,WAAW/W,GAAIgX,eAAgBC,UAAWwE,cAGvE7hB,+BAAArM,UAAA0a,gBAAP,SAAuBxF,OACnB,OAAO5U,KAAKwX,YAAY4C,gBAAgBxF,QAGrC7I,+BAAArM,UAAA4a,gBAAP,SAAuB1F,OACnB,OAAO5U,KAAKwX,YAAY8C,gBAAgB1F,QAGrC7I,+BAAArM,UAAA6kB,2BAAP,SAAkCpS,GAAWqS,SACzC,OAAOxkB,KAAKiqB,eAAe1F,2BAA2BpS,GAAIqS,UAGvDzY,+BAAArM,UAAAglB,6BAAP,SAAoCvS,GAAWqS,SAC3C,OAAOxkB,KAAKiqB,eAAevF,6BAA6BvS,GAAIqS,UAGzDzY,+BAAArM,UAAAklB,2BAAP,SAAkCzS,GAAWqS,SACzCxkB,KAAKiqB,eAAerF,2BAA2BzS,GAAIqS,UAGhDzY,+BAAArM,UAAAmlB,6BAAP,SAAoC1S,GAAWqS,SAC3CxkB,KAAKiqB,eAAepF,6BAA6B1S,GAAIqS,UAlElDzY,+BAAApI,QAAmB,CAAC,cAAe,6BAA8B,iBAAkB,sBAoE9FoI,+BArEA,GAAa/O,QAAA+O,2jBCXb,IAAAjK,gCAAApE,oBAAA,GACAoC,SAAApC,oBAAA,GAEAmQ,6BAAA,SAAApM,QAAA,SAAAoM,wFAYA,OAZkDnM,UAAAmM,6BAAApM,QASvCoM,6BAAAnO,UAAAe,oBAAP,WACI,OAAO,GARJoN,6BAAA1N,UAAYL,SAAA6B,cAAc,wCAAyC,CACtEC,QAAS,gBACTC,SAAU,mBAQlBgM,6BAZA,CAAkD/L,gCAAAtB,+BAArCxD,QAAA6Q,4KCHb,IAAA/N,SAAApC,oBAAA,GAEAgR,0BAAA,WASI,SAAAA,0BAAmBvQ,MAAA6B,KAAA7B,UACf8B,aAAaC,UAAW,OAEhC,OAVWwO,0BAAAvO,UAAYL,SAAAM,aAAa,sCAEzBsO,0BAAAmf,OAAS,IAAInf,0BAA0B,UACvCA,0BAAAof,QAAU,IAAIpf,0BAA0B,WACxCA,0BAAAqf,OAAS,IAAIrf,0BAA0B,UACvCA,0BAAAsf,OAAS,IAAItf,0BAA0B,UAKlDA,0BAZA,GAAa1R,QAAA0R,sKCFb,IAAA5O,SAAApC,oBAAA,GAIAiR,2BAAA,oBAAAA,8BAWA,OATWA,2BAAAxO,UAAYL,SAAA6B,cAAc,sCAAuC,CACpExD,KAAM,gBACN8vB,0BAA2B,mCAC3BtO,iBAAkB,2CAM1BhR,2BAXA,GAAa3R,QAAA2R,wKCJb,IAAAuf,0BAAAxwB,oBAAA,IACAywB,+BAAAzwB,oBAAA,KAEAqN,gBAAA,WAMA,OANA,SAAAA,kBACI/K,KAAAsX,SAAe,CACXnF,GAAI,sBAERnS,KAAA8P,WAAiBoe,0BAAAE,wBACjBpuB,KAAAgQ,SAAkBme,+BAAAle,SALtB,GAAajT,QAAA+N,kJCAb,IAAA/J,EAAAtD,oBAAA,GAEA0wB,wBAAA,WAKI,SAAAA,wBAAoBhB,gCAAAptB,KAAAotB,8DA+CxB,OA5CWgB,wBAAA1uB,UAAAuhB,cAAP,WACI,OAAOjhB,KAAKotB,+BAA+BnM,cAAcjhB,KAAKmS,KAG3Dic,wBAAA1uB,UAAAwhB,uBAAP,WACI,OAAOlhB,KAAKotB,+BAA+BlM,uBAAuBlhB,KAAKmS,KAGpEic,wBAAA1uB,UAAAyhB,oBAAP,WACI,OAAOnhB,KAAKotB,+BAA+BjM,oBAAoBnhB,KAAKmS,KAGjEic,wBAAA1uB,UAAA2hB,uBAAP,WACI,OAAOrhB,KAAKotB,+BAA+B/L,uBAAuBrhB,KAAKmS,KAGpEic,wBAAA1uB,UAAA2uB,2BAAP,WACI,OAAOrtB,EAAE+pB,QAAQ/qB,KAAKqhB,2BAGnB+M,wBAAA1uB,UAAA4uB,uBAAP,WACI,OAAOttB,EAAE+pB,QAAQ/qB,KAAKmhB,wBAGnBiN,wBAAA1uB,UAAA6uB,2BAAP,WACI,OAAOvtB,EAAE+pB,QAAQ/qB,KAAKkhB,2BAGnBkN,wBAAA1uB,UAAAyiB,cAAP,WACI,OAAOniB,KAAKotB,+BAA+BjL,cAAcniB,KAAKmS,KAG3Dic,wBAAA1uB,UAAA8uB,iBAAP,SAAwBpF,WACpB,OAAOA,UAAU5V,SAASmL,OAGvByP,wBAAA1uB,UAAAguB,qBAAP,SAA4BlJ,SACxB,OAAOxkB,KAAKotB,+BAA+B7I,2BAA2BvkB,KAAKmS,GAAIqS,UAG5E4J,wBAAA1uB,UAAAiuB,qBAAP,SAA4BnJ,QAAgBnS,QACxCA,OAAOC,iBACPtS,KAAKotB,+BAA+BxI,2BAA2B5kB,KAAKmS,GAAIqS,UAjDrE4J,wBAAAzqB,QAAmB,CAAC,kCAmD/ByqB,wBApDA,GAAapxB,QAAAoxB,uHCLb1wB,oBAAAgB,EAAA4S,qBAAeA,oBAAA,qyFCAf,IAAAmd,wBAAA/wB,oBAAA,KACAgxB,6BAAAhxB,oBAAA,KAEAsN,cAAA,WASA,OATA,SAAAA,gBACIhL,KAAAsX,SAAe,CACXnF,GAAI,mBACJiX,UAAW,0BACXD,eAAgB,gCAGpBnpB,KAAA8P,WAAiB2e,wBAAAE,sBACjB3uB,KAAAgQ,SAAkB0e,6BAAAze,SARtB,GAAajT,QAAAgO,8ICCb,IAAA2jB,sBAAA,WAOI,SAAAA,sBAAoBvB,gCAAAptB,KAAAotB,8DA+BbptB,KAAA4uB,gBAAkB,SAACC,OACJ,UAAdA,MAAM1vB,KAAiC,MAAd0vB,MAAM1vB,MAChB0vB,MAAMC,OACdC,QACPF,MAAMvc,mBAIlB,OApCWqc,sBAAAjvB,UAAAsvB,SAAP,WACI,OAAOhvB,KAAKopB,UAAU0D,OAGnB6B,sBAAAjvB,UAAAwpB,WAAP,SAAkB+F,MACdjvB,KAAKotB,+BAA+BlE,WAAWlpB,KAAKmS,GAAInS,KAAKmpB,eAAgBnpB,KAAKopB,UAAW6F,OAG1FN,sBAAAjvB,UAAAwvB,YAAP,SAAmBD,MACf,OAAOA,KAAKzb,SAASrV,MAGlBwwB,sBAAAjvB,UAAAyvB,mBAAP,SAA0BF,MACtB,OAAOA,KAAKzb,SAASiX,aAGlBkE,sBAAAjvB,UAAA0vB,eAAP,SAAsBH,MAClB,OAAOA,KAAKzb,SAASuZ,SAGlB4B,sBAAAjvB,UAAA2vB,oBAAP,SAA2BJ,MACvB,OAAOjvB,KAAKotB,+BAA+BhT,gBAAgB6U,KAAKzb,SAASoB,QAGtE+Z,sBAAAjvB,UAAA4vB,oBAAP,SAA2BL,MACvB,OAAOjvB,KAAKotB,+BAA+B9S,gBAAgB2U,KAAKzb,SAASoB,QAlCtE+Z,sBAAAhrB,QAAmB,CAAC,kCA6C/BgrB,sBA9CA,GAAa3xB,QAAA2xB,mHCJbjxB,oBAAAgB,EAAA4S,qBAAeA,oBAAA,kuDCAf,IAAAie,0BAAA7xB,oBAAA,KACA8xB,+BAAA9xB,oBAAA,KAEAwN,gBAAA,WAGA,OAHA,SAAAA,kBACIlL,KAAA8P,WAAiByf,0BAAAE,wBACjBzvB,KAAAgQ,SAAkBwf,+BAAAvf,SAFtB,GAAajT,QAAAkO,kJCFb,IAAA1F,sBAAA9H,oBAAA,GAEA+xB,wBAAA,WAII,SAAAA,wBAAoBvf,wBAAAlQ,KAAAkQ,8CAsCxB,OAnCWuf,wBAAA/vB,UAAAgwB,8BAAP,WACI,OAAO1vB,KAAKkQ,uBAAuB4W,uBAAyBthB,sBAAAzF,oBAAoBQ,eAG7EkvB,wBAAA/vB,UAAAiwB,+BAAP,WACI3vB,KAAKkQ,uBAAuBwW,mBAAmBlhB,sBAAAzF,oBAAoBQ,eAG/D,MAAQP,KAAKkQ,uBAAuB4S,yBACpCzlB,OAAOuyB,SAASvW,OAASrZ,KAAKkQ,uBAAuB4S,yBACrDzlB,OAAOuyB,SAAShtB,QAAQ5C,KAAKkQ,uBAAuB+S,gCAIrDwM,wBAAA/vB,UAAAmwB,0BAAP,WACI,OAAO7vB,KAAKkQ,uBAAuB4W,uBAAyBthB,sBAAAzF,oBAAoBM,UAG7EovB,wBAAA/vB,UAAAowB,2BAAP,WACI9vB,KAAKkQ,uBAAuBwW,mBAAmBlhB,sBAAAzF,oBAAoBM,WAG/D,MAAQL,KAAKkQ,uBAAuB+S,+BAAkC5lB,OAAOuyB,SAASvW,OAASrZ,KAAKkQ,uBAAuB+S,+BAC1H5lB,OAAOuyB,SAASvW,OAASrZ,KAAKkQ,uBAAuB+S,8BAA8B8M,UAAU,EAAG/vB,KAAKkQ,uBAAuB+S,8BAA8BngB,OAAS,KACpKzF,OAAOuyB,SAAShtB,QAAQ5C,KAAKkQ,uBAAuB4S,0BAIrD2M,wBAAA/vB,UAAAswB,yBAAP,WACI,OAAOhwB,KAAKkQ,uBAAuB4W,uBAAyBthB,sBAAAzF,oBAAoBO,SAG7EmvB,wBAAA/vB,UAAAuwB,0BAAP,WACIjwB,KAAKkQ,uBAAuBwW,mBAAmBlhB,sBAAAzF,oBAAoBO,UAtChEmvB,wBAAA9rB,QAAmB,CAAC,0BAwC/B8rB,wBA1CA,GAAazyB,QAAAyyB,uHCHb/xB,oBAAAgB,EAAA4S,qBAAeA,oBAAA,m6BCAf,IAAA4e,0BAAAxyB,oBAAA,KACAyyB,+BAAAzyB,oBAAA,KACAV,QAAA0M,gBAAA,SAAgBA,kBACZ,MAAO,CACH0mB,MAAO,CACHje,GAAI,sBAERvP,SAAS,EACToN,SAAUmgB,+BAAAlgB,QACVH,WAAiBogB,0BAAAG,wBACjBC,kBAAkB,EAClBC,aAAc,4HCVtB,IAAArqB,uBAAAxI,oBAAA,GAKA2yB,wBAAA,WAKI,SAAAA,wBAAmB3e,wBAAA1R,KAAA0R,8CA4CvB,OAzCW2e,wBAAA3wB,UAAA8wB,WAAP,SAAkBzW,MACd,OAAQA,MACJ,KAAK7T,uBAAA/D,qBAAqBC,QACtB,MAAO,UACX,KAAK8D,uBAAA/D,qBAAqBE,MACtB,MAAO,QACX,KAAK6D,uBAAA/D,qBAAqBG,QACtB,MAAO,KACX,QACI,MAAO,KAIZ+tB,wBAAA3wB,UAAAikB,mBAAP,WACI,OAAO3jB,KAAK0R,uBAAuBiS,sBAGhC0M,wBAAA3wB,UAAAqkB,kBAAP,WACI/jB,KAAK0R,uBAAuBqS,qBAGzBsM,wBAAA3wB,UAAAygB,gBAAP,WACI,OAAOngB,KAAK0R,uBAAuByO,mBAGhCkQ,wBAAA3wB,UAAA+wB,yBAAP,SAAgC1W,MAC5B,OAAOA,OAAS/Z,KAAKgkB,iCAGlBqM,wBAAA3wB,UAAAskB,8BAAP,WACI,OAAOhkB,KAAK0R,uBAAuBsS,iCAGhCqM,wBAAA3wB,UAAAgxB,uBAAP,SAA8BnQ,MAC1B,OAAOA,KAAKC,kBAGT6P,wBAAA3wB,UAAA0kB,8BAAP,SAAqCrK,KAA2B1H,QAC5DA,OAAOC,iBACPtS,KAAK0R,uBAAuB0S,8BAA8BrK,OA9CvDsW,wBAAA1sB,QAAmB,CAAC,0BAgD/B0sB,wBAjDA,GAAarzB,QAAAqzB,uHCNb3yB,oBAAAgB,EAAA4S,qBAAeA,oBAAA,ytCCCf,IAAAxR,SAAApC,oBAAA,GACAmP,iBAAA,oBAAAA,oBAaA,OAXWA,iBAAA1M,UAAqBL,SAAA6B,cAAc,4BAA6B,CACnEwQ,GAAI,SACJgM,uBAAuB,SACvBqJ,mBAAoB,cACpBlJ,eAAe,aAOvBzR,iBAbA,GAAa7P,QAAA6P,oJCFb,IAAA8jB,iBAAAjzB,oBAAA,KACAkzB,sBAAAlzB,oBAAA,KAEAmM,OAAA,WAMA,OANA,SAAAA,SACI7J,KAAA8P,WAAiB6gB,iBAAAE,eACjB7wB,KAAAgQ,SAAkB4gB,sBAAA3gB,QAClBjQ,KAAAsX,SAAW,CACPwZ,YAAa,MAJrB,GAAa9zB,QAAA6M,gICAb,IAAA7I,EAAAtD,oBAAA,GACAmzB,eAAA,WAGI,SAAAA,eAAoBE,qBACA9G,gBADAjqB,KAAA+wB,0CACA/wB,KAAAiqB,8BAwCxB,OAtCW4G,eAAAnxB,UAAAwR,iBAAP,WACI,OAAOlR,KAAK+wB,qBAAqB7f,oBAE9B2f,eAAAnxB,UAAA2Q,mBAAP,SAA0BQ,kBACtB7Q,KAAKiqB,eAAe1U,iBAAgB,GACpCvV,KAAK+wB,qBAAqB1gB,mBAAmBQ,mBAE1CggB,eAAAnxB,UAAAuR,8BAAP,WACI,OAAOjR,KAAK+wB,qBAAqB9f,iCAG9B4f,eAAAnxB,UAAA0Q,oBAAP,WACI,OAAOpQ,KAAK+wB,qBAAqB3gB,uBAG9BygB,eAAAnxB,UAAAsxB,uBAAP,WAKI,YAA6B/M,IAJSjjB,EAAEyW,KAAKzX,KAAK+wB,qBAAqB9f,gCAAiC,SAACN,eACrG,OAAOA,cAAcgH,YAMtBkZ,eAAAnxB,UAAAuxB,qBAAP,SAA4BpgB,kBAKxB,OAJsC7P,EAAEyW,KAAKzX,KAAK+wB,qBAAqB9f,gCAAiC,SAACN,eACrG,OAAOA,cAAcE,mBAAqBA,mBAGrB8G,UAGtBkZ,eAAAnxB,UAAAmiB,mBAAP,WACI,OAAO7hB,KAAK+wB,qBAAqBlP,sBAG9BgP,eAAAnxB,UAAAqiB,oBAAP,WACI,OAAO/hB,KAAK+wB,qBAAqBhP,uBAzC9B8O,eAAAltB,QAAmB,CAAC,uBAAwB,kBA2CvDktB,eA5CA,GAAa7zB,QAAA6zB,qGCJbnzB,oBAAAgB,EAAA4S,qBAAeA,oBAAA,s1DCAf,IAAAxR,SAAApC,oBAAA,GACAuP,UAAA,oBAAAA,aAMA,OALWA,UAAA9M,UAAqBL,SAAA6B,cAAc,qBAAsB,CAC5Dud,QAAS,SAIjBjS,UANA,GAAajQ,QAAAiQ,sICGb,IAAAjB,6BAAA,WAII,SAAAA,6BAAoBmR,mBAAAnd,KAAAmd,oCAkBxB,OAfWnR,6BAAAtM,UAAAqqB,iBAAP,WACI,OAAO/pB,KAAKmd,kBAAkBQ,eAAegO,oBAAoBuF,gBAG9DllB,6BAAAtM,UAAAwV,2BAAP,WACI,OAAOlV,KAAKmd,kBAAkBQ,eAAegO,oBAAoBwF,0BAG9DnlB,6BAAAtM,UAAAyR,4BAAP,WACI,OAAOnR,KAAKmd,kBAAkBQ,eAAegO,oBAAoByF,2BAE9DplB,6BAAAtM,UAAA2xB,oBAAP,WACI,OAAOrxB,KAAKmd,kBAAkBQ,eAAegO,oBAAoB2F,mBAjB9DtlB,6BAAArI,QAAmB,CAAC,qBAoB/BqI,6BAtBA,GAAahP,QAAAgP,4KCJb,IAAAlM,SAAApC,oBAAA,GACA8P,oBAAA,oBAAAA,uBAcA,OAZWA,oBAAArN,UAAYL,SAAA6B,cAAc,+BAAgC,CAC7DuvB,eAAgB,UAChBC,yBAA0B,UAC1BC,0BAA2B,UAC3BE,kBAAmB,YAQ3B9jB,oBAdA,GAAaxQ,QAAAwQ,0JCDb,IAAA+jB,qBAAA7zB,oBAAA,KACA8zB,0BAAA9zB,oBAAA,KAEAkM,WAAA,WAGA,OAHA,SAAAA,aACI5J,KAAA8P,WAAiByhB,qBAAAE,mBACjBzxB,KAAAgQ,SAAkBwhB,0BAAAvhB,SAFtB,GAAajT,QAAA4M,wICDb,IAAApE,sBAAA9H,oBAAA,GAEA+zB,mBAAA,WAKI,SAAAA,mBAAoBC,yBACA7H,6BACA3Z,wBAFAlQ,KAAA0xB,kDACA1xB,KAAA6pB,0DACA7pB,KAAAkQ,8CAJblQ,KAAA2xB,gBAA0B,EAqBrC,OAfWF,mBAAA/xB,UAAAuiB,uBAAP,WACI,OAAOjiB,KAAK0xB,yBAAyBzP,0BAElCwP,mBAAA/xB,UAAAkyB,kBAAP,WACI,OAAO5xB,KAAK6pB,6BAA6BwH,uBAEtCI,mBAAA/xB,UAAAmwB,0BAAP,WACI,OAAO7vB,KAAKkQ,uBAAuB4W,uBAAyBthB,sBAAAzF,oBAAoBM,UAE7EoxB,mBAAA/xB,UAAAgwB,8BAAP,WACI,OAAO1vB,KAAKkQ,uBAAuB4W,uBAAyBthB,sBAAAzF,oBAAoBQ,eAE7EkxB,mBAAA/xB,UAAAmyB,kBAAP,SAAyBC,OACrB9xB,KAAK2xB,eAAiBG,OArBnBL,mBAAA9tB,QAAmB,CAAC,2BAA4B,+BAAgC,0BAuB3F8tB,mBAxBA,GAAaz0B,QAAAy0B,6GCJb/zB,oBAAAgB,EAAA4S,qBAAeA,oBAAA,8tBCGf,IAAA7F,yBAAA,WAGI,SAAAA,yBAAoB+L,YACAqS,8BADA7pB,KAAAwX,wBACAxX,KAAA6pB,0DAUxB,OAPWpe,yBAAA/L,UAAAuiB,uBAAP,WACI,OAAOjiB,KAAKwX,YAAYyK,0BAErBxW,yBAAA/L,UAAAkyB,kBAAP,WACI,OAAO5xB,KAAK6pB,6BAA6BwH,uBAVtC5lB,yBAAA9H,QAAmB,CAAC,cAAc,gCAa7C8H,yBAdA,GAAazO,QAAAyO,oKCHb,IAAAsmB,mBAAAr0B,oBAAA,KAEAyN,IAAA,WAEA,OAFA,SAAAA,MACInL,KAAAgQ,SAAmB+hB,mBAAA9hB,SADvB,GAAajT,QAAAmO,+ECFbzN,oBAAAgB,EAAA4S,qBAAeA,oBAAA,wSCAf,IAAAxR,SAAApC,oBAAA,GAEA+P,yBAAA,oBAAAA,4BAaA,OAXWA,yBAAAtN,UAAqBL,SAAA6B,cAAc,oCAAqC,CAC3E5D,KAAM,OACNi0B,aAAc,SACdjG,YAAa,SACbkG,QAAS,YAOjBxkB,yBAbA,GAAazQ,QAAAyQ,oKCFb,IAAAykB,6BAAAx0B,oBAAA,KAEAy0B,gCAAAz0B,oBAAA,KAEAoM,sBAAA,WAGA,OAHA,SAAAA,wBACQ9J,KAAA8P,WAAiBqiB,gCAAAC,8BACjBpyB,KAAAgQ,SAAkBkiB,6BAAAjiB,SAF1B,GAAajT,QAAA8M,mHCJbpM,oBAAAgB,EAAA4S,qBAAeA,oBAAA,mdCEf,IAAA8gB,8BAAA,WAGI,SAAAA,8BAAoBC,4BAAAryB,KAAAqyB,sDAkBxB,OAfWD,8BAAA1yB,UAAAijB,kBAAP,WACI3iB,KAAKqyB,2BAA2B1P,qBAG7ByP,8BAAA1yB,UAAAsyB,aAAP,WACI,OAAOhyB,KAAKqyB,2BAA2B5P,8BAA8BuP,cAGlEI,8BAAA1yB,UAAAuyB,QAAP,WACI,OAAOjyB,KAAKqyB,2BAA2B5P,8BAA8BwP,SAGlEG,8BAAA1yB,UAAA4yB,gBAAP,WACI,OAAOtyB,KAAKqyB,2BAA2B5P,8BAA8BsJ,aAlBlEqG,8BAAAzuB,QAAoB,CAAC,uCAoBhCyuB,8BArBA,GAAap1B,QAAAo1B,8KCEb,IAAAtmB,oCAAA,WAGI,SAAAA,oCAAoB0L,aAAAxX,KAAAwX,wBASxB,OAPW1L,oCAAApM,UAAA+iB,4BAAP,WACI,OAAOziB,KAAKwX,YAAYiL,+BAGrB3W,oCAAApM,UAAAijB,kBAAP,WACI,OAAO3iB,KAAKwX,YAAYmL,qBATrB7W,oCAAAnI,QAAmB,CAAC,eAW/BmI,oCAZA,GAAa9O,QAAA8O,0LCJb,IAAAymB,6BAAA70B,oBAAA,KACA80B,gCAAA90B,oBAAA,KAEAqM,iBAAA,WAOA,OAPA,SAAAA,mBACE/J,KAAAsX,SAAe,CACbmb,QAAQ,2BACR5H,cAAc,kBAEhB7qB,KAAA8P,WAAiByiB,6BAAAG,2BACjB1yB,KAAAgQ,SAAkBwiB,gCAAAviB,SANpB,GAAajT,QAAA+M,oJCAb,IAAA4oB,UAAAj1B,oBAAA,IAEAg1B,2BAAA,oBAAAA,6BAGY1yB,KAAAyyB,QAA+B,GA+B3C,OA3BWC,2BAAAhzB,UAAAkzB,aAAP,SAAoBriB,OAChBvQ,KAAK6yB,eAAiBtiB,OAG1BjS,OAAAC,eAAIm0B,2BAAAhzB,UAAA,gBAAa,KAIjB,WACI,OAAOM,KAAK6yB,oBALhB,SAAkBtiB,OACdvQ,KAAK6yB,eAAiBtiB,uCAQnBmiB,2BAAAhzB,UAAA6C,gCAAP,SAAuCuwB,oBAA6BC,YAChE,OAAOJ,UAAApwB,gCACHuwB,oBACAC,WACA,KAIDL,2BAAAhzB,UAAAszB,iBAAP,WACI,OAAOhzB,KAAKizB,aAAanwB,OAAS,GAE/B4vB,2BAAAhzB,UAAAuzB,WAAP,WACI,OAAOjzB,KAAKyyB,SA/BTC,2BAAA/uB,QAAmB,CAAC,0BAiC/B+uB,2BAlCA,GAAa11B,QAAA01B,6HCLbh1B,oBAAAgB,EAAA4S,qBAAeA,oBAAA,o7BCAf,IAAA4hB,+BAAAx1B,oBAAA,KACAy1B,kCAAAz1B,oBAAA,KAEAkN,mBAAA,WAMA,OANA,SAAAA,qBACI5K,KAAAsX,SAAe,CACXnF,GAAI,oBAERnS,KAAA8P,WAAiBojB,+BAAAE,6BACjBpzB,KAAAgQ,SAAkBmjB,kCAAAljB,SALtB,GAAajT,QAAA4N,wJCDb,IAAAwoB,6BAAA,WAMI,SAAAA,6BAAoB1hB,wBAAA1R,KAAA0R,8CA2BxB,OAxBW0hB,6BAAA1zB,UAAAmY,uBAAP,WACI,OAAO7X,KAAK0R,uBAAuBmG,0BAGhCub,6BAAA1zB,UAAAof,eAAP,WACI9e,KAAK0R,uBAAuBoN,eAAe9e,KAAKmS,KAG7CihB,6BAAA1zB,UAAAwqB,iBAAP,WACI,OAAOlqB,KAAK0R,uBAAuBwY,iBAAiBlqB,KAAKmS,KAGtDihB,6BAAA1zB,UAAA0T,gBAAP,WACI,OAAOpT,KAAK0R,uBAAuB0B,gBAAgBpT,KAAKmS,KAGrDihB,6BAAA1zB,UAAAwT,mBAAP,WACI,OAAOlT,KAAK0R,uBAAuBwB,mBAAmBlT,KAAKmS,IAAM,kBAG9DihB,6BAAA1zB,UAAA2V,4BAAP,WACI,OAAOrV,KAAK0R,uBAAuB2D,+BA5BhC+d,6BAAAzvB,QAAmB,CAAC,0BA+B/ByvB,6BAjCA,GAAap2B,QAAAo2B,iICFb11B,oBAAAgB,EAAA4S,qBAAeA,oBAAA,69BCAf,IAAAxR,SAAApC,oBAAA,GAEAsL,wBAAAtL,oBAAA,IAGAwO,wBAAA,WAMI,SAAAA,wBAA6Buc,gBACAtL,kBACA9Q,cAFArM,KAAAyoB,gCACAzoB,KAAAmd,oCACAnd,KAAAqM,0BACzBrM,KAAKqzB,yBAA2BrzB,KAAKmd,kBAAkBQ,eAAeiO,uBA+E9E,OA5EI1f,wBAAAxM,UAAA8d,QAAA,eAAA5L,MAAA5R,KACIA,KAAKqM,aAAainB,UAAUtqB,wBAAApF,OAAO2I,+BAAgC,WAC/DqF,MAAK2hB,eAINrnB,wBAAAxM,UAAA6zB,UAAP,WACI,IAAMpY,KAAOnb,KAAKqzB,yBACd,CACIxE,MAAQ,OACR2E,KAAO,CACHC,aAAUxP,EACVyP,SAAW,YACXC,qBAAkB1P,EAClB2P,YAAc,SACd5jB,SAAU,6BAIlB,CACI6jB,aAAe,2BACfL,KAAO,IAGfxzB,KAAK0pB,MAAMvO,OAERjP,wBAAAxM,UAAAoX,wCAAP,SAA+CH,uBAAiDmd,YAAqB3J,SACjH,IAAMnM,IAAMrH,uBAAuBqH,IAAI,SAACnH,sBAAuBib,OAAU,OAAAiC,SAAA,CACrE51B,KAAM0Y,sBAAsB1Y,KAC5B61B,SAAUnd,sBAAsBmd,SAChCC,KAAMH,aACHjd,sBAAsBmU,WAAU,CACnCkJ,UAAW/J,QAAQ2H,MAAM,GAAGvZ,eAG1B4C,KACF,CACI0T,MAAO,oBACPsF,KAAM,MACNC,KAAM,oBACNC,KAAM,GACNC,gBAAgB,EAChBC,mBAAkBR,SAAA,GAAO/zB,KAAKmd,kBAAkBQ,eAAekO,0BAC/D2I,UAAW,CACPC,YAAiBzW,IAAGtH,UAGhC1W,KAAK0pB,MAAMvO,OAERjP,wBAAAxM,UAAA2qB,kBAAP,SAAyBxT,sBAA8C+O,qBAA6BuE,SAChG,IAAMhP,KAAO,CACT0T,MAAO,eACPsF,KAAM,MACNC,KAAM,eACNC,KAAM,GACNC,gBAAgB,EAChBC,mBAAkBR,SAAA,GAAO/zB,KAAKmd,kBAAkBQ,eAAekO,0BAC/D2I,UAAW,CACPzF,MAAO,CACH2F,YAAa,CAACT,KAAQrO,sBACtB+O,SAAU,CAAAZ,SAAA,CACN51B,KAAM0Y,sBAAsB1Y,KAC5B61B,SAAUnd,sBAAsBmd,UAC7Bnd,sBAAsBmU,WAAU,CACnCkJ,UAAW/J,QAAQ,GAAG5R,iBAKtCvY,KAAK0pB,MAAMvO,OAGPjP,wBAAAxM,UAAAgqB,MAAR,SAAcvO,MACVnb,KAAKyoB,gBAAgBiB,MAAM,IAAI5pB,SAAA80B,aAAgC,CAACC,WAAYzc,KAAKE,UAAU6C,UAnFxFjP,wBAAAvI,QAAoB,CAAC,kBAAmB,oBAAqB,gBAsFxEuI,wBAxFA,GAAalP,QAAAkP,0ECLbjP,OAAAD,QAAAQ,mJCAA,IAAAsC,SAAApC,oBAAA,GAEAqP,sBAAA,oBAAAA,yBAWA,OATWA,sBAAA5M,UAAYL,SAAA6B,cAAc,iCAAkC,CAC/DqpB,WAAY,MACZ7sB,KAAM,SACN61B,SAAU,WAMlBjnB,sBAXA,GAAa/P,QAAA+P,8JCFb,IAAAjN,SAAApC,oBAAA,GAEAkP,yBAAA,oBAAAA,4BAWA,OATWA,yBAAAzM,UAAsBL,SAAA6B,cAAc,oCAAqC,CAC5EmzB,kBAAmB,SACnBC,UAAW,UACXC,UAAW,WAMnBpoB,yBAXA,GAAa5P,QAAA4P,oKCFb,IAAA2E,mBAAA7T,oBAAA,KACAu3B,2BAAAv3B,oBAAA,KACAwM,YAAA,WAMA,OANA,SAAAA,cACIlK,KAAA8P,WAAiByB,mBAAAE,iBACjBzR,KAAAgQ,SAAkBilB,2BAAAhlB,QAClBjQ,KAAAsX,SAAW,CACPqa,eAAgB,MAJxB,GAAa30B,QAAAkN,0ICKb,IAAAuH,iBAAA,WAII,SAAAA,iBAAoBC,uBACAxB,uBACAyB,wBACA6F,aAHpB,IAAA5F,MAAA5R,KAAoBA,KAAA0R,8CACA1R,KAAAkQ,8CACAlQ,KAAA2R,gDACA3R,KAAAwX,wBALpBxX,KAAA6R,uBAAyB,GAOrBxU,OAAOyU,iBAAiB,OAAQ,WAE5BF,MAAKG,mCAIT1U,OAAOyU,iBAAiB,SAAU,WAE9BF,MAAKG,mCAwHjB,OApHWN,iBAAA/R,UAAA2R,kBAAP,WACI,OAAOrR,KAAKkQ,uBAAuBmB,qBAEhCI,iBAAA/R,UAAAwY,cAAP,eAAAtG,MAAA5R,KACUk1B,QAAUl1B,KAAKkQ,uBAAuBmB,oBACxC8jB,gBAAkB,EAClBC,WAAa,GACjBF,QAAQnc,QAAQ,SAACwH,MACb6U,WAAWlf,KAAK,CACZmf,QAAQ,WACRnB,SAAYiB,kBACZ5U,KAAQnI,KAAKC,MAAMzG,MAAK4F,YAAYU,cAAcqI,WAG1D,IAAI+U,gBAAkB,CAClBC,WAAY,qBACZF,QAAS,WACTG,gBAAmBJ,YAGvB,MAAO,sCADYhd,KAAKE,UAAUgd,iBAC4B,cAG3D7jB,iBAAA/R,UAAAsS,eAAP,WACI,OAAOhS,KAAKkQ,uBAAuB8B,kBAGhCP,iBAAA/R,UAAAuS,aAAP,WACIjS,KAAKkQ,uBAAuB+B,gBAGzBR,iBAAA/R,UAAAwS,iBAAP,SAAwBC,IACpB,OAAOnS,KAAK0R,uBAAuBQ,iBAAiBC,KAGjDV,iBAAA/R,UAAA0S,iBAAP,SAAwBD,GAAWE,QAC/BA,OAAOC,iBACPtS,KAAK0R,uBAAuBU,iBAAiBD,KAG1CV,iBAAA/R,UAAAgT,6BAAP,WACI,OAAO1S,KAAK0R,uBAAuBgB,gCAGhCjB,iBAAA/R,UAAAiT,cAAP,SAAqBR,IACjB,OAAOnS,KAAK0R,uBAAuBiB,cAAcR,KAG9CV,iBAAA/R,UAAAsT,yBAAP,WACI,OAAOhT,KAAK0R,uBAAuBsB,4BAE/BvB,iBAAA/R,UAAAqS,+BAAR,qBAAAH,MAAA5R,KACOA,KAAK0R,uBAAuB4D,oBAC3BtV,KAAK6R,uBAAyB,GAC9B7R,KAAK0R,uBAAuB6D,iBAAgB,IAKhD,IAHA,IAAMC,eAAiB1C,SAAS2C,iBAAiB,kCAC3CC,cAAgB,GAEb9X,EAAI,EAAGA,EAAI4X,eAAe1S,OAAQlF,IAAK,CAC5C,IAAI+X,MAAQH,eAAe5X,GAAGuU,GAC1ByD,OAASJ,eAAe5X,GAAGiY,wBAAwBC,IACnDC,UAAYP,eAAe5X,GAAGiY,wBAAwBG,OAEtDJ,OAASvY,OAAO4Y,aAAeF,WAAa,GAC5CL,cAAcQ,KAAKP,OAG3B,IAEMQ,mBAFgBnW,KAAKqR,oBACa+E,OAAO,SAAAC,IAAM,OAAAX,cAAcY,KAAK,SAAAC,WAAa,OAAAA,YAAcF,OACtDD,OAAO,SAAAC,IAAM,OAACzE,MAAKC,uBAAuByE,KAAK,SAAAE,gBAAkB,OAAAA,iBAAmBH,OAEjI,GAAIF,mBAAmBrT,QAAU,EAAG,CAKhC,IAFA,IAAM2T,IAAMN,mBAAmBO,MAAM,EAAG,GAClCC,uBAAyB,GACtBC,IAAI,EAAGA,IAAIH,IAAI3T,OAAQ8T,MAAK,CAGH,QADxBC,sBAAwB7W,KAAK0R,uBAAuB4B,iBAAiBmD,IAAIG,MAAIC,wBAE/EF,uBAAuBT,KAAKW,uBAGpC7W,KAAK2R,wBAAwBmF,wCAAwCH,uBAAwB3W,KAAK0R,uBAAuBqF,2BAA4B/W,KAAK6R,uBAAuB/O,SACjLkU,GAAAhX,KAAK6R,wBAAuBqE,KAAIe,MAAAD,GAAIb,mBAAmBO,MAAM,EAAG,SAC7D,GAAIP,mBAAmBrT,OAAS,EAAG,CAGhC2T,IAAMN,mBACNQ,uBAAyB,GAC/B,IAFA,IAESO,IAAI,EAAGA,IAAIT,IAAI3T,OAAQoU,MAAK,CAEjC,IAAML,sBACwB,QADxBA,sBAAwB7W,KAAK0R,uBAAuB4B,iBAAiBmD,IAAIS,MAAIL,wBAE/EF,uBAAuBT,KAAKW,uBAGpC7W,KAAK2R,wBAAwBmF,wCAAwCH,uBAAwB3W,KAAK0R,uBAAuBqF,2BAA4B/W,KAAK6R,uBAAuB/O,SACjLqU,GAAAnX,KAAK6R,wBAAuBqE,KAAIe,MAAAE,GAAIhB,sBAGrC1E,iBAAA/R,UAAA+1B,oBAAP,WACI,OAA6B,IAAzBz1B,KAAK2xB,gBAAgD,MAAvB3xB,KAAK2xB,eAC5B,aAEJ,aAAY3xB,KAAK2xB,eAAiB,IAItClgB,iBAAA/R,UAAAg2B,eAAP,WACI,OAA6B,IAAzB11B,KAAK2xB,gBAAgD,MAAvB3xB,KAAK2xB,eAC5B,QAEJ,QAAO3xB,KAAK2xB,eAAiB,IAtIjClgB,iBAAA9N,QAAmB,CAAC,yBAA0B,yBAA0B,0BAA2B,eAwI9G8N,iBAzIA,GAAazU,QAAAyU,yGCPb/T,oBAAAgB,EAAA4S,qBAAeA,oBAAA,sgCCAf,IAAAqkB,yBAAAj4B,oBAAA,KACAk4B,4BAAAl4B,oBAAA,KAEAyM,aAAA,WAOA,OAPA,SAAAA,eACInK,KAAAsX,SAAe,CACXnF,GAAI,+BACJ4H,KAAM,uBAEV/Z,KAAA8P,WAAiB6lB,yBAAAE,uBACjB71B,KAAAgQ,SAAkB4lB,4BAAA3lB,SANtB,GAAajT,QAAAmN,4ICGb,IAAAwoB,UAAAj1B,oBAAA,IAIAm4B,uBAAA,WAaI,SAAAA,uBAAoBnkB,uBAAwD8F,aAAxDxX,KAAA0R,8CAAwD1R,KAAAwX,wBANpExX,KAAAyyB,QAA+B,GAIhCzyB,KAAA+Z,KAAyC,SAG5C/Z,KAAK81B,SAAW91B,KAAK+1B,qBA4V7B,OA1VYF,uBAAAn2B,UAAAq2B,mBAAR,WACI,IAAMC,UAAYC,UAAUD,WAAaC,UAAUC,OACnD,MAAO,2BAA2BC,KAAKH,UAAUI,gBAE9CP,uBAAAn2B,UAAA22B,cAAP,WAII,OAHKr2B,KAAKs2B,UACNt2B,KAAKs2B,QAAUt2B,KAAK0R,uBAAuBoC,UAAU9T,KAAKmS,KAEvDnS,KAAKs2B,SAGTT,uBAAAn2B,UAAA62B,kBAAP,SAAyBzE,OAErB,QAAI9xB,KAAK81B,UAAYhE,MAAQ,OAIxB9xB,KAAK81B,UAAYhE,MAAQ,IAM3B+D,uBAAAn2B,UAAAgY,uBAAP,WACI,OAAO1X,KAAK0R,uBAAuBgG,uBAAuB1X,KAAKmS,KAG5D0jB,uBAAAn2B,UAAA6jB,kBAAP,WACI,OAAOoP,UAAAxvB,mBAAmBnD,KAAKwX,YAAY+L,kBAAkBvjB,KAAKmS,MAG/D0jB,uBAAAn2B,UAAA6C,gCAAP,SAAuCuwB,oBAA6BC,YAChE,OAAOJ,UAAApwB,gCACHuwB,oBACAC,WACA,KAID8C,uBAAAn2B,UAAAszB,iBAAP,WACI,OAAOhzB,KAAKizB,aAAanwB,OAAS,GAE/B+yB,uBAAAn2B,UAAAuzB,WAAP,WACI,OAAOjzB,KAAKyyB,SAEToD,uBAAAn2B,UAAAoU,UAAP,WACI,OAAO9T,KAAK0R,uBAAuBoC,UAAU9T,KAAKmS,KAE/C0jB,uBAAAn2B,UAAA+a,aAAP,WACI,OAAOza,KAAK0R,uBAAuB+I,aAAaza,KAAKmS,KAElD0jB,uBAAAn2B,UAAAoY,uBAAP,WACI,OAAO9X,KAAK0R,uBAAuBoG,uBAAuB9X,KAAKmS,KAG5D0jB,uBAAAn2B,UAAAib,4BAAP,WACI,IAAMnH,SAAWxT,KAAK0a,cACtB,OAAOlH,SAAWA,SAASoH,yBAA2B,IAGlDib,uBAAAn2B,UAAAgb,YAAR,WACI,IAAM7G,OAAS7T,KAAKq2B,gBACpB,OAAOxiB,OAASA,OAAOL,SAAW,MAG/BqiB,uBAAAn2B,UAAA0T,gBAAP,WACI,OAAOpT,KAAK0R,uBAAuB0B,gBAAgBpT,KAAKmS,KAErD0jB,uBAAAn2B,UAAAiU,eAAP,SAAsB6iB,0BAAA,IAAAA,2CAAA,GAClB,IAAI7d,KAAO7F,SAAS8F,cAAc,OAClCD,KAAKE,UAAY7Y,KAAK0R,uBAAuBiC,eAAe3T,KAAKmS,IACjE,IAAIskB,QAAU9d,KAAKlD,iBAAiB,KAChCghB,SACAA,QAAQ1d,QAAQ,SAAAK,QACZA,OAAOH,aAAa,UAAW,sDAGvC,IAAIH,MAAQH,KAAKlD,iBAAiB,OAC9BqD,OACAA,MAAMC,QAAQ,SAACC,KACXA,IAAIC,aAAa,QAAS,gBAIlC,IAAIC,cAAgBpG,SAAS8F,cAAc,OAC3CM,cAAcL,UAAY7Y,KAAK0R,uBAAuByH,oBAAoBnZ,KAAKmS,IAGxD+G,cAAczD,iBAAiB,KACrCsD,QAAQ,SAAAK,QACrBA,OAAOH,aAAa,UAAW,sDAEnC,IAAMyd,iBAAmBF,oBAAsB,sBAAwB,GACvE,MAAO,uEAAyEtd,cAAcL,UAAY,kCAAkC6d,iBAAgB,IAAM/d,KAAKE,UAAY,gBAGhLgd,uBAAAn2B,UAAAyT,qBAAP,WACI,OAAOnT,KAAK0R,uBAAuByB,qBAAqBnT,KAAKmS,KAG1D0jB,uBAAAn2B,UAAAgU,kBAAP,WACI,OAAO1T,KAAK0R,uBAAuBgC,kBAAkB1T,KAAKmS,KAEvD0jB,uBAAAn2B,UAAAwT,mBAAP,WACI,OAAOlT,KAAK0R,uBAAuBwB,mBAAmBlT,KAAKmS,KAExD0jB,uBAAAn2B,UAAAkiB,oBAAP,WACI,OAAO5hB,KAAK0R,uBAAuBkQ,oBAAoB5hB,KAAKmS,KAGzD0jB,uBAAAn2B,UAAA+U,+BAAP,WACI,IAAIZ,OAAS7T,KAAKq2B,gBACdniB,OAAS,EAIb,OAHIL,QAAuC,MAA7BA,OAAOa,qBACjBR,OAASL,OAAOa,oBAEb1U,KAAK0R,uBAAuB2C,YAAYH,QAAQ,GAAQ,MAG5D2hB,uBAAAn2B,UAAAkU,4BAAP,WACI,OAAO5T,KAAK0R,uBAAuB2C,YAC/BrU,KAAKqa,YACL,GACA,MAGDwb,uBAAAn2B,UAAAi3B,SAAP,WACI,IAAMnqB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,OACI3F,QACAA,OAAOqK,uBACPrK,OAAOqK,sBAAsBmU,YAC7Bxe,OAAOqK,sBAAsBmU,WAAW4L,MAEjCpqB,OAAOqK,sBAAsBmU,WAAW4L,MAE5C,IAGJf,uBAAAn2B,UAAAm3B,uBAAP,WACI,IAAMrqB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IAEjE,OAAI3F,QAAUA,OAAO+G,UAAY/G,OAAO+G,SAASC,UAAYhH,OAAO+G,SAASC,SAASrV,KAC3EqO,OAAO+G,SAASC,SAASrV,KAE7B,IAGJ03B,uBAAAn2B,UAAAo3B,mBAAP,WACI,IAAMtqB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,OACI3F,QACAA,OAAOoI,OACPpI,OAAOoI,MAAMpB,UACbhH,OAAOoI,MAAMpB,SAASqB,4BAEfrI,OAAOoI,MAAMpB,SAASqB,4BAA4BjS,QAAQ,UAAW,IAEzE,IAGJizB,uBAAAn2B,UAAAqV,oBAAP,WACI,IAAMvI,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,OAAI3F,QAAUA,OAAOoI,OAA0C,MAAjCpI,OAAOoI,MAAMK,iBAChC6F,OAAOtO,OAAOoI,MAAMK,kBAAkB8F,QAAQ,GAAK,KAEvD,IAGJ8a,uBAAAn2B,UAAAq3B,oBAAP,WACI,IAAMvqB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,OACI3F,QACAA,OAAOqK,uBACPrK,OAAOqK,sBAAsBmU,YAC7Bxe,OAAOqK,sBAAsBmU,WAAWgM,YAEjCxqB,OAAOqK,sBAAsBmU,WAAWgM,YAE5C,IAEJnB,uBAAAn2B,UAAAu3B,wBAAP,WACI,IAAMzqB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,OACI3F,QACAA,OAAOqK,uBACPrK,OAAOqK,sBAAsBmU,YAC7Bxe,OAAOqK,sBAAsBmU,WAAWkM,UAEvB1qB,OAAOqK,sBAAsBmU,WAAWkM,SAElCzL,MAAM,KAEhB,IAEV,IAEJoK,uBAAAn2B,UAAAy3B,qBAAP,WACI,IAAM3qB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,OACI3F,QACAA,OAAOqK,uBACPrK,OAAOqK,sBAAsBmU,YAC7Bxe,OAAOqK,sBAAsBmU,WAAWoM,wBAEjC5qB,OAAOqK,sBAAsBmU,WAAWoM,wBAA0B,KAEtE,IAGJvB,uBAAAn2B,UAAA23B,4BAAP,WACI,IAAM7qB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,OACI3F,QACAA,OAAOoI,OACPpI,OAAOoI,MAAMpB,UACbhH,OAAOoI,MAAMpB,SAASoH,yBAEfpO,OAAOoI,MAAMpB,SAASoH,yBAE1B,IAGJib,uBAAAn2B,UAAA43B,sBAAP,WACI,IAAM9qB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IAC3DsY,YACFje,QACAA,OAAOoI,OACPpI,OAAOoI,MAAMpB,UACbhH,OAAOoI,MAAMpB,SAASoH,yBAE1B,IAAK6P,YACD,MAAO,SAEX,IAAM1nB,MAAQ0nB,YAAY1nB,MAAM,sBAChC,IAAKA,MACD,MAAO,SAEX,IAAMlE,MAAQkE,MAAM,GACfH,QAAQ,IAAK,IACbC,OACAD,QAAQ,IAAK,KAElB,OADuBkY,OAAOjc,OAAOkc,QAAQ,GAAGnY,QAAQ,IAAK,KACrC,MAGrBizB,uBAAAn2B,UAAA63B,uBAAP,WACI,IAAM/qB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,OACI3F,QACAA,OAAOqK,uBACPrK,OAAOqK,sBAAsBmU,YAC7Bxe,OAAOqK,sBAAsBmU,WAAWoM,wBAEjCI,WACHhrB,OAAOqK,sBAAsBmU,WAAWoM,yBAGzC,IAGJvB,uBAAAn2B,UAAA+3B,uBAAP,WACI,IAAMjrB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,KACK3F,QACAA,OAAOoI,OACPpI,OAAOoI,MAAMpB,UACbhH,OAAOoI,MAAMpB,SAASqB,6BAEvB,MAAO,GAEX,IAAM6iB,KAAOlrB,OAAOoI,MAAMpB,SAASqB,4BAC7B9R,MAAQ20B,KAAK30B,MAAM,SACzB,OAAKA,MAEE,WADQG,SAASH,MAAM,GAAI,IAAM,GACZ,UAFT20B,MAKhB7B,uBAAAn2B,UAAAi4B,sBAAP,WACI,IAAM94B,MAAQmB,KAAK0R,uBAAuBkQ,oBAAoB5hB,KAAKmS,IACnE,IAAKtT,MACD,MAAO,GAEX,IAAMkE,MAAQlE,MAAMkE,MAAM,eAC1B,OAAOA,MAAQA,MAAM,GAAK,IAGvB8yB,uBAAAn2B,UAAA6U,mBAAP,WACI,IAAM/H,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IACjE,OACI3F,QACAA,OAAO+G,UACP/G,OAAO+G,SAASC,UAChBhH,OAAO+G,SAASC,SAASgB,WAElBhI,OAAO+G,SAASC,SAASgB,WAE7B,IAGJqhB,uBAAAn2B,UAAAk4B,gBAAP,WACI,IAAIzc,KAAOnb,KAAKwX,YAAY4D,oBAAoBpb,KAAKmS,IACrD,OAAOgJ,KAAOA,KAAKuR,SAAW,IAG3BmJ,uBAAAn2B,UAAAm4B,wBAAP,WACI,IAAI1c,KAAOnb,KAAKwX,YAAY4D,oBAAoBpb,KAAKmS,IACrD,OAAOgJ,KAAOA,KAAKwR,YAAc,IAG9BkJ,uBAAAn2B,UAAAo4B,qBAAP,WACI,IAAI3c,KAAOnb,KAAKwX,YAAY4D,oBAAoBpb,KAAKmS,IACrD,OAAOgJ,KAAOA,KAAKyR,SAAW,IAG3BiJ,uBAAAn2B,UAAA2T,kBAAP,WACI,IAAM8H,KAAOnb,KAAKwX,YAAY4D,oBAAoBpb,KAAKmS,IACvD,SAAOgJ,MAA+B,MAAvBA,KAAK1H,iBAAyB0H,KAAK1H,gBAG/CoiB,uBAAAn2B,UAAAq4B,kBAAP,WACI,IAAMvrB,OAASxM,KAAK0R,uBAAuB4B,iBAAiBtT,KAAKmS,IAEjE,OAAK3F,QAAWA,OAAOoI,OAA2C,MAAlCpI,OAAOoI,MAAMT,kBAItC3H,OAAOoI,MAAMT,kBAAoB,KAH7B,IAKP0hB,uBAAAn2B,UAAA2a,SAAR,WACI,IAAMxG,OAAS7T,KAAKq2B,gBACpB,IAAKxiB,OACD,OAAO,EAEX,OAAQ7T,KAAK+Z,MACT,IAAK,WACD,OAAqC,MAA9BlG,OAAO0G,oBAA8B1G,OAAO0G,oBAAsB,EAC7E,IAAK,SACD,OAAmC,MAA5B1G,OAAO2G,kBAA4B3G,OAAO2G,kBAAoB,EACzE,IAAK,SACD,OAAmC,MAA5B3G,OAAOM,kBAA4BN,OAAOM,kBAAoB,EACzE,QACI,OAAmC,MAA5BN,OAAO2G,kBAA4B3G,OAAO2G,kBAAoB,IArW1Eqb,uBAAAlyB,QAAmB,CAAC,yBAA0B,eAyWzDkyB,uBA1WA,GAAa74B,QAAA64B,qHCVbn4B,oBAAAgB,EAAA4S,qBAAeA,oBAAA,s3LCAf,IAAA0mB,yBAAAt6B,oBAAA,KACAu6B,sBAAAv6B,oBAAA,KAEAiN,eAAA,WAQA,OARA,SAAAA,iBACI3K,KAAAsX,SAAe,CACXyC,KAAM,sBACNlG,OAAQ,wBACRmG,UAAU,4BAEdha,KAAA8P,WAAiBkoB,yBAAAE,uBACjBl4B,KAAAgQ,SAAkBioB,sBAAAhoB,SAPtB,GAAajT,QAAA2N,gJCCb,IAAAutB,uBAAA,WAQI,SAAAA,uBAAoBxmB,wBAAA1R,KAAA0R,8CAgExB,OA7DIpT,OAAAC,eAAI25B,uBAAAx4B,UAAA,OAAI,KAKR,WACI,OAAOM,KAAKka,WANhB,SAASC,GACLla,aAAaC,UAAW,sDACxBF,KAAKka,MAAQC,mCAOV+d,uBAAAx4B,UAAA0a,gBAAP,WACI,OAAOpa,KAAK0R,uBAAuB0I,gBAAgBpa,KAAKqa,aAGrD6d,uBAAAx4B,UAAA4a,gBAAP,WACI,OAAOta,KAAK0R,uBAAuB4I,gBAAgBta,KAAKqa,aAGpD6d,uBAAAx4B,UAAA2a,SAAR,WACI,OAAQra,KAAK+Z,MACT,IAAK,WACD,OAAO/Z,KAAK6T,OAAO0G,oBACvB,IAAK,SACD,OAAOva,KAAK6T,OAAO2G,kBACvB,IAAK,SACD,OAAOxa,KAAK6T,OAAOM,kBACvB,QACI,OAAO,IAIZ+jB,uBAAAx4B,UAAAwV,2BAAP,WACI,OAAOlV,KAAK0R,uBAAuBwD,8BAGhCgjB,uBAAAx4B,UAAA+a,aAAP,WACI,OAAOza,KAAKga,WAGTke,uBAAAx4B,UAAAiV,+BAAP,WACI,OAAO3U,KAAK0a,cAAc7F,6BAGvBqjB,uBAAAx4B,UAAA+U,+BAAP,WACI,OAAOzU,KAAK0R,uBAAuB2C,YAAYrU,KAAK6T,OAAOa,oBAAmB,IAG3EwjB,uBAAAx4B,UAAAkU,4BAAP,WACI,OAAO5T,KAAK0R,uBAAuB2C,YAAYrU,KAAKqa,YAAW,IAG5D6d,uBAAAx4B,UAAAib,4BAAP,WACI,MAAiE,SAA9D3a,KAAK0a,cAAcE,yBAAyB6Q,MAAM,KAAK,GAC/C,SAEAzrB,KAAK0a,cAAcE,0BAI1Bsd,uBAAAx4B,UAAAgb,YAAR,WACI,OAAO1a,KAAK6T,OAAOL,UArEhB0kB,uBAAAv0B,QAAmB,CAAC,0BAuE/Bu0B,uBAxEA,GAAal7B,QAAAk7B,qHCJbx6B,oBAAAgB,EAAA4S,qBAAeA,oBAAA,i3BCAf,IAAAxR,SAAApC,oBAAA,GAEAmR,iBAAA,oBAAAA,oBASA,OAPWA,iBAAA1O,UAAYL,SAAA6B,cAAc,mBAAoB,CACjD2hB,iBAAkB,SAClBD,sBAAuB,WAK/BxU,iBATA,GAAa7R,QAAA6R","file":"topofferBundle.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@shop/common\"), require(\"underscore\"), require(\"angular\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@shop/common\", \"underscore\", \"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"topoffer\"] = factory(require(\"@shop/common\"), require(\"underscore\"), require(\"angular\"));\n\telse\n\t\troot[\"topoffer\"] = factory(root[\"common\"], root[\"_\"], root[\"angular\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__1__, __WEBPACK_EXTERNAL_MODULE__135__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 12);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","import {MetaInfo, enumMetaInfo} from \"@shop/common\";\nexport class TariffSelectionType {\n\n    static META_INFO:MetaInfo = enumMetaInfo('topOffer:TariffSelectionType');\n\n    static POSTPAID:TariffSelectionType = new TariffSelectionType('POSTPAID');\n    static PREPAID:TariffSelectionType = new TariffSelectionType('PREPAID');\n    static HARDWARE_ONLY:TariffSelectionType = new TariffSelectionType('HARDWARE_ONLY');\n\n    constructor(public name:string) {\n        argsContract(arguments, 'str');\n    }\n}\n","export class AbstractTechnicalDetailsValue {\n    keyName:string;\n\n    public isBooleanTypedField():boolean {\n        throw new Error('This method is abstract');\n    }\n}\n","import {enumMetaInfo, MetaInfo} from \"@shop/common\";\nexport class CriteriaGroupType {\n\n    static META_INFO:MetaInfo = enumMetaInfo('topOffer:CriteriaGroupType');\n\n    private static _values:{ [s:string]:CriteriaGroupType; } = {};\n\n    static forName(obj):CriteriaGroupType {\n        argsContract(arguments, 'string | null');\n        if (obj === null) {\n            return null;\n        }\n        return CriteriaGroupType._values[obj];\n    }\n\n    static values():CriteriaGroupType[] {\n        return _.values(CriteriaGroupType._values);\n    }\n\n\n    static MANUFACTURER:CriteriaGroupType = new CriteriaGroupType(\"MANUFACTURER\");\n    static OTHER:CriteriaGroupType = new CriteriaGroupType(\"OTHER\");\n\n    constructor(public name:string) {\n        argsContract(arguments, 'str');\n        CriteriaGroupType._values[name] = this;\n    }\n\n}\n\n","import {MetaInfo, enumMetaInfo} from \"@shop/common\";\nexport class StockHintType {\n\n    static META_INFO:MetaInfo = enumMetaInfo('topOffer:StockHintType');\n\n    static ON_STOCK:StockHintType = new StockHintType('ON_STOCK');\n    static ON_STOCK_LIMITED_AVAILABILITY:StockHintType = new StockHintType('ON_STOCK_LIMITED_AVAILABILITY');\n    static VIRTUAL_STOCK:StockHintType = new StockHintType('VIRTUAL_STOCK');\n    static OUT_OF_STOCK:StockHintType = new StockHintType('OUT_OF_STOCK');\n\n    constructor(public name:string) {\n        argsContract(arguments, 'str');\n    }\n}\n","import {valueMetaInfo} from \"@shop/common\";\nimport {AbstractTechnicalDetailsValue} from \"./AbstractTechnicalDetailsValue\";\n\nexport class StringTechnicalDetailsValue extends AbstractTechnicalDetailsValue {\n\n    static META_INFO = valueMetaInfo('topOffer:StringTechnicalDetailsValue', {\n        keyName: 'string | null',\n        keyValue: 'string | null'\n    });\n\n    keyValue:string;\n\n    public isBooleanTypedField():boolean {\n        return false;\n    }\n}\n","import {AbstractTechnicalDetailsValue} from \"./AbstractTechnicalDetailsValue\";\nimport {valueMetaInfo} from \"@shop/common\";\n\nexport class EmptyTechnicalDetailsValue extends AbstractTechnicalDetailsValue {\n\n    static META_INFO = valueMetaInfo('topOffer:EmptyTechnicalDetailsValue', {\n        keyName: 'string | null'\n    });\n\n    public isBooleanTypedField():boolean {\n        return false;\n    }\n}\n","import {enumMetaInfo, MetaInfo} from \"@shop/common\";\nimport _ = require(\"underscore\");\nexport class LogicType {\n\n    static META_INFO:MetaInfo = enumMetaInfo('topOffer:LogicType');\n\n    private static _values:{ [s:string]:LogicType; } = {};\n\n    static forName(obj):LogicType {\n        // @ts-ignore\n        argsContract(arguments, 'string | null');\n        if (obj === null) {\n            return null;\n        }\n        return LogicType._values[obj];\n    }\n\n    static values():LogicType[] {\n        return _.values(LogicType._values);\n    }\n\n\n    static AND:LogicType = new LogicType('AND');\n    static OR:LogicType = new LogicType('OR');\n\n    constructor(public  name:string) {\n        // @ts-ignore\n        argsContract(arguments, 'str');\n        LogicType._values[name] = this;\n    }\n\n}\n\n","import {MetaInfo, enumMetaInfo} from \"@shop/common\";\nimport _ = require(\"underscore\");\nexport class MediaGalleryItemType {\n\n    static META_INFO:MetaInfo = enumMetaInfo('topOffer:MediaGalleryItemType');\n\n    private static _values:{ [s:string]:MediaGalleryItemType; } = {};\n\n    static forName(obj):MediaGalleryItemType {\n        // @ts-ignore\n        argsContract(arguments, 'str');\n        if (obj === null) {\n            return null;\n        }\n        return MediaGalleryItemType._values[obj];\n    }\n\n    static values():MediaGalleryItemType[] {\n        return _.values(MediaGalleryItemType._values);\n    }\n\n    static PICTURE:MediaGalleryItemType = new MediaGalleryItemType(\"PICTURE\");\n    static VIDEO:MediaGalleryItemType = new MediaGalleryItemType(\"VIDEO\");\n    static THREE_D:MediaGalleryItemType = new MediaGalleryItemType(\"THREE_D\");\n\n    constructor(public  name:string) {\n        // @ts-ignore\n        argsContract(arguments, 'str');\n        MediaGalleryItemType._values[name] = this;\n    }\n\n}\n","\n/*\n * The API call for the numeric data volume might not return content for some tariffs, or being plain text it could return words.\n * Since this is not supported in this UI we can provide an alternative text to be displayed instead\n */\nexport function getFormattedDataVolumeGigabytes(\n    datVolumeMbNumeric: string,\n    alternativeDisplayText: string,\n    suffixLTE: string = ' LTE'\n): string {\n  const trimmedDatVolumeMbNumeric = datVolumeMbNumeric\n    .replace(/\\s+/g, \"\")\n    .trim();\n\n  if (trimmedDatVolumeMbNumeric === \"-1\") {\n    return \"Unbegrenzt LTE\";\n  }\n\n  if (\n      trimmedDatVolumeMbNumeric.length === 0 ||\n      !trimmedDatVolumeMbNumeric.match(/^[0-9]+$/)\n  ) {\n    return alternativeDisplayText;\n  }\n\n  /*\n   * As agreed upon with Pixie the CMS API-call for the data volume will return data volumes as follows:\n   * - \"1024\" for 1 GB\n   * - \"2048\" for 2 GB\n   * - ...\n   */\n  return `${Math.floor(parseInt(trimmedDatVolumeMbNumeric) / 1024)} GB${suffixLTE}`;\n}\n\n// parsing the xml value and return the text from XML.\nexport function  getTariffInfoValue(tariffInfoDetails: string) {\n  const parser = new DOMParser();\n  const xmlDocument = parser.parseFromString(tariffInfoDetails, \"application/xml\");\n  const tariffInfoText = xmlDocument.querySelector(\"article h3\");\n\n  return tariffInfoText ? tariffInfoText.textContent : null;\n}\n","export class EventListenerRegistry {\n    static $inject: string[] = ['topOfferTrackingService']\n}\n\nexport enum Events {\n    TOP_OFFER_TRACKING_INITIALIZED = 'topoffer:initialized'\n}","import {CoFilter} from './components/filter/coFilter/coFilter';\nimport {CoOffers} from './components/offers/coOffers/coOffers';\nimport {CoOfferDetailsDescription} from './components/offers/coOfferDetailsDescription/coOfferDetailsDescription';\nimport {CoOfferHardware} from './components/offers/coOfferHardware/CoOfferHardware';\nimport {CoOfferHardwareColors} from './components/offers/coOfferHardwareColors/CoOfferHardwareColors';\nimport {CoPriceDisplayPlain} from \"./components/offers/coPriceDisplayPlain/coPriceDisplayPlain\";\nimport {CoOfferPrices} from './components/offers/coOfferPrices/CoOfferPrices';\nimport {CoPriceDisplay} from './components/offers/coPriceDisplay/CoPriceDisplay';\nimport {CoOfferStockHint} from './components/offers/coOfferStockHint/CoOfferStockHint';\nimport {CoOfferHardwareStorages} from './components/offers/coOfferHardwareStorages/CoOfferHardwareStorages';\nimport {DataService} from './services/DataService';\nimport {UiStateService} from './services/UiStateService';\nimport {classToFactory, IExternalService,EventService, IMappingServiceProvider, ISnapshotService} from \"@shop/common\";\nimport {ListElementService} from './services/ListElementService';\nimport {SortingService} from './services/SortingService';\nimport {ConfigurationChangeService} from './services/ConfigurationChangeService';\nimport {FilterComponentService} from './components/filter/FilterComponentService';\nimport {OffersComponentService} from './components/offers/OffersComponentService';\nimport {TabsComponentService} from './components/tabs/TabsComponentService';\nimport {TopOfferPageValue} from './domain/TopOfferPageValue';\nimport {ConfigurationValue} from './domain/ConfigurationValue';\nimport {ConfigurationCalls} from './domain/ConfigurationCalls';\nimport {CurrentConfigurationValue} from './domain/CurrentConfigurationValue';\nimport {PriceValue} from './domain/PriceValue';\nimport {PriceContentsValue} from './domain/PriceContentsValue';\nimport {SortingValue} from './domain/SortingValue';\nimport {SortingContentsValue} from './domain/SortingContentsValue';\nimport {TopOfferSelectionTypeUrl} from './domain/TopOfferSelectionTypeUrl';\nimport {TariffSelectionType} from './domain/TariffSelectionType';\nimport {CriteriaGroupValue} from './domain/criteria/CriteriaGroupValue';\nimport {CriteriaValue} from './domain/criteria/CriteriaValue';\nimport {CriteriaContentsValue} from './domain/criteria/CriteriaContentsValue';\nimport {LogicType} from './domain/criteria/LogicType';\nimport {ColorOptionValue} from './domain/hardware/ColorOptionValue';\nimport {ColorOptionContentsValue} from './domain/hardware/ColorOptionContentsValue';\nimport {ColorOptionCalls} from './domain/hardware/ColorOptionCalls';\nimport {HardwareContentsValue} from './domain/hardware/HardwareContentsValue';\nimport {HardwareValue} from './domain/hardware/HardwareValue';\nimport {MediaGalleryItemType} from './domain/hardware/MediaGalleryItemType';\nimport {MediaGalleryItemValue} from './domain/hardware/MediaGalleryItemValue';\nimport {MediaGalleryItemContentsValue} from './domain/hardware/MediaGalleryItemContentsValue';\nimport {MediaGalleryValue} from './domain/hardware/MediaGalleryValue';\nimport {StockHintType} from './domain/hardware/StockHintType';\nimport {StockHintValue} from './domain/hardware/StockHintValue';\nimport {StockHintContentsValue} from './domain/hardware/StockHintContentsValue';\nimport {StorageOptionValue} from './domain/hardware/StorageOptionValue';\nimport {StorageOptionContentsValue} from './domain/hardware/StorageOptionContentsValue';\nimport {StorageOptionCalls} from './domain/hardware/StorageOptionCalls';\nimport {PackGroupValue} from './domain/tariff/PackGroupValue';\nimport {PackGroupContentsValue} from './domain/tariff/PackGroupContentsValue';\nimport {PackValue} from './domain/tariff/PackValue';\nimport {PackContentsValue} from './domain/tariff/PackContentsValue';\nimport {PackCalls} from './domain/tariff/PackCalls';\nimport {TariffContentsValue} from './domain/tariff/TariffContentsValue';\nimport {TariffValue} from './domain/tariff/TariffValue';\nimport {TariffOptionValue} from './domain/TariffOptionValue';\nimport {TariffOptionContentsValue} from './domain/TariffOptionContentsValue';\nimport {TariffOptionCalls} from './domain/TariffOptionCalls';\nimport {CoProductDetails} from './components/productDetails/coProductDetails/coProductDetails';\nimport {CoHardwareDetails} from './components/productDetails/coHardwareDetails/coHardwareDetails';\nimport {ProductDetailsComponentService} from './components/productDetails/ProductDetailsComponentService';\nimport {BooleanTechnicalDetailsValue} from './domain/hardware/BooleanTechnicalDetailsValue';\nimport {EmptyTechnicalDetailsValue} from './domain/hardware/EmptyTechnicalDetailsValue';\nimport {StringTechnicalDetailsValue} from './domain/hardware/StringTechnicalDetailsValue';\nimport {TechnicalDetailsGroupType} from './domain/hardware/TechnicalDetailsGroupType';\nimport {TechnicalDetailsGroupValue} from './domain/hardware/TechnicalDetailsGroupValue';\nimport {CoTariffDetails} from './components/productDetails/coTariffDetails/coTariffDetails';\nimport {CoTariffPacks} from './components/productDetails/coTariffPacks/coTariffPacks';\nimport {CoTariffOptions} from './components/filter/coTariffOptions/CoTariffOptions';\nimport {coHardwareMedia} from './components/offers/coHardwareMedia/coHardwareMedia';\nimport {ListElementValue} from './domain/ListElementValue';\nimport {CoTabs} from './components/tabs/coTabs/coTabs';\nimport {PageCalls} from './domain/PageCalls';\nimport {CriteriaGroupType} from './domain/criteria/CriteriaGroupType';\nimport {TopOfferFeatureToggleService} from './services/TopOfferFeatureToggleService';\nimport {FeatureTogglesValue} from './domain/FeatureTogglesValue';\nimport {CoTopOffer} from \"./components/topOffer/coTopOffer/coTopOffer\";\nimport {TopOfferComponentService} from \"./components/topOffer/TopOfferComponentService\";\nimport {App} from \"./app/App\";\nimport {TargetGroupSwitcherValue} from \"./domain/TargetGroupSwitcherValue\";\nimport {CoTargetGroupSwitcher} from \"./components/targetGroupSwitcher/coTargetGroupSwitcher/coTargetGroupSwitcher\";\nimport {TargetGroupSwitcherComponentService} from \"./components/targetGroupSwitcher/TargetGroupSwitcherComponentService\";\nimport {CoTariffSwitcher} from \"./components/offers/coTariffSwitcher/coTariffSwitcher\";\nimport {CoOfferCartDisplay} from \"./components/offers/coOfferCartDisplay/coOfferCartDisplay\";\nimport {EventListenerRegistry, Events} from \"./tracking/EventListenerRegistry\";\nimport {TopOfferTrackingService} from \"./tracking/TopOfferTrackingService\";\nimport angular = require('angular');\nimport {EcommerceProductValue} from \"./domain/EcommerceProductValue\";\nimport {LoginStatusTrackingValue} from \"./domain/LoginStatusTrackingValue\";\nimport {CoNewOffers} from \"./components/offers/coNewOffers/coNewOffers\";\nimport {HardwareTile} from \"./components/offers/coHardwareTile/hardwareTile\";\nimport {CoPriceSection} from \"./components/offers/coPriceSection/coPriceSection\";\nimport {EnergyEfficiency} from \"./domain/hardware/EnergyEfficiency\";\n\nangular.module('commerce_top_offer', ['commerce_common', 'infinite-scroll'])\n\n    .directive('coHardwareMedia', coHardwareMedia)\n\n    .component('coTopOffer', new CoTopOffer())\n    .component('coTabs', new CoTabs())\n    .component('coTargetGroupSwitcher', new CoTargetGroupSwitcher())\n    .component(\"coTariffSwitcher\",new CoTariffSwitcher())\n    .component('coFilter', new CoFilter())\n    .component('coOffers', new CoOffers())\n    .component('coNewOffers', new CoNewOffers())\n    .component('coHardwareTile', new HardwareTile())\n    .component('coOfferDetailsDescription', new CoOfferDetailsDescription())\n    .component('coOfferHardware', new CoOfferHardware())\n    .component('coOfferHardwareColors', new CoOfferHardwareColors())\n    .component('coOfferHardwareStorages', new CoOfferHardwareStorages())\n    .component('coOfferPrices', new CoOfferPrices())\n    .component('coPriceDisplay', new CoPriceDisplay())\n    .component('coPriceDisplayPlain', new CoPriceDisplayPlain())\n    .component('coPriceSection', new CoPriceSection())\n    .component(\"coOfferCartDisplay\", new CoOfferCartDisplay())\n    .component('coOfferStockHint', new CoOfferStockHint())\n    .component('coProductDetails', new CoProductDetails())\n    .component('coTariffDetails', new CoTariffDetails())\n    .component('coTariffPacks', new CoTariffPacks())\n    .component('coHardwareDetails', new CoHardwareDetails())\n    .component('coTariffOptions', new CoTariffOptions())\n    .component('app', new App())\n\n    .factory('dataService', classToFactory(DataService))\n    .factory('uiStateService', classToFactory(UiStateService))\n    .factory('listElementService', classToFactory(ListElementService))\n    .factory('sortingService', classToFactory(SortingService))\n    .factory('topOfferComponentService', classToFactory(TopOfferComponentService))\n    .factory('configurationChangeService', classToFactory(ConfigurationChangeService))\n    .factory('filterComponentService', classToFactory(FilterComponentService))\n    .factory('offersComponentService', classToFactory(OffersComponentService))\n    .factory('tabsComponentService', classToFactory(TabsComponentService))\n    .factory('targetGroupSwitcherComponentService', classToFactory(TargetGroupSwitcherComponentService))\n    .factory('productDetailsComponentService', classToFactory(ProductDetailsComponentService))\n    .factory('topOfferFeatureToggleService', classToFactory(TopOfferFeatureToggleService))\n\n    .factory('eventListenerRegistry', classToFactory(EventListenerRegistry))\n    .service('topOfferTrackingService', classToFactory(TopOfferTrackingService))\n\n    .run(['eventListenerRegistry', angular.noop])\n    .run(['eventService', (eventService: EventService) => {\n            eventService.emit(Events.TOP_OFFER_TRACKING_INITIALIZED);\n    }])\n\n    .config(['mappingServiceProvider', function (mappingServiceProvider: IMappingServiceProvider) {\n        //region mappings\n        mappingServiceProvider.addAnnotatedType(TopOfferPageValue);\n        mappingServiceProvider.addAnnotatedType(LoginStatusTrackingValue);\n        mappingServiceProvider.addAnnotatedType(ListElementValue);\n        mappingServiceProvider.addAnnotatedType(ConfigurationValue);\n        mappingServiceProvider.addAnnotatedType(EcommerceProductValue);\n        mappingServiceProvider.addAnnotatedType(ConfigurationCalls);\n        mappingServiceProvider.addAnnotatedType(PageCalls);\n        mappingServiceProvider.addAnnotatedType(CurrentConfigurationValue);\n        mappingServiceProvider.addAnnotatedType(PriceValue);\n        mappingServiceProvider.addAnnotatedType(PriceContentsValue);\n        mappingServiceProvider.addAnnotatedType(SortingValue);\n        mappingServiceProvider.addAnnotatedType(SortingContentsValue);\n        mappingServiceProvider.addAnnotatedType(TopOfferSelectionTypeUrl);\n        mappingServiceProvider.addAnnotatedType(TariffSelectionType);\n        mappingServiceProvider.addAnnotatedType(FeatureTogglesValue);\n        mappingServiceProvider.addAnnotatedType(TargetGroupSwitcherValue);\n        // criteria\n        mappingServiceProvider.addAnnotatedType(CriteriaGroupValue);\n        mappingServiceProvider.addAnnotatedType(CriteriaValue);\n        mappingServiceProvider.addAnnotatedType(CriteriaGroupType);\n        mappingServiceProvider.addAnnotatedType(CriteriaContentsValue);\n        mappingServiceProvider.addAnnotatedType(LogicType);\n        // hardware\n        mappingServiceProvider.addAnnotatedType(BooleanTechnicalDetailsValue);\n        mappingServiceProvider.addAnnotatedType(ColorOptionValue);\n        mappingServiceProvider.addAnnotatedType(ColorOptionContentsValue);\n        mappingServiceProvider.addAnnotatedType(ColorOptionCalls);\n        mappingServiceProvider.addAnnotatedType(EmptyTechnicalDetailsValue);\n        mappingServiceProvider.addAnnotatedType(HardwareContentsValue);\n        mappingServiceProvider.addAnnotatedType(HardwareValue);\n        mappingServiceProvider.addAnnotatedType(MediaGalleryItemType);\n        mappingServiceProvider.addAnnotatedType(MediaGalleryItemValue);\n        mappingServiceProvider.addAnnotatedType(MediaGalleryItemContentsValue);\n        mappingServiceProvider.addAnnotatedType(MediaGalleryValue);\n        mappingServiceProvider.addAnnotatedType(StockHintType);\n        mappingServiceProvider.addAnnotatedType(StockHintValue);\n        mappingServiceProvider.addAnnotatedType(StockHintContentsValue);\n        mappingServiceProvider.addAnnotatedType(StorageOptionValue);\n        mappingServiceProvider.addAnnotatedType(StorageOptionContentsValue);\n        mappingServiceProvider.addAnnotatedType(StringTechnicalDetailsValue);\n        mappingServiceProvider.addAnnotatedType(TechnicalDetailsGroupType);\n        mappingServiceProvider.addAnnotatedType(TechnicalDetailsGroupValue);\n        mappingServiceProvider.addAnnotatedType(StorageOptionCalls);\n        mappingServiceProvider.addAnnotatedType(EnergyEfficiency)\n        // tariff\n        mappingServiceProvider.addAnnotatedType(PackGroupValue);\n        mappingServiceProvider.addAnnotatedType(PackGroupContentsValue);\n        mappingServiceProvider.addAnnotatedType(PackValue);\n        mappingServiceProvider.addAnnotatedType(PackContentsValue);\n        mappingServiceProvider.addAnnotatedType(PackCalls);\n        mappingServiceProvider.addAnnotatedType(TariffContentsValue);\n        mappingServiceProvider.addAnnotatedType(TariffValue);\n        mappingServiceProvider.addAnnotatedType(TariffOptionValue);\n        mappingServiceProvider.addAnnotatedType(TariffOptionContentsValue);\n        mappingServiceProvider.addAnnotatedType(TariffOptionCalls);\n        //endregion mappings\n    }])\n    .run(['snapshotService', function (snapshotService: ISnapshotService) {\n        snapshotService.snapshot();\n    }])\n    .run(['externalService', (externalService: IExternalService) => {\n        externalService.initExternalApps();\n    }]);\n","import {FilterController} from \"./FilterController\";\nimport  coFilterTemplateHtml  from \"./coFilterTemplate.html\";\nimport any = jasmine.any;\n\nexport class CoFilter implements ng.IComponentOptions {\n        controller:any = FilterController;\n        template:string = coFilterTemplateHtml;\n}\n\n\n","import {IFilterComponentService} from \"../IFilterComponentService\";\nimport {CriteriaValue} from \"../../../domain/criteria/CriteriaValue\";\nimport {CriteriaGroupValue} from \"../../../domain/criteria/CriteriaGroupValue\";\nimport {SortingEntry} from \"../../../services/IListElementService\";\nexport class FilterController {\n    static $inject:string[] = ['filterComponentService'];\n    public _manufacturer:string;\n\n    constructor(private filterComponentService:IFilterComponentService) {\n    }\n\n    set manufacturer(c:string) {\n        if(c === null) {\n            this.filterComponentService.showAllManufacturer();\n        } else {\n            this.filterComponentService.switchManufacturer(c);\n        }\n        this._manufacturer = c;\n    }\n\n    get manufacturer():string {\n        return this._manufacturer;\n    }\n\n    set selectedSortingEntry(entry: SortingEntry) {\n        this.filterComponentService.setSelectedSortingEntry(entry);\n    }\n\n    get selectedSortingEntry():SortingEntry {\n        return this.filterComponentService.getSelectedSortingEntry();\n    }\n\n    public getSortingEntries():SortingEntry[] {\n        return this.filterComponentService.getSortingEntries();\n    }\n\n    public toggleCriteriaValue(criteriaValue:CriteriaValue):void {\n        this.filterComponentService.toggleCriteriaValues(criteriaValue.criteriaKeyValue);\n    }\n\n    public getCriteriaValue():CriteriaGroupValue[] {\n        return this.filterComponentService.getCriteriaValues();\n    }\n\n    public resetCriteriaSelection():void {\n        this.filterComponentService.resetCriteriaSelection();\n    }\n\n    public getManufacturerCriteriaValues():{[csSclass:string]:CriteriaValue} {\n        return this.filterComponentService.getManufacturerCriteriaValues();\n    }\n\n    public isFilterDisabled():boolean {\n        return this.filterComponentService.isFilterDisabled();\n    }\n\n    public isTariffOptionSwitchEnabled():boolean {\n        return this.filterComponentService.isTariffOptionSwitchEnabled();\n    }\n\n    public navigateToAllDevices():void {\n        return this.filterComponentService.navigateToAllDevices();\n    }\n    public getListElementIds():String[] {\n        return this.filterComponentService.getListElementIds();\n    }\n}\n","export default \"<div> <div data-ng-if=$ctrl.isFilterDisabled() class=padding-top-md> <a href=\\\"\\\" class=\\\"btn btn-beta margin-bottom-md\\\" data-co-uitest-element=allDevicesButton data-ng-click=$ctrl.navigateToAllDevices()>Alle Geräte</a> <div class=filter-group> <label for=selectSort class=group-title style=color:#808285> Sortieren nach </label> <div class=\\\"filter input nice-select\\\"> <select id=selectSort name=select-sort data-ng-options=\\\"entry.title + (entry.descending ? ' absteigend' : ' aufsteigend') for entry in $ctrl.getSortingEntries()\\\" data-ng-model=$ctrl.selectedSortingEntry> </select> </div> </div> </div> <div data-ng-if=!$ctrl.isFilterDisabled() class=catalog-filter> <span class=sr-only role=status>{{$ctrl.getListElementIds().length}} Produkte aufgelisted</span> <div id=accordion-filters class=\\\"panel-group section-accordion toggle-filter\\\"> <div class=panel> <h4> <button class=collapsed type=button data-toggle=collapse data-parent=#accordion-filters data-co-uitest-element=filter-toggle aria-controls=accordion-filters-0 data-target=#accordion-filters-0>Auswahl verfeinern </button> </h4> <div id=accordion-filters-0 class=\\\"filter-box collapse accordion-content\\\"> <div class=filter-groups> <div class=\\\"filter-group filter-group-manufactor\\\"> <div class=group-title> Hersteller </div> <span class=nice-select> <select name=manufactor data-ng-model=$ctrl.manufacturer> <option value=\\\"\\\">Alle Hersteller</option> <option data-ng-repeat=\\\"(key, value) in $ctrl.getManufacturerCriteriaValues()\\\" value={{value.criteriaKeyValue}}>{{value.title}} </option> </select> </span> </div> <div data-ng-if=$ctrl.isTariffOptionSwitchEnabled()> <co-tariff-options></co-tariff-options> </div> <div data-ng-repeat=\\\"criteriaGroupValue in $ctrl.getCriteriaValue()\\\" class=filter-group> <fieldset> <legend class=sr-only>{{criteriaGroupValue.title}}</legend> <div class=group-title> {{criteriaGroupValue.title}} </div> <div data-ng-repeat=\\\"criteriaValue in criteriaGroupValue.criterias\\\" data-ng-click=$ctrl.toggleCriteriaValue(criteriaValue) class=\\\"filter input checkbox\\\"> <input id={{criteriaGroupValue.title}}-{{$index}} type=checkbox data-ng-checked=criteriaValue.selected /> <label for={{criteriaGroupValue.title}}-{{$index}} data-ng-click=$ctrl.toggleCriteriaValue(criteriaValue) class=filter-label>{{criteriaValue.title}}</label> </div> </fieldset> </div> <div class=filter-group> <label for=selectSortFilter class=group-title style=color:#808285> Sortieren nach </label> <div class=\\\"filter input nice-select\\\"> <select id=selectSortFilter name=select-sort data-ng-options=\\\"entry.title + (entry.descending ? ' absteigend' : ' aufsteigend') for entry in $ctrl.getSortingEntries()\\\" data-ng-model=$ctrl.selectedSortingEntry> </select> </div> </div> </div> <a href=\\\"\\\" data-ng-click=$ctrl.resetCriteriaSelection() class=filter-clear>  Filter löschen </a> </div> </div> </div> </div> </div> \";","import {OffersController} from \"./OffersController\";\nimport coOffersTemplateHtml from \"./coOffersTemplate.html\";\nexport class CoOffers implements ng.IComponentOptions {\n    controller:any = OffersController;\n    template:string = coOffersTemplateHtml;\n}\n","import {IOffersComponentService} from \"../IOffersComponentService\";\nimport IAngularEvent = angular.IAngularEvent;\nimport {IFilterComponentService} from \"../../filter/IFilterComponentService\";\nimport {Content} from \"@shop/common\";\nimport {TopOfferTrackingService} from \"../../../tracking/TopOfferTrackingService\";\nimport {ColorOptionValue} from \"../../../domain/hardware/ColorOptionValue\";\n\nexport class OffersController {\n    static $inject:string[] = ['offersComponentService', 'filterComponentService', 'topOfferTrackingService'];\n    alreadyTrackedProducts = [];\n    constructor(private offersComponentService:IOffersComponentService,\n                private filterComponentService:IFilterComponentService,\n                private topOfferTrackingService: TopOfferTrackingService) {\n        // Add event listener to window object for load event\n        window.addEventListener('load', () => {\n            // Call the pushTrackedProductsToDataLayer() function on load\n            this.pushTrackedProductsToDataLayer();\n        });\n\n        // Add event listener to window object for scroll event\n        window.addEventListener('scroll', () => {\n            // Call the pushTrackedProductsToDataLayer() function on scroll\n            this.pushTrackedProductsToDataLayer();\n        });\n    }\n\n    public getListElementIds():String[] {\n        return this.filterComponentService.getListElementIds();\n    }\n\n    public moreRowsToShow(): boolean {\n        return this.filterComponentService.moreRowsToShow();\n    }\n\n    public showMoreRows(): void {\n        this.filterComponentService.showMoreRows();\n    }\n\n    public isAllDetailsOpen(id:string):boolean {\n        return this.offersComponentService.isAllDetailsOpen(id);\n    }\n\n    public toggleAllDetails(id:string, $event:IAngularEvent):void {\n        $event.preventDefault();\n        this.offersComponentService.toggleAllDetails(id);\n    }\n\n    public closeReviewsModal():void {\n        this.offersComponentService.closeReviewsModal();\n    }\n\n    public isReviewsModalOpen():boolean {\n        return this.offersComponentService.isReviewsModalOpen();\n    }\n\n    public getRatingReviews():Content {\n        return this.offersComponentService.getRatingReviews();\n    }\n\n    public getActiveReviewsHardwareName():string {\n        return this.offersComponentService.getActiveReviewsHardwareName();\n    }\n\n    public getExternalId(id:string):string {\n        return this.offersComponentService.getExternalId(id);\n    }\n\n    public modalContentResolved(){\n        $(document).trigger('tel.app.init');\n    }\n\n    public getNoOffersAvailableText(): string{\n        return this.offersComponentService.getNoOffersAvailableText();\n    }\n\n    public getBlauHardwareFlexText(): string {\n        return this.offersComponentService.getBlauHardwareFlexText();\n    }\n\n    public getHardwarePdpLink(id:string):string {\n        return this.offersComponentService.getHardwarePdpLink(id) + '?ohne-tarif=ja';\n    }\n\n    public getHardwareImageLink(id:string):string {\n        return this.offersComponentService.getHardwareImageLink(id);\n    }\n\n    public getHardwareName(id:string):string {\n        return this.offersComponentService.getHardwareName(id);\n    }\n\n    public getInfoIconToggle(id:string): boolean {\n        const config = this.offersComponentService.getConfiguration(id);\n        return !!(config && config.hardware && config.hardware.contents && config.hardware.contents.infoIconToggle);\n    }\n\n    public getHardwareColors(id:string):ColorOptionValue[] {\n        return this.offersComponentService.getHardwareColors(id);\n    }\n\n    public getEnergyLevel(id:string):string {\n        return this.offersComponentService.getEnergyLevel(id);\n    }\n\n    public getFormattedRecurringAmount(id:string):string {\n        const prices = this.offersComponentService.getPrices(id) as any;\n        if (!prices || !prices.showSinglePrice) {\n            console.log('OffersController recurring amount skipped for non-hardware-only offer', id);\n            return '';\n        }\n        const amount = prices.singlePriceAmount != null ? prices.singlePriceAmount : 0;\n        const recurringAmount = this.offersComponentService.formatPrice(amount, false) + ' €';\n        console.log('OffersController recurring amount', { id, recurringAmount });\n        return recurringAmount;\n    }\n\n    public getFormattedStrikeThroughPrice(id:string):string {\n        return this.offersComponentService.getFormattedStrikeThroughPrice(id);\n    }\n\n    public getOcclModalInfoId(id:string):string {\n        const externalId = this.offersComponentService.getExternalId(id);\n        if (!externalId) {\n            return 'infoModal_' + id;\n        }\n        return 'infoModal' + externalId;\n    }\n\n    public getFormattedNonRecurringAmount(id:string):string {\n        const prices = this.offersComponentService.getPrices(id);\n        const amount = prices && prices.nonRecurringAmount != null ? prices.nonRecurringAmount : 0;\n        return this.offersComponentService.formatPrice(amount, true) + ' €';\n    }\n\n    public getContractDurationDescription(id:string):string {\n        const config = this.offersComponentService.getConfiguration(id);\n        if (config && config.price && config.price.contents && config.price.contents.contractDurationDescription) {\n            const duration = config.price.contents.contractDurationDescription;\n            console.log('OffersController contract duration', { id, duration });\n            return duration;\n        }\n        console.log('OffersController contract duration missing', id);\n        return '';\n    }\n\n    public getTotalPriceAmount(id:string):string {\n        const prices = this.offersComponentService.getPrices(id);\n        const totalPrice = prices && prices.totalPriceAmount != null\n            ? this.offersComponentService.formatPrice(prices.totalPriceAmount, false) + ' €'\n            : '';\n        console.log('OffersController total price', { id, totalPrice });\n        return totalPrice;\n    }\n\n    public isTotalPriceDisplayEnabled(): boolean {\n        const enabled = this.offersComponentService.isTotalPriceDisplayEnabled();\n        console.log('OffersController isTotalPriceDisplayEnabled', enabled);\n        return enabled;\n    }\n\n    public isRedirectionEnabled(): boolean {\n        return this.offersComponentService.isPdpStoreRedirectionForHWO();\n    }\n\n    private pushTrackedProductsToDataLayer() {\n        if(this.offersComponentService.getFilterStatus()){\n            this.alreadyTrackedProducts = [];\n            this.offersComponentService.setFilterStatus(false);\n        }\n        const childrenDivIds = document.querySelectorAll(\"#main-offers-container div[id], #main-offers-container-redirection div[id]\");\n        const visitedDivIds = [];\n\n        for (var i = 0; i < childrenDivIds.length; i++) {\n            var divId = childrenDivIds[i].id;\n            var divTop = childrenDivIds[i].getBoundingClientRect().top;\n            var divBottom = childrenDivIds[i].getBoundingClientRect().bottom;\n\n            if (divTop < window.innerHeight && divBottom >= 0) {\n                visitedDivIds.push(divId);\n            }\n        }\n        const allHwProducts = this.getListElementIds();\n        const visitedHwProducts = allHwProducts.filter(hw => visitedDivIds.some(visitedId => visitedId === hw));\n        const trackingHwProducts = visitedHwProducts.filter(hw => !this.alreadyTrackedProducts.some(trackedProduct => trackedProduct === hw));\n\n        if (trackingHwProducts.length >= 6) {\n            // Push tracking data to window.tefDataLayer\n            // @ts-ignore\n            const ids = trackingHwProducts.slice(0, 6);\n            const ecommerceProductValues = [];\n            for (let i = 0; i < ids.length; i++) {\n                // @ts-ignore\n                const ecommerceProductValue = this.offersComponentService.getConfiguration(ids[i]).ecommerceProductValue;\n                if (ecommerceProductValue !== null) {\n                    ecommerceProductValues.push(ecommerceProductValue);\n                }\n            }\n            this.topOfferTrackingService.buildTrackingObjectForProductImpression(ecommerceProductValues, this.offersComponentService.getSelectedCriteriaValue(), this.alreadyTrackedProducts.length);\n            this.alreadyTrackedProducts.push(...trackingHwProducts.slice(0, 6));\n        } else if (trackingHwProducts.length > 0) {\n            // Push tracking data to window.tefDataLayer\n            // @ts-ignore\n            const ids = trackingHwProducts;\n            const ecommerceProductValues = [];\n            for (let i = 0; i < ids.length; i++) {\n                // @ts-ignore\n                const ecommerceProductValue = this.offersComponentService.getConfiguration(ids[i]).ecommerceProductValue;\n                if (ecommerceProductValue !== null) {\n                    ecommerceProductValues.push(ecommerceProductValue);\n                }\n            }\n            this.topOfferTrackingService.buildTrackingObjectForProductImpression(ecommerceProductValues, this.offersComponentService.getSelectedCriteriaValue(), this.alreadyTrackedProducts.length);\n            this.alreadyTrackedProducts.push(...trackingHwProducts);\n        }\n    }\n}\n","export default \"<div data-ng-if=!$ctrl.isRedirectionEnabled() data-infinite-scroll=$ctrl.showMoreRows() data-infinite-scroll-distance=1 data-infinite-scroll-disabled=!$ctrl.moreRowsToShow() id=main-offers-container> <h3 ng-if=\\\"$ctrl.getListElementIds().length === 0\\\" class=\\\"no-offers-available-text text-center\\\"> {{ $ctrl.getNoOffersAvailableText() }} </h3> <div id=new-main-offers-container> <div data-ng-repeat=\\\"id in $ctrl.getListElementIds()\\\" style=background:#fff> <a href={{$ctrl.getHardwarePdpLink(id)}} target=_self data-tracking-action=textlink title={{$ctrl.getHardwareName(id)}}> <tef-bundle-teaser cloak> <div slot=flag data-ng-if=$ctrl.getInfoIconToggle(id)> <div class=\\\"flag flag--default\\\"> <span data-ng-bind-html=\\\"$ctrl.getBlauHardwareFlexText() | coUnsafeHtml\\\"></span> </div> </div> <div slot=visual> <picture> <img class=img-style data-ng-src={{$ctrl.getHardwareImageLink(id)}} alt={{$ctrl.getHardwareName(id)}} loading=lazy /> </picture> </div> <div slot=energy-labels> <div class=energy-label> <div data-ng-bind-html=\\\"$ctrl.getEnergyLevel(id) | coUnsafeHtml\\\"></div> </div> </div> <div slot=color-selection> <img ng-repeat=\\\"color in $ctrl.getHardwareColors(id) track by $index\\\" src={{color.contents.imageUrl}} alt=\\\"Color {{color.contents.optionName}}\\\" loading=lazy /> </div> <div slot=content> <div class=title>{{$ctrl.getHardwareName(id)}}</div> </div> <div slot=price style=font-size:12px;margin-left:-4px> <div class=row data-ng-if=$ctrl.getFormattedRecurringAmount(id)> <div class=col>monatlich</div> <div class=col> <tef-price data-ng-if=$ctrl.getFormattedStrikeThroughPrice(id) cloak align=right display=block size=small theme=inherit slash-color=#ff0000 slashed> <span slot=price>{{$ctrl.getFormattedStrikeThroughPrice(id)}}</span> </tef-price> <tef-price cloak align=right display=block size=small theme=inherit slash-color=#ff0000> <span slot=price>{{$ctrl.getFormattedRecurringAmount(id)}}</span> </tef-price> </div> </div> <div class=row> <div class=col>einmalig</div> <div class=col> <span>{{$ctrl.getFormattedNonRecurringAmount(id)}}</span> </div> </div> <div class=row> <div class=col>Anschlusspreis</div> <div class=col> <tef-price cloak align=right display=block size=small theme=inherit slash-color=#ff0000 slashed> <span slot=price>0 €</span> </tef-price> </div> </div> </div> <div slot=footnotes style=font-size:12px data-ng-if=$ctrl.getInfoIconToggle(id)> bei {{$ctrl.getContractDurationDescription(id) | coUnsafeHtml}} Monatsraten zu 0% <a class=occl-modal-link data-ng-attr-occl-modal={{$ctrl.getOcclModalInfoId(id)}} aria-haspopup=dialog aria-label=info-icon role=button data-ng-click=\\\"$event.stopPropagation(); $event.preventDefault();\\\" data-ng-keydown=\\\"($event.key === 'Enter' || $event.key === ' ') && ($event.stopPropagation(), $event.preventDefault())\\\"> <tef-icon cloak icon=information size=1.0 type=functional aria-label=\\\"Weitere Informationen\\\"></tef-icon> </a> <br/> (Finanzierungsbeispiel) <br/> <strong>Gerätepreis: {{$ctrl.getTotalPriceAmount(id)}}</strong> </div> </tef-bundle-teaser> </a> <tef-modal cloak id={{$ctrl.getOcclModalInfoId(id)}} close-icon color-close-icon aria-label=info-modal data-ng-click=$event.stopPropagation()> <div slot=title>Monatliche Kosten</div> <div slot=body> <div>Für Neukunden und besteht aus einem Blau Mein Handyvertrag mit dem {{$ctrl.getHardwareName(id)}} mit Ratenzahlung à {{$ctrl.getFormattedRecurringAmount(id)}} monatlich über {{$ctrl.getContractDurationDescription(id)}} (Gesamtpreis: {{$ctrl.getTotalPriceAmount(id)}}) </div> </div> </tef-modal> </div> <div data-co-hardware-media></div> <div data-co-modal-dialog data-co-modal-dialog-title=\\\"Bewertungen für {{$ctrl.getActiveReviewsHardwareName()}}\\\" data-co-modal-dialog-open=$ctrl.isReviewsModalOpen() data-co-modal-dialog-on-close=$ctrl.closeReviewsModal() data-co-modal-dialog-limit-height class=modal-reviews> <div data-co-resolve-content=$ctrl.getRatingReviews() on-content-resolved=$ctrl.modalContentResolved()></div> </div> </div> </div> <div data-ng-if=$ctrl.isRedirectionEnabled() data-infinite-scroll=$ctrl.showMoreRows() data-infinite-scroll-distance=1 data-infinite-scroll-disabled=!$ctrl.moreRowsToShow() id=main-offers-container-redirection> <h3 ng-if=\\\"$ctrl.getListElementIds().length === 0\\\" class=\\\"no-offers-available-text text-center\\\"> {{ $ctrl.getNoOffersAvailableText() }} </h3> <div data-ng-repeat=\\\"id in $ctrl.getListElementIds()\\\"> <div class=offer-container data-co-uitest-element=offer-container> <div class=\\\"offer offer-bundle\\\"> <co-offer-details-description co-offer-details-description-id=id></co-offer-details-description> <co-offer-hardware co-offer-hardware-id=id></co-offer-hardware> <co-offer-prices co-offer-prices-id=id></co-offer-prices> </div> <div id=\\\"accordion-{{ $index }}\\\" class=\\\"panel-group section-accordion\\\"> <div class=panel> <a aria-expanded=false data-parent=\\\"#accordion-{{ $index }}\\\" aria-controls=\\\"#accordion-{{ $index }}-0\\\" href=\\\"#accordion-{{ $index }}-0\\\" data-ng-class=\\\"{ '': $ctrl.isAllDetailsOpen(id), 'collapsed': !$ctrl.isAllDetailsOpen(id) }\\\" data-ng-click=\\\"$ctrl.toggleAllDetails(id, $event)\\\"> Alle Details zum Angebot </a> <div aria-expanded=false id=\\\"accordion-{{ $index }}-0\\\" class=\\\"accordion-content co-slide\\\" data-ng-if=$ctrl.isAllDetailsOpen(id) data-co-seo-hide> <co-product-details co-product-details-id=id></co-product-details> </div> </div> </div> <input class=externalId type=hidden value=\\\"{{ $ctrl.getExternalId(id) }}\\\"> <input class=elementId type=hidden value=\\\"{{ id }}\\\"> </div> </div> <div data-co-hardware-media></div> <div data-co-modal-dialog data-co-modal-dialog-title=\\\"Bewertungen für {{$ctrl.getActiveReviewsHardwareName()}}\\\" data-co-modal-dialog-open=$ctrl.isReviewsModalOpen() data-co-modal-dialog-on-close=$ctrl.closeReviewsModal() data-co-modal-dialog-limit-height class=modal-reviews> <div data-co-resolve-content=$ctrl.getRatingReviews() on-content-resolved=$ctrl.modalContentResolved()></div> </div> </div> \";","import { OfferDetailsDescriptionController } from './OfferDetailsDescriptionController';\nimport  coOfferDetailsDescriptionTemplateHtml  from \"./coOfferDetailsDescriptionTemplate.html\";\n\nexport class CoOfferDetailsDescription implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coOfferDetailsDescriptionId'\n    };\n    controller:any = OfferDetailsDescriptionController;\n    template:string = coOfferDetailsDescriptionTemplateHtml;\n}\n","import {TariffOptionValue} from \"../../../domain/TariffOptionValue\";\nimport {IOffersComponentService} from \"../IOffersComponentService\";\nimport _ = require(\"underscore\");\nimport {IDataService} from \"../../../services/IDataService\";\n\nexport class OfferDetailsDescriptionController {\n    static $inject:string[] = ['offersComponentService', 'dataService'];\n\n    private id:string;\n\n    constructor(private offersComponentService:IOffersComponentService, private dataService: IDataService) {\n    }\n\n    set selectedEntry(entry: TariffOptionValue) {\n        this.offersComponentService.selectOptionEntry(this.id, entry);\n    }\n\n    get selectedEntry():TariffOptionValue {\n        return _.find(this.getTariffOptionEntries(), (entry:TariffOptionValue) => { return entry.selected } );\n    }\n\n    public isHardwareOnlySelected():boolean {\n        return this.offersComponentService.isHardwareOnlySelected();\n    }\n\n    public getHardwareName():string {\n        return this.offersComponentService.getHardwareName(this.id);\n    };\n\n    public getHardwareDescription():string {\n        return this.offersComponentService.getHardwareDescription(this.id);\n    };\n\n    public getTariffFeatures():string[] {\n        return this.offersComponentService.getTariffFeatures(this.id);\n    }\n\n    public getTariffOptionEntries():TariffOptionValue[] {\n        return this.offersComponentService.getTariffOptionEntries(this.id);\n    };\n\n    public openReviewsModal():void {\n        this.offersComponentService.openReviewsModal(this.id);\n    }\n\n    public getRatingStars():string {\n        return this.offersComponentService.getRatingStars(this.id);\n    }\n    public getSchemaData():any {\n        let rawSchema = JSON.parse(this.dataService.getSchemaData(this.id));\n        let finalRawData = JSON.stringify(rawSchema);\n        let htmlData = \"<script type='application/ld+json'>\" + finalRawData + \"</script>\"\n        return htmlData.toString()\n    }\n}\n","export default \"<div class=description> <dl class=offer-price> <div class=trbo-info-flag id=trbo-info-header-flag></div> <div class=co-rating-container data-ng-bind-html=\\\"$ctrl.getRatingStars() | coUnsafeHtml\\\" data-ng-click=$ctrl.openReviewsModal()> </div> <dt class=headline> <span class=device-name> {{ $ctrl.getHardwareName() }} </span> </dt> <div data-ng-if=!$ctrl.isHardwareOnlySelected()> <co-tariff-switcher selected-entry=$ctrl.selectedEntry co-tariff-switcher-entries=$ctrl.getTariffOptionEntries()></co-tariff-switcher> <dd data-ng-repeat=\\\"feature in $ctrl.getTariffFeatures() track by $index\\\" class=tariff-info-item> <p data-ng-bind-html=\\\"feature | coUnsafeHtml\\\"></p> </dd> </div> </dl> <div class=\\\"description-details hidden-xs\\\"> <div data-ng-bind-html=\\\"$ctrl.getHardwareDescription() | coUnsafeHtml\\\" class=device-info></div> </div> </div> <div data-ng-bind-html=\\\"$ctrl.getSchemaData() | coUnsafeHtml\\\" style=display:inline-block></div>\";","import {OfferHardwareController} from \"./OfferHardwareController\";\nimport  coOfferHardwareTemplateHtml  from \"./coOfferHardwareTemplate.html\";\n\nexport class CoOfferHardware implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coOfferHardwareId'\n    };\n    controller:any = OfferHardwareController;\n    template:string = coOfferHardwareTemplateHtml;\n}\n","import {IOffersComponentService} from \"../IOffersComponentService\";\nexport class OfferHardwareController {\n    static $inject:string[] = ['offersComponentService'];\n\n    private id:string;\n\n    constructor(private offersComponentService:IOffersComponentService) {\n    }\n\n    public getEnergyLevel():string {\n        let temp = document.createElement('div');\n        temp.innerHTML = this.offersComponentService.getEnergyLevel(this.id);\n        let image = temp.querySelectorAll('img');\n        if (image) {\n            image.forEach((img) => {\n                img.setAttribute('style', 'width:40px');\n            })\n        }\n        let tempDataSheet = document.createElement('div');\n        tempDataSheet.innerHTML = this.offersComponentService.getProductDataSheet(this.id);\n\n        // Select all anchor tags within the product data sheet content\n        let dataSheetAnchors = tempDataSheet.querySelectorAll('a');\n        dataSheetAnchors.forEach(anchor => {\n            anchor.setAttribute('onclick', `event.stopPropagation(); event.preventDefault();window.open(\"${anchor.href}\", \"_blank\");`);\n        });\n        return \"<div class='energy-cover' style='margin: 10px auto'><div class='dataSheet' style='margin-right: 10px; padding-top: 10px'>\" + tempDataSheet.innerHTML + \"</div><div class='energy-image'>\"+ temp.innerHTML+ \"</div></div>\";\n    }\n    public getHardwareName():string {\n        return this.offersComponentService.getHardwareName(this.id);\n    }\n\n    public getHardwareImageLink():string {\n        return this.offersComponentService.getHardwareImageLink(this.id);\n    }\n\n    public openMediaGallery():void {\n        this.offersComponentService.openMediaGallery(this.id);\n    }\n\n    public isMediaGalleryAvailable():boolean {\n        return this.offersComponentService.isMediaGalleryAvailable(this.id);\n    }\n}\n","export default \"<div class=\\\"visual has-selects\\\"> <div class=image> <img data-ng-src=\\\"{{ $ctrl.getHardwareImageLink() }}\\\" alt=\\\"{{ $ctrl.getHardwareName() }}\\\" width=212 height=264 /> <div class=gallery-link data-ng-if=$ctrl.isMediaGalleryAvailable()> <span data-ng-click=$ctrl.openMediaGallery()> <a href=# data-co-click-prevent-default> <span class=\\\"glyphicon glyphicon-circle-plus\\\"></span> Galerie öffnen </a> </span> </div> <div class=energyLevel data-ng-bind-html=\\\"$ctrl.getEnergyLevel() | coUnsafeHtml\\\"></div> </div> <co-offer-hardware-colors co-offer-hardware-colors-id=$ctrl.id></co-offer-hardware-colors> <co-offer-hardware-storages co-offer-hardware-storages-id=$ctrl.id></co-offer-hardware-storages> </div>\";","import {OfferHardwareColorsController} from \"./OfferHardwareColorsController\";\nimport  coOfferHardwareColorsTemplateHtml  from \"./coOfferHardwareColorsTemplate.html\";\n\nexport class CoOfferHardwareColors implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coOfferHardwareColorsId'\n    };\n    controller:any = OfferHardwareColorsController;\n    template:string = coOfferHardwareColorsTemplateHtml;\n}\n","import {IOffersComponentService} from \"../IOffersComponentService\";\nimport {ColorOptionValue} from \"../../../domain/hardware/ColorOptionValue\";\nexport class OfferHardwareColorsController {\n    static $inject:string[] = ['offersComponentService'];\n\n    private id:string;\n\n    constructor(private offersComponentService:IOffersComponentService) {\n    }\n\n    public getHardwareColors():ColorOptionValue[] {\n        return this.offersComponentService.getHardwareColors(this.id);\n    };\n\n    public setHardwareColor(color:ColorOptionValue):void {\n        this.offersComponentService.setHardwareColor(this.id, color);\n    }\n}\n","export default \"<ul class=select-color> <li data-ng-repeat=\\\"color in $ctrl.getHardwareColors() track by color.contents.optionName\\\" data-ng-class=\\\"{ 'active': color.selected }\\\" data-co-uitest-element=color data-ng-click=$ctrl.setHardwareColor(color) title={{color.contents.optionName}}> <span ng-style=\\\"color.contents.imageUrl &&\\n                        {'background-image': 'url(' + color.contents.imageUrl + ')',\\n                        'background-repeat': 'no-repeat',\\n                        'background-size': '100% 100%'}\\\"> </span> </li> </ul> \";","import {PriceDisplayPlainController} from \"./PriceDisplayPlainController\";\nimport coPriceDisplaySimpleTemplateHtml from \"./coPriceDisplayPlainTemplate.html\";\n\nexport class CoPriceDisplayPlain implements ng.IComponentOptions {\n    bindings:any = {\n        type: '@coPriceDisplayType',\n        prices: '<coPriceDisplayPrices',\n        footnotes:'<coPriceDisplayFootnotes',\n        id: '<coPriceDisplayId'\n    };\n    controller:any = PriceDisplayPlainController;\n    template:string = coPriceDisplaySimpleTemplateHtml;\n}\n","import {PriceContentsValue} from \"../../../domain/PriceContentsValue\";\nimport {PriceValue} from \"../../../domain/PriceValue\";\nimport {IOffersComponentService} from \"../IOffersComponentService\";\nimport {IDataService} from \"../../../services/IDataService\";\n\nexport class PriceDisplayPlainController {\n    static $inject:string[] = ['offersComponentService','dataService'];\n\n    public prices:PriceValue;\n    public _type:string;\n    public footnotes:string;\n    public id: string;\n    public product: any;\n\n    constructor(private offersComponentService:IOffersComponentService, private dataService: IDataService) {\n    }\n\n    set type(v:string) {\n        argsContract(arguments, 'string {{ oneOf(\"hardware\", \"tariff\", \"single\") }}');\n        this._type = v;\n    }\n\n    get type():string {\n        return this._type;\n    }\n\n    public getPriceInteger():string {\n        return this.offersComponentService.getPriceInteger(this.getPrice());\n    }\n\n    public getPriceDecimal():string {\n        return this.offersComponentService.getPriceDecimal(this.getPrice());\n    }\n\n    private getPrice():number {\n        switch (this.type) {\n            case 'hardware':\n                return this.prices.hardwarePriceAmount;\n            case 'tariff':\n                return this.prices.tariffPriceAmount;\n            case 'single':\n                return this.prices.singlePriceAmount;\n            default:\n                return 0;\n        }\n    }\n\n    public isTotalPriceDisplayEnabled():boolean {\n        const enabled = this.offersComponentService.isTotalPriceDisplayEnabled();\n        console.log('PriceDisplayPlainController isTotalPriceDisplayEnabled', enabled);\n        return enabled;\n    }\n\n    public getFootnotes(){\n        return this.footnotes;\n    }\n\n    public getContractDurationDescription(){\n        return this.getContents().contractDurationDescription;\n    }\n\n    public getFormattedNonRecurringAmount() {\n        return this.offersComponentService.formatPrice(this.prices.nonRecurringAmount,true);\n    }\n\n    public getFormattedRecurringAmount() {\n        const recurringAmount = this.offersComponentService.formatPrice(this.getPrice(),false);\n        console.log('PriceDisplayPlainController recurring amount', recurringAmount);\n        return recurringAmount;\n    }\n\n\n    public getActivationFeeDescription(){\n        return this.getContents().activationFeeDescription;\n    }\n\n    private getContents():PriceContentsValue {\n        return this.prices.contents;\n    }\n\n    public getOcclModalInfoId(): string {\n        if (!this.id) {\n            return 'infoModal_fallback';\n        }\n        return 'infoModal_' + this.id.replace(/\\s+/g, '_');\n    }\n    public getHardwareMonthlyPrice(): string {\n        let price = Number(this.prices && this.prices.singlePriceAmount || 0);\n        return price.toFixed(2) + ' €';\n    }\n    public getContractDuration(): string {\n        let contents = this.getContents();\n        let raw = contents && contents.contractDurationDescription;\n        if (!raw) {\n            return '';\n        }\n        let match = raw.match(/(\\d+)\\s*Monate/);\n        return match ? match[1] + ' Monate' : raw;\n    }\n    public getTotalPrice(): string {\n        let price = Number(this.prices && this.prices.totalPriceAmount || 0);\n        const totalPrice = price.toFixed(2) + ' €';\n        console.log('PriceDisplayPlainController total price', totalPrice);\n        return totalPrice;\n    }\n\n    public getTotalPriceAmount(): string {\n        const totalPriceAmount = this.getTotalPrice();\n        console.log('PriceDisplayPlainController total price amount', totalPriceAmount);\n        return totalPriceAmount;\n    }\n\n    public getInfoIconToggle(): boolean {\n        const data = this.dataService.getHardwareContents(this.id);\n        return data && data.infoIconToggle != null ? data.infoIconToggle : false;\n    }\n\n}\n","export default \"<div class=offer-price> <div class=\\\"price-duration price-once-left\\\" style=margin-right:.2em> <p class=price>{{$ctrl.getFormattedRecurringAmount()}}</p> <span class=currency>€</span> <div> <p class=cond> {{$ctrl.getContractDurationDescription() | coUnsafeHtml}} <a data-ng-if=$ctrl.getInfoIconToggle() class=occl-modal-link data-ng-attr-occl-modal={{$ctrl.getOcclModalInfoId()}} aria-haspopup=dialog aria-label=info-icon role=button> <tef-icon cloak icon=information size=1.0 type=functional></tef-icon> </a> <a class=info data-ng-if=$ctrl.getFootnotes() data-co-modal-info data-co-modal-info-title=\\\"Weitere Hinweise und Fußnoten\\\" data-co-modal-info-content=\\\"{{ $ctrl.getFootnotes() }}\\\">i</a> </p> </div> </div> <div class=\\\"price-once price-once-left\\\"> <p class=cond>Einmalig</p> <p class=price>{{$ctrl.getFormattedNonRecurringAmount()}}</p> <span class=currency>&nbsp;€</span> <div class=description-stretch> <p class=condAfter>{{$ctrl.getActivationFeeDescription()}}</p> </div> </div> </div> <tef-modal cloak id={{$ctrl.getOcclModalInfoId()}} close-icon color-close-icon aria-label=\\\"Monatliche Kosten\\\"> <div slot=title>Monatliche Kosten </div> <div slot=body> <p class=modal-text-left> Das Angebot besteht aus a blau MyHandy-Kaufvertrag mit Ratenzahlung à {{$ctrl.getHardwareMonthlyPrice()}} monatlich über {{$ctrl.getContractDuration()}} (Gesamtpreis: {{$ctrl.getTotalPrice()}}) </p> </div> </tef-modal> \";","import {OfferPricesController} from \"./OfferPricesController\";\nimport  coOfferPricesTemplateHtml  from \"./coOfferPricesTemplate.html\";\n\nexport class CoOfferPrices implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coOfferPricesId'\n    };\n    controller:any = OfferPricesController;\n    template:string = coOfferPricesTemplateHtml;\n}\n","import {IOffersComponentService} from \"../IOffersComponentService\";\nimport {PriceValue} from \"../../../domain/PriceValue\";\n\nexport class OfferPricesController {\n\n    static $inject:string[] = ['offersComponentService'];\n\n    private id:string;\n\n    constructor(private offersComponentService:IOffersComponentService) {\n    }\n\n    public getPrices():PriceValue {\n        return this.offersComponentService.getPrices(this.id);\n    }\n\n    public getFootnotes():string {\n        return this.offersComponentService.getFootnotes(this.id);\n    }\n\n    public isPostpaidSelected():boolean {\n        return this.offersComponentService.isPostpaidSelected();\n    }\n\n    public isPrepaidSelected():boolean {\n        return this.offersComponentService.isPrepaidSelected();\n    }\n\n    public isHardwareOnlySelected():boolean {\n        return this.offersComponentService.isHardwareOnlySelected();\n    }\n}","export default \" <div class=buy data-ng-if=$ctrl.isPrepaidSelected()> <div class=price-flags> <div class=price-flag-collection> <div class=\\\"pricing price-flag price-flag-invert price-flag-left price-flag-sm price-flag-align-left\\\"> <div class=price> <co-price-display co-price-display-prices=$ctrl.getPrices() co-price-display-type=tariff></co-price-display> </div> </div> <div class=\\\"pricing price-flag price-flag-left price-flag-sm price-flag-align-right\\\"> <a class=info data-ng-if=$ctrl.getFootnotes() data-co-modal-info data-co-modal-info-title=\\\"Weitere Hinweise und Fußnoten\\\" data-co-modal-info-content=\\\"{{ $ctrl.getFootnotes() }}\\\">i</a> <div class=price> <co-price-display co-price-display-prices=$ctrl.getPrices() co-price-display-type=hardware></co-price-display> </div> </div> </div> <co-offer-cart-display co-offer-prices-id=$ctrl.id></co-offer-cart-display> <co-offer-stock-hint co-offer-stock-hint-id=$ctrl.id></co-offer-stock-hint> </div> </div> <div class=\\\"buy plain-price\\\" data-ng-if=\\\"$ctrl.isPostpaidSelected() || $ctrl.isHardwareOnlySelected()\\\"> <div class=price-flags> <div class=offer-refined style=padding:0> <div class=offer-overview> <div class=offer-pricing style=transform:none> <co-price-display-plain co-price-display-prices=$ctrl.getPrices() co-price-display-footnotes=$ctrl.getFootnotes() co-price-display-type=single co-price-display-id=$ctrl.id></co-price-display-plain> <co-offer-cart-display co-offer-prices-id=$ctrl.id></co-offer-cart-display> <co-offer-stock-hint co-offer-stock-hint-id=$ctrl.id></co-offer-stock-hint> </div> </div> </div> </div> </div> \";","import {PriceDisplayController} from \"./PriceDisplayController\";\nimport coPriceDisplayTemplateHtml from \"./coPriceDisplayTemplate.html\";\n\nexport class CoPriceDisplay implements ng.IComponentOptions {\n    bindings:any = {\n        type: '@coPriceDisplayType',\n        prices: '<coPriceDisplayPrices'\n    };\n    controller:any = PriceDisplayController;\n    template:string = coPriceDisplayTemplateHtml;\n}\n","import {PriceContentsValue} from \"../../../domain/PriceContentsValue\";\nimport {PriceValue} from \"../../../domain/PriceValue\";\nimport {IOffersComponentService} from \"../IOffersComponentService\";\n\nexport class PriceDisplayController {\n    static $inject:string[] = ['offersComponentService'];\n\n    public prices:PriceValue;\n    public _type:string;\n\n\n    constructor(private offersComponentService:IOffersComponentService) {\n    }\n\n    set type(v:string) {\n        argsContract(arguments, 'string {{ oneOf(\"hardware\", \"tariff\", \"single\") }}');\n        this._type = v;\n    }\n\n    get type():string {\n        return this._type;\n    }\n\n    public getPreDescription():string {\n        switch (this.type) {\n            case 'hardware':\n                return this.getContents().hardwarePrePriceDescription;\n            case 'tariff':\n                return this.getContents().tariffPrePriceDescription;\n            case 'single':\n                return this.getContents().singlePrePriceDescription;\n            default:\n                return '';\n        }\n    }\n\n    public getPostDescription():string {\n        switch (this.type) {\n            case 'hardware':\n                return this.getContents().hardwarePostPriceDescription;\n            case 'tariff':\n                return this.getContents().tariffPostPriceDescription;\n            case 'single':\n                return this.getContents().singlePostPriceDescription;\n            default:\n                return '';\n        }\n    }\n\n    public getPriceInteger():string {\n        return this.offersComponentService.getPriceInteger(this.getPrice());\n    }\n\n    public getPriceDecimal():string {\n        return this.offersComponentService.getPriceDecimal(this.getPrice());\n    }\n\n    private getPrice():number {\n        switch (this.type) {\n            case 'hardware':\n                return this.prices.hardwarePriceAmount;\n            case 'tariff':\n                return this.prices.tariffPriceAmount;\n            case 'single':\n                return this.prices.singlePriceAmount;\n            default:\n                return 0;\n        }\n    }\n\n    public isTotalPriceDisplayEnabled():boolean {\n        return this.offersComponentService.isTotalPriceDisplayEnabled();\n    }\n    \n    private getTotalPrice():number {\n        return this.prices.totalPriceAmount;\n    }\n\n    private getContents():PriceContentsValue {\n        return this.prices.contents;\n    }\n}\n","export default \"<p> <span class=cond data-ng-bind-html=\\\"$ctrl.getPreDescription() | coUnsafeHtml\\\"></span> <span class=sum>{{ $ctrl.getPriceInteger() }}</span> <span class=suffix>{{ $ctrl.getPriceDecimal() }}</span> <span class=currency>€</span> <span class=cond data-ng-bind-html=\\\"$ctrl.getPostDescription() | coUnsafeHtml\\\"></span> </p><div data-ng-if=$ctrl.isTotalPriceDisplayEnabled()> <span class=cond>Gesamtpreis {{ $ctrl.getTotalPrice() }} €</span> </div> <p></p> \";","import {OfferStockHintController} from \"./OfferStockHintController\";\nimport coOfferStockHintTemplateHtml from \"./coOfferStockHintTemplate.html\";\n\nexport class CoOfferStockHint implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coOfferStockHintId'\n    };\n    controller:any = OfferStockHintController;\n    template:string = coOfferStockHintTemplateHtml;\n}\n","import {StockHintValue} from \"../../../domain/hardware/StockHintValue\";\nimport {StockHintType} from \"../../../domain/hardware/StockHintType\";\nimport {IOffersComponentService} from \"../IOffersComponentService\";\nexport class OfferStockHintController {\n\n    static $inject:string[] = ['offersComponentService'];\n\n    private id:string;\n\n    constructor(private offersComponentService:IOffersComponentService) {\n    }\n\n    public getStockHintText():string {\n        return this.getStockHint().contents.hint;\n    }\n\n    public getCssClassForStockHint():string {\n        let stockHint:StockHintValue = this.getStockHint();\n\n        switch (stockHint.hintType) {\n            case StockHintType.OUT_OF_STOCK:\n                return 'not-available';\n            case StockHintType.ON_STOCK_LIMITED_AVAILABILITY:\n                return 'short';\n            case StockHintType.ON_STOCK:\n            case StockHintType.VIRTUAL_STOCK:\n                return 'available';\n            default:\n                return '';\n        }\n    }\n\n    private getStockHint():StockHintValue {\n        return this.offersComponentService.getStockHint(this.id);\n    }\n\n}\n","export default \"<div class=stock data-ng-class=$ctrl.getCssClassForStockHint()> <span data-ng-bind-html=\\\"$ctrl.getStockHintText() | coUnsafeHtml\\\"></span> </div>\";","import {OfferHardwareStoragesController} from \"./OfferHardwareStoragesController\";\nimport  coOfferHardwareStoragesTemplateHtml  from \"./coOfferHardwareStoragesTemplate.html\";\n\nexport class CoOfferHardwareStorages implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coOfferHardwareStoragesId'\n    };\n    controller:any = OfferHardwareStoragesController;\n    template:string = coOfferHardwareStoragesTemplateHtml;\n}\n","import {IOffersComponentService} from \"../IOffersComponentService\";\nimport {StorageOptionValue} from \"../../../domain/hardware/StorageOptionValue\";\nexport class OfferHardwareStoragesController {\n    static $inject:string[] = ['offersComponentService'];\n\n    private id:string;\n\n    constructor(private offersComponentService:IOffersComponentService) {\n    }\n\n    public getHardwareStorages():StorageOptionValue[] {\n        return this.offersComponentService.getHardwareStorages(this.id);\n    };\n\n    public setHardwareStorage(storage:StorageOptionValue):void {\n        this.offersComponentService.setHardwareStorage(this.id, storage);\n    }\n}\n","export default \"<ul class=select-size> <li data-ng-repeat=\\\"storage in $ctrl.getHardwareStorages() track by storage.contents.optionName\\\" data-ng-class=\\\"{ 'active': storage.selected }\\\" data-co-uitest-element=storage data-ng-click=$ctrl.setHardwareStorage(storage)> <span data-ng-bind-html=\\\"storage.contents.optionName | coUnsafeHtml\\\"></span> </li> </ul>\";","import {IDataService} from './IDataService';\nimport {TopOfferPageValue} from '../domain/TopOfferPageValue';\nimport {Content, ICallService, ILogger, ILoggerService, IPageValueProvider} from \"@shop/common\";\nimport {ConfigurationValue} from '../domain/ConfigurationValue';\nimport {HardwareValue} from '../domain/hardware/HardwareValue';\nimport {PriceValue} from '../domain/PriceValue';\nimport {StockHintValue} from '../domain/hardware/StockHintValue';\nimport {TariffValue} from '../domain/tariff/TariffValue';\nimport {HardwareContentsValue} from '../domain/hardware/HardwareContentsValue';\nimport {ColorOptionValue} from '../domain/hardware/ColorOptionValue';\nimport {StorageOptionValue} from '../domain/hardware/StorageOptionValue';\nimport {TariffContentsValue} from '../domain/tariff/TariffContentsValue';\nimport {TechnicalDetailsGroupValue} from '../domain/hardware/TechnicalDetailsGroupValue';\nimport {PackGroupValue} from '../domain/tariff/PackGroupValue';\nimport {MediaGalleryValue} from '../domain/hardware/MediaGalleryValue';\nimport {MediaGalleryItemType} from '../domain/hardware/MediaGalleryItemType';\nimport {MediaGalleryItemValue} from '../domain/hardware/MediaGalleryItemValue';\nimport {StringTechnicalDetailsValue} from '../domain/hardware/StringTechnicalDetailsValue';\nimport {AbstractTechnicalDetailsValue} from '../domain/hardware/AbstractTechnicalDetailsValue';\nimport {EmptyTechnicalDetailsValue} from '../domain/hardware/EmptyTechnicalDetailsValue';\nimport {ListElementValue} from '../domain/ListElementValue';\nimport {CriteriaGroupValue} from \"../domain/criteria/CriteriaGroupValue\";\nimport {CriteriaGroupType} from \"../domain/criteria/CriteriaGroupType\";\nimport {CriteriaValue} from \"../domain/criteria/CriteriaValue\";\nimport {TargetGroupSwitcherValue} from \"../domain/TargetGroupSwitcherValue\";\nimport _ = require('underscore');\n\nexport class DataService implements IDataService {\n\n    static $inject:string[] = [\n        'pageValueProvider',\n        'callService',\n        'loggerService'\n    ];\n\n    private configurationForListElementId:{[id:string]:ConfigurationValue} = {};\n    private logger:ILogger;\n\n    constructor(private pageValueProvider:IPageValueProvider<TopOfferPageValue>,\n                private callService:ICallService,\n                loggerService:ILoggerService) {\n        this.logger = loggerService.create('DataService');\n    }\n\n    public $onInit() {\n\n        //get all list elements...\n        var listElements = []\n            .concat(this.getPageValue().postpaidListElements)\n            .concat(this.getPageValue().prepaidListElements)\n            .concat(this.getPageValue().hardwareOnlyListElements);\n\n        this.configurationForListElementId = listElements.reduce((map, listElement:ListElementValue) => {\n            map[listElement.id] = this.getPageValue().configurations[listElement.initialConfigurationId];\n            return map;\n        }, {});\n    }\n\n    private getCriteriaValues():CriteriaGroupValue[]{\n        return this.getPageValue().criteriaGroups;\n    }\n\n    public getManufacturerCriteriaGroup():{[csSclass:string]:CriteriaValue} {\n        var criteriaValues = this.getCriteriaValues()\n            .filter((criteriaGroup:CriteriaGroupValue) => criteriaGroup.criteriaGroupType === CriteriaGroupType.MANUFACTURER)[0]\n            .criterias;\n\n        return _.reduce(criteriaValues,\n                (map:{[csSclass:string]:CriteriaValue} , criteria:CriteriaValue) => {\n                    map[criteria.title.toLocaleLowerCase()] = criteria;\n                    return map;\n        }, <{[csSclass:string]:CriteriaValue}>{});\n    }\n\n    public getAllCriteriaGroup():CriteriaGroupValue[] {\n        return this.getCriteriaValues()\n            .filter((criteriaGroup:CriteriaGroupValue) => criteriaGroup.criteriaGroupType !== CriteriaGroupType.MANUFACTURER)\n    }\n\n    public submitSelected(id:string):ng.IPromise<any> {\n        var promise:ng.IPromise<any> = this.callService.handleCall(this.getConfiguration(id).calls.submitCall);\n        return promise;\n    }\n\n    public navigateToAllDevices():void {\n        this.callService.handleCall(this.getPageValue().calls.wwwCall);\n    }\n\n    public getConfiguration(listElementId:string):ConfigurationValue {\n        return this.configurationForListElementId[listElementId];\n    }\n\n    public setConfiguration(listElementId:string, configuration:ConfigurationValue):void {\n        this.configurationForListElementId[listElementId] = configuration;\n    }\n\n    public getHardware(id:string):HardwareValue {\n        return this.getConfiguration(id).hardware;\n    }\n\n    /**\n     * transforms a tech data TechnicalDetailsGroupValues so that empty or incomplete tech data entries are omitted\n     */\n    public getTransformedHardwareTechnicalDetailGroups(id:string):TechnicalDetailsGroupValue[] {\n\n        var omitEmptyTechnicalDetailsGroups = function (categoryItem:TechnicalDetailsGroupValue):boolean {\n            // omit TechnicalDetailsGroups with no entries\n            return (categoryItem.technicalDetails.length > 0);\n        };\n\n        var omitEmptyTechnicalDetails = function (technicalDetailsGroup:TechnicalDetailsGroupValue):TechnicalDetailsGroupValue {\n            // omit EmptyTechnicalDetailsValue instances\n            technicalDetailsGroup.technicalDetails =\n                _(technicalDetailsGroup.technicalDetails).filter((technicalDetailsEntry:AbstractTechnicalDetailsValue) => {\n                    return !(technicalDetailsEntry instanceof EmptyTechnicalDetailsValue);\n                });\n            return technicalDetailsGroup;\n        };\n\n        var omitEmptyStringTechnicalDetails = function (technicalDetailsGroup:TechnicalDetailsGroupValue):TechnicalDetailsGroupValue {\n            // omit StringTechnicalDetailsValue instances with an empty or missing keyValue\n            technicalDetailsGroup.technicalDetails =\n                _(technicalDetailsGroup.technicalDetails).filter((technicalDetailsEntry:AbstractTechnicalDetailsValue) => {\n                    return !(\n                        (technicalDetailsEntry instanceof StringTechnicalDetailsValue) && (\n                            (<StringTechnicalDetailsValue>technicalDetailsEntry).keyValue === '' ||\n                            (<StringTechnicalDetailsValue>technicalDetailsEntry).keyValue == null // non-strict equality check indended here\n                        )\n                    );\n                });\n            return technicalDetailsGroup;\n        };\n\n        return _(this.getHardware(id).technicalDetailGroups).chain()\n            .map(omitEmptyTechnicalDetails)\n            .map(omitEmptyStringTechnicalDetails)\n            .filter(omitEmptyTechnicalDetailsGroups)\n            .value();\n    }\n\n    public getHardwareName(id:string):string {\n        return this.getHardwareContents(id).name;\n    }\n\n    public getHardwareOverviewItems(id:string):string[] {\n        var contents = this.getHardwareContents(id);\n        return [contents.overviewOne, contents.overviewTwo, contents.overviewThree, contents.overviewFour];\n    }\n\n    public getMediaGallery(id:string):MediaGalleryValue {\n        return this.getHardware(id).mediaGallery;\n    }\n\n    public getInitialMediaGalleryItemType(id:string):MediaGalleryItemType {\n        var firstItemWithContent:MediaGalleryItemValue = _.find(this.getMediaGallery(id).items, (item) => {\n            return item.contentAvailable;\n        });\n\n\n        return firstItemWithContent.type;\n    }\n\n    public isMediaGalleryAvailable(id:string):boolean {\n        return _.filter(this.getMediaGallery(id).items, (item) => {\n                return item.contentAvailable;\n            }).length > 0;\n    }\n\n    public getPrices(id:string):PriceValue {\n        return this.getConfiguration(id).price;\n    }\n\n    public isSubmitEnabled(id:string):boolean {\n        return this.getConfiguration(id).submitEnabled;\n    }\n\n    public getFootnotes(id:string):string {\n        let tariff = this.getConfiguration(id).tariff;\n        if (!tariff) {\n            return null;\n        }\n        return tariff.contents.footnotes;\n    }\n\n    public getStockHint(id:string):StockHintValue {\n        return this.getHardware(id).stockHint;\n    }\n\n    public getTariff(id:string):TariffValue {\n        return this.getConfiguration(id).tariff;\n    }\n\n    public getHardwareContents(id:string):HardwareContentsValue {\n        return this.getHardware(id).contents;\n    }\n\n    public getHardwareColors(id:string):ColorOptionValue[] {\n        return this.getHardware(id).colorOptions;\n    }\n\n    public getHardwareStorages(id:string):StorageOptionValue[] {\n        return this.getHardware(id).storageOptions;\n    }\n\n    public getTariffContents(id:string):TariffContentsValue {\n        const tariff:TariffValue = this.getTariff(id);\n        if(tariff !== null) {\n            return tariff.contents;\n        }\n        return null;\n    }\n\n    public getTariffName(id:string):string {\n        return this.getTariffContents(id).name;\n    }\n\n    public getTariffOverviewItems(id:string):string[] {\n        var contents = this.getTariffContents(id);\n        return [contents.overviewOne, contents.overviewTwo, contents.overviewThree, contents.overviewFour];\n    }\n\n    public getTariffConditions(id:string):string {\n        return this.getTariffContents(id).conditions;\n    }\n\n    public getTariffNumberPorting(id:string):string {\n        return this.getTariffContents(id).numberPorting;\n    }\n\n    public getTariffFeatures(id:string):string[] {\n        var contents:TariffContentsValue = this.getTariffContents(id);\n        return [contents.dataVolume, contents.bandwidth, contents.phoneFlat, contents.smsFlat, contents.roaming];\n    }\n\n    public getTariffDataVolume(id:string):any{\n        let contents:TariffContentsValue = this.getTariffContents(id);\n        return contents.dataVolume;\n    }\n\n    public getSeoHeadlineText():string {\n        return this.getPageValue().seoHeadlineText;\n    }\n\n    public getSeoTopTeaserText():string {\n        return this.getPageValue().seoTopTeaserText;\n    }\n\n    public getSeoBottomTeaserText():string {\n        return this.getPageValue().seoBottomTeaserText;\n    }\n\n    private getPageValue():TopOfferPageValue {\n        return this.pageValueProvider.getPageValue();\n    }\n\n\n    public getPackGroups(id:string):PackGroupValue[] {\n        const tariff: TariffValue  = this.getTariff(id);\n        if(tariff !== null) {\n            return tariff.packGroups;\n        }\n        return [];\n    }\n\n    public getPriceInteger(price:number):string {\n        return Math.floor(price).toString();\n    }\n\n    //TODO PTI-543 replace this logic with Money type logic\n    public getPriceDecimal(price:number):string {\n        return (price === 0) ? \"00\" : Math.round(price * 100).toString().substr(-2);\n    }\n\n    public getRatingStars(id:string):string {\n        return this.getHardwareContents(id).ratingStars;\n    }\n\n    public getRatingReviews(id:string):Content {\n        return this.getHardwareContents(id).ratingReviews;\n    }\n\n    public getExternalId(id:string):string {\n        return this.getHardwareContents(id).externalId;\n    }\n\n    public getTargetGroupSwitcherValue(): TargetGroupSwitcherValue {\n        return this.getPageValue().targetGroupSwitcherValue;\n    }\n\n    public switchTargetGroup(): void {\n        // TODO: OSD-2609 fire a second call for logging?\n        this.callService.handleCall(this.getPageValue().targetGroupSwitcherValue.call);\n    }\n\n    public getNoOffersAvailableText(): string {\n        return this.getPageValue().noOffersAvailableText;\n    }\n\n    public getBlauHardwareFlexText(): string {\n        return this.getPageValue().blauHardwareFlexText || '';\n    }\n\n    public getBundleHwCatalogUrl(): string {\n        if (null != this.getPageValue().topOfferSelectionTypeUrl) {\n            return this.getPageValue().topOfferSelectionTypeUrl.bundleHwCatalogUrl;\n        }\n        return null;\n    }\n\n    public getHardwareOnlyHwCatalogUrl(): string {\n        if (null != this.getPageValue().topOfferSelectionTypeUrl) {\n            return this.getPageValue().topOfferSelectionTypeUrl.hardwareOnlyHwCatalogUrl;\n        }\n        return null;\n    }\n\n    public getSchemaData(id:string):any {\n        return this.getConfiguration(id).schemaDataElements;\n    }\n\n    public getEnergyLevel(id:string):string {\n        return this.getConfiguration(id).hardware.contents.energyEfficiency.energyEfficiencyLabel\n    }\n\n    public getProductDataSheet(id:string):string {\n        return this.getConfiguration(id).hardware.contents.energyEfficiency.productDataSheet\n    }\n\n    public getTariffInfoText(id:string):string {\n        return this.getTariffContents(id).tariffInfoText;\n    }\n    public isPdpStoreRedirectionForHWO():boolean {\n        return this.getPageValue().pdpStoreRedirectionForHWO;\n    }\n\n}\n","import {IUiStateService} from \"./IUiStateService\";\nimport {MediaGalleryItemType} from \"../domain/hardware/MediaGalleryItemType\";\n\nexport class UiStateService implements IUiStateService {\n    private uiState:UIState;\n\n    constructor() {\n        this.uiState = new UIState();\n    }\n\n    public isShowMediaGallery():boolean {\n        return this.getUIState().showMediaGallery;\n    }\n\n    public openMediaGallery(id:string):void {\n        this.getUIState().activeMediaGalleryId = id;\n        this.getUIState().showMediaGallery = true;\n    }\n\n    public closeMediaGallery():void {\n        this.getUIState().showMediaGallery = false;\n        this.getUIState().activeMediaGalleryId = '';\n    }\n\n    public getActiveMediaGalleryItemType():MediaGalleryItemType {\n        if(this.getUIState().activeMediaGalleryItemTypeById[this.getActiveMediaGalleryId()]===undefined){\n            return null;\n        }\n        else {\n            return this.getUIState().activeMediaGalleryItemTypeById[this.getActiveMediaGalleryId()];\n        }\n    }\n\n    public setActiveMediaGalleryItemType(type:MediaGalleryItemType) {\n\n        this.getUIState().activeMediaGalleryItemTypeById[this.getActiveMediaGalleryId()] = type;\n    }\n\n    public getActiveMediaGalleryId():string {\n        return this.uiState.activeMediaGalleryId;\n    }\n\n    public isAllDetailsOpen(id:string):boolean {\n        return this.getTileState(id).allDetailsOpen;\n    }\n\n    public toggleAllDetails(id:string):void {\n        this.getTileState(id).allDetailsOpen = !this.getTileState(id).allDetailsOpen;\n    }\n\n    public isTariffAccordionEntryOpen(id:string, entryId:string):boolean {\n        argsContract(arguments, 'string, string');\n        return this.getTileState(id).openTariffAccordionEntryId === entryId;\n    }\n\n    public isHardwareAccordionEntryOpen(id:string, entryId:string):boolean {\n        argsContract(arguments, 'string, string');\n        return this.getTileState(id).openHardwareAccordionEntryId === entryId;\n    }\n\n    public toggleTariffAccordionEntry(id:string, entryId:string):void {\n        argsContract(arguments, 'string, string');\n        this.getTileState(id).openTariffAccordionEntryId = this.getTileState(id).openTariffAccordionEntryId === entryId ? '' : entryId;\n    }\n\n    public toggleHardwareAccordionEntry(id:string, entryId:string):void {\n        argsContract(arguments, 'string, string');\n        this.getTileState(id).openHardwareAccordionEntryId = this.getTileState(id).openHardwareAccordionEntryId === entryId ? '' : entryId;\n    }\n\n    public getActiveReviewsModalId():string {\n        return this.getUIState().activeReviewModalId;\n    }\n\n    public openReviewsModal(id:string) {\n        this.getUIState().activeReviewModalId = id;\n        this.getUIState().showReviewsModal = true;\n    }\n\n    public closeReviewsModal() {\n        this.getUIState().showReviewsModal = false;\n        this.getUIState().activeReviewModalId = '';\n    }\n\n    public isReviewsModalOpen() {\n        return this.getUIState().showReviewsModal;\n    }\n\n    private getUIState():UIState {\n        return this.uiState;\n    }\n\n    private getTileState(id:string):TileState {\n        if (!this.getUIState().tileStates[id]) {\n            this.getUIState().tileStates[id] = new TileState();\n        }\n        return this.getUIState().tileStates[id];\n    }\n\n    public getSubmitInProgress():boolean {\n        return this.getUIState().submitInProgress;\n    }\n\n    public setSubmitInProgress(submitInProgress:boolean):void {\n        this.getUIState().submitInProgress = submitInProgress;\n    }\n\n    public setFilterStatus(filterclicked:boolean):void {\n        this.getUIState().filterClicked = filterclicked;\n    }\n\n    public getFilterStatus():boolean {\n        return this.getUIState().filterClicked;\n    }\n}\n\nclass UIState {\n    showMediaGallery:boolean = false;\n    activeMediaGalleryId:string = '';\n    showReviewsModal:boolean = false;\n    activeReviewModalId:string = '';\n    tileStates:TileState[] = [];\n    //container object for mapping MediaGalleryItemType objects on activeMediaGalleryId strings\n    activeMediaGalleryItemTypeById:{} = {};\n    submitInProgress:boolean = false;\n    filterClicked: boolean = false;\n}\n\nclass TileState {\n    allDetailsOpen:boolean;\n    openTariffAccordionEntryId:string;\n    openHardwareAccordionEntryId:string;\n\n    constructor() {\n        this.allDetailsOpen = false;\n        // the entries which should be opened by default\n        this.openTariffAccordionEntryId = 'tariff-overview';\n        this.openHardwareAccordionEntryId = 'hardware-overview';\n    }\n}","import {IListElementService} from \"./IListElementService\";\nimport {CriteriaValue} from \"../domain/criteria/CriteriaValue\";\nimport {ListElementValue} from \"../domain/ListElementValue\";\nimport {LogicType} from \"../domain/criteria/LogicType\";\nimport {CriteriaGroupValue} from \"../domain/criteria/CriteriaGroupValue\";\nimport {TariffSelectionType} from \"../domain/TariffSelectionType\";\nimport {TopOfferPageValue} from \"../domain/TopOfferPageValue\";\nimport {ILoggerService} from \"@shop/common\";\nimport {IPageValueProvider} from \"@shop/common\";\nimport {ILogger} from \"@shop/common\";\nimport {CriteriaGroupType} from \"../domain/criteria/CriteriaGroupType\";\nimport {SortingEntry} from \"./IListElementService\";\nimport {SortingValue} from \"../domain/SortingValue\";\nimport _ = require(\"underscore\");\nexport class ListElementService implements IListElementService {\n\n    static $inject:string[] = [\n        'pageValueProvider',\n        'loggerService'\n    ];\n\n    private static PAGE_SIZE = 15;\n\n    private prepaidListElements:ListElementValue[] = [];\n    private postpaidListElements:ListElementValue[] = [];\n    private hardwareOnlyListElements:ListElementValue[] = [];\n    private visibleListElements:ListElementValue[] = [];\n    private sortingEntries:SortingEntry[] = [];\n    private selectedSortingEntry:SortingEntry;\n\n    private criteriaValues:CriteriaGroupValue[] = [];\n    private tariffSelectionType:TariffSelectionType;\n\n    private logger:ILogger;\n\n    private elementCountToShow:number;\n    private moreRowsAvailable:boolean = true;\n    private currentCriteriaValue:string = \"\";\n\n    constructor(private pageValueProvider:IPageValueProvider<TopOfferPageValue>,\n                private loggerService:ILoggerService){\n        this.logger = loggerService.create('DataService');\n    }\n\n    public $onInit() {\n        var pageValue = this.getPageValue();\n        this.prepaidListElements = pageValue.prepaidListElements;\n        this.postpaidListElements = pageValue.postpaidListElements;\n        this.hardwareOnlyListElements = pageValue.hardwareOnlyListElements;\n        this.tariffSelectionType = pageValue.tariffSelection;\n        this.criteriaValues = pageValue.criteriaGroups;\n        this.sortingEntries = _(pageValue.sortingValues)\n            .chain()\n            .map((sortingValue:SortingValue) => {\n                return [\n                    new SortingEntry(sortingValue.contents.title, sortingValue.contents.name, true),\n                    new SortingEntry(sortingValue.contents.title, sortingValue.contents.name, false)\n                ]\n            })\n            .flatten()\n            .value();\n\n        this.selectedSortingEntry = this.sortingEntries[0];\n\n        this.resetRowsToShow();\n        this.updateListElementIds();\n    }\n\n    private getPageValue():TopOfferPageValue {\n        return this.pageValueProvider.getPageValue();\n    }\n\n\n    public switchManufacturer(criteriaKeyValue:string):void {\n        this.currentCriteriaValue = criteriaKeyValue;\n        _(this.getCriteriaValues())\n            .chain()\n            .filter((group:CriteriaGroupValue) => CriteriaGroupType.MANUFACTURER === group.criteriaGroupType)\n            .map((group:CriteriaGroupValue) => group.criterias)\n            .flatten()\n            .each((criteria:CriteriaValue) => criteria.selected = false)\n            .filter((criteria:CriteriaValue) => criteria.criteriaKeyValue == criteriaKeyValue)\n            .each((criteria:CriteriaValue) => criteria.selected = true);\n        this.updateListElementIds();\n    }\n\n    public showAllManufacturer():void {\n        _(this.getCriteriaValues())\n            .chain()\n            .filter((group:CriteriaGroupValue) => CriteriaGroupType.MANUFACTURER === group.criteriaGroupType)\n            .map((group:CriteriaGroupValue) => group.criterias)\n            .flatten()\n            .each((criteria:CriteriaValue) => criteria.selected = false);\n        this.updateListElementIds();\n    }\n\n    public toggleCriteriaValue(criteriaKeyValue:string):void{\n        _(this.getCriteriaValues())\n            .chain()\n            .map((group:CriteriaGroupValue) => group.criterias)\n            .flatten()\n            .filter((criteria:CriteriaValue) => criteria.criteriaKeyValue == criteriaKeyValue)\n            .each((criteria:CriteriaValue) => criteria.selected = !criteria.selected);\n\n        this.updateListElementIds();\n    }\n\n    public resetCriteriaSelection():void {\n        _.each(this.criteriaValues, (criteriaValue:CriteriaGroupValue) => {\n           criteriaValue.resetSelectedValues();\n        });\n        this.setTariffSelection(this.getPageValue().tariffSelection);\n    }\n\n    public getVisibleListElements():ListElementValue[] {\n        return this.visibleListElements;\n    }\n\n    public getVisibleListElementIds():string[] {\n        return this.getVisibleListElements().map(listElementValue => listElementValue.id);\n    }\n\n    public getCriteriaValues():CriteriaGroupValue[] {\n        return this.criteriaValues;\n    }\n\n    public getSortingEntries():SortingEntry[] {\n        return this.sortingEntries;\n    }\n\n    public setSelectedSortingEntry(entry:SortingEntry) {\n        this.selectedSortingEntry = entry;\n        this.resetRowsToShow();\n        this.updateListElementIds();\n    }\n\n    public getSelectedSortingEntry() {\n        return this.selectedSortingEntry;\n    }\n\n    public getTariffSelection():TariffSelectionType {\n        return this.tariffSelectionType;\n    }\n\n    public setTariffSelection(type:TariffSelectionType):void {\n        this.tariffSelectionType = type;\n        this.resetRowsToShow();\n        this.updateListElementIds();\n    }\n\n    public isPostpaidSelected():boolean {\n        return this.getTariffSelection() === TariffSelectionType.POSTPAID;\n    }\n\n    public isPrepaidSelected():boolean {\n        return this.getTariffSelection() === TariffSelectionType.PREPAID;\n    }\n\n    public isHardwareOnlySelected():boolean {\n        return this.getTariffSelection() === TariffSelectionType.HARDWARE_ONLY;\n    }\n\n    private updateListElementIds():void {\n\n        this.filterListElementValues();\n        var elements = this.getVisibleListElements();\n        //if compareFunc != 0 && ( < 0, e1 ), else e2\n        var sortedElements = elements.sort((e1:ListElementValue, e2:ListElementValue) => {\n\n            var sortingOrder = this.selectedSortingEntry.descending ? 1 : -1;\n            var sortingName = this.selectedSortingEntry.sortingName;\n            // the higher the index, the lower the rank\n            // e2 > e1 => result < 0 => e1 comes first\n            return (e1.indexBySortingName[sortingName] - e2.indexBySortingName[sortingName]) * sortingOrder;\n        });\n        this.visibleListElements = sortedElements.slice(0, Math.min(this.elementCountToShow, sortedElements.length));\n\n        this.moreRowsAvailable = this.visibleListElements.length < sortedElements.length;\n\n        this.logger.debug(\"updateListElementIds\", {\n            originalListElements: elements,\n            listElementIds: this.visibleListElements,\n            moreRowsAvailable: this.moreRowsAvailable\n        });\n    }\n\n    private getListElements():ListElementValue[] {\n        switch (this.getTariffSelection()) {\n            case TariffSelectionType.PREPAID:\n                return this.prepaidListElements;\n            case TariffSelectionType.HARDWARE_ONLY:\n                return this.hardwareOnlyListElements;\n            default:\n                return this.postpaidListElements;\n        }\n    };\n\n    private filterListElementValues():void {\n        this.visibleListElements = _.filter(this.getListElements(), (listElementValue:ListElementValue) => {\n\n                return _.every(this.getCriteriaValues(), (criteriaGroupValue:CriteriaGroupValue) => {\n                        var selectedValues = _(criteriaGroupValue.criterias)\n                            .filter((criteria) => criteria.selected)\n                            .map((criteria) => criteria.criteriaKeyValue);\n\n                        if (selectedValues.length === 0) {\n                            return true;\n                        }\n\n                        if (criteriaGroupValue.logicType === LogicType.OR) {\n                            // one or more criteria is matching\n                            return _.intersection(selectedValues, listElementValue.criteriaValues).length !== 0;\n                        }\n\n                        if (criteriaGroupValue.logicType === LogicType.AND) {\n                            // all criteria values must match\n                            return _.difference(selectedValues, listElementValue.criteriaValues).length === 0;\n                        }\n                    });\n            }\n        );\n    }\n\n    private resetRowsToShow() {\n        this.elementCountToShow = ListElementService.PAGE_SIZE;\n        this.logger.debug(\"resetRowsToShow\", { rowsToShow: this.elementCountToShow });\n    }\n\n    public showMoreRows():void {\n        this.elementCountToShow += ListElementService.PAGE_SIZE;\n        this.logger.debug(\"showMoreRows\", { rowsToShow: this.elementCountToShow });\n        this.updateListElementIds();\n    }\n\n    public moreRowsToShow():boolean {\n        return this.moreRowsAvailable;\n    }\n    getCurrentCriteriaValue(): string {\n        return this.currentCriteriaValue;\n    }\n}\n","import {CriteriaValue} from \"../domain/criteria/CriteriaValue\";\nimport {ListElementValue} from \"../domain/ListElementValue\";\nimport {TariffSelectionType} from \"../domain/TariffSelectionType\";\nimport {TopOfferPageValue} from \"../domain/TopOfferPageValue\";\nimport {CriteriaGroupValue} from \"../domain/criteria/CriteriaGroupValue\";\nexport interface IListElementService {\n\n    getVisibleListElements():ListElementValue[];\n    toggleCriteriaValue(criteriaKeyValue:string):void;\n    getCriteriaValues():CriteriaGroupValue[];\n    resetCriteriaSelection():void;\n    getTariffSelection():TariffSelectionType;\n    setTariffSelection(type:TariffSelectionType):void;\n    showMoreRows():void;\n    moreRowsToShow():boolean;\n    switchManufacturer(criteriaKeyValue:string):void;\n    showAllManufacturer():void;\n    isPostpaidSelected():boolean;\n    isPrepaidSelected():boolean;\n    isHardwareOnlySelected():boolean;\n    getSortingEntries():SortingEntry[];\n    setSelectedSortingEntry(entry:SortingEntry):void;\n    getSelectedSortingEntry():SortingEntry;\n    getCurrentCriteriaValue(): string;\n}\n\nexport class SortingEntry {\n    constructor(\n        public title:string,\n        public sortingName:string,\n        public descending:boolean\n    ){}\n}","import {ISortingService} from \"./ISortingService\";\nexport class SortingService implements ISortingService {\n    static $inject:string[] = [];\n}\n","import { IConfigurationChangeService } from './IConfigurationChangeService';\nimport { IDataService } from './IDataService';\nimport { ColorOptionValue } from '../domain/hardware/ColorOptionValue';\nimport { StorageOptionValue } from '../domain/hardware/StorageOptionValue';\nimport { PackGroupValue } from '../domain/tariff/PackGroupValue';\nimport { PackValue } from '../domain/tariff/PackValue';\nimport { ICallService, GetCall, Call, IBusyService, ITrackingService} from \"@shop/common\";\nimport { ConfigurationValue } from '../domain/ConfigurationValue';\nimport { TariffOptionValue } from '../domain/TariffOptionValue';\n\nexport class ConfigurationChangeService implements IConfigurationChangeService {\n    static $inject:string[] = ['dataService', 'callService', 'busyService', 'trackingService'];\n\n    constructor(private dataService:IDataService, private callService:ICallService, private busyService:IBusyService, private trackingService:ITrackingService) {\n    }\n\n    public setHardwareColor(id:string, newActiveColor:ColorOptionValue):void {\n        var call:GetCall<ConfigurationValue> = newActiveColor.calls.changeColorOptionCall;\n        this.getNewConfiguration(call, id)\n    }\n\n    public setHardwareStorage(id:string, newActiveStorage:StorageOptionValue):void {\n        var call:Call<ConfigurationValue> = newActiveStorage.calls.changeStorageOptionCall;\n        this.getNewConfiguration(call, id)\n    }\n\n    public selectTariffOptionEntry(id:string, newSelectedEntry:TariffOptionValue):void {\n         var call:Call<ConfigurationValue> = newSelectedEntry.calls.changeTariffCall;\n        this.getNewConfiguration(call, id)\n    }\n\n    public selectPack(id:string, packGroupIndex:number, packGroup:PackGroupValue, newActivePack:PackValue):void {\n        var call:Call<ConfigurationValue> = newActivePack.calls.changePackCall;\n        this.getNewConfiguration(call, id);\n    }\n\n    private getNewConfiguration(call:Call<ConfigurationValue>, id:string):void {\n        this.busyService.busy(\n            this.callService.handleCall(call).then((newConfiguration:ConfigurationValue) => {\n                this.dataService.setConfiguration(id, newConfiguration);\n                this.trackingService.track(newConfiguration.calls.trackingCall);\n            })\n        );\n    }\n}\n","import {IDataService} from \"../../services/IDataService\";\nimport {IFilterComponentService} from \"./IFilterComponentService\";\nimport {TariffSelectionType} from \"../../domain/TariffSelectionType\";\nimport {IListElementService} from \"../../services/IListElementService\";\nimport {CriteriaValue} from \"../../domain/criteria/CriteriaValue\";\nimport {CriteriaGroupValue} from \"../../domain/criteria/CriteriaGroupValue\";\nimport {ListElementValue} from \"../../domain/ListElementValue\";\nimport {SortingEntry} from \"../../services/IListElementService\";\nimport {ITopOfferFeatureToggleService} from \"../../services/ITopOfferFeatureToggleService\";\n\nexport class FilterComponentService implements IFilterComponentService {\n\n    static $inject:string[] = [\n        \"dataService\",\n        \"listElementService\",\n        \"topOfferFeatureToggleService\"\n    ];\n\n    constructor(private dataService:IDataService,\n                private listElementService:IListElementService,\n                private topOfferFeatureToggleService:ITopOfferFeatureToggleService) {\n    }\n\n    public showAllManufacturer():void {\n        return this.listElementService.showAllManufacturer();\n    }\n\n    public switchManufacturer(criteriaKeyValue:string):void {\n        return this.listElementService.switchManufacturer(criteriaKeyValue);\n    }\n\n    public toggleCriteriaValues(criteriaKeyValue:string):void{\n        return this.listElementService.toggleCriteriaValue(criteriaKeyValue);\n    }\n\n    public getCriteriaValues():CriteriaGroupValue[]{\n        return this.dataService.getAllCriteriaGroup();\n    }\n\n    public resetCriteriaSelection():void {\n        this.listElementService.resetCriteriaSelection();\n    }\n\n    public getManufacturerCriteriaValues():{[csSclass:string]:CriteriaValue} {\n        return this.dataService.getManufacturerCriteriaGroup();\n    }\n\n    public getTariffSelection():TariffSelectionType {\n        return this.listElementService.getTariffSelection();\n    }\n\n    public setTariffSelection(type:TariffSelectionType):void {\n        this.listElementService.setTariffSelection(type);\n    }\n\n    public getListElementIds():string[]{\n        return this.listElementService.getVisibleListElements().map((element:ListElementValue) => element.id)\n    }\n\n    public moreRowsToShow():boolean {\n        return this.listElementService.moreRowsToShow();\n    }\n    \n    public showMoreRows():void{\n        return this.listElementService.showMoreRows();\n    }\n    \n    public isFilterDisabled():boolean {\n        return !this.topOfferFeatureToggleService.isFiltersEnabled();\n    }\n    \n    public isTariffOptionSwitchEnabled():boolean {\n        return this.topOfferFeatureToggleService.isTariffOptionSwitchEnabled();\n    }\n\n    public navigateToAllDevices():void {\n        this.dataService.navigateToAllDevices();\n    }\n\n    public getSortingEntries():SortingEntry[] {\n        return this.listElementService.getSortingEntries();\n    }\n\n    public setSelectedSortingEntry(entry:SortingEntry) {\n        this.listElementService.setSelectedSortingEntry(entry);\n    }\n\n    public getSelectedSortingEntry():SortingEntry {\n        return this.listElementService.getSelectedSortingEntry();\n    }\n\n    public getBundleHwCatalogUrl(): string {\n        return this.dataService.getBundleHwCatalogUrl();\n    }\n\n    public getHardwareOnlyHwCatalogUrl(): string {\n        return this.dataService.getHardwareOnlyHwCatalogUrl();\n    }\n}\n","import {StorageOptionValue} from \"../../domain/hardware/StorageOptionValue\";\nimport {ColorOptionValue} from \"../../domain/hardware/ColorOptionValue\";\nimport {TariffOptionValue} from \"../../domain/TariffOptionValue\";\nimport {StockHintValue} from \"../../domain/hardware/StockHintValue\";\nimport {PriceValue} from \"../../domain/PriceValue\";\nimport {IDataService} from \"../../services/IDataService\";\nimport {IConfigurationChangeService} from \"../../services/IConfigurationChangeService\";\nimport {IOffersComponentService} from \"./IOffersComponentService\";\nimport {IUiStateService} from \"../../services/IUiStateService\";\nimport {MediaGalleryValue} from \"../../domain/hardware/MediaGalleryValue\";\nimport {MediaGalleryItemType} from \"../../domain/hardware/MediaGalleryItemType\";\nimport {IListElementService} from \"../../services/IListElementService\";\nimport {ITopOfferFeatureToggleService} from \"../../services/ITopOfferFeatureToggleService\";\nimport {Content} from \"@shop/common\";\nimport {ConfigurationValue} from \"../../domain/ConfigurationValue\";\nimport _ = require(\"underscore\");\nimport {TopOfferTrackingService} from \"../../tracking/TopOfferTrackingService\";\n\nexport class OffersComponentService implements IOffersComponentService {\n    static $inject:string[] = [\n        'dataService',\n        'configurationChangeService',\n        'uiStateService',\n        'listElementService',\n        'topOfferFeatureToggleService',\n        'topOfferTrackingService'\n\n    ];\n\n    constructor(private dataService:IDataService,\n                private configurationChangeService:IConfigurationChangeService,\n                private uiStateService:IUiStateService,\n                private listElementService:IListElementService,\n                private topOfferFeatureToggleService:ITopOfferFeatureToggleService,\n                private topOfferTrackingService: TopOfferTrackingService) {\n    }\n\n    public submitSelected(id:string):void {\n        if(this.isSubmitPossible(id)) {\n            this.uiStateService.setSubmitInProgress(true); // prevent submit as soon as user clicked the submit button\n            const hwIndex = this.listElementService.getVisibleListElements().map(function(value) { return value.id;}).indexOf(id);\n            this.topOfferTrackingService.trackProductClick(this.getConfiguration(id).ecommerceProductValue,this.getSelectedCriteriaValue(),hwIndex);\n            var promise = this.dataService.submitSelected(id);\n            promise.catch(() => {\n                this.uiStateService.setSubmitInProgress(false);\n            });\n        }\n    }\n\n    public isSubmitPossible(id:string):boolean {\n        return !this.uiStateService.getSubmitInProgress() && this.dataService.isSubmitEnabled(id);\n    }\n\n    public isPostpaidSelected():boolean {\n        return this.listElementService.isPostpaidSelected();\n    }\n\n    public isPrepaidSelected():boolean {\n        return this.listElementService.isPrepaidSelected();\n    }\n\n    public isHardwareOnlySelected():boolean {\n        return this.listElementService.isHardwareOnlySelected();\n    }\n\n    public getPrices(id:string):PriceValue {\n        return this.dataService.getPrices(id);\n    }\n\n    public getFootnotes(id:string):string {\n        return this.dataService.getFootnotes(id);\n    }\n\n    public getStockHint(id:string):StockHintValue {\n        return this.dataService.getStockHint(id);\n    }\n\n    public getHardwareName(id:string):string {\n        return this.dataService.getHardwareContents(id).name;\n    };\n\n    public getHardwareImageLink(id:string):string {\n        return this.dataService.getHardwareContents(id).hardwareImageLink;\n    };\n\n    public getHardwarePdpLink(id:string):string {\n        return this.dataService.getHardwareContents(id).hardwarePdpLink;\n    }\n\n    public getHardwareDescription(id:string):string {\n        return this.dataService.getHardwareContents(id).description;\n    };\n\n    public getHardwareColors(id:string):ColorOptionValue[] {\n        return this.dataService.getHardwareColors(id);\n    };\n\n    public getHardwareStorages(id:string):StorageOptionValue[] {\n        return this.dataService.getHardwareStorages(id);\n    };\n\n    public getTariffFeatures(id:string):string[] {\n        return this.dataService.getTariffFeatures(id);\n    }\n\n    public getTariffOptionEntries(id:string):TariffOptionValue[] {\n        return this.dataService.getConfiguration(id).tariffOptionEntries;\n    };\n\n    public setHardwareColor(id:string, color:ColorOptionValue):void {\n        this.configurationChangeService.setHardwareColor(id, color);\n    }\n\n    public setHardwareStorage(id:string, storage:StorageOptionValue):void {\n        this.configurationChangeService.setHardwareStorage(id, storage);\n    }\n\n    public getPriceInteger(price:number):string {\n        return this.dataService.getPriceInteger(price);\n    }\n\n    public getPriceDecimal(price:number):string {\n        return this.dataService.getPriceDecimal(price);\n    }\n\n    public formatPrice(\n        price: number,\n        withoutTrailingZeros: boolean = false\n    ): string {\n        const integer = this.getPriceInteger(price);\n        const decimal = this.getPriceDecimal(price);\n\n        if (decimal === \"00\" && withoutTrailingZeros) {\n            return integer;\n        }\n\n        return `${this.getPriceInteger(price)},${this.getPriceDecimal(price)}`;\n    }\n\n    public selectOptionEntry(id:string, selectedEntry:TariffOptionValue):void {\n        this.configurationChangeService.selectTariffOptionEntry(id, selectedEntry);\n    }\n\n    public isShowMediaGallery():boolean {\n        return this.uiStateService.isShowMediaGallery();\n    }\n\n    public openMediaGallery(id:string):void {\n        this.uiStateService.openMediaGallery(id);\n    }\n\n    public closeMediaGallery():void {\n        this.uiStateService.closeMediaGallery();\n    }\n\n    public getMediaGallery():MediaGalleryValue {\n        let id = this.uiStateService.getActiveMediaGalleryId();\n        return this.dataService.getMediaGallery(id);\n    }\n\n    public getActiveMediaGalleryItemType():MediaGalleryItemType {\n        let id = this.uiStateService.getActiveMediaGalleryId();\n        if (_.isNull(this.uiStateService.getActiveMediaGalleryItemType())) {\n            this.uiStateService.setActiveMediaGalleryItemType(this.dataService.getInitialMediaGalleryItemType(id));\n        }\n        return this.uiStateService.getActiveMediaGalleryItemType();\n    }\n\n    public setActiveMediaGalleryItemType(type:MediaGalleryItemType) {\n        this.uiStateService.setActiveMediaGalleryItemType(type);\n    }\n\n    public isMediaGalleryAvailable(id:string):boolean {\n        return this.dataService.isMediaGalleryAvailable(id);\n    }\n\n    public isAllDetailsOpen(id:string):boolean {\n        return this.uiStateService.isAllDetailsOpen(id);\n    }\n\n    public toggleAllDetails(id:string):void {\n        this.uiStateService.toggleAllDetails(id);\n    }\n\n    public isTotalPriceDisplayEnabled():boolean {\n        return this.topOfferFeatureToggleService.isTotalPriceDisplayEnabled();\n    }\n\n    public getRatingStars(id:string) {\n        return this.dataService.getRatingStars(id);\n    }\n\n    public openReviewsModal(id:string):void {\n        this.uiStateService.openReviewsModal(id);\n    }\n\n    public closeReviewsModal():void {\n        this.uiStateService.closeReviewsModal();\n    }\n\n    public isReviewsModalOpen():boolean {\n        return this.uiStateService.isReviewsModalOpen();\n    }\n\n    public getRatingReviews():Content {\n        let id = this.uiStateService.getActiveReviewsModalId();\n        if(_.isEmpty(id)) {\n            return '';\n        }\n        return this.dataService.getRatingReviews(id);\n    }\n\n    public getActiveReviewsHardwareName():string {\n        let id = this.uiStateService.getActiveReviewsModalId();\n        if(_.isEmpty(id)) {\n            return '';\n        }\n        return this.dataService.getHardwareContents(id).name;\n    }\n\n    public getExternalId(id:string):string {\n        return this.dataService.getExternalId(id);\n    }\n\n    public getNoOffersAvailableText(): string {\n        return this.dataService.getNoOffersAvailableText();\n    }\n\n    public getBlauHardwareFlexText(): string {\n        return this.dataService.getBlauHardwareFlexText();\n    }\n\n    public getFormattedStrikeThroughPrice(id:string): string {\n        const config = this.getConfiguration(id);\n        const attributes = config && config.ecommerceProductValue && config.ecommerceProductValue.attributes;\n        const strikePrice = attributes && (attributes.aep_monthly_price_base || attributes.aep_monthly_price_pack_base);\n\n        if (strikePrice == null || strikePrice === '') {\n            return '';\n        }\n\n        const numericStrikePrice = Number(String(strikePrice).replace(',', '.'));\n        if (isNaN(numericStrikePrice)) {\n            return '';\n        }\n\n        const currentPrice = this.getPrices(id);\n        const currentRecurringAmount = currentPrice && currentPrice.singlePriceAmount != null\n            ? Number(currentPrice.singlePriceAmount)\n            : null;\n\n        if (currentRecurringAmount != null && numericStrikePrice <= currentRecurringAmount) {\n            return '';\n        }\n\n        return this.formatPrice(numericStrikePrice, false) + ' €';\n    }\n\n    getConfiguration(id: string): ConfigurationValue {\n        return this.dataService.getConfiguration(id);\n    }\n    getSelectedCriteriaValue(): string {\n        let criteriaValue = this.listElementService.getCurrentCriteriaValue() == \"\" ? \"Alle\" : this.listElementService.getCurrentCriteriaValue().split(\"/\")[2];\n        criteriaValue = criteriaValue == undefined ? 'sonstige' : criteriaValue ;\n        const productType =  this.listElementService.isHardwareOnlySelected() ? \"HW_ONLY\" : \"BUNDLE\";\n        const selectedFilterValue = `${this.dataService.getSeoHeadlineText()}/${productType}/${criteriaValue}_${this.listElementService.getVisibleListElements().length}/privatkunden/${this.listElementService.getSelectedSortingEntry().sortingName}/no_url_params`;\n        return selectedFilterValue;\n    }\n\n    public setFilterStatus(filterclicked:boolean):void {\n        this.uiStateService.setFilterStatus(filterclicked);\n    }\n\n    public getFilterStatus():boolean {\n        return this.uiStateService.getFilterStatus();\n    }\n\n    public getTariffDataVolume(id:string):string{\n        return this.dataService.getTariffDataVolume(id);\n    }\n\n    public getEnergyLevel(id:string): string {\n        return this.dataService.getEnergyLevel(id);\n    }\n    public getProductDataSheet(id:string): string {\n        return this.dataService.getProductDataSheet(id);\n    }\n    public isPdpStoreRedirectionForHWO():boolean {\n        return this.dataService.isPdpStoreRedirectionForHWO();\n    }\n}\n","import {ITabsComponentService} from \"./ITabsComponentService\";\nimport {IDataService} from \"../../services/IDataService\";\nimport {CriteriaValue} from \"../../domain/criteria/CriteriaValue\";\nimport {IListElementService} from \"../../services/IListElementService\";\nimport {ITopOfferFeatureToggleService} from \"../../services/ITopOfferFeatureToggleService\";\nexport class TabsComponentService implements ITabsComponentService {\n    static $inject:string[] = [\"dataService\", \"listElementService\", \"topOfferFeatureToggleService\"];\n\n    constructor(private dataService:IDataService,\n                private listElementService:IListElementService,\n                private topOfferFeatureToggleService:ITopOfferFeatureToggleService) {}\n\n    public isFilterDisabled():boolean {\n        return !this.topOfferFeatureToggleService.isFiltersEnabled();\n    }\n\n    public switchManufacturer(criteriaKeyValue:string):void {\n        this.listElementService.switchManufacturer(criteriaKeyValue);\n    }\n\n    public getManufacturerCriteriaValues():{[csSclass:string]:CriteriaValue} {\n        return this.dataService.getManufacturerCriteriaGroup();\n    }\n\n    public showAllManufacturer():void {\n        this.listElementService.showAllManufacturer();\n    }\n\n    public getSeoHeadlineText():string {\n        return this.dataService.getSeoHeadlineText();\n    }\n\n    public getSeoTopTeaserText():string {\n        return this.dataService.getSeoTopTeaserText();\n    }\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {ConfigurationValue} from \"./ConfigurationValue\";\nimport {CriteriaGroupValue} from \"./criteria/CriteriaGroupValue\";\nimport {SortingValue} from \"./SortingValue\";\nimport {TariffSelectionType} from \"./TariffSelectionType\";\nimport {ListElementValue} from \"./ListElementValue\";\nimport {PageCalls} from \"./PageCalls\";\nimport {FeatureTogglesValue} from \"./FeatureTogglesValue\";\nimport {TargetGroupSwitcherValue} from \"./TargetGroupSwitcherValue\";\nimport {TopOfferSelectionTypeUrl} from \"./TopOfferSelectionTypeUrl\";\nimport {LoginStatusTrackingValue} from \"./LoginStatusTrackingValue\";\n\nexport class TopOfferPageValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:TopOfferPageValue', {\n        prepaidListElements: '[ListElementValue]',\n        postpaidListElements: '[ListElementValue]',\n        hardwareOnlyListElements: '[ListElementValue]',\n        criteriaGroups: '[CriteriaGroupValue]',\n        sortingValues: '[SortingValue]',\n        tariffSelection: 'TariffSelectionType',\n        configurations: '{*:ConfigurationValue}',\n        calls: 'PageCalls',\n        seoHeadlineText: 'string',\n        seoTopTeaserText: 'string',\n        seoBottomTeaserText: 'string',\n        featureTogglesValue: 'FeatureTogglesValue',\n        targetGroupSwitcherValue: 'TargetGroupSwitcherValue',\n        noOffersAvailableText: 'string',\n        blauHardwareFlexText: 'string | null',\n        unifiedTrackingEnabled: 'boolean',\n        topOfferSelectionTypeUrl: 'TopOfferSelectionTypeUrl | null',\n        loginStatusTrackingValue: 'LoginStatusTrackingValue',\n        pdpStoreRedirectionForHWO: 'boolean'\n    });\n\n    prepaidListElements:[ListElementValue];\n    postpaidListElements:[ListElementValue];\n    hardwareOnlyListElements:[ListElementValue];\n    criteriaGroups:CriteriaGroupValue[];\n    sortingValues:SortingValue[];\n    tariffSelection:TariffSelectionType;\n    configurations:{[configurationId:string]:ConfigurationValue};\n    calls:PageCalls;\n    seoHeadlineText:string;\n    seoTopTeaserText:string;\n    seoBottomTeaserText:string;\n    featureTogglesValue:FeatureTogglesValue;\n    targetGroupSwitcherValue: TargetGroupSwitcherValue;\n    noOffersAvailableText: string;\n    blauHardwareFlexText: string;\n    unifiedTrackingEnabled: boolean;\n    topOfferSelectionTypeUrl: TopOfferSelectionTypeUrl;\n    loginStatusTrackingValue: LoginStatusTrackingValue;\n    pdpStoreRedirectionForHWO:boolean;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {HardwareValue} from \"./hardware/HardwareValue\";\nimport {TariffValue} from \"./tariff/TariffValue\";\nimport {TariffOptionValue} from \"./TariffOptionValue\";\nimport {PriceValue} from \"./PriceValue\";\nimport {ConfigurationCalls} from \"./ConfigurationCalls\";\nimport {EcommerceProductValue} from \"./EcommerceProductValue\";\nexport class ConfigurationValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:ConfigurationValue', {\n        id:'string',\n        hardware: 'HardwareValue',\n        tariff: 'TariffValue | null' ,\n        tariffOptionEntries: '[TariffOptionValue] | null',\n        price: 'PriceValue',\n        calls: 'ConfigurationCalls',\n        submitEnabled: 'boolean',\n        ecommerceProductValue: 'EcommerceProductValue | null',\n        schemaDataElements: 'any'\n    });\n\n    id:string;\n    hardware:HardwareValue;\n    tariff:TariffValue;\n    tariffOptionEntries:TariffOptionValue[];\n    price:PriceValue;\n    calls:ConfigurationCalls;\n    submitEnabled: boolean;\n    ecommerceProductValue:EcommerceProductValue;\n    schemaDataElements: any;\n}\n\n","import {MetaInfo, Call, valueMetaInfo, ConstantCall, TrackingInfoValue} from \"@shop/common\";\nexport class ConfigurationCalls {\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:ConfigurationCalls', {\n        submitCall: 'Call',\n        trackingCall: 'Call'\n    });\n\n    submitCall:Call<any>;\n    trackingCall:Call<TrackingInfoValue>;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class CurrentConfigurationValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:CurrentConfigurationValue', {\n        shopContext: 'string',\n        targetGroup: 'string',\n        hardwareOfferName: 'string',\n        tariffOfferName: 'string | null',\n        selectedTariffPackNames: '[string] | null'\n    });\n\n    shopContext:string;\n    targetGroup:string;\n    hardwareOfferName:string;\n    tariffOfferName:string;\n    selectedTariffPackNames:string[];\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {PriceContentsValue} from \"./PriceContentsValue\";\nexport class PriceValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:PriceValue', {\n        showSinglePrice: 'boolean',\n        singlePriceAmount: 'number | null',\n        tariffPriceAmount: 'number | null',\n        hardwarePriceAmount: 'number | null',\n        totalPriceAmount: 'number | null',\n        contents: 'PriceContentsValue',\n        nonRecurringAmount:'number | null'\n    });\n\n    showSinglePrice:boolean;\n    singlePriceAmount:number;\n    hardwarePriceAmount:number;\n    tariffPriceAmount:number;\n    totalPriceAmount:number;\n    nonRecurringAmount:number;\n    contents:PriceContentsValue;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class PriceContentsValue {\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:PriceContentsValue', {\n        hardwarePrePriceDescription: 'string | null',\n        hardwarePostPriceDescription: 'string | null',\n        tariffPrePriceDescription: 'string | null',\n        tariffPostPriceDescription: 'string | null',\n        singlePrePriceDescription: 'string | null',\n        singlePostPriceDescription: 'string | null',\n        contractDurationDescription: 'string | null',\n        activationFeeDescription: 'string | null'\n    });\n\n    hardwarePrePriceDescription:string;\n    hardwarePostPriceDescription:string;\n    tariffPrePriceDescription:string;\n    tariffPostPriceDescription:string;\n    singlePrePriceDescription:string;\n    singlePostPriceDescription:string;\n    contractDurationDescription:string;\n    activationFeeDescription:string;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {SortingContentsValue} from \"./SortingContentsValue\";\nexport class SortingValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:SortingValue', {\n        contents: 'SortingContentsValue',\n        selected: 'boolean'\n    });\n\n    contents:SortingContentsValue;\n    selected:boolean;\n\n}\n    ","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class SortingContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:SortingContentsValue', {\n        name: 'string',\n        title: 'string'\n    });\n\n    name:string;\n    title:string;\n}\n    ","import {valueMetaInfo} from '@shop/common';\n\nexport class TopOfferSelectionTypeUrl {\n\n    static META_INFO = valueMetaInfo('topOffer:TopOfferSelectionTypeUrl', {\n        bundleHwCatalogUrl: 'string',\n        hardwareOnlyHwCatalogUrl: 'string'\n    });\n\n    bundleHwCatalogUrl: string;\n    hardwareOnlyHwCatalogUrl: string;\n}","import {valueMetaInfo, MetaInfo} from \"@shop/common\";\nimport {CriteriaValue} from \"./CriteriaValue\";\nimport {LogicType} from \"./LogicType\";\nimport {CriteriaGroupType} from \"./CriteriaGroupType\";\nimport _ = require(\"underscore\");\nexport class CriteriaGroupValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:CriteriaGroupValue', {\n        title: 'string',\n        criteriaGroupType: 'CriteriaGroupType | undefined',\n        criterias: '[CriteriaValue]',\n        logicType: 'LogicType | undefined'\n    });\n\n    title:string;\n    criteriaGroupType:CriteriaGroupType;\n    criterias:CriteriaValue[];\n    logicType:LogicType;\n\n    getSelectedValues():string[] {\n        var selected = _.filter(this.criterias,\n            (criteria) => criteria.selected\n        );\n\n        return _.map(\n            selected,\n            (criteria) => criteria.criteriaKeyValue\n        );\n    }\n\n    resetSelectedValues():void {\n        _.each(this.criterias, (criteria:CriteriaValue) => {\n            criteria.selected = false;\n        });\n    }\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {CriteriaContentsValue} from \"./CriteriaContentsValue\";\nexport class CriteriaValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:CriteriaValue', {\n        title:'string',\n        criteriaKeyValue:'string',\n        selected: 'boolean'\n    });\n\n    title:string;\n    criteriaKeyValue:string;\n    selected:boolean;\n\n    toggle():void {\n        this.selected = !this.selected;\n    }\n\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class CriteriaContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:CriteriaContentsValue', {\n        name: 'string',\n        title: 'string',\n        value: 'string'\n    });\n\n    name:string;\n    title:string;\n    value:string;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {ColorOptionContentsValue} from \"./ColorOptionContentsValue\";\nimport {ColorOptionCalls} from \"./ColorOptionCalls\";\nexport class ColorOptionValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:ColorOptionValue', {\n        contents: 'ColorOptionContentsValue',\n        selected: 'boolean',\n        calls: 'ColorOptionCalls'\n    });\n\n    contents:ColorOptionContentsValue;\n    selected:boolean;\n    calls:ColorOptionCalls;\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class ColorOptionContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:ColorOptionContentsValue', {\n        optionName: 'string',\n        imageHtml: 'string | null'\n    });\n\n    optionName:string;\n    imageHtml:string;\n\n    get imageUrl():String {\n        // since the image HTML snippet from the CMS does not have a root element,\n        // the content must be wrapped in a dummy, root <div> element for the\n        // jQuery selectors to work\n        return $('<div>').append($.parseHTML(this.imageHtml)).find('img').attr('src');\n    }\n\n}\n","import { MetaInfo, valueMetaInfo, GetCall } from \"@shop/common\";\nimport {ConfigurationValue} from \"../ConfigurationValue\";\nexport class ColorOptionCalls {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:ColorOptionCalls', {\n        changeColorOptionCall: 'GetCall'\n    });\n\n    changeColorOptionCall:GetCall<ConfigurationValue>;\n}","import {MetaInfo, valueMetaInfo, Content} from \"@shop/common\";\nimport {EnergyEfficiency} from \"./EnergyEfficiency\";\nexport class HardwareContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:HardwareContentsValue', {\n        name: 'string',\n        hardwareImageLink: 'string',\n        hardwarePdpLink: 'string',\n        overviewOne: 'string',\n        overviewTwo: 'string',\n        overviewThree: 'string',\n        overviewFour: 'string',\n        description: 'string',\n        ratingStars: 'string',\n        ratingReviews: 'Content',\n        externalId: 'string',\n        energyEfficiency: 'EnergyEfficiency',\n        growHint: 'string',\n        networkHint: 'string',\n        packList: 'string',\n        infoIconToggle: 'boolean',\n    });\n\n    name:string;\n    overviewOne:string;\n    overviewTwo:string;\n    overviewThree:string;\n    overviewFour:string;\n    hardwareImageLink:string;\n    hardwarePdpLink:string;\n    description:string;\n    overview:string[];\n    ratingStars:string;\n    ratingReviews:Content;\n    externalId: string;\n    energyEfficiency: EnergyEfficiency;\n    growHint: string;\n    networkHint: string;\n    packList: string;\n    infoIconToggle: boolean;\n}\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {HardwareContentsValue} from \"./HardwareContentsValue\";\nimport {ColorOptionValue} from \"./ColorOptionValue\";\nimport {StorageOptionValue} from \"./StorageOptionValue\";\nimport {MediaGalleryValue} from \"./MediaGalleryValue\";\nimport {StockHintValue} from \"./StockHintValue\";\nimport {TechnicalDetailsGroupValue} from \"./TechnicalDetailsGroupValue\";\n\nexport class HardwareValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:HardwareValue', {\n        contents: 'HardwareContentsValue',\n        colorOptions: '[ColorOptionValue]',\n        storageOptions: '[StorageOptionValue]',\n        mediaGallery: 'MediaGalleryValue',\n        technicalDetailGroups: 'TechnicalDetailsGroupValue[]',\n        stockHint: 'StockHintValue'\n    });\n\n    contents:HardwareContentsValue;\n    colorOptions:ColorOptionValue[];\n    storageOptions:StorageOptionValue[];\n    mediaGallery:MediaGalleryValue;\n    technicalDetailGroups:TechnicalDetailsGroupValue[];\n    stockHint:StockHintValue;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {MediaGalleryItemContentsValue} from \"./MediaGalleryItemContentsValue\";\nimport {MediaGalleryItemType} from \"./MediaGalleryItemType\";\nexport class MediaGalleryItemValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:MediaGalleryItemValue', {\n        contents: 'MediaGalleryItemContentsValue',\n        type: 'MediaGalleryItemType',\n        contentAvailable: 'boolean'\n    });\n\n    contents:MediaGalleryItemContentsValue;\n    type:MediaGalleryItemType;\n    contentAvailable: boolean;\n\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class MediaGalleryItemContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:MediaGalleryItemContentsValue', {\n        markup: 'string'\n    });\n\n    markup:string;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {MediaGalleryItemValue} from \"./MediaGalleryItemValue\";\nexport class MediaGalleryValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:MediaGalleryValue', {\n        items: '[MediaGalleryItemValue]'\n    });\n\n    items:MediaGalleryItemValue[];\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {StockHintContentsValue} from \"./StockHintContentsValue\";\nimport {StockHintType} from \"./StockHintType\";\nexport class StockHintValue {\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:StockHintValue', {\n        contents: 'StockHintContentsValue',\n        hintType: 'StockHintType'\n    });\n\n    contents:StockHintContentsValue;\n    hintType:StockHintType;\n\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class StockHintContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:StockHintContentsValue', {\n        hint: 'string',\n    });\n\n    hint:string;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {StorageOptionContentsValue} from \"./StorageOptionContentsValue\";\nimport {StorageOptionCalls} from \"./StorageOptionCalls\";\nexport class StorageOptionValue {\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:StorageOptionValue', {\n        contents: 'StorageOptionContentsValue',\n        selected: 'boolean',\n        calls: 'StorageOptionCalls'\n    });\n\n    contents:StorageOptionContentsValue;\n    selected:boolean;\n    calls:StorageOptionCalls;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class StorageOptionContentsValue {\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:StorageOptionContentsValue', {\n        optionName: 'string',\n        amount: 'number'\n    });\n\n    optionName:string;\n    amount:number;\n}\n","import {ConfigurationValue} from \"../ConfigurationValue\";\nimport { valueMetaInfo, MetaInfo, GetCall } from \"@shop/common\";\n\nexport class StorageOptionCalls {\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:StorageOptionCalls', {\n        changeStorageOptionCall: 'GetCall'\n    });\n\n    changeStorageOptionCall:GetCall<ConfigurationValue>;\n}\n","import {PackGroupContentsValue} from \"./PackGroupContentsValue\";\nimport {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {PackValue} from \"./PackValue\";\nexport class PackGroupValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:PackGroupValue', {\n        id: 'string',\n        contents: 'PackGroupContentsValue',\n        packs: '[PackValue]'\n\n    });\n\n    id:string;\n    contents:PackGroupContentsValue;\n    packs:PackValue[];\n\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class PackGroupContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:PackGroupContentsValue', {\n        title: 'string'\n    });\n\n    title:string;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {PackContentsValue} from \"./PackContentsValue\";\nimport {PackCalls} from \"./PackCalls\";\nexport class PackValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:PackValue', {\n        contents: 'PackContentsValue',\n        selected: 'boolean',\n        calls: 'PackCalls'\n    });\n\n    contents:PackContentsValue;\n    selected:boolean;\n    calls:PackCalls;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class PackContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:PackContentsValue', {\n        name: 'string',\n        price: 'number',\n        description: 'string | null',\n        details: 'string | null'\n    });\n\n    name:string;\n    price:number;\n    description:string;\n    details:string;\n}\n","import {MetaInfo, valueMetaInfo, Call} from \"@shop/common\";\nexport class PackCalls {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:PackCalls', {\n        changePackCall: 'Call'\n    });\n\n    changePackCall:Call<any>;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class TariffContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:TariffContentsValue', {\n        name: 'string',\n        description: 'string',\n        overviewOne: 'string',\n        overviewTwo: 'string',\n        overviewThree: 'string',\n        overviewFour: 'string',\n        dataVolume: 'string',\n        bandwidth: 'string',\n        phoneFlat: 'string',\n        smsFlat: 'string',\n        roaming: 'string',\n        conditions: 'string',\n        numberPorting: 'string',\n        footnotes: 'string',\n        tariffInfoText: 'string'\n    });\n\n        name:string;\n        description:string;\n        overviewOne: string;\n        overviewTwo: string;\n        overviewThree: string;\n        overviewFour: string;\n        dataVolume: string;\n        bandwidth: string;\n        phoneFlat: string;\n        smsFlat: string;\n        roaming: string;\n        conditions:string;\n        numberPorting:string;\n        footnotes:string;\n        tariffInfoText: string;\n    }\n\n\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {TariffContentsValue} from \"./TariffContentsValue\";\nimport {PackGroupValue} from \"./PackGroupValue\";\nexport class TariffValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:TariffValue', {\n        contents: 'TariffContentsValue',\n        packGroups: '[PackGroupValue]'\n\n    });\n\n    contents:TariffContentsValue;\n    packGroups:PackGroupValue[];\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nimport {TariffOptionContentsValue} from \"./TariffOptionContentsValue\";\nimport {TariffOptionCalls} from \"./TariffOptionCalls\";\nexport class TariffOptionValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:TariffOptionValue', {\n        id: 'string',\n        contents: 'TariffOptionContentsValue',\n        selected: 'boolean',\n        calls: 'TariffOptionCalls'\n    });\n\n    id:string;\n    contents:TariffOptionContentsValue;\n    selected:boolean;\n    calls:TariffOptionCalls;\n}\n","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class TariffOptionContentsValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:TariffOptionContentsValue', {\n        name: 'string',\n        tariffDataVolumeMbNumeric: 'string | null'\n    });\n\n    name:string;\n    tariffDataVolumeMbNumeric:string;\n}\n","import {MetaInfo, Call, valueMetaInfo} from \"@shop/common\";\nexport class TariffOptionCalls {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:TariffOptionCalls', {\n        changeTariffCall: 'Call'\n    });\n\n    changeTariffCall:Call<any>;\n}\n","import coProductDetailsTemplateHtml from \"./coProductDetailsTemplate.html\";\nimport {ProductDetailsController} from \"./ProductDetailsController\";\n\nexport class CoProductDetails implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coProductDetailsId'\n    };\n    template:string = coProductDetailsTemplateHtml;\n    controller:any = ProductDetailsController;\n}","export default \"<section class=product-benefits> <div class=inner> <div class=\\\"item-group item-group-visuals\\\"> <div data-ng-if=$ctrl.displayTariffDetails() class=\\\"items items-tariff\\\"> <co-tariff-details co-tariff-details-id=$ctrl.id></co-tariff-details> </div> <div class=\\\"items items-device\\\"> <co-hardware-details co-hardware-details-id=$ctrl.id></co-hardware-details> </div> </div> </div> </section>\";","import {IProductDetailsComponentService} from \"../IProductDetailsComponentService\";\nimport {TariffSelectionType} from \"../../../domain/TariffSelectionType\";\n\nexport class ProductDetailsController {\n    static $inject:string[] = ['productDetailsComponentService'];\n\n    private id:string;\n\n    constructor(private productDetailsComponentService:IProductDetailsComponentService) {\n    }\n\n    public displayTariffDetails():boolean {\n        return this.productDetailsComponentService.getTariffSelection() !== TariffSelectionType.HARDWARE_ONLY;\n    }\n}\n","import {HardwareDetailsController} from \"./HardwareDetailsController\";\nimport coHardwareDetailsTemplateHtml from \"./coHardwareDetailsTemplate.html\";\n\nexport class CoHardwareDetails implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coHardwareDetailsId'\n    };\n    controller:any = HardwareDetailsController;\n    template:string = coHardwareDetailsTemplateHtml;\n}\n","import {TechnicalDetailsGroupValue} from \"../../../domain/hardware/TechnicalDetailsGroupValue\";\nimport {IProductDetailsComponentService} from \"../IProductDetailsComponentService\";\nimport IAngularEvent = angular.IAngularEvent;\nimport _ = require(\"underscore\");\n\nexport class HardwareDetailsController {\n\n    static $inject:string[] = ['productDetailsComponentService'];\n\n    private id:string;\n\n    constructor(private productDetailsComponentService:IProductDetailsComponentService) {\n    }\n\n    public getHardwareName():string {\n        return this.productDetailsComponentService.getHardwareName(this.id);\n    }\n\n    public getHardwareOverviewItems():string[] {\n        return this.productDetailsComponentService.getHardwareOverviewItems(this.id);\n    }\n\n    public isHardwareOverviewItemsEmpty():boolean {\n        return _.isEmpty(this.getHardwareOverviewItems());\n    }\n\n    public getTransformedHardwareTechnicalDetailGroups():TechnicalDetailsGroupValue[] {\n        return this.productDetailsComponentService.getTransformedHardwareTechnicalDetailGroups(this.id);\n    }\n\n    public isAccordionEntryOpen(entryId:string):boolean {\n        return this.productDetailsComponentService.isHardwareAccordionEntryOpen(this.id, entryId);\n    }\n\n    public toggleAccordionEntry(entryId:string, $event:IAngularEvent):void {\n        $event.preventDefault();\n        this.productDetailsComponentService.toggleHardwareAccordionEntry(this.id, entryId);\n    }\n}\n","export default \"<div> <h2 class=\\\"h2 headline\\\"> <span class=\\\"glyphicon glyphicon-smartphone\\\"></span> <span data-ng-bind-html=\\\"$ctrl.getHardwareName() | coUnsafeHtml\\\"></span> </h2> <div id=\\\"accordion-product-hardware-{{ $ctrl.id }}\\\" class=\\\"panel-group section-accordion\\\"> <div class=panel data-ng-if=!$ctrl.isHardwareOverviewItemsEmpty()> <a data-ng-href=\\\"#accordion-product-hardware-{{ $ctrl.id }}-overview\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('hardware-overview') }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry('hardware-overview', $event)\\\"> Im Überblick </a> <div id=\\\"accordion-product-hardware-{{ $ctrl.id }}-overview\\\" class=\\\"accordion-content co-slide\\\" data-ng-if=\\\"$ctrl.isAccordionEntryOpen('hardware-overview')\\\"> <div class=item data-ng-repeat=\\\"overviewItem in $ctrl.getHardwareOverviewItems() track by $index\\\"> <div data-ng-bind-html=\\\"overviewItem | coUnsafeHtml\\\"></div> </div> </div> </div> <div class=panel data-ng-repeat=\\\"detailsGroup in $ctrl.getTransformedHardwareTechnicalDetailGroups()\\\"> <a data-ng-href=\\\"#accordion-product-hardware-{{ $ctrl.id }}-technical-details-{{ $index + 1 }}\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen(detailsGroup.name) }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry(detailsGroup.name, $event)\\\"> {{ detailsGroup.name }} </a> <div id=\\\"accordion-product-hardware-{{ $ctrl.id }}-technical-details-{{ $index + 1 }}\\\" class=\\\"accordion-content co-slide\\\" data-ng-if=$ctrl.isAccordionEntryOpen(detailsGroup.name)> <div class=table-responsive> <table class=\\\"table table-striped\\\"> <tbody> <tr data-ng-repeat=\\\"detailsEntry in detailsGroup.technicalDetails\\\"> <th scope=row>{{ detailsEntry.keyName }}</th> <td data-ng-if=detailsEntry.isBooleanTypedField()> <div> {{ detailsEntry.keyValue ? \\\"ja\\\" : \\\"nein\\\" }} </div> </td> <td data-ng-if=!detailsEntry.isBooleanTypedField()> <div>{{ detailsEntry.keyValue }}</div> </td> </tr> </tbody> </table> </div> </div> </div> </div> </div> \";","import {IDataService} from \"../../services/IDataService\";\nimport {IProductDetailsComponentService} from \"./IProductDetailsComponentService\";\nimport {TechnicalDetailsGroupValue} from \"../../domain/hardware/TechnicalDetailsGroupValue\";\nimport {TariffSelectionType} from \"../../domain/TariffSelectionType\";\n\nimport {PackValue} from \"../../domain/tariff/PackValue\";\nimport {PackGroupValue} from \"../../domain/tariff/PackGroupValue\";\nimport {IConfigurationChangeService} from \"../../services/IConfigurationChangeService\";\nimport {IUiStateService} from \"../../services/IUiStateService\";\nimport {IListElementService} from \"../../services/IListElementService\";\n\nexport class ProductDetailsComponentService implements IProductDetailsComponentService {\n    static $inject:string[] = ['dataService', 'configurationChangeService', 'uiStateService', 'listElementService'];\n\n    constructor(private dataService:IDataService, private configurationChangeService:IConfigurationChangeService, private uiStateService:IUiStateService, private listElementService:IListElementService) {\n    }\n\n    public getHardwareName(id:string):string {\n        return this.dataService.getHardwareName(id);\n    }\n\n    public getHardwareOverviewItems(id:string):string[] {\n        return this.dataService.getHardwareOverviewItems(id);\n    }\n\n    public getTransformedHardwareTechnicalDetailGroups(id:string):TechnicalDetailsGroupValue[] {\n        return this.dataService.getTransformedHardwareTechnicalDetailGroups(id);\n    }\n\n    public getTariffName(id:string):string {\n        return this.dataService.getTariffName(id);\n    }\n\n    public getTariffOverviewItems(id:string):string[] {\n        return this.dataService.getTariffOverviewItems(id);\n    }\n\n    public getTariffConditions(id:string):string {\n        return this.dataService.getTariffConditions(id);\n    }\n\n    public getTariffNumberPorting(id:string):string {\n        return this.dataService.getTariffNumberPorting(id);\n    }\n\n    public getTariffSelection():TariffSelectionType {\n        return this.listElementService.getTariffSelection();\n    }\n\n    public getPackGroups(id:string):PackGroupValue[] {\n        return this.dataService.getPackGroups(id);\n    }\n\n    public selectPack(id:string, packGroupIndex:number, packGroup:PackGroupValue, clickedPack:PackValue):void {\n        this.configurationChangeService.selectPack(id, packGroupIndex, packGroup, clickedPack);\n    }\n\n    public getPriceInteger(price:number):string {\n        return this.dataService.getPriceInteger(price);\n    }\n\n    public getPriceDecimal(price:number):string {\n        return this.dataService.getPriceDecimal(price);\n    }\n\n    public isTariffAccordionEntryOpen(id:string, entryId:string):boolean {\n        return this.uiStateService.isTariffAccordionEntryOpen(id, entryId);\n    }\n\n    public isHardwareAccordionEntryOpen(id:string, entryId:string):boolean {\n        return this.uiStateService.isHardwareAccordionEntryOpen(id, entryId);\n    }\n\n    public toggleTariffAccordionEntry(id:string, entryId:string):void {\n        this.uiStateService.toggleTariffAccordionEntry(id, entryId);\n    }\n\n    public toggleHardwareAccordionEntry(id:string, entryId:string):void {\n        this.uiStateService.toggleHardwareAccordionEntry(id, entryId);\n    }\n}\n\n\n","import {AbstractTechnicalDetailsValue} from \"./AbstractTechnicalDetailsValue\";\nimport {valueMetaInfo} from \"@shop/common\";\n\nexport class BooleanTechnicalDetailsValue extends AbstractTechnicalDetailsValue {\n\n    static META_INFO = valueMetaInfo('topOffer:BooleanTechnicalDetailsValue', {\n        keyName: 'string | null',\n        keyValue: 'boolean | null'\n    });\n\n    keyValue:boolean;\n\n    public isBooleanTypedField():boolean {\n        return true;\n    }\n}\n","import {enumMetaInfo} from \"@shop/common\";\n\nexport class TechnicalDetailsGroupType {\n\n    static META_INFO = enumMetaInfo('topOffer:TechnicalDetailsGroupType');\n\n    static CAMERA = new TechnicalDetailsGroupType(\"CAMERA\");\n    static DISPLAY = new TechnicalDetailsGroupType(\"DISPLAY\");\n    static DEVICE = new TechnicalDetailsGroupType(\"DEVICE\");\n    static MEMORY = new TechnicalDetailsGroupType(\"MEMORY\");\n\n    constructor(public name:string) {\n        argsContract(arguments, 'str');\n    }\n}\n","import {valueMetaInfo} from \"@shop/common\";\nimport {TechnicalDetailsGroupType} from \"./TechnicalDetailsGroupType\";\nimport {AbstractTechnicalDetailsValue} from \"./AbstractTechnicalDetailsValue\";\n\nexport class TechnicalDetailsGroupValue {\n\n    static META_INFO = valueMetaInfo('topOffer:TechnicalDetailsGroupValue', {\n        name: 'string | null',\n        technicalDetailsGroupType: 'TechnicalDetailsGroupType | null',\n        technicalDetails: 'AbstractTechnicalDetailsValue[] | null'\n    });\n\n    name:string;\n    technicalDetailsGroupType:TechnicalDetailsGroupType;\n    technicalDetails:AbstractTechnicalDetailsValue[];\n}\n\n","import {TariffDetailsController} from \"./TariffDetailsController\";\nimport coTariffDetailsTemplateHtml from \"./coTariffDetailsTemplate.html\";\n\nexport class CoTariffDetails implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coTariffDetailsId'\n    };\n    controller:any = TariffDetailsController;\n    template:string = coTariffDetailsTemplateHtml;\n}","import {IProductDetailsComponentService} from \"../IProductDetailsComponentService\";\nimport {PackGroupValue} from \"../../../domain/tariff/PackGroupValue\";\nimport IAngularEvent = angular.IAngularEvent;\nimport _ = require(\"underscore\");\n\nexport class TariffDetailsController {\n    static $inject:string[] = ['productDetailsComponentService'];\n\n    private id:string;\n\n    constructor(private productDetailsComponentService:IProductDetailsComponentService) {\n    }\n\n    public getTariffName():string {\n        return this.productDetailsComponentService.getTariffName(this.id);\n    }\n\n    public getTariffOverviewItems():string[] {\n        return this.productDetailsComponentService.getTariffOverviewItems(this.id);\n    }\n\n    public getTariffConditions():string {\n        return this.productDetailsComponentService.getTariffConditions(this.id);\n    }\n\n    public getTariffNumberPorting():string {\n        return this.productDetailsComponentService.getTariffNumberPorting(this.id);\n    }\n\n    public isTariffNumberPortingEmpty():boolean {\n        return _.isEmpty(this.getTariffNumberPorting());\n    }\n\n    public isTariffConditionEmpty():boolean {\n        return _.isEmpty(this.getTariffConditions());\n    }\n\n    public isTariffOverviewItemsEmpty():boolean {\n        return _.isEmpty(this.getTariffOverviewItems());\n    }\n\n    public getPackGroups():PackGroupValue[] {\n        return this.productDetailsComponentService.getPackGroups(this.id);\n    }\n\n    public getPackGroupName(packGroup:PackGroupValue):string {\n        return packGroup.contents.title;\n    }\n\n    public isAccordionEntryOpen(entryId:string):boolean {\n        return this.productDetailsComponentService.isTariffAccordionEntryOpen(this.id, entryId);\n    }\n\n    public toggleAccordionEntry(entryId:string, $event:IAngularEvent):void {\n        $event.preventDefault();\n        this.productDetailsComponentService.toggleTariffAccordionEntry(this.id, entryId);\n    }\n}\n","export default \"<div> <h2 class=\\\"h2 headline\\\"> <span class=\\\"glyphicon glyphicon-sim-card\\\"></span><span data-ng-bind-html=\\\"$ctrl.getTariffName() | coUnsafeHtml\\\"></span> </h2> <div id=\\\"accordion-product-tariff-{{ $ctrl.id }}\\\" class=\\\"panel-group section-accordion\\\"> <div class=panel data-ng-if=!$ctrl.isTariffOverviewItemsEmpty()> <a data-ng-href=\\\"#accordion-product-tariff-{{ $ctrl.id }}-overview\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('tariff-overview') }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry('tariff-overview', $event)\\\"> Im Überblick </a> <div id=\\\"accordion-product-tariff-{{ $ctrl.id }}-overview\\\" class=\\\"accordion-content co-slide\\\" data-ng-if=\\\"$ctrl.isAccordionEntryOpen('tariff-overview')\\\"> <div class=item data-ng-repeat=\\\"overviewItem in $ctrl.getTariffOverviewItems() track by $index\\\"> <div data-ng-bind-html=\\\"overviewItem | coUnsafeHtml\\\"></div> </div> </div> </div> <div class=panel data-ng-if=!$ctrl.isTariffConditionEmpty()> <a data-ng-href=\\\"#accordion-product-tariff-{{ $ctrl.id }}-conditions\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('tariff-conditions') }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry('tariff-conditions', $event)\\\"> Konditionen </a> <div id=\\\"accordion-product-tariff-{{ $ctrl.id }}-conditions\\\" class=\\\"accordion-content co-slide\\\" data-ng-if=\\\"$ctrl.isAccordionEntryOpen('tariff-conditions')\\\"> <div data-ng-bind-html=\\\"$ctrl.getTariffConditions() | coUnsafeHtml\\\"></div> </div> </div> <div class=panel data-ng-repeat=\\\"packGroup in $ctrl.getPackGroups()\\\"> <a data-ng-href=\\\"#accordion-product-tariff-{{ $ctrl.id }}-packs-{{ $index }}\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen(packGroup.id) }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry(packGroup.id, $event)\\\"> {{ $ctrl.getPackGroupName(packGroup) }} </a> <div id=\\\"accordion-product-tariff-{{ $ctrl.id }}-packs-{{ $index }}\\\" class=\\\"accordion-content co-slide\\\" data-ng-if=$ctrl.isAccordionEntryOpen(packGroup.id)> <p class=h4>Verfügbare Packs</p> <co-tariff-packs co-tariff-packs-id=$ctrl.id co-tariff-packs-pack-group=packGroup co-tariff-packs-pack-group-index=$index> </co-tariff-packs> </div> </div> <div class=panel data-ng-if=!$ctrl.isTariffNumberPortingEmpty()> <a data-ng-href=\\\"#accordion-product-tariff-{{ $ctrl.id }}-numberporting\\\" data-ng-class=\\\"{ 'collapsed': !$ctrl.isAccordionEntryOpen('tariff-numberporting') }\\\" data-ng-click=\\\"$ctrl.toggleAccordionEntry('tariff-numberporting', $event)\\\"> Rufnummermitnahme </a> <div id=\\\"accordion-product-tariff-{{ $ctrl.id }}-numberporting\\\" class=\\\"accordion-content co-slide\\\" data-ng-if=\\\"$ctrl.isAccordionEntryOpen('tariff-numberporting')\\\"> <div data-ng-bind-html=\\\"$ctrl.getTariffNumberPorting() | coUnsafeHtml\\\"></div> </div> </div> </div> </div>\";","import {TariffPacksController} from \"./TariffPacksController\";\nimport coTariffPacksTemplateHtml from \"./coTariffPacksTemplate.html\";\n\nexport class CoTariffPacks implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coTariffPacksId',\n        packGroup: '<coTariffPacksPackGroup',\n        packGroupIndex: '<coTariffPacksPackGroupIndex'\n    };\n\n    controller:any = TariffPacksController;\n    template:string = coTariffPacksTemplateHtml;\n}","import {IProductDetailsComponentService} from '../IProductDetailsComponentService';\nimport {PackGroupValue} from \"../../../domain/tariff/PackGroupValue\";\nimport {PackValue} from \"../../../domain/tariff/PackValue\";\n\nexport class TariffPacksController {\n    static $inject:string[] = ['productDetailsComponentService'];\n\n    public packGroup:PackGroupValue;\n    public packGroupIndex:number;\n    private id:string;\n\n    constructor(private productDetailsComponentService:IProductDetailsComponentService) {\n    }\n\n    public getPacks():PackValue[] {\n        return this.packGroup.packs;\n    }\n\n    public selectPack(pack:PackValue):void {\n        this.productDetailsComponentService.selectPack(this.id, this.packGroupIndex, this.packGroup, pack);\n    }\n\n    public getPackName(pack:PackValue):string {\n        return pack.contents.name;\n    }\n\n    public getPackDescription(pack:PackValue):string {\n        return pack.contents.description;\n    }\n\n    public getPackDetails(pack:PackValue):string {\n        return pack.contents.details;\n    }\n\n    public getPackPriceInteger(pack:PackValue):string {\n        return this.productDetailsComponentService.getPriceInteger(pack.contents.price);\n    }\n\n    public getPackPriceDecimal(pack:PackValue):string {\n        return this.productDetailsComponentService.getPriceDecimal(pack.contents.price);\n    }\n\n    public onAnchorKeydown = (event: KeyboardEvent) => {\n        if (event.key === 'Enter' || event.key === ' ') {\n            const target = event.target as HTMLElement;\n            target.click();\n            event.preventDefault();\n        }\n    };\n    \n}\n","export default \"<div class=panel-radios> <div data-ng-repeat=\\\"pack in $ctrl.getPacks() track by pack.contents.name\\\" class=\\\"panel panel-radio\\\"> <input data-ng-checked=pack.selected type=radio class=sr-only name=\\\"packs-{{ $ctrl.packGroupIndex }}\\\" id=\\\"radio-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\"> <div class=panel-body> <label data-ng-click=$ctrl.selectPack(pack) for=\\\"radio-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" style=\\\"padding:30px 20px 30px 80px\\\"> <span class=panel-label> <strong>{{ $ctrl.getPackName(pack) }}</strong> <span data-ng-bind-html=\\\"$ctrl.getPackDescription(pack) | coUnsafeHtml\\\"></span> <a class=link data-ng-if=$ctrl.getPackDetails(pack) href=\\\"#modal-pack-details-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" occl-modal=\\\"modal-pack-details-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" tabindex=0 aria-haspopup=dialog aria-controls=\\\"modal-pack-details-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" data-ng-click=$event.stopPropagation()> Mehr erfahren </a> </span> <tef-modal cloak=\\\"\\\" data-ng-if=$ctrl.getPackDetails(pack) id=\\\"modal-pack-details-{{ $ctrl.packGroupIndex }}-{{ $index }}\\\" close-icon=\\\"\\\" color-close-icon=\\\"\\\" aria-label=\\\"Informationen über {{ $ctrl.getPackName(pack) }}\\\" data-ng-click=$event.stopPropagation()> <div slot=title> <h2>{{ $ctrl.getPackName(pack) }}</h2> </div> <div slot=body data-ng-bind-html=\\\"$ctrl.getPackDetails(pack) | coUnsafeHtml\\\" class=co-tariff-pack></div> </tef-modal> <span class=\\\"price price-sm\\\" style=min-width:95px> <span class=sum>{{ $ctrl.getPackPriceInteger(pack) }}</span> <span class=suffix>{{ $ctrl.getPackPriceDecimal(pack) }}</span> <span class=currency>€</span> </span> </label> </div> </div> </div> \";","import {TariffOptionsController} from \"./TariffOptionsController\";\nimport  coTariffOptionsTemplateHtml  from \"./coTariffOptionsTemplate.html\";\n\nexport class CoTariffOptions implements ng.IComponentOptions {\n    controller:any = TariffOptionsController;\n    template:string = coTariffOptionsTemplateHtml;\n}\n","import {IFilterComponentService} from \"../IFilterComponentService\";\nimport {TariffSelectionType} from \"../../../domain/TariffSelectionType\";\n\nexport class TariffOptionsController {\n\n    static $inject:string[] = ['filterComponentService'];\n\n    constructor(private filterComponentService:IFilterComponentService) {\n    }\n\n    public isTariffSelectionHardwareOnly():boolean {\n        return this.filterComponentService.getTariffSelection() === TariffSelectionType.HARDWARE_ONLY;\n    }\n\n    public setTariffSelectionHardwareOnly(): void {\n        this.filterComponentService.setTariffSelection(TariffSelectionType.HARDWARE_ONLY);\n        // Checking current window location is bundle hardware catalog url, in that case user want to\n        // see devices with hardware only selection, then it re-direct on hardware only hw catalog page.\n        if (null != this.filterComponentService.getBundleHwCatalogUrl() &&\n            window.location.href === this.filterComponentService.getBundleHwCatalogUrl()) {\n            window.location.replace(this.filterComponentService.getHardwareOnlyHwCatalogUrl());\n        }\n    }\n\n    public isTariffSelectionPostpaid(): boolean {\n        return this.filterComponentService.getTariffSelection() === TariffSelectionType.POSTPAID;\n    }\n\n    public setTariffSelectionPostpaid(): void {\n        this.filterComponentService.setTariffSelection(TariffSelectionType.POSTPAID);\n        // Checking current window location is hw only hardware catalog url, in that case user want\n        // to see devices with bundle selection, then it re-direct on bundle hw catalog page.\n        if (null != this.filterComponentService.getHardwareOnlyHwCatalogUrl() && (window.location.href === this.filterComponentService.getHardwareOnlyHwCatalogUrl()) ||\n            (window.location.href === this.filterComponentService.getHardwareOnlyHwCatalogUrl().substring(0, this.filterComponentService.getHardwareOnlyHwCatalogUrl().length - 1))) {\n            window.location.replace(this.filterComponentService.getBundleHwCatalogUrl());\n        }\n    }\n\n    public isTariffSelectionPrepaid():boolean {\n        return this.filterComponentService.getTariffSelection() === TariffSelectionType.PREPAID;\n    }\n\n    public setTariffSelectionPrepaid():void {\n        this.filterComponentService.setTariffSelection(TariffSelectionType.PREPAID);\n    }\n}\n","export default \"<div class=filter-group> <div class=group-title> Tarifoptionen </div> <div data-ng-click=$ctrl.setTariffSelectionPostpaid() class=\\\"filter input radio\\\"> <input id=postpaid-label type=radio data-ng-checked=$ctrl.isTariffSelectionPostpaid() /> <label for=postpaid-label data-ng-click=$ctrl.setTariffSelectionPostpaid() class=filter-label data-co-uitest-element=filter-with-tariff>Mit Tarif <span class=label-desc>24 Monate Laufzeit</span></label> </div> <div data-ng-click=$ctrl.setTariffSelectionHardwareOnly() class=\\\"filter input radio\\\"> <input id=hardware-label type=radio data-ng-checked=$ctrl.isTariffSelectionHardwareOnly() /> <label for=hardware-label data-ng-click=$ctrl.setTariffSelectionHardwareOnly() class=filter-label data-co-uitest-element=filter-without-tariff>Ohne Tarif</label> </div> </div> \";","import {HardwareMediaController} from \"./HardwareMediaController\";\nimport coHardwareMediaTemplateHtml from \"./coHardwareMediaTemplate.html\";\nexport function coHardwareMedia():ng.IDirective {\n    return {\n        scope: {\n            id: '=coHardwareMediaId'\n        },\n        replace: true,\n        template: coHardwareMediaTemplateHtml,\n        controller: <any>HardwareMediaController,\n        bindToController: true,\n        controllerAs: '$ctrl'\n    };\n}\n\n","import IAngularEvent = angular.IAngularEvent;\nimport {MediaGalleryItemType} from \"../../../domain/hardware/MediaGalleryItemType\";\nimport {MediaGalleryValue} from \"../../../domain/hardware/MediaGalleryValue\";\nimport {MediaGalleryItemValue} from \"../../../domain/hardware/MediaGalleryItemValue\";\nimport {IOffersComponentService} from \"../IOffersComponentService\";\n\nexport class HardwareMediaController {\n    static $inject:string[] = ['offersComponentService'];\n\n    private id:string;\n\n    constructor(public offersComponentService:IOffersComponentService) {\n    }\n\n    public getTabName(type:MediaGalleryItemType):string {\n        switch (type) {\n            case MediaGalleryItemType.PICTURE:\n                return 'Galerie';\n            case MediaGalleryItemType.VIDEO:\n                return 'Video';\n            case MediaGalleryItemType.THREE_D:\n                return '3D';\n            default:\n                return '';\n        }\n    }\n\n    public isShowMediaGallery():boolean {\n        return this.offersComponentService.isShowMediaGallery();\n    }\n\n    public closeMediaGallery():void {\n        this.offersComponentService.closeMediaGallery();\n    }\n\n    public getMediaGallery():MediaGalleryValue {\n        return this.offersComponentService.getMediaGallery();\n    }\n\n    public isMediaGalleryTypeActive(type:MediaGalleryItemType):boolean {\n        return type === this.getActiveMediaGalleryItemType();\n    }\n\n    public getActiveMediaGalleryItemType():MediaGalleryItemType {\n        return this.offersComponentService.getActiveMediaGalleryItemType();\n    }\n\n    public isMediaGalleryTabShown(item:MediaGalleryItemValue):boolean {\n        return item.contentAvailable;\n    }\n\n    public setActiveMediaGalleryItemType(type:MediaGalleryItemType, $event:IAngularEvent):void {\n        $event.preventDefault();\n        this.offersComponentService.setActiveMediaGalleryItemType(type);\n    }\n}\n\n","export default \"<div class=handy-media id=device-media> <div data-co-modal-dialog data-co-modal-dialog-open=$ctrl.isShowMediaGallery() data-co-modal-dialog-on-close=$ctrl.closeMediaGallery() data-co-modal-dialog-title=\\\"\\\" data-co-modal-dialog-limit-height=true> <div class=nav-tabs-wrapper data-ng-if=$ctrl.isShowMediaGallery()> <ul role=tablist data-js=nav-tabs class=\\\"nav nav-tabs nav-justified margin-top-md margin-bottom-md\\\"> <li class=nav-tab data-ng-repeat=\\\"item in $ctrl.getMediaGallery().items\\\" data-ng-class=\\\"{'active': $ctrl.isMediaGalleryTypeActive(item.type)}\\\" data-ng-if=$ctrl.isMediaGalleryTabShown(item)> <a data-ng-href=#device-media-{{$index}} data-ng-click=\\\"$ctrl.setActiveMediaGalleryItemType(item.type, $event)\\\"> {{ $ctrl.getTabName(item.type) }} </a> </li> </ul> <div class=tab-content> <div class=tab-pane id=device-media-{{$index}} data-ng-repeat=\\\"item in $ctrl.getMediaGallery().items\\\" data-ng-class=\\\"{'active': $ctrl.isMediaGalleryTypeActive(item.type)}\\\" data-ng-if=$ctrl.isMediaGalleryTabShown(item)> <div data-ng-bind-html=\\\"item.contents.markup | coUnsafeHtml\\\"></div> </div> </div> </div> </div> </div>\";","\nimport {MetaInfo, valueMetaInfo} from \"@shop/common\";\nexport class ListElementValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:ListElementValue', {\n        id: 'string',\n        initialConfigurationId:'string',\n        indexBySortingName: '{*: number}',\n        criteriaValues:'string[]',\n    });\n\n    id: string;\n    initialConfigurationId: string;\n    indexBySortingName:{ [s:string]:number; };\n    criteriaValues:string[];\n}\n\n","import {TabsController} from \"./TabsController\";\nimport coTabsTemplateHtml from \"./coTabsTemplate.html\";\n\nexport class CoTabs implements ng.IComponentOptions {\n    controller:any = TabsController;\n    template:string = coTabsTemplateHtml;\n    bindings = {\n        onTabChange: '&'\n    };\n}\n","import {ITabsComponentService} from \"../ITabsComponentService\";\nimport {CriteriaValue} from \"../../../domain/criteria/CriteriaValue\";\nimport {IUiStateService} from \"../../../services/IUiStateService\";\nimport _ = require(\"underscore\");\nexport class TabsController {\n    static $inject:string[] = ['tabsComponentService', 'uiStateService'];\n\n    constructor(private tabsComponentService:ITabsComponentService,\n                private uiStateService:IUiStateService) {}\n\n    public isFilterDisabled():boolean {\n        return this.tabsComponentService.isFilterDisabled();\n    }\n    public switchManufacturer(criteriaKeyValue:string):void {\n        this.uiStateService.setFilterStatus(true);\n        this.tabsComponentService.switchManufacturer(criteriaKeyValue);\n    }\n    public getManufacturerCriteriaValues():{[csSclass:string]:CriteriaValue} {\n        return this.tabsComponentService.getManufacturerCriteriaValues();\n    }\n\n    public showAllManufacturer():void {\n        return this.tabsComponentService.showAllManufacturer();\n    }\n\n    public isNoActiveManufacturer():boolean {\n        let foundManufacturer:CriteriaValue = _.find(this.tabsComponentService.getManufacturerCriteriaValues(), (criteriaValue:CriteriaValue) => {\n            return criteriaValue.selected;\n        });\n\n        return foundManufacturer === undefined;\n    }\n\n    public isActiveManufacturer(criteriaKeyValue:string):boolean {\n        let foundManufacturer:CriteriaValue = _.find(this.tabsComponentService.getManufacturerCriteriaValues(), (criteriaValue:CriteriaValue) => {\n            return criteriaValue.criteriaKeyValue === criteriaKeyValue;\n        });\n\n        return foundManufacturer.selected;\n    }\n\n    public getSeoHeadlineText():string {\n        return this.tabsComponentService.getSeoHeadlineText();\n    }\n\n    public getSeoTopTeaserText():string {\n        return this.tabsComponentService.getSeoTopTeaserText();\n    }\n}\n","export default \"<header class=catalog-header> <div class=inner> <div class=page-header><h1 id=tablist-1 class=h1>{{$ctrl.getSeoHeadlineText()}}</h1></div> <div class=\\\"padding-top-none padding-bottom-sm stage\\\"> <p>{{$ctrl.getSeoTopTeaserText()}}</p> </div> <ul data-ng-if=!$ctrl.isFilterDisabled() class=\\\"csc-nav-tabs nav nav-tabs nav-justified\\\" aria-labelledby=tablist-1 role=tablist> <li data-ng-click=\\\"$ctrl.showAllManufacturer(); $ctrl.onTabChange({ index: -1 })\\\" class=nav-tab data-ng-class=\\\"{'active': $ctrl.isNoActiveManufacturer()}\\\"> <a href=# id=tab-1 role=tab aria-controls=tabpanel-1 data-ng-attr-aria-selected={{$ctrl.isNoActiveManufacturer()}} data-co-click-prevent-default> <span class=\\\"glyphicon glyphicon-smartphone\\\"></span>Alle Hersteller </a> </li> <li data-ng-repeat=\\\"(key, value) in $ctrl.getManufacturerCriteriaValues() track by $index\\\" data-ng-click=\\\"$ctrl.switchManufacturer(value.criteriaKeyValue);$ctrl.onTabChange({ index: $index })\\\" class=nav-tab data-ng-class=\\\"{'active': $ctrl.isActiveManufacturer(value.criteriaKeyValue)}\\\"> <a href=# data-ng-attr-id=\\\"tab-{{$index + 2}}\\\" role=tab data-ng-attr-aria-controls=\\\"tabpanel-{{$index + 2}}\\\" data-ng-attr-aria-selected={{$ctrl.isActiveManufacturer(value.criteriaKeyValue)}} data-ng-if=\\\"value.title !== 'Sonstige'\\\" data-co-click-prevent-default> <span class=\\\"glyphicon glyphicon-{{key}}\\\"></span> <span class=sr-only>{{value.title}}</span> </a> <a href=# id=tab-5 role=tab aria-controls=tabpanel-5 data-ng-attr-aria-selected=\\\"{{$ctrl.isActiveManufacturer('sonstige')}}\\\" data-ng-if=\\\"value.title === 'Sonstige'\\\" data-co-click-prevent-default> <p class=sonstige-tag><span class=\\\"sonstige-tag-icon glyphicon glyphicon-circle-plus\\\"></span>Weitere Hersteller</p> </a> </li> </ul> </div> </header> \";","import {MetaInfo, Call, valueMetaInfo} from \"@shop/common\";\nexport class PageCalls {\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:PageCalls', {\n        wwwCall: 'Call',\n    });\n\n    wwwCall:Call<any>;\n}\n","import {ITopOfferFeatureToggleService} from \"./ITopOfferFeatureToggleService\";\nimport {IPageValueProvider} from \"@shop/common\";\nimport {TopOfferPageValue} from \"../domain/TopOfferPageValue\";\n\nexport class TopOfferFeatureToggleService implements ITopOfferFeatureToggleService {\n\n    static $inject:string[] = ['pageValueProvider'];\n\n    constructor(private pageValueProvider:IPageValueProvider<TopOfferPageValue>) {\n    }\n\n    public isFiltersEnabled():boolean {\n        return this.pageValueProvider.getPageValue().featureTogglesValue.filtersEnabled;\n    };\n\n    public isTotalPriceDisplayEnabled():boolean {\n        return this.pageValueProvider.getPageValue().featureTogglesValue.totalPriceDisplayEnabled;\n    };\n\n    public isTariffOptionSwitchEnabled():boolean {\n        return this.pageValueProvider.getPageValue().featureTogglesValue.tariffOptionSwitchEnabled;\n    };\n    public isNewBlauPlpEnabled():boolean {\n        return this.pageValueProvider.getPageValue().featureTogglesValue.newBlauPlpEnabled;\n    };\n\n}\n","import {valueMetaInfo} from \"@shop/common\";\nexport class FeatureTogglesValue {\n\n    static META_INFO = valueMetaInfo('topOffer:FeatureTogglesValue', {\n        filtersEnabled: 'boolean',\n        totalPriceDisplayEnabled: 'boolean',\n        tariffOptionSwitchEnabled: 'boolean',\n        newBlauPlpEnabled: 'boolean'\n    });\n\n    filtersEnabled:boolean;\n    totalPriceDisplayEnabled:boolean;\n    tariffOptionSwitchEnabled:boolean;\n    newBlauPlpEnabled:boolean\n\n}\n","import {TopOfferController} from \"./TopOfferController\";\nimport coTopOfferTemplateHtml from \"./coTopOfferTemplate.html\";\n\nexport class CoTopOffer implements ng.IComponentOptions {\n    controller:any = TopOfferController;\n    template:string = coTopOfferTemplateHtml;\n}","import {ITopOfferComponentService} from \"../ITopOfferComponentService\";\nimport {ITopOfferFeatureToggleService} from \"../../../services/ITopOfferFeatureToggleService\";\nimport {TariffSelectionType} from \"../../../domain/TariffSelectionType\";\nimport {IFilterComponentService} from \"../../filter/IFilterComponentService\";\nexport class TopOfferController {\n    static $inject:string[] = [\"topOfferComponentService\", \"topOfferFeatureToggleService\", \"filterComponentService\"];\n\n    public activeTabIndex: number = -1;\n\n    constructor(private topOfferComponentService:ITopOfferComponentService,\n                private topOfferFeatureToggleService:ITopOfferFeatureToggleService,\n                private filterComponentService:IFilterComponentService) {}\n\n    public getSeoBottomTeaserText():string {\n        return this.topOfferComponentService.getSeoBottomTeaserText();\n    }\n    public getPlpToggleValue():boolean{\n        return this.topOfferFeatureToggleService.isNewBlauPlpEnabled()\n    }\n    public isTariffSelectionPostpaid(): boolean {\n        return this.filterComponentService.getTariffSelection() === TariffSelectionType.POSTPAID;\n    }\n    public isTariffSelectionHardwareOnly():boolean {\n        return this.filterComponentService.getTariffSelection() === TariffSelectionType.HARDWARE_ONLY;\n    }\n    public setActiveTabIndex(index: number): void {\n        this.activeTabIndex = index;\n    }\n}\n","export default \"<co-tabs on-tab-change=$ctrl.setActiveTabIndex(index)></co-tabs> <div class=offers> <div class=inner> <co-filter></co-filter> <div data-ng-if=$ctrl.getPlpToggleValue()> <div data-ng-if=$ctrl.isTariffSelectionHardwareOnly()> <co-offers></co-offers> </div> <div data-ng-if=$ctrl.isTariffSelectionPostpaid()> <co-new-offers active-tab-index=$ctrl.activeTabIndex></co-new-offers> </div> </div> <div data-ng-if=!$ctrl.getPlpToggleValue()> <co-offers></co-offers> </div> <div class=\\\"padding-top-sm padding-bottom-none\\\"> <p data-ng-bind-html=\\\"$ctrl.getSeoBottomTeaserText() | coUnsafeHtml\\\"></p> </div> </div> </div> \";","import {ITopOfferComponentService} from \"./ITopOfferComponentService\";\nimport {IDataService} from \"../../services/IDataService\";\nimport {ITopOfferFeatureToggleService} from \"../../services/ITopOfferFeatureToggleService\";\nexport class TopOfferComponentService implements ITopOfferComponentService {\n    static $inject:string[] = [\"dataService\",\"topOfferFeatureToggleService\"];\n\n    constructor(private dataService:IDataService,\n                private topOfferFeatureToggleService:ITopOfferFeatureToggleService,\n                ) {}\n\n    public getSeoBottomTeaserText():string {\n        return this.dataService.getSeoBottomTeaserText();\n    }\n    public getPlpToggleValue():boolean{\n        return this.topOfferFeatureToggleService.isNewBlauPlpEnabled()\n    }\n\n}\n","import appTemplateHtml from \"./appTemplate.html\";\n\nexport class App implements ng.IComponentOptions {\n    template: string = appTemplateHtml;\n}","export default \"<div> <main id=content data-co-tracking-product-lines=\\\"['BUNDLE','HARDWARE_ONLY']\\\"> <section class=offer-catalog> <co-top-offer></co-top-offer> </section> </main> </div>\";","import {Call, MetaInfo, valueMetaInfo} from \"@shop/common\";\n\nexport class TargetGroupSwitcherValue {\n\n    static META_INFO:MetaInfo = valueMetaInfo('topOffer:TargetGroupSwitcherValue', {\n        call: 'Call',\n        bannerMarkup: 'string',\n        targetGroup: 'string',\n        visible: 'boolean'\n    });\n\n    call:Call<any>;\n    bannerMarkup: string;\n    targetGroup: string;\n    visible: boolean;\n}","import coTargetGroupSwitcherHtml from \"./coTargetGroupSwitcher.html\";\n\nimport {TargetGroupSwitcherController} from \"./TargetGroupSwitcherController\";\n\nexport class CoTargetGroupSwitcher implements ng.IComponentOptions {\n        controller:any = TargetGroupSwitcherController;\n        template:string = coTargetGroupSwitcherHtml;\n}\n\n\n","export default \"<div data-ng-if=$ctrl.visible()> <a href=# data-ng-click=$ctrl.switchTargetGroup() data-co-click-prevent-default data-ng-bind-html=\\\"$ctrl.bannerMarkup() | coUnsafeHtml\\\" data-co-tracking-attributes data-co-tracking-attributes-action=link data-co-tracking-attributes-element-id=co-target-group-switch-to-{{$ctrl.targetGroupName()}}> </a> </div>\";","import {ITargetGroupSwitcherComponentService} from \"../ITargetGroupSwitcherComponentService\";\n\nexport class TargetGroupSwitcherController {\n    static $inject: string[] = ['targetGroupSwitcherComponentService'];\n\n    constructor(private targetGroupSwitcherService: ITargetGroupSwitcherComponentService) {\n    }\n\n    public switchTargetGroup(): void {\n        this.targetGroupSwitcherService.switchTargetGroup();\n    }\n\n    public bannerMarkup(): string {\n        return this.targetGroupSwitcherService.getTargetGroupSwitcherValue().bannerMarkup;\n    }\n\n    public visible(): boolean {\n        return this.targetGroupSwitcherService.getTargetGroupSwitcherValue().visible;\n    }\n\n    public targetGroupName(): string {\n        return this.targetGroupSwitcherService.getTargetGroupSwitcherValue().targetGroup;\n    }\n}\n","import {IDataService} from \"../../services/IDataService\";\nimport {ITargetGroupSwitcherComponentService} from \"./ITargetGroupSwitcherComponentService\";\nimport {TargetGroupSwitcherValue} from \"../../domain/TargetGroupSwitcherValue\";\n\nexport class TargetGroupSwitcherComponentService implements ITargetGroupSwitcherComponentService {\n    static $inject:string[] = [\"dataService\"];\n\n    constructor(private dataService:IDataService) {}\n\n    public getTargetGroupSwitcherValue(): TargetGroupSwitcherValue {\n        return this.dataService.getTargetGroupSwitcherValue();\n    }\n\n    public switchTargetGroup(): void {\n        return this.dataService.switchTargetGroup();\n    }\n}\n","import {CoTariffSwitcherController} from \"./coTariffSwitcherController\";\nimport coTariffSwitcherTemplateHtml from \"./coTariffSwitcherTemplate.html\";\n\nexport class CoTariffSwitcher implements ng.IComponentOptions {\n  bindings:any = {\n    entries:'<coTariffSwitcherEntries',\n    selectedEntry:\"=selectedEntry\"\n  };\n  controller:any = CoTariffSwitcherController;\n  template:string = coTariffSwitcherTemplateHtml;\n}","\n\nimport {TariffOptionValue} from \"../../../domain/TariffOptionValue\";\nimport { getFormattedDataVolumeGigabytes } from \"../../../util/helpers\";\n\nexport class CoTariffSwitcherController {\n    static $inject:string[] = ['offersComponentService'];\n\n    private entries: TariffOptionValue[] = [];\n    private _selectedEntry: TariffOptionValue;\n\n\n    public onEntryClick(entry: TariffOptionValue){\n        this._selectedEntry = entry;\n    }\n\n    set selectedEntry(entry: TariffOptionValue) {\n        this._selectedEntry = entry;\n    }\n\n    get selectedEntry():TariffOptionValue {\n        return this._selectedEntry;\n    }\n\n\n    public getFormattedDataVolumeGigabytes(dataVolumeMbNumeric: string, tariffName: string) {\n        return getFormattedDataVolumeGigabytes(\n            dataVolumeMbNumeric,\n            tariffName,\n            ''\n        );\n    }\n\n    public hasTariffOptions() {\n        return this.getEntries().length > 0;\n    }\n    public getEntries():TariffOptionValue[] {\n        return this.entries;\n    };\n}","export default \"<div class=\\\"offer-refined offer-refined-responsive\\\" style=padding-bottom:0> <div class=offer-overview style=margin-top:0> <div class=offer-interaction> <div class=\\\"offer-configurator offer-configurator-responsive\\\"> <div class=\\\"switcher content-switcher pdp-switcher\\\" data-ng-if=$ctrl.hasTariffOptions()> <div class=\\\"tariff-info-item switcher-headline\\\" style=color:inherit> <p>5G-Datenvolumen</p> </div> <div class=\\\"switcher-box switcher-box-stretch\\\"> <div class=\\\"switcher-item switcher-pdp-item-shrink\\\" data-ng-repeat=\\\"entry in $ctrl.getEntries() track by entry.id\\\"> <a href=\\\"\\\" data-ng-class=\\\"{'checked': entry.selected}\\\" data-ng-click=$ctrl.onEntryClick(entry)> {{$ctrl.getFormattedDataVolumeGigabytes(entry.contents.tariffDataVolumeMbNumeric, entry.contents.name)}} </a> </div> </div> </div> </div> </div> </div> </div>\";","import {CoOfferCartDisplayController} from \"./coOfferCartDisplayController\";\nimport  coOfferCartTemplateHtml  from \"./coOfferCartDisplayTemplate.html\";\n\nexport class CoOfferCartDisplay implements ng.IComponentOptions {\n    bindings:any = {\n        id: '<coOfferPricesId'\n    };\n    controller:any = CoOfferCartDisplayController;\n    template:string = coOfferCartTemplateHtml;\n}\n","import {IOffersComponentService} from \"../IOffersComponentService\";\n\nexport class CoOfferCartDisplayController {\n\n    static $inject:string[] = ['offersComponentService'];\n\n    private id:string;\n\n    constructor(private offersComponentService:IOffersComponentService) {\n    }\n\n    public isHardwareOnlySelected():boolean {\n        return this.offersComponentService.isHardwareOnlySelected();\n    }\n\n    public submitSelected():void {\n        this.offersComponentService.submitSelected(this.id);\n    }\n\n    public isSubmitPossible():boolean {\n        return this.offersComponentService.isSubmitPossible(this.id);\n    }\n\n    public getHardwareName():string {\n        return this.offersComponentService.getHardwareName(this.id);\n    }\n\n    public getHardwarePdpLink():string {\n        return this.offersComponentService.getHardwarePdpLink(this.id) + '?ohne-tarif=ja';\n    }\n\n    public isPdpStoreRedirectionForHWO():boolean {\n        return this.offersComponentService.isPdpStoreRedirectionForHWO();\n    }\n\n}\n","export default \"<div class=offer-link> <a data-ng-class=\\\"{ 'disabled': !$ctrl.isSubmitPossible() }\\\" href=\\\"\\\" class=\\\"btn btn-action\\\" data-ng-click=$ctrl.submitSelected() data-co-uitest-element=to-cart-button> <span class=\\\"glyphicon glyphicon-cart\\\"></span>Zum Warenkorb ></a> <div class=\\\"links ng-binding\\\" ng-hide=$ctrl.isPdpStoreRedirectionForHWO() style=padding-top:5px;padding-bottom:10px;text-align:center> <a href={{$ctrl.getHardwarePdpLink()}} title=Produktinformation style=text-decoration:none;color:#fff;text-decoration-color:#fff target=_self data-tracking-action=textlink>Zum {{$ctrl.getHardwareName()}} ></a> </div> </div> \";","import {ConstantCall, IEventService, IPageValueProvider, ITrackingService, TrackingInfoValue} from \"@shop/common\";\nimport {TopOfferPageValue} from \"../domain/TopOfferPageValue\";\nimport {Events} from \"./EventListenerRegistry\";\nimport {EcommerceProductValue} from \"../domain/EcommerceProductValue\";\n\nexport class TopOfferTrackingService {\n\n    static $inject: string[] = ['trackingService', 'pageValueProvider', 'eventService'];\n\n    private readonly isUnifiedTrackingEnabled: boolean;\n\n    constructor(private readonly trackingService: ITrackingService,\n                private readonly pageValueProvider: IPageValueProvider<TopOfferPageValue>,\n                private readonly eventService: IEventService) {\n        this.isUnifiedTrackingEnabled = this.pageValueProvider.getPageValue().unifiedTrackingEnabled;\n    }\n\n    $onInit() {\n        this.eventService.subscribe(Events.TOP_OFFER_TRACKING_INITIALIZED, () => {\n            this.trackPage();\n        })\n    }\n\n    public trackPage() {\n        const data = this.isUnifiedTrackingEnabled ?\n            {\n                event : \"init\",\n                page : {\n                    content : undefined,\n                    category : \"top-offer\",\n                    productCategory : undefined,\n                    application : \"e-shop\",\n                    template: \"whitelabel-top-offer-dev\"\n                }\n            }\n            :\n            {\n                pageCategory : \"whitelabel-top-offer-dev\",\n                page : {}\n            };\n\n        this.track(data)\n    }\n    public buildTrackingObjectForProductImpression(ecommerceProductValues: EcommerceProductValue[], filterValue: string, hwIndex: number) {\n        const map = ecommerceProductValues.map((ecommerceProductValue, index) => ({\n            name: ecommerceProductValue.name,\n            quantity: ecommerceProductValue.quantity,\n            list: filterValue,\n            ...ecommerceProductValue.attributes,\n            position: (hwIndex+index+1).toString()\n        }));\n\n        const data =\n            {\n                event: 'productImpression',\n                eCat: 'EEC',\n                eAct: 'productImpression',\n                eLab: '',\n                nonInteraction: true,\n                eshop_login_status: { ...this.pageValueProvider.getPageValue().loginStatusTrackingValue },\n                ecommerce: {\n                    impressions: [...map]\n                }\n            };\n        this.track(data);\n    }\n    public trackProductClick(ecommerceProductValue: EcommerceProductValue, currentCriteriaValue:string, hwIndex:number) {\n        const data = {\n            event: 'productClick',\n            eCat: 'EEC',\n            eAct: 'productClick',\n            eLab: '',\n            nonInteraction: false,\n            eshop_login_status: { ...this.pageValueProvider.getPageValue().loginStatusTrackingValue },\n            ecommerce: {\n                click: {\n                    actionField: {'list': currentCriteriaValue},\n                    products: [{\n                        name: ecommerceProductValue.name,\n                        quantity: ecommerceProductValue.quantity,\n                        ...ecommerceProductValue.attributes,\n                        position: (hwIndex+1).toString()\n                    }]\n                }\n            }\n        };\n        this.track(data)\n    }\n\n    private track(data: any) {\n        this.trackingService.track(new ConstantCall<TrackingInfoValue>({rawContent: JSON.stringify(data)}))\n    }\n\n}","module.exports = __WEBPACK_EXTERNAL_MODULE__135__;","import {valueMetaInfo} from \"@shop/common\";\n\nexport class EcommerceProductValue {\n\n    static META_INFO = valueMetaInfo('topOffer:EcommerceProductValue', {\n        attributes: 'any',\n        name: 'string',\n        quantity: 'number',\n    });\n\n    attributes: any;\n    name: string;\n    quantity: number;\n}","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\n\nexport class LoginStatusTrackingValue {\n\n    static META_INFO: MetaInfo = valueMetaInfo('topOffer:LoginStatusTrackingValue', {\n        cust_cookie_value: 'string',\n        logged_in: 'boolean',\n        user_type: 'string',\n    });\n\n    cust_cookie_value: string;\n    logged_in: boolean;\n    user_type: string;\n}","import {OffersController} from \"./OffersController\";\nimport coNewOffersTemplateHtml from \"./coNewOffersTemplate.html\";\nexport class CoNewOffers implements ng.IComponentOptions {\n    controller:any = OffersController;\n    template:string = coNewOffersTemplateHtml;\n    bindings = {\n        activeTabIndex: '<'\n    };\n}\n","import {IOffersComponentService} from \"../IOffersComponentService\";\nimport IAngularEvent = angular.IAngularEvent;\nimport {IFilterComponentService} from \"../../filter/IFilterComponentService\";\nimport {Content} from \"@shop/common\";\nimport {TopOfferTrackingService} from \"../../../tracking/TopOfferTrackingService\";\nimport {IDataService} from \"../../../services/IDataService\";\n\nexport class OffersController {\n    static $inject:string[] = ['offersComponentService', 'filterComponentService', 'topOfferTrackingService', 'dataService'];\n    alreadyTrackedProducts = [];\n    activeTabIndex: number;\n    constructor(private offersComponentService:IOffersComponentService,\n                private filterComponentService:IFilterComponentService,\n                private topOfferTrackingService: TopOfferTrackingService,\n                private dataService: IDataService) {\n        // Add event listener to window object for load event\n        window.addEventListener('load', () => {\n            // Call the pushTrackedProductsToDataLayer() function on load\n            this.pushTrackedProductsToDataLayer();\n        });\n\n        // Add event listener to window object for scroll event\n        window.addEventListener('scroll', () => {\n            // Call the pushTrackedProductsToDataLayer() function on scroll\n            this.pushTrackedProductsToDataLayer();\n        });\n    }\n\n    public getListElementIds():String[] {\n        return this.filterComponentService.getListElementIds();\n    }\n    public getSchemaData():any {\n        const rawData = this.filterComponentService.getListElementIds();\n        let positionCounter = 1;\n        let schemaData = [];\n        rawData.forEach((item:any) => {\n            schemaData.push({\n                \"@type\":\"ListItem\",\n                \"position\": positionCounter++,\n                \"item\": JSON.parse(this.dataService.getSchemaData(item))\n            })\n        })\n        let finalSchemaData = {\n            \"@context\": \"https://schema.org\",\n            \"@type\": \"ItemList\",\n            \"itemListElement\": schemaData\n        }\n        let finalRawData = JSON.stringify(finalSchemaData);\n        return \"<script type='application/ld+json'>\" + finalRawData + \"</script>\";\n    }\n\n    public moreRowsToShow(): boolean {\n        return this.filterComponentService.moreRowsToShow();\n    }\n\n    public showMoreRows(): void {\n        this.filterComponentService.showMoreRows();\n    }\n\n    public isAllDetailsOpen(id:string):boolean {\n        return this.offersComponentService.isAllDetailsOpen(id);\n    }\n\n    public toggleAllDetails(id:string, $event:IAngularEvent):void {\n        $event.preventDefault();\n        this.offersComponentService.toggleAllDetails(id);\n    }\n\n    public getActiveReviewsHardwareName():string {\n        return this.offersComponentService.getActiveReviewsHardwareName();\n    }\n\n    public getExternalId(id:string):string {\n        return this.offersComponentService.getExternalId(id);\n    }\n\n    public getNoOffersAvailableText(): string{\n        return this.offersComponentService.getNoOffersAvailableText();\n    }\n    private pushTrackedProductsToDataLayer() {\n        if(this.offersComponentService.getFilterStatus()){\n            this.alreadyTrackedProducts = [];\n            this.offersComponentService.setFilterStatus(false);\n        }\n        const childrenDivIds = document.querySelectorAll(\"#main-offers-container div[id]\");\n        const visitedDivIds = [];\n\n        for (var i = 0; i < childrenDivIds.length; i++) {\n            var divId = childrenDivIds[i].id;\n            var divTop = childrenDivIds[i].getBoundingClientRect().top;\n            var divBottom = childrenDivIds[i].getBoundingClientRect().bottom;\n\n            if (divTop < window.innerHeight && divBottom >= 0) {\n                visitedDivIds.push(divId);\n            }\n        }\n        const allHwProducts = this.getListElementIds();\n        const visitedHwProducts = allHwProducts.filter(hw => visitedDivIds.some(visitedId => visitedId === hw));\n        const trackingHwProducts = visitedHwProducts.filter(hw => !this.alreadyTrackedProducts.some(trackedProduct => trackedProduct === hw));\n\n        if (trackingHwProducts.length >= 6) {\n            // Push tracking data to window.tefDataLayer\n            // @ts-ignore\n            const ids = trackingHwProducts.slice(0, 6);\n            const ecommerceProductValues = [];\n            for (let i = 0; i < ids.length; i++) {\n                // @ts-ignore\n                const ecommerceProductValue = this.offersComponentService.getConfiguration(ids[i]).ecommerceProductValue;\n                if (ecommerceProductValue !== null) {\n                    ecommerceProductValues.push(ecommerceProductValue);\n                }\n            }\n            this.topOfferTrackingService.buildTrackingObjectForProductImpression(ecommerceProductValues, this.offersComponentService.getSelectedCriteriaValue(), this.alreadyTrackedProducts.length);\n            this.alreadyTrackedProducts.push(...trackingHwProducts.slice(0, 6));\n        } else if (trackingHwProducts.length > 0) {\n            // Push tracking data to window.tefDataLayer\n            // @ts-ignore\n            const ids = trackingHwProducts;\n            const ecommerceProductValues = [];\n            for (let i = 0; i < ids.length; i++) {\n                // @ts-ignore\n                const ecommerceProductValue = this.offersComponentService.getConfiguration(ids[i]).ecommerceProductValue;\n                if (ecommerceProductValue !== null) {\n                    ecommerceProductValues.push(ecommerceProductValue);\n                }\n            }\n            this.topOfferTrackingService.buildTrackingObjectForProductImpression(ecommerceProductValues, this.offersComponentService.getSelectedCriteriaValue(), this.alreadyTrackedProducts.length);\n            this.alreadyTrackedProducts.push(...trackingHwProducts);\n        }\n    }\n    public getActiveTabPanelId(): string {\n        if (this.activeTabIndex === -1 || this.activeTabIndex == null) {\n            return \"tabpanel-1\";\n        }\n        return `tabpanel-${this.activeTabIndex + 2}`;\n    }\n\n\n    public getActiveTabId(): string {\n        if (this.activeTabIndex === -1 || this.activeTabIndex == null) {\n            return \"tab-1\";\n        }\n        return `tab-${this.activeTabIndex + 2}`;\n    }\n}\n","export default \"<div data-ng-attr-id=\\\"{{ $ctrl.getActiveTabPanelId() }}\\\" role=tabpanel data-ng-attr-aria-labelledby=\\\"{{ $ctrl.getActiveTabId() }}\\\"> <div data-ng-bind-html=\\\"$ctrl.getSchemaData() | coUnsafeHtml\\\"></div> <h3 ng-if=\\\"$ctrl.getListElementIds().length === 0\\\" class=\\\"no-offers-available-text text-center\\\"> {{ $ctrl.getNoOffersAvailableText() }} </h3> <ul data-infinite-scroll=$ctrl.showMoreRows() data-infinite-scroll-distance=1 data-infinite-scroll-disabled=!$ctrl.moreRowsToShow() id=new-main-offers-container> <li data-ng-repeat=\\\"id in $ctrl.getListElementIds()\\\" id={{id}}> <div class=offer-container data-co-uitest-element=offer-container> <div> <co-hardware-tile co-offer-details-description-id=id co-price-display-type=single></co-hardware-tile> </div> <input class=externalId type=hidden value=\\\"{{ $ctrl.getExternalId(id) }}\\\"> <input class=elementId type=hidden value=\\\"{{ id }}\\\"> </div> </li> </ul> </div> \";","import { hardwareTileController } from './hardwareTileController';\nimport  hardwareTileTemplateHtml  from \"./hardwareTileTemplate.html\";\n\nexport class HardwareTile implements ng.IComponentOptions {\n    bindings:any = {\n        id: '=coOfferDetailsDescriptionId',\n        type: '@coPriceDisplayType'\n    };\n    controller:any = hardwareTileController;\n    template:string = hardwareTileTemplateHtml;\n}\n","import {TariffOptionValue} from \"../../../domain/TariffOptionValue\";\nimport {IOffersComponentService} from \"../IOffersComponentService\";\nimport _ = require(\"underscore\");\nimport {ColorOptionValue} from \"../../../domain/hardware/ColorOptionValue\";\nimport {PriceContentsValue} from \"../../../domain/PriceContentsValue\";\nimport {PriceValue} from \"../../../domain/PriceValue\";\nimport { getFormattedDataVolumeGigabytes, getTariffInfoValue } from \"../../../util/helpers\";\nimport {IDataService} from \"../../../services/IDataService\";\nimport {DataService} from \"../../../services/DataService\";\n\nexport class hardwareTileController {\n    static $inject:string[] = ['offersComponentService', 'dataService'];\n\n    private id:string;\n    public prices:PriceValue;\n    public _type:string;\n    public footnotes:string;\n    private entries: TariffOptionValue[] = [];\n    private isMobile: boolean;\n    public hardware: any;\n    private _prices: PriceValue;\n    public type: 'hardware' | 'tariff' | 'single' = 'tariff';\n\n    constructor(private offersComponentService:IOffersComponentService, private dataService: IDataService) {\n        this.isMobile = this.detectMobileDevice();\n    }\n    private detectMobileDevice(): boolean {\n        const userAgent = navigator.userAgent || navigator.vendor;\n        return /android|iPad|iPhone|iPod/.test(userAgent.toLowerCase());\n    }\n    public resolvePrices(): PriceValue {\n        if (!this._prices) {\n            this._prices = this.offersComponentService.getPrices(this.id);\n        }\n        return this._prices;\n    }\n\n    public isLazyLoadEnabled(index: number): boolean {\n\n        if (this.isMobile && index < 4) {\n            return false;\n        }\n\n        if (!this.isMobile && index < 8) {\n            return false;\n        }\n        return true;\n    }\n\n    public getTariffOptionEntries():TariffOptionValue[] {\n        return this.offersComponentService.getTariffOptionEntries(this.id);\n    };\n\n    public getTariffInfoText():string {\n        return getTariffInfoValue(this.dataService.getTariffInfoText(this.id));\n    }\n\n    public getFormattedDataVolumeGigabytes(dataVolumeMbNumeric: string, tariffName: string) {\n        return getFormattedDataVolumeGigabytes(\n            dataVolumeMbNumeric,\n            tariffName,\n            ''\n        );\n    }\n\n    public hasTariffOptions() {\n        return this.getEntries().length > 0;\n    }\n    public getEntries():TariffOptionValue[] {\n        return this.entries;\n    };\n    public getPrices():PriceValue {\n        return this.offersComponentService.getPrices(this.id);\n    }\n    public getFootnotes():string {\n        return this.offersComponentService.getFootnotes(this.id);\n    }\n    public getHardwareDescription():string {\n        return this.offersComponentService.getHardwareDescription(this.id);\n    };\n\n    public getActivationFeeDescription(){\n        const contents = this.getContents();\n        return contents ? contents.activationFeeDescription : '';\n    }\n\n    private getContents():PriceContentsValue {\n        const prices = this.resolvePrices();\n        return prices ? prices.contents : null;\n    }\n\n    public getHardwareName():string {\n        return this.offersComponentService.getHardwareName(this.id);\n    }\n    public getEnergyLevel(useEnergyImageWidth: boolean = true): string {\n        let temp = document.createElement('div');\n        temp.innerHTML = this.offersComponentService.getEnergyLevel(this.id);\n        let anchors = temp.querySelectorAll('a');\n        if (anchors) {\n            anchors.forEach(anchor => {\n                anchor.setAttribute('onclick', `event.stopPropagation(); event.preventDefault();`);\n            });\n        }\n        let image = temp.querySelectorAll('img');\n        if (image) {\n            image.forEach((img) => {\n                img.setAttribute('style', 'width:40px');\n            })\n        }\n\n        let tempDataSheet = document.createElement('div');\n        tempDataSheet.innerHTML = this.offersComponentService.getProductDataSheet(this.id);\n\n        // Select all anchor tags within the product data sheet content\n        let dataSheetAnchors = tempDataSheet.querySelectorAll('a');\n        dataSheetAnchors.forEach(anchor => {\n            anchor.setAttribute('onclick', `event.stopPropagation(); event.preventDefault();`);\n        });\n        const energyImageStyle = useEnergyImageWidth ? \" style='width: 25%'\" : \"\";\n        return \"<div class='energy-cover'><div class='dataSheet' style='width: 60%'>\" + tempDataSheet.innerHTML + `</div><div class='energy-image'${energyImageStyle}>` + temp.innerHTML + \"</div></div>\";\n    }\n\n    public getHardwareImageLink():string {\n        return this.offersComponentService.getHardwareImageLink(this.id);\n    }\n\n    public getHardwareColors():ColorOptionValue[] {\n        return this.offersComponentService.getHardwareColors(this.id);\n    };\n    public getHardwarePdpLink():string {\n        return this.offersComponentService.getHardwarePdpLink(this.id);\n    }\n    public getTariffDataVolume():string {\n        return this.offersComponentService.getTariffDataVolume(this.id);\n    }\n\n    public getFormattedNonRecurringAmount() {\n        let prices = this.resolvePrices();\n        let amount = 0;\n        if (prices && prices.nonRecurringAmount != null) {\n            amount = prices.nonRecurringAmount;\n        }\n        return this.offersComponentService.formatPrice(amount, true) + ' €';\n    }\n\n    public getFormattedRecurringAmount() {\n        return this.offersComponentService.formatPrice(\n            this.getPrice(),\n            false\n        ) + ' €';\n    }\n\n    public getBrand(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (\n            config &&\n            config.ecommerceProductValue &&\n            config.ecommerceProductValue.attributes &&\n            config.ecommerceProductValue.attributes.brand\n        ) {\n            return config.ecommerceProductValue.attributes.brand;\n        }\n        return '';\n    }\n\n    public getHardwareDisplayName(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n\n        if (config && config.hardware && config.hardware.contents && config.hardware.contents.name) {\n            return config.hardware.contents.name;\n        }\n        return '';\n    }\n\n    public getHardwareRuntime(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (\n            config &&\n            config.price &&\n            config.price.contents &&\n            config.price.contents.contractDurationDescription\n        ) {\n            return config.price.contents.contractDurationDescription.replace('mtl. / ', '');\n        }\n        return '';\n    }\n\n    public getTotalPriceAmount(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (config && config.price && config.price.totalPriceAmount != null) {\n            return Number(config.price.totalPriceAmount).toFixed(2) + ' €';\n        }\n        return '';\n    }\n\n    public getTariffBundleName(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (\n            config &&\n            config.ecommerceProductValue &&\n            config.ecommerceProductValue.attributes &&\n            config.ecommerceProductValue.attributes.dimension59\n        ) {\n            return config.ecommerceProductValue.attributes.dimension59;\n        }\n        return '';\n    }\n    public getTariffContractMonths(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (\n            config &&\n            config.ecommerceProductValue &&\n            config.ecommerceProductValue.attributes &&\n            config.ecommerceProductValue.attributes.metric17\n        ) {\n            const metric17 = config.ecommerceProductValue.attributes.metric17;\n\n            const parts = metric17.split('|');\n\n            return parts[1] || '';\n        }\n        return '';\n    }\n    public getTariffMonthlyRate(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (\n            config &&\n            config.ecommerceProductValue &&\n            config.ecommerceProductValue.attributes &&\n            config.ecommerceProductValue.attributes.aep_monthly_price_final\n        ) {\n            return config.ecommerceProductValue.attributes.aep_monthly_price_final + ' €';\n        }\n        return '';\n    }\n\n    public getConnectionFeeDescription(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (\n            config &&\n            config.price &&\n            config.price.contents &&\n            config.price.contents.activationFeeDescription\n        ) {\n            return config.price.contents.activationFeeDescription;\n        }\n        return '';\n    }\n\n    public getConnectionFeeValue(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        const description =\n            config &&\n            config.price &&\n            config.price.contents &&\n            config.price.contents.activationFeeDescription;\n\n        if (!description) {\n            return '0,00 €';\n        }\n        const match = description.match(/\\d+(,\\d{1,2})?\\s?€/);\n        if (!match) {\n            return '0,00 €';\n        }\n        const value = match[0]\n            .replace('€', '')\n            .trim()\n            .replace(',', '.');\n        const formattedValue = Number(value).toFixed(2).replace('.', ',');\n        return `${formattedValue} €`;\n    }\n\n    public getMonthlyAfterBenefit(): number | '' {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (\n            config &&\n            config.ecommerceProductValue &&\n            config.ecommerceProductValue.attributes &&\n            config.ecommerceProductValue.attributes.aep_monthly_price_final\n        ) {\n            return parseFloat(\n                config.ecommerceProductValue.attributes.aep_monthly_price_final\n            );\n        }\n        return '';\n    }\n\n    public getHardwareRuntimePlus(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (\n            !config ||\n            !config.price ||\n            !config.price.contents ||\n            !config.price.contents.contractDurationDescription\n        ) {\n            return '';\n        }\n        const desc = config.price.contents.contractDurationDescription;\n        const match = desc.match(/(\\d+)/);\n        if (!match) return desc;\n        const months = parseInt(match[1], 10) + 1;\n        return 'mtl. / ' + months + ' Monate';\n    }\n\n    public getTariffDataVolumeGb(): string {\n        const value = this.offersComponentService.getTariffDataVolume(this.id);\n        if (!value) {\n            return '';\n        }\n        const match = value.match(/(\\d+\\s*GB)/i);\n        return match ? match[1] : '';\n    }\n\n    public getOcclModalInfoId(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n        if (\n            config &&\n            config.hardware &&\n            config.hardware.contents &&\n            config.hardware.contents.externalId\n        ) {\n            return config.hardware.contents.externalId;\n        }\n        return '';\n    }\n\n    public getGrowHintText(): string {\n        let data = this.dataService.getHardwareContents(this.id);\n        return data ? data.growHint : '';\n    }\n\n    public getBrandNetworkHintText(): string {\n        let data = this.dataService.getHardwareContents(this.id);\n        return data ? data.networkHint : '';\n    }\n\n    public getEuRoamingPackText(): string {\n        let data = this.dataService.getHardwareContents(this.id);\n        return data ? data.packList : '';\n    }\n\n    public getInfoIconToggle(): boolean {\n        const data = this.dataService.getHardwareContents(this.id);\n        return data && data.infoIconToggle != null ? data.infoIconToggle : false;\n    }\n\n    public getMonthlyHwPrice(): string {\n        const config = this.offersComponentService.getConfiguration(this.id);\n\n        if (!config || !config.price || config.price.singlePriceAmount == null) {\n            return '';\n        }\n\n        return config.price.singlePriceAmount + ' €';\n    }\n    private getPrice(): number {\n        const prices = this.resolvePrices();\n        if (!prices) {\n            return 0;\n        }\n        switch (this.type) {\n            case 'hardware':\n                return prices.hardwarePriceAmount != null ? prices.hardwarePriceAmount : 0;\n            case 'tariff':\n                return prices.tariffPriceAmount != null ? prices.tariffPriceAmount : 0;\n            case 'single':\n                return prices.singlePriceAmount != null ? prices.singlePriceAmount : 0;\n            default:\n                return prices.tariffPriceAmount != null ? prices.tariffPriceAmount : 0;\n        }\n    }\n\n}\n","export default \"<div> <a href={{$ctrl.getHardwarePdpLink()}} target=_self data-tracking-action=textlink title=\\\"{{ $ctrl.getHardwareName() }}\\\" data-ng-if=!$ctrl.getInfoIconToggle()> <tef-shop-bundle-teaser> <div slot=image> <img class=img-style style=height:123px;width:119px src={{$ctrl.getHardwareImageLink()}} alt=\\\"{{ $ctrl.getHardwareName() }}\\\" loading=\\\"{{ $ctrl.isLazyLoadEnabled(0) ? 'lazy' : 'eager' }}\\\" width=119 height=123> <div class=color-options> <ng-template data-ng-repeat=\\\"color in $ctrl.getHardwareColors() track by $index\\\"> <img class=option-style src={{color.contents.imageUrl}} alt=\\\"Color option {{color.contents.optionName}}\\\" width=50 height=50 loading=\\\"{{ $ctrl.isLazyLoadEnabled($index + 1) ? 'lazy' : 'eager' }}\\\"> </ng-template> </div> </div> <div slot=energy-level data-ng-bind-html=\\\"$ctrl.getEnergyLevel(true) | coUnsafeHtml\\\"> </div> <div slot=teaser-title> <div class=title-section> <div class=title>{{ $ctrl.getHardwareName() }}</div> <div class=bundle-text ng-if=$ctrl.getTariffDataVolume()> <div data-ng-repeat=\\\"entry in $ctrl.getTariffOptionEntries() track by entry.id\\\"> <div data-ng-if=entry.selected> <span>{{$ctrl.getFormattedDataVolumeGigabytes(entry.contents.tariffDataVolumeMbNumeric, entry.contents.name)}} {{$ctrl.getTariffInfoText()}}</span> </div> </div> </div> </div> </div> <span slot=pricing> <co-price-section co-price-display-prices=$ctrl.getPrices() co-price-display-footnotes=$ctrl.getFootnotes() co-price-display-type=single></co-price-section> </span> </tef-shop-bundle-teaser> </a> <tef-bundle-teaser cloak data-ng-if=$ctrl.getInfoIconToggle()> <div slot=flag> <div class=\\\"flag flag--default\\\"> <span>Flag Text</span> <a class=occl-modal-link href=#modal-test rel=nofollow occl-modal-fetch=/feature-env/master/assets/storybook/modal/fetched.html> <tef-icon cloak icon=information size=1.0 type=functional aria-label=\\\"Weitere Informationen\\\"></tef-icon> </a> </div> </div> <div slot=visual> <picture> <img src={{$ctrl.getHardwareImageLink()}} alt={{$ctrl.getHardwareName()}} loading=\\\"{{ $ctrl.isLazyLoadEnabled(0) ? 'lazy' : 'eager' }}\\\"/> </picture> </div> <div slot=energy-labels> <div class=energy-label> <div data-ng-bind-html=\\\"$ctrl.getEnergyLevel(false) | coUnsafeHtml\\\"></div> </div> </div> <div slot=color-selection> <img ng-repeat=\\\"color in $ctrl.getHardwareColors() track by $index\\\" src={{color.contents.imageUrl}} alt=\\\"Color {{color.contents.optionName}}\\\" loading=\\\"{{ $ctrl.isLazyLoadEnabled($index + 1) ? 'lazy' : 'eager' }}\\\"/> </div> <div slot=content> <div class=title>{{ $ctrl.getHardwareName() }}</div> <span class=subline data-ng-if=$ctrl.getTariffDataVolume()> <span data-ng-repeat=\\\"entry in $ctrl.getTariffOptionEntries() track by entry.id\\\" data-ng-if=entry.selected> {{$ctrl.getFormattedDataVolumeGigabytes( entry.contents.tariffDataVolumeMbNumeric, entry.contents.name)}} {{$ctrl.getTariffInfoText()}} </span> </span> </div> <div slot=price> <div class=row> <div class=col>monatlich</div> <div class=col> <tef-price cloak align=right display=block size=small theme=inherit slash-color=#ff0000 slashed> <span slot=price></span> </tef-price> <tef-price cloak align=right display=block size=small theme=inherit slash-color=#ff0000> <span slot=price>{{$ctrl.getFormattedRecurringAmount()}} </span> </tef-price> </div> </div> <div class=row> <div class=col>einmalig</div> <div class=col> <span>{{$ctrl.getFormattedNonRecurringAmount()}} </span> </div> </div> <div class=row data-ng-if=$ctrl.getConnectionFeeValue()> <div class=col>Anschlusspreis</div> <div class=col> <tef-price cloak align=right display=block size=small theme=inherit slash-color=#ff0000 slashed> <span slot=price>{{ $ctrl.getConnectionFeeValue() }} </span> </tef-price> </div> </div> </div> <div slot=link> <a href={{$ctrl.getHardwarePdpLink()}}> Weiter mit dem Angebot </a> </div> <div slot=footnotes> bei {{ $ctrl.getHardwareRuntime() }} Monatsraten zu 0% <a class=occl-modal-link data-ng-attr-occl-modal=infoModal{{$ctrl.getOcclModalInfoId()}} aria-haspopup=dialog aria-label=info-icon role=button data-ng-click=\\\"$event.stopPropagation(); $event.preventDefault();\\\" data-ng-keydown=\\\"($event.key === 'Enter' || $event.key === ' ') && ($event.stopPropagation(), $event.preventDefault())\\\"> <tef-icon cloak icon=information size=1.0 type=functional aria-label=\\\"Weitere Informationen\\\"></tef-icon> </a> <br/> (Finanzierungsbeispiel) <br/> <strong>Gerätepreis: {{ $ctrl.getTotalPriceAmount() }}</strong> </div> </tef-bundle-teaser> <tef-modal cloak id=infoModal{{$ctrl.getOcclModalInfoId()}} close-icon color-close-icon aria-label=info-modal data-ng-click=$event.stopPropagation()> <div slot=title>Monatliche Kosten </div> <div slot=body> <div> Für Neukunden und besteht aus einem {{ $ctrl.getBrand() }} Mein Handyvertrag mit dem {{ $ctrl.getHardwareDisplayName() }} mit Ratenzahlung à {{ $ctrl.getMonthlyHwPrice() }} monatlich über {{ $ctrl.getHardwareRuntime() }} (Gesamtpreis: {{ $ctrl.getTotalPriceAmount() }}) sowie die {{ $ctrl.getBrand() }} {{ $ctrl.getTariffBundleName() }} Mobilfunkvertrag mit {{ $ctrl.getTariffContractMonths() }} Mindestlaufzeit von Monaten für monatliche Zahlungen {{ $ctrl.getTariffMonthlyRate() }} Plus {{ $ctrl.getConnectionFeeDescription() }}. Sofern nicht gekündigt, {{ $ctrl.getBrand() }} {{ $ctrl.getTariffBundleName() }} wird abgerechnet {{ $ctrl.getHardwareRuntimePlus() }}, {{ $ctrl.getMonthlyAfterBenefit() }} Pro Monat pro Abrechnungsmonat sind Folgendes enthalten: nationale Anrufe (ausgenommen Sondernummern, Rufumleitung) und SMS in alle deutschen Netze sowie {{ $ctrl.getTariffDataVolumeGb() }} Datenvolumen für mobiles Surfen in Deutschland </div> <span data-ng-bind-html=\\\"$ctrl.getBrandNetworkHintText() | coUnsafeHtml\\\"></span> <span data-ng-bind-html=\\\"$ctrl.getGrowHintText() | coUnsafeHtml\\\"></span> <span data-ng-bind-html=\\\"$ctrl.getEuRoamingPackText() | coUnsafeHtml\\\"></span> </div> </tef-modal> </div> \";","import {PriceSectionController} from \"./PriceSectionController\";\nimport coPriceSectionTemplateHtml from \"./coPriceSection.html\";\n\nexport class CoPriceSection implements ng.IComponentOptions {\n    bindings:any = {\n        type: '@coPriceDisplayType',\n        prices: '<coPriceDisplayPrices',\n        footnotes:'<coPriceDisplayFootnotes'\n    };\n    controller:any = PriceSectionController;\n    template:string = coPriceSectionTemplateHtml;\n}\n","import {PriceContentsValue} from \"../../../domain/PriceContentsValue\";\nimport {PriceValue} from \"../../../domain/PriceValue\";\nimport {IOffersComponentService} from \"../IOffersComponentService\";\n\nexport class PriceSectionController {\n    static $inject:string[] = ['offersComponentService'];\n\n    public prices:PriceValue;\n    public _type:string;\n    public footnotes:string;\n\n\n    constructor(private offersComponentService:IOffersComponentService) {\n    }\n\n    set type(v:string) {\n        argsContract(arguments, 'string {{ oneOf(\"hardware\", \"tariff\", \"single\") }}');\n        this._type = v;\n    }\n\n    get type():string {\n        return this._type;\n    }\n\n    public getPriceInteger():string {\n        return this.offersComponentService.getPriceInteger(this.getPrice());\n    }\n\n    public getPriceDecimal():string {\n        return this.offersComponentService.getPriceDecimal(this.getPrice());\n    }\n\n    private getPrice():number {\n        switch (this.type) {\n            case 'hardware':\n                return this.prices.hardwarePriceAmount;\n            case 'tariff':\n                return this.prices.tariffPriceAmount;\n            case 'single':\n                return this.prices.singlePriceAmount;\n            default:\n                return 0;\n        }\n    }\n\n    public isTotalPriceDisplayEnabled():boolean {\n        return this.offersComponentService.isTotalPriceDisplayEnabled();\n    }\n\n    public getFootnotes(){\n        return this.footnotes;\n    }\n\n    public getContractDurationDescription(){\n        return this.getContents().contractDurationDescription;\n    }\n\n    public getFormattedNonRecurringAmount() {\n        return this.offersComponentService.formatPrice(this.prices.nonRecurringAmount,true);\n    }\n\n    public getFormattedRecurringAmount() {\n        return this.offersComponentService.formatPrice(this.getPrice(),false);\n    }\n\n    public getActivationFeeDescription(){\n        if(this.getContents().activationFeeDescription.split('€')[0] === '+ 0 '){\n            return \"0,00 €\"\n        }else {\n            return this.getContents().activationFeeDescription\n        }\n    }\n\n    private getContents():PriceContentsValue {\n        return this.prices.contents;\n    }\n}\n","export default \"<div class=\\\"monatlich tr-flex-row\\\"> <span class=tr-left-col><strong>monatlich</strong></span> <span class=tr-right-col> <span class=\\\"small-price price-margin\\\"> <tef-price cloak=\\\"\\\" align=left display=block size=small theme=inherit slash-color=#ff0000> <span slot=price>{{$ctrl.getFormattedRecurringAmount()}} €</span> </tef-price></span> </span> </div> <div class=\\\"einmalig tr-flex-row\\\"> <span class=tr-left-col><strong>einmalig</strong></span> <span class=tr-right-col><span slot=price>{{$ctrl.getFormattedNonRecurringAmount()}} €</span></span> </div> <div class=tr-flex-row ng-if=$ctrl.getActivationFeeDescription()> <span class=tr-left-col>Anschlusspreis</span> <span class=tr-right-col><span>{{$ctrl.getActivationFeeDescription()}}</span></span> </div> \";","import {valueMetaInfo} from \"@shop/common\";\n\nexport class EnergyEfficiency {\n\n    static META_INFO = valueMetaInfo('EnergyEfficiency', {\n        productDataSheet: 'string',\n        energyEfficiencyLabel: 'string',\n    });\n\n    productDataSheet: string;\n    energyEfficiencyLabel: string;\n}"],"sourceRoot":""}