{"version":3,"file":"launch.min.js","sources":["launch.js"],"sourcesContent":["'use strict';\n\n/* Build Timestamp: (2022-2-3 13:21:58) */\nangular.module('kappGlobal', [\n// GENERAL\n'ui.router', 'ngMessages', 'ngSanitize', 'ngLocale', 'angularUtils.directives.dirPagination', 'uiRouterStyles', 'angular.filter', 'angularLoad',\n// 'tandibar/ng-rollbar',\n'kappGlobal.errorHandler', 'seo', 'duScroll', 'ngDialog', 'kappGlobal.env', 'kappGlobal.version', 'kappGlobal.branch', 'kappGlobal.helpers', 'kappGlobal.softRedirect', 'kappGlobal.partnersConfig', 'kappGlobal.ajaxSpinner', 'kappGlobal.dynamicModelBinding', 'kappGlobal.directiveData', 'kappGlobal.productData', 'kappGlobal.priceData', 'kappGlobal.filters', 'kappGlobal.localization', 'kappGlobal.downloadLinksFactory', 'kappGlobal.pageInfoModule', 'kappGlobal.imageManager', 'kappGlobal.cookieService', 'kappGlobal.errorService', 'kappGlobal.pdcProxyService', 'kappGlobal.httpInterceptor', 'kappGlobal.templateVersion', 'kappGlobal.seoConfig', 'kappGlobal.notificationBarGeo', 'kappGlobal.newsLetterPopup', 'kappGlobal.ngRenderAnchorScroll', 'kappGlobal.customAnchorScroll', 'kappGlobal.marketoFormService', 'kappGlobal.injectScriptOnceService', 'kappGlobal.canonicalHref', 'kappGlobal.heightSync', 'kappGlobal.renewalSteps', 'kappGlobal.statsWidgetNumbers',\n// LAYOUT\n'kappGlobal.siteTop', 'kappGlobal.footerGlobal', 'kappGlobal.footerGlobalWrapper', 'kappGlobal.siteHeader', 'kappGlobal.currencySelector', 'kappGlobal.mobileNav', 'kappGlobal.pageHeader', 'kappGlobal.nanoBanner', 'kappGlobal.socialSharing', 'kappGlobal.homepageBanner', 'kappGlobal.videoMarkup', 'kappGlobal.b2c', 'kappGlobal.marketoForm', 'kappGlobal.premiumServices', 'kappGlobal.b2b', 'kappGlobal.vsb', 'kappGlobal.smb', 'kappGlobal.eula', 'kappGlobal.enterprise', 'kappGlobal.partners', 'kappGlobal.about', 'kappGlobal.awardsSection', 'kappGlobal.rating', 'kappGlobal.buyblocks', 'kappGlobal.compareTable', 'kappGlobal.promoComparisonChart', 'kappGlobal.customHtml', 'kappGlobal.downloadBlockFeatured', 'kappGlobal.downloadBlock', 'kappGlobal.featureSection', 'kappGlobal.featuredProducts', 'kappGlobal.hmc', 'kappGlobal.hmcUniversal', 'kappGlobal.articlesSection', 'kappGlobal.kssVerdictHeader', 'kappGlobal.lrcSteps', 'kappGlobal.lrcStepsSec', 'kappGlobal.malwareStats', 'kappGlobal.premiumServices', 'kappGlobal.productUpdates', 'kappGlobal.productUpdatesPack', 'kappGlobal.promoSection', 'kappGlobal.renewAndAbout', 'kappGlobal.resourceDocuments', 'kappGlobal.tabbedSectionBuyblock', 'kappGlobal.contentRepo', 'kappGlobal.search', 'kappGlobal.lrcService', 'kappGlobal.osDetect', 'kappGlobal.tracking', 'kappGlobal.maxymiser', 'kappGlobal.lrcVerdictPage', 'kappGlobal.lrcSerial', 'kappGlobal.arPopup', 'kappGlobal.popup', 'kappGlobal.ngSrcLocaleHack', 'kappGlobal.runOnLast', 'kappGlobal.rss', 'kappGlobal.cookiesRequirement', 'kappGlobal.siteBar', 'kappGlobal.vpnProhibitedMessage', 'kappGlobal.errorAnimation', 'kappGlobal.statsWidget', 'kappGlobal.bottomBanner', 'kappGlobal.productPromo', 'kappGlobal.featuresGrid', 'kappGlobal.productScriptsInjector', 'kappGlobal.newsLetterOptIn', 'kappGlobal.doubleBanner', 'kappGlobal.lrcDisclaimers', 'kappGlobal.trustpilotReviews', 'kappGlobal.callbackForm', 'kappGlobal.gdprReady', 'kappGlobal.customCarousel', 'kappGlobal.awardsCarousel', 'kappGlobal.accordion', 'kappGlobal.landingPage', 'kappGlobal.dl2Connector', 'kappGlobal.lrcLong']);\n'use strict';\n\n(function () {\n 'use strict';\n\n rootScopeSetup.$inject = [\"$rootScope\", \"$window\", \"$location\", \"sessionStorageService\", \"currencyManager\", \"appHelperService\", \"PARTNERS\", \"ENV\", \"windowHelperService\", \"VER\", \"BRANCH\", \"localizationService\"];\n angular.module('kappGlobal').run(rootScopeSetup);\n\n function rootScopeSetup($rootScope, $window, $location, sessionStorageService, currencyManager, appHelperService, PARTNERS, ENV, windowHelperService, VER, BRANCH, localizationService) {\n $rootScope.stateChangeInProgress = false;\n $rootScope.getCacheNames = getCacheNames();\n $rootScope.currencyLocale = getCurrencyLocale();\n $rootScope.currency = getCurrency();\n $rootScope.dir = appHelperService.getPageDirection();\n $rootScope.products = {}; // variable that holds products information\n $rootScope.search = { 'query': '', 'count': '' };\n $rootScope.currentBreadcrumbs = $rootScope.currentBreadcrumbs || '[NULL]';\n $rootScope.kaspersky = $window.kaspersky = {\n 'trackPageViewOnLoad': 0,\n 'platformName': 'NextGen',\n 'siteType': 'Default',\n 'siteLocale': appHelperService.getLocale(),\n 'pageCharset': 'UTF-8',\n 'pageName': $rootScope.currentBreadcrumbs,\n 'eCommProvider': PARTNERS[ENV.locale] || 'Digital River',\n 'verdictSite': $rootScope.verdictSite,\n 'verdictRegion': $rootScope.verdictRegion,\n 'verdictChannel': $rootScope.verdictChannel,\n 'verdictPartner': $rootScope.verdictPartner,\n 'verdictProduct': $rootScope.verdictProduct,\n 'verdictDevices': $rootScope.verdictDevices,\n 'verdictTerm': $rootScope.verdictTerm,\n 'verdictLicenseStatus': $rootScope.verdictLicenseStatus,\n 'serialNumber': '',\n 'verdictPartNumber': '',\n // verdictChannelInfo: '',\n 'verdictLicenseType': '',\n 'searchQuery': $rootScope.search.query,\n 'searchTotalResults': $rootScope.search.count,\n 'currency': '',\n 'isStaging': windowHelperService.isStaging(),\n 'version': {\n 'rev': VER.version,\n 'branch': BRANCH.name,\n 'date': BRANCH.date,\n 'sha': BRANCH.sha,\n 'api': ENV.apiServer\n },\n 'hmcTool': ''\n };\n $rootScope.prevPageName = '';\n $rootScope.buyBlockReady = buyBlockReady;\n $rootScope.populateCurrency = populateCurrency;\n $rootScope.isFavDownloadPage = (ENV.locale === 'en-in' || ENV.locale === 'en-us') && $location.path() === '/downloads/thank-you/free-antivirus-download';\n $rootScope.isResourceCenterPage = [$location.path() === '/resource-center/threats', $location.path() === '/resource-center/preemptive-safety', $location.path() === '/resource-center/infographics', $location.path() === '/resource-center/definitions'].some(function (condition) {\n return condition;\n });\n $rootScope.directStateVisit = true;\n\n initialise();\n\n function initialise() {\n populateCurrency();\n hrefLinkTags();\n }\n\n function buyBlockReady() {\n $rootScope.$broadcast('buyBlockReady');\n if (performance && 'mark' in performance) performance.mark('buyblockReady');\n }\n\n function getCurrencyLocale() {\n return sessionStorageService.get($rootScope.getCacheNames.currencyLocaleCache) && sessionStorageService.get($rootScope.getCacheNames.currencyLocaleCache).locale || appHelperService.getLocale();\n }\n\n function getCurrency() {\n return sessionStorageService.get($rootScope.getCacheNames.currencyLocaleCache) && sessionStorageService.get($rootScope.getCacheNames.currencyLocaleCache).currency;\n }\n\n function getCacheNames() {\n var hostUrl = appHelperService.getHostName(),\n currenciesCacheName = hostUrl + '-globalCurrencies',\n currencyLocaleCacheName = hostUrl + '-currencyLocale';\n return {\n 'currenciesCache': currenciesCacheName,\n 'currencyLocaleCache': currencyLocaleCacheName\n };\n }\n\n function populateCurrency(currencyItem) {\n var cachedCurrency = sessionStorageService.get($rootScope.getCacheNames.currencyLocaleCache);\n currencyItem = currencyItem || cachedCurrency || currencyManager.getDefaultCurrencyFromConfig(appHelperService.getLocale());\n localizationService.setCurrencyLocale(currencyItem);\n currencyManager.setCurrentCurrency(currencyItem);\n if (angular.isUndefined(currencyItem) || currencyItem === null) return;\n $rootScope.currencyLocale = currencyItem.locale;\n $rootScope.currency = currencyItem.currency;\n }\n\n function hrefLinkTags() {\n return $rootScope.langLinkTags = [{ 'href': 'https://usa.kaspersky.com/', 'hreflang': 'en-us' }, { 'href': 'https://www.kaspersky.com/', 'hreflang': 'x-default' }, { 'href': 'https://www.kaspersky.co.uk/', 'hreflang': 'en-gb' }, { 'href': 'https://www.kaspersky.fr/', 'hreflang': 'fr-fr' }, { 'href': 'https://www.kaspersky.de/', 'hreflang': 'de-de' }, { 'href': 'https://www.kaspersky.it/', 'hreflang': 'it-it' }, { 'href': 'https://www.kaspersky.es/', 'hreflang': 'es-es' }, { 'href': 'https://www.kaspersky.nl/', 'hreflang': 'nl-nl' }, { 'href': 'https://www.kaspersky.se/', 'hreflang': 'sv-se' }, { 'href': 'https://www.kaspersky.no/', 'hreflang': 'no-no' }, { 'href': 'https://www.kaspersky.dk/', 'hreflang': 'da-dk' }, { 'href': 'https://www.kaspersky.com.tr/', 'hreflang': 'tr-tr' }, { 'href': 'https://www.kaspersky.com.br/', 'hreflang': 'pt-br' }, { 'href': 'https://www.kaspersky.com.au/', 'hreflang': 'en-au' }, { 'href': 'https://www.kaspersky.co.in/', 'hreflang': 'en-in' }, { 'href': 'https://www.kaspersky.co.za/', 'hreflang': 'en-za' }, { 'href': 'https://www.kaspersky.com.cn/', 'hreflang': 'zh-cn' }, { 'href': 'https://www.kaspersky.co.jp/', 'hreflang': 'ja-jp' }, { 'href': 'https://www.kaspersky.ru/', 'hreflang': 'ru-ru' }, { 'href': 'https://latam.kaspersky.com/', 'hreflang': 'es-mx' }, { 'href': 'https://latam.kaspersky.com/', 'hreflang': 'es-co' }, { 'href': 'https://latam.kaspersky.com/', 'hreflang': 'es-ar' }, { 'href': 'https://latam.kaspersky.com/', 'hreflang': 'es-cl' }, { 'href': 'https://latam.kaspersky.com/', 'hreflang': 'es-pe' }, { 'href': 'https://algerie.kaspersky.com', 'hreflang': 'fr-dz' }, { 'href': 'https://me-en.kaspersky.com/', 'hreflang': 'en-ae' }, { 'href': 'https://me-en.kaspersky.com/', 'hreflang': 'en-eg' }, { 'href': 'https://me-en.kaspersky.com/', 'hreflang': 'en-sa' }, { 'href': 'https://me-en.kaspersky.com/', 'hreflang': 'en-qa' }, { 'href': 'https://me-en.kaspersky.com/', 'hreflang': 'en-kw' }, { 'href': 'https://me-en.kaspersky.com/', 'hreflang': 'en-bh' }, { 'href': 'https://me-en.kaspersky.com/', 'hreflang': 'en-om' }, { 'href': 'https://me-en.kaspersky.com/', 'hreflang': 'en-lb' }, { 'href': 'https://me-en.kaspersky.com/', 'hreflang': 'en-jo' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar-ae' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar-eg' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar-sa' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar-qa' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar-kw' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar-bh' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar-om' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar-lb' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar-jo' }, { 'href': 'https://me.kaspersky.com/', 'hreflang': 'ar' }, { 'href': 'https://www.kaspersky.fi/', 'hreflang': 'fi-fi' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-ug' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-zm' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-zw' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-rw' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-bw' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-gh' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-mw' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-ng' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-ao' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-bi' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-km' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-et' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-ls' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-mg' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-mu' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-mz' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-na' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-re' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-sc' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-sz' }, { 'href': 'https://africa.kaspersky.com/', 'hreflang': 'en-tz' }];\n }\n }\n})();\n'use strict';\n\n/*eslint angular/on-watch: 0*/\n(function () {\n 'use strict';\n\n siteSetup.$inject = [\"$rootScope\", \"$state\", \"$stateParams\", \"$window\", \"cookieService\", \"ENV\", \"windowHelperService\", \"seoHelperService\", \"appHelperService\", \"$log\", \"$location\", \"tracking\", \"directiveData\", \"$templateCache\", \"maxymiser\", \"$rootElement\", \"sessionStorageService\", \"softRedirectService\"];\n angular.module('kappGlobal').run(siteSetup);\n function siteSetup($rootScope, $state, $stateParams, $window, cookieService, ENV, windowHelperService, seoHelperService, appHelperService, $log, $location, tracking, directiveData, $templateCache, maxymiser, $rootElement, sessionStorageService, softRedirectService) {\n\n var contentLocation = void 0,\n hrefLangTagAdded = false,\n dataLayer = $window.dataLayer = $window.dataLayer || [];\n\n initialise();\n\n function initialise() {\n //Turn off SPA for France\n $rootElement.off();\n skipRedirect();\n addLocaleClass();\n softRedirectService.initialize();\n if ($window.templates) {\n for (var item in $window.templates) {\n $templateCache.put(decodeURIComponent(item), $window.templates[item]);\n }\n }\n runTracking();\n }\n\n $rootScope.$on('$locationChangeStart', handleLocationChangeStart);\n $rootScope.$on('$stateChangeStart', handleStateChangeStart);\n $rootScope.$on('$stateChangeSuccess', handleStateChangeSuccess);\n\n function runTracking() {\n tracking.setTrackingCookie();\n tracking.setAdobeCampaignValues();\n tracking.setAdmitadRefererParams();\n }\n\n function handleLocationChangeStart(event, newUrl, oldUrl) {\n $rootScope.oldUrl = oldUrl;\n $rootScope.newUrl = newUrl;\n\n if (performance && 'mark' in performance) performance.mark('stateChangeStart');\n // Checking that spa navigation has occurred\n if (oldUrl !== newUrl) {\n $rootScope.directStateVisit = false;\n }\n }\n\n function handleStateChangeStart(ev, to, toParams) {\n checkPageSetting(ev, to);\n if (ENV.locale === 'ja-jp') handleProxiesJP(ev, to, toParams);\n\n // A requirement to clean up window.kaspersky on every state change\n $rootScope.stateData = false;\n }\n\n /**\n * JP still has some proxies that are incompatible with SPA flow at the moment.\n * Also the whole B2C section is blocked, so we need to intercept it.\n */\n function handleProxiesJP(ev, to, toParams) {\n var url = void 0,\n allowedUrls = ['product-kfa', 'kfa-thank-you', 'product-kss', 'b2c-resource-center'];\n\n if (to.name === 'press-center.details' && toParams.path === 'whitepaper') {\n url = 'https://www.kaspersky.co.jp/about/press-center/whitepaper';\n }\n\n if (to.parent === 'home-security-section' && allowedUrls.indexOf(to.name) === -1 && to.name.indexOf('b2c-resource-center') === -1) {\n url = 'https://home.kaspersky.co.jp/store/kasperjp/DisplayHomePage/?icid=jp_ng-tophb_pro_ona_oth__onl_b2c__banner_______';\n }\n\n if (url) {\n ev.preventDefault();\n windowHelperService.navigateUserTo(url);\n }\n }\n\n function handleStateChangeSuccess(ev, to, toParams, from) {\n $window.scrollTo(0, 0);\n setContentLocation();\n\n $rootScope.stateData = undefined;\n $rootScope.kaspersky.regKey = undefined;\n $rootScope.kaspersky.pageName = undefined;\n $rootScope.kaspersky.verdictSite = undefined;\n $rootScope.kaspersky.verdictRegion = undefined;\n $rootScope.kaspersky.verdictChannel = undefined;\n $rootScope.kaspersky.verdictPartner = undefined;\n $rootScope.kaspersky.verdictProduct = undefined;\n $rootScope.kaspersky.verdictDevices = undefined;\n $rootScope.kaspersky.verdictTerm = undefined;\n $rootScope.kaspersky.verdictLicenseProduct = undefined;\n $rootScope.kaspersky.verdictLicenseStatus = undefined;\n $rootScope.kaspersky.serialNumber = undefined;\n $rootScope.kaspersky.verdictPartNumber = undefined;\n $rootScope.kaspersky.verdictLicenseType = undefined;\n $rootScope.kaspersky.providerToken = undefined;\n $rootScope.kaspersky.productName = undefined;\n $rootScope.buyblocksOnPage = false;\n\n detectBuyBlockPresence();\n\n var referrerValue = $window.document.referrer;\n /**\n * This is needed to persist referrer on LRC.\n * Due to GWP-34912 we need to reload LRC page when accessed from another SPA state,\n * losing information about the referrer. For this reason, it's being saved in\n * sessionStorage, and removed once used. This function runs twice on LRC,\n * so it needs to be removed only the 2nd time.\n */\n var sessionReferrer = sessionStorageService.get('referrer');\n if (sessionReferrer) {\n if (referrerValue.indexOf('renewal-center/home') > -1) {\n sessionStorageService.remove('referrer');\n }\n referrerValue = sessionReferrer;\n }\n $rootScope.kaspersky.referrer = from.params && from.params.canonical ? '' + windowHelperService.getDomainName() + from.params.canonical : referrerValue;\n\n directiveData.get('/content/' + ENV.locale + contentLocation + '/meta.json').then(handleMetaSuccess).catch(handleMetaError);\n\n if ($state.current.name === 'homepage') addHrefLangTags();\n\n var viewContentListener = $rootScope.$on('$viewContentLoaded', function () {\n viewContentListener();\n\n angular.getTestability(document).whenStable(function () {\n setPerformanceMarkers();\n $rootScope.$emit('ngRender');\n maxymiser.fireMMEvent();\n\n var isLRC = appHelperService.assertStateByName(['lrc-verdict', 'lrc-serial']);\n\n if ($rootScope.pageDataReady && $rootScope.kaspersky.prevPageName !== $rootScope.kaspersky.pageName && !isLRC) {\n $rootScope.kaspersky.prevPageName = angular.copy($rootScope.kaspersky.pageName);\n tracking.trackPageView($rootScope.kaspersky.pageName);\n }\n\n sendEventToGTM();\n\n if ($state.current.name !== 'homepage' && hrefLangTagAdded) removeHrefLangTags();\n\n $log.log('data_complete');\n });\n });\n }\n\n /**\n * Detects presence of buyblocks for currency switcher, as buyblocks can appear first\n */\n function detectBuyBlockPresence() {\n var buyblockListener = $rootScope.$on('buyBlockReady', function () {\n $rootScope.buyblocksOnPage = true;\n buyblockListener();\n });\n }\n\n function setPerformanceMarkers() {\n var RProfiler = $window.RProfiler,\n timingObj = $window.timingObj;\n if (performance && 'mark' in performance) {\n performance.mark('ngRender');\n\n var frontendNGReadyTimeVal = performance.getEntriesByName('ngRender')[0].startTime,\n firstPaintTimeVal = timingObj && timingObj.firstPaintTime,\n totalLoadTimeVal = performance.timing.loadEventEnd - performance.timing.fetchStart;\n if (RProfiler) {\n RProfiler.addInfo('indicator', 'i15631', frontendNGReadyTimeVal);\n RProfiler.addInfo('indicator', 'i55228', firstPaintTimeVal);\n RProfiler.addInfo('indicator', 'i65010', totalLoadTimeVal);\n }\n }\n }\n\n function sendEventToGTM() {\n dataLayer.push({\n 'event': 'dataReady',\n 'page': {\n 'path': $window.location.href,\n 'title': $rootScope.kaspersky.pageName\n }\n });\n }\n\n function setupMeta(description, title, keywords, internalSearch) {\n if ($state.current.name !== '404' && $state.current.name !== 'b2c-resource-center.category-details' && !$window.customFlag) windowHelperService.setWindowTitle(title || $state.current.data && $state.current.data.title);\n\n // Reduce an array of breadcrumbs into a string\n $rootScope.currentBreadcrumbs = seoHelperService.parseBreadcrumbs($rootScope.breadcrumbs);\n\n if ($rootScope.currentBreadcrumbs.indexOf('Resource Center') > -1) setResourceTitle();\n\n kaspersky.pageName = $location.search().pageName || $rootScope.currentBreadcrumbs || $window.kaspersky.pageName;\n kaspersky.productName = $stateParams.productName;\n /*Metadata settings*/\n if (!isLRCPage()) {\n seoHelperService.setMeta({ 'description': description || 'Kaspersky' });\n if (!description) kaspersky.pageName = $rootScope.currentBreadcrumbs;\n if (keywords) seoHelperService.setMeta({ 'keywords': keywords });\n } else {\n seoHelperService.removeMeta('description');\n seoHelperService.removeMeta('keywords');\n }\n $rootScope.kaspersky.prevPageName = '';\n $rootScope.$emit('pageDataReady'); // either way fire an event that page data is in place\n $rootScope.pageDataReady = true;\n $rootScope.internalSearch = internalSearch || 'index';\n setMetaTags();\n }\n\n function setResourceTitle() {\n var resourceTitle = _.startCase(windowHelperService.getPathName().split('/').pop().replace(/-/g, ' '));\n $rootScope.currentBreadcrumbs = $rootScope.currentBreadcrumbs + ' > ' + resourceTitle;\n }\n\n function handleMetaSuccess(response) {\n var res = response && response.data ? response.data.fields : {};\n if (res.linkedComponents && res.linkedComponents.length) $rootScope.stateData = res.linkedComponents; //empty linkedComponents array check, after - value assignment\n //angular.extend($state.params, {linkedComponents: res.linkedComponents})\n\n if (!res) {\n $rootScope.breadcrumbs = seoHelperService.getDefaultBreadcrumbs(null, contentLocation);\n } else {\n $rootScope.breadcrumbs = res.breadcrumbs;\n }\n setupMeta(res.description, res.title, res.keywords, res.internalSearch);\n }\n\n function handleMetaError() {\n $rootScope.breadcrumbs = seoHelperService.getDefaultBreadcrumbs(true, contentLocation);\n setupMeta();\n }\n\n /* Section meta for search */\n function setMetaTags() {\n var searchAreaContent = 'other';\n if ($state.includes('home-security-section')) {\n searchAreaContent = 'home-security';\n } else if ($state.includes('about-section')) {\n searchAreaContent = 'about-section';\n } else if ($state.includes('enterprise')) {\n searchAreaContent = 'enterprise';\n } else if ($state.includes('vsb')) {\n searchAreaContent = 'vsb';\n } else if ($state.includes('smb')) {\n searchAreaContent = 'smb';\n }\n\n var metaObj = {\n 'DocId': appHelperService.getLocationPath(),\n 'DocType': 'Marketing-B2B',\n 'PublishDate': new Date().toISOString().slice(0, 10),\n 'PubLang': ENV.locale.match(/\\w+/g)[0],\n 'PubCountry': ENV.locale.match(/\\w+/g)[1],\n 'Breadcrumb': $rootScope.breadcrumbs.reduce(function (prev, curr, index) {\n return !index ? prev + curr.title : prev + '/' + curr.title;\n }, ''),\n 'SearchAreaNavigator': searchAreaContent,\n 'internalsearch': $rootScope.internalSearch\n };\n\n seoHelperService.setMeta(metaObj);\n }\n\n function setContentLocation() {\n return contentLocation = seoHelperService.getContentLocation();\n }\n\n function addLocaleClass() {\n angular.element(document).find('body').addClass('locale--' + ENV.locale);\n }\n\n function isLRCPage() {\n var url = windowHelperService.getPathName().toLowerCase();\n return url.indexOf('/lrc') !== -1;\n }\n\n // Removed as part of performance optimization\n // function activateRandomImagesCaching() {\n // return imageManagerService.activateRandomImagesCache();\n // }\n\n function skipRedirect() {\n if (appHelperService.searchParam('ignoreredirects')) cookieService.set('ignoreredirects', true, 7);\n }\n\n function checkPageSetting(ev, to) {\n var loc = ['it-it'];\n\n if (loc.indexOf(ENV.locale) > -1 && $window.pageSettings && $window.pageSettings.match(/error404/g)) {\n $window.pageSettings = '/content/';\n $state.go('404', {}, { 'location': false });\n ev.preventDefault();\n }\n\n if ($window.pageSettings && $window.pageSettings.match(/error500/g) && to.name !== '500') {\n $window.pageSettings = '/content/';\n $state.go('500', {}, { 'location': false });\n ev.preventDefault();\n }\n }\n\n function addHrefLangTags() {\n angular.forEach($rootScope.langLinkTags, function (tag) {\n var hrefLangTag = $window.document.createElement('link');\n hrefLangTag.rel = 'alternate';\n hrefLangTag.href = tag.href;\n hrefLangTag.hreflang = tag.hreflang;\n $window.document.head.appendChild(hrefLangTag);\n });\n\n hrefLangTagAdded = true;\n }\n\n function removeHrefLangTags() {\n var tags = $window.document.querySelectorAll('link[rel=\"alternate\"]');\n\n for (var i = 0; i < tags.length; i++) {\n tags[i].parentNode.removeChild(tags[i]);\n }\n\n hrefLangTagAdded = false;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$urlMatcherFactoryProvider\", \"$locationProvider\", \"$urlRouterProvider\", \"$stateProvider\", function ($urlMatcherFactoryProvider, $locationProvider, $urlRouterProvider, $stateProvider) {\n $urlMatcherFactoryProvider.caseInsensitive(true);\n $urlMatcherFactoryProvider.strictMode(false);\n $locationProvider.html5Mode({ 'enabled': true, 'requireBase': true }).hashPrefix('!');\n $urlRouterProvider.otherwise(function ($injector) {\n var $window = $injector.get('$window'),\n $rootElement = $injector.get('$rootElement'),\n $state = $injector.get('$state');\n if ($window.error404) {\n $state.go('404', {}, { 'location': false });\n return;\n }\n if ($window.error500) {\n $state.go('500', {}, { 'location': false });\n return;\n }\n if (!$window.customFlag) {\n $window.location.href = $window.location;\n } else {\n // In case if page is custom turn off SPA mode\n $rootElement.off();\n }\n });\n $stateProvider.decorator('views', function (state) {\n var views = {};\n angular.forEach(angular.isDefined(state.views) ? state.views : { '': state }, function (view, name) {\n if (name.indexOf('@') < 0) name += '@' + state.parent.name;\n view.resolveAs = view.resolveAs || state.resolveAs || '$resolve';\n views[name] = view;\n });\n return views;\n });\n $stateProvider.decorator('data', function (state) {\n return state.data;\n });\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$stateProvider\", function ($stateProvider) {\n\n /** Callback to be called on scroll for handling the sticky header */\n function handleStickyHeaderOnScroll($window) {\n var scroll = $($window).scrollTop(),\n $body = $('body'),\n siteHeaderAvail = $('.site-header').length,\n totalHeight = $('site-header').attr('site-top-height'),\n stickyClass = 'sticky-header-on';\n\n var clearFocus = function clearFocus() {\n if ($window.document.activeElement && $window.document.activeElement.blur) {\n $window.document.activeElement.blur();\n }\n };\n\n if (!totalHeight && $('page-header .nano-banner').length) {\n totalHeight = $('page-header .nano-banner').outerHeight(true);\n stickyClass = 'sticky-lrc-nano';\n }\n\n if (scroll >= totalHeight && siteHeaderAvail) {\n $body.addClass(stickyClass);\n } else {\n if ($body.hasClass(stickyClass)) {\n clearFocus();\n }\n\n $body.removeClass(stickyClass);\n }\n }\n\n $stateProvider.state('master', {\n 'abstract': true,\n 'templateUrl': '/resources/template/html/pages/master/index.html'\n }).state('master-header', {\n 'abstract': true,\n 'template': ''\n }).state('home-security-section', {\n 'parent': 'master',\n 'abstract': true,\n 'data': {\n 'css': ['/resources/template/css/b2c.min.css']\n },\n 'controller': [\"$window\", \"$scope\", function controller($window, $scope) {\n $($window).on('scroll.home', _.wrap($window, handleStickyHeaderOnScroll));\n $scope.$on('$destroy', function () {\n $($window).off('scroll.home');\n });\n }],\n 'template': ''\n }).state('search', {\n 'parent': 'master',\n 'url': '/search?query&sec',\n 'templateUrl': '/resources/template/html/pages/search/index.html',\n 'data': {\n 'css': ['/resources/template/css/b2c.min.css']\n },\n 'controller': ['$window', '$scope', function ($window, $scope) {\n $($window).on('scroll.search', _.wrap($window, handleStickyHeaderOnScroll));\n $scope.$on('$destroy', function () {\n $($window).off('scroll.search');\n });\n }]\n }).state('error', {\n 'abstract': true,\n 'templateUrl': '/resources/template/html/pages/site-error/index.html'\n }).state('lrc-verdict-parent', {\n 'abstract': true,\n 'templateUrl': '/resources/template/html/pages/lrc/index.html',\n 'data': {\n 'css': ['/resources/template/css/b2c.min.css']\n },\n 'controller': [\"$window\", \"$scope\", function controller($window, $scope) {\n $($window).on('scroll.lrc', _.wrap($window, handleStickyHeaderOnScroll));\n $scope.$on('$destroy', function () {\n $($window).off('scroll.lrc');\n });\n }]\n }).state('enterprise', {\n 'parent': 'master',\n 'data': {\n 'css': ['/resources/template/css/enterprise.min.css']\n },\n 'abstract': true,\n 'templateUrl': '/resources/template/html/pages/enterprise/index.html',\n 'controller': [\"$window\", \"$scope\", function controller($window, $scope) {\n\n $($window).on('scroll.enterprise', _.wrap($window, handleStickyHeaderOnScroll));\n $scope.$on('$destroy', function () {\n $($window).off('scroll.enterprise');\n });\n }]\n }).state('vsb', {\n 'parent': 'master',\n 'data': {\n 'css': ['/resources/template/css/b2b.min.css']\n },\n 'abstract': true,\n 'templateUrl': '/resources/template/html/pages/vsb/index.html',\n 'controller': ['$window', '$scope', function ($window, $scope) {\n $($window).on('scroll.vsb', _.wrap($window, handleStickyHeaderOnScroll));\n $scope.$on('$destroy', function () {\n $($window).off('scroll.vsb');\n });\n }]\n }).state('smb', {\n 'parent': 'master',\n 'data': {\n 'css': ['/resources/template/css/b2b.min.css']\n },\n 'abstract': true,\n 'templateUrl': '/resources/template/html/pages/smb/index.html',\n 'controller': ['$window', '$scope', function ($window, $scope) {\n $($window).on('scroll.smb', _.wrap($window, handleStickyHeaderOnScroll));\n $scope.$on('$destroy', function () {\n $($window).off('scroll.smb');\n });\n }]\n }).state('partners', {\n 'parent': 'master',\n 'data': {\n 'css': ['/resources/template/css/enterprise.min.css', '/resources/template/css/partners.min.css']\n },\n 'abstract': true,\n 'templateUrl': '/resources/template/html/pages/partners/index.html',\n 'controller': ['$window', '$scope', function ($window, $scope) {\n $($window).on('scroll.partners', _.wrap($window, handleStickyHeaderOnScroll));\n $scope.$on('$destroy', function () {\n $($window).off('scroll.partners');\n });\n }]\n }).state('about-section', {\n 'parent': 'master',\n 'abstract': true,\n 'data': {\n 'css': ['/resources/template/css/about.min.css']\n },\n 'controller': ['$window', '$scope', function ($window, $scope) {\n $($window).on('scroll.about', _.wrap($window, handleStickyHeaderOnScroll));\n $scope.$on('$destroy', function () {\n $($window).off('scroll.about');\n });\n }],\n 'template': '\\n \\n '\n });\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$stateProvider\", \"$urlRouterProvider\", \"ENV\", function ($stateProvider, $urlRouterProvider, ENV) {\n $stateProvider.state('about', {\n 'parent': 'about-section',\n 'url': '/about',\n 'data': {\n 'navPath': ['/about']\n },\n 'templateUrl': '/resources/template/html/pages/about/index.html'\n }).state('about-awards', {\n 'parent': 'about-section',\n 'url': '/about/awards',\n 'data': {\n 'navPath': ['/about']\n },\n 'templateUrl': '/resources/template/html/pages/about/awards.html'\n }).state('about-careers', {\n 'parent': 'about-section',\n 'url': '/about/careers',\n 'data': {\n 'navPath': ['/about/careers']\n },\n 'templateUrl': '/resources/template/html/pages/about/careers.html'\n }).state('about-faq', {\n 'parent': 'about-section',\n 'url': '/about/careers/faq',\n 'templateUrl': '/resources/template/html/pages/smb/faq.html',\n 'data': {\n 'navPath': ['/about/careers'],\n 'title': 'Frequently Asked Questions'\n }\n }).state('about-careers-career', {\n 'parent': 'about-section',\n 'url': '/about/careers/:careerName',\n 'data': {\n 'navPath': ['/about/careers']\n },\n 'templateUrl': '/resources/template/html/pages/about/content.html',\n 'controller': [\"$stateParams\", \"directiveData\", function controller($stateParams, directiveData) {\n var _this = this;\n\n directiveData.getByUrl($stateParams.careerName).then(function (response) {\n _this.career = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('about-company', {\n 'parent': 'about-section',\n 'url': '/about/company',\n 'data': {\n 'navPath': ['/about/careers']\n },\n 'templateUrl': '/resources/template/html/pages/about/company.html'\n }).state('about-contact', {\n 'parent': 'about-section',\n 'url': '/about/contact',\n 'templateUrl': '/resources/template/html/pages/about/contact.html',\n 'data': {\n 'navPath': ['/about']\n }\n }).state('about-team', {\n 'parent': 'about-section',\n 'url': '/about/team',\n 'data': {\n 'navPath': ENV.locale === 'de-de' ? ['/about/team'] : ['/about']\n },\n 'templateUrl': '/resources/template/html/pages/about/team.html'\n }).state('about-team-person', {\n 'parent': 'about-section',\n 'url': '/about/team/:personName',\n 'data': {\n 'navPath': ENV.locale === 'de-de' ? ['/about/team'] : ['/about']\n },\n 'templateUrl': '/resources/template/html/pages/about/team-person.html',\n 'controller': [\"$stateParams\", \"directiveData\", function controller($stateParams, directiveData) {\n var _this2 = this;\n\n directiveData.getByUrl($stateParams.personName).then(function (response) {\n _this2.person = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('about-transparency', {\n 'parent': 'about-section',\n 'url': '/about/stories/transparency?item',\n 'data': {\n 'navPath': ['/about/transparency']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", \"errorService\", function templateProvider(templateVersion, $templateFactory, errorService) {\n return templateVersion.getVer('about/stories/transparency', 'meta').then(function (response) {\n if (response.data && response.data.fields.template === '2.0') return $templateFactory.fromUrl('/resources/template/html/pages/about/transparency.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/about/content.html');\n }).catch(handleRejection);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }],\n 'controller': [\"$location\", function controller($location) {\n var $ctrl = this;\n\n $ctrl.isTransparencyPage = true;\n $ctrl.item = decodeURIComponent(($location.search().item || '').toLowerCase());\n }],\n 'controllerAs': '$ctrl'\n }).state('about-transparency-az', {\n 'parent': 'about-section',\n 'url': '/about/stories/transparency-az',\n 'data': {\n 'navPath': ['/about/transparency-az']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", \"errorService\", function templateProvider(templateVersion, $templateFactory, errorService) {\n return templateVersion.getVer('about/stories/transparency-az', 'meta').then(function (response) {\n if (response.data && response.data.fields.template === '2.0') return $templateFactory.fromUrl('/resources/template/html/pages/about/transparency-az.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/about/content.html');\n }).catch(handleRejection);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }],\n 'controller': [\"$location\", function controller($location) {\n var $ctrl = this;\n\n $ctrl.isTransparencyPage = true;\n $ctrl.item = decodeURIComponent(($location.search().item || '').toLowerCase());\n }],\n 'controllerAs': '$ctrl'\n }).state('about-story', {\n 'parent': 'about-section',\n 'url': '/about/stories/:jsonName',\n 'data': {\n 'navPath': ['/about/press-releases']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", \"$stateParams\", \"errorService\", function templateProvider(templateVersion, $templateFactory, $stateParams, errorService) {\n return templateVersion.getVer('about/stories/' + $stateParams['jsonName'], 'meta').then(function (response) {\n if (response.data && response.data.fields.template === '2.0') return $templateFactory.fromUrl('/resources/template/html/pages/about/transparency.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/about/content.html');\n }).catch(handleRejection);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }]\n }).state('about-story-our-unique-experience-and-knowledge', {\n 'parent': 'about-section',\n 'url': '/about/stories/:jsonName',\n 'data': {\n 'navPath': ENV.locale === 'de-de' ? ['/about/company'] : ['/about/press-releases']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", \"$stateParams\", \"errorService\", function templateProvider(templateVersion, $templateFactory, $stateParams, errorService) {\n return templateVersion.getVer('about/stories/' + $stateParams['jsonName'], 'meta').then(function (response) {\n if (response.data && response.data.fields.template === '2.0') return $templateFactory.fromUrl('/resources/template/html/pages/about/transparency.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/about/content.html');\n }).catch(handleRejection);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }]\n }).state('about-story-security-without-borders', {\n 'parent': 'about-section',\n 'url': '/about/stories/:jsonName',\n 'data': {\n 'navPath': ENV.locale === 'de-de' ? ['/about/company'] : ['/about/press-releases']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", \"$stateParams\", \"errorService\", function templateProvider(templateVersion, $templateFactory, $stateParams, errorService) {\n return templateVersion.getVer('about/stories/' + $stateParams['jsonName'], 'meta').then(function (response) {\n if (response.data && response.data.fields.template === '2.0') return $templateFactory.fromUrl('/resources/template/html/pages/about/transparency.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/about/content.html');\n }).catch(handleRejection);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }]\n }).state('about-story-solutions-and-services', {\n 'parent': 'about-section',\n 'url': '/about/stories/:jsonName',\n 'data': {\n 'navPath': ENV.locale === 'de-de' ? ['/about/company'] : ['/about/press-releases']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", \"$stateParams\", \"errorService\", function templateProvider(templateVersion, $templateFactory, $stateParams, errorService) {\n return templateVersion.getVer('about/stories/' + $stateParams['jsonName'], 'meta').then(function (response) {\n if (response.data && response.data.fields.template === '2.0') return $templateFactory.fromUrl('/resources/template/html/pages/about/transparency.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/about/content.html');\n }).catch(handleRejection);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }]\n }).state('policy-blog', {\n 'parent': 'about-section',\n 'url': '/about/policy-blog',\n 'data': {\n 'navPath': ['/about/policy-blog'],\n 'title': 'Policy Blog'\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", \"$stateParams\", \"errorService\", function templateProvider(templateVersion, $templateFactory, $stateParams, errorService) {\n return templateVersion.getVer('repository/headers', 'policy-blog-header').then(function (response) {\n if (response.data && response.data.fields.template === 'resources-category') {\n return $templateFactory.fromUrl('/resources/template/html/pages/content-repo/about/resources-category.html');\n } else if (response.data && response.data.fields.template === 'new-resources-center') {\n return $templateFactory.fromUrl('/resources/template/html/pages/content-repo/about/new-resources-center.html');\n }\n return $templateFactory.fromUrl('/resources/template/html/pages/content-repo/about/resources-center.html');\n }).catch(handleRejection);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }]\n }).state('policy-blog-category', {\n 'parent': 'about-section',\n 'url': '/about/policy-blog/:category?rel&sel',\n 'templateUrl': '/resources/template/html/pages/content-repo/about/resources-category.html',\n 'data': {\n 'navPath': ['/about/policy-blog'],\n 'title': 'Resources category'\n }\n }).state('policy-blog-category.details', {\n 'parent': 'about-section',\n 'url': '/about/policy-blog/:category/:path',\n 'templateUrl': '/resources/template/html/pages/content-repo/about/resources-post.html',\n 'data': {\n 'navPath': ['/about/policy-blog'],\n 'title': 'Resources category'\n }\n }).state('press-releases', {\n 'parent': 'about-section',\n 'url': '/about/press-releases?rel&sel',\n 'data': {\n 'navPath': ['/about/press-releases']\n },\n 'templateUrl': '/resources/template/html/pages/content-repo/press-releases.html',\n 'reloadOnSearch': false,\n 'controller': [\"imageManagerService\", function controller(imageManagerService) {\n imageManagerService.activateRandomImagesCache();\n }]\n }).state('press-releases.details', {\n 'parent': 'about-section',\n 'url': '/about/press-releases/:path',\n 'templateUrl': '/resources/template/html/pages/content-repo/press-releases-details.html',\n 'data': {\n 'navPath': ['/about/press-releases']\n }\n }).state('press-center', {\n 'parent': 'about-section',\n 'url': '/about/press-center',\n 'data': {\n 'navPath': ['/about/press-center']\n },\n 'templateProvider': [\"ENV\", \"$templateFactory\", function templateProvider(ENV, $templateFactory) {\n if (ENV.locale === 'en-us') {\n return $templateFactory.fromUrl('/resources/template/html/pages/about/content.html');\n } else if (ENV.locale === 'ru-ru') {\n return $templateFactory.fromUrl('/resources/template/html/pages/content-repo/press-center-advanced.html');\n } else {\n return $templateFactory.fromUrl('/resources/template/html/pages/content-repo/press-center.html');\n }\n }]\n }).state('press-center-gallery', {\n 'parent': 'about-section',\n 'url': '/about/press-center/gallery',\n 'data': {\n 'navPath': ['/about/press-center']\n },\n 'templateUrl': '/resources/template/html/pages/about/gallery.html'\n }).state('press-center-gallery.details', {\n 'parent': 'about-section',\n 'url': '/about/press-center/gallery/:path',\n 'data': {\n 'navPath': ['/about/press-center']\n },\n 'templateUrl': '/resources/template/html/pages/about/gallery-details.html'\n }).state('press-center-contacts', {\n 'parent': 'about-section',\n 'url': '/about/press-center/contacts',\n 'data': {\n 'navPath': ['/about/press-center']\n },\n 'templateUrl': '/resources/template/html/pages/about/press-center-contacts.html'\n }).state('press-center.details', {\n 'parent': 'about-section',\n 'url': '/about/press-center/:path',\n 'data': {\n 'navPath': ['/about/press-center']\n },\n 'templateUrl': '/resources/template/html/pages/content-repo/press-center-details.html'\n }).state('in-the-news', {\n 'parent': 'about-section',\n 'url': '/about/in-the-news?rel&sel',\n 'data': {\n 'navPath': ['/about/press-releases']\n },\n 'templateUrl': '/resources/template/html/pages/content-repo/news.html'\n }).state('in-the-news.details', {\n 'parent': 'about-section',\n 'url': '/about/in-the-news/:path',\n 'data': {\n 'navPath': ['/about/press-releases']\n },\n 'templateUrl': '/resources/template/html/pages/content-repo/news-details.html'\n }).state('motorsport', {\n 'parent': 'about-section',\n 'url': '/about/kaspersky-motorsport',\n 'data': {\n 'navPath': ['/about/kaspersky-motorsport']\n },\n 'templateUrl': '/resources/template/html/pages/about/motorsport.html'\n }).state('sponsorships', {\n 'parent': 'about-section',\n 'url': '/about/sponsorships',\n 'data': {\n 'navPath': ['/about/sponsorships']\n },\n 'templateUrl': '/resources/template/html/pages/about/sponsorships.html'\n });\n $urlRouterProvider.when('/about/contactinfo', [\"$state\", function ($state) {\n $state.go('about-story', { 'jsonName': 'contactinfo' }, { 'location': false, 'inherit': true });\n }]).when('/about/data-protection', [\"$state\", function ($state) {\n $state.go('about-story', { 'jsonName': 'data-protection' }, { 'location': false, 'inherit': true });\n }]).when('/about/fighting-crime', [\"$state\", function ($state) {\n $state.go('about-story', { 'jsonName': 'fighting-crime' }, { 'location': false, 'inherit': true });\n }]).when('/about/law-enforcement-cooperation', [\"$state\", function ($state) {\n $state.go('about-story', { 'jsonName': 'law-enforcement-cooperation' }, { 'location': false, 'inherit': true });\n }]).when('/about/our-unique-experience-and-knowledge', [\"$state\", function ($state) {\n $state.go('about-story-our-unique-experience-and-knowledge', { 'jsonName': 'our-unique-experience-and-knowledge' }, { 'location': false, 'inherit': true });\n }]).when('/about/security-without-borders', [\"$state\", function ($state) {\n $state.go('about-story-security-without-borders', { 'jsonName': 'security-without-borders' }, { 'location': false, 'inherit': true });\n }]).when('/about/solutions-and-services', [\"$state\", function ($state) {\n $state.go('about-story-solutions-and-services', { 'jsonName': 'solutions-and-services' }, { 'location': false, 'inherit': true });\n }]).when('/about/transparency', [\"$state\", function ($state) {\n $state.go('about-transparency', { 'jsonName': 'transparency' }, { 'location': false, 'inherit': true });\n }]).when('/about/transparency-az', [\"$state\", function ($state) {\n $state.go('about-transparency-az', { 'jsonName': 'transparency-az' }, { 'location': false, 'inherit': true });\n }]);\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n osRecognitionController.$inject = [\"$location\", \"$scope\", \"osDetectService\"];\n angular.module('kappGlobal').config([\"$stateProvider\", \"$urlRouterProvider\", function ($stateProvider, $urlRouterProvider) {\n var opts = { 'location': false, 'inherit': true };\n\n $stateProvider.state('home-security', {\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'Home Security'\n },\n 'parent': 'home-security-section',\n 'url': '/home-security',\n 'templateUrl': '/resources/template/html/pages/home-security/security.html'\n }).state('home-product-kscloud', {\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'Home Product'\n },\n 'parent': 'home-security-section',\n 'url': '/home-security/products/kscloud',\n 'templateUrl': '/resources/template/html/pages/home-security/product-kscloud.html',\n 'controller': [\"productData\", \"templateVersion\", function controller(productData, templateVersion) {\n var _this = this;\n\n var ctrl = this;\n\n productData.getb2c('kscloud').then(function (response) {\n _this.product = response.data.fields;\n });\n\n templateVersion.getVer('home-security', 'meta', 'products/kscloud/meta').then(function (response) {\n ctrl.template = response && response.data.fields.template || '1.0';\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('home-product-kpm', {\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'Home Product',\n 'css': ['/resources/template/css/kpm-overrides.min.css']\n },\n 'params': {\n 'copy': null\n },\n 'parent': 'home-security-section',\n 'url': '/home-security/products/kpm',\n 'templateUrl': '/resources/template/html/pages/home-security/product-kpm.html',\n 'controller': [\"productData\", \"$stateParams\", \"windowHelperService\", function controller(productData, $stateParams, windowHelperService) {\n var _this2 = this;\n\n productData.getb2c('kpm').then(function (response) {\n _this2.product = response.data.fields;\n _this2.template = _this2.product.template;\n });\n this.copy = $stateParams.copy;\n this.navigateUserTo = windowHelperService.navigateUserTo;\n }],\n 'controllerAs': '$ctrl'\n }).state('home-product', {\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'Home Product'\n },\n 'params': {\n 'bundle': null\n },\n 'parent': 'home-security-section',\n 'url': '/home-security/products/:jsonName',\n 'templateUrl': '/resources/template/html/pages/home-security/product.html',\n 'controller': [\"productData\", \"$stateParams\", function controller(productData, $stateParams) {\n var _this3 = this;\n\n productData.getb2c($stateParams.jsonName).then(function (response) {\n _this3.product = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('home-downloads', {\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'Download product'\n },\n 'parent': 'home-security-section',\n 'url': '/home-security/downloads',\n 'templateUrl': '/resources/template/html/pages/home-security/downloads.html',\n 'controller': osRecognitionController,\n 'controllerAs': '$ctrl'\n }).state('home-downloads-product', {\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'Downloads'\n },\n 'parent': 'home-security-section',\n 'url': '/home-security/downloads/products/:jsonName',\n 'templateUrl': '/resources/template/html/pages/home-security/downloads-product.html',\n 'params': {\n 'canonical': null\n },\n 'controller': [\"productData\", \"$stateParams\", \"geoLocationManager\", \"$state\", \"$rootScope\", \"$scope\", \"windowHelperService\", \"ENV\", \"$location\", \"osDetectService\", function controller(productData, $stateParams, geoLocationManager, $state, $rootScope, $scope, windowHelperService, ENV, $location, osDetectService) {\n var _this4 = this;\n\n var curUrl = $state.href($state.current.name, $state.params, { 'absolute': true }),\n geoIP = geoLocationManager.getUserGeoIp(curUrl);\n\n setCanonicalLink($rootScope, windowHelperService, ENV.locale !== 'es-mx' ? $stateParams.canonical : undefined);\n\n if (geoLocationManager.isVpnProhibitedCountry(geoIP) && $stateParams.jsonName === 'ksec') $state.go('home-downloads', {}, {\n 'location': false,\n 'inherit': false\n });\n\n productData.getb2c($stateParams.jsonName).then(function (response) {\n _this4.product = response.data.fields;\n });\n\n if ($stateParams.jsonName === 'ksec') {\n osRecognitionController($location, $scope, osDetectService);\n }\n }],\n 'controllerAs': '$ctrl'\n }).state('home-free-trials-product', {\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'Free Trials'\n },\n 'parent': 'home-security-section',\n 'url': '/home-security/free-trials/products/:jsonName',\n 'templateUrl': '/resources/template/html/pages/home-security/free-trials-product.html',\n 'controller': [\"productData\", \"$stateParams\", \"$rootScope\", function controller(productData, $stateParams, $rootScope) {\n var _this5 = this;\n\n productData.getb2c($stateParams.jsonName).then(function (response) {\n _this5.product = response.data.fields;\n $rootScope.kaspersky.productName = _this5.product.title;\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('auto-renewal-service', {\n 'parent': 'home-security-section',\n 'url': '/home-security/auto-renewal-service',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Auto Renewal Service'\n },\n 'templateUrl': '/resources/template/html/pages/home-security/auto-renewal-service.html'\n }).state('product-kss', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kss',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KSS'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-product.html',\n 'controller': osRecognitionController,\n 'controllerAs': '$ctrl'\n }).state('kss-verdict', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kss/verdict',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KSS Verdict'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-verdict.html'\n }).state('kss-verdict1', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kss/verdict1',\n 'data': {\n 'title': 'B2C Tools - KSS Verdict'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-verdict.html'\n }).state('product-ksu', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/ksu',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KSU'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/ksu-product.html'\n }).state('product-kwc', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kwc',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KWC Who Calls'\n },\n 'controller': [\"seoHelperService\", \"ENV\", function controller(seoHelperService, ENV) {\n var twitterMetaObj = {\n 'twitter:card': 'summary',\n 'twitter:creator': '@Kaspersky_ru',\n 'twitter:title': 'Kaspersky Who Calls – Больше никакого спама и назойливых звонков с мошеннических номеров!',\n 'twitter:description': 'Теперь вы можете легко и быстро узнать, кто звонит вам с незнакомого номера с помощью бесплатного приложения. Решайте, отвечать ли на звонок или добавить номер в блок, после того, как увидите название компании звонящего, адрес, категорию и сведения о ее репутации.',\n 'twitter:image': 'https://www.kaspersky.ru/content/ru-ru/images/screenshot_wc_1.png'\n };\n\n if (ENV.locale === 'ru-ru') seoHelperService.setMeta(twitterMetaObj);\n }],\n 'controllerAs': '$ctrl',\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kwc-product.html'\n }).state('product-kfa', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kfa',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KFA'\n },\n 'params': {\n 'canonical': null\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kfa-product.html',\n 'controller': [\"$location\", \"$rootScope\", \"$scope\", \"$anchorScroll\", \"osDetectService\", \"ENV\", \"$stateParams\", \"windowHelperService\", function controller($location, $rootScope, $scope, $anchorScroll, osDetectService, ENV, $stateParams, windowHelperService) {\n setCanonicalLink($rootScope, windowHelperService, ENV.locale === 'fr-fr' ? $stateParams.canonical : undefined);\n osRecognitionController($location, $scope, osDetectService);\n\n if (ENV.locale === 'en-us') {\n $anchorScroll('compare');\n }\n }],\n 'controllerAs': '$ctrl'\n }).state('product-ksk', {\n 'parent': 'home-security-section',\n 'params': {\n 'copy': null\n },\n 'url': '/b2c-tools/ksk',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KSK'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/ksk-product.html',\n 'controller': [\"$stateParams\", \"templateVersion\", function controller($stateParams, templateVersion) {\n var ctrl = this;\n ctrl.copy = $stateParams.copy;\n\n templateVersion.getVer('b2c-tools', 'ksk/meta').then(function (response) {\n ctrl.template = response && response.data.fields.template || '1.0';\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('product-kscloud-free', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kscloud-free',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KS Cloud Free'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kscloud-free-product.html',\n 'controllerAs': '$ctrl'\n }).state('product-ksec', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/ksec',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KSeC'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/ksec-product.html',\n 'controller': [\"productData\", \"geoLocationManager\", \"$state\", function controller(productData, geoLocationManager, $state) {\n var _this6 = this;\n\n var curUrl = $state.href($state.current.name, $state.params, { 'absolute': true }),\n geoIP = geoLocationManager.getUserGeoIp(curUrl);\n\n if (geoLocationManager.isVpnProhibitedCountry(geoIP)) $state.go('home-security', {}, {\n 'location': false,\n 'inherit': false\n });\n\n productData.getb2c('ksec').then(function (response) {\n _this6.product = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('product-ksec-upgrade', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/ksec-upgrade',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KSeC Upgrade'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/ksec-product-upgrade.html',\n 'controller': [\"productData\", \"geoLocationManager\", \"$state\", function controller(productData, geoLocationManager, $state) {\n var _this7 = this;\n\n var curUrl = $state.href($state.current.name, $state.params, { 'absolute': true }),\n geoIP = geoLocationManager.getUserGeoIp(curUrl);\n if (geoLocationManager.isVpnProhibitedCountry(geoIP)) $state.go('home-security', {}, {\n 'location': false,\n 'inherit': false\n });\n productData.getb2c('ksec').then(function (response) {\n _this7.product = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('product-ksk-affiliate', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/affiliate-safe-kids',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KSK'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/ksk-product.html'\n }).state('product-rfid', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/rfid',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - RFID protection'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/rfid-product.html'\n }).state('product-usb', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/usb',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - USB key'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/usb-product.html'\n }).state('product-webcam', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/webcam',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - Webcam cover'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/webcam-product.html'\n }).state('product-kvs', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kvs',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KVS'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kvs-product.html'\n }).state('product-kvs-pro', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kvs/pro',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KVS PRO'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kvs-pro-product.html',\n 'controller': [\"ENV\", \"$state\", function controller(ENV, $state) {\n if ('en-za en-au en-in en-au'.split(' ').indexOf(ENV.locale) !== -1) {\n $state.go('404', {}, opts);\n }\n }]\n }).state('product-adcleaner', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/KAC',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KAC'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kac-product.html'\n }).state('product-cleaner', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/KPC',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KPC'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kcp-product.html'\n }).state('product-qr-scanner', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/KQS',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KQS'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kqs-product.html'\n }).state('product-system-checker', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/KSC',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KSC'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/ksc-product.html'\n }).state('product-kisafree', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kisafree',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - KISAFree'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/ksc-product.html'\n }).state('product-battery-life-saver', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kbls',\n 'data': {\n 'navPath': ['/home-security'],\n 'title': 'B2C Tools - Battery Life Saver'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/ksc-product.html'\n }).state('kss-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kss/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KSS Thank You'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html',\n 'controller': osRecognitionController,\n 'controllerAs': '$ctrl'\n }).state('ksu-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/ksu/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KSU Thank You'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html'\n }).state('kfa-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kfa/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KFA Thank You'\n },\n 'params': {\n 'canonical': null\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html',\n 'controller': [\"$location\", \"$rootScope\", \"$scope\", \"osDetectService\", \"$stateParams\", \"windowHelperService\", function controller($location, $rootScope, $scope, osDetectService, $stateParams, windowHelperService) {\n setCanonicalLink($rootScope, windowHelperService, $stateParams.canonical);\n osRecognitionController($location, $scope, osDetectService);\n }],\n 'controllerAs': '$ctrl'\n }).state('kts-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kts/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KTS Thank You'\n },\n 'params': {\n 'canonical': null\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html',\n 'controller': [\"$rootScope\", \"$stateParams\", \"windowHelperService\", function controller($rootScope, $stateParams, windowHelperService) {\n setCanonicalLink($rootScope, windowHelperService);\n }]\n }).state('kis-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kis/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KIS Thank You'\n },\n 'params': {\n 'canonical': null\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html',\n 'controller': [\"$rootScope\", \"windowHelperService\", function controller($rootScope, windowHelperService) {\n setCanonicalLink($rootScope, windowHelperService);\n }]\n }).state('kav-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kav/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KAV Thank You'\n },\n 'params': {\n 'canonical': null\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html',\n 'controller': [\"$rootScope\", \"windowHelperService\", function controller($rootScope, windowHelperService) {\n setCanonicalLink($rootScope, windowHelperService);\n }]\n }).state('kismac-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kismac/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KISMAC Thank You'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html'\n }).state('ksc-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/ksc/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KSU Thank You'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html'\n }).state('kvrt-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/kvrt/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KVRT Thank You'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html',\n 'controller': osRecognitionController,\n 'controllerAs': '$ctrl'\n }).state('krd-thank-you', {\n 'parent': 'home-security-section',\n 'url': '/b2c-tools/krd/thank-you',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'B2C Tools - KRT Thank You'\n },\n 'templateUrl': '/resources/template/html/pages/b2c-tools/kss-thank-you.html'\n }).state('b2c-resource-center', {\n 'parent': 'home-security-section',\n 'url': '/resource-center',\n 'templateUrl': '/resources/template/html/pages/content-repo/b2c/resources-center.html',\n 'data': {\n 'navPath': ['/resource-center'],\n 'title': 'Resource Center'\n },\n 'controller': [\"imageManagerService\", function controller(imageManagerService) {\n imageManagerService.activateRandomImagesCache();\n }]\n }).state('b2c-resource-center.category', {\n 'parent': 'home-security-section',\n 'url': '/resource-center/:category',\n 'templateUrl': '/resources/template/html/pages/content-repo/b2c/resources-category.html',\n 'data': {\n 'navPath': ['/resource-center'],\n 'title': 'Resource Center Category'\n },\n 'controller': [\"imageManagerService\", function controller(imageManagerService) {\n imageManagerService.activateRandomImagesCache();\n }]\n }).state('b2c-resource-center.category-details', {\n 'parent': 'home-security-section',\n 'url': '/resource-center/:category/:path',\n 'templateUrl': '/resources/template/html/pages/content-repo/b2c/resources-post.html',\n 'data': {\n 'navPath': ['/resource-center'],\n 'title': 'Resources Center Category'\n },\n 'controller': [\"imageManagerService\", function controller(imageManagerService) {\n imageManagerService.activateRandomImagesCache();\n }]\n }).state('premium-services', {\n 'parent': 'home-security-section',\n 'url': '/home-security/premium-services',\n 'data': {\n 'navPath': ['/home-security']\n },\n 'templateUrl': '/resources/template/html/pages/home-security/premium-services.html',\n 'controllerAs': '$ctrl'\n }).state('premium-services-faq', {\n 'parent': 'home-security-section',\n 'url': '/home-security/premium-service-faq',\n 'data': {\n 'navPath': ['/home-security']\n },\n 'templateUrl': '/resources/template/html/pages/home-security/premium-service-faq.html',\n 'controllerAs': '$ctrl'\n }).state('premium-installation-faq', {\n 'parent': 'home-security-section',\n 'url': '/home-security/premium-installation-faq',\n 'data': {\n 'navPath': ['/home-security']\n },\n 'templateUrl': '/resources/template/html/pages/home-security/premium-service-faq.html',\n 'controllerAs': '$ctrl'\n }).state('premium-service', {\n 'parent': 'home-security-section',\n 'url': '/home-security/products/:jsonName',\n 'data': {\n 'navPath': ['/home-security']\n },\n 'templateUrl': '/resources/template/html/pages/home-security/premium-service.html',\n 'controller': [\"productData\", \"$stateParams\", function controller(productData, $stateParams) {\n var _this8 = this;\n\n productData.getb2c($stateParams.jsonName).then(function (response) {\n _this8.product = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('b2c-special-offers', {\n 'parent': 'home-security-section',\n 'url': '/home-security/special-offers',\n 'templateUrl': '/resources/template/html/pages/home-security/special-offers.html',\n 'controllerAs': '$ctrl',\n 'data': {\n 'navPath': ['/home-security/special-offers']\n }\n }).state('b2c-special-offer', {\n 'parent': 'home-security-section',\n 'url': '/home-security/special-offers/:offerName',\n 'templateUrl': '/resources/template/html/pages/home-security/special-offer-page.html',\n 'controller': [\"$stateParams\", \"directiveData\", function controller($stateParams, directiveData) {\n var _this9 = this;\n\n this.offerName = $stateParams.offerName;\n directiveData.getByUrl(this.offerName).then(function (response) {\n _this9.offerData = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl',\n 'data': {\n 'navPath': ['/home-security/special-offers']\n }\n }).state('b2c-payment-and-shipping', {\n 'parent': 'home-security-section',\n 'url': '/home-security/payment-and-shipping',\n 'templateUrl': '/resources/template/html/pages/smb/payment-options.html',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'Payment and Shipping'\n }\n }).state('b2c-order-online', {\n 'parent': 'home-security-section',\n 'url': '/home-security/order-online',\n 'templateUrl': '/resources/template/html/pages/smb/payment-options.html',\n 'data': {\n 'navPath': ['/downloads'],\n 'title': 'Order Online'\n }\n }).state('b2c-how-to-buy', {\n 'parent': 'home-security-section',\n 'url': '/home-security/how-to-buy',\n 'data': {\n 'title': 'How to Buy',\n 'navPath': ['/home-security/how-to-buy']\n },\n 'templateUrl': '/resources/template/html/pages/site-general/privacy.html'\n });\n\n $urlRouterProvider\n // B2C Products\n .when('/total-security', [\"$state\", function ($state) {\n $state.go('home-product', { 'jsonName': 'ktsmd' }, opts);\n }]).when('/total-security1', [\"$state\", function ($state) {\n $state.go('home-product', { 'jsonName': 'ktsmd', 'bundle': true }, opts);\n }]).when('/multi-device-security', [\"$state\", function ($state) {\n $state.go('home-product', { 'jsonName': 'kismd' }, opts);\n }]).when('/internet-security', [\"$state\", function ($state) {\n $state.go('home-product', { 'jsonName': 'kis' }, opts);\n }]).when('/antivirus', [\"$state\", function ($state) {\n $state.go('home-product', { 'jsonName': 'kav' }, opts);\n }]).when('/mac-security', [\"$state\", function ($state) {\n $state.go('home-product', { 'jsonName': 'kismac' }, opts);\n }]).when('/android-security', [\"$state\", function ($state) {\n $state.go('home-product', { 'jsonName': 'kisa' }, opts);\n }]).when('/password-manager', [\"$state\", function ($state) {\n $state.go('home-product-kpm', { 'jsonName': 'kpm' }, opts);\n }]).when('/acq/password-manager-all-devices', [\"$state\", function ($state) {\n $state.go('home-product-kpm', { 'jsonName': 'kpm', 'copy': true }, opts);\n }]).when('/security-cloud', [\"$state\", function ($state) {\n $state.go('home-product-kscloud', { 'jsonName': 'kscloud' }, opts);\n }])\n //Premium Service Products\n .when('/premium-services/installation', [\"$state\", function ($state) {\n $state.go('premium-service', { 'jsonName': 'kpis' }, opts);\n }]).when('/premium-installation', [\"$state\", function ($state) {\n $state.go('premium-service', { 'jsonName': 'kpis' }, opts);\n }]).when('/premium-services/browser-security', [\"$state\", function ($state) {\n $state.go('premium-service', { 'jsonName': 'kbs' }, opts);\n }]).when('/premium-services/home', [\"$state\", function ($state) {\n $state.go('premium-service', { 'jsonName': 'kcpc' }, opts);\n }]).when('/premium-services/advanced', [\"$state\", function ($state) {\n $state.go('premium-service', { 'jsonName': 'kcpcs' }, opts);\n }]).when('/premium-services/pc', [\"$state\", function ($state) {\n $state.go('premium-service', { 'jsonName': 'kpctu' }, opts);\n }]).when('/premium-services', [\"$state\", function ($state) {\n $state.go('premium-services', {}, opts);\n }]).when('/premium-services-faq', [\"$state\", function ($state) {\n $state.go('premium-services-faq', {}, opts);\n }]).when('/premium-installation-faq', [\"$state\", function ($state) {\n $state.go('premium-installation-faq', {}, opts);\n }])\n // B2C Downloads\n .when('/downloads', [\"$state\", function ($state) {\n $state.go('home-downloads', {}, opts);\n }]).when('/downloads/thank-you/total-security', [\"$state\", function ($state) {\n $state.go('home-downloads-product', {\n 'jsonName': 'ktsmd',\n 'canonical': '/downloads/thank-you/total-security-free-trial'\n }, opts);\n }]).when('/downloads/thank-you/multi-device-security', [\"$state\", function ($state) {\n $state.go('home-downloads-product', { 'jsonName': 'kismd' }, opts);\n }]).when('/downloads/thank-you/internet-security', [\"$state\", function ($state) {\n $state.go('home-downloads-product', {\n 'jsonName': 'kis',\n 'canonical': '/downloads/thank-you/internet-security-free-trial'\n }, opts);\n }]).when('/downloads/thank-you/antivirus', [\"$state\", function ($state) {\n $state.go('home-downloads-product', {\n 'jsonName': 'kav',\n 'canonical': '/downloads/thank-you/antivirus-free-trial'\n }, opts);\n }]).when('/downloads/thank-you/mac-security', [\"$state\", function ($state) {\n $state.go('home-downloads-product', { 'jsonName': 'kismac' }, opts);\n }]).when('/downloads/thank-you/android-security', [\"$state\", function ($state) {\n $state.go('home-downloads-product', { 'jsonName': 'kisa' }, opts);\n }]).when('/downloads/thank-you/password-manager-pc', [\"$state\", function ($state) {\n $state.go('home-downloads-product', { 'jsonName': 'kpm' }, opts);\n }]).when('/downloads/thank-you/password-manager-mac', [\"$state\", function ($state) {\n $state.go('home-downloads-product', { 'jsonName': 'kpmmac' }, opts);\n }]).when('/downloads/thank-you/free-vpn-secure-connection-pc', [\"$state\", function ($state) {\n $state.go('home-downloads-product', { 'jsonName': 'ksec' }, opts);\n }])\n // B2C Trials\n .when('/downloads/thank-you/total-security-free-trial', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'ktsmd' }, opts);\n }]).when('/downloads/thank-you/multi-device-security-free-trial', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'kismd' }, opts);\n }]).when('/downloads/thank-you/internet-security-free-trial', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'kis' }, opts);\n }]).when('/downloads/thank-you/antivirus-free-trial', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'kav' }, opts);\n }]).when('/downloads/thank-you/mac-security-free-trial', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'kismac' }, opts);\n }]).when('/downloads/thank-you/android-security-free-trial', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'kisa' }, opts);\n }]).when('/downloads/thank-you/password-manager-free-trial', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'kpm' }, opts);\n }]).when('/downloads/thank-you/try-security-cloud-personal', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'ksc-personal' }, opts);\n }]).when('/downloads/thank-you/try-security-cloud-family', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'ksc-family' }, opts);\n }]).when('/downloads/thank-you/try-free-cloud-antivirus', [\"$state\", function ($state) {\n $state.go('home-free-trials-product', { 'jsonName': 'ksc-free' }, opts);\n }])\n // B2C UAM Products\n .when('/free-virus-scan', [\"$state\", function ($state) {\n $state.go('product-kss', {}, opts);\n }]).when('/free-virus-scan/verdict', [\"$state\", function ($state) {\n $state.go('kss-verdict', {}, opts);\n }]).when('/free-virus-scan/verdict1', [\"$state\", function ($state) {\n $state.go('kss-verdict1', {}, opts);\n }]).when('/free-software-updater', [\"$state\", function ($state) {\n $state.go('product-ksu', {}, opts);\n }]).when('/free-caller-id', [\"$state\", function ($state) {\n $state.go('product-kwc', {}, opts);\n }]).when('/free-antivirus', [\"$state\", function ($state) {\n $state.go('product-kfa', {\n 'canonical': '/antivirus'\n }, opts);\n }]).when('/safe-kids', [\"$state\", function ($state) {\n $state.go('product-ksk', {}, opts);\n }]).when('/free-cloud-antivirus', [\"$state\", function ($state) {\n $state.go('product-kscloud-free', {}, opts);\n }]).when('/rfid-protection', [\"$state\", function ($state) {\n $state.go('product-rfid', {}, opts);\n }]).when('/usb-key', [\"$state\", function ($state) {\n $state.go('product-usb', {}, opts);\n }]).when('/webcam-cover', [\"$state\", function ($state) {\n $state.go('product-webcam', {}, opts);\n }]).when('/safe-kids-install', [\"$state\", function ($state) {\n $state.go('product-ksk', { 'copy': true }, opts);\n }]).when('/vpn-secure-connection', [\"$state\", function ($state) {\n $state.go('product-ksec', {}, opts);\n }]).when('/secure-connection-upgrade', [\"$state\", function ($state) {\n $state.go('product-ksec-upgrade', {}, opts);\n }]).when('/affiliate-safe-kids', [\"$state\", function ($state) {\n $state.go('product-ksk-affiliate', {}, opts);\n }]).when('/mac-virus-scan', [\"$state\", function ($state) {\n $state.go('product-kvs-pro', {}, opts);\n }]).when('/free-mac-virus-scan', [\"$state\", function ($state) {\n $state.go('product-kvs', {}, opts);\n }]).when('/adcleaner', [\"$state\", function ($state) {\n $state.go('product-adcleaner', {}, opts);\n }]).when('/free-pc-cleaner', [\"$state\", function ($state) {\n $state.go('product-cleaner', {}, opts);\n }]).when('/qr-scanner', [\"$state\", function ($state) {\n $state.go('product-qr-scanner', {}, opts);\n }]).when('/system-checker', [\"$state\", function ($state) {\n $state.go('product-system-checker', {}, opts);\n }]).when('/android-security-free', [\"$state\", function ($state) {\n $state.go('product-kisafree', {}, opts);\n }]).when('/battery-life-saver', [\"$state\", function ($state) {\n $state.go('product-battery-life-saver', {}, opts);\n }])\n // B2C UAM Downloads\n .when('/downloads/thank-you/safe-kids-pc', [\"$state\", function ($state) {\n $state.go('home-downloads-product', { 'jsonName': 'ksk' }, opts);\n }]).when('/downloads/thank-you/safe-kids-mac', [\"$state\", function ($state) {\n $state.go('home-downloads-product', { 'jsonName': 'kskmac' }, opts);\n }]).when('/downloads/thank-you/security-scan', [\"$state\", function ($state) {\n $state.go('kss-thank-you', {}, opts);\n }]).when('/downloads/thank-you/free-software-updater', [\"$state\", function ($state) {\n $state.go('ksu-thank-you', {}, opts);\n }]).when('/downloads/thank-you/free-antivirus-download', [\"$state\", function ($state) {\n $state.go('kfa-thank-you', {\n 'canonical': '/free-antivirus'\n }, opts);\n }]).when('/downloads/thank-you/free-total-security', [\"$state\", function ($state) {\n $state.go('kts-thank-you', { 'canonical': '/downloads/thank-you/total-security-free-trial' }, opts);\n }]).when('/downloads/thank-you/free-internet-security', [\"$state\", function ($state) {\n $state.go('kis-thank-you', { 'canonical': '/downloads/thank-you/internet-security-free-trial' }, opts);\n }]).when('/downloads/thank-you/free-antivirus', [\"$state\", function ($state) {\n $state.go('kav-thank-you', { 'canonical': '/downloads/thank-you/antivirus-free-trial' }, opts);\n }]).when('/downloads/thank-you/free-mac-security', [\"$state\", function ($state) {\n $state.go('kismac-thank-you', {}, opts);\n }]).when('/downloads/thank-you/system-checker', [\"$state\", function ($state) {\n $state.go('ksc-thank-you', {}, opts);\n }]).when('/downloads/thank-you/free-virus-removal-tool', [\"$state\", function ($state) {\n $state.go('kvrt-thank-you', {}, opts);\n }]).when('/downloads/thank-you/free-rescue-disk', [\"$state\", function ($state) {\n $state.go('krd-thank-you', {}, opts);\n }]).when('/auto-renewal-service', [\"$state\", function ($state) {\n $state.go('auto-renewal-service', {}, opts);\n }]);\n }]);\n\n function setCanonicalLink($rootScope, windowHelperService, value) {\n $rootScope.canonical = value ? windowHelperService.getDomainName() + value : windowHelperService.getCanonicalUrl();\n }\n\n function osRecognitionController($location, $scope, osDetectService) {\n var osDetected = osDetectService.getCurrentOs($location.hash()).device.type;\n\n $scope.showMobile = osDetected === 'mobile';\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$stateProvider\", function ($stateProvider) {\n $stateProvider.state('custom', {\n 'url': '/custom/:template',\n 'templateProvider': [\"$stateParams\", function templateProvider($stateParams) {\n return $stateParams.template;\n }]\n });\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n routeComponentsController.$inject = [\"ENV\", \"$state\"];\n angular.module('kappGlobal').config([\"$stateProvider\", \"$urlRouterProvider\", function ($stateProvider, $urlRouterProvider) {\n var opts = { 'location': false, 'inherit': true };\n $stateProvider.state('enterprise-home', {\n 'parent': 'enterprise',\n 'url': '/enterprise-security',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/home' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n })\n // RESOURCES STATES\n .state('enterprise-resources', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/resources']\n },\n 'url': '/enterprise-security/resources',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'resources/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/resources' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-case-studies', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/resources/case-studies']\n },\n 'url': '/enterprise-security/resources/case-studies',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'resources/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/resource' + res + '.html');\n });\n }],\n 'controller': function controller() {\n this.resourceName = 'case-studies';\n this.currentData = [];\n },\n 'controllerAs': '$ctrl'\n }).state('enterprise-resource', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/resources']\n },\n 'url': '/enterprise-security/resources/:productName',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'resources/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/resource' + res + '.html');\n });\n }],\n 'controller': [\"$stateParams\", function controller($stateParams) {\n this.resourceName = $stateParams.productName;\n this.currentData = [];\n }],\n 'controllerAs': '$ctrl'\n }).state('enterprise-case-studies-ferrari', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/resources']\n },\n 'url': '/enterprise-security/resources/case-studies/ferrari',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'resources/case-studies/ferrari/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/case-studies-ferrari' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-mitre-attack', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/resources/mitre-attack']\n },\n 'url': '/enterprise-security/resources/mitre-attack',\n 'templateUrl': '/resources/template/html/pages/enterprise/mitre.html'\n }).state('enterprise-mitre-ics', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/resources/mitre-ics']\n },\n 'url': '/enterprise-security/resources/mitre-ics',\n 'templateUrl': '/resources/template/html/pages/enterprise/mitre.html'\n }).state('enterprise-mitre-articles', {\n 'parent': 'enterprise',\n 'url': '/enterprise-security/mitre/:productName',\n 'templateUrl': '/resources/template/html/pages/enterprise/wiki-section.html'\n })\n // CONTACT STATES\n .state('enterprise-contact-form', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/about/contact']\n },\n 'url': '/enterprise-security/contact',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'contact/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-contact-thank-you', {\n 'parent': 'enterprise',\n 'url': '/enterprise-security/contact/thank-you',\n 'data': {\n 'navPath': ['/about/contact']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'contact/thank-you/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact-thank-you' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-edr-piloting', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/products/endpoint-detection-response-edr/contact-edr-piloting',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'products/endpoint-detection-response-edr/contact-edr-piloting/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-threat-mgmt-defence-solution-demo', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/anti-targeted-attacks/demo',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'solutions/anti-targeted-attacks/demo/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-threat-mgmt-defence-solution-demo-thank-you', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/anti-targeted-attacks/demo/thank-you',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'solutions/anti-targeted-attacks/demo/thank-you/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-fraud-prevention-demo', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/fraud-prevention/demo',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'solutions/fraud-prevention/demo/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-edr-download', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/endpoint-detection-response-edr/edr-download',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'products/endpoint-detection-response-edr/edr-download/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-edr-piloting-thank-you', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/endpoint-detection-response-edr/contact-edr-piloting/thank-you',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'products/endpoint-detection-response-edr/contact-edr-piloting/thank-you/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact-thank-you' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-cybersecurity-awareness-contact', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/cybersecurity-awareness/contact',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'products/cybersecurity-awareness/contact/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-cybersecurity-awareness-demo', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/products/cybersecurity-awareness/demo',\n 'templateUrl': '/resources/template/html/pages/enterprise/product-cybersecurity-awareness-demo.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-apt-intelligence-reporting-sample', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/apt-intelligence-reporting/sample',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'products/apt-intelligence-reporting/sample/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-maltego-license-transforms', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/maltego-license-transforms',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'maltego-license-transforms/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-apt-intelligence-reporting-sample', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/apt-intelligence-reporting/sample',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'services/apt-intelligence-reporting/sample/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-apt-intelligence-reporting-subscribe', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/apt-intelligence-reporting/subscribe',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'services/apt-intelligence-reporting/subscribe/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('cyber-reputation-management-contact', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/cyber-reputation-management/contact',\n 'templateUrl': '/resources/template/html/pages/enterprise/contact.html'\n }).state('cyber-reputation-management-contact-thank-you', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/cyber-reputation-management/contact/thank-you',\n 'templateUrl': '/resources/template/html/pages/enterprise/contact-thank-you.html'\n }).state('enterprise-product-apt-intelligence-reporting-subscribe', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/apt-intelligence-reporting/subscribe',\n 'templateUrl': '/resources/template/html/pages/enterprise/contact.html'\n }).state('enterprise-gdpr-contact-us', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/gdpr']\n },\n 'url': '/enterprise-security/products/gdpr/contact',\n 'templateUrl': '/resources/template/html/pages/enterprise/contact.html'\n }).state('enterprise-gdpr-white-paper', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/gdpr']\n },\n 'url': '/enterprise-security/products/gdpr/white-paper',\n 'templateUrl': '/resources/template/html/pages/enterprise/contact.html'\n }).state('enterprise-product-cybersecurity-awareness-demo-contact', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/about/contact']\n },\n 'url': '/enterprise-security/products/cybersecurity-awareness/demo/contact',\n 'templateUrl': '/resources/template/html/pages/enterprise/contact.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n })\n // SOLUTIONS STATES\n .state('enterprise-solution-endpoint', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/endpoint',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-endpoint' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-security-operations-center-soc', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/security-operations-center-soc',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-endpoint' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-security-operations-center-soc-contact', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/security-operations-center-soc/contact',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'contact/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-virtualization', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/virtualization',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-virtualization' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-mobile', {\n 'parent': 'enterprise',\n 'url': '/enterprise-security/solutions/mobile',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-mobile' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-anti-targeted-attacks', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/anti-targeted-attacks',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-anti-targeted-attacks' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-threat-management', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/threat-management',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-anti-targeted-attacks' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-intelligence-services', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/intelligence-services',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-intelligence-services' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-data-center', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/data-center',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-data-center' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-fraud-prevention', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/fraud-prevention',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-fraud-prevention' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-cloud-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/cloud-security',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-cloud-security' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-aws', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/aws',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-anti-targeted-attacks' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-security-operations-center', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/security-operations-center',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-security-operations-center' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-cybersecurity-services', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/cybersecurity-services',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-cybersecurity-services' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-ddos-protection', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/ddos-protection',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution-ddos-protection.html'\n }).state('enterprise-blockchain-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/blockchain-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-crypto-exchange-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/crypto-exchange-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-ico-sto-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/ico-sto-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-endpoint-demo', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/endpoint/demo',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'solutions/anti-targeted-attacks/demo/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '3.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-iot', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/iot-and-embedded-systems-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-dit', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/dlt-cybersecurity',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-iot-embedded-systems-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/iot-and-embedded-systems-security/embedded-systems-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-iot-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/iot-and-embedded-systems-security/iot-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-iot-transportation-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/iot-and-embedded-systems-security/transportation-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-industrial-cybersecurity', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/industrial-cybersecurity',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-industrial', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/industrial-solution',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution-above-use.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-solution-transportation-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security']\n },\n 'url': '/enterprise-security/solutions/transportation-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/solution.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n })\n // INDUSTRIES STATES\n .state('enterprise-industries-category', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries',\n 'templateUrl': '/resources/template/html/pages/enterprise/category.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-government', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/government',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/industry.html');\n }\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-government2.0.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-finance', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/finance',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/industry.html');\n }\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-finance2.0.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-industrial', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/industrial',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-industrial' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/industry-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-healthcare', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/healthcare',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/industry.html');\n }\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-healthcare2.0.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-telecom', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/telecom',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/industry.html');\n }\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/solution-telecom2.0.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-transportation', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/transportation',\n 'templateUrl': '/resources/template/html/pages/enterprise/industry.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-/retail', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/retail',\n 'templateUrl': '/resources/template/html/pages/enterprise/industry.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-national-cybersecurity', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/national',\n 'templateUrl': '/resources/template/html/pages/enterprise/industry.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-transportation-cybersecurity', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/transportation-cybersecurity',\n 'templateUrl': '/resources/template/html/pages/enterprise/industry.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-industry-retail-cybersecurity', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/industries/retail-cybersecurity',\n 'templateUrl': '/resources/template/html/pages/enterprise/industry.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n })\n // PRODUCTS STATES\n .state('enterprise-products-category', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products',\n 'templateUrl': '/resources/template/html/pages/enterprise/category.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-private-security-network', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/private-security-network',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-private-security-network' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-anti-targeted-attack-platform', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/anti-targeted-attack-platform',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-anti-targeted-attack-platform' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-cybersecurity-awareness', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/cybersecurity-awareness',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-cybersecurity-awareness' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-cybersecurity-how', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/cybersecurity-awareness/how-it-works',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-cybersecurity-how' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('endpoint-detection-response-edr', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/endpoint-detection-response-edr',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-endpoint-detection-response-edr' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-embedded-systems', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/embedded-systems',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-embedded-systems' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-mobile', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/mobile-product',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-private-security-network' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-virtualization', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/virtualization-product',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-private-security-network' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-endpoint', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/endpoint-product',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-private-security-network' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-cyber-attack-attribution-tool', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/cyber-attack-attribution-tool',\n 'templateUrl': '/resources/template/html/pages/enterprise/product-above-use.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-sandbox-malware-analysis', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/sandbox-malware-analysis',\n 'templateUrl': '/resources/template/html/pages/enterprise/product-above-use.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-storage-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/storage-security',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product-private-security-network' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/product.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-maintenance-service-agreement', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/maintenance-service-agreement',\n 'templateUrl': '/resources/template/html/pages/enterprise/product-maintenance-service-agreement.html'\n }).state('enterprise-product-cyber-reputation-management', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/products/cyber-reputation-management',\n 'templateUrl': '/resources/template/html/pages/enterprise/product-cyber-reputation-management.html',\n 'controller': [\"$state\", \"templateVersion\", \"errorService\", function controller($state, templateVersion, errorService) {\n return templateVersion.getVer('/enterprise-security/products/cyber-reputation-management', 'meta').then(function (response) {\n if (response.data && response.data.fields.template === '3.0') $state.go('enterprise-service-cyber-reputation-management', {}, opts);\n }).catch(function (rejection) {\n errorService.warn(rejection);\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-apt-intelligence-reporting', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/apt-intelligence-reporting',\n 'templateUrl': '/resources/template/html/pages/enterprise/product-apt-intelligence-reporting.html'\n }).state('enterprise-product-azure', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/azure',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-cloud-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/cloud-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-aws', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/aws',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-devops-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/devops-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-gcp-hybrid-cloud-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/gcp-hybrid-cloud-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-hybrid-cloud-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/hybrid-cloud-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-nextforce-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/nextforce-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-mail-server', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/mail-server',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-azure-hybrid-cloud', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/azure',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-file-server', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/file-server',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-endpoint-detection-and-response', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/industries']\n },\n 'url': '/enterprise-security/products/endpoint-detection-and-response',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-office-365', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/security-for-office-365',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-sandbox', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/malware-sandbox',\n 'templateUrl': '/resources/template/html/pages/enterprise/sandbox.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-internet-gateway', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/internet-gateway',\n 'templateUrl': '/resources/template/html/pages/enterprise/product.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-internet-gateway-demo', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/internet-gateway/demo',\n 'templateUrl': '/resources/template/html/pages/enterprise/contact.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-product-internet-gateway-free-trial', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/products/internet-gateway/free-trial',\n 'templateUrl': '/resources/template/html/pages/enterprise/contact.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n })\n // SERVICES STATES\n .state('enterprise-services-category', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services',\n 'templateUrl': '/resources/template/html/pages/enterprise/category.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-security-training', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/security-training',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-ddos-protection' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-threat-hunting', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/threat-hunting',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-ddos-protection' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-incident-response', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/incident-response',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-ddos-protection' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-threat-intelligence', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/threat-intelligence',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-threat-intelligence' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-after-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-security-awareness', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/security-awareness',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-ddos-protection' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-adaptive-online-awareness-training', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/adaptive-online-awareness-training',\n 'templateUrl': '/resources/template/html/pages/enterprise/service-above-use.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-security-assessment', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/security-assessment',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-ddos-protection' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-premium-support', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/premium-support',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-premium-support' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-professional-services', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/professional-services',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-ddos-protection' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-after-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-ddos-protection', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/products']\n },\n 'url': '/enterprise-security/services/ddos-protection',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-ddos-protection' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-maintenance-service-agreement', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/maintenance-service-agreement',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-maintenance-service-agreement' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-apt-intelligence-reporting', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/apt-intelligence-reporting',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'services/apt-intelligence-reporting/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res === '1.0') res = '';\n if (res !== '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-apt-intelligence-reporting' + res + '.html');\n }\n if (res === '3.0') {\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-above-use.html');\n }\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-cybersecurity-services', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/solutions/cybersecurity-services',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n var res = response.data.fields.template;\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/service-cybersecurity-services' + res + '.html');\n });\n }],\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-gdpr', {\n 'parent': 'enterprise',\n 'url': '/enterprise-security/products/gdpr',\n 'data': {\n 'navPath': ['/gdpr']\n },\n 'templateUrl': '/resources/template/html/pages/enterprise/product-gdpr.html'\n }).state('enterprise-wiki-section', {\n 'parent': 'enterprise',\n 'url': '/enterprise-security/wiki-section/products/:productName',\n 'templateUrl': '/resources/template/html/pages/enterprise/wiki-section.html'\n }).state('enterprise-wiki-section-home', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/wiki-section/home',\n 'templateUrl': '/resources/template/html/pages/enterprise/wiki-section-home.html'\n }).state('enterprise-service-cyber-reputation-management', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/cyber-reputation-management',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-cyber-incident-response-communication', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/cyber-incident-response-communication',\n 'templateUrl': '/resources/template/html/pages/enterprise/service-cyber-incident-response-communication.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-targeted-attack-discovery', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/targeted-attack-discovery',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-managed-detection-and-response', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/managed-detection-and-response',\n 'templateUrl': '/resources/template/html/pages/enterprise/service-above-use.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-industrial-cybersecurity-assesment', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/industrial-cybersecurity-assesment',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-penetration-testing', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/penetration-testing',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-application-security-assessment', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/application-security-assessment',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-payment-systems-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/payment-systems-security',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-transportation-systems-security-assessment', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/transportation-systems-security-assessment',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-iot', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/iot',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-malware-analysis', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/malware-analysis',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-digital-forensics', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/digital-forensics',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-fraud-detection', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/fraud-detection',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-ics-security', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/ics-security-assessment',\n 'templateUrl': '/resources/template/html/pages/enterprise/service-above-use.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-service-smart-technologies-and-iot', {\n 'parent': 'enterprise',\n 'data': {\n 'navPath': ['/enterprise-security/services']\n },\n 'url': '/enterprise-security/services/smart-technologies-and-iot-security-assessment',\n 'templateUrl': '/resources/template/html/pages/enterprise/service.html',\n 'controller': routeComponentsController,\n 'controllerAs': '$ctrl'\n }).state('enterprise-wiki-section-feedback', {\n 'parent': 'enterprise',\n 'url': '/enterprise-security/wiki-section/feedback',\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu').then(function (response) {\n if (response.data.fields.template !== '2.1') response.data.fields.template = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/enterprise/contact' + response.data.fields.template + '.html');\n });\n }]\n });\n\n $urlRouterProvider\n // ENT Resources\n .when('/enterprise-security/mitre-attack', [\"$state\", function ($state) {\n $state.go('enterprise-mitre-attack', {}, opts);\n }]).when('/enterprise-security/mitre-ics', [\"$state\", function ($state) {\n $state.go('enterprise-mitre-ics', {}, opts);\n }])\n // ENT Contact\n .when('/enterprise-security/cyber-reputation-management-contact', [\"$state\", function ($state) {\n $state.go('cyber-reputation-management-contact', {}, opts);\n }]).when('/enterprise-security/cyber-reputation-management-contact-thank-you', [\"$state\", function ($state) {\n $state.go('cyber-reputation-management-contact-thank-you', {}, opts);\n }]).when('/enterprise-security/cybersecurity-awareness/contact', [\"$state\", function ($state) {\n $state.go('enterprise-product-cybersecurity-awareness-contact', {}, opts);\n }]).when('/gdpr/contact', [\"$state\", function ($state) {\n $state.go('enterprise-gdpr-contact-us', {}, opts);\n }]).when('/enterprise-security/threat-intelligence-subscription', [\"$state\", function ($state) {\n $state.go('enterprise-maltego-license-transforms', {}, opts);\n }])\n // ENT Products\n .when('/enterprise-security/anti-targeted-attack-platform', [\"$state\", function ($state) {\n $state.go('enterprise-product-anti-targeted-attack-platform', {}, opts);\n }]).when('/enterprise-security/private-security-network', [\"$state\", function ($state) {\n $state.go('enterprise-product-private-security-network', {}, opts);\n }]).when('/enterprise-security/embedded-systems', [\"$state\", function ($state) {\n $state.go('enterprise-product-embedded-systems', {}, opts);\n }]).when('/enterprise-security/cybersecurity-awareness', [\"$state\", function ($state) {\n $state.go('enterprise-product-cybersecurity-awareness', {}, opts);\n }]).when('/enterprise-security/cybersecurity-awareness/how-it-works', [\"$state\", function ($state) {\n $state.go('enterprise-product-cybersecurity-how', {}, opts);\n }]).when('/enterprise-security/endpoint-detection-response-edr', [\"$state\", function ($state) {\n $state.go('endpoint-detection-response-edr', {}, opts);\n }]).when('/enterprise-security/endpoint-product', [\"$state\", function ($state) {\n $state.go('enterprise-product-endpoint', {}, opts);\n }]).when('/enterprise-security/cyber-attack-attribution-tool', [\"$state\", function ($state) {\n $state.go('enterprise-product-cyber-attack-attribution-tool', {}, opts);\n }]).when('/enterprise-security/sandbox-malware-analysis', [\"$state\", function ($state) {\n $state.go('enterprise-product-sandbox-malware-analysis', {}, opts);\n }]).when('/enterprise-security/mobile', [\"$state\", function ($state) {\n $state.go('enterprise-product-mobile', {}, opts);\n }]).when('/enterprise-security/virtualization', [\"$state\", function ($state) {\n $state.go('enterprise-product-virtualization', {}, opts);\n }]).when('/enterprise-security/storage-security', [\"$state\", function ($state) {\n $state.go('enterprise-product-storage-security', {}, opts);\n }]).when('/enterprise-security/cyber-reputation-management', [\"$state\", function ($state) {\n $state.go('enterprise-product-cyber-reputation-management', {}, opts);\n }]).when('/enterprise-security/apt-intelligence-reporting/sample', [\"$state\", function ($state) {\n $state.go('enterprise-service-apt-intelligence-reporting-sample', {}, opts);\n }]).when('/enterprise-security/apt-intelligence-reporting/subscribe', [\"$state\", function ($state) {\n $state.go('enterprise-service-apt-intelligence-reporting-subscribe', {}, opts);\n }]).when('/enterprise-security/cybersecurity-awareness/demo', [\"$state\", function ($state) {\n $state.go('enterprise-product-cybersecurity-awareness-demo', {}, opts);\n }]).when('/enterprise-security/cybersecurity-awareness/demo/contact', [\"$state\", function ($state) {\n $state.go('enterprise-product-cybersecurity-awareness-demo-contact', {}, opts);\n }]).when('/enterprise-security/mail-server-security', [\"$state\", function ($state) {\n $state.go('enterprise-product-mail-server', {}, opts);\n }]).when('/enterprise-security/azure-hybrid-cloud-security', [\"$state\", function ($state) {\n $state.go('enterprise-product-azure-hybrid-cloud', {}, opts);\n }]).when('/enterprise-security/cloud-security-product', [\"$state\", function ($state) {\n $state.go('enterprise-product-cloud-security', {}, opts);\n }]).when('/enterprise-security/aws-hybrid-cloud-security', [\"$state\", function ($state) {\n $state.go('enterprise-product-aws', {}, opts);\n }]).when('/enterprise-security/devops-security', [\"$state\", function ($state) {\n $state.go('enterprise-product-devops-security', {}, opts);\n }]).when('/enterprise-security/gcp-hybrid-cloud-security', [\"$state\", function ($state) {\n $state.go('enterprise-product-gcp-hybrid-cloud-security', {}, opts);\n }]).when('/enterprise-security/microsoft-office-365', [\"$state\", function ($state) {\n $state.go('enterprise-product-office-365', {}, opts);\n }]).when('/enterprise-security/malware-sandbox', [\"$state\", function ($state) {\n $state.go('enterprise-product-sandbox', {}, opts);\n }]).when('/enterprise-security/internet-gateway', [\"$state\", function ($state) {\n $state.go('enterprise-product-internet-gateway', {}, opts);\n }]).when('/enterprise-security/internet-gateway/demo', [\"$state\", function ($state) {\n $state.go('enterprise-product-internet-gateway-demo', {}, opts);\n }]).when('/enterprise-security/internet-gateway-free-trial', [\"$state\", function ($state) {\n $state.go('enterprise-product-internet-gateway-free-trial', {}, opts);\n }])\n // ENT Solutions\n .when('/enterprise-security/endpoint', [\"$state\", function ($state) {\n $state.go('enterprise-solution-endpoint', {}, opts);\n }]).when('/enterprise-security/security-operations-center-soc', [\"$state\", function ($state) {\n $state.go('enterprise-security-operations-center-soc', {}, opts);\n }]).when('/enterprise-security/security-operations-center-soc/contact', [\"$state\", function ($state) {\n $state.go('enterprise-security-operations-center-soc-contact', {}, opts);\n }]).when('/enterprise-security/anti-targeted-attacks', [\"$state\", function ($state) {\n $state.go('enterprise-solution-anti-targeted-attacks', {}, opts);\n }]).when('/enterprise-security/threat-management-defense-solution', [\"$state\", function ($state) {\n $state.go('enterprise-solution-threat-management', {}, opts);\n }]).when('/enterprise-security/data-center', [\"$state\", function ($state) {\n $state.go('enterprise-solution-data-center', {}, opts);\n }]).when('/enterprise-security/fraud-prevention', [\"$state\", function ($state) {\n $state.go('enterprise-solution-fraud-prevention', {}, opts);\n }]).when('/enterprise-security/intelligence-services', [\"$state\", function ($state) {\n $state.go('enterprise-solution-intelligence-services', {}, opts);\n }]).when('/enterprise-security/mobile-solution', [\"$state\", function ($state) {\n $state.go('enterprise-solution-mobile', {}, opts);\n }]).when('/enterprise-security/virtualization-solution', [\"$state\", function ($state) {\n $state.go('enterprise-solution-virtualization', {}, opts);\n }]).when('/enterprise-security/cloud-security', [\"$state\", function ($state) {\n $state.go('enterprise-solution-cloud-security', {}, opts);\n }]).when('/enterprise-security/cloud-security/aws', [\"$state\", function ($state) {\n $state.go('enterprise-solution-aws', {}, opts);\n }]).when('/enterprise-security/security-operations-center', [\"$state\", function ($state) {\n $state.go('enterprise-solution-security-operations-center', {}, opts);\n }]).when('/enterprise-security/industrial-cybersecurity', [\"$state\", function ($state) {\n $state.go('enterprise-solution-industrial-cybersecurity', {}, opts);\n }]).when('/enterprise-security/solution-cybersecurity-services', [\"$state\", function ($state) {\n $state.go('enterprise-solution-cybersecurity-services', {}, opts);\n }]).when('/enterprise-security/embedded-security-internet-of-things', [\"$state\", function ($state) {\n $state.go('enterprise-solution-iot', {}, opts);\n }]).when('/enterprise-security/dlt-cybersecurity', [\"$state\", function ($state) {\n $state.go('enterprise-solution-dit', {}, opts);\n }]).when('/enterprise-security/transportation-cybersecurity-internet-of-things', [\"$state\", function ($state) {\n $state.go('enterprise-solution-iot-transportation-security', {}, opts);\n }]).when('/enterprise-security/industrial-solution', [\"$state\", function ($state) {\n $state.go('enterprise-solution-industrial', {}, opts);\n }]).when('/enterprise-security/transportation-security', [\"$state\", function ($state) {\n $state.go('enterprise-solution-transportation-security', {}, opts);\n }]).when('/enterprise-security/blockchain-security', [\"$state\", function ($state) {\n $state.go('enterprise-blockchain-security', {}, opts);\n }]).when('/enterprise-security/crypto-exchange-security', [\"$state\", function ($state) {\n $state.go('enterprise-crypto-exchange-security', {}, opts);\n }]).when('/enterprise-security/ico-sto-security', [\"$state\", function ($state) {\n $state.go('enterprise-ico-sto-security', {}, opts);\n }]).when('/enterprise-security/endpoint/demo', [\"$state\", function ($state) {\n $state.go('enterprise-endpoint-demo', {}, opts);\n }])\n // ENT Industries\n .when('/enterprise-security/government', [\"$state\", function ($state) {\n $state.go('enterprise-industry-government', {}, opts);\n }]).when('/enterprise-security/finance', [\"$state\", function ($state) {\n $state.go('enterprise-industry-finance', {}, opts);\n }]).when('/enterprise-security/healthcare', [\"$state\", function ($state) {\n $state.go('enterprise-industry-healthcare', {}, opts);\n }]).when('/enterprise-security/telecom', [\"$state\", function ($state) {\n $state.go('enterprise-industry-telecom', {}, opts);\n }]).when('/enterprise-security/industrial', [\"$state\", function ($state) {\n $state.go('enterprise-industry-industrial', {}, opts);\n }]).when('/enterprise-security/transportation', [\"$state\", function ($state) {\n $state.go('enterprise-industry-transportation', {}, opts);\n }]).when('/enterprise-security/retail', [\"$state\", function ($state) {\n $state.go('enterprise-industry-retail', {}, opts);\n }]).when('/enterprise-security/national-cybersecurity', [\"$state\", function ($state) {\n $state.go('enterprise-industry-national-cybersecurity', {}, opts);\n }]).when('/enterprise-security/transportation-cybersecurity-it-infrastructure', [\"$state\", function ($state) {\n $state.go('enterprise-industry-transportation-cybersecurity', {}, opts);\n }]).when('/enterprise-security/retail-cybersecurity', [\"$state\", function ($state) {\n $state.go('enterprise-industry-retail-cybersecurity', {}, opts);\n }])\n // ENT Services\n .when('/enterprise-security/ddos-protection', [\"$state\", function ($state) {\n $state.go('enterprise-service-ddos-protection', {}, opts);\n }]).when('/enterprise-security/maintenance-service-agreement', [\"$state\", function ($state) {\n $state.go('enterprise-service-maintenance-service-agreement', {}, opts);\n }]).when('/enterprise-security/apt-intelligence-reporting', [\"$state\", function ($state) {\n $state.go('enterprise-service-apt-intelligence-reporting', {}, opts);\n }]).when('/enterprise-security/security-awareness', [\"$state\", function ($state) {\n $state.go('enterprise-service-security-awareness', {}, opts);\n }]).when('/enterprise-security/adaptive-online-awareness-training', [\"$state\", function ($state) {\n $state.go('enterprise-service-adaptive-online-awareness-training', {}, opts);\n }]).when('/enterprise-security/security-training', [\"$state\", function ($state) {\n $state.go('enterprise-service-security-training', {}, opts);\n }]).when('/enterprise-security/cyber-security-training', [\"$state\", function ($state) {\n $state.go('enterprise-service-security-training', {}, opts);\n }]).when('/enterprise-security/threat-hunting', [\"$state\", function ($state) {\n $state.go('enterprise-service-threat-hunting', {}, opts);\n }]).when('/enterprise-security/targeted-attack-discovery', [\"$state\", function ($state) {\n $state.go('enterprise-service-threat-hunting', {}, opts);\n }]).when('/enterprise-security/premium-support', [\"$state\", function ($state) {\n $state.go('enterprise-service-premium-support', {}, opts);\n }]).when('/enterprise-security/professional-services', [\"$state\", function ($state) {\n $state.go('enterprise-service-professional-services', {}, opts);\n }]).when('/enterprise-security/incident-response', [\"$state\", function ($state) {\n $state.go('enterprise-service-incident-response', {}, opts);\n }]).when('/enterprise-security/threat-intelligence', [\"$state\", function ($state) {\n $state.go('enterprise-service-threat-intelligence', {}, opts);\n }]).when('/enterprise-security/security-assessment', [\"$state\", function ($state) {\n $state.go('enterprise-service-security-assessment', {}, opts);\n }]).when('/enterprise-security/cybersecurity-services', [\"$state\", function ($state) {\n $state.go('enterprise-service-cybersecurity-services', {}, opts);\n }]).when('/enterprise-security/cyber-incident-response-communication', [\"$state\", function ($state) {\n $state.go('enterprise-service-cyber-incident-response-communication', {}, opts);\n }]).when('/enterprise-security/penetration-testing', [\"$state\", function ($state) {\n $state.go('enterprise-service-penetration-testing', {}, opts);\n }]).when('/enterprise-security/application-security', [\"$state\", function ($state) {\n $state.go('enterprise-service-application-security-assessment', {}, opts);\n }]).when('/enterprise-security/payment-system-security', [\"$state\", function ($state) {\n $state.go('enterprise-service-payment-systems-security', {}, opts);\n }]).when('/enterprise-security/ics-security', [\"$state\", function ($state) {\n $state.go('enterprise-service-ics-security', {}, opts);\n }]).when('/enterprise-security/smart-technologies-and-iot', [\"$state\", function ($state) {\n $state.go('enterprise-service-smart-technologies-and-iot', {}, opts);\n }]).when('/enterprise-security/managed-detection-and-response', [\"$state\", function ($state) {\n $state.go('enterprise-service-managed-detection-and-response', {}, opts);\n }])\n // ENT General\n .when('/gdpr', [\"$state\", function ($state) {\n $state.go('enterprise-gdpr', {}, opts);\n }]).when('/gdpr/white-paper', [\"$state\", function ($state) {\n $state.go('enterprise-gdpr-white-paper', {}, opts);\n }]).when('/enterprise-security/edr-piloting', [\"$state\", function ($state) {\n $state.go('enterprise-edr-piloting', {}, opts);\n }]).when('/enterprise-security/edr-download', [\"$state\", function ($state) {\n $state.go('enterprise-edr-download', {}, opts);\n }]).when('/enterprise-security/edr-piloting-thank-you', [\"$state\", function ($state) {\n $state.go('enterprise-edr-piloting-thank-you', {}, opts);\n }]).when('/enterprise-security/wiki-section-home', [\"$state\", function ($state) {\n $state.go('enterprise-wiki-section-home', {}, opts);\n }]).when('/enterprise-security/threat-management-defense-solution/demo', [\"$state\", function ($state) {\n $state.go('enterprise-threat-mgmt-defence-solution-demo', {}, opts);\n }]).when('/enterprise-security/threat-management-defense-solution/demo/thank-you', [\"$state\", function ($state) {\n $state.go('enterprise-threat-mgmt-defence-solution-demo-thank-you', {}, opts);\n }]).when('/enterprise-security/fraud-prevention/demo', [\"$state\", function ($state) {\n $state.go('enterprise-fraud-prevention-demo', {}, opts);\n }]);\n }]);\n\n function routeComponentsController(ENV, $state) {\n var stateUrl = $state.current.url.replace(/enterprise-security/, 'enterprise-security-3.0');\n this.entPath = '/content/' + ENV.locale + '/enterprise-security-3.0/';\n this.path = '/content/' + ENV.locale + stateUrl + '/';\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$stateProvider\", \"$urlRouterProvider\", function ($stateProvider, $urlRouterProvider) {\n $stateProvider.state('404', {\n 'parent': 'error',\n 'url': '/errorpage/404',\n 'data': {\n 'title': '404'\n },\n 'templateUrl': '/resources/template/html/pages/site-error/404.html'\n }).state('500', {\n 'parent': 'error',\n 'url': '/errorpage/500',\n 'data': {\n 'title': '500'\n },\n 'templateUrl': '/resources/template/html/pages/site-error/500.html'\n });\n $urlRouterProvider.when('/404', [\"$state\", function ($state) {\n $state.go('404', {}, { 'location': false, 'inherit': true });\n }]).when('/500', [\"$state\", function ($state) {\n $state.go('500', {}, { 'location': false, 'inherit': true });\n }]);\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$stateProvider\", \"$urlRouterProvider\", function ($stateProvider, $urlRouterProvider) {\n var opts = { 'location': false, 'inherit': true };\n $stateProvider.state('privacy', {\n 'parent': 'about-section',\n 'url': '/site-general/privacy',\n 'data': {\n 'title': 'Privacy'\n },\n 'templateUrl': '/resources/template/html/pages/site-general/privacy.html'\n }).state('terms', {\n 'parent': 'about-section',\n 'url': '/site-general/terms',\n 'data': {\n 'title': 'Terms'\n },\n 'templateUrl': '/resources/template/html/pages/site-general/terms.html'\n }).state('legal', {\n 'parent': 'about-section',\n 'url': '/site-general/legal',\n 'data': {\n 'title': 'Legal'\n },\n 'templateUrl': '/resources/template/html/pages/site-general/legal.html'\n }).state('legal-license', {\n 'parent': 'about-section',\n 'url': '/site-general/legal/license',\n 'templateUrl': '/resources/template/html/pages/smb/license.html',\n 'data': {\n 'title': 'License'\n }\n }).state('third-party-tracking', {\n 'parent': 'about-section',\n 'url': '/site-general/third-party-tracking',\n 'data': {\n 'title': 'Third Party Tracking'\n },\n 'templateUrl': '/resources/template/html/pages/site-general/third-party-tracking.html'\n }).state('end-user-license-agreement', {\n 'parent': 'about-section',\n 'url': '/site-general/end-user-license-agreement',\n 'data': {\n 'title': 'End User License Agreement'\n },\n 'templateUrl': '/resources/template/html/pages/site-general/end-user-license-agreement.html',\n 'controller': [\"dl2Connector\", function controller(dl2Connector) {\n dl2Connector.loadDl2WC();\n }]\n }).state('unsubscribe_success', {\n 'parent': 'about-section',\n 'url': '/site-general/unsubscribe_success',\n 'data': {\n 'title': 'Unsubscribe Success'\n },\n 'templateUrl': '/resources/template/html/pages/site-general/unsubscribe.html'\n }).state('unsubscribe_error', {\n 'parent': 'about-section',\n 'url': '/site-general/unsubscribe_error',\n 'data': {\n 'title': 'Unsubscribe Error'\n },\n 'templateUrl': '/resources/template/html/pages/site-general/unsubscribe.html'\n }).state('submit-review', {\n 'parent': 'master',\n 'url': '/products/rating/submit-review',\n 'data': {\n 'title': 'Submit review',\n 'css': ['/resources/template/css/b2c.min.css']\n },\n 'templateUrl': '/resources/template/html/pages/site-general/submit-review.html'\n }).state('sitemap-html', {\n 'parent': 'master-header',\n 'url': '/site-general/sitemap-html',\n 'data': {\n 'title': 'Sitemap'\n },\n 'templateUrl': '/resources/template/html/pages/site-general/sitemap.html'\n }).state('eula', {\n 'parent': 'master',\n 'url': '/site-general/b2b-eula',\n 'data': {\n 'title': 'End User License Agreement - SMB and Enterprise Business | Kaspersky',\n 'css': ['/resources/template/css/b2c.min.css']\n },\n 'templateUrl': '/resources/template/html/pages/site-general/eula.html',\n 'controllerAs': '$ctrl'\n });\n $urlRouterProvider.when('/privacy', [\"$state\", function ($state) {\n $state.go('privacy', {}, opts);\n }]).when('/terms-of-use', [\"$state\", function ($state) {\n $state.go('terms', {}, opts);\n }]).when('/legal/license', [\"$state\", function ($state) {\n $state.go('legal-license', {}, opts);\n }]).when('/legal', [\"$state\", function ($state) {\n $state.go('legal', {}, opts);\n }]).when('/third-party-tracking', [\"$state\", function ($state) {\n $state.go('third-party-tracking', {}, opts);\n }]).when('/end-user-license-agreement', [\"$state\", function ($state) {\n $state.go('end-user-license-agreement', {}, opts);\n }]).when('/unsubscribe_success', [\"$state\", function ($state) {\n $state.go('unsubscribe_success', {}, opts);\n }]).when('/unsubscribe_error', [\"$state\", function ($state) {\n $state.go('unsubscribe_error', {}, opts);\n }]).when('/sitemap', [\"$state\", function ($state) {\n $state.go('sitemap-html', {}, opts);\n }]).when('/business/eula', [\"$state\", function ($state) {\n $state.go('eula', {}, opts);\n }]);\n }]);\n})();\n'use strict';\n\nangular.module('kappGlobal').config([\"$stateProvider\", \"appHelperServiceProvider\", function ($stateProvider, appHelperServiceProvider) {\n var $body = $('body');\n var appHelperService = appHelperServiceProvider.$get();\n\n function handleStickyHeaderOnViewportChange($elementWindow) {\n var scroll = $elementWindow.scrollTop();\n var $siteHeader = $('site-header');\n var siteHeaderElement = $siteHeader.get(0);\n var totalHeight = +$siteHeader.attr('site-top-height') || 0;\n\n $body.toggleClass('sticky-header-on', !!(totalHeight && scroll > totalHeight && appHelperService.isVisibleDOMElement(siteHeaderElement)));\n\n $siteHeader = null;\n }\n\n $stateProvider.state('homepage', {\n //parent: \"master\",\n 'data': {\n 'title': 'Homepage'\n },\n 'url': '/',\n 'controller': [\"$window\", \"$scope\", function controller($window, $scope) {\n var $elementWindow = $($window);\n\n $elementWindow.on('scroll.homepage', _.wrap($elementWindow, handleStickyHeaderOnViewportChange));\n $elementWindow.on('resize.homepage', _.wrap($elementWindow, handleStickyHeaderOnViewportChange));\n\n $scope.$on('$destroy', function () {\n $elementWindow.off('scroll.homepage');\n $elementWindow.off('resize.homepage');\n\n $body.removeClass('sticky-header-on');\n });\n }],\n 'templateUrl': '/resources/template/html/pages/homepage/index.html'\n });\n}]);\n'use strict';\n\nangular.module('kappGlobal').config([\"$stateProvider\", \"$urlRouterProvider\", function ($stateProvider, $urlRouterProvider) {\n lrcSerialRouteController.$inject = [\"$stateParams\", \"lrcService\", \"sessionStorageService\", \"$state\", \"$timeout\", \"$window\", \"$location\", \"directiveData\", \"ENV\", \"windowHelperService\"];\n serialStateHandler.$inject = [\"$state\", \"$match\", \"$location\", \"windowHelperService\"];\n var opts = { 'location': false, 'inherit': true };\n $stateProvider.state('lrc-b2c', {\n 'parent': 'home-security-section',\n 'data': {\n 'navPath': ['/renewal-center/home']\n },\n 'params': {\n 'lostDaysDisclaimerFullText': null,\n 'kfaDisclaimer': null,\n 'canonical': '/renewal-center/home',\n 'serialNotValid': null,\n 'serial': null\n },\n 'url': '/lrc/b2c-hp',\n 'templateUrl': '/resources/template/html/pages/lrc/home-b2c.html',\n 'controller': [\"$rootScope\", \"$stateParams\", \"sessionStorageService\", \"directiveData\", \"$window\", \"windowHelperService\", \"$location\", function controller($rootScope, $stateParams, sessionStorageService, directiveData, $window, windowHelperService, $location) {\n var _this = this;\n\n this.translations = {};\n directiveData.getLocal('general-translations').then(function (response) {\n _this.translations = response.data.fields;\n });\n // set canonical url\n if ($location.path() === '/lrc/ksos') {\n $stateParams.canonical = '/renewal-center/vsb';\n }\n $rootScope.canonical = windowHelperService.getCanonicalUrl();\n this.lostDaysDisclaimerFullText = $stateParams.lostDaysDisclaimerFullText; // this parameter is used when we come from lrc-serial state\n this.kfaDisclaimer = $stateParams.kfaDisclaimer;\n if (this.lostDaysDisclaimerFullText) {\n this.lostDaysDisclaimerFullText = this.lostDaysDisclaimerFullText.replace(/xx/, sessionStorageService.get('lrc-daysLeft'));\n if ($location.path() === '/renewal-center/home' || $location.path() === '/renewal-center/vsb') {\n windowHelperService.updateQueryStringParameters({ 'serial': $stateParams.serial, 'result': 'fallback' }, '^serial$');\n }\n }\n }],\n 'controllerAs': '$ctrl'\n }).state('lrc-b2b', {\n 'parent': 'vsb',\n 'data': {\n 'navPath': ['/renewal-center/vsb']\n },\n 'params': {\n 'lostDaysDisclaimerFullText': null,\n 'serialNotValid': null\n },\n 'url': '/lrc/b2b-hp',\n 'templateUrl': '/resources/template/html/pages/lrc/home-b2b.html',\n 'controller': [\"directiveData\", \"$stateParams\", \"sessionStorageService\", \"$location\", \"windowHelperService\", function controller(directiveData, $stateParams, sessionStorageService, $location, windowHelperService) {\n var _this2 = this;\n\n this.translations = {};\n directiveData.getLocal('general-translations').then(function (response) {\n _this2.translations = response.data.fields;\n });\n this.lostDaysDisclaimerFullText = $stateParams.lostDaysDisclaimerFullText; // this parameter is used when we come from lrc-serial state\n this.kfaDisclaimer = $stateParams.kfaDisclaimer;\n if (this.lostDaysDisclaimerFullText) {\n this.lostDaysDisclaimerFullText = this.lostDaysDisclaimerFullText.replace(/xx/, sessionStorageService.get('lrc-daysLeft'));\n if ($location.path() === '/renewal-center/home' || $location.path() === '/renewal-center/vsb') {\n windowHelperService.updateQueryStringParameters({ 'serial': null, 'result': 'fallback' }, '^serial$');\n }\n }\n }],\n 'controllerAs': '$ctrl'\n }).state('lrc-verdict', {\n 'parent': 'lrc-verdict-parent',\n 'url': '/lrc/:verdict?result',\n 'reloadOnSearch': false,\n 'data': {\n 'spage': 'lrc-verdict'\n },\n 'params': {\n 'verdictData': null,\n 'loc': null,\n 'fromSerial': false\n },\n //loc variable sending requests to en-ca depending on query parameter\n 'template': '',\n 'controller': [\"$stateParams\", \"$rootScope\", \"$state\", \"$location\", \"windowHelperService\", function controller($stateParams, $rootScope, $state, $location, windowHelperService) {\n if (!$stateParams.verdictData) $state.go('lrc-b2c', {}, opts);\n this.verdict = $stateParams.verdict;\n this.verdictData = $stateParams.verdictData;\n //loc variable sending requests to en-ca depending on query parameter\n this.loc = $stateParams.loc;\n if ($location.path() === '/renewal-center/home' || $location.path() === '/renewal-center/vsb') {\n windowHelperService.updateQueryStringParameters({ 'result': 'verdict' }, '^serial$');\n }\n }],\n 'controllerAs': '$ctrl'\n })\n /**\n * ==============================================================================\n * DO NOT FORGET, THERE ARE 3 SERIAL PARAMS \"serial\", \"Serial\" and \"SERIAL\"!!!!\n * ==============================================================================\n */\n .state('lrc-serial', {\n 'parent': 'lrc-verdict-parent',\n 'url': '/lrc?serial&Serial&SERIAL&edu&kpc-license-ownership&uni&kscup&target-tier&act-serial&lic-id&act-pid&act-pv&act-local&act-lic-type&act-lic-status&act-lic-lifespan&act-lic-daystillexpiration&act-lic-dse&act-lic-dayssinceinstall&ppcs-id&act-item&ipcountry&country&tracking-id&new-price',\n 'params': {\n 'serialData': null\n },\n 'controller': lrcSerialRouteController,\n 'controllerAs': '$ctrl'\n }).state('lrc-b2c-att', {\n 'parent': 'home-security-section',\n 'data': {\n 'navPath': ['/renewal-center/home']\n },\n 'url': '/lrc/b2c-hp-att',\n 'templateUrl': '/resources/template/html/pages/lrc/home-b2c.html',\n 'controller': [\"$location\", \"$state\", \"lrcService\", function controller($location, $state, lrcService) {\n var _this3 = this;\n\n this.sendSerial = function () {\n lrcService.searchLicense(_this3.serial, {}).then(function (response) {\n _this3.license = response;\n _this3.license.data.verdictSerial = _this3.serial;\n $state.go('lrc-verdict', {\n 'verdict': _this3.license.data.verdict && _this3.license.data.verdict.toLowerCase(),\n 'verdictData': _this3.license.data\n }, opts);\n }, function () {\n $state.go('lrc-b2c', {}, opts);\n });\n };\n }],\n 'resolve': {\n 'reload': [\"$rootScope\", \"$window\", \"$q\", function reload($rootScope, $window, $q) {\n return $q(function (resolve) {\n if (!$rootScope.directStateVisit) {\n $window.location.reload();\n } else {\n resolve();\n }\n });\n }]\n },\n 'controllerAs': '$ctrl'\n }).state('lrc-b2b-att', {\n 'parent': 'vsb',\n 'data': {\n 'navPath': ['/renewal-center/vsb']\n },\n 'url': '/lrc/b2b-hp-att',\n 'templateUrl': '/resources/template/html/pages/lrc/home-b2b.html',\n 'controller': [\"$location\", \"$state\", \"lrcService\", function controller($location, $state, lrcService) {\n var _this4 = this;\n\n this.sendSerial = function () {\n lrcService.searchLicense(_this4.serial, {}).then(function (response) {\n _this4.license = response;\n _this4.license.data.verdictSerial = _this4.serial;\n $state.go('lrc-verdict', {\n 'verdict': _this4.license.data.verdict && _this4.license.data.verdict.toLowerCase(),\n 'verdictData': _this4.license.data\n }, opts);\n }, function () {\n $state.go('lrc-b2b', {}, opts);\n });\n };\n }],\n 'resolve': {\n 'reload': [\"$rootScope\", \"$window\", \"$q\", function reload($rootScope, $window, $q) {\n return $q(function (resolve) {\n if (!$rootScope.directStateVisit) {\n $window.location.reload();\n } else {\n resolve();\n }\n });\n }]\n },\n 'controllerAs': '$ctrl'\n }).state('lrc-fallback', {\n 'parent': 'home-security-section',\n 'data': {\n 'navPath': ['/renewal-center/home']\n },\n 'url': '/lrc/b2c-hp',\n 'templateUrl': '/resources/template/html/pages/lrc/home-b2c.html',\n 'resolve': {\n 'reload': [\"$rootScope\", \"$window\", \"$q\", function reload($rootScope, $window, $q) {\n return $q(function (resolve) {\n if (!$rootScope.directStateVisit) {\n $window.location.reload();\n } else {\n resolve();\n }\n });\n }]\n }\n });\n\n $urlRouterProvider\n // LRC HPs\n .when('/renewal-center/home?serial&Serial&SERIAL&kpc-license-ownership&edu&uni&kscup&target-tier&act-serial&lic-id&act-pid&act-pv&act-local&act-lic-type&act-lic-status&act-lic-lifespan&act-lic-daystillexpiration&act-lic-dse&act-lic-dayssinceinstall&ppcs-id&act-item&ipcountry&country&tracking-id&result&new-price', serialStateHandler).when('/renewal-center/vsb?serial&Serial&SERIAL&kpc-license-ownership&edu&uni&kscup&target-tier&act-serial&lic-id&act-pid&act-pv&act-local&act-lic-type&act-lic-status&act-lic-lifespan&act-lic-daystillexpiration&act-lic-dse&act-lic-dayssinceinstall&ppcs-id&act-item&ipcountry&country&tracking-id&result&new-price', serialStateHandler).when('/renewal-center/smb?serial&Serial&SERIAL', [\"$state\", \"$match\", function ($state, $match) {\n $state.go('lrc-serial', { 'serialData': $match }, opts);\n }]).when('/trial-center/home', [\"$state\", function ($state) {\n $state.go('lrc-b2c-att', {}, opts);\n }]).when('/trial-center/vsb', [\"$state\", function ($state) {\n $state.go('lrc-b2b-att', {}, opts);\n }]).when('/trial-center/smb', [\"$state\", function ($state) {\n $state.go('lrc-b2b-att', {}, opts);\n }]).when('/renewal-center/fb', [\"$state\", function ($state) {\n $state.go('lrc-fallback', {}, opts);\n }]);\n\n /**\n * Handles addition of ?result=verdict|fallback parameter for tracking purposes.\n * Updates url only.\n * Has to know whether it was routed from serial component or serial state and verdict result\n * @param $state\n * @param $match\n * @param $location\n */\n function serialStateHandler($state, $match, $location, windowHelperService) {\n var serialValue = $match.serial || $match.Serial || $match.SERIAL;\n\n // Case of upperCase serial\n if ($match.Serial || $match.SERIAL) {\n windowHelperService.updateQueryStringParameters({}, '^serial$');\n return;\n }\n\n // Case of verdict page, keep the link as is keeping all parameters\n if ($state.params.fromSerial && $match.result) {\n return;\n // Case of homepage with result=verdict and no serial, remove result param\n } else if (!serialValue && $match.result === 'verdict') {\n windowHelperService.updateQueryStringParameters({ 'result': null }, '^serial$');\n return;\n // Case visiting homepage with result=fallback and NO disclaimer supplied, remove result param\n } else if (!$state.params.lostDaysDisclaimerFullText && $match.result === 'fallback') {\n windowHelperService.updateQueryStringParameters({ 'result': null }, '^serial$');\n return;\n // Case visiting homepage with result=fallback and WITH disclaimer, keep fallback and serial (all params)\n } else if ($state.params.lostDaysDisclaimerFullText && $match.result === 'fallback') {\n return;\n // Case of invalid serial, remove serial and result\n } else if (serialValue && $state.params.serialNotValid) {\n windowHelperService.updateQueryStringParameters({ 'serial': null, 'result': null }, '^serial$');\n return;\n }\n\n if (serialValue) {\n $state.go('lrc-serial', { 'serialData': $match }, opts);\n } else {\n if ($location.path() === '/renewal-center/vsb') {\n $state.go('lrc-b2b', $state.params, opts);\n } else {\n $state.go('lrc-b2c', $state.params, opts);\n }\n }\n }\n\n function lrcSerialRouteController($stateParams, lrcService, sessionStorageService, $state, $timeout, $window, $location, directiveData, ENV, windowHelperService) {\n var _this5 = this;\n\n this.translations = {};\n var serial = $stateParams.serial || $stateParams.SERIAL || $stateParams.Serial;\n if (ENV.locale === 'en-us' && !serial) serial = $stateParams['act-serial'] || $stateParams['lic-id'];\n if ($state.params.serialData !== null) {\n serial = $state.params.serialData.serial || $state.params.serialData.Serial || $state.params.serialData.SERIAL;\n $stateParams = $state.params.serialData;\n }\n\n var queryArr = [];\n var queryObj = {};\n var USParams = ['kpc-license-ownership', 'edu', 'uni', 'kscup', 'target-tier', 'act-pid', 'act-pv', 'act-local', 'act-lic-type', 'act-lic-status', 'act-lic-lifespan', 'act-lic-daystillexpiration', 'act-lic-dse', 'act-lic-dayssinceinstall', 'ppcs-id', 'act-item', 'ipcountry', 'country', 'new-price'];\n\n var genericParams = ['kpc-license-ownership', 'edu', 'uni', 'kscup', 'target-tier', 'new-price'];\n this.params = ENV.locale === 'en-us' ? USParams : genericParams;\n _.forEach(this.params, function (param) {\n if (angular.isDefined($stateParams[param])) queryArr.push({\n 'Key': param,\n 'Value': $stateParams[param]\n });\n });\n\n _.forEach(this.params, function (param) {\n if (angular.isDefined($stateParams[param])) {\n queryObj[param] = $stateParams[param];\n }\n });\n\n function replaceAll(lostDaysString, find, replace) {\n return lostDaysString.replace(find, replace);\n }\n //loc variable sending requests to en-ca depending on query parameter\n if ($stateParams['country'] === 'ca') $stateParams.loc = 'en-ca';\n directiveData.getLocal('general-translations').then(function (response) {\n _this5.translations = response.data.fields;\n }).finally(function () {\n return lrcService.searchLicense(serial, queryArr, queryObj).then(function (response) {\n _this5.license = response;\n _this5.license.data.verdictSerial = serial;\n _this5.license.data.kpc = $stateParams['kpc-license-ownership'];\n _this5.license.data.edu = $stateParams.edu;\n _this5.license.data.trackingId = $stateParams['tracking-id'];\n var verdictString = _this5.license.data['lost_days'] && _this5.license.data['lost_days']['lost_days_fallback_verdict'] || _this5.license.data.verdict;\n\n sessionStorageService.set('lrc-daysLeft', _this5.license.data.days_left);\n\n if (verdictString.match(/LOSTDAYS_FALLBACK/)) {\n _this5.lostDaysDisclaimer = {\n 'partner': verdictString.match(/LOSTDAYS_FALLBACK_(.*)/)[1],\n 'link': _this5.license.data['lost_days'] && _this5.license.data['lost_days']['provider_url'] || _this5.license.data.provider_url\n };\n _this5.lostDaysDisclaimerFullText = replaceAll(_this5.translations[_this5.lostDaysDisclaimer.partner], /href=\"#\"/, 'href=\"' + _this5.lostDaysDisclaimer.link + '\"');\n $state.go('lrc-b2c', { 'serial': serial, 'lostDaysDisclaimerFullText': _this5.lostDaysDisclaimerFullText }, opts);\n } else if (verdictString.match(/KSC_FAM_UNKNOWN/)) {\n _this5.lostDaysDisclaimerFullText = _this5.translations[_this5.license.data.verdict];\n $state.go('lrc-b2c', { 'serial': serial, 'lostDaysDisclaimerFullText': _this5.lostDaysDisclaimerFullText }, opts);\n } else if (verdictString.match(/CHANNEL_FALLBACK/)) {\n _this5.lostDaysDisclaimerFullText = _this5.translations['CHANNEL_FALLBACK'];\n $state.go('lrc-b2c', { 'serial': serial, 'lostDaysDisclaimerFullText': _this5.lostDaysDisclaimerFullText }, opts);\n } else if (verdictString.match(/NOT_DR_CA_FALLBACK/)) {\n _this5.lostDaysDisclaimerFullText = _this5.translations['NOT_DR_CA_FALLBACK'];\n $state.go('lrc-b2c', { 'serial': serial, 'lostDaysDisclaimerFullText': _this5.lostDaysDisclaimerFullText }, opts);\n\n // temporary redirect for CA users with the above verdict per the PM\n $timeout(function () {\n return $window.location.href = 'https://www.kaspersky.ca/lrc?serial=' + _this5.license.data.verdictSerial;\n }, 2000);\n } else if (verdictString.match(/EARLY_RENEWAL_FALLBACK/)) {\n var expDateTime = new Date(_this5.license.data['expiration_datetime']).getTime(),\n renewalTime = new Date(expDateTime - 7776000000),\n renewalDate = renewalTime.toLocaleDateString(ENV.locale),\n today = new Date().getTime(),\n daysLeftDiff = Math.floor((expDateTime - today) / (1000 * 60 * 60 * 24)),\n daysLeft = daysLeftDiff > 0 ? daysLeftDiff : 0;\n _this5.lostDaysDisclaimerFullText = _this5.translations['EARLY_RENEWAL_FALLBACK'].replace('((days_left))', daysLeft).replace('((renewal_period_start_date))', renewalDate);\n $state.go('lrc-b2c', { 'serial': serial, 'lostDaysDisclaimerFullText': _this5.lostDaysDisclaimerFullText }, opts);\n } else {\n $state.go('lrc-verdict', {\n 'verdict': verdictString && ENV.locale !== 'en-us' ? verdictString.toLowerCase() : _this5.license.data.verdict,\n 'verdictData': _this5.license.data,\n //loc variable sending requests to en-ca depending on query parameter\n 'loc': $stateParams.loc,\n 'fromSerial': true\n }, opts);\n }\n }, function () {\n if ($location.path() === '/renewal-center/vsb') {\n $state.go('lrc-b2b', { 'serialNotValid': true }, opts);\n windowHelperService.updateQueryStringParameters({ 'serial': null, 'result': null }, '^serial$');\n // $location.search(angular.extend($location.search(), {'serial': null, 'result': null}));\n } else if ($location.path() === '/renewal-center/home') {\n $state.go('lrc-b2c', { 'serialNotValid': true }, opts);\n windowHelperService.updateQueryStringParameters({ 'serial': null, 'result': null }, '^serial$');\n // $location.search(angular.extend($location.search(), {'serial': null, 'result': null}));\n } else {\n $state.go('lrc-b2c', {}, opts);\n }\n });\n });\n }\n}]);\n'use strict';\n\nangular.module('kappGlobal').config([\"$stateProvider\", function ($stateProvider) {\n $stateProvider.state('marketo', {\n 'parent': 'home-security-section',\n 'url': '/marketo',\n 'templateUrl': '/resources/template/html/pages/marketo/index.html'\n });\n}]);\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$stateProvider\", \"$urlRouterProvider\", function ($stateProvider, $urlRouterProvider) {\n var opts = { 'location': false, 'inherit': true };\n\n $stateProvider.state('partners-vas', {\n 'parent': 'partners',\n 'url': '/partners/vas',\n 'data': {\n 'navPath': ['/partners', 'https://partners.kaspersky.com/', 'https://www.kasperskypartners.com/']\n },\n 'templateUrl': '/resources/template/html/pages/partners/partners-vas.html'\n }).state('partners-vas-contact', {\n 'parent': 'partners',\n 'url': '/partners/vas/contact',\n 'data': {\n 'navPath': ['/partners', 'https://partners.kaspersky.com/', 'https://www.kasperskypartners.com/']\n },\n 'templateUrl': '/resources/template/html/pages/partners/partners-vas-contact.html'\n }).state('partners-home', {\n 'parent': 'partners',\n 'url': '/partners',\n 'data': {\n 'title': 'B2C Partners',\n 'navPath': ['/partners', 'https://partners.kaspersky.com/', 'https://www.kasperskypartners.com/']\n },\n 'templateUrl': '/resources/template/html/pages/partners/home.html'\n }).state('partners-affiliate-partner-rules', {\n 'parent': 'partners',\n 'url': '/partners/affiliate/affiliate-partner-rules',\n 'data': {\n 'navPath': ['/partners/affiliate'],\n 'title': 'Affiliate Partner Rules'\n },\n 'templateUrl': '/resources/template/html/pages/partners/affiliate-partnership.html'\n }).state('partners-affiliate-partnership', {\n 'parent': 'partners',\n 'url': '/partners/affiliate',\n 'data': {\n 'navPath': ['/partners/affiliate'],\n 'title': 'Partners Affiliate Partnership'\n },\n 'templateUrl': '/resources/template/html/pages/partners/affiliate-partnership.html'\n }).state('partners-technology-partnership', {\n 'parent': 'partners',\n 'url': '/partners/technology',\n 'data': {\n 'navPath': ['/partners/technology'],\n 'title': 'Partners Technology Partnership'\n },\n 'templateUrl': '/resources/template/html/pages/partners/technology-partnership.html'\n }).state('partners-technology-contact', {\n 'parent': 'partners',\n 'url': '/partners/technology/contact',\n 'data': {\n 'navPath': ['/partners/technology'],\n 'title': 'Partners Technology Contact'\n },\n 'templateUrl': '/resources/template/html/pages/partners/technology-contact.html'\n }).state('partners-technology-solutions', {\n 'parent': 'partners',\n 'url': '/partners/technology/solutions',\n 'data': {\n 'navPath': ['/partners/technology'],\n 'title': 'Partners Technology Solutions'\n },\n 'templateUrl': '/resources/template/html/pages/partners/technology-solutions.html'\n }).state('partners-technology-solution', {\n 'parent': 'partners',\n 'url': '/partners/technology/solutions/:jsonName',\n 'data': {\n 'navPath': ['/partners/technology'],\n 'title': 'Partners Technology Solutions'\n },\n 'templateUrl': '/resources/template/html/pages/partners/technology-solution.html'\n }).state('partners-technology-benefits', {\n 'parent': 'partners',\n 'url': '/partners/technology/benefits',\n 'data': {\n 'navPath': ['/partners/technology'],\n 'title': 'Partners Technology Benefits'\n },\n 'templateUrl': '/resources/template/html/pages/partners/technology-benefits.html'\n }).state('partners-whitelist-program', {\n 'parent': 'partners',\n 'url': '/partners/whitelist-program',\n 'data': {\n 'navPath': ['/partners/whitelist-program'],\n 'title': 'Partners White List Program'\n },\n 'templateUrl': '/resources/template/html/pages/partners/white-list-program.html'\n }).state('partners-allowlist-program', {\n 'parent': 'partners',\n 'url': '/partners/allowlist-program',\n 'data': {\n 'navPath': ['/partners/allowlist-program'],\n 'title': 'Partners Allowlist Program'\n },\n 'templateUrl': '/resources/template/html/pages/partners/white-list-program.html'\n }).state('managed-service-provider', {\n 'parent': 'partners',\n 'url': '/partners/managed-service-provider',\n 'data': {\n 'title': 'Managed Service Provider',\n 'navPath': ['/partners']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('partners', '/managed-service-provider/meta').then(function (response) {\n var res = response.data.fields.template;\n if (res !== '2.0') res = '';\n return $templateFactory.fromUrl('/resources/template/html/pages/partners/managed-service-provider' + res + '.html');\n });\n }]\n }).state('partners-contact-thank-you', {\n 'parent': 'partners',\n 'url': '/partners/technology/contact/thank-you',\n 'data': {\n 'title': 'Partners Contact Thank You',\n 'navPath': ['/partners']\n },\n 'templateUrl': '/resources/template/html/pages/partners/contact-thank-you.html'\n }).state('partners-distribution', {\n 'parent': 'partners',\n 'url': '/partners/distribution',\n 'data': {\n 'title': 'Partners Distribution',\n 'navPath': ['/partners']\n },\n 'templateUrl': '/resources/template/html/pages/partners/distribution.html'\n }).state('partners-special-offers', {\n 'parent': 'partners',\n 'url': '/partners/special-offers',\n 'templateUrl': '/resources/template/html/pages/home-security/special-offers.html',\n 'controllerAs': '$ctrl',\n 'data': {\n 'navPath': ['/partners/special-offers']\n }\n }).state('partners-special-offer', {\n 'parent': 'partners',\n 'url': '/partners/special-offers/:offerName',\n 'templateUrl': '/resources/template/html/pages/home-security/special-offer-page.html',\n 'controller': [\"$stateParams\", \"directiveData\", function controller($stateParams, directiveData) {\n var _this = this;\n\n this.offerName = $stateParams.offerName;\n directiveData.getByUrl(this.offerName).then(function (response) {\n _this.offerData = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl',\n 'data': {\n 'navPath': ['/partners/special-offers']\n }\n }).state('partners-training-centers', {\n 'parent': 'partners',\n 'url': '/partners/training-centers',\n 'templateUrl': '/resources/template/html/pages/smb/training-centers.html',\n 'data': {\n 'navPath': ['/partners/affiliate'],\n 'title': 'Training Centers'\n }\n }).state('partners-program', {\n 'parent': 'partners',\n 'url': '/partners/partnerprogram',\n 'templateUrl': '/resources/template/html/pages/partners/partner-program.html',\n 'data': {\n 'navPath': ['/partners/partnerprogram'],\n 'title': 'Partners Program'\n }\n }).state('partners-authorized-training-centers', {\n 'parent': 'partners',\n 'url': '/partners/authorizedtrainingcenters',\n 'templateUrl': '/resources/template/html/pages/partners/home.html',\n 'data': {\n 'navPath': ['/partners/affiliate'],\n 'title': 'Authorized Training Centers'\n }\n });\n\n $urlRouterProvider.when('/partners/contact/thank-you', [\"$state\", function ($state) {\n $state.go('partners-contact-thank-you', {}, opts);\n }]).when('/antivirus-sdk', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'antivirus-sdk' }, opts);\n }]).when('/scan-engine', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'scan-engine' }, opts);\n }]).when('/vuln-feed', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'vuln-feed' }, opts);\n }]).when('/iot-threat-data-feed', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'iot-threat-data-feed' }, opts);\n }]).when('/safestream2', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'safestream' }, opts);\n }]).when('/antispam-software-development', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'antispam-software-development' }, opts);\n }]).when('/whitelisting', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'whitelisting' }, opts);\n }]).when('/file-reputation', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'file-reputation' }, opts);\n }]).when('/mobile-security-sdk', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'mobile-security-sdk' }, opts);\n }]).when('/web-filter', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'web-filter' }, opts);\n }]).when('/phishing-url-data-feed', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'phishing-url-data-feed' }, opts);\n }]).when('/antivirus-for-uefi', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'antivirus-for-uefi' }, opts);\n }]).when('/botnet-monitoring-and-data-feeds', [\"$state\", function ($state) {\n $state.go('partners-technology-solution', { 'jsonName': 'botnet-monitoring-and-data-feeds' }, opts);\n }]).when('/partners/partnerprogram', [\"$state\", function ($state) {\n $state.go('partners-program', { 'jsonName': 'partner-program' }, opts);\n }]).when('/partners/authorizedtrainingcenters', [\"$state\", function ($state) {\n $state.go('partners-authorized-training-centers', { 'jsonName': 'authorized-training-centers' }, opts);\n }]);\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$stateProvider\", function ($stateProvider) {\n $stateProvider.state('rss-feeds', {\n 'parent': 'about-section',\n 'url': '/rss-feeds',\n 'templateUrl': '/resources/template/html/pages/rss/rss-feeds.html'\n }).state('rss-feeds.details', {\n 'parent': 'about-section',\n 'url': '/rss-feeds/:path',\n 'templateUrl': '/resources/template/html/pages/rss/rss-feeds-details.html'\n });\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$stateProvider\", \"$urlRouterProvider\", function ($stateProvider, $urlRouterProvider) {\n var opts = { 'location': false, 'inherit': true };\n\n $stateProvider.state('smb-home', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security',\n 'data': {\n 'title': 'SMB Home',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('small-to-medium-business-security', 'meta').then(function (response) {\n var res = response.data.fields;\n if (res.template && res.template === '2.0') return $templateFactory.fromUrl('/resources/template/html/pages/smb/home' + res.template + '.html');\n return $templateFactory.fromUrl('resources/template/html/pages/smb/home.html');\n });\n }]\n }).state('smb-services', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/services',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/services'],\n 'title': 'SMB Services'\n },\n 'templateUrl': '/resources/template/html/pages/smb/services.html',\n 'controller': [\"ENV\", function controller(ENV) {\n this.locale = ENV.locale;\n }],\n 'controllerAs': '$ctrl'\n }).state('smb-eula', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/eula',\n 'data': {\n 'navPath': ['/small-to-medium-business-security'],\n 'title': 'SMB EULA'\n },\n 'templateUrl': '/resources/template/html/pages/smb/eula.html',\n 'controllerAs': '$ctrl'\n }).state('smb-services-msa', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/services/msa',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/services'],\n 'title': 'SMB Services'\n },\n 'templateUrl': '/resources/template/html/pages/smb/services-msa.html'\n }).state('smb-services-computer-incident-investigation', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/services/computer-incident-investigation',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/services'],\n 'title': 'SMB Services'\n },\n 'templateUrl': '/resources/template/html/pages/smb/services-computer-incident-investigation.html'\n }).state('smb-contact-investigation', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/services/contact',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/services'],\n 'title': 'SMB Contact Us'\n },\n 'templateUrl': '/resources/template/html/pages/smb/contact-us.html'\n }).state('smb-targeted-security-solutions', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/targeted-solutions',\n 'data': {\n 'title': 'SMB Targeted Security Solutions',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/smb/targeted-security-solutions.html'\n }).state('smb-targeted-security-solution', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/targeted-solutions/:jsonName',\n 'data': {\n 'title': 'SMB Targeted Security Solution',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", \"$stateParams\", \"appHelperService\", function templateProvider(templateVersion, $templateFactory, $stateParams, appHelperService) {\n return templateVersion.getVer('small-to-medium-business-security/targeted-solutions/' + $stateParams.jsonName, 'page-header').then(function (response) {\n if ($stateParams.jsonName === 'internet-gateway' && appHelperService.isTrue(response.data.fields.hasNewTemplateForInternetGateway)) {\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/internet-gateway.html');\n } else if (!response.data.fields || response.data.fields.headerType !== 'SMB Targeted Solution Buyblock') {\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/targeted-security-solution.html');\n }\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/targeted-security-solution-buyblock.html');\n });\n }]\n }).state('smb-applications', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/applications',\n 'data': {\n 'title': 'SMB Security Applications',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/smb/applications.html'\n }).state('smb-application', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/applications/:jsonName',\n 'data': {\n 'title': 'SMB Security Application Product',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/smb/application.html'\n }).state('smb-downloads', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Downloads'\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('small-to-medium-business-security/downloads', 'page-header').then(function (response) {\n if (response.data.fields.headerType !== 'SMB Downloads') return $templateFactory.fromUrl('/resources/template/html/pages/smb/downloads.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/downloads-2.html');\n });\n }]\n }).state('smb-downloads-trial', {\n 'parent': 'smb',\n 'url': '/smb-downloads-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Downloads Trial'\n },\n 'templateUrl': '/resources/template/html/pages/smb/downloads-trial-form.html'\n }).state('smb-support', {\n 'parent': 'smb',\n 'url': '/smb-support',\n 'templateUrl': '/resources/template/html/pages/smb/support.html'\n }).state('smb-trial-download-success', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/thank-you',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Trial Download Success'\n },\n 'templateUrl': '/resources/template/html/pages/smb/trial-download-success.html'\n }).state('smb-contact-us', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/contact-us',\n 'data': {\n 'navPath': ['/about/contact'],\n 'title': 'SMB Contact Us'\n },\n 'templateUrl': '/resources/template/html/pages/smb/contact-us.html'\n }).state('smb-contact-us-thank-you', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/contact-us/thank-you',\n 'data': {\n 'navPath': ['/about/contact'],\n 'title': 'SMB Contact Us Thank You'\n },\n 'templateUrl': '/resources/template/html/pages/smb/trial-download-success.html'\n }).state('smb-how-to-buy', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/how-to-buy',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/how-to-buy'],\n 'title': 'SMB How To Buy'\n },\n 'templateUrl': '/resources/template/html/pages/smb/contact-us.html'\n }).state('smb-ddos-contact-us', { // only for US\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/targeted-solutions/ddos-protection/contact-us',\n 'templateUrl': '/resources/template/html/pages/smb/contact-us.html'\n }).state('smb-product-select', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/endpoint-select',\n 'data': {\n 'title': 'SMB Product Select',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('small-to-medium-business-security/endpoint-select', 'page-header').then(function (response) {\n if (response.data.fields.headerType === 'SMB Product Buyblock Redesign') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-redesign.html');\n if (response.data.fields.headerType !== 'SMB Product Buyblock') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-buyblock.html');\n });\n }]\n }).state('smb-product-advanced', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/endpoint-advanced',\n 'data': {\n 'title': 'SMB Product Advanced',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('small-to-medium-business-security/endpoint-advanced', 'page-header').then(function (response) {\n if (response.data.fields.headerType === 'SMB Product Buyblock Redesign') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-redesign.html');\n if (response.data.fields.headerType !== 'SMB Product Buyblock') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-buyblock.html');\n });\n }]\n }).state('smb-product-total', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/total',\n 'data': {\n 'title': 'SMB Product Total',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('small-to-medium-business-security/total', 'page-header').then(function (response) {\n if (response.data.fields.headerType === 'SMB Product Buyblock Redesign') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-redesign.html');\n if (response.data.fields.headerType !== 'SMB Product Buyblock') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-buyblock.html');\n });\n }]\n }).state('smb-product-universal', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/endpoint-universal',\n 'data': {\n 'title': 'SMB Product Total',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('small-to-medium-business-security/endpoint-universal', 'page-header').then(function (response) {\n if (response.data.fields.headerType === 'SMB Product Buyblock Redesign') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-redesign.html');\n if (response.data.fields.headerType !== 'SMB Product Buyblock') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-buyblock.html');\n });\n }]\n }).state('smb-product-virtualization-hybrid-cloud', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/virtualization-hybrid-cloud',\n 'data': {\n 'title': 'SMB Product Virtualization Hybrid Cloud',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('small-to-medium-business-security/virtualization-hybrid-cloud', 'page-header').then(function (response) {\n if (response.data.fields.headerType === 'SMB Product Buyblock Redesign') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-redesign.html');\n if (response.data.fields.headerType !== 'SMB Product Buyblock') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-buyblock.html');\n });\n }]\n }).state('smb-product-kasap', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/security-awareness-platform',\n 'data': {\n 'title': 'SMB Product Security Awareness',\n 'navPath': ['/small-to-medium-business-security/services']\n },\n 'templateUrl': '/resources/template/html/pages/smb/product.html'\n }).state('smb-product-kasap-contact', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/security-awareness-platform/contact',\n 'data': {\n 'title': 'SMB Product Security Awareness',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/smb/contact-us.html'\n }).state('smb-product-kasap-thank-you', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/security-awareness-platform/contact/thank-you',\n 'data': {\n 'title': 'SMB Product Security Awareness',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/smb/trial-download-success.html'\n }).state('smb-product-cloud', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/cloud',\n 'data': {\n 'title': 'SMB Product Cloud',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('small-to-medium-business-security/cloud', 'page-header', 'meta').then(function (response) {\n var res = response.data.fields;\n if (res.template && res.template === '2.0') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product' + res.template + '.html');\n if (response.data.fields.headerType !== 'SMB Product Buyblock') return $templateFactory.fromUrl('/resources/template/html/pages/smb/product.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/product-buyblock.html');\n });\n }]\n }).state('smb-product-core', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/endpoint-core',\n 'data': {\n 'title': 'SMB Product Core',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/smb/product.html'\n }).state('smb-product-365', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/office-365',\n 'data': {\n 'title': 'SMB Product Office 365',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/smb/product-buyblock-365.html'\n }).state('smb-product-hybrid-cloud', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/virtualization-hybrid-cloud',\n 'data': {\n 'title': 'SMB Product Virtualization Hybrid Cloud',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/smb/product-buyblock-365.html'\n }).state('smb-free-trials-core', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/endpoint-core-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Endpoint Core'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-select', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/endpoint-select-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Endpoint Select'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-advanced', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/endpoint-advanced-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Endpoint Advanced'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-total', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/total-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Endpoint Total'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-universal', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/universal-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Endpoint Universal'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-mail-server', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/mail-server-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Mail Server'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-file-server', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/file-server-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial File Server'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-mobile', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/mobile-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Mobile'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-internet-gateway', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/internet-gateway-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Internet Gateway'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-virtualization', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/virtualization-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Virtualization'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-virtualization-hybrid-cloud', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/virtualization-hybrid-cloud-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Virtualization Hybrid Cloud'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-hybrid-cloud-security', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/hybrid-cloud-security-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Hybrid Cloud Security'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-collaboration', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/collaboration-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Collaboration'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-systems-management', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/systems-management-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Systems Management'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-free-trials-storage', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/storage-free-trial',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Free Trial Storage'\n },\n 'templateUrl': '/resources/template/html/pages/smb/download-trial-form.html'\n }).state('smb-product-updates-core', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/endpoint-core',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Product Updates Endpoint Core'\n },\n 'templateUrl': '/resources/template/html/pages/smb/product-updates-pack.html'\n }).state('smb-product-updates-select', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/endpoint-select',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Product Updates Endpoint Select'\n },\n 'templateUrl': '/resources/template/html/pages/smb/product-updates-pack.html'\n }).state('smb-product-updates-advanced', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/endpoint-advanced',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Product Updates Endpoint Advanced'\n },\n 'templateUrl': '/resources/template/html/pages/smb/product-updates-pack.html'\n }).state('smb-product-updates-universal', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/endpoint-universal',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Product Updates Endpoint Universal'\n },\n 'templateUrl': '/resources/template/html/pages/smb/product-updates-pack.html'\n }).state('smb-product-updates-total', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/total',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Product Updates Endpoint Total'\n },\n 'templateUrl': '/resources/template/html/pages/smb/product-updates-pack.html'\n }).state('smb-windows-server-security', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/security-for-windows-server',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Windows Server Security'\n },\n 'templateUrl': '/resources/template/html/pages/smb/product-updates.html'\n }).state('smb-product-updates', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/downloads/:jsonName',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'SMB Product Updates'\n },\n 'templateUrl': '/resources/template/html/pages/smb/product-updates.html',\n 'controller': [\"productData\", \"$stateParams\", function controller(productData, $stateParams) {\n var _this = this;\n\n productData.getsmb($stateParams.jsonName).then(function (response) {\n _this.product = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl'\n }).state('smb-resources-center', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/resources',\n 'templateUrl': '/resources/template/html/pages/content-repo/b2b/resources-center-smb.html',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/resources'],\n 'title': 'Resources'\n }\n }).state('smb-resources-category', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/resources/:category?rel&sel',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/resources'],\n 'title': 'Resources category'\n },\n 'reloadOnSearch': false,\n 'templateProvider': [\"ENV\", \"$templateFactory\", \"$stateParams\", function templateProvider(ENV, $templateFactory, $stateParams) {\n var unwantedCategories = ['industry-awards-and-recognition', 'certificates'];\n if (ENV.locale === 'ru-ru' && unwantedCategories.indexOf($stateParams.category) > -1) {\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/' + $stateParams.category + '.html');\n } else {\n return $templateFactory.fromUrl('/resources/template/html/pages/content-repo/b2b/resources-category-smb.html');\n }\n }]\n }).state('smb-resources-category.details', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/resources/:category/:path',\n 'templateUrl': '/resources/template/html/pages/content-repo/b2b/resources-post-smb.html',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/resources'],\n 'title': 'Resources category'\n }\n }).state('smb-payment-and-shipping', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/payment-and-shipping',\n 'templateUrl': '/resources/template/html/pages/smb/payment-options.html',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/resources'],\n 'title': 'Payment and Shipping'\n }\n }).state('smb-order-online', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/order-online',\n 'templateUrl': '/resources/template/html/pages/smb/payment-options.html',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/downloads'],\n 'title': 'Order Online'\n }\n })\n // State below is currently Russia specific\n .state('smb-registry', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/registry',\n 'data': {\n 'title': 'SMB registry',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/site-general/end-user-license-agreement-ru.html'\n })\n // State below is currently Russia specific\n .state('smb-certified-version', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/certified-version',\n 'data': {\n 'title': 'Certified Version',\n 'navPath': ['/small-to-medium-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/site-general/privacy.html'\n }).state('smb-special-offers', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/special-offers',\n 'templateUrl': '/resources/template/html/pages/home-security/special-offers.html',\n 'controllerAs': '$ctrl',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/special-offers']\n }\n }).state('smb-special-offer', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/special-offers/:offerName',\n 'templateUrl': '/resources/template/html/pages/home-security/special-offer-page.html',\n 'controller': [\"$stateParams\", \"directiveData\", function controller($stateParams, directiveData) {\n var _this2 = this;\n\n this.offerName = $stateParams.offerName;\n directiveData.getByUrl(this.offerName).then(function (response) {\n _this2.offerData = response.data.fields;\n });\n }],\n 'controllerAs': '$ctrl',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/special-offers']\n }\n }).state('smb-cyber-security-awareness-training', {\n 'parent': 'smb',\n 'url': '/small-to-medium-business-security/cyber-security-awareness-training',\n 'templateUrl': '/resources/template/html/pages/smb/cyber-security-awareness-training.html',\n 'controllerAs': '$ctrl',\n 'data': {\n 'navPath': ['/small-to-medium-business-security/special-offers']\n }\n });\n\n $urlRouterProvider.when('/small-to-medium-business-security/hybrid-cloud-security', [\"$state\", function ($state) {\n $state.go('smb-product-virtualization-hybrid-cloud');\n }])\n // SMB Targeted Solutions\n .when('/small-to-medium-business-security/mail-server', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'mail-server' }, opts);\n }]).when('/small-to-medium-business-security/file-server', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'file-server' }, opts);\n }]).when('/small-to-medium-business-security/mobile', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'mobile' }, opts);\n }]).when('/small-to-medium-business-security/internet-gateway', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'internet-gateway' }, opts);\n }]).when('/small-to-medium-business-security/virtualization', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'virtualization' }, opts);\n }]).when('/small-to-medium-business-security/collaboration', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'collaboration' }, opts);\n }]).when('/small-to-medium-business-security/systems-management', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'systems-management' }, opts);\n }]).when('/small-to-medium-business-security/storage', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'storage' }, opts);\n }]).when('/small-to-medium-business-security/fraud-prevention', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'fraud-prevention' }, opts);\n }]).when('/small-to-medium-business-security/ddos-protection', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'ddos-protection' }, opts);\n }]).when('/small-to-medium-business-security/anti-spam', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'anti-spam' }, opts);\n }]).when('/small-to-medium-business-security/xsp-security', [\"$state\", function ($state) {\n $state.go('smb-targeted-security-solution', { 'jsonName': 'xsp-security' }, opts);\n }])\n // SMB Security Applications\n .when('/small-to-medium-business-security/windows-workstation', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'endpoint-windows' }, opts);\n }]).when('/small-to-medium-business-security/endpoint-linux', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'endpoint-linux' }, opts);\n }]).when('/small-to-medium-business-security/endpoint-mac', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'endpoint-mac' }, opts);\n }]).when('/small-to-medium-business-security/security-center', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'security-center' }, opts);\n }]).when('/small-to-medium-business-security/endpoint-windows', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'endpoint-windows' }, opts);\n }]).when('/small-to-medium-business-security/linux-file-server', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'linux-file-server' }, opts);\n }]).when('/small-to-medium-business-security/windows-server-security', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'windows-server-security' }, opts);\n }]).when('/small-to-medium-business-security/mobile-device', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'mobile-device' }, opts);\n }]).when('/small-to-medium-business-security/linux-mail-server', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'linux-mail-server' }, opts);\n }]).when('/small-to-medium-business-security/mail-security-appliance', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'mail-security-appliance' }, opts);\n }]).when('/small-to-medium-business-security/microsoft-exchange-server', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'microsoft-exchange-server' }, opts);\n }]).when('/small-to-medium-business-security/lotus-notes-domino', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'lotus-notes-domino' }, opts);\n }]).when('/small-to-medium-business-security/proxy-server', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'proxy-server' }, opts);\n }]).when('/small-to-medium-business-security/proxy-web-traffic', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'proxy-server' }, opts);\n }]).when('/small-to-medium-business-security/microsoft-isa-server', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'microsoft-isa-server' }, opts);\n }]).when('/small-to-medium-business-security/microsoft-sharepoint', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'microsoft-sharepoint' }, opts);\n }]).when('/small-to-medium-business-security/virtualization-agentless', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'virtualization-agentless' }, opts);\n }]).when('/small-to-medium-business-security/virtualization-light-agent', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'virtualization-light-agent' }, opts);\n }]).when('/small-to-medium-business-security/azure-cloud-security', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'azure-cloud-security' }, opts);\n }]).when('/small-to-medium-business-security/aws-cloud-security', [\"$state\", function ($state) {\n $state.go('smb-application', { 'jsonName': 'aws-cloud-security' }, opts);\n }]).when('/small-to-medium-business-security/ddos-protection/contact-us', [\"$state\", function ($state) {\n // only for US\n $state.go('smb-ddos-contact-us', {}, opts);\n }]).when('/small-to-medium-business-security/microsoft-office-365-security', [\"$state\", function ($state) {\n $state.go('smb-product-365', {}, opts);\n }]).when('/small-to-medium-business-security/contact-investigation', [\"$state\", function ($state) {\n $state.go('smb-contact-investigation', {}, opts);\n }]).when('/small-to-medium-business-security/security-awareness-platform/how-to-buy', [\"$state\", function ($state) {\n $state.go('smb-product-kasap-contact', {}, opts);\n }]).when('/small-to-medium-business-security/security-awareness-platform/thank-you', [\"$state\", function ($state) {\n $state.go('smb-product-kasap-thank-you', {}, opts);\n }]).when('/small-to-medium-business-security/end-user-license-agreement', [\"$state\", function ($state) {\n $state.go('smb-eula', {}, opts);\n }]);\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$stateProvider\", function ($stateProvider) {\n $stateProvider.state('vsb-home', {\n 'parent': 'vsb',\n 'url': '/small-business-security',\n 'data': {\n 'title': 'VSB Home',\n 'navPath': ['/small-business-security']\n },\n 'templateProvider': [\"templateVersion\", \"$templateFactory\", function templateProvider(templateVersion, $templateFactory) {\n return templateVersion.getVer('small-business-security', 'meta').then(function (response) {\n var res = response.data.fields;\n if (res.template && res.template === '2.0') return $templateFactory.fromUrl('/resources/template/html/pages/vsb/home' + res.template + '.html');\n return $templateFactory.fromUrl('/resources/template/html/pages/vsb/home.html');\n });\n }]\n }).state('vsb-product', {\n 'parent': 'vsb',\n 'url': '/small-business-security/small-office-security',\n 'data': {\n 'title': 'VSB Product',\n 'navPath': ['/small-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/vsb/product.html'\n }).state('vsb-support', {\n 'parent': 'vsb',\n 'url': '/small-business-security/support',\n 'data': {\n 'title': 'VSB Support'\n },\n 'templateUrl': '/resources/template/html/pages/vsb/support.html'\n }).state('vsb-downloads', {\n 'parent': 'vsb',\n 'url': '/small-business-security/downloads',\n 'data': {\n 'navPath': ['/small-business-security/downloads'],\n 'title': 'VSB Downloads'\n },\n 'templateUrl': '/resources/template/html/pages/vsb/downloads.html'\n }).state('vsb-download', {\n 'parent': 'vsb',\n 'url': '/small-business-security/downloads/small-office-security',\n 'data': {\n 'navPath': ['/small-business-security/downloads'],\n 'title': 'VSB Download'\n },\n 'templateUrl': '/resources/template/html/pages/vsb/download-updates.html'\n }).state('kart-download', {\n 'parent': 'vsb',\n 'url': '/small-business-security/downloads/kart?Localization&localization&ApplicationID&applicationid&Platform&platform&leadid&leadId&releaseType&releasetype&rebrandingCode&rebrandingcode',\n 'data': {\n 'navPath': ['/small-business-security/downloads'],\n 'title': 'KART Download'\n },\n 'templateUrl': '/resources/template/html/pages/vsb/download-pdc-proxy.html',\n 'controller': [\"$window\", \"pdcDownload\", function controller($window, pdcDownload) {\n this.pdcDownload = pdcDownload;\n if (pdcDownload) {\n var packageUrl = pdcDownload.response.customizationUrl;\n $window.open(packageUrl, '_self');\n return true;\n }\n }],\n 'controllerAs': '$ctrl',\n 'resolve': {\n 'pdcDownload': [\"errorService\", \"$log\", \"pdcProxyService\", \"$sanitize\", \"$stateParams\", function pdcDownload(errorService, $log, pdcProxyService, $sanitize, $stateParams) {\n var localization = $stateParams.Localization || $stateParams.localization;\n var appId = $stateParams.ApplicationID || $stateParams.applicationid;\n var platform = $stateParams.Platform || $stateParams.platform;\n var leadId = $stateParams.leadid || $stateParams.leadId;\n var releaseType = $stateParams.releaseType || $stateParams.releasetype;\n var rebrandingCode = $stateParams.rebrandingCode || $stateParams.rebrandingcode;\n\n //Required prameters\n var requestParams = {\n 'Localization': [$sanitize(localization)],\n 'ApplicationID': $sanitize(appId),\n 'Platform': $sanitize(platform),\n 'leadid': $sanitize(leadId)\n };\n\n //Optional parameters\n if (releaseType) requestParams.releaseType = $sanitize(releaseType);\n if (rebrandingCode) requestParams.rebrandingCode = $sanitize(rebrandingCode);\n\n return pdcProxyService.getPackage(requestParams).then(function (res) {\n return {\n 'response': res.data,\n 'request': requestParams\n };\n }).catch(function (rejection) {\n $log.log('Incorrect parameters');\n errorService.warn(rejection);\n return false;\n });\n }]\n }\n }).state('vsb-download-success', {\n 'parent': 'vsb',\n 'url': '/small-business-security/downloads/thank-you/small-office-security-free-trial',\n 'data': {\n 'navPath': ['/small-business-security/downloads'],\n 'title': 'VSB Download Success'\n },\n 'templateUrl': '/resources/template/html/pages/vsb/download-trial-success.html'\n }).state('vsb-free-trial', {\n 'parent': 'vsb',\n 'url': '/small-business-security/downloads/small-office-security-free-trial',\n 'data': {\n 'navPath': ['/small-business-security/downloads'],\n 'title': 'VSB Free Trial'\n },\n 'templateUrl': '/resources/template/html/pages/vsb/download-trial.html'\n }).state('vsb-contact-us', {\n 'parent': 'vsb',\n 'url': '/small-business-security/contact-us',\n 'data': {\n 'title': 'VSB Contact Us'\n },\n 'templateUrl': '/resources/template/html/pages/smb/contact-us.html'\n }).state('vsb-contact-us-thank-you', {\n 'parent': 'vsb',\n 'url': '/small-business-security/contact-us/thank-you',\n 'data': {\n 'title': 'VSB Contact Us Thank You'\n },\n 'templateUrl': '/resources/template/html/pages/vsb/trial-download-success.html'\n }).state('resources-center', {\n 'parent': 'vsb',\n 'url': '/small-business-security/resources',\n 'templateUrl': '/resources/template/html/pages/content-repo/b2b/resources-center-vsb.html',\n 'data': {\n 'navPath': ['/small-business-security/resources'],\n 'title': 'Resources'\n },\n 'controller': [\"imageManagerService\", function controller(imageManagerService) {\n imageManagerService.activateRandomImagesCache();\n }]\n }).state('resources-category', {\n 'parent': 'vsb',\n 'url': '/small-business-security/resources/:category?rel&sel',\n 'data': {\n 'navPath': ['/small-business-security/resources'],\n 'title': 'Resources category'\n },\n 'reloadOnSearch': false,\n 'controller': [\"imageManagerService\", function controller(imageManagerService) {\n imageManagerService.activateRandomImagesCache();\n }],\n 'templateProvider': [\"ENV\", \"$templateFactory\", \"$stateParams\", function templateProvider(ENV, $templateFactory, $stateParams) {\n var unwantedCategories = ['industry-awards-and-recognition', 'certificates'];\n if (ENV.locale === 'ru-ru' && unwantedCategories.indexOf($stateParams.category) > -1) {\n return $templateFactory.fromUrl('/resources/template/html/pages/smb/' + $stateParams.category + '.html');\n } else {\n return $templateFactory.fromUrl('/resources/template/html/pages/content-repo/b2b/resources-category-vsb.html');\n }\n }]\n }).state('resources-category.details', {\n 'parent': 'vsb',\n 'url': '/small-business-security/resources/:category/:path',\n 'templateUrl': '/resources/template/html/pages/content-repo/b2b/resources-post-vsb.html',\n 'data': {\n 'navPath': ['/small-business-security/resources'],\n 'title': 'Resources category'\n }\n }).state('vsb-lrc-closed', {\n 'parent': 'vsb',\n 'url': '/vsb-lrc-closed',\n 'data': {\n 'title': 'VSB LRC Closed',\n 'navPath': ['/small-business-security']\n },\n 'templateUrl': '/resources/template/html/pages/vsb/LRC-closed.html'\n });\n }]);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.contentRepoCatConfig', []).constant('CATEGORYCONFIG', {\n 'global': ['01::preemptive-safety', '01::customers', '01::general-cybersecurity', '02::threats', '02::insights', '02::industrial-cybersecurity', '03::infographics', '03::products', '03::finance', '04::definitions', '04::technology', '04::privacy', '05::industry-awards-and-recognition', '06::cyber-insurance', '07::digital-skills', '08::anastasiya-kazakova', '09::evgeny-grigorenko', '09::webinars', '10::oleg-abdurashitov', '11::rob-langford', '12::formations']\n }).constant('CERTIFICATESCONFIG', {\n 'ru': ['01::Госорганы', '02::Тестовые лаборатории', '03::Другие вендоры']\n }).constant('AWARDSCONFIG', {\n 'global': ['01::awards'],\n 'ru': ['01::Награды']\n }).constant('SUBCATCONFIG', {\n 'global': ['01::Business News', '02::Comparative Tests', '03::Corporate News', '04::Events Calendar', '05::Information', '06::Press Releases', '07::Product news', '08::Spam News', '09::Updates News', '10::Virus News', '11::Why Kaspersky- Comparative tests'],\n 'es': ['01::Noticias empresariales', '02::Pruebas Comparativas', '03::Noticias corporativas', '04::Calendario de eventos', '05::Información', '06::Comunicados de prensa', '07::Noticias sobre productos', '08::Noticias sobre spam', '09::Noticias sobre actualizaciones', '10::Noticias sobre virus', '11::Por qué Kaspersky - Pruebas comparativas', '12::Análisis y comentarios', '13::Riks News'],\n 'fr': ['00::Récompenses et Certifications', '01::Actualités du secteur', '02::Tests Comparatifs', '03::Actualités sur les entreprises', '04::Calendrier des événements', '05::Informations', '06::Communiqués de presse', '07::Actualités Produits', '08::Actualités Spam', '09::Actualités sur les mises à jour', '10::Actualités Virus', '11::Pourquoi Kaspersky - Tests comparatifs'],\n 'it': ['01::Business News', '02::Test comparativi', '03::Corporate News', '04::Calendario eventi', '05::Informazione', '06::Comunicati stampa', '07::News di prodotto', '08::News sullo spam', '09::Notizie sugli aggiornamenti', '10::Notizie sui virus', '11::Perché scegliere Kaspersky - Test comparativi', '12::News Italia', '13::Riks News', '14::Topic del mese', '15::Le nostre classifiche', '16::Eventi Italia', '17::Ferrari Lounge', '18::Malware-pr', '19::Notizie Business', '20::Notizie Prodotti', '21::Notizie Virus', '22::Riconoscimenti e Certificazioni'],\n 'de': ['00::Allgemeine Informationen', '01::Business-Nachrichten', '02::Vergleichstests', '03::Unternehmensnachrichten', '04::Ereignisse', '04::Veranstaltungskalender', '05::Informationen', '06::Pressemitteilungen', '07::Produktinfos und -neuigkeiten', '08::Spamnachrichten', '09::Updatenachrichten', '10::Virennachrichten', '11::Warum Kaspersky – Vergleichstests', '12::Riks News'],\n 'nl': ['01::Zakelijk Nieuws', '02::Vergelijkende Tests', '03::Corporate Nieuws', '04::Evenementenkalender', '05::Information', '06::Persberichten', '07::Productnieuws', '08::Spamnieuws', '09::Updates News', '10::Virusnieuws', '11::Waarom Kaspersky - Vergelijkende Tests', '12::Riks News'],\n 'tr': ['01::İş Haberleri', '02::Karşılaştırmalı Testler', '03::Kurumsal Haberler', '04::Etkinlik Takvimi', '05::Bilgi', '06::Haber Bültenleri', '07::Ürün Haberleri', '08::Spam Haberleri', '09::Güncelleme Haberleri', '10::Virüs Haberleri', '11::Neden Kaspersky - Karşılaştırmalı Testler', '12::Riks News'],\n 'ae': ['01::أخبار الأعمال', '02::اختبارات مقارنة', '03::خبار الشركة', '04::تقويم الأحداث', '05::معلومات', '06::النشرات الصحفية', '07::أخبار المنتجات', '08::أخبار البريد الإلكتروني العشوائي', '09::أخبار التحديثات', '10::أخبار الفيروسات', '11::لماذا Kaspersky هي الأفضل - اختبارات مقارنة'],\n 'br': ['01::Novidades dos negócios', '02::Testes comparativos', '03::Novidades corporativas', '04::Calendário de eventos', '05::Informações', '06::Comunicado à imprensa', '07::Novidades sobre produtos', '08::Novidades sobre spam', '09::Novidades sobre atualizações', '10::Novidades sobre vírus', '11::Por que a Kaspersky? - Testes corporativos', '12::Comunicados de Imprensa', '13::Últimas Notícias', '14::Kaspersky Blog'],\n 'se': ['01::Affärsnyheter', '02::Jämförande tester', '03::Företagsnyheter', '04::Evenemangskalender', '05::Information', '06::Pressmeddelanden', '07::Produktnyheter', '08::Skräppostnyheter', '09::Uppdateringsnyheter', '10::Virusnyheter', '11::Varför Kaspersky? – Jämförande tester', '12::Riks News'],\n 'dk': ['01::ERHVERVSNYHEDER', '02::SAMMENLIGNENDE TESTS', '03::Erhvervsnyheder', '04::Kalender', '05::Information', '06::Pressemeddelelser', '07::Produktnyheder', '08::Spamnyheder', '09::Opdatér Nyheder', '10::Virusnyheder', '11::Hvorfor Kaspersky – sammenlignende tests', '12::Riks News'],\n 'no': ['01::Bedriftsnyheter', '02::Sammenlignende tester', '03::Konsernnyheter', '04::Hendelseskalender', '05::Informasjon', '06::Pressemeldinger', '07::Produktnyheter', '08::Søppelpostnyheter', '09::Oppdateringsnyheter', '10::Virusnyheter', '11::Hvorfor velge Kaspersky – sammenlignende tester', '12::Riks News'],\n 'cn': ['01::商务新闻', '02::评比测试', '03::企业新闻', '04::活动日程表', '05::信息', '06::新闻稿', '07::产品新闻', '08::垃圾邮件动态', '09::产品更新', '10::病毒播报', '11::为何选择卡巴斯基——评比测试'],\n 'mx': ['01::Blog de Kaspersky', '01::Noticias comerciales', '02::Pruebas comparativas', '03::Noticias corporativas', '04::Calendario de eventos', '05::Información', '06::Comunicados de prensa', '07::Noticias sobre productos', '08::Noticias sobre spam', '09::Noticias sobre actualizaciones', '10::Noticias sobre virus', '11::¿Por qué elegir Kaspersky ? Pruebas comparativas', '12::Ultimas Noticias'],\n 'ru': ['01::Деловые новости', '02::Независимые тесты',\n //'03::Новости о киберугрозах',\n //'04::Календарь событий',\n //'05::Информация',\n '06::Пресс-релизы', '07::Новости о продуктах',\n //'08::Новости о спам-рассылках',\n //'09::Новости об обновлениях',\n //'10::Новости о вирусах',\n //'11::Награды',\n //'12::История версий',\n '13::Новости об угрозах', '14::Реализованные проекты', '15::Новости Казахстана'],\n 'jp': ['07::製品ニュース', '10::ウイルスニュース', '08::スパムニュース', '02::比較テスト', '01::ビジネスニュース', '04::イベントカレンダー', '12::お知らせ']\n });\n})();\n'use strict';\n\n/*eslint angular/window-service: 0*/\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config(['$compileProvider', '$httpProvider', '$sanitizeProvider', configureModule]);\n\n function configureModule($compileProvider, $httpProvider, $sanitizeProvider) {\n if (!navigator.userAgent.match(/PhantomJS/i) && isProd()) {\n $compileProvider.commentDirectivesEnabled(false);\n $compileProvider.cssClassDirectivesEnabled(false);\n $compileProvider.debugInfoEnabled(false);\n }\n /*\n Gives performance boost when handling concurrent requests, by delaying\n and aggregating digest cycles, thus reducing the number of calculations\n */\n $httpProvider.useApplyAsync(true);\n\n $sanitizeProvider.addValidAttrs(['data-omniture-cta-name']);\n\n function isProd() {\n var isDebug = location.search.split('debug=')[1];\n\n return !window.location.host.match(/ngdev|ngtst|ngtest|stg|localhost|127.0.0.1/) && !isDebug || isDebug === 'prod';\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.branch', []).constant('BRANCH', {\n 'name': 'Detached: 404e6b40eed144fd48fe2485573a096dabc9f172',\n 'sha': '404e6b40eed144fd48fe2485573a096dabc9f172',\n 'date': '2022-02-03T10:20:12.891Z'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.config', ['kappGlobal.env']).constant('SETUP', {\n 'showAR': 'true',\n 'isChecked': 'true',\n 'country': 'Australia',\n 'trialButtonsInsideLrc': 'default',\n 'lrc2Enabled': true\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.currencyConfig', []).constant('CURRENCY', {\n 'globalCurrencies': [constructCurrencyObject('USD', 'U.S. Dollar', '', 'en-au', 'Global', '$', null, '$1', null, null, null, 'global/en/usd', 'en-au'), constructCurrencyObject('USD', 'Caribbean Dollar', 'AI', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'AG', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'AW', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'BS', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'BB', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'VG', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'BQ', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'KY', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'CW', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'DM', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'GD', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'HT', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'JM', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'MS', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'KN', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'TT', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'TC', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'VI', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'LC', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'CU', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'DO', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'PR', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'GP', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'MQ', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Caribbean Dollar', 'SX', 'en-cu', 'Caribbean', '$', null, '$1', null, null, null, 'caribbean/en/usd', 'en-cu'), constructCurrencyObject('USD', 'Israeli Dollar', 'IL', 'he-il', 'Israel', '$', null, '$1', null, null, null, 'il/en/usd', 'he-il'), constructCurrencyObject('EUR', 'Euro', 'FI', 'en-fi', 'Finland', '€', null, '1 $', ' ', ',', null, 'global/en/eur', 'en-fi'), constructCurrencyObject('IDR', 'Indonesia Rupiah', 'ID', 'en-id', 'Indonesia', 'Rp', 'Asia', '$1', '.', ',', null, 'sea/en/idr', 'en-id'),\n // constructCurrencyObject('KHR', 'Cambodia Riel', 'KH', 'en-kh', 'Cambodia', '៛', 'Asia', '1$', '.', ','),\n constructCurrencyObject('MYR', 'Malaysia Ringgit', 'MY', 'en-my', 'Malaysia', 'RM', 'Asia', '$1', null, null, null, 'sea/en/myr', 'en-my'), constructCurrencyObject('PHP', 'Philippines Peso', 'PH', 'en-ph', 'Philippine', '₱', 'Asia', '$1', null, null, null, 'sea/en/php', 'en-ph'), constructCurrencyObject('SGD', 'Singapore Dollar', 'SG', 'en-sg', 'Singapore', 'S$', 'Asia', '$1', null, null, null, 'sea/en/sgd', 'en-sg'), constructCurrencyObject('EUR', 'Euro', 'EE', 'en-ee', 'Estonia', '€', null, '1 $', null, null, null, 'baltic/en/eur', 'en-ee'), constructCurrencyObject('EUR', 'Euro', 'LT', 'en-ee', 'Lithuania', '€', null, '1 $', null, null, null, 'baltic/en/eur', 'en-ee'), constructCurrencyObject('EUR', 'Euro', 'LV', 'en-ee', 'Latvia', '€', null, '1 $', null, null, null, 'baltic/en/eur', 'en-ee')\n // constructCurrencyObject('AUD', 'Australian Dollar', 'AU', 'en-au', 'Australia'),\n // constructCurrencyObject('NZD', 'New Zealand Dollar', 'NZ', 'en-nz', 'New Zealand')\n ],\n 'auCurrencies': [constructCurrencyObject('AUD', 'Australian Dollar', '', 'en-au', 'Australia', '$', null, '$1', null, null, null, 'anz/en/aud', 'en-au'), constructCurrencyObject('NZD', 'New Zealand Dollar', 'NZ', 'en-nz', 'New Zealand', '$', null, '$1', null, null, null, 'anz/en/nzd', 'en-nz')],\n 'aeCurrencies': [constructCurrencyObject('USD', 'U.S. Dollar', '', 'en-us', 'Middle East', '$', null, '$1', null, '.', null, 'middleeast/en/usd', 'en-us'), constructCurrencyObject('AED', 'UAE dirham', 'AE', 'en-ae', 'United Arab Emirates', 'AED', null, '$ 1', null, '.', null, 'middleeast/en/aed', 'en-ae'), constructCurrencyObject('QAR', 'Qatari riyal', 'QA', 'en-qa', 'Qatar', 'QAR', null, '$ 1', '.', '.', null, 'middleeast/en/qar', 'en-qar'), constructCurrencyObject('SAR', 'Saudi Arabian riyal', 'SA', 'en-sa', 'Saudi Arabia', 'SAR', null, '$ 1', null, '.', null, 'middleeast/en/sar', 'en-sa'), constructCurrencyObject('EGP', 'Egyptian Pound', 'EG', 'en-eg', 'Egypt', 'EGP', null, '$ 1', null, '.', null, 'middleeast/en/egp', 'en-eg')],\n 'arCurrencies': [constructCurrencyObject('USD', 'U.S. Dollar', '', 'ar-us', 'Middle East', '$', null, '$1', null, '.', null, 'middleeast/ar/usd', 'ar-us'), constructCurrencyObject('AED', 'UAE dirham', 'AE', 'ar-ae', 'United Arab Emirates', 'AED', null, '$ 1', null, '.', null, 'middleeast/ar/aed', 'ar-ae'), constructCurrencyObject('QAR', 'Qatari riyal', 'QA', 'ar-qa', 'Qatar', 'QAR', null, '$ 1', null, '.', null, 'middleeast/ar/qar', 'ar-qa'), constructCurrencyObject('SAR', 'Saudi Arabian riyal', 'SA', 'ar-sa', 'Saudi Arabia', 'SAR', null, '$ 1', null, '.', null, 'middleeast/ar/sar', 'ar-sa'), constructCurrencyObject('EGP', 'Egyptian Pound', 'EG', 'ar-eg', 'Egypt', 'EGP', null, '$ 1', null, '.', null, 'middleeast/ar/egp', 'ar-eg')],\n 'brCurrencies': [constructCurrencyObject('BRL', 'Brazilian Real', '', 'pt-br', 'Brazil', null, null, '$1', null, null, null, 'br/pt/brl', 'pt-br')],\n 'deCurrencies': [constructCurrencyObject('EUR', 'Euro', '', 'de-de', 'Germany', '€', null, '1 $', null, null, null, 'dach/de/eur', 'de-de'), constructCurrencyObject('CHF', 'Schweizer Franken', 'CH', 'de-ch', 'Switzerland', 'CHF', null, '$ 1', '’', '.', null, 'dach/de/chf', 'de-ch')],\n 'esCurrencies': [constructCurrencyObject('EUR', 'Euro', '', 'es-es', 'Spain', null, null, '1 $', null, null, null, 'es/es/eur', 'es-es')],\n 'frCurrencies': [constructCurrencyObject('EUR', 'Euro', '', 'fr-fr', 'France', '€', null, '1 $', null, null, null, 'fr/fr/eur', 'fr-fr'), constructCurrencyObject('DA', 'Dinar algérien', 'DZ', 'fr-dz', 'Algeria', 'DA', null, '1 $', null, null, null, 'maghreb/fr/dzd', 'fr-fr'), constructCurrencyObject('DT', 'Dinar tunisien', 'TN', 'fr-tn', 'Tunisia', 'DT', null, '1 $', null, null, null, 'maghreb/fr/tnd', 'fr-fr'), constructCurrencyObject('DH', 'Dirham marocain', 'MA', 'fr-ma', 'Morocco', 'DH', null, '1 $', null, ',', null, 'maghreb/fr/mad', 'fr-fr')],\n 'beCurrencies': [constructCurrencyObject('EUR', 'Euro', '', 'fr-be', 'Belgium', null, null, '1 $', null, ',', null, 'be/fr/eur', 'fr-be')],\n 'fiCurrencies': [constructCurrencyObject('EUR', 'Euro', '', 'fi-fi', 'Finland', null, null, '1 $', null, ',', null, 'fi/fi/eur', 'fi-fi')],\n 'gbCurrencies': [constructCurrencyObject('GBP', 'British Pound', '', 'en-gb', 'United Kingdom', '£', null, '$1', null, ',', null, 'unitedkingdom/en/gbp', 'en-gb'), constructCurrencyObject('EUR', 'Euro', 'IE', 'en-ie', 'Ireland', '€', null, '$1', null, ',', null, 'unitedkingdom/en/eur', 'en-ie')],\n 'inCurrencies': [constructCurrencyObject('USD', 'U.S. Dollar', '', 'en-us', 'Rest of World', '$', null, '$1', null, null, null, 'southasia/en/usd', 'en-us'), constructCurrencyObject('INR', 'Indian Rupee', 'IN', 'en-in', 'India', '₹', null, '$ 1', null, null, null, 'southasia/en/inr', 'en-in'), constructCurrencyObject('INR', 'Indian Rupee', 'LK', 'en-in', 'Sri Lanka', '₹', null, '$ 1', null, null, null, 'southasia/en/inr', 'en-in'), constructCurrencyObject('INR', 'Indian Rupee', 'BD', 'en-in', 'Bangladesh', '₹', null, '$ 1', null, null, null, 'southasia/en/inr', 'en-in'), constructCurrencyObject('INR', 'Indian Rupee', 'NP', 'en-in', 'Nepal', '₹', null, '$ 1', null, null, null, 'southasia/en/inr', 'en-in')],\n 'itCurrencies': [constructCurrencyObject('EUR', 'Euro', '', 'it-it', 'Italy', null, null, '1 $', null, null, null, 'it/it/eur', 'it-it')],\n 'nlCurrencies': [constructCurrencyObject('EUR', 'Euro', '', 'nl-nl', 'Netherlands', null, null, '$ 1', null, null, null, 'nl/nl/eur', 'nl-nl')],\n 'zaCurrencies': [constructCurrencyObject('USD', 'U.S. Dollar', '', 'en-za', 'Africa', '$', null, '$1', ',', '.', null, 'southernafrica/en/usd', 'en-za'), constructCurrencyObject('ZAR', 'South African rand', 'ZA', 'en-sa', 'South Africa', 'R', null, '$1', ',', '.', null, 'southernafrica/en/zar', 'en-sa'), constructCurrencyObject('KES', 'Kenyan shilling', 'KE', 'en-ke', 'Kenya', 'KSh', null, '$1', ',', '.', null, 'southernafrica/en/kes', 'en-ke'), constructCurrencyObject('NGN', 'Nigerian naira', 'NG', 'en-ng', 'Nigeria', '₦', null, '$1', ',', '.', null, 'southernafrica/en/ngn', 'en-ng'), constructCurrencyObject('NAD', 'Namibian dollar', 'NA', 'en-na', 'Namibia', '$', null, '$1', ',', '.', null, 'southernafrica/en/nad', 'en-na'), constructCurrencyObject('EUR', 'Euro', 'FI', 'en-fi', 'Finland', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'BJ', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'BF', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'CM', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'CF', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'TD', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'CG', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'CD', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'GQ', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'GA', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'GW', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'CI', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'ML', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'NE', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'SN', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi'), constructCurrencyObject('EUR', 'Euro', 'TG', 'en-fi', 'AfricaEuro', '€', null, '1 $', ',', '.', null, 'southernafrica/en/eur', 'en-fi')],\n 'seCurrencies': [constructCurrencyObject('SEK', 'Svensk krona', '', 'sv-se', 'Sweden', null, null, '1 $', ',', '.', null, 'se/sv/sek', 'sv-se')],\n 'dkCurrencies': [constructCurrencyObject('DKK', 'Danske kroner', '', 'da-dk', 'Denmark', null, null, '1 $', ',', '.', null, 'dk/da/dkk', 'da-dk')],\n 'noCurrencies': [constructCurrencyObject('NOK', 'Norsk krone', '', 'nb-no', 'Norway', null, null, '$ 1', ',', '.', null, 'no/nb/nok', 'nb-no')],\n 'trCurrencies': [constructCurrencyObject('TRY', 'Turkish Lira', '', 'tr-tr', 'Turkey', 'TRY', null, '$1', null, null, null, 'tr/tr/try', 'tr-tr')],\n 'usCurrencies': [constructCurrencyObject('USD', 'US Dollars', '', 'en-us', 'USA', null, null, '$1', null, null, null, 'us/en/usd', 'en-us')],\n 'cnCurrencies': [constructCurrencyObject('CNY', 'Chinese Yuan', '', 'zh-cn', 'China', null, null, '$ 1', null, null, null, 'cn/zh/cny', 'zh-cn')],\n 'mxCurrencies': [constructCurrencyObject('USD', 'U.S. Dollar', '', 'es-us', 'Global', '$', null, '$1', null, null, 0, 'latam/es/usd', 'es-us'), constructCurrencyObject('MXN', 'Mexican Peso', 'MX', 'es-mx', 'Mexico', 'MXN', null, '$ 1', null, null, 0, 'latam/es/mxn', 'es-mx'), constructCurrencyObject('ARS', 'Argentinian Peso', 'AR', 'es-ar', 'Argentina', 'ARS', null, '$1', '', null, 0, 'latam/es/ars', 'es-ar'), constructCurrencyObject('PEN', 'Peruvian Sol', 'PE', 'es-pe', 'Peruvia', 'PEN', null, '$1', '', null, 0, 'latam/es/pen', 'es-pe'), constructCurrencyObject('CLP', 'Chilean Peso', 'CL', 'es-cl', 'Chile', 'CLP', null, '$1', '.', ',', 0, 'latam/es/clp', 'es-cl'), constructCurrencyObject('COP', 'Colombian Peso', 'CO', 'es-co', 'Colombia', 'COP', null, '$ 1', '.', ',', 0, 'latam/es/cop', 'es-co')],\n 'ruCurrencies': [constructCurrencyObject('RUB', 'Russian Rouble', '', 'ru-ru', 'Russia', '₽', null, '1 $', null, null, 0, 'ru/ru/rub', 'ru-ru'), constructCurrencyObject('RUB', 'Russian Rouble', 'KZ', 'ru-kz', 'Kazakhstan', '₽', null, '1 $', null, null, 0, 'kz/ru/rub', 'ru-kz'), constructCurrencyObject('RUB', 'Russian Rouble', 'TJ', 'ru-kg', 'Tajikistan', '₽', null, '1 $', null, null, 0, 'cis/ru/rub', 'ru-kg'), constructCurrencyObject('RUB', 'Russian Rouble', 'UZ', 'ru-kg', 'Uzbekistan', '₽', null, '1 $', null, null, 0, 'cis/ru/rub', 'ru-kg'), constructCurrencyObject('RUB', 'Russian Rouble', 'KG', 'ru-kg', 'Kyrgyzstan', '₽', null, '1 $', null, null, 0, 'cis/ru/rub', 'ru-kg'), constructCurrencyObject('RUB', 'Russian Rouble', 'TM', 'ru-kg', 'Turkmenistan', '₽', null, '1 $', null, null, 0, 'cis/ru/rub', 'ru-kg'), constructCurrencyObject('RUB', 'Russian Rouble', 'GE', 'ru-kg', 'Georgia', '₽', null, '1 $', null, null, 0, 'cis/ru/rub', 'ru-kg'), constructCurrencyObject('RUB', 'Russian Rouble', 'AM', 'ru-kg', 'Armenia', '₽', null, '1 $', null, null, 0, 'cis/ru/rub', 'ru-kg'), constructCurrencyObject('RUB', 'Russian Rouble', 'AZ', 'ru-kg', 'Azerbaijan', '₽', null, '1 $', null, null, 0, 'cis/ru/rub', 'ru-kg'), constructCurrencyObject('RUB', 'Russian Rouble', 'MN', 'ru-kg', 'Azerbaijan', '₽', null, '1 $', null, null, 0, 'cis/ru/rub', 'ru-kg'), constructCurrencyObject('RUB', 'Russian Rouble', 'BY', 'ru-by', 'Russia', '₽', null, '1 $', null, null, 0, 'by/ru/rub', 'ru-by'), constructCurrencyObject('EUR', 'Euro', 'EE', 'ru-ee', 'Estonia', '€', null, '1 $', null, null, 0, 'baltic/ru/eur', 'ru-ee'), constructCurrencyObject('EUR', 'Euro', 'LT', 'ru-ee', 'Lithuania', '€', null, '1 $', null, null, 0, 'baltic/ru/eur', 'ru-ee'), constructCurrencyObject('EUR', 'Euro', 'LV', 'ru-ee', 'Latvia', '€', null, '1 $', null, null, 0, 'baltic/ru/eur', 'ru-ee')],\n 'jpCurrencies': [constructCurrencyObject('JPY', 'Japanese yen', '', 'ja-jp', 'Japan', '¥', null, '$1', null, null, 0, 'jp/ja/jpy', 'ja-jp')],\n 'regions': [{ 'locale': 'en-au', 'name': 'Global', 'selectedLanguages': 'en', 'selectedCountryCode': 'Global' }, { 'locale': 'en-GB', 'name': 'The European Union', 'selectedLanguages': 'en', 'selectedCountryCode': 'gb' }, { 'locale': 'he-IL', 'name': 'Israel', 'selectedLanguages': 'en', 'selectedCountryCode': 'il' }, { 'locale': 'en-SEA', 'name': 'South East Asia', 'selectedLanguages': 'en', 'selectedCountryCode': 'my' }, { 'locale': 'en-ID', 'name': 'Indonesia', 'selectedLanguages': 'en', 'selectedCountryCode': 'id' }, { 'locale': 'en-PH', 'name': 'Philippines', 'selectedLanguages': 'en', 'selectedCountryCode': 'my' }, { 'locale': 'en-CAR', 'name': 'Caribbean', 'selectedLanguages': 'en', 'selectedCountryCode': 'Global' }, { 'locale': 'en-FI', 'name': 'Finland', 'selectedLanguages': 'fi', 'selectedCountryCode': 'fi' }, { 'locale': 'en-MY', 'name': 'Malaysia', 'selectedLanguages': 'en', 'selectedCountryCode': 'my' }, { 'locale': 'en-SG', 'name': 'Singapore', 'selectedLanguages': 'en', 'selectedCountryCode': 'my' }]\n });\n\n /**\n * [constructCurrencyObject description]\n * @param {String} currency The currency ID\n * @param {String} currencyDisplayName The currency display name\n * @param {String} geoIP The geoIP locale\n * @param {String} locale The site locale\n * @param {String} name The locale display name\n * @param {String} [symbol='$'] Override for currency symbol\n * @param {String} region The region display name\n * @param {String} [template=''] The currency formatting template; $ is the currency symbol and 1 is the numeric value. (e.g. 1 $ to have symbol at the end)\n * @param {String} groupSep Override for thousands separator\n * @param {String} decimalSep Override for decimals separator\n * @param {String} decimalCount Override for number of decimals to show\n * @param {String | null} priceListLocale Set pricelist locale for pl2 adaptation\n * @return {Object} The currency object\n */\n function constructCurrencyObject(currency, currencyDisplayName, geoIP, locale, name, symbol, region) {\n var template = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : '$1';\n var groupSep = arguments[8];\n var decimalSep = arguments[9];\n var decimalCount = arguments[10];\n var priceListLocale = arguments[11];\n\n\n return {\n 'currency': currency,\n 'symbol': symbol,\n 'geoIP': geoIP,\n 'locale': locale,\n 'currencyDisplayName': currencyDisplayName,\n 'name': name,\n 'displayName': currency + ' - ' + currencyDisplayName,\n 'template': template,\n 'groupSep': groupSep,\n 'decimalSep': decimalSep,\n 'decimalCount': decimalCount,\n 'region': region,\n 'priceListLocale': priceListLocale\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.env', []).constant('ENV', function () {\n\n var locale = 'en-au',\n server = '',\n ISOConfig = [{\n 'id': 'GL',\n 'locale': 'en\\-global'\n }, {\n 'id': 'RU',\n 'locale': 'ru-ru'\n }, {\n 'id': 'US',\n 'locale': 'en-us'\n }, {\n 'id': 'UK',\n 'locale': 'en-gb'\n }, {\n 'id': 'BR',\n 'locale': 'pt-br'\n }, {\n 'id': 'FR',\n 'locale': 'fr-fr'\n }, {\n 'id': 'DE',\n 'locale': 'de-de'\n }, {\n 'id': 'IT',\n 'locale': 'it-it'\n }, {\n 'id': 'ES',\n 'locale': 'es-es'\n }, {\n 'id': 'NL',\n 'locale': 'nl-nl'\n }, {\n 'id': 'AU',\n 'locale': 'en-au'\n }, {\n 'id': 'ME',\n 'locale': 'en-ae'\n }, {\n 'id': 'ME',\n 'locale': 'ar-ae'\n }, {\n 'id': 'JP',\n 'locale': 'ja-jp'\n }, {\n 'id': 'IN',\n 'locale': 'en-in'\n }, {\n 'id': 'ZA',\n 'locale': 'en-za'\n }, {\n 'id': 'CN',\n 'locale': 'zh-cn'\n }, {\n 'id': 'TR',\n 'locale': 'tr-tr'\n }, {\n 'id': 'LA',\n 'locale': 'es-mx'\n }, {\n 'id': 'SE',\n 'locale': 'sv-se'\n }, {\n 'id': 'DK',\n 'locale': 'da-dk'\n }, {\n 'id': 'NO',\n 'locale': 'nb-no'\n }, {\n 'id': 'CA',\n 'locale': 'en-ca'\n }, {\n 'id': 'BE',\n 'locale': 'fr-be'\n }, {\n 'id': 'FN',\n 'locale': 'fi-fi'\n }];\n\n return {\n 'locale': locale,\n 'server': server,\n 'apiServer': server,\n 'ISOConfig': ISOConfig\n };\n }());\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.geoLocationConfig', []).constant('GEO', {\n 'vpnProhibitedCountries': getVpnProhibitedCountries(),\n 'kscProhibitedCountries': getKscProhibitedCountries(),\n 'downloadUrls': getDownloadUrlForProhibitedCountries(),\n 'getRUCountries': getRUCountries()\n });\n\n function getVpnProhibitedCountries() {\n return [constructGeoObject('Belarus', 'BY'), constructGeoObject('Oman', 'OM'), constructGeoObject('Pakistan', 'PK'), constructGeoObject('Qatar', 'QA'), constructGeoObject('Iran', 'IR'), constructGeoObject('UAE', 'AE'), constructGeoObject('Saudi Arabia', 'SA'), constructGeoObject('Hong Kong', 'HK'), constructGeoObject('China', 'CN')];\n }\n\n function getKscProhibitedCountries() {\n return [constructGeoObject('Belarus', 'BY'), constructGeoObject('Oman', 'OM'), constructGeoObject('Pakistan', 'PK'), constructGeoObject('Qatar', 'QA'), constructGeoObject('Iran', 'IR'), constructGeoObject('China', 'CN'), constructGeoObject('Hong Kong', 'HK'), constructGeoObject('Saudi Arabia', 'SA')];\n }\n\n function constructGeoObject(countryName, locale) {\n return {\n 'countryName': countryName,\n 'locale': locale.toLowerCase()\n };\n }\n\n function getDownloadUrlForProhibitedCountries() {\n return ['downloads/thank-you/internet-security', 'downloads/thank-you/total-security', 'downloads/thank-you/antivirus', 'downloads/total-security-free-trial', 'downloads/antivirus-free-trial', 'downloads/internet-security-free-trial', 'downloads/thank-you/antivirus-free-trial', 'downloads/thank-you/total-security-free-trial', 'downloads/thank-you/internet-security-free-trial', 'antivirus', 'internet-security', 'total-security', 'acq/kss/verdicts', 'free-mac-virus-scan', 'mac-virus-scan', 'free-virus-scan', 'acq/kss/verdict-11', 'acq/msft/security-for-windows', 'acq/kss/uninstall', 'acq/ksu/uninstall'];\n }\n\n function getRUCountries() {\n return ['RU', 'KZ', 'BY'];\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n /*This configs sets rules to form a link to the cart\n * whenever Partner (ecommProvider) is set tracking.module.js will append a different set of parameters to it\n * */\n\n angular.module('kappGlobal.partnersConfig', []).constant('PARTNERS', {\n 'ar-ae': 'Avangate',\n 'da-dk': 'Digital River',\n 'de-de': 'Digital River',\n 'en-ae': 'Avangate',\n 'en-au': 'Digital River',\n 'en-gb': 'Digital River',\n 'en-in': 'Digital River',\n 'en-us': 'Digital River',\n 'en-za': 'Avangate',\n 'es-es': 'Nexway',\n 'es-mx': 'Digital River',\n 'fr-fr': 'Nexway',\n 'it-it': 'Nexway',\n 'nb-no': 'Digital River',\n 'nl-nl': 'Digital River',\n 'pt-br': 'Digital River',\n 'sv-se': 'Digital River',\n 'tr-tr': 'Avangate',\n 'zh-cn': 'Digital River',\n 'ru-ru': 'Allsoft',\n 'ja-jp': 'Digital River'\n });\n})();\n/*eslint angular/window-service: 0*/\n/*\n(function() {\n 'use strict';\n angular.module('kappGlobal')\n .config(['RollbarProvider', RollbarProvider]);\n\n function RollbarProvider(RollbarProvider) {\n RollbarProvider.init({\n 'accessToken': getAccessTokenWhenProd(),\n 'captureUncaught': true,\n 'captureUnhandledRejections': true,\n 'enabled': isProd() && !window.customFlag,\n 'payload': {\n 'environment': 'en-au'\n }\n });\n }\n function isProd() {\n return !window.location.host.match(/ngdev|ngtst|ngtest|stg|localhost|127.0.0.1/);\n }\n\n function getAccessTokenWhenProd() {\n return isProd() ? '7fba81fd8f2b4dd9bd9685ca1918af96' : '';\n }\n})();\n*/\n\"use strict\";\n'use strict';\n\n(function () {\n 'use strict';\n /*This configs is where we keep details of all the alt texts for all screenshot images\n * currently limited to Screenshot images, can be extended for other images, site-wide\n * 'ar-ae': null,\n 'da-dk': null,\n 'de-de': null,\n 'en-ae': null,\n 'en-au': null,\n 'en-gb': null,\n 'en-au': null,\n 'en-in': null,\n 'en-za': null,\n 'es-es': null,\n 'es-mx': null,\n 'fr-fr': null,\n 'it-it': null,\n 'nb-no': null,\n 'nl-nl': null,\n 'pt-br': null,\n 'sv-se': null,\n 'tr-tr': null,\n 'zh-cn': null,\n 'ru-ru': null'\n 'ja-jp': null'\n * */\n\n angular.module('kappGlobal.seoConfig', []).constant('SEO', {\n 'en-gb': {\n 'EN-GB-DATA': 'EN-GB-DATA',\n 'product-box-KPM': 'Kaspersky Password Manager',\n 'screen-KTSMD-01': 'Kaspersky Total Security Screenshot',\n 'screen-KTSMD-02': 'Screenshot of Kaspersky Total Security',\n 'screen-KTSMD-03': 'Kaspersky Total Security Privacy Protection',\n 'screen-KTSMD-04': 'Kaspersky Total Security Secure Connection',\n 'screen-KIS-01': 'Kaspersky Internet Security screenshot',\n 'screen-KIS-02': 'Kaspersky Internet Security Tools',\n 'screen-KIS-03': 'Kaspersky Internet Security Privacy Protection',\n 'screen-KIS-04': 'Kaspersky Total Security Secure Connection',\n 'screen-KAV-01': 'Kaspersky Anti-Virus Interface',\n 'screen-KAV-02': 'Kaspersky Anti-Virus Cloud Protection',\n 'screen-KAV-03': 'Kaspersky Anti-Virus Settings',\n 'screen-KISMAC-01': 'Kaspersky Mac Internet Security Screenshot',\n 'screen-KISMAC-02': 'Kaspersky Mac Internet Security - Safe Money',\n 'screen-KISMAC-03': 'Kaspersky Mac Parental Control - Sophia',\n 'screen-KISA-01': 'Kaspersky Internet Security for Android Screenshot',\n 'screen-KISA-02': 'Kaspersky Internet Security for Android Privacy Protection',\n 'screen-KISA-03': 'Kaspersky Internet Security for Android Web Protection',\n 'screen-KISA-04': 'Kaspersky Internet Security for Android Anti Theft',\n 'screen-KPM-01': 'Kaspersky Password Manager Screenshot',\n 'screen-KPM-02': 'Kaspersky Password Manager Interface',\n 'screen-KPM-03': 'Kaspersky Password Manager Capture Card Details',\n 'screen-KPM-04': 'Kaspersky Password Manager Sign In'\n },\n 'default': {\n 'DEFAULT-DATA': 'DEFAULT-DATA',\n 'product-box-KPM': 'Kaspersky Password Manager',\n 'screen-KTSMD-01': 'Kaspersky Total Security Screenshot',\n 'screen-KTSMD-02': 'Screenshot of Kaspersky Total Security',\n 'screen-KTSMD-03': 'Kaspersky Total Security Privacy Protection',\n 'screen-KTSMD-04': 'Kaspersky Total Security Secure Connection',\n 'screen-KIS-01': 'Kaspersky Internet Security screenshot',\n 'screen-KIS-02': 'Kaspersky Internet Security Tools',\n 'screen-KIS-03': 'Kaspersky Internet Security Privacy Protection',\n 'screen-KIS-04': 'Kaspersky Total Security Secure Connection',\n 'screen-KAV-01': 'Kaspersky Anti-Virus Interface',\n 'screen-KAV-02': 'Kaspersky Anti-Virus Cloud Protection',\n 'screen-KAV-03': 'Kaspersky Anti-Virus Settings',\n 'screen-KISMAC-01': 'Kaspersky Mac Internet Security Screenshot',\n 'screen-KISMAC-02': 'Kaspersky Mac Internet Security - Safe Money',\n 'screen-KISMAC-03': 'Kaspersky Mac Parental Control - Sophia',\n 'screen-KISA-01': 'Kaspersky Internet Security for Android Screenshot',\n 'screen-KISA-02': 'Kaspersky Internet Security for Android Privacy Protection',\n 'screen-KISA-03': 'Kaspersky Internet Security for Android Web Protection',\n 'screen-KISA-04': 'Kaspersky Internet Security for Android Anti Theft',\n 'screen-KPM-01': 'Kaspersky Password Manager Screenshot',\n 'screen-KPM-02': 'Kaspersky Password Manager Interface',\n 'screen-KPM-03': 'Kaspersky Password Manager Capture Card Details',\n 'screen-KPM-04': 'Kaspersky Password Manager Sign In'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config(config);\n config.$inject = ['$urlMatcherFactoryProvider'];\n\n function config($urlMatcherFactoryProvider) {\n function valToString(val) {\n return val !== null || angular.isDefined(val) ? val.toString() : val;\n }\n\n $urlMatcherFactoryProvider.type('nonURIEncoded', {\n 'encode': valToString,\n 'decode': valToString,\n 'is': function is() {\n return true;\n }\n });\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.version', []).constant('VER', {\n 'version': '224.0.0'\n });\n})();\n'use strict';\n\n/*eslint angular/window-service: 0*/\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config([\"$sceDelegateProvider\", function ($sceDelegateProvider) {\n $sceDelegateProvider.resourceUrlWhitelist(['self', 'https://api.yotpo.com/**', 'https://api.trustpilot.com/**', 'https://www.youtube.com/**', 'https://westus.api.cognitive.microsoft.com/**', 'https://cb-us.maxymiser.com/**', 'https://proxy-eu.maxymiser.com/**', 'https://dev.mvtresearch.com/**', 'https://dev.mvtresearch.com/**', 'https://web-demos.wombatsecurity.com/demos/**']);\n }]);\n})();\n/* eslint-disable */\n'use strict';\n\nangular.module(\"ngLocale\", [], [\"$provide\", function ($provide) {\n var PLURAL_CATEGORY = { ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\" };\n function getDecimals(n) {\n n = n + '';\n var i = n.indexOf('.');\n return i == -1 ? 0 : n.length - i - 1;\n }\n\n function getVF(n, opt_precision) {\n var v = opt_precision;\n\n if (undefined === v) {\n v = Math.min(getDecimals(n), 3);\n }\n\n var base = Math.pow(10, v);\n var f = (n * base | 0) % base;\n return { v: v, f: f };\n }\n\n $provide.value(\"$locale\", {\n \"DATETIME_FORMATS\": {\n \"AMPMS\": [\"am\", \"pm\"],\n \"DAY\": [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n \"ERANAMES\": [\"Before Christ\", \"Anno Domini\"],\n \"ERAS\": [\"BC\", \"AD\"],\n \"FIRSTDAYOFWEEK\": 6,\n \"MONTH\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n \"SHORTDAY\": [\"Sun.\", \"Mon.\", \"Tue.\", \"Wed.\", \"Thu.\", \"Fri.\", \"Sat.\"],\n \"SHORTMONTH\": [\"Jan.\", \"Feb.\", \"Mar.\", \"Apr.\", \"May\", \"Jun.\", \"Jul.\", \"Aug.\", \"Sep.\", \"Oct.\", \"Nov.\", \"Dec.\"],\n \"STANDALONEMONTH\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n \"WEEKENDRANGE\": [5, 6],\n \"fullDate\": \"EEEE, d MMMM y\",\n \"longDate\": \"d MMMM y\",\n \"medium\": \"d MMM y h:mm:ss a\",\n \"mediumDate\": \"d MMM y\",\n \"mediumTime\": \"h:mm:ss a\",\n \"short\": \"d/M/yy h:mm a\",\n \"shortDate\": \"d/M/yy\",\n \"shortTime\": \"h:mm a\"\n },\n \"NUMBER_FORMATS\": {\n \"CURRENCY_SYM\": \"$\",\n \"DECIMAL_SEP\": \".\",\n \"GROUP_SEP\": \",\",\n \"PATTERNS\": [{\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 3,\n \"minFrac\": 0,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\",\n \"posPre\": \"\",\n \"posSuf\": \"\"\n }, {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 2,\n \"minFrac\": 2,\n \"minInt\": 1,\n \"negPre\": \"-\\xA4\",\n \"negSuf\": \"\",\n \"posPre\": \"\\xA4\",\n \"posSuf\": \"\"\n }]\n },\n \"id\": \"en-au\",\n \"localeID\": \"en_AU\",\n \"pluralCat\": function pluralCat(n, opt_precision) {\n var i = n | 0;var vf = getVF(n, opt_precision);if (i == 1 && vf.v == 0) {\n return PLURAL_CATEGORY.ONE;\n }return PLURAL_CATEGORY.OTHER;\n }\n });\n}]);\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal').config(paginationConfig);\n\n paginationConfig.$inject = ['paginationTemplateProvider'];\n function paginationConfig(paginationTemplateProvider) {\n paginationTemplateProvider.setPath('resources/template/html/modules/_shared/components/pagination/templates/pagination-1.html');\n }\n})();\n'use strict';\n\nString.prototype.replaceAll = function (find, replace) {\n return this.replace(new RegExp(find, 'g'), replace);\n};\n\nString.prototype.validateEmail = function () {\n var re = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/;\n return re.test(this);\n};\n'use strict';\n\n(function () {\n 'use strict';\n\n canonicalHrefService.$inject = [\"$rootScope\", \"windowHelperService\"];\n angular.module('kappGlobal.canonicalHref', []).factory('canonicalHrefService', canonicalHrefService).run([\"canonicalHrefService\", function (canonicalHrefService) {\n canonicalHrefService.initialize();\n }]);\n\n function canonicalHrefService($rootScope, windowHelperService) {\n var locationChangeWatcher = void 0;\n\n function locationChangeHandler() {\n $rootScope.canonical = windowHelperService.getCanonicalUrl();\n }\n\n function initialize() {\n locationChangeWatcher = $rootScope.$on('$locationChangeSuccess', locationChangeHandler);\n }\n\n $rootScope.$on('$destroy', function () {\n locationChangeWatcher();\n });\n\n return {\n initialize: initialize\n };\n }\n})();\n'use strict';\n\n(function () {\n cookieService.$inject = [\"$document\"];\n angular.module('kappGlobal.cookieService', []).factory('cookieService', cookieService);\n\n function cookieService($document) {\n 'use strict';\n\n return {\n 'set': setCookie,\n 'get': getCookie,\n 'remove': removeCookie\n };\n\n function setCookie(key, value, days, domain) {\n if (!key) {\n return null;\n }\n\n var expiry = '';\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expiry = '; expires=' + date.toUTCString();\n }\n $document[0].cookie = encodeURIComponent(key) + '=' + encodeURIComponent(value) + expiry + '; path=/;' + (domain ? 'domain=' + domain : '');\n return true;\n }\n\n function getCookie(key) {\n if (!key) {\n return null;\n }\n var cookies = $document[0].cookie;\n\n // escaping special characters\n var escapedKey = encodeURIComponent(key).replace(/[\\-\\.\\+\\*]/g, '\\\\$&');\n\n // cookies are returned in this format: \"cookie1=val1; cookie2=val2; cookie3=val3\"\n // we are filtering that string for our key, and then returning the value for that key.\n var cookieValue = cookies.replace(new RegExp('(?:(?:^|.*;)\\\\s*' + escapedKey + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'), '$1');\n\n return decodeURIComponent(cookieValue) || null;\n }\n\n function removeCookie(key) {\n if (!key) {\n return null;\n }\n\n var hasCookie = getCookie(key);\n\n if (!hasCookie) {\n return false;\n } else {\n return setCookie(key, '', -1);\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n currencyManager.$inject = [\"$rootScope\", \"sessionStorageService\", \"CURRENCY\", \"geoLocationManager\", \"ENV\", \"localizationService\"];\n angular.module('kappGlobal.currencyManager', ['kappGlobal.currencyConfig', 'kappGlobal.geoLocationManager']).factory('currencyManager', currencyManager);\n\n function currencyManager($rootScope, sessionStorageService, CURRENCY, geoLocationManager, ENV, localizationService) {\n var currentCurrencyObj = void 0;\n\n return {\n 'getCurrencies': getCurrencies,\n 'getCurrentCurrencyFromCache': getCurrentCurrencyFromCache,\n 'getDefaultCurrencyFromConfig': getDefaultCurrencyFromConfig,\n 'setCurrency': setCurrency,\n 'setCurrentCurrency': setCurrentCurrency,\n 'getCurrentCurrency': getCurrentCurrency,\n 'pl2Enabled': pl2Enabled\n };\n\n function getCurrencies(overrideCurrencies, defaultCurrency, geoIp, currenciesCacheName) {\n currenciesCacheName = currenciesCacheName || $rootScope.getCacheNames.currenciesCache;\n var cachedCurrencies = sessionStorageService.get(currenciesCacheName);\n if (cachedCurrencies !== null) return cachedCurrencies;\n overrideCurrencies = getOrSetCurrencies(overrideCurrencies);\n var currencies = [],\n geoIpDefaultCurrency = getDefaultCurrencyByGeoIp(overrideCurrencies, geoIp);\n defaultCurrency = geoIpDefaultCurrency || defaultCurrency;\n if (defaultCurrency) {\n currencies = filterCurrenciesByDefault(overrideCurrencies, defaultCurrency);\n } else {\n currencies = filterCurrenciesByRegion(overrideCurrencies);\n }\n sessionStorageService.set(currenciesCacheName, currencies);\n setCurrency(defaultCurrency);\n return currencies;\n }\n\n function getCurrentCurrencyFromCache(currencyLocaleCacheName) {\n currencyLocaleCacheName = getCurrencyLocaleCacheName(currencyLocaleCacheName);\n return sessionStorageService.get(currencyLocaleCacheName);\n }\n\n function getDefaultCurrencyFromConfig(locale) {\n locale = locale || ENV.locale;\n locale = locale.toLowerCase() === 'ar-ae' ? 'ar-ar' : locale;\n var countryCode = locale.split('-')[1];\n var localeCurrencyConfig = CURRENCY[countryCode + 'Currencies'];\n if (angular.isUndefined(localeCurrencyConfig)) {\n throw new Error(locale + ' is not in the {_config/kappGlobal.currency.config) file. Please add (' + countryCode + 'Currencies) to the config list.');\n }\n return localeCurrencyConfig[0];\n }\n\n function setCurrency(item, currencyLocaleCacheName) {\n currencyLocaleCacheName = currencyLocaleCacheName || getCurrencyLocaleCacheName(currencyLocaleCacheName);\n if (item === null || angular.isUndefined(item)) return {};\n $rootScope.populateCurrency(item);\n setCurrentCurrency(item);\n localizationService.setCurrencyLocale(item);\n sessionStorageService.set(currencyLocaleCacheName, item);\n $rootScope.$emit('currencyChange');\n return $rootScope;\n }\n\n function getOrSetCurrencies(overrideCurrencies) {\n overrideCurrencies = overrideCurrencies || CURRENCY[getLocaleCurrencyInfoByValue('Currencies')] || CURRENCY.globalCurrencies;\n return overrideCurrencies;\n }\n\n function getDefaultCurrencyByGeoIp(currencies, geoIp) {\n geoIp = geoIp || geoLocationManager.getUserGeoIp();\n var defaultCurrency = void 0;\n for (var i = 0, length = currencies.length; i < length; i++) {\n var currency = currencies[i];\n if (currency['geoIP'].toLowerCase() !== geoIp.toLowerCase()) continue;\n defaultCurrency = currency;\n break;\n }\n return defaultCurrency;\n }\n\n function filterCurrenciesByDefault(currencies, defaultCurrency) {\n currencies = getUniqueCurrencies(currencies);\n currencies = getUniqueCurrenciesByRegion(currencies);\n if (defaultCurrency) {\n var indexToRemove = currencies.map(function (e) {\n return e.currency;\n }).indexOf(defaultCurrency['currency']);\n currencies.splice(indexToRemove, 1);\n currencies.unshift(defaultCurrency);\n }\n return currencies;\n }\n\n function getUniqueCurrencies(currencies) {\n var result = [];\n currencies.map(function (currency, index) {\n var previousResult = result[index - 1];\n if (angular.isUndefined(previousResult) || previousResult['currency'] !== currency['currency']) {\n result.push(currency);\n }\n });\n return result;\n }\n\n function filterCurrenciesByRegion(currencies) {\n var result = [];\n currencies.map(function (currency) {\n if (angular.isUndefined(currency['region']) || currency['region'] === null) result.push(currency);\n });\n return result;\n }\n\n function getCurrencyLocaleCacheName(currencyLocaleCacheName) {\n return currencyLocaleCacheName || $rootScope.getCacheNames.currencyLocaleCache;\n }\n\n function getLocaleCurrencyInfoByValue(value) {\n var locale = ENV.locale;\n locale = locale.toLowerCase() === 'ar-ae' ? 'ar-ar' : locale;\n return '' + locale.split('-')[1] + value;\n }\n\n function setCurrentCurrency(currencyObj) {\n return currentCurrencyObj = currencyObj;\n }\n function getCurrentCurrency() {\n return currentCurrencyObj;\n }\n\n function getUniqueCurrenciesByRegion(currencies) {\n var result = [],\n geoIp = geoLocationManager.getUserGeoIp();\n currencies.forEach(function (currency) {\n if (angular.isUndefined(currency['region']) || currency['region'] === null || geoIp === currency['geoIP'] && angular.isDefined(currency['region'])) {\n result.push(currency);\n }\n });\n return result;\n }\n\n function pl2Enabled() {\n var currencyObj = this.getCurrentCurrency();\n return !!currencyObj.priceListLocale;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.customAnchorScroll', []).factory('$anchorScroll', [\"$location\", \"$rootScope\", \"appHelperService\", function ($location, $rootScope, appHelperService) {\n var MAX_SCROLL_ATTEMPTS = 10;\n var SELECTORS_QUERY_STRING = 'nav.page-nav, nano-banner .nano-banner, main-nav .main-nav';\n\n var $html = $('html, body');\n var forceId = void 0;\n var ngRenderWatcher = $rootScope.$on('ngRender', ngRenderHandler);\n var routerChangeStartWatcher = $rootScope.$on('$stateChangeStart', stateChangeStartHandler);\n var ngRendered = false;\n\n $rootScope.$on('$destroy', function () {\n routerChangeStartWatcher();\n ngRenderWatcher();\n });\n\n function ngRenderHandler() {\n ngRendered = true;\n }\n\n function stateChangeStartHandler() {\n ngRendered = false;\n\n $html.stop(true);\n }\n\n function getYOffset() {\n var result = 0;\n\n angular.element(SELECTORS_QUERY_STRING).each(function (index, node) {\n var $node = angular.element(node);\n\n result += $node.height();\n });\n\n return result;\n }\n\n function htmlScroll(element) {\n var yOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n var elementOffsetTop = element.offset().top;\n var counter = 0;\n\n $html.stop(true).animate({\n 'scrollTop': elementOffsetTop - yOffset\n }, {\n 'easing': 'linear',\n 'step': function step() {\n var newYOffset = getYOffset();\n\n counter++;\n\n if (counter < MAX_SCROLL_ATTEMPTS) {\n if (element.offset().top !== elementOffsetTop || newYOffset !== yOffset) {\n htmlScroll(element, newYOffset);\n }\n }\n }\n });\n }\n\n function scroll(id) {\n var targetId = void 0;\n var $element = void 0;\n var element = void 0;\n\n if (ngRendered) {\n targetId = (forceId || id || $location.hash() || '').replace(/^#/, ''), $element = targetId ? angular.element('[id=\"' + targetId + '\"]').last() : null;\n element = $element ? $element.get(0) : null;\n\n forceId = null;\n\n if (appHelperService.isVisibleDOMElement(element)) {\n htmlScroll($element, getYOffset());\n }\n } else if (id) {\n forceId = id;\n }\n }\n\n return scroll;\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n directiveData.$inject = [\"$http\", \"ENV\", \"$state\", \"sessionStorageService\", \"$q\", \"$window\"];\n angular.module('kappGlobal.directiveData', ['kappGlobal.config']).factory('directiveData', directiveData);\n function directiveData($http, ENV, $state, sessionStorageService, $q, $window) {\n return {\n 'get': get,\n 'getByUrl': getByUrl,\n 'getLocal': getLocal,\n 'getBySection': getBySection,\n 'getPartnerByName': getPartnerByName,\n 'getPartnerByID': getPartnerByID\n };\n\n function get(fPath, loc) {\n var locale = loc || ENV.locale;\n\n if ($window.content && $window.content[encodeURIComponent(fPath)]) {\n var x = fPath.replace(/\\/\\//g, '/');\n var res = { 'data': $window.content[encodeURIComponent(x)] };\n return $q.resolve(res);\n }\n return fPath.match(/^\\/?content\\//) ? $http.get(fPath) : $http.get('/content/' + locale + fPath, { 'cache': true });\n }\n\n function getByUrl(fName) {\n if (fName.match(/\\//)) return get(fName);\n var currentState = $state.href($state.current.name) || '';\n var contentLocation = currentState.replace(/(\\?|#).*/, '');\n if (contentLocation === '/' || contentLocation === '') contentLocation = '/homepage';\n\n /**\n * Implementation of content delivery concept as single-api-call\n * Failed becuase of content versioning issue, potentially recoverable when content is\n * handled properly\n */\n /* if ($rootScope.stateData) {\n for (let i = 0; i < $rootScope.stateData.length; i++) {\n if ($rootScope.stateData[i].title === fName) {\n obj = $rootScope.stateData[i];\n break;\n }\n }\n if (obj) {\n return $q.resolve({'data': obj});\n } else {\n let err = new Error('hiddenByCMS');\n return $q.reject(err);\n }\n } else {*/\n return $http.get('/content/' + ENV.locale + contentLocation + '/' + fName + '.json', { 'cache': true });\n //}\n }\n\n function getLocal(fName) {\n var cachedData = sessionStorageService.get('local[' + fName + ']');\n\n if (cachedData) return $q.resolve({ 'data': cachedData });\n\n return $http.get('/content/' + ENV.locale + '/localization/' + fName + '.json', { 'cache': true }).then(function (response) {\n sessionStorageService.set('local[' + fName + ']', response.data);\n return response;\n }).catch(function (error) {\n return error;\n });\n }\n\n function getBySection(fName, dir) {\n // second argument for directory by section\n\n if (_.endsWith(fName, '.json')) {\n return $http.get(fName, { 'cache': true });\n }\n\n if ($state.includes('home-security-section') && fName === 'footer') {\n return $q.reject('Rejection: ' + fName + ' is not needed on ' + (dir || 'this page'));\n }\n\n var section = void 0;\n if ($state.includes('homepage') || $state.includes('eula')) section = '/homepage';\n if ($state.includes('home-security-section')) section = '/home-security';\n if ($state.includes('vsb') || $state.includes('lrc-b2b')) section = '/small-business-security';\n if ($state.includes('smb')) section = '/small-to-medium-business-security';\n if ($state.includes('enterprise')) section = '/enterprise-security';\n if ($state.includes('partners')) section = '/partners';\n if ($state.includes('about-section')) section = '/about';\n\n // check if second argument is set, if not then use the first arg value, @fname\n var directory = dir || fName;\n\n if (fName === 'footer' && !section) {\n section = '/homepage';\n }\n\n if (!section) return $q.reject('Rejection: ' + fName + ' is not needed on ' + (dir || 'this page'));\n\n return $http.get('/content/' + ENV.locale + section + '/' + directory + '/' + fName + '.json', { 'cache': true });\n }\n\n function getPartnerByName(name) {\n return getByUrl('/lrc/partner-mapping.json').then(function (response) {\n return _.find(response.data.fields.map, ['label', name]);\n });\n }\n\n function getPartnerByID(id) {\n return getByUrl('/lrc/partner-mapping.json').then(function (response) {\n return _.find(response.data.fields.map, ['id', String(id)]);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n dl2Connector.$inject = [\"$window\", \"$document\", \"$timeout\", \"$http\", \"ENV\", \"productData\", \"$q\", \"$rootScope\", \"appHelperService\", \"thankYouService\", \"ngDialog\", \"$sce\", \"tracking\", \"angularLoad\", \"errorService\"];\n angular.module('kappGlobal.dl2Connector', []).factory('dl2Connector', dl2Connector);\n\n function dl2Connector($window, $document, $timeout, $http, ENV, productData, $q, $rootScope, appHelperService, thankYouService, ngDialog, $sce, tracking, angularLoad, errorService) {\n var ctrl = this,\n isTrue = appHelperService.isTrue,\n windowElt = angular.element($window),\n variable = {\n 'B2B': {\n 'linksType': 'links_type',\n 'dl2DownloadClick': 'dl2-ksos-item-download-click',\n 'dlChange': 'dl2-ksos-item-change'\n },\n 'B2C': {\n 'linksType': 'linksType',\n 'dl2DownloadClick': 'dl2-block-download-click',\n 'dl2Autodownload': 'dl2-block-download-auto'\n }\n };\n\n return {\n 'initEvents': initEvents,\n 'resetCrossSellDialogData': resetCrossSellDialogData,\n 'fetchDlScript': fetchDlScript,\n 'loadDl2WC': loadDl2WC\n };\n\n function initEvents(scope, data, isB2B, element) {\n ctrl.downloadsList = data;\n ctrl.sitelet = isB2B ? 'B2B' : 'B2C';\n ctrl.dlStarted = {};\n if (!element) element = $document;\n\n element.on(variable[ctrl.sitelet].dl2DownloadClick, applyProductConfig);\n element.on(variable[ctrl.sitelet].dl2Autodownload, trackAutodownload);\n // Temporary solution for dl2 in b2c (safe-kids) pages which are to be migrated to static\n if (!isB2B) {\n $window.addEventListener('dl2-ksos-item-download-click', function (evt) {\n startDownload(evt.detail.Link, '', evt.detail.TypeName, evt.detail.OmniLink);\n });\n }\n\n scope.$on('dl-open-form-popup', function (evt, options) {\n return openFormDialog(options, scope);\n });\n scope.$on('dl-start-download', function (evt, link, param, type, OmniLink) {\n return startDownload(link, param, type, OmniLink);\n });\n scope.$on('$destroy', function () {\n removeIframeEvent();\n element.off(variable[ctrl.sitelet].dl2DownloadClick, applyProductConfig);\n element.off(variable[ctrl.sitelet].dl2Autodownload, trackAutodownload);\n $window.removeEventListener('dl2-ksos-item-download-click');\n });\n }\n\n function getMatchingProduct(codeName) {\n return _.find(ctrl.downloadsList, function (block) {\n if (block.dl2ProductCodeName === codeName) return true;\n\n return block.productTaxonomy && _.find(block.productTaxonomy, function (prod) {\n return prod.key === codeName;\n });\n });\n }\n\n function getExceptionList(product, e) {\n var initialSet = product.allowedTypes ? [product.allowedTypes] : [],\n defaultExceptions = ['Build', 'Downloader'],\n exceptionList = product.allowedTypes && product.allowedTypes.indexOf(',') > -1 ? product.allowedTypes.split(',').map(function (type) {\n return type.trim();\n }) : initialSet;\n\n exceptionList.push.apply(exceptionList, defaultExceptions);\n\n if (exceptionList.indexOf(e.detail.TypeName) === -1) return true;\n\n return false;\n }\n\n function trackAutodownload(e) {\n var downloadLink = e.detail.OmniLink || e.detail.link;\n var linkType = e.detail.TypeName;\n tracking.trackDownload(downloadLink, linkType);\n }\n\n function applyProductConfig(e, isPageLoad) {\n if (!e.detail || !e.detail.CodeName || !angular.isArray(ctrl.downloadsList)) return;\n\n function preventEventDefault() {\n !isPageLoad && e.originalEvent && e.originalEvent.nativeEvent && e.originalEvent.nativeEvent.preventDefault();\n }\n\n var product = getMatchingProduct(e.detail.CodeName);\n\n // disable on B2B types other than \"Build\" and \"Downloader\"\n // unless an exception is made in the CMS\n\n if (ctrl.sitelet === 'B2B' && product && getExceptionList(product, e)) return;\n var downloadLink = e.detail.Link;\n\n delete ctrl.dlStarted[downloadLink];\n\n if (!product) {\n if (!isPageLoad) {\n // on button click: allow the dl to start when no product matches\n preventEventDefault(); // prevent the download to start\n startDownload(downloadLink, e.detail.Param, e.detail.TypeName, e.detail.OmniLink); // start the download with the tracking\n }\n\n return;\n }\n\n if (thankYouService.isDialogFormEnabled(product, isPageLoad)) {\n preventEventDefault(); // prevent the download to start\n showDownloadForm(product, downloadLink, e.detail.Param, e.detail.OmniLink);\n } else if (thankYouService.isCrossSellPopupEnabled(product, isPageLoad)) {\n preventEventDefault(); // prevent default and use event to add tracking\n !ctrl.dlStarted[downloadLink] && startDownload(downloadLink, e.detail.Param, product[variable[ctrl.sitelet].linksType], e.detail.OmniLink);\n openCrossSellPopup(product);\n } else if (e.detail._formDialog && isTrue(e.detail._formDialog.enable)) {\n preventEventDefault(); // prevent the download to start\n showDL2DownloadForm(product, downloadLink, e.detail);\n }\n }\n\n function showDL2DownloadForm(product, link, params) {\n openFormDialog({\n 'form': {\n 'url': params._formDialog.formURL,\n 'width': params._formDialog.popupWidth,\n 'height': params._formDialog.popupHeight\n },\n 'startOnClose': !ctrl.dlStarted[link] && isTrue(params._formDialog.startDownloadOnClose),\n 'linksType': product[variable[ctrl.sitelet].linksType],\n 'link': link,\n 'param': params.Param,\n 'OmniLink': params.OmniLink\n });\n }\n\n function showDownloadForm(product, link, param, OmniLink) {\n openFormDialog({\n 'form': {\n 'url': product.formUrl,\n 'width': product.formWidth,\n 'height': product.formHeight\n },\n 'startOnClose': !ctrl.dlStarted[link] && isTrue(product.startOnClose),\n 'linksType': product[variable[ctrl.sitelet].linksType],\n 'link': link,\n 'param': param,\n 'OmniLink': OmniLink\n });\n }\n\n function openFormDialog(options, scope) {\n closeDialog();\n\n var embedSrc = $sce.trustAsResourceUrl(options.form.url);\n\n setCurrentDownloadOptions(options);\n addIframeEvent();\n\n ctrl.__openedDialog = ngDialog.open({\n 'template': '\\n
\\n \\n \\n \\n
\\n
\\n \\n
',\n 'className': 'ngdialog-iframe ngdialog-iframe-text ngdialog-flyout',\n 'showClose': false,\n 'scope': scope,\n 'plain': true,\n 'name': 'video-popup',\n 'width': parseInt(options.form.width),\n 'height': parseInt(options.form.height),\n 'preCloseCallback': function preCloseCallback() {\n closeDialog(false);\n if (options.startOnClose) startDownload(options.link, options.param, options[variable[ctrl.sitelet].linksType], options.OmniLink);\n return true;\n },\n 'onOpenCallback': function onOpenCallback() {\n tracking.trackPageView($rootScope.kaspersky.pageName + ' > Email Form Popup\\'');\n }\n });\n }\n\n function onIframeEvent(e) {\n var options = getCurrentDownloadOptions();\n\n // cancel if no event object, no stored options, the origin of the event is not the url of the opened iframe\n if (!e || !options || options.form.url.indexOf(e.originalEvent ? e.originalEvent.origin : e.origin) !== 0) return;\n\n switch (e.data) {\n case 'emailForm:download':\n // start download and close, only one event is sent from the iframe.\n startDownload(options.link, options.param, options[variable[ctrl.sitelet].linksType], options.OmniLink);\n // eslint-disable-next-line no-fallthrough\n case 'emailForm:close':\n return closeDialog();\n }\n }\n\n function getCurrentDownloadOptions() {\n return ctrl.__currentDownloadOptions;\n }\n\n function setCurrentDownloadOptions(options) {\n ctrl.__currentDownloadOptions = options;\n }\n\n function addIframeEvent() {\n // event handler not always called\n // window event seems more reliable than Angular wrapper\n\n // eslint-disable-next-line angular/window-service\n window.addEventListener('message', onIframeEvent, false);\n // windowElt.on('message', onIframeEvent);\n }\n\n function removeIframeEvent() {\n windowElt.off('message', onIframeEvent);\n }\n\n function closeDialog(callClose) {\n if (callClose !== false && ctrl.__openedDialog) {\n ctrl.__openedDialog.close();\n }\n\n ctrl.__openedDialog = undefined;\n\n removeIframeEvent();\n setCurrentDownloadOptions(undefined);\n }\n\n function startDownload(link, param, type, OmniLink) {\n if (!link) return;\n tracking.trackDownload(OmniLink || link, type);\n if (param) $window.trackPDCProxy && $window.trackPDCProxy(param);\n $timeout(function () {\n $window.open(link, '_self');\n }, 500);\n }\n\n function resetCrossSellDialogData() {\n ctrl._crossSellDialogData = {\n 'data': {},\n 'products': {}\n };\n }\n\n function getProductPopupData() {\n return $http.get('/content/' + ENV.locale + '/home-security/cross-sell-popup.json', { 'cache': true }).then(function (response) {\n ctrl._crossSellDialogData.data = response.data.fields;\n });\n }\n\n function getProductCrossSellProductsData(product) {\n return $q.all(product.crossSellPopup.products.map(function (prodKey) {\n return productData.getb2c(prodKey);\n })).then(function (responses) {\n ctrl._crossSellDialogData.products = responses.map(function (response) {\n return response.data.fields;\n });\n });\n }\n\n function openCrossSellPopup(product) {\n $q.all([getProductPopupData(product), getProductCrossSellProductsData(product)]).then(function () {\n ngDialog.open({\n 'template': '/resources/template/html/modules/b2c/components/thankyou-section/templates/cross-sell-popup.html',\n 'className': 'ngdialog-flyout thank-you-popup-bg',\n 'name': 'cross-sell-popup',\n 'controllerAs': '$ctrl',\n 'data': ctrl._crossSellDialogData,\n 'preCloseCallback': function preCloseCallback() {\n ctrl.isPopupOpen = false;\n resetCrossSellDialogData();\n },\n 'controller': ['windowHelperService', function (windowHelperService) {\n this.onLinkClick = function (e) {\n e.preventDefault();\n windowHelperService.goToUrl(e.target.href, true);\n };\n }]\n });\n });\n }\n\n function fetchDlScript() {\n var dl2Tag = $window.document.querySelector('dl2-config');\n if (!dl2Tag) {\n dl2Tag = $window.document.createElement('dl2-config');\n dl2Tag.setAttribute('config-src', './resources/config/dl2.json');\n dl2Tag.setAttribute('languages-src', './content/' + ENV.locale + '/languages.json');\n dl2Tag.setAttribute('assets-src', './resources/template/js/dl2/');\n $window.document.body.appendChild(dl2Tag);\n }\n\n angularLoad.loadScript('./resources/template/js/dl2/dl2-web.js').then(function () {\n angularLoad.loadCSS('./resources/template/js/dl2/main.css');\n }).catch(function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function loadDl2WC() {\n var scriptOnPage = $('#dl2wc').length;\n if (!scriptOnPage) {\n $('').attr({\n 'id': 'dl2wc',\n 'src': '/resources/template/js/dl2-wc/dl2.loader.js',\n 'data-config-src': '/resources/config/dl2.json',\n 'data-config-patch-src': '/content/' + ENV.locale + '/localization/dl2-patch.json',\n 'async': true\n }).appendTo($window.document.body);\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n downloadLinksFactory.$inject = [\"$q\"];\n angular.module('kappGlobal.downloadLinksFactory', ['kappGlobal.config']).factory('downloadLinks', downloadLinksFactory);\n\n function downloadLinksFactory($q) {\n return {\n 'getByApp': getByApp\n };\n\n function getByApp(applications, params) {\n if (angular.isString(applications)) applications = applications.split(',');\n\n var defaultObj = {\n 'applications': applications,\n 'options': {\n 'links_type': 'UpdateBuilds',\n 'locale_selection_type': 'Country',\n 'selected_languages_codes': 'en',\n 'fallback_language_code': 'en',\n 'cpp_id': '',\n 'website_country_code': 'Global',\n 'website_language_code': 'en',\n 'website_fallback_language': '',\n 'lang_locale_link_selection_amount': 'All',\n 'show_release_version_type': null,\n 'use_aux_lang_for_app_plugins': null\n }\n };\n\n if (!params) params = defaultObj;\n\n return $q.resolve({ 'data': [] });\n }\n }\n})();\n'use strict';\n\n(function () {\n errorService.$inject = [\"$log\", \"$http\", \"appHelperService\", \"windowHelperService\", \"VER\"];\n angular.module('kappGlobal.errorService', []).factory('errorService', errorService);\n\n function errorService($log, $http, appHelperService, windowHelperService, VER) {\n 'use strict';\n\n var isStaging = windowHelperService.isStaging();\n\n return {\n 'warn': warn,\n 'logToApi': logToApi\n };\n\n function warn(errorObj) {\n if (isStaging) $log.warn(parseError(errorObj), { 'error': errorObj });\n }\n\n /**\n * Catches http request errors and logs them to the console and Web logger API\n *\n * @param {Object} errorObj\n * @param {Object} webLoggerPayload Object that mutates the default payload(\"data\" property)\n * @param {string=} webLoggerPayload.message Specified by contract\n */\n function logToApi(errorObj) {\n var webLoggerPayload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (errorObj.status === 503) {\n var defaultPayload = {\n 'message': errorObj.config.url + ' ' + errorObj.status,\n 'error': errorObj,\n 'version': VER.version,\n 'country': appHelperService.getISOLocale().id\n };\n\n var reqConfig = {\n 'method': 'POST',\n 'url': 'https://api-router.kaspersky-labs.com/logger2/exceptions',\n 'data': angular.extend(defaultPayload, webLoggerPayload),\n 'headers': {\n 'Content-Type': 'application/json'\n }\n };\n\n $http(reqConfig).catch(function (rej) {\n $log.log('WebLogger service is not available', rej);\n });\n }\n }\n\n // Private methods\n function parseError(errorObj) {\n if (angular.isString(errorObj)) return 'Rejection: ' + errorObj;\n errorObj.config = errorObj.config || {};\n return 'Rejection: ' + errorObj.status + ' ' + errorObj.statusText + ': ' + errorObj.config.url;\n }\n }\n})();\n'use strict';\n\n(function () {\n geoLocationManager.$inject = [\"$location\", \"GEO\", \"windowHelperService\"];\n angular.module('kappGlobal.geoLocationManager', ['kappGlobal.geoLocationConfig']).factory('geoLocationManager', geoLocationManager);\n\n function geoLocationManager($location, GEO, windowHelperService) {\n var geoIpUrlName = 'ipcountry',\n IPCountry = windowHelperService.getIPCountry();\n return {\n 'getVpnProhibitedCountries': getVpnProhibitedCountries(),\n 'getProhibitedDownloadUrl': getProhibitedDownloadUrl(),\n 'getUserGeoIp': getUserGeoIp,\n 'getGeoLocation': getGeoLocation,\n 'isVpnProhibitedCountry': isVpnProhibitedCountry,\n 'isKscProhibitedCountry': isKscProhibitedCountry,\n 'geoIPOverride': geoIPOverride,\n 'showVpnProhibitedMessage': showVpnProhibitedMessage\n };\n\n function getUserGeoIp(url) {\n var geoIp = getGeoIpFromUrl(url);\n geoIp = geoIp || IPCountry || $location.search()[geoIpUrlName] || geoIpWholeAppOverride() || '';\n return geoIp.toLowerCase();\n }\n\n function getVpnProhibitedCountries() {\n return GEO['vpnProhibitedCountries'];\n }\n\n function getKscProhibitedCountries() {\n return GEO['kscProhibitedCountries'];\n }\n\n function getProhibitedDownloadUrl() {\n return GEO.downloadUrls;\n }\n\n function getGeoLocation() {\n return windowHelperService.getGeoLocation() || getUserGeoIp();\n }\n\n /**\n * The function overrides geoIP setting for Marocco website, as it is proxied without full server functionality\n * @returns {string|boolean}\n */\n function geoIpWholeAppOverride() {\n if ((windowHelperService.getDomainName() || '').match('kaspersky.ma')) return 'MA';else return false;\n }\n\n function isVpnProhibitedCountry(geoIp) {\n var userGeoIp = geoIp || getUserGeoIp();\n return _.some(getVpnProhibitedCountries(), function (country) {\n return country.locale === userGeoIp;\n });\n }\n\n function isKscProhibitedCountry(geoIp) {\n var userGeoIp = geoIp || getUserGeoIp();\n return _.some(getKscProhibitedCountries(), function (country) {\n return country.locale === userGeoIp;\n });\n }\n\n function isDownloadUrl(url, downloadUrls) {\n return _.some(downloadUrls, function (downloadUrl) {\n return url.indexOf(downloadUrl) !== -1;\n });\n }\n\n function showVpnProhibitedMessage(url, geoIp) {\n if (angular.isUndefined(url) || url === null) {\n throw new Error('geoLocationManager::showVpnProhibitedMessage:: Url is required param');\n }\n return isVpnProhibitedCountry(geoIp) && isDownloadUrl(url, getProhibitedDownloadUrl());\n }\n\n function geoIPOverride(componentData, downloadVersion) {\n if (angular.isUndefined(componentData)) throw new Error('componentData cannot be undefined');\n if (angular.isUndefined(componentData['geoipLinkOverride'])) return;\n\n var geoIPLinkOverride = componentData['geoipLinkOverride'],\n geoIp = this.getUserGeoIp(),\n localeRegex = new RegExp(geoIp, 'i'),\n overrideDownloadLink = void 0;\n\n // find first geoIP link override match\n for (var i = 0; i < geoIPLinkOverride.length && !overrideDownloadLink; i++) {\n overrideDownloadLink = downloadVersion ? getOverrideLinkWithDownloadVersion(geoIPLinkOverride[i], localeRegex, downloadVersion) : getOverrideLinkWithoutDownloadVersion(geoIPLinkOverride[i], localeRegex);\n }\n if (overrideDownloadLink) componentData.overrideDownloadLink = overrideDownloadLink;\n\n return componentData;\n }\n\n function getOverrideLinkWithoutDownloadVersion(item, localeRegex) {\n if (item['listOfLocales'].match(localeRegex)) {\n return item['overrideLink'];\n }\n return '';\n }\n\n function getOverrideLinkWithDownloadVersion(item, localeRegex, downloadVersion) {\n if (item['listOfLocales'].match(localeRegex) && item['language'] === downloadVersion['language_loc_name']) {\n return item['overrideLink'];\n }\n return '';\n }\n\n // Local helper functions\n function getGeoIpFromUrl(url) {\n if (!url) return;\n return url.split(geoIpUrlName + '=')[1];\n }\n }\n})();\n'use strict';\n\n(function () {\n heightSyncServiceController.$inject = [\"$window\", \"$rootScope\"];\n angular.module('kappGlobal.heightSync', []).factory('heightSyncService', heightSyncServiceController);\n\n function heightSyncServiceController($window, $rootScope) {\n var RESIZE_DEBOUNCE_INTERVAL = 48;\n\n var guidCounter = 0;\n var elWindow = $(window);\n var containers = {};\n var domReady = false;\n var currentWindowWidth = void 0;\n var ngRenderHandler = $rootScope.$on('ngRender', function () {\n ngRenderHandler();\n\n currentWindowWidth = $window.innerWidth;\n domReady = true;\n\n syncContainers();\n });\n\n function getGUID() {\n guidCounter = (guidCounter + 1) % 256;\n\n return guidCounter.toString(16);\n }\n\n elWindow.on('resize', _.debounce(function () {\n var windowWidth = $window.innerWidth;\n\n if (domReady) {\n if (windowWidth !== currentWindowWidth) {\n currentWindowWidth = windowWidth;\n\n syncContainers();\n }\n }\n }, RESIZE_DEBOUNCE_INTERVAL));\n\n function syncContainers() {\n Object.keys(containers).forEach(function (containerId) {\n syncContainerManager(containerId);\n });\n }\n\n function groupResponsiveItems(containerId, itemName) {\n var items = containers[containerId].items;\n var nodes = items[itemName] ? items[itemName].map(function (item) {\n return item.node;\n }) : [];\n var groups = {};\n var elemnentTop = void 0;\n var rect = void 0;\n var finded = void 0;\n\n nodes.forEach(function (node) {\n rect = node.getBoundingClientRect();\n elemnentTop = Math.round(rect.y);\n finded = false;\n\n Object.keys(groups).forEach(function (group) {\n if (!finded) {\n if (Math.abs(+group - elemnentTop) <= 2) {\n finded = true;\n\n groups[group].push(node);\n }\n }\n });\n\n if (!finded) {\n groups[elemnentTop] = [node];\n }\n });\n\n return groups;\n }\n\n function resetResponsiveItems(groups) {\n var groupsNames = Object.keys(groups);\n\n if (groupsNames.length > 1) {\n groupsNames.forEach(function (group) {\n groups[group].forEach(function (node) {\n node.style.setProperty('min-height', '0');\n });\n });\n }\n }\n\n function measureResponsiveItems(groups) {\n var greatestHeights = [];\n var groupsNames = Object.keys(groups);\n\n if (groupsNames.length > 1) {\n groupsNames.forEach(function (group) {\n var greatestHeight = 0;\n var groupNodes = groups[group];\n\n if (groupNodes.length !== 1) {\n groupNodes.forEach(function (node) {\n greatestHeight = Math.max(node.offsetHeight, greatestHeight);\n });\n }\n\n greatestHeights.push(greatestHeight);\n });\n }\n\n return greatestHeights;\n }\n\n function syncResponsiveItems(groups, greatestHeights) {\n var groupsNames = Object.keys(groups);\n\n if (groupsNames.length > 1) {\n groupsNames.forEach(function (group, index) {\n var groupNodes = groups[group];\n\n if (groupNodes.length !== 1) {\n if (greatestHeights[index]) {\n groupNodes.forEach(function (node) {\n node.style.setProperty('min-height', greatestHeights[index] + 'px');\n });\n }\n }\n });\n }\n }\n\n function syncResponsiveContainer(containerId, nested) {\n var container = containers[containerId];\n var nesteds = void 0;\n var groups = void 0;\n var greatestHeights = void 0;\n\n if (container && container.responsive && container.status) {\n nesteds = Object.keys(container.nesteds);\n\n groups = nesteds.map(function (itemName) {\n var result = null;\n\n if (container.nesteds[itemName] === nested) {\n result = groupResponsiveItems(containerId, itemName);\n }\n\n return result;\n });\n\n nesteds.forEach(function (itemName, index) {\n if (container.nesteds[itemName] === nested) {\n resetResponsiveItems(groups[index]);\n }\n });\n\n greatestHeights = nesteds.map(function (itemName, index) {\n var result = null;\n\n if (container.nesteds[itemName] === nested) {\n result = measureResponsiveItems(groups[index]);\n }\n\n return result;\n });\n\n nesteds.forEach(function (itemName, index) {\n if (container.nesteds[itemName] === nested) {\n syncResponsiveItems(groups[index], greatestHeights[index]);\n }\n });\n\n if (nested) {\n syncResponsiveContainer(containerId, false);\n }\n }\n }\n\n function syncContainerManager(containerId) {\n if ($window.requestAnimationFrame) {\n requestAnimationFrame(function () {\n syncContainer(containerId, true);\n });\n } else {\n syncContainer(containerId, true);\n }\n }\n\n function resetItems(containerId) {\n var container = containers[containerId];\n\n if (container && container.status) {\n Object.keys(container.items).forEach(function (itemsName) {\n container.items[itemsName].forEach(function (item) {\n item.node.style.setProperty('min-height', '0');\n });\n });\n }\n }\n\n function calculateItemsHeight(containerId, itemName) {\n var container = void 0;\n var nodes = void 0;\n var items = void 0;\n var greatestHeight = 0;\n\n container = containers[containerId];\n\n if (container && container.status) {\n items = containers[containerId].items[itemName];\n\n if (items) {\n nodes = items.map(function (item) {\n return item.node;\n });\n\n nodes.forEach(function (node) {\n greatestHeight = Math.max(node.offsetHeight, greatestHeight);\n });\n }\n }\n\n return greatestHeight;\n }\n\n function syncItems(containerId, itemName, itemHeight) {\n var container = void 0;\n var nodes = void 0;\n var items = void 0;\n\n container = containers[containerId];\n\n if (container && container.status) {\n items = containers[containerId].items[itemName];\n\n if (items) {\n nodes = items.map(function (item) {\n return item.node;\n });\n\n nodes.forEach(function (node) {\n node.style.setProperty('min-height', itemHeight + 'px');\n });\n }\n }\n }\n\n function syncContainer(containerId, nested) {\n var nesteds = void 0;\n var container = containers[containerId];\n var itemsHeight = void 0;\n\n if (container && container.status) {\n nesteds = Object.keys(container.nesteds);\n\n if (nested) {\n resetItems(containerId);\n }\n\n itemsHeight = nesteds.filter(function (itemName) {\n return container.nesteds[itemName] === nested;\n }).reduce(function (result, itemName) {\n result[itemName] = calculateItemsHeight(containerId, itemName);\n\n return result;\n }, {});\n\n Object.keys(itemsHeight).map(function (itemName) {\n syncItems(containerId, itemName, itemsHeight[itemName]);\n });\n\n if (nested) {\n syncContainer(containerId, false);\n } else {\n syncResponsiveContainer(containerId, true);\n }\n }\n }\n\n function clearContainers(containerId) {\n var update = {};\n\n Object.keys(containers).forEach(function (updateId) {\n if (updateId !== containerId) {\n update[updateId] = containers[updateId];\n }\n });\n\n containers = update;\n }\n\n function clearContainer(containerId) {\n var items = {};\n var added = false;\n\n if (!containers[containerId].status) {\n Object.keys(containers[containerId].items).forEach(function (itemName) {\n if (containers[containerId].items[itemName].length) {\n added = true;\n\n items[itemName] = containers[containerId].items[itemName];\n }\n });\n\n containers[containerId].items = items;\n\n if (!added) {\n clearContainers(containerId);\n }\n }\n }\n\n function addContainer(containerId, isResponsive, hash) {\n containers[containerId] = {\n 'status': true,\n 'items': {},\n 'count': 0,\n 'nesteds': {},\n 'responsive': isResponsive,\n 'hash': hash\n };\n }\n\n function removeContainer(containerId) {\n var container = containers[containerId];\n var newContainers = {};\n var containersKeys = Object.keys(containers);\n\n container.status = false;\n\n clearContainerItems(containerId);\n\n containersKeys.forEach(function (id) {\n if (id !== containerId) {\n newContainers[id] = containers[id];\n }\n });\n\n containers = newContainers;\n }\n\n function addItem(containerId, itemId, itemName, node) {\n var container = containers[containerId];\n var jqElement = void 0;\n\n if (container) {\n container.items[itemName] = container.items[itemName] || [];\n\n container.count++;\n container.items[itemName].push({\n 'id': itemId,\n 'node': node\n });\n\n if (!container.nesteds.hasOwnProperty(itemName)) {\n jqElement = angular.element(node);\n\n container.nesteds[itemName] = jqElement.parents('[data-align-item]').length > 0;\n\n jqElement = null;\n }\n }\n }\n\n function removeItem(containerId, itemId, itemName) {\n var container = containers[containerId];\n var items = void 0;\n var currentCount = void 0;\n var newCount = void 0;\n\n if (container) {\n items = container.items[itemName];\n\n currentCount = items.length;\n container.items[itemName] = items.filter(function (item) {\n return item.id !== itemId;\n });\n newCount = items.length;\n container.count -= currentCount - newCount;\n\n clearContainer(containerId);\n }\n }\n\n function getContainerHash(containerId) {\n var result = '';\n var container = containers[containerId];\n\n if (container) {\n result = container.hash;\n }\n\n return result;\n }\n\n function setContainerHash(containerId, hash) {\n var container = containers[containerId];\n\n if (container) {\n container.hash = hash;\n }\n }\n\n function clearContainerItems(containerId) {\n var container = containers[containerId];\n\n if (container) {\n container.items = {};\n container.count = 0;\n }\n }\n\n return {\n getGUID: getGUID,\n clearContainerItems: clearContainerItems,\n getContainerHash: getContainerHash,\n setContainerHash: setContainerHash,\n addContainer: addContainer,\n removeContainer: removeContainer,\n addItem: addItem,\n removeItem: removeItem,\n syncContainerManager: syncContainerManager\n };\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.httpInterceptor', []).factory('httpInterceptor', httpInterceptor).config(config);\n\n httpInterceptor.$inject = ['$q', '$rootScope'];\n config.$inject = ['$httpProvider'];\n\n function httpInterceptor($q, $rootScope) {\n var hasFired = void 0,\n requestCounter = 0,\n minReached = void 0;\n\n function handleNGReady() {\n if (performance && 'mark' in performance) performance.mark('ngReady');\n $rootScope.$emit('ngReady');\n $rootScope.isReady = true;\n hasFired = true;\n //$rootScope.htmlReady();\n }\n\n return {\n 'request': function request(config) {\n ++requestCounter;\n if (requestCounter > 5) {\n minReached = true;\n }\n return config || $q.when(config);\n },\n\n 'response': function response(_response) {\n if (--requestCounter === 0 && minReached && !hasFired) {\n handleNGReady();\n }\n return _response || $q.when(_response);\n },\n\n 'responseError': function responseError(response) {\n if (--requestCounter === 0 && minReached && !hasFired) {\n handleNGReady();\n }\n return $q.reject(response);\n }\n };\n }\n\n function config($httpProvider) {\n $httpProvider.interceptors.push('httpInterceptor');\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n injectScriptOnceService.$inject = [\"$q\", \"$window\", \"$timeout\"];\n angular.module('kappGlobal.injectScriptOnceService', []).factory('injectScriptOnceService', injectScriptOnceService);\n\n function injectScriptOnceService($q, $window, $timeout) {\n var scriptInjected = {};\n var scriptPending = {};\n var scriptDeferred = {};\n var scriptList = {};\n\n function loadScript(url) {\n var resultDeferred = void 0;\n var scriptTag = void 0;\n\n if (!scriptList[url]) {\n scriptList[url] = true;\n scriptInjected[url] = false;\n scriptPending[url] = false;\n scriptDeferred[url] = $q.defer();\n }\n\n if (!scriptInjected[url]) {\n scriptPending[url] = true;\n scriptInjected[url] = true;\n\n resultDeferred = scriptDeferred[url];\n\n scriptTag = $window.document.createElement('script');\n\n scriptTag.src = url;\n scriptTag.onload = function () {\n scriptPending[url] = false;\n\n resultDeferred.resolve();\n };\n\n $window.document.head.appendChild(scriptTag);\n } else if (scriptPending[url]) {\n resultDeferred = scriptDeferred[url];\n } else {\n resultDeferred = $q.defer();\n\n if ($window.MktoForms2) {\n $timeout(function () {\n resultDeferred.resolve();\n }, 0);\n }\n }\n\n return resultDeferred.promise;\n }\n\n return {\n 'loadScript': loadScript\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n localizationService.$inject = [\"$locale\"];\n angular.module('kappGlobal.localization', ['kappGlobal.currencyConfig']).factory('localizationService', localizationService);\n\n function localizationService($locale) {\n var defaultCurrency = {\n 'decimalSep': $locale.NUMBER_FORMATS.DECIMAL_SEP,\n 'groupSep': $locale.NUMBER_FORMATS.GROUP_SEP\n };\n\n return {\n 'setCurrencyLocale': setCurrencyLocale,\n 'parseRUDays': parseRUDays\n };\n\n /**\n * Set currency formatting overrides on the $locale service\n * @param {object} currencyObj The currency object\n */\n function setCurrencyLocale(currencyObj) {\n if (currencyObj.symbol) $locale.NUMBER_FORMATS.CURRENCY_SYM = currencyObj.symbol;\n $locale.NUMBER_FORMATS.DECIMAL_SEP = currencyObj.decimalSep || defaultCurrency.decimalSep;\n $locale.NUMBER_FORMATS.GROUP_SEP = currencyObj.groupSep || defaultCurrency.groupSep;\n }\n /**\n * This is to apply the correct grammar case for the word 'days' in Russian. Depending on the number, it will end in one of the 3 cases below.\n * The general rule is: from 5 to 20, always use дней; other than that, look at the last digit of the number:\n * 1 => день\n * 2 to 4 => дня\n * 5 to 9, or 0 => дней\n * @param days { number }\n * @return {String} The correct grammar case for 'days' in Russian\n */\n function parseRUDays(days) {\n if (days % 100 < 5 || days % 100 > 20) {\n if (days % 10 === 1) return 'день';\n if (days % 10 > 1 && days % 10 < 5) return 'дня';\n return 'дней';\n } else {\n return 'дней';\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcService', ['kappGlobal.config']).factory('lrcService', [\"$q\", \"$rootScope\", \"$http\", \"ENV\", \"SETUP\", \"appHelperService\", \"errorService\", function lrcService($q, $rootScope, $http, ENV, SETUP, appHelperService, errorService) {\n return {\n 'searchLicense': function searchLicense(serial, queryParams, queryObj) {\n var data = [];\n var locale = ENV.locale;\n if (queryParams) angular.extend(data, queryParams);\n queryObj = queryObj || {};\n queryObj['locale'] = locale;\n queryObj['SERIAL'] = serial;\n\n if (serial) {\n if (SETUP.lrc2Enabled) {\n var lrcUrl = appHelperService.generateParams(queryObj, 'https://validator.kaspersky.com/webapi');\n return $http.get(lrcUrl).then(reformatLrc2Response).catch(function (rejection) {\n errorService.logToApi(rejection, { 'type': 'WebApiLrcUnavailable' });\n throw rejection;\n });\n } else {\n return $http.post(ENV.server + '/_svc/lrc.svc/' + locale + '/licenseinfo?serial=' + serial, data);\n }\n } else {\n var defer = $q.defer();\n defer.reject('LRC Service: no serial');\n return defer.promise;\n }\n }\n };\n\n function reformatLrc2Response(response) {\n var result = response.data['license_info'];\n result['lost_days'] = response.data['lost_days'];\n result.provider = response.data.provider;\n return $q.resolve({ 'data': result });\n }\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n marketoFormService.$inject = [\"$q\", \"injectScriptOnceService\"];\n angular.module('kappGlobal.marketoFormService', []).factory('marketoFormService', marketoFormService);\n\n function marketoFormService($q, injectScriptOnceService) {\n var SIMPLE_DTO_LIBRARY_URL = 'https://latam.kaspersky.com/resources/marketo/teknkl-simpledto-1.0.3.js';\n\n function getMarketoHost(appId) {\n return 'https://app-' + appId + '.marketo.com';\n }\n\n function getMarketoLibraryUrl(appId) {\n return getMarketoHost(appId) + '/js/forms2/js/forms2.min.js';\n }\n\n function loadMarketoFormScript(appId) {\n return injectScriptOnceService.loadScript(getMarketoLibraryUrl(appId));\n }\n\n function loadSimpleDtoScript() {\n return injectScriptOnceService.loadScript(SIMPLE_DTO_LIBRARY_URL);\n }\n\n function loadResurses(appId) {\n var deferred = $q.defer();\n\n $q.all([loadMarketoFormScript(appId), loadSimpleDtoScript()]).then(function () {\n deferred.resolve();\n });\n\n return deferred;\n }\n\n return {\n 'loadResurses': loadResurses,\n 'getMarketoHost': getMarketoHost\n };\n }\n})();\n'use strict';\n\n/*eslint-disable*/\n/*TODO fix this controller if still needed*/\n(function () {\n 'use strict';\n\n maxymiser.$inject = [\"$rootScope\", \"$log\", \"$compile\", \"$http\", \"priceData\", \"$window\"];\n angular.module('kappGlobal.maxymiser', ['kappGlobal.priceData']).factory('maxymiser', maxymiser);\n\n function maxymiser($rootScope, $log, $compile, $http, priceData, $window) {\n return {\n 'readComponentData': readComponentData,\n 'changeComponentData': changeComponentData,\n 'changeComponentTemplate': changeComponentTemplate,\n 'prepareModelForDropdown': prepareModelForDropdown,\n 'prepareModelForRadio': prepareModelForRadio,\n 'fireMMEvent': fireMMEvent\n };\n\n function readComponentData(componentSelector) {\n var res = [];\n if (componentSelector.length > 30) {\n $log.warn('The number of selected items (' + componentSelector.length + ') exceeds the limit of 30');\n return false;\n }\n for (var i = 0; i < componentSelector.length; i++) {\n $log.log($(componentSelector[i]).children()[0]);\n\n var eltScope = angular.element($(componentSelector[i]).children()[0]).scope(),\n eltCtrl = eltScope ? eltScope.$ctrl : undefined;\n\n $log.log(eltCtrl);\n res.push(eltCtrl);\n }\n return res;\n }\n\n function changeComponentData(componentSelector, changesObj) {\n if (componentSelector.length > 30) {\n $log.warn('The number of selected items (' + componentSelector.length + ') exceeds the limit of 30');\n return false;\n }\n for (var i = 0; i < componentSelector.length; i++) {\n var scopeCurrent = angular.element($(componentSelector[i]).children()[0]).scope(),\n scopeNew = {};\n angular.extend(scopeNew, scopeCurrent);\n angular.extend(scopeCurrent.$ctrl, changesObj);\n scopeCurrent.$digest();\n }\n }\n\n function changeComponentTemplate(componentSelector, template) {\n if (componentSelector.length > 30) {\n $log.warn('The number of selected items (' + componentSelector.length + ') exceeds the limit of 30');\n return false;\n }\n\n var _loop = function _loop(i) {\n var element = angular.element(componentSelector),\n scope = angular.element($(componentSelector[i]).children()[0]).scope();\n $http.get('/resources/template/html/modules/_shared/components/buyblock/templates/buyblock-' + template + '.html', { 'cache': true }).then(function (response) {\n element.html(response.data);\n $compile(element.contents())(scope);\n });\n };\n\n for (var i = 0; i < componentSelector.length; i++) {\n _loop(i);\n }\n }\n\n function prepareModelForDropdown(componentSelector) {\n if (componentSelector.length > 30) {\n $log.warn('The number of selected items (' + componentSelector.length + ') exceeds the limit of 30');\n return false;\n }\n\n for (var i = 0; i < componentSelector.length; i++) {\n var _scope = angular.element($(componentSelector[i]).children()[0]).scope();\n setDropdownValues(_scope);\n _scope.$ctrl.setCurrentValue = setCurrentValueDropdown;\n _scope.$digest();\n }\n }\n\n function prepareModelForRadio(componentSelector) {\n if (componentSelector.length > 30) {\n $log.warn('The number of selected items (' + componentSelector.length + ') exceeds the limit of 30');\n return false;\n }\n\n for (var i = 0; i < componentSelector.length; i++) {\n var _scope2 = angular.element($(componentSelector[i]).children()[0]).scope();\n setRadioValues(_scope2);\n _scope2.$ctrl.setCurrentValue = setCurrentValueRadio;\n _scope2.$digest();\n }\n }\n\n function setDropdownValues(scope) {\n var ctrl = scope.$ctrl;\n ctrl.packArr = [];\n ctrl.termArr = [];\n if (angular.isObject(ctrl.priceList)) {\n var aFlag = false;\n ctrl.priceList.forEach(function (item) {\n if (ctrl.priceList[0].autorenew != item.autorenew) aFlag = true;\n if (ctrl.packArr.indexOf(item.pack) === -1) ctrl.packArr.push(item.pack);\n if (ctrl.termArr.indexOf(item.term) === -1) ctrl.termArr.push(item.term);\n });\n\n // if we have only one autorenew and it doesn't match the default one\n if (aFlag == false) {\n ctrl.showAR = false;\n ctrl.defaultAutorenew = ctrl.priceList[0].autorenew;\n }\n // when we provided with a number for licenes convert it to string like \"1 device\" for LRC\n if (ctrl.selectedPack && ctrl.selectedPack.length < 4) {\n for (var i = 0; i < ctrl.packArr.length; i++) {\n if (parseInt(ctrl.packArr[i]) === ctrl.selectedPack) {\n ctrl.selectedPackString = ctrl.packArr[i];\n break;\n }\n }\n }\n // when we provided with a number for terms convert it to string like \"2 years\" for LRC\n if (ctrl.selectedTerm && ctrl.selectedTerm.length < 4) {\n for (var _i = 0; _i < ctrl.termArr.length; _i++) {\n if (parseInt(ctrl.termArr[_i]) === ctrl.selectedTerm) {\n ctrl.selectedTermString = ctrl.termArr[_i];\n break;\n }\n }\n }\n\n ctrl.packValue = ctrl.selectedPackString || ctrl.packArr[0];\n ctrl.termValue = ctrl.selectedTermString || ctrl.termArr[0];\n ctrl.autorenew = ctrl.selectedAutorenew || ctrl.defaultAutorenew;\n // Emit Buyblock ready event to currency selector\n $rootScope.buyBlockReady();\n\n ctrl.setCurrentValue();\n }\n }\n\n function setCurrentValueDropdown() {\n var _this = this;\n\n var valueFound = false;\n for (var i in this.priceList) {\n if (this.priceList[i].pack == this.packValue && this.priceList[i].term == this.termValue && this.priceList[i].autorenew == this.autorenew) {\n this.price_id = this.priceList[i].id;\n this.product_id = this.priceList[i].product_id;\n this.currentValue = this.priceList[i];\n valueFound = true;\n }\n }\n if (!valueFound) {\n //Checking for a value with the opposite autorenewal setting\n for (var _i2 in this.priceList) {\n if (this.priceList[_i2].pack == this.packValue && this.priceList[_i2].term == this.termValue && this.priceList[_i2].autorenew == !this.autorenew) {\n this.price_id = this.priceList[_i2].id;\n this.product_id = this.priceList[_i2].product_id;\n this.currentValue = this.priceList[_i2];\n this.autorenew = !this.autorenew;\n break;\n }\n }\n }\n // if(!calledFromOtherBuyblock) this.valueToSet = {term:this.termValue,pack:this.packValue,autorenew:this.autorenew};\n\n if (this.product_id != undefined && this.price_id != undefined) {\n priceData.getCartLink(this.product_id, this.price_id, this.purchaseType, '', '', this['buy_link']).then(function (response) {\n _this.buyLink = response.data;\n }).catch(function (response) {\n $log.warn(response);\n _this.buyLink = 'Oops! Something went wrong';\n });\n } else {\n this.buyLink = 'Oops! Something went wrong';\n }\n }\n\n function setRadioValues(scope) {\n var ctrl = scope.$ctrl;\n ctrl.cutPriceList = [];\n ctrl.selectedValue = {};\n\n if (angular.isObject(ctrl.priceList)) {\n var aFlag = false;\n ctrl.priceList.forEach(function (item, i) {\n if (ctrl.priceList[0].autorenew != item.autorenew) aFlag = true;\n ctrl.cutPriceList[i] = {\n 'pack': item.pack,\n 'term': item.term,\n 'price': item.price,\n 'autorenew': item.autorenew\n };\n });\n // if we have only one autorenew and it doesn't match the default one\n // if(this.defaultAutorenew != aFlag) {\n // this.defaultAutorenew = aFlag;\n // }\n if (aFlag == false) {\n ctrl.showAR = false;\n ctrl.defaultAutorenew = ctrl.priceList[0].autorenew;\n }\n ctrl.cutPriceList = ctrl.cutPriceList.sort(function (a, b) {\n return parseInt(a.pack) - parseInt(b.pack);\n });\n\n var tempObj = [];\n var tempPrice = [];\n var rememberPack = ctrl.cutPriceList[0].pack;\n ctrl.cutPriceList.forEach(function (item, i) {\n\n if (item.pack == rememberPack) {\n tempObj.push(item);\n if (i == ctrl.cutPriceList.length - 1) {\n tempObj.sort(function (a, b) {\n return parseInt(a.term) - parseInt(b.term);\n });\n tempObj.forEach(function (item) {\n tempPrice.push(item);\n });\n tempObj = [];\n }\n } else {\n tempObj.sort(function (a, b) {\n return parseInt(a.term) - parseInt(b.term);\n });\n tempObj.forEach(function (item) {\n tempPrice.push(item);\n });\n tempObj = [];\n tempObj.push(item);\n\n if (i === ctrl.cutPriceList.length - 1) {\n tempPrice.push(item);\n }\n }\n rememberPack = item.pack;\n });\n\n ctrl.cutPriceList = tempPrice;\n\n if (ctrl.product.bbSettings) {\n if (ctrl.product.bbSettings.selectedPack) {\n for (var i in ctrl.cutPriceList) {\n if (parseInt(ctrl.cutPriceList[i].pack) == ctrl.product.bbSettings.selectedPack) {\n ctrl.selectedPack = ctrl.cutPriceList[i].pack;\n }\n }\n }\n if (ctrl.product.bbSettings.selectedTerm) {\n for (var _i3 in ctrl.cutPriceList) {\n if (parseInt(ctrl.cutPriceList[_i3].term) == ctrl.product.bbSettings.selectedTerm) {\n ctrl.selectedTerm = ctrl.cutPriceList[_i3].term;\n }\n }\n }\n }\n\n ctrl.selectedValue.pack = ctrl.selectedPack || ctrl.cutPriceList[0].pack;\n ctrl.selectedValue.term = ctrl.selectedTerm || ctrl.cutPriceList[0].term;\n ctrl.autorenew = ctrl.defaultAutorenew;\n ctrl.selectedValue = JSON.stringify(ctrl.selectedValue);\n // Emit Buyblock ready event to currency selector\n $rootScope.buyBlockReady();\n\n ctrl.setCurrentValue();\n }\n }\n\n function setCurrentValueRadio() {\n var _this2 = this;\n\n this.selectedValueObject = JSON.parse(this.selectedValue);\n for (var i in this.priceList) {\n if (this.priceList[i].pack == this.selectedValueObject.pack && this.priceList[i].term == this.selectedValueObject.term && this.priceList[i].autorenew == this.autorenew) {\n this.price_id = this.priceList[i].id;\n this.product_id = this.priceList[i].product_id;\n this.currentValue = this.priceList[i];\n }\n }\n this.setBuyblockValueByProduct({ 'product': this.productShortName, 'term': this.selectedValueObject.term, 'pack': this.selectedValueObject.pack, 'autorenew': this.autorenew });\n priceData.getCartLink(this.product_id, this.price_id, this.purchaseType, this.buyLink).then(function (response) {\n _this2.buyLink = response.data;\n }).catch(function (response) {\n $log.warn(response);\n _this2.buyLink = 'Oops! Something went wrong';\n });\n }\n\n function fireMMEvent() {\n var mmDOMReady = $window.document.createEvent('Event');\n mmDOMReady.initEvent('mmDOMReady', true, true);\n $window.document.dispatchEvent(mmDOMReady);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n messageFormatService.$inject = [\"$window\", \"angularLoad\", \"$locale\"];\n angular.module('kappGlobal.messageFormat', []).factory('messageFormatService', messageFormatService);\n\n /**\n * MessageFormat service, lazy loads the dependency provides compile feature.\n *\n * https://messageformat.github.io/messageformat/\n */\n function messageFormatService($window, angularLoad, $locale) {\n\n var messageFormatLoad = angularLoad.loadScript('resources/template/js/messageformat.js').then(function () {\n return new $window.MessageFormat($locale.localeID);\n });\n\n return {\n compile: compile\n };\n\n /**\n * @param {Object} format object to compile\n * @return {Promise} MessageFormat compiled format\n */\n function compile(format) {\n return messageFormatLoad.then(function (messageFormat) {\n return messageFormat.compile(format);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n ngRenderAnchorScrollService.$inject = [\"$timeout\", \"$rootScope\", \"$anchorScroll\"];\n angular.module('kappGlobal.ngRenderAnchorScroll', []).factory('ngRenderAnchorScrollService', ngRenderAnchorScrollService).run([\"ngRenderAnchorScrollService\", function (ngRenderAnchorScrollService) {\n ngRenderAnchorScrollService.initialize();\n }]);\n\n function ngRenderAnchorScrollService($timeout, $rootScope, $anchorScroll) {\n var ngRenderWatcher = void 0;\n\n function ngRenderHandler() {\n $timeout($anchorScroll, 0);\n }\n\n function initialize() {\n ngRenderWatcher = $rootScope.$on('ngRender', ngRenderHandler);\n }\n\n $rootScope.$on('$destroy', function () {\n if (ngRenderWatcher) {\n ngRenderWatcher();\n }\n });\n\n return {\n initialize: initialize\n };\n }\n})();\n'use strict';\n\n(function () {\n osDetectService.$inject = [\"$location\"];\n angular.module('kappGlobal.osDetect', []).factory('osDetectService', osDetectService);\n\n function osDetectService($location) {\n\n return {\n 'getCurrentOs': getCurrentOs,\n 'getCurrentOsHash': getCurrentOsHash,\n 'findOSInArray': findOSInArray\n };\n\n function getCurrentOsHash() {\n return $location.hash();\n }\n\n function findOSInArray(array, item) {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === item) return i;\n }\n return -1;\n }\n\n function getCurrentOs(hash) {\n var OSDetected = {\n 'device': {\n 'type': 'pc',\n 'subDevice': {\n 'os': ''\n }\n }\n };\n\n if (hash === 'pc' || hash === 'mac' || hash === 'mobile' || hash === 'ios' || hash === 'android' || hash === 'all') {\n\n // populate return value if hash of device is set and used as a parameter\n\n OSDetected.device.type = hash;\n } else {\n var os = navigator.platform;\n\n // otherwise detect os\n\n if (navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i)) {\n OSDetected.device.type = 'mobile';\n\n if (navigator.userAgent.match(/Android/i)) {\n OSDetected.device.subDevice.os = 'android';\n }\n\n if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i)) {\n OSDetected.device.subDevice.os = 'ios';\n }\n }\n\n if (os.indexOf('Win') !== -1) {\n OSDetected.device.type = 'pc';\n } else if (os.indexOf('Mac') !== -1) {\n OSDetected.device.type = 'mac';\n }\n }\n\n return OSDetected;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n pageInfoService.$inject = [\"$http\", \"ENV\"];\n angular.module('kappGlobal.pageInfoModule', ['kappGlobal.config']).factory('pageInfoService', pageInfoService);\n\n function pageInfoService($http, ENV) {\n var pageInfoUrl = ENV.server + '/_svc/page/';\n return {\n 'ipInfo': ipInfo\n };\n\n function ipInfo(url, languages) {\n url = encodeURIComponent(url) || '';\n languages = languages || '';\n\n return $http.get(pageInfoUrl + 'ipinfo?url=' + url + '&languages=' + languages, { 'cache': true });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n pdcProxyService.$inject = [\"$http\"];\n angular.module('kappGlobal.pdcProxyService', []).factory('pdcProxyService', pdcProxyService);\n\n function pdcProxyService($http) {\n var pdcProxyUrl = 'https://api-router.kaspersky-labs.com/pcp/PdcProxy';\n\n return {\n 'getPackage': getPackage\n };\n\n function getPackage(params) {\n return $http.post(pdcProxyUrl + '/downloadurl', params);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n priceDataFactory.$inject = [\"$http\", \"$rootScope\", \"$q\", \"$window\", \"buyBlockHelperService\", \"ENV\", \"tracking\", \"currencyManager\", \"appHelperService\"];\n angular.module('kappGlobal.priceData', ['kappGlobal.config']).factory('priceData', priceDataFactory);\n\n function priceDataFactory($http, $rootScope, $q, $window, buyBlockHelperService, ENV, tracking, currencyManager, appHelperService) {\n var serverUrlPriceService = ENV.server + '/_svc/price.svc/';\n if (currencyManager.pl2Enabled()) serverUrlPriceService = 'https://api-router.kaspersky-labs.com/offer/';\n var PL2_MASTER_PARTNER_ID_NAME = 'pl2MasterPartnerId';\n var PL2_MASTER_PARTNER_TIME_NAME = 'pl2MasterPartnerExpiredTime';\n\n return {\n 'currency': currency,\n 'estore': estore,\n 'getPrice': getPrice,\n 'getCartLink': getCartLink,\n 'products': products,\n 'purchase': purchase,\n 'info': info,\n 'getPartnerEstore': getPartnerEstore,\n 'getPartnerUrl': getPartnerUrl\n };\n\n function currency() {\n var locale = $rootScope.currencyLocale || ENV.locale;\n return $http.get('' + serverUrlPriceService + locale + '/currency/list', { 'cache': true });\n }\n\n function estore() {\n var locale = $rootScope.currencyLocale || ENV.locale;\n return $http.get('' + serverUrlPriceService + locale + '/estore/list/all', { 'cache': true });\n }\n\n function info(productName) {\n var purchaseType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Purchase';\n var estore = arguments[2];\n\n var locale = $rootScope.currencyLocale || ENV.locale;\n productName = encodeURIComponent(productName);\n estore = encodeURIComponent(estore);\n return $http.get('' + serverUrlPriceService + locale + '/product/info?name=' + productName + '&ptype=' + purchaseType + '&estore=' + estore, { 'cache': true });\n }\n\n function getPrice(productName, purchaseType, estore) {\n purchaseType = purchaseType || 'Purchase';\n estore = estore || '';\n productName = encodeURIComponent(productName);\n estore = encodeURIComponent(estore);\n var url = getPriceUrl(purchaseType, productName, estore);\n if (currencyManager.pl2Enabled()) {\n return $http.get(url, { 'cache': true, 'withCredentials': true }).then(handlePl2Response);\n } else {\n return $http.get(url, { 'cache': true });\n }\n }\n\n function getCartLink(product_id, price_id, purchaseType, productName, resellerOverride, buyLink) {\n if (currencyManager.pl2Enabled()) {\n return $q.resolve({ 'data': buyLink });\n }\n\n var url = getCartLinkUrl(purchaseType, product_id, price_id, productName, resellerOverride);\n return $http.get(url, { 'cache': true });\n }\n\n function products() {\n var locale = $rootScope.currencyLocale || ENV.locale;\n return $http.get('' + serverUrlPriceService + locale + '/product/list', { 'cache': true });\n }\n\n function purchase() {\n var locale = $rootScope.currencyLocale || ENV.locale;\n return $http.get('' + serverUrlPriceService + locale + '/product/list', { 'cache': true });\n }\n\n function getPartnerEstore(id) {\n var locale = $rootScope.currencyLocale || ENV.locale;\n return $http.get('' + serverUrlPriceService + locale + '/estore/partnerId?id=' + id, { 'cache': true });\n }\n\n function getPartnerUrl(id) {\n var locale = $rootScope.currencyLocale || ENV.locale;\n return $http.get('' + serverUrlPriceService + locale + '/partner/portalUrl?id=' + id, { 'cache': true });\n }\n\n // Helper methods\n function getCartLinkUrl(purchaseType, productId, priceId, productName, resellerOverride) {\n var locale = $rootScope.currencyLocale || ENV.locale,\n storeArgs = tracking.formatQueryString('', buyBlockHelperService.hasPurchaseAsPurchaseType(purchaseType), resellerOverride, productName),\n productCheckoutUrl = '' + serverUrlPriceService + locale + '/product/checkout?id=' + productId + '&price_id=' + priceId + '&store_args=' + storeArgs;\n return productCheckoutUrl;\n }\n\n function getPriceUrl(purchaseType, productName, estore) {\n var locale = $rootScope.currencyLocale || ENV.locale;\n var defaultPurchaseUrl = '',\n serial = $rootScope.kaspersky.serialNumber,\n minPack = $rootScope.kaspersky.verdictMinPack,\n partnerid = $rootScope.kaspersky.verdictPartnerId,\n sessionPartner = '',\n sessionPartnerStorage = $window.localStorage.getItem(PL2_MASTER_PARTNER_ID_NAME),\n pl2Timestamp = $window.localStorage.getItem(PL2_MASTER_PARTNER_TIME_NAME),\n curDate = appHelperService.searchParam('curdate'),\n pl2PurchaseType = purchaseType,\n currencyObj = currencyManager.getCurrentCurrency();\n\n if (pl2Timestamp && parseInt(pl2Timestamp, 10) >= Date.now()) {\n sessionPartner = sessionPartnerStorage;\n }\n\n if (currencyManager.pl2Enabled()) {\n var storeArgs = tracking.formatQueryString('', buyBlockHelperService.hasPurchaseAsPurchaseType(purchaseType), '', productName);\n if (purchaseType === 'Renewal') pl2PurchaseType = 'renew'; // PL2 uses \"renew\" instead of \"renewal\" as purchasetype value\n defaultPurchaseUrl = '' + serverUrlPriceService + currencyObj.priceListLocale + '/price/' + pl2PurchaseType + '?product=' + productName + '&estore=' + estore + '&store_args=' + storeArgs;\n if (purchaseType === 'Renewal') defaultPurchaseUrl = appHelperService.generateParams({ 'minPack': minPack }, defaultPurchaseUrl);\n defaultPurchaseUrl = appHelperService.generateParams({ 'partnerid': partnerid, 'curdate': curDate,\n 'session_partner': sessionPartner, 'locale': locale }, defaultPurchaseUrl);\n } else {\n defaultPurchaseUrl = '' + serverUrlPriceService + locale + '/product/price?name=' + productName + '&ptype=' + purchaseType + '&estore=' + estore + '&locale=' + locale;\n if (purchaseType === 'Renewal' && serial) defaultPurchaseUrl = defaultPurchaseUrl + '&serial=' + serial;\n }\n return defaultPurchaseUrl;\n }\n\n function handlePl2Response(response) {\n var data = response.data.products[0].options;\n var productName = encodeURIComponent(response.data.products[0].product_name);\n data.map(function (priceOption) {\n priceOption.id = appHelperService.generateId('pricesFor' + productName);\n if (!priceOption.term) {\n priceOption.term = [+priceOption['term_duration'], priceOption['term_name']].join(' ');\n }\n });\n return $q.resolve({ 'data': data });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.productData', []).factory('productData', [\"$http\", \"ENV\", function ($http, ENV) {\n return {\n 'getb2c': function getb2c(product) {\n return $http.get('content/' + ENV.locale + '/home-security/products/' + product + '/' + product + '.json', { 'cache': true });\n },\n 'getvsb': function getvsb(product) {\n return $http.get('content/' + ENV.locale + '/small-business-security/products/' + product + '/' + product + '.json', { 'cache': true });\n },\n 'getsmb': function getsmb(product) {\n return $http.get('content/' + ENV.locale + '/small-to-medium-business-security/products/' + product + '.json', { 'cache': true });\n },\n 'getcusjsonb2b': function getcusjsonb2b(section, product) {\n return $http.get('content/' + ENV.locale + '/' + section + '/products/' + product + '.json', { 'cache': true });\n }\n };\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n productDownloadHelper.$inject = [\"CURRENCY\"];\n angular.module('kappGlobal.productDownloadHelper', ['kappGlobal.currencyConfig']).factory('productDownloadHelper', productDownloadHelper);\n\n function productDownloadHelper(CURRENCY) {\n return {\n 'constructLocale': constructLocale,\n 'constructUpdateFields': constructUpdateFields,\n 'getApplication': getApplication,\n 'getDownloadLocales': getDownloadLocales,\n 'getDocSettings': getDocSettings,\n 'getFieldsToUpdate': getFieldsToUpdate,\n 'getRegionLocale': getRegionLocale\n };\n\n function getDownloadLocales() {\n return CURRENCY.regions;\n }\n\n function constructLocale(region) {\n if (angular.isUndefined(region)) return {};\n var values = region.locale.split('-');\n return {\n 'language': values[0],\n 'selectedCountryCode': region.selectedCountryCode,\n 'selectedLanguages': region.selectedLanguages\n };\n }\n\n function constructUpdateFields(localeSelectionType, selectedLanguagesCodes, countryCode, languageCode) {\n return {\n 'localeSelectionType': localeSelectionType,\n 'selectedLanguagesCodes': selectedLanguagesCodes,\n 'countryCode': countryCode,\n 'languageCode': languageCode\n };\n }\n\n function getFieldsToUpdate(fields) {\n return {\n 'locale_selection_type': fields.localeSelectionType,\n 'selected_languages_codes': fields.selectedLanguagesCodes.trim(),\n 'website_country_code': fields.countryCode,\n 'website_language_code': fields.languageCode\n };\n }\n\n function getDocSettings(application, docFieldsToUpdate, componentSettings) {\n return {\n 'applications': application,\n 'options': {\n 'links_type': componentSettings.linksType,\n 'locale_selection_type': docFieldsToUpdate.localeSelectionType || 'Country',\n 'selected_languages_codes': getSelectedLanguages(docFieldsToUpdate.selectedLanguages, componentSettings.selectedLanguagesCodes),\n 'fallback_language_code': 'en',\n 'website_country_code': docFieldsToUpdate.selectedCountryCode || 'Global',\n 'website_language_code': docFieldsToUpdate.language || 'en',\n 'website_fallback_language': 'en',\n 'lang_locale_link_selection_amount': null,\n 'show_release_version_type': null,\n 'use_aux_lang_for_app_plugins': null\n }\n };\n }\n\n function getApplication(componentData) {\n if (angular.isUndefined(componentData) || componentData === null) return [];\n var productTaxonomy = componentData['productTaxonomy'];\n if (!productTaxonomy.length) return componentData.product.split(',') || [];\n var productTaxonomyKeys = [];\n productTaxonomy.map(function (product) {\n productTaxonomyKeys.push(product['key']);\n });\n return productTaxonomyKeys;\n }\n\n function getSelectedLanguages(value, fallback) {\n return angular.isDefined(value) ? value : fallback;\n }\n\n function getRegionLocale(region) {\n var regionLocale = region['locale'].split('-');\n return { 'languageCode': regionLocale[0], 'countryCode': regionLocale[1] };\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n softRedirectService.$inject = [\"ENV\", \"$http\", \"$window\", \"sessionStorageService\", \"cookieService\", \"ngDialog\", \"$location\", \"$log\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.softRedirect', []).factory('softRedirectService', softRedirectService);\n\n function softRedirectService(ENV, $http, $window, sessionStorageService, cookieService, ngDialog, $location, $log, appHelperService, errorService) {\n var storageKey = 'soft-redirect-config';\n var cookieCancelKey = 'showLocalPopup';\n\n return {\n initialize: initialize\n };\n\n function process(_data) {\n var data = _data || {};\n var isActive = data && data.isActive && data.isActive === 'true';\n var fullPathRedirect = data && data.fullPathRedirect && data.fullPathRedirect === 'true';\n var IPCountry = $window.IPCountry || '';\n var redirectMap = data.redirectMap || [];\n var redirect = !!isActive && !!IPCountry && _.find(redirectMap, function (item) {\n return ((item || {}).userCountry || []).indexOf(IPCountry) !== -1;\n });\n var cachedCancel = cookieService.get(cookieCancelKey) === 'false';\n var pages = data.pages || [];\n var activePage = pages.indexOf($location.path()) !== -1;\n\n if (redirect && !cachedCancel && (!pages.length || pages.length && activePage)) {\n ngDialog.open({\n 'template': '
\\n
\\n \"\"\\n
\\n
\\n
\\n
{{ngDialogData.redirect.cancelButtonLabelOverride || ngDialogData.data.cancelButtonLabel}}
\\n
{{ngDialogData.redirect.redirectButtonLabelOverride || ngDialogData.data.redirectButtonLabel}}
\\n
\\n
',\n 'plain': true,\n 'className': 'ngdialog-flyout ngdialog-block ngdialog-soft-redirect',\n 'data': {\n data: data,\n redirect: redirect\n },\n 'closeByDocument': false,\n 'preCloseCallback': function preCloseCallback(value) {\n if (value) {\n cookieService.set(cookieCancelKey, false);\n }\n },\n 'controller': ['$scope', function ($scope) {\n $scope.cancel = function () {\n cookieService.set(cookieCancelKey, false);\n\n ngDialog.close($scope.ngDialogData.ngDialogId);\n };\n\n $scope.redirect = function () {\n ngDialog.close($scope.ngDialogData.ngDialogId);\n var stripParams = !(fullPathRedirect || $scope.ngDialogData.redirect.fullPathRedirect === 'true');\n var redirectUrl = parseRedirect($scope.ngDialogData.redirect.redirectLink, fullPathRedirect || $scope.ngDialogData.redirect.fullPathRedirect === 'true');\n location.href = appHelperService.generateParams($location.search(), redirectUrl, stripParams);\n };\n }]\n });\n }\n }\n\n function initialize() {\n var cachedConfig = sessionStorageService.get(storageKey);\n\n if (cachedConfig) {\n process(cachedConfig);\n } else {\n $http.get('/content/' + ENV.locale + '/site-general/local-popup.json', { 'cache': true }).then(function (response) {\n sessionStorageService.set(storageKey, response.data.fields);\n\n process(response.data.fields);\n }).catch(function (rejection) {\n return errorService.warn(rejection);\n });\n }\n }\n\n function parseRedirect(link, fullPathRedirect) {\n if (fullPathRedirect) {\n var urlParserElement = $window.document.createElement('a');\n urlParserElement.href = link;\n if (urlParserElement.pathname.replace(/^\\//, '')) {\n $log.warn('Pathname will be stripped from soft redirect to ensure correct final url');\n }\n return urlParserElement.protocol + '//' + urlParserElement.host + $location.path();\n } else {\n return link;\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n templateVersion.$inject = [\"$http\", \"$q\", \"ENV\", \"sessionStorageService\", \"errorService\"];\n angular.module('kappGlobal.templateVersion', ['kappGlobal.config']).factory('templateVersion', templateVersion);\n function templateVersion($http, $q, ENV, sessionStorageService, errorService) {\n return {\n 'getVer': getVer\n };\n\n function returnCached(cachedData, deferred) {\n deferred.resolve(cachedData);\n return deferred.promise.then(function (cachedData) {\n return cachedData;\n }, function (error) {\n return deferred.reject(error);\n });\n }\n\n function getVer(siteLet, comp, compOverride) {\n var cachedData = sessionStorageService.get('templVer[' + siteLet + ']'),\n deferred = $q.defer();\n\n if (cachedData && !compOverride) {\n returnCached(cachedData, deferred);\n }\n\n var res = '';\n return $http.get('/content/' + ENV.locale + '/' + siteLet + '/' + comp + '.json', { 'cache': true }).then(function (response) {\n res = response;\n if (compOverride) {\n return $http.get('/content/' + ENV.locale + '/' + siteLet + '/' + compOverride + '.json', { 'cache': true }).then(function (responseOverride) {\n if (responseOverride.data.fields.template && responseOverride.data.fields.template !== 'noOverride') {\n res = responseOverride;\n } else if (cachedData) {\n returnCached(cachedData, deferred);\n }\n return res;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n sessionStorageService.set('templVer[' + siteLet + ']', res);\n return res;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n tracking.$inject = [\"$rootScope\", \"localStorageService\", \"cookieService\", \"appHelperService\", \"sessionStorageService\", \"$window\", \"errorService\", \"ENV\", \"currencyManager\"];\n angular.module('kappGlobal.tracking', []).factory('tracking', tracking);\n\n function tracking($rootScope, localStorageService, cookieService, appHelperService, sessionStorageService, $window, errorService, ENV, currencyManager) {\n var adobeParams = ['aclid', 'acregion', 'acaid', 'acipmccid', 'acaiid', 'acmid', 'acbid'];\n var admitadParams = ['admitad_uid', 'admitad_aid'];\n var utmParams = ['utm_source', 'utm_campaign', 'utm_medium'];\n var knownProviders = ['Allsoft', 'Softkey', 'Avangate', 'Digital River', 'Nexway', 'Cleverbridge'];\n var PL2_EXPIRED_TIME = 5 * 24 * 60 * 60 * 1000;\n var PL2_MASTER_PARTNER_ID_NAME = 'pl2MasterPartnerId';\n var PL2_MASTER_PARTNER_TIME_NAME = 'pl2MasterPartnerExpiredTime';\n\n return {\n 'formatQueryString': formatQueryString,\n 'onBuyButtonClick': onBuyButtonClick,\n 'stripBuyLinkParams': stripBuyLinkParams,\n 'setAdobeCampaignValues': setAdobeCampaignValues,\n 'setTrackingCookie': setTrackingCookie,\n 'setAdmitadRefererParams': setAdmitadRefererParams,\n 'trackPageView': buildOmnitureFunctionReadyProxy('trackPageView'),\n 'trackDownload': buildOmnitureFunctionReadyProxy('trackDownload'),\n 'getUtmParams': getUtmParams,\n 'knownProviders': knownProviders\n };\n\n function buildOmnitureFunctionReadyProxy(omnitureFunctionName) {\n var omnitureFunc = function omnitureFunc() {\n for (var _len = arguments.length, data = Array(_len), _key = 0; _key < _len; _key++) {\n data[_key] = arguments[_key];\n }\n\n if ($window[omnitureFunctionName]) {\n return $window[omnitureFunctionName].apply($window, data);\n }\n\n errorService.warn('Omniture not ready - retrying');\n\n var omnitureScript = $window.document.getElementById('js-omniture');\n if (!omnitureScript) {\n var omnitureTag = $window.document.createElement('script');\n omnitureTag.src = 'https://media.kaspersky.com/tracking/omniture/s_code_single_suite.js';\n omnitureTag.id = 'js-omniture';\n omnitureTag.async = true;\n omnitureTag.onload = function () {\n return omnitureFunc.apply(undefined, data);\n };\n $window.document.getElementsByTagName('body')[0].appendChild(omnitureTag);\n }\n };\n\n return omnitureFunc;\n }\n\n /**\n * Generates tracking parameters string based on info collected by the app\n * In case if url is supplied, it's own parameters get validated\n * @param {string} url Url to be processed, may be blank to get parameters only\n * @param {boolean} hasPurchaseAsPurchaseType Flag used to exclude certain parameters based on purchaseType\n * @param {=string} resellerOverride Force reseller info for tracking parameters\n * @param {=string} productName Flag used to exclude certain parameters based on product name\n * @returns {string} Formatted url or set of parameters that can be appended to a url later\n */\n function formatQueryString() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var hasPurchaseAsPurchaseType = arguments[1];\n var resellerOverride = arguments[2];\n var productName = arguments[3];\n\n resellerOverride ? sessionStorageService.set('resellerOverride', resellerOverride) : sessionStorageService.set('resellerOverride', '');\n\n var urlArray = url ? decodeURIComponent(url).match(/(\\w+):\\/\\/([\\w.]+)\\/([\\w.\\-\\s/+]*)(\\?(.*))?(#.*)?$/) : [],\n validatedUrlArray = validateUrlArray(urlArray),\n urlObj = getUrlObject(validatedUrlArray),\n salesTrackingMapping = getSalesTrackingMapping(knownProviders),\n queryStringAppendix = setQueryString(salesTrackingMapping, hasPurchaseAsPurchaseType, productName);\n\n var queryString = '';\n if (urlObj.queryString === '' && queryStringAppendix !== '') queryString = '?' + queryStringAppendix.substr(1);\n if (urlObj.queryString !== '' && queryStringAppendix !== '') queryString = '?' + urlObj.queryString + '&' + queryStringAppendix.substr(1);\n\n return url ? url : encodeURIComponent(queryString + urlObj.hash);\n }\n\n function stripBuyLinkParams(url, stripArr) {\n stripArr = stripArr || getDefaultStripArray();\n // if second parameter is not an array return original value\n if (!angular.isArray(stripArr)) return url;\n if ($rootScope.kaspersky.kpc === 'subaccount') {\n stripArr.push('sn');\n stripArr.push('regKey');\n }\n var arr = [],\n splitUrl = url.split(/(?=[;?&#])/);\n for (var i = 0, length = splitUrl.length; i < length; i++) {\n arr.push(splitUrl[i].split('='));\n }\n return arr.filter(function (item) {\n var modded = item[0].slice(1);\n return stripArr.indexOf(modded) === -1;\n }).map(function (item, index) {\n return item[0] + (index === 0 ? '?' : '') + (angular.isDefined(item[1]) ? '=' + item[1] : '');\n }).join('').replace('??', '?');\n }\n\n /**\n * Adds tracking parameters at the moment of buy button click\n * @param { string } buyLink Url for the user to be sent\n * @param { string } masterPartner Main partner for the locale\n */\n function onBuyButtonClick(buyLink, masterPartner) {\n if (currencyManager.pl2Enabled()) {\n var spage = setParameterValue('spage');\n var params = {\n 'p4s_p_push_subscriber_id': setParameterValue('p4s_p_push_subscriber_id'),\n 'spage': spage,\n 'x-spage': spage,\n 'referer6': spage,\n 'ADDITIONAL_spage': spage\n };\n $window.localStorage.setItem(PL2_MASTER_PARTNER_ID_NAME, masterPartner);\n $window.localStorage.setItem(PL2_MASTER_PARTNER_TIME_NAME, (Date.now() + PL2_EXPIRED_TIME).toString());\n return appHelperService.generateParams(params, buyLink);\n } else {\n return buyLink;\n }\n }\n\n function setTrackingCookie() {\n var searchParam = appHelperService.searchParam('klsiteclass');\n if (searchParam) cookieService.set('klsiteclass', searchParam, 90);\n }\n\n function setAdobeCampaignValues() {\n angular.forEach(adobeParams, function (param) {\n var searchParam = appHelperService.searchParam(param);\n if (searchParam) localStorageService.set(param, searchParam, 60);\n });\n }\n\n function setAdmitadRefererParams() {\n angular.forEach(admitadParams, function (param) {\n var refererParam = appHelperService.searchParam(param);\n if (refererParam) cookieService.set(param, refererParam, 60);\n });\n }\n\n // Helper methods\n function matchProvider(estoreProviders) {\n var defaultProvider = $rootScope.kaspersky.eCommProvider;\n if (angular.isUndefined(estoreProviders) || !estoreProviders.length) return [defaultProvider];\n var array = [];\n estoreProviders.forEach(function (provider) {\n for (var i = 0, length = knownProviders.length; i < length; i++) {\n var item = knownProviders[i],\n matched = provider.match(item);\n if (matched && matched.length && array.indexOf(item) === -1) {\n array.push(item);\n continue;\n }\n if (array.indexOf(defaultProvider) === -1) {\n array.push(defaultProvider);\n }\n }\n });\n return array;\n }\n\n function extendSalesTrackingMapping(salesTrackingMapping, estoreProviders) {\n var providers = matchProvider(estoreProviders);\n providers.forEach(function (item) {\n switch (item) {\n case 'Allsoft':\n case 'Softkey':\n salesTrackingMapping = angular.extend(getSoftKeyObject(), salesTrackingMapping);\n break;\n case 'Avangate':\n salesTrackingMapping = angular.extend(getAvangateObject(), salesTrackingMapping);\n break;\n case 'Digital River':\n salesTrackingMapping = angular.extend(getDigitalRiverObject(), salesTrackingMapping);\n break;\n case 'Nexway':\n salesTrackingMapping = angular.extend(getNexwayObject(), salesTrackingMapping);\n break;\n case 'Cleverbridge':\n salesTrackingMapping = angular.extend(getCleverbridgeObject(), salesTrackingMapping);\n break;\n default:\n salesTrackingMapping = angular.extend(getDigitalRiverObject(), salesTrackingMapping);\n break;\n }\n });\n return salesTrackingMapping;\n }\n\n function getFormattedPageName() {\n // Get the pageName from the kaspersky object, replacing all ' > ' strings with a '_' and all strings\n // formed by non-latin characters, non-cyrillic characters, not numbers and not '_' with a '-'\n if ($rootScope.kaspersky.pageName) return $rootScope.kaspersky.pageName.replace(/ > /g, '_').replace(/[^\\wа-я]+/ig, '-');\n }\n\n function getSalesTrackingMapping(estoreProviders) {\n var salesTrackMap = extendSalesTrackingMapping(getSalesTrackMapDefaultObject(), estoreProviders);\n salesTrackMap = getAdobeCampaignValues(salesTrackMap);\n return salesTrackMap;\n }\n\n function getParamsToSearch() {\n return ['affiliate', 'reseller', 'typnews', 'omcampaign', 'ADDITIONAL_reseller', 'campaign', 'cid', 'referer2'];\n }\n\n function getQueryStringAppendix(queryString, key, value) {\n return queryString + '&' + key + '=' + value;\n }\n\n function getAdobeCampaignValues(salesTrackingMapper) {\n angular.forEach(adobeParams, function (param) {\n salesTrackingMapper[param] = appHelperService.searchParam(param) || localStorageService.get(param);\n });\n return salesTrackingMapper;\n }\n\n function getUrlObject(urlArray) {\n return {\n 'protocol': urlArray[1],\n 'host': urlArray[2],\n 'path': urlArray[3],\n 'queryString': urlArray[5],\n 'hash': urlArray[6]\n };\n }\n\n function getSalesTrackMapDefaultObject() {\n return {\n 'aclid': '',\n 'acregion': '',\n 'acaid': '',\n 'acipmccid': '',\n 'acaiid': '',\n 'acmid': '',\n 'acbid': '',\n 'klsiteclass': setParameterValue('klsiteclass'),\n 'p4s_p_push_subscriber_id': setParameterValue('p4s_p_push_subscriber_id'),\n 'om-site-id': ENV.locale || false,\n 'tracking-id': setParameterValue('trackingId')\n };\n }\n\n function getSoftKeyObject() {\n return {\n 'sn': setParameterValue('sn'),\n 'referer2': setParameterValue('campaign'),\n 'referer6': setParameterValue('spage'),\n 'referer3': setParameterValue('channel'),\n 'referer4': setParameterValue('sku'),\n 'referer5': setParameterValue('admitad_uid'),\n 'regkey': setParameterValue('regKey'),\n 'spage': setParameterValue('spage'),\n 'octoken': setParameterValue('octoken')\n };\n }\n\n function getAvangateObject() {\n return {\n 'sn': setParameterValue('sn'),\n 'ADDITIONAL_reseller': setParameterValue('campaign'),\n 'ADDITIONAL_spage': setParameterValue('spage'),\n 'ADDITIONAL_channel': setParameterValue('channel'),\n 'ADDITIONAL_pnumber': setParameterValue('sku'),\n 'ADDITIONAL_regkey': setParameterValue('regKey'),\n 'ADDITIONAL_sn': setParameterValue('serial'),\n 'octoken': setParameterValue('octoken')\n };\n }\n\n function getDigitalRiverObject() {\n return {\n 'sn': setParameterValue('sn'),\n 'affiliate': setParameterValue('campaign'),\n 'spage': setParameterValue('spage'),\n 'channel': setParameterValue('channel'),\n 'pnumber': setParameterValue('sku'),\n 'regkey': setParameterValue('regKey'),\n 'pgm': setParameterValue('pgm'),\n 'octoken': setParameterValue('octoken')\n };\n }\n\n function getNexwayObject() {\n return {\n 'sn': setParameterValue('sn'),\n 'typnews': setParameterValue('campaign'),\n 'spage': setParameterValue('spage'),\n 'channel': setParameterValue('channel'),\n 'pnumber': setParameterValue('sku'),\n 'regkey': setParameterValue('regKey'),\n 'octoken': setParameterValue('octoken')\n };\n }\n\n function getCleverbridgeObject() {\n return {\n 'sn': setParameterValue('sn'),\n 'x-campaign': setParameterValue('campaign'),\n 'x-spage': setParameterValue('spage'),\n 'x-channel': setParameterValue('channel'),\n 'x-pnumber': setParameterValue('sku'),\n 'regkey': setParameterValue('regKey'),\n 'octoken': setParameterValue('octoken')\n };\n }\n\n function getDefaultStripArray() {\n return ['affiliate', 'typnews', 'reseller', 'spage', 'channel', 'pnumber', 'ADDITIONAL_reseller', 'ADDITIONAL_spage', 'ADDITIONAL_channel', 'ADDITIONAL_pnumber', 'referrer2', 'referrer3', 'referrer4', 'referrer6'];\n }\n\n function setParameterValue(id) {\n var res = '';\n switch (id) {\n case 'campaign':\n res = appHelperService.searchParam(getParamsToSearch()) || cookieService.get('omCampaign') || sessionStorageService.get('resellerOverride') || '';\n break;\n case 'spage':\n res = getFormattedPageName();\n break;\n case 'channel':\n res = $rootScope.kaspersky.verdictChannel || '';\n break;\n case 'sku':\n res = $rootScope.kaspersky.verdictPartNumber || '';\n break;\n case 'regKey':\n res = $rootScope.kaspersky.regKey || '';\n break;\n case 'pgm':\n res = appHelperService.searchParam('pgm') || '';\n break;\n case 'klsiteclass':\n res = cookieService.get('klsiteclass') || '';\n break;\n case 'admitad_uid':\n res = cookieService.get('admitad_uid') || '';\n break;\n case 'sn':\n case 'serial':\n res = $rootScope.kaspersky.serialNumber || '';\n break;\n case 'p4s_p_push_subscriber_id':\n res = cookieService.get('p4s_p_push_subscriber_id') || '';\n break;\n case 'octoken':\n res = $rootScope.kaspersky.providerToken ? encodeURIComponent($rootScope.kaspersky.providerToken) : '';\n break;\n case 'trackingId':\n res = $rootScope.kaspersky.trackingId || '';\n }\n\n return res;\n }\n\n function setQueryString(salesTrackingMapper, hasPurchaseAsPurchaseType, productName) {\n var queryString = '';\n for (var key in salesTrackingMapper) {\n var value = salesTrackingMapper[key];\n var formattedProduct = productName && productName.replaceAll('%20', ' ');\n if (value) {\n if ((key === 'sn' || key === 'regkey' || key === 'ADDITIONAL_sn' || key === 'ADDITIONAL_regkey') && hasPurchaseAsPurchaseType && !(formattedProduct === 'Kaspersky Security Cloud Personal' || formattedProduct === 'Kaspersky Security Cloud Family')) {\n continue;\n }\n\n queryString = getQueryStringAppendix(queryString, key, value);\n }\n }\n return queryString;\n }\n\n function validateUrlArray(urlArray) {\n urlArray = urlArray || [];\n var length = urlArray.length ? urlArray.length : 7;\n for (var i = 1, len = length; i < len; i++) {\n if (angular.isUndefined(urlArray[i])) urlArray[i] = '';\n }\n return urlArray;\n }\n\n function getUtmParams() {\n return utmParams.reduce(function (acc, cur) {\n if (appHelperService.searchParam(cur)) {\n acc[cur] = appHelperService.searchParam(cur);\n return acc;\n }\n }, {});\n }\n }\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.accordion', []);\n})();\n'use strict';\n\najaxSpinner.$inject = [\"$http\"];\nangular.module('kappGlobal.ajaxSpinner', []).directive('ajaxSpinner', ajaxSpinner);\n\nfunction ajaxSpinner($http) {\n return {\n 'restrict': 'ACE',\n 'templateUrl': '/resources/template/html/modules/_shared/components/ajax-spinner/templates/ajax-spinner.html',\n 'link': function link(scope) {\n scope.isLoading = function () {\n return $http.pendingRequests.length > 0;\n };\n\n scope.$watch(scope.isLoading, function (v) {\n if (v) {\n $('#spinner').show();\n } else {\n $('#spinner').hide();\n }\n });\n }\n };\n}\n'use strict';\n\n(function () {\n angular.module('kappGlobal.articlesSection', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.awardsSection', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.awardsCarousel', []);\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.bottomBanner', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.buyblocks', ['kappGlobal.productData', 'kappGlobal.tracking', 'kappGlobal.messageFormat']).directive('buyblockProductShortDesc', function () {\n return {\n 'replace': true, // prevent nesting in an element to avoid side effect on existing css\n 'scope': {\n 'product': '='\n },\n 'template': '

'\n };\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.callbackForm', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.compareTable', ['kappGlobal.directiveData', 'kappGlobal.osDetect']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo', ['duScroll', 'kappGlobal.config', 'kappGlobal.mapper', 'kappGlobal.contentRepoCatConfig', 'kappGlobal.imageManager', 'kappGlobal.caching']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.cookiesRequirement', ['kappGlobal.caching']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.currencySelector', ['kappGlobal.currencyManager']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.customHtml', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.doubleBanner', []);\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.customCarousel', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.downloadBlockFeatured', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.errorAnimation', []).component('errorAnimation', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/error-animation/templates/error-animation.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.downloadBlock', ['kappGlobal.downloadLinksFactory', 'kappGlobal.productData']);\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.eula', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.featureSection', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.featuredProducts', ['kappGlobal.priceData', 'kappGlobal.osDetect']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.featuresGrid', []);\n})();\n'use strict';\n\n(function () {\n\n angular.module('kappGlobal.filters', ['ngSanitize']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.hmc', ['kappGlobal.directiveData', 'kappGlobal.productData', 'kappGlobal.tracking']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.hmcUniversal', ['kappGlobal.directiveData', 'ngDialog']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.kssVerdictHeader', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\nangular.module('kappGlobal.landingPage', []);\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcDisclaimers', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.lrcLong', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.homepageBanner', ['kappGlobal.directiveData', 'kappGlobal.search']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcSerial', ['kappGlobal.directiveData', 'kappGlobal.lrcService', 'ngMessages']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcStepsSec', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcSteps', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.lrcVerdictPage', ['kappGlobal.directiveData', 'kappGlobal.productData']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.malwareStats', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.marketoForm', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.mobileNav', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.nanoBanner', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.newsLetterOptIn', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.newsLetterPopup', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.notificationBarGeo', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.pageHeader', ['kappGlobal.directiveData', 'kappGlobal.env']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.paginationModule', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.arPopup', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.popup', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.premiumServices', ['kappGlobal.directiveData', 'ngSanitize']);\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.productPromo', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.productScriptsInjector', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.productUpdates', ['kappGlobal.directiveData', 'kappGlobal.downloadLinksFactory', 'kappGlobal.productData', 'kappGlobal.productDownloadHelper', 'kappGlobal.geoLocationManager']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.productUpdatesPack', ['kappGlobal.directiveData', 'kappGlobal.productData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.promoSection', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.rating', ['kappGlobal.paginationModule', 'kappGlobal.caching']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.renewAndAbout', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.renewalSteps', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.resourceDocuments', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.rss', ['kappGlobal.config', 'kappGlobal.contentRepo', 'kappGlobal.mapper', 'kappGlobal.imageManager', 'kappGlobal.caching']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.search', ['kappGlobal.config', 'ngSanitize']);\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.siteBar', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.footerGlobal', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.footerGlobalWrapper', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.siteHeader', ['kappGlobal.directiveData', 'kappGlobal.currencyManager']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.socialSharing', ['720kb.socialshare']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.statsWidget', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.statsWidgetNumbers', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.trustpilotReviews', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.tabbedSectionBuyblock', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.videoMarkup', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.vpnProhibitedMessage', ['kappGlobal.geoLocationManager']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.caching', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.dynamicModelBinding', []);\n})();\n'use strict';\n\n/*eslint angular/window-service: 0*/\n(function () {\n 'use strict';\n\n errorHttpInterceptor.$inject = [\"$q\"];\n exceptionHandler.$inject = [\"$log\"];\n angular.module('kappGlobal.errorHandler', []).factory('errorHttpInterceptor', errorHttpInterceptor).factory('$exceptionHandler', exceptionHandler).config(['$httpProvider', httpProvider]);\n\n function errorHttpInterceptor($q) {\n return {\n 'responseError': function responseError(rejection) {\n // if (isProd() && rejection.status !== 404 && !window.customFlag) {\n // Rollbar.error(`Rejection: ${rejection.status} ${rejection.statusText}`, {'error': rejection});\n // }\n return $q.reject(rejection);\n }\n };\n }\n\n function exceptionHandler($log) {\n return function errorCatcherHandler() {\n if (!isProd()) return $log.error.apply($log, arguments);\n // Rollbar.error(exception, {'cause': cause});\n };\n }\n\n function httpProvider($httpProvider) {\n $httpProvider.interceptors.push('errorHttpInterceptor');\n }\n\n function isProd() {\n var isDebug = location.search.split('debug=')[1];\n return !window.location.host.match(/ngdev|ngtst|ngtest|stg|localhost|127.0.0.1/) && !isDebug || isDebug === 'prod';\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.helpers', []);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n compile.$inject = [\"$compile\"];\n angular.module('kappGlobal.helpers').directive('compile', compile);\n\n function compile($compile) {\n return function (scope, element, attrs) {\n scope.$watch(function () {\n return attrs.compile;\n }, function (value) {\n element.html(value);\n $compile(element.contents())(scope);\n });\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.helpers').factory('stringHelper', stringHelper);\n\n function stringHelper() {\n return {\n 'toTitleCase': toTitleCase,\n 'replaceSpamText': replaceSpamText,\n 'replaceDmToSpam': replaceDmToSpam\n };\n }\n\n /**\n * Formats a string to title case. RU requires only the first character of the first word to be title case\n * @param {string} str The string to formata\n * @param {Boolean} isRu Whether the locale is ru-ru or not\n * @return {string} The formatted string\n */\n function toTitleCase(str, isRu) {\n var expression = isRu ? /([\\wа-яА-Я\\s]*)/ : /[\\wа-яА-Я]\\S*/g;\n return str.replace(expression, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n }\n\n function replaceSpamText(text) {\n return caseInsensitiveReplace(text, 'spam', 'dm');\n }\n\n function replaceDmToSpam(text) {\n return caseInsensitiveReplace(text, 'dm', 'spam');\n }\n\n function caseInsensitiveReplace(text, searchMask, replaceMask) {\n var regEx = new RegExp(searchMask, 'ig');\n return text.replace(regEx, replaceMask);\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.helpers').factory('validationHelper', validationHelper);\n\n function validationHelper() {\n return {\n 'isNullOrUndefined': isNullOrUndefined\n };\n\n function isNullOrUndefined(val) {\n return _.isNull(val) || _.isUndefined(val);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.mapper', ['kappGlobal.imageManager']);\n})();\n'use strict';\n\n/**\n * Created by Fedotov_Al on 17.10.2016.\n */\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.ngSrcLocaleHack', []);\n})();\n'use strict';\n\n/*eslint-disable*/\n/* TODO: improve this code + linting*/\n!function (window) {\n var getModule = function getModule(angular) {\n return angular.module('seo', []).run(['$rootScope', function ($rootScope) {\n $rootScope.htmlReady = function () {\n $rootScope.$evalAsync(function () {\n // fire after $digest\n setTimeout(function () {\n // fire after DOM rendering\n if (typeof window.callPhantom === 'function') {\n window.callPhantom();\n }\n }, 0);\n });\n };\n }]);\n };\n if (typeof define === 'function' && define.amd) define(['angular'], getModule);else getModule(angular);\n}(window);\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.imageManager', ['kappGlobal.caching', 'kappGlobal.config']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.storyList', []);\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.preiumService', ['directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.promoComparisonChart', ['kappGlobal.directiveData', 'kappGlobal.osDetect']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about', ['ngSanitize', 'kappGlobal.pageHeader', 'kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2c', ['ngSanitize', 'kappGlobal.rating', 'kappGlobal.directiveData', 'kappGlobal.downloadLinksFactory', 'kappGlobal.productDownloadHelper', 'kappGlobal.productData', 'kappGlobal.geoLocationManager', 'kappGlobal.buyblocks']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2b', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.smb', ['kappGlobal.directiveData', 'kappGlobal.downloadLinksFactory', 'kappGlobal.productData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.vsb', ['kappGlobal.directiveData', 'kappGlobal.downloadLinksFactory', 'kappGlobal.productData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.partners', ['kappGlobal.directiveData']);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutController.$inject = [\"directiveData\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.about').controller('aboutController', aboutController);\n\n function aboutController(directiveData, $element, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n var elementName = $element['context'].localName;\n return directiveData.getByUrl(elementName).then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n b2cController.$inject = [\"directiveData\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.b2c').controller('b2cController', b2cController);\n\n function b2cController(directiveData, $element, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n var elementName = ctrl.contentName || $element['context'].localName;\n return directiveData.getByUrl(elementName).then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n b2bController.$inject = [\"directiveData\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.b2b').controller('b2bController', b2bController);\n\n function b2bController(directiveData, $element, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n var elementName = $element['context'].localName;\n return directiveData.getByUrl(ctrl.resource || elementName).then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n enterpriseController.$inject = [\"directiveData\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('enterpriseController', enterpriseController);\n\n function enterpriseController(directiveData, $element, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n var elementName = ctrl.contentName || ctrl.resource || $element['context'].localName;\n return directiveData.getByUrl(elementName).then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n sharedGetByNameController.$inject = [\"directiveData\", \"$element\", \"errorService\"];\n angular.module('kappGlobal').controller('sharedGetByNameController', sharedGetByNameController);\n\n function sharedGetByNameController(directiveData, $element, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n var elementName = ctrl.contentName || ctrl.resource || $element['context'].localName;\n return directiveData.getByUrl(elementName).then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n alignContainerController.$inject = [\"$scope\", \"$element\", \"$attrs\", \"$window\", \"heightSyncService\"];\n angular.module('kappGlobal').directive('alignContainer', function () {\n return {\n 'restrict': 'A',\n 'controller': alignContainerController\n };\n });\n\n function alignContainerController($scope, $element, $attrs, $window, heightSyncService) {\n var COMPARE_INTERVAL = 112;\n\n var containerId = heightSyncService.getGUID();\n var node = $element.get(0);\n var interval = void 0;\n var currentTextLength = 0;\n var destroyed = false;\n\n $element.attr('data-align-container-id', containerId);\n\n heightSyncService.addContainer(containerId, !!$attrs.alignContainerResponsive, '');\n\n interval = $window.setInterval(function () {\n var textLength = void 0;\n var itemId = void 0;\n var newHash = void 0;\n var nodes = void 0;\n var nodesHash = void 0;\n var containerHash = void 0;\n var nodesChange = void 0;\n\n if (!destroyed) {\n newHash = [];\n nodes = node.querySelectorAll('[data-align-item]');\n nodesHash = [].map.call(nodes, function (node) {\n return node.getAttribute('data-align-item-id');\n }).join('_');\n containerHash = heightSyncService.getContainerHash(containerId);\n nodesChange = containerHash.length !== nodesHash.length || containerHash !== nodesHash;\n\n if (nodesChange) {\n heightSyncService.clearContainerItems(containerId);\n\n [].forEach.call(nodes, function (node) {\n itemId = heightSyncService.getGUID();\n newHash.push(itemId);\n node.setAttribute('data-align-item-id', itemId);\n\n heightSyncService.addItem(containerId, itemId, node.getAttribute('data-align-item'), node);\n });\n\n heightSyncService.setContainerHash(containerId, newHash.join('_'));\n\n if (newHash.length) {\n heightSyncService.syncContainerManager(containerId);\n }\n\n currentTextLength = node.innerHTML.length;\n } else {\n textLength = node.innerHTML.length;\n\n if (currentTextLength !== textLength) {\n currentTextLength = textLength;\n\n heightSyncService.syncContainerManager(containerId);\n }\n }\n }\n }, COMPARE_INTERVAL);\n\n $scope.$on('$destroy', function () {\n destroyed = true;\n\n $window.clearInterval(interval);\n\n heightSyncService.removeContainer(containerId);\n });\n }\n})();\n'use strict';\n\n(function () {\n profilingFormController.$inject = [\"$scope\", \"$window\", \"$element\", \"ngDialog\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal').directive('profilingForm', function () {\n return {\n 'restrict': 'A',\n 'controller': profilingFormController\n };\n });\n function profilingFormController($scope, $window, $element, ngDialog, directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getTranslations();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getTranslations() {\n directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n }, handleRejection);\n }\n\n $element.on('click', function (e) {\n e.preventDefault();\n openMktoPopup();\n });\n\n function openMktoPopup() {\n var dialog = ngDialog.open({\n 'data': ctrl,\n 'template': '/resources/template/html/modules/_shared/components/marketo-form/templates/profiling-form.template.html',\n 'className': 'ngdialog-theme-default',\n 'width': '800px',\n 'controller': ['marketoHelperService', function (marketoHelperService) {\n marketoHelperService.loadMarketo(ctrl.translations.profilingMrktoNum, ctrl.translations.profilingMrktoID, $scope).then(function () {\n MktoForms2.whenRendered(function (form) {\n var submitButtonRow = form.getFormElem().find('.mktoButtonRow');\n var newBtn = submitButtonRow.clone();\n form.getFormElem().append(newBtn);\n submitButtonRow.remove();\n\n form.onSuccess(function () {\n ngDialog.close();\n $window.location.href = $element.context.href;\n });\n });\n });\n }]\n });\n\n dialog.closePromise.then(function () {\n $window.open($element.context.href);\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n repoMapper.$inject = [\"imageManagerService\"];\n angular.module('kappGlobal.mapper', ['kappGlobal.imageManager']).factory('repoMapper', repoMapper);\n\n function repoMapper(imageManagerService) {\n var _categoryNameSplitter = '::';\n\n return {\n 'mapRepositoryLinkFields': mapRepositoryLinkFields,\n 'mapRepositoryHeaderFields': mapRepositoryHeaderFields,\n 'mapBlogFields': mapBlogFields,\n 'mapBlogResourceFields': mapBlogResourceFields,\n 'mapResourcesFields': mapResourcesFields\n };\n\n function mapRepositoryLinkFields(linkResponse, url) {\n return {\n 'body': linkResponse['fields']['body'],\n 'boost': linkResponse['fields']['boost'],\n 'category': mapCategory(linkResponse['fields']['category']),\n 'categoryName': getTitle(linkResponse['fields']['category']),\n 'date_publication_start': linkResponse['fields']['date_publication_start'],\n 'image': imageManagerService.getResourceImage(linkResponse),\n 'thumb': imageManagerService.getResourceThumb(linkResponse),\n 'id': linkResponse['id'],\n 'labels': linkResponse['fields']['labels'],\n 'link': mapLinkFields(linkResponse['fields']['link']),\n 'pubDate': new Date(linkResponse['pubdate']),\n 'repository_type': linkResponse['fields']['repository_type'],\n 'schemaName': linkResponse['schemaName'],\n 'subtitle': linkResponse['fields']['subtitle'],\n 'summary': linkResponse['fields']['summary'],\n 'subcategory': mapCategory(linkResponse['fields']['subcategory']),\n 'subcategoryTitle': getTitle(linkResponse['fields']['subcategory']),\n 'title': linkResponse['fields']['title'],\n 'url': url,\n 'video': linkResponse['fields']['video'],\n 'videoTitle': linkResponse['fields']['video_title'],\n 'isVideoContent': hasContent(linkResponse['fields']['video'])\n };\n }\n\n function mapRepositoryHeaderFields(linkResponse) {\n return {\n 'id': linkResponse['id'],\n 'title': linkResponse['title'],\n 'pubDate': new Date(linkResponse['pubdate']),\n 'schemaName': linkResponse['schemaName'],\n 'headerTitle': linkResponse['fields']['headerTitle'],\n 'headerSubTitle': linkResponse['fields']['headerSubTitle'],\n 'headerDescription': linkResponse['fields']['headerDescription'],\n 'headerBgImg': imageManagerService.getRandomizedImage(linkResponse['fields']['headerBgImg']),\n 'buttons': linkResponse['fields']['buttons'],\n 'menu': linkResponse['fields']['menu'],\n 'filters': linkResponse['fields']['filters']\n };\n }\n\n function mapBlogFields(linkResponse) {\n return {\n 'id': linkResponse['id'],\n 'title': linkResponse['title'],\n 'pubDate': new Date(linkResponse['pubdate']),\n 'schemaName': linkResponse['schemaName'],\n 'blogSectionTitle': linkResponse['fields']['title'],\n 'resources': linkResponse['fields']['resources']\n };\n }\n\n function mapBlogResourceFields(resource) {\n return {\n 'resourceTitle': resource['resourceTitle'],\n 'resourceSubTitle': resource['resourceSubTitle'],\n 'resourceExcerpt': resource['resourceExcerpt'],\n 'resourceExcerptSummary': resource['resourceExcerptSummary'],\n 'resourceImage': imageManagerService.getRandomizedImage(resource['resourceImage']),\n 'resourceImageAlt': resource['resourceImageAlt'],\n 'resourceLogo': imageManagerService.getRandomizedImage(resource['resourceLogo']),\n 'resourceLogoAlt': resource['resourceLogoAlt'],\n 'resourceLink': resource['resourceLink'],\n 'resourceLinkText': resource['resourceLinkText'],\n 'resourceLinkTarget': resource['resourceLinkTarget']\n };\n }\n\n function mapResourcesFields(resource) {\n return {\n 'resourceCategory': resource['resourceCategory'],\n 'resourceTitle': resource['resourceTitle'],\n 'resourceSummary': resource['resourceSummary'],\n 'resourceImage': imageManagerService.getRandomizedImage(resource['resourceImage']),\n 'resourceLink': resource['resourceLink']\n };\n }\n\n function mapCategory(values) {\n var array = [];\n if (!values) return array;\n values.map(function (value) {\n array.unshift(mapContentSubCategoryFields(value));\n });\n return array;\n }\n\n function mapLinkFields(link) {\n if (!link) return {};\n return {\n 'text': link['text'],\n 'link': link['link'],\n 'isExternal': link['isExternal']\n };\n }\n\n function mapContentSubCategoryFields(subcategory) {\n if (!subcategory) return {};\n return {\n 'id': subcategory['id'],\n 'key': subcategory['key'],\n 'title': subcategory['title'],\n 'description': subcategory['description']\n };\n }\n\n function getTitle(value) {\n if (!value || value.length < 1) return '';\n var valueTitle = value[0]['title'],\n splitter = valueTitle.split(_categoryNameSplitter);\n if (splitter.length > 1) {\n valueTitle = splitter[1];\n }\n return valueTitle;\n }\n\n function hasContent(content) {\n return angular.isDefined(content) && content.length > 0;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.accordion').component('accordion', {\n 'bindings': {\n 'resource': '@',\n 'componentData': '<'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/accordion/templates/accordion.template.html',\n 'controller': 'accordionController'\n });\n})();\n'use strict';\n\n(function () {\n accordionController.$inject = [\"directiveData\", \"$element\", \"$timeout\", \"errorService\"];\n angular.module('kappGlobal.accordion').controller('accordionController', accordionController);\n\n function accordionController(directiveData, $element, $timeout, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n if (ctrl.componentData) {\n ctrl.data = ctrl.componentData.fields;\n applyAccordion();\n } else {\n getData().then(applyAccordion);\n }\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'accordion').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function applyAccordion() {\n $timeout(function () {\n $element.find('li > h4, .ent-accordion .accordion-section .accordion-title').click(function () {\n $(this).parent().toggleClass('open');\n $(this).siblings().slideToggle();\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.articlesSection').component('articlesSection', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/articles-section/templates/articles-section.html',\n 'controller': 'articlesSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n articlesSectionController.$inject = [\"directiveData\", \"$sce\", \"errorService\"];\n angular.module('kappGlobal.articlesSection').controller('articlesSectionController', articlesSectionController);\n\n function articlesSectionController(directiveData, $sce, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n ctrl.parseYoutubeUrl = parseYoutubeUrl;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'articles').then(function (response) {\n ctrl.data = response.data.fields;\n setupArticles();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function setupArticles() {\n if (ctrl.data.block_sections && ctrl.data.block_sections[0].article_item_blocks) {\n ctrl.articles = ctrl.data.block_sections[0].article_item_blocks;\n }\n }\n\n function parseYoutubeUrl(url) {\n return $sce.trustAsResourceUrl('https://www.youtube.com/embed/' + url);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.awardsSection').component('awardsSection', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'awardsSectionController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/_shared/components/awards/templates/awards-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n awardsSectionController.$inject = [\"$element\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.awardsSection').controller('awardsSectionController', awardsSectionController);\n\n function awardsSectionController($element, directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'awards-section').then(function (response) {\n ctrl.data = response.data.fields;\n prependComment(response.data.id);\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function prependComment(id) {\n var comment = '';\n $($element).prepend(comment);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.awardsCarousel').component('awardsCarousel', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/awards-carousel/templates/awards-carousel.html',\n 'controller': 'awardsCarouselController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n awardsCarouselController.$inject = [\"directiveData\", \"errorService\", \"$element\", \"$rootScope\", \"$timeout\"];\n angular.module('kappGlobal.awardsCarousel').controller('awardsCarouselController', awardsCarouselController);\n\n function awardsCarouselController(directiveData, errorService, $element, $rootScope, $timeout) {\n var ctrl = this;\n ctrl.$onInit = activate;\n var slickConfig = {\n 'infinite': true,\n 'slidesToShow': 5,\n 'slidesToScroll': 5,\n 'dots': true,\n 'accessibility': false,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'responsive': [{\n 'breakpoint': 1023,\n 'settings': {\n 'slidesToShow': 3,\n 'slidesToScroll': 3,\n 'infinite': true,\n 'dots': true,\n 'arrows': false\n }\n }, {\n 'breakpoint': 769,\n 'settings': {\n 'slidesToShow': 2,\n 'slidesToScroll': 2,\n 'dots': true,\n 'arrows': false\n }\n }, {\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'dots': true,\n 'arrows': false\n }\n }]\n };\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'awards-carousel').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n var ngRender = $rootScope.$on('ngRender', function () {\n startSlick();\n ngRender();\n });\n\n function startSlick() {\n $timeout(function () {\n $element.find('.carousel-body').slick(slickConfig);\n }, 1000);\n }\n }\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.bottomBanner').component('bottomBanner', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/bottom-banner/templates/bottom-banner.html',\n 'controller': 'bottomBannerController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n bottomBannerController.$inject = [\"windowHelperService\", \"directiveData\", \"ENV\", \"errorService\"];\n angular.module('kappGlobal.bottomBanner').controller('bottomBannerController', bottomBannerController);\n\n function bottomBannerController(windowHelperService, directiveData, ENV, errorService) {\n var ctrl = this;\n ctrl.env = ENV.locale;\n ctrl.$onInit = activate;\n ctrl.setBackgroundImage = setBackgroundImage;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n\n function activate() {\n getData();\n }\n\n function getData() {\n if (ctrl.resource) ctrl.resource = ctrl.resource.replace(/cur-locale/, ctrl.env);\n\n return directiveData.getByUrl(ctrl.resource || 'bottom-banner').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function setBackgroundImage() {\n return ctrl.data && ctrl.data.backgroundImage ? '' : 'lightgreen-background';\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.buyblocks').component('buyblockDropdown', {\n 'bindings': {\n 'productShortName': '@productName', //for cases when we only know the name of the product\n 'productInfo': '<', //for cases when we have all product data available\n 'purchaseType': '@',\n 'selectedPack': '@',\n 'selectedTerm': '@',\n 'positionOnPage': '@',\n 'selectedAutorenew': '@',\n 'estore': '@',\n 'symbol': '@',\n 'locale': '@',\n 'buyButtonText': '@',\n 'productBox': '@',\n 'template': '@',\n 'noBoxshot': '@', // does nothing? LT\n 'setBuyblockValueByProduct': '&', // does nothing? LT\n 'valueToSet': '<',\n 'upgradeButton': '@',\n 'highlighted': '@',\n 'type': '@',\n 'kscDisclaimer': '@',\n 'hideProductLinks': '@',\n 'promoline': '@',\n 'countMonthly': '@',\n 'description': '@',\n 'free': '@',\n 'onFormUpdated': '&',\n 'hideTrialButton': '@',\n 'showBbTrialButton': '@',\n 'saveRateText': '@',\n 'savingsPriceType': '@',\n 'disableAutoRenew': '@',\n 'hideArCheckbox': '@',\n 'hideTagline': '@',\n 'hideBv': '@',\n 'buttonText': '@',\n 'showDisclaimer': '@',\n 'getBuyblockSavings': '&',\n 'getBuyblockPriceList': '&',\n 'buyButtonHtmlTop': '<',\n 'buyButtonHtmlBottom': '<',\n 'buyBlockPriceRatePrefix': '<',\n 'buyBlockPriceRatePostfix': '<'\n },\n 'controller': 'buyblockDropdownController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'dropdown';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/_shared/components/buyblock/templates/buyblock-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n(function () {\n 'use strict';\n\n buyblockDropdownController.$inject = [\"$rootScope\", \"$scope\", \"$state\", \"$timeout\", \"$element\", \"ENV\", \"SETUP\", \"appHelperService\", \"directiveData\", \"priceData\", \"productData\", \"windowHelperService\", \"buyblockService\", \"ngDialog\", \"errorService\", \"tracking\", \"currencyManager\"];\n angular.module('kappGlobal.buyblocks').controller('buyblockDropdownController', buyblockDropdownController);\n\n function buyblockDropdownController($rootScope, $scope, $state, $timeout, $element, ENV, SETUP, appHelperService, directiveData, priceData, productData, windowHelperService, buyblockService, ngDialog, errorService, tracking, currencyManager) {\n var ctrl = this;\n ctrl.error = ctrl.error || null;\n ctrl.hidePack = false;\n ctrl.isChecked = '' + SETUP.isChecked;\n ctrl.showAR = '' + SETUP.showAR;\n ctrl.curState = $state.current.parent;\n ctrl.stateName = $state.current.name;\n ctrl.currency = buyblockService.getCurrency(ctrl);\n ctrl.currentValue = {\n 'price': 'no data',\n 'eStore': '/store'\n };\n ctrl.productPricesExist = true;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n ctrl.product = {};\n ctrl.productName = ctrl.productName || '';\n ctrl.productShortName = ctrl.productShortName || '';\n ctrl.asterisk = '';\n ctrl.translations = {};\n ctrl.buyblockData = {\n 'unavailableMsgType': '',\n 'buyblock_not_available_msg': '',\n 'buyblock_not_available_b2b_msg': '', 'b2cDisclaimer': '', 'disclaimer': ''\n };\n ctrl.priceList = [];\n ctrl.packArr = [];\n ctrl.termArr = [];\n ctrl.buyLink = 'no data received yet';\n ctrl.omnitureText = 'Buy';\n ctrl.defaultAutorenew = ctrl.isChecked === 'true';\n ctrl.priceListGroupedBy = { 'term': {}, 'pack': {} };\n ctrl.notAvailableItemsFor = { 'term': {}, 'pack': {} };\n ctrl.isChangeTriggeredByAnotherBuyblock = false;\n\n ctrl.addSalesTrackingParameters = addSalesTrackingParameters;\n ctrl.registerOnce = registerOnce;\n ctrl.setCurrentValue = setCurrentValue;\n ctrl.showARPopup = showARPopup;\n ctrl.sendToBuyUrl = sendToBuyUrl;\n ctrl.getPromoline = getPromoline;\n ctrl.accountDescPopup = accountDescPopup;\n ctrl.getSavings = getSavings;\n ctrl.isPriceSavingDisplayed = isPriceSavingDisplayed;\n ctrl.isPackDisabled = isPackDisabled;\n ctrl.isTermDisabled = isTermDisabled;\n ctrl.hideDisclaimer = hideDisclaimer;\n ctrl.arCheckboxClick = arCheckboxClick;\n ctrl.changePack = changePack;\n ctrl.changeTerm = changeTerm;\n\n var isLRC = appHelperService.stateIncludes('lrc-verdict');\n ctrl.isLrc = isLRC;\n\n // $rootScope destroy events begin\n var currencyChange = $rootScope.$on('currencyChange', handleCurrencyChange),\n arPopupCheck = $rootScope.$on('arPopupCheck', function (event, value) {\n ctrl.autorenew = value;\n setCurrentValue();\n });\n // $rootScope destroy events end\n\n ctrl.$onInit = activate;\n ctrl.$onChanges = handleChanges;\n ctrl.hasTrialButton = hasTrialButton;\n\n function activate() {\n ctrl.locale = ctrl.locale || ENV.locale;\n\n getProductData(ctrl.productShortName);\n getTranslations();\n\n $scope.$on('$destroy', handleScopeDestroyed);\n }\n\n function handleChanges(changesObj) {\n if (changesObj['valueToSet']) {\n handleUpdateCurrentValue(changesObj['valueToSet'].currentValue);\n }\n }\n\n function getPromoline() {\n return ctrl.promoline ? ctrl.promoline : ctrl.buyblockData ? ctrl.buyblockData.promoline : undefined;\n }\n\n function addSalesTrackingParameters(event) {\n if (event) event.preventDefault();\n if (ctrl.error) return;\n\n if (isLRC && ctrl.positionOnPage) {\n var price = ctrl.currentValue.price;\n var price_striked = ctrl.currentValue.price_striked;\n var delta = 0;\n\n if (price_striked) {\n delta = Math.round(100 * (price_striked - price) / price_striked);\n }\n\n buyblockService.trackBBEvent('addToCart', 'ecommerce', 'addToCart', ctrl.positionOnPage + '_' + ctrl.product.shortName + '_' + parseInt(ctrl.packValue, 10) + '_' + parseInt(ctrl.termValue, 10) + '_' + (ctrl.autorenew ? 'AR' : 'MR') + '_' + delta + '%');\n }\n ctrl.priceList.forEach(function (item) {\n if (item.id === ctrl.currentValue.id) {\n ctrl.masterPartner = item.master_partner;\n }\n });\n ctrl.buyLink = tracking.onBuyButtonClick(ctrl.buyLink, ctrl.masterPartner);\n sendToBuyUrl();\n }\n\n function registerOnce(checked) {\n buyblockService.registerOnce(checked, ctrl.defaultAutorenew);\n }\n\n function updateARPopupProduct() {\n if (isLRC) {\n $rootScope.$emit('shoARPopupProduct', {\n 'name': ctrl.product.shortName,\n 'position': ctrl.positionOnPage\n });\n }\n }\n\n function changePack($event) {\n ctrl.setCurrentValue('pack', $event);\n\n if (isLRC && ctrl.positionOnPage) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'selector_devices', ctrl.packValue + '_' + ctrl.positionOnPage + '_' + ctrl.product.shortName);\n }\n }\n\n function changeTerm() {\n ctrl.setCurrentValue('term');\n\n if (isLRC && ctrl.positionOnPage) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'selector_years', ctrl.termValue + '_' + ctrl.positionOnPage + '_' + ctrl.product.shortName);\n }\n }\n\n function showARPopup() {\n updateARPopupProduct();\n\n if (isLRC && ctrl.positionOnPage) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'click_infoAutoRenewal', ctrl.positionOnPage + '_' + ctrl.product.shortName);\n }\n\n buyblockService.showARPopup();\n }\n\n function arCheckboxClick() {\n updateARPopupProduct();\n\n if (isLRC && ctrl.positionOnPage) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'checkbox_autoRenewal', (ctrl.autorenew ? 'on' : 'off') + '_' + ctrl.positionOnPage + '_' + ctrl.product.shortName);\n }\n\n registerOnce(true);\n }\n\n function handleUpdateCurrentValue(valueToSet) {\n var valueIsDifferent = !_.isEqual(valueToSet, {\n 'pack': ctrl.packValue,\n 'term': ctrl.termValue,\n 'autorenew': ctrl.autorenew\n });\n\n if (valueToSet && valueIsDifferent) {\n ctrl.packValue = valueToSet.pack;\n ctrl.termValue = valueToSet.term;\n ctrl.autorenew = valueToSet.autorenew;\n if (ctrl.priceList && ctrl.priceList.length > 0) setCurrentValue();\n }\n }\n\n function setCurrentValue(changedProp) {\n findMatch(changedProp);\n ctrl.renewalAvailable = buyblockService.checkRenewal(ctrl.priceList, ctrl.packValue, ctrl.termValue, false);\n ctrl.getBuyblockSavings({ 'selectedOption': ctrl.currentValue, 'product': ctrl.product.bbSettings, 'component': ctrl.component });\n\n var promise = priceData.getCartLink(ctrl.overrideEstoreID || ctrl.currentValue.product_id, ctrl.currentValue.id, ctrl.purchaseType, ctrl.product.shortName, '', ctrl.currentValue['buy_link']).then(function (response) {\n ctrl.buyLink = response.data;\n }, function (rejection) {\n errorService.warn(rejection);\n ctrl.buyLink = 'Oops! Something went wrong';\n });\n\n // Prevents cyclic buyblock switching of one another and $onChanges() error\n if (!ctrl.isChangeTriggeredByAnotherBuyblock) {\n ctrl.onFormUpdated({\n 'section': 'top',\n 'product': ctrl.product,\n 'values': {\n 'term': ctrl.termValue,\n 'pack': ctrl.packValue,\n 'autorenew': ctrl.autorenew\n }\n });\n } else {\n ctrl.isChangeTriggeredByAnotherBuyblock = false;\n }\n\n setAvailableOptionList(changedProp);\n return promise;\n }\n\n function setAvailableOptionList(prop) {\n if (!prop) return;\n\n // this is to avoid repeating the same logic for term and pack\n // prop is pack|term\n // otherProp is the other value\n var otherProp = prop === 'term' ? 'pack' : 'term',\n propValue = ctrl[prop + 'Value'],\n otherPropValueArr = ctrl[otherProp + 'Arr'],\n availableListForOtherProp = _.uniq(ctrl.priceListGroupedBy[prop][propValue].map(function (i) {\n return i[otherProp];\n }));\n\n ctrl.notAvailableItemsFor[otherProp] = _.difference(otherPropValueArr, availableListForOtherProp).reduce(function (res, pack) {\n return angular.extend(res, _defineProperty({}, pack, true));\n }, {});\n }\n\n function isPackDisabled(value) {\n return ctrl.notAvailableItemsFor.pack[value] === true;\n }\n\n function isTermDisabled(value) {\n return ctrl.notAvailableItemsFor.term[value] === true;\n }\n\n function sendToBuyUrl() {\n return buyblockService.sendToBuyUrl(ctrl.buyLink, ctrl.purchaseType);\n }\n\n function hidePack() {\n if (ctrl.locale === 'ru-ru' && (ctrl.productShortName === 'ksc-family' || ctrl.product && ctrl.product.shortName === 'ksc-family')) {\n ctrl.hidePack = true;\n }\n }\n\n // Private helper Methods\n function buyblockSetup() {\n return directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n var bbSettings = ctrl.productInfo ? ctrl.productInfo.bbSettings : {},\n products = ['kesb-select', 'kesb-advanced', 'ksos', 'cloud', 'cloud-old', 'cloud-plus', 'office-365'];\n\n ctrl.isB2B = _.some(products, function (product) {\n return product === ctrl.product.shortName;\n });\n\n ctrl.buyblockData = angular.extend({}, response.data.fields, bbSettings);\n\n ctrl.disablePackSelect = ctrl.buyblockData.packSelectDisabled === 'True';\n ctrl.disableTermSelect = ctrl.buyblockData.termSelectDisabled === 'True';\n\n ctrl.buyblockData.unavailableMsgType = ''; // this.buyblockData.unavailableMsgType used in ng-switch directive to pick b2b_fallback text if it exists and b2c_fallback if not\n if (ctrl.buyblockData.buyblock_not_available_msg && !ctrl.isB2B) ctrl.buyblockData.unavailableMsgType = 'b2c';\n if (ctrl.buyblockData.buyblock_not_available_b2b_msg && ctrl.isB2B) ctrl.buyblockData.unavailableMsgType = 'b2b';\n checkDisclaimer();\n hidePack();\n });\n }\n\n function checkDisclaimer() {\n var b2bDisclaimer = ctrl.buyblockData.disclaimer || ctrl.buyblockData.smbDisclaimer,\n hideAsteriskOnB2B = ctrl.product && appHelperService.isTrue(ctrl.product.hideAsterisk) && ctrl.isB2B;\n var alwaysShowDisclaimer = ctrl.buyblockData.b2cDisclaimerLogicType && !!ctrl.buyblockData.b2cDisclaimerLogicType.length && ctrl.buyblockData.b2cDisclaimerLogicType[0] === 'always show b2c disclaimer';\n if ($rootScope.kaspersky.verdictSite === 'LRC' && !alwaysShowDisclaimer && (!ctrl.isB2B || ctrl.locale === 'en-us')) return ctrl.disclaimerObj = {};\n\n ctrl.disclaimerObj = ctrl.product && ctrl.product.bbDisclaimer ? { 'disclaimer': ctrl.product.bbDisclaimer, 'asterisk': hideAsteriskOnB2B ? '' : '*' } : buyblockService.checkDisclaimer(ctrl.isB2B, ctrl.buyblockData.b2cDisclaimer, b2bDisclaimer, hideAsteriskOnB2B);\n }\n\n function findMatch(changedProp) {\n var otherProp = changedProp === 'pack' ? 'term' : 'pack';\n var otherPropValueArr = ctrl[otherProp + 'Arr'];\n var matchConfig = {\n 'pack': ctrl.packValue,\n 'term': ctrl.termValue,\n 'autorenew': ctrl.autorenew\n },\n matchIndex = buyblockService.findPriceMatch(ctrl.priceList, matchConfig, false);\n var initialMatchConfig = angular.copy(matchConfig);\n\n // First look if opposite autorenew exists, matchIndex will be set above 0 if success\n if (matchIndex < 0) {\n matchConfig.autorenew = !matchConfig.autorenew;\n matchIndex = buyblockService.findPriceMatch(ctrl.priceList, matchConfig, false);\n }\n\n // Second if no opposite autorenew look if an option with higher value of other prop exists\n if (matchIndex < 0) {\n matchConfig.autorenew = !matchConfig.autorenew;\n\n for (var i = 0; i < otherPropValueArr.length; i++) {\n matchConfig[otherProp] = otherPropValueArr[i];\n matchIndex = buyblockService.findPriceMatch(ctrl.priceList, matchConfig, false);\n if (matchIndex >= 0 && !angular.equals(initialMatchConfig, matchConfig)) {\n ctrl[otherProp + 'Value'] = ctrl.priceList[matchIndex][otherProp];\n setAvailableOptionList(otherProp);\n highlightForcedValueChange(otherProp);\n break;\n }\n }\n }\n // Set the suitable option found during previous checks\n if (matchIndex > -1) {\n ctrl.currentValue = ctrl.priceList[matchIndex];\n }\n\n // In case, if buyblock price was not set, yet we cannot find any suitable match, go default\n if (matchIndex < 0 && ctrl.currentValue.price === 'no data') {\n ctrl.currentValue = ctrl.priceList[0];\n }\n\n // In case if buyblock price was set before, yet user switched to an option without suitable match\n // user will stay at his current option\n }\n\n function highlightForcedValueChange(selectTypeAttr) {\n $element.find('select[' + selectTypeAttr + ']').addClass('highlight');\n $timeout(function () {\n $element.find('select[' + selectTypeAttr + ']').removeClass('highlight');\n }, 1000);\n }\n\n function getTranslations() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n });\n }\n\n function setProductPageLink() {\n ctrl.product.prodPageLink = ctrl.hideProductLinks ? '' : ctrl.product.prodPageLink;\n }\n\n function getProductData(productShortName) {\n if (productShortName) {\n return getCustomProduct(productShortName);\n }\n var productInfo = $scope.$watch('$ctrl.productInfo', function (newV) {\n if (newV) {\n ctrl.product = ctrl.productInfo;\n ctrl.productName = ctrl.productInfo.title;\n setProductPageLink();\n getPriceList();\n productInfo();\n buyblockSetup();\n }\n });\n }\n\n function getCustomProduct(productShortName) {\n return productData.getb2c(productShortName).then(function (response) {\n ctrl.product = response.data.fields;\n ctrl.productName = response.data.fields.title;\n setProductPageLink();\n buyblockSetup();\n }).then(function () {\n getPriceList();\n });\n }\n\n function getPriceList(skipEstore) {\n if (!ctrl.productName) return;\n if (ctrl.purchaseType === 'Free') {\n ctrl.productPricesExist = false;\n return;\n }\n if (!skipEstore) setEStore();\n\n return priceData.getPrice(ctrl.productName, ctrl.purchaseType, ctrl.newEstore || '').then(handlePriceSuccess, handlePriceError);\n }\n\n function handleCurrencyChange() {\n ctrl.currency = $rootScope.currency;\n ctrl.showAR = SETUP.showAR;\n ctrl.isChangeTriggeredByAnotherBuyblock = true;\n getPriceList();\n }\n\n function handlePriceError(rejection) {\n ctrl.productPricesExist = false;\n errorService.warn(rejection);\n }\n\n function handleScopeDestroyed() {\n arPopupCheck();\n currencyChange();\n }\n\n function resetPricingObjectsToDefault() {\n ctrl.packArr = [];\n ctrl.termArr = [];\n ctrl.buyLink = 'no data received yet';\n ctrl.defaultAutorenew = ctrl.isChecked === 'true';\n ctrl.productPricesExist = true;\n }\n\n function handlePriceSuccess(response) {\n setupTracking();\n var bbSettings = ctrl.product.bbSettings;\n\n if (bbSettings.isChecked) ctrl.isChecked = bbSettings.isChecked;\n if (bbSettings.showAR) ctrl.showAR = bbSettings.showAR;\n if (bbSettings.hideArCheckbox.length) {\n ctrl.showAR = bbSettings.hideArCheckbox[0] && bbSettings.hideArCheckbox[0].toLowerCase() !== 'true';\n }\n\n resetPricingObjectsToDefault();\n\n function sortByPropName(prop, a, b) {\n return parseInt(a[prop]) - parseInt(b[prop]);\n }\n\n ctrl.priceList = response.data;\n ctrl.priceList.sort(function (a, b) {\n var res = sortByPropName('pack', a, b);\n return res !== 0 ? res : sortByPropName('term', a, b);\n });\n\n if (!angular.isArray(ctrl.priceList) || !ctrl.priceList.length) {\n if (ctrl.newEstore) {\n errorService.warn('No matches found on ' + ctrl.newEstore + ' for ' + ctrl.productName + '; retrying with default estore');\n delete ctrl.newEstore;\n return getPriceList(true);\n } else {\n errorService.warn('API not available');\n ctrl.productPricesExist = false;\n return false;\n }\n }\n if (ctrl.getBuyblockPriceList) {\n ctrl.getBuyblockPriceList({ 'priceList': ctrl.priceList });\n }\n setupPriceList();\n }\n\n function isPriceSavingDisplayed() {\n var hasCurVal = ctrl.currentValue && ctrl.currentValue.price_striked;\n\n if (isLRC && ctrl.buyblockData.saveRateLRC) ctrl.buyblockData.saveRate = ctrl.buyblockData.saveRateLRC;\n\n return hasCurVal && (ctrl.buyblockData.saveRate || ctrl.buyblockData.saveRateText);\n }\n\n function setEStore() {\n if (ctrl.estore || isLRC) {\n ctrl.newEstore = ctrl.estore;\n if (!currencyManager.pl2Enabled()) setOverrideEstoreID();\n return;\n }\n ctrl.newEstore = ctrl.product.bbSettings.eStore;\n }\n\n function setOverrideEstoreID() {\n priceData.info(ctrl.productName, ctrl.purchaseType, ctrl.newEstore, isLRC).then(function (response) {\n ctrl.overrideEstoreID = response.data && response.data.id;\n if (!ctrl.overrideEstoreID) handleEstoreOverrideError();\n }).catch(function (rejection) {\n errorService.warn(rejection);\n handleEstoreOverrideError();\n });\n }\n\n function handleEstoreOverrideError() {\n directiveData.getPartnerByName(ctrl.newEstore).then(function (response) {\n ctrl.partnerObj = response;\n if (ctrl.partnerObj) ctrl.buyblockData.lrcPartnerUnavailable = ctrl.buyblockData.lrcPartnerUnavailable && ctrl.buyblockData.lrcPartnerUnavailable.replace('#', ctrl.partnerObj.href);\n });\n }\n\n function getCNPackValue() {\n if (ctrl.locale === 'zh-cn' && (ctrl.productShortName === 'kav' || $state.params.productName === 'kav')) {\n return ctrl.packArr[0];\n }\n }\n\n function getUSPackValue() {\n if (ctrl.locale === 'en-us' && (ctrl.productShortName === 'ktsmd' || $state.params.productName === 'ktsmd')) {\n return _.find(ctrl.packArr, function (i) {\n return i === '5 Devices';\n });\n }\n }\n\n function setupPriceList() {\n var hasAutoRenewal = ctrl.priceList.some(function (item) {\n return ctrl.priceList[0].autorenew !== item.autorenew;\n });\n ctrl.packArr = _.uniq(ctrl.priceList.map(function (i) {\n return i.pack;\n }));\n ctrl.termArr = _.uniq(ctrl.priceList.map(function (i) {\n return i.term;\n }));\n var packMonthlyArr = [];\n var packYearlyArr = [];\n\n ctrl.priceList.forEach(function (item) {\n if (item.term_type === 'M') {\n ctrl.monthlyAvailable = true;\n packMonthlyArr.push(item.term);\n } else if (item.term_type === 'Y') {\n packYearlyArr.push(item.term);\n }\n });\n\n ctrl.packMonthlyArr = _.uniq(packMonthlyArr);\n ctrl.packYearlyArr = _.uniq(packYearlyArr);\n\n ctrl.priceListGroupedBy = {\n 'term': _.groupBy(ctrl.priceList, 'term'),\n 'pack': _.groupBy(ctrl.priceList, 'pack')\n };\n\n // if we have only one autorenew and it doesn't match the default one\n if (ctrl.disableAutoRenew === 'true') {\n ctrl.showAR = false;\n ctrl.autorenew = false;\n } else {\n if (!hasAutoRenewal) {\n ctrl.showAR = false;\n ctrl.defaultAutorenew = ctrl.priceList[0].autorenew;\n }\n }\n\n // when we provided with a number for licenses convert it to string like '1 device' for LRC\n if (ctrl.selectedPack) {\n setCustomSelectedPack(ctrl);\n }\n // when we provided with a number for terms convert it to string like '2 years' for LRC\n if (ctrl.selectedTerm && ctrl.productShortName === 'ksec') {\n ctrl.selectedTermString = ctrl.selectedTerm;\n } else if (ctrl.selectedTerm) {\n setCustomSelectedTerm(ctrl);\n }\n\n ctrl.packValue = getCNPackValue() || ctrl.selectedPackString || getUSPackValue() || ctrl.packArr[0];\n ctrl.termValue = ctrl.selectedTermString || ctrl.termArr[0];\n ctrl.autorenew = ctrl.selectedAutorenew === 'true' || ctrl.defaultAutorenew;\n\n // Emit Buyblock ready event to currency selector\n $rootScope.buyBlockReady();\n\n setCurrentValue();\n setAvailableOptionList('pack');\n setAvailableOptionList('term');\n\n updatePriceFormat();\n }\n\n function setCustomSelectedPack(ctrl) {\n var selectedPack = parseInt(ctrl.selectedPack);\n ctrl.selectedPackString = _.find(ctrl.packArr, function (value) {\n return parseInt(value) === selectedPack;\n });\n }\n\n function setCustomSelectedTerm(ctrl) {\n if (ctrl.selectedTerm === '0') ctrl.selectedTerm = 1;\n\n if (ctrl.selectedTerm === '0.5' && ctrl.priceListGroupedBy.term['6 Months']) {\n ctrl.selectedTerm = ctrl.selectedTermString = '6 Months';\n return;\n }\n\n var selectedTermFloat = parseFloat(ctrl.selectedTerm),\n rounded = selectedTermFloat < 1 ? Math.ceil(selectedTermFloat) : Math.floor(selectedTermFloat);\n\n if (ctrl.selectedTerm < 1) {\n ctrl.packMonthlyArr.forEach(function (value) {\n var valueInt = parseInt(value);\n // this is needed for cases where product is in months, and the term would come as 0.08 (30/365)\n // use ceil for numbers < 1 and floor for numbers > 1\n if (valueInt === rounded || valueInt === rounded - 1) {\n ctrl.selectedTermString = value;\n }\n });\n } else {\n ctrl.packYearlyArr.forEach(function (value) {\n var valueInt = parseInt(value);\n if (valueInt === rounded || valueInt === rounded - 1) {\n ctrl.selectedTermString = value;\n }\n });\n }\n }\n\n function setupTracking() {\n if (ctrl.purchaseType === 'Renewal') ctrl.omnitureText = 'Renew';\n if (ctrl.upgradeButton) ctrl.omnitureText = 'Upgrade';\n }\n\n function accountDescPopup() {\n ngDialog.open(buyblockService.ngDialogSettings(ctrl, $scope, {\n 'className': 'ngdialog-plain ngdialog-narrow',\n 'template': '/resources/template/html/modules/b2c/components/kscloud-disclaimers/templates/account-description.html'\n }));\n }\n\n function hasTrialButton() {\n return buyblockService.hasTrialButton(ctrl.product) && !appHelperService.isTrue(ctrl.hideTrialButton);\n }\n\n /**\n * Get savings messaging and value (either custom or default)\n */\n function getSavings(messageType, savingsPriceType, saveRateText) {\n if (ctrl.product) return buyblockService.getSavings(messageType, ctrl.currentValue, ctrl.product.bbSettings, ctrl.buyblockData, saveRateText || ctrl.saveRateText, savingsPriceType || ctrl.savingsPriceType, ctrl.component);\n }\n\n function updatePriceFormat() {\n ctrl.showLabelFR = appHelperService.stateIncludes('lrc-verdict') && ENV.locale === 'fr-fr';\n }\n\n function hideDisclaimer() {\n var isLrcPage = appHelperService.assertStateByName(['lrc-verdict', 'lrc-serial', 'lrc-b2b', 'lrc-b2b-att', 'lrc-b2c', 'lrc-b2c-att', 'lrc-fallback', 'vsb-lrc-closed']),\n isProduct = ctrl.product && ['cloud', 'cloud-old', 'cloud-plus', 'office-365'].indexOf(ctrl.product.shortName) > -1,\n hasDisclaimer = ctrl.disclaimerObj && ctrl.disclaimerObj.disclaimer,\n hideDisclaimer = appHelperService.isTrue(ctrl.product.hideDisclaimerOnLrc);\n\n return isLrcPage && isProduct && hasDisclaimer && hideDisclaimer;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.buyblocks').component('buyblockLrcABTest', {\n 'bindings': {\n 'product': '<',\n 'data': '<',\n 'license': '<',\n 'red': '<'\n },\n 'controller': 'buyblockLrcABTestController',\n 'controllerAs': '$ctrl',\n 'templateUrl': '/resources/template/html/modules/_shared/components/buyblock/templates/buyblock-lrc-a-b-test.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n buyblockLrcABTestController.$inject = [\"ENV\", \"SETUP\", \"directiveData\", \"priceData\", \"errorService\", \"$window\", \"$rootScope\", \"buyblockService\"];\n angular.module('kappGlobal.buyblocks').controller('buyblockLrcABTestController', buyblockLrcABTestController);\n\n function buyblockLrcABTestController(ENV, SETUP, directiveData, priceData, errorService, $window, $rootScope, buyblockService) {\n var ctrl = this;\n var buyBlockReady = false;\n var licenseCount = 0;\n\n ctrl.ui = {\n 'getPriceListIterator': 1,\n 'busy': false,\n 'deviceCounts': [],\n 'showAutoRenew': SETUP.showAR,\n 'autorenewState': SETUP.isChecked === 'true',\n 'showAutoRenewPrice': true\n };\n ctrl.changeARCheckbox = changeARCheckbox;\n ctrl.getCurrentCount = getCurrentCount;\n ctrl.getPriceDiff = getPriceDiff;\n ctrl.handlerTerm = handlerTerm;\n ctrl.extraClick = extraClick;\n ctrl.trackExtraHover = trackExtraHover;\n ctrl.showARPopup = showARPopup;\n ctrl.autorenewCheckboxClick = autorenewCheckboxClick;\n ctrl.trackBenefit = trackBenefit;\n ctrl.trackExtraLabelClick = trackExtraLabelClick;\n ctrl.selectVariant = selectVariant;\n ctrl.$onInit = activate;\n ctrl.loadBuyLink = loadBuyLink;\n ctrl.buyblockData = {};\n\n $rootScope['$on']('currencyChange', getPriceList);\n\n $rootScope['$on']('arPopupCheck', function (event, value) {\n if (value && ctrl.ui.showAutoRenew) {\n ctrl.ui.autorenewState = value;\n } else {\n ctrl.ui.autorenewState = false;\n }\n\n selectPrices();\n });\n\n function trackExtraLabelClick() {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'click_shields', ctrl.product.shortName);\n }\n\n function trackBenefit($event) {\n var node = $event.target.querySelector('.lrc-bb-a-b-test-benefit-value');\n\n if (node) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'hover_hints', node.innerText + '_' + ctrl.product.shortName);\n }\n }\n\n function extraClick(index, extra) {\n trackExtraClick(extra);\n showGallery(index);\n }\n\n function trackExtraHover(extra) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'hover_info', extra + '_' + ctrl.product.shortName);\n }\n\n function trackExtraClick(extra) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'click_info', extra + '_' + ctrl.product.shortName);\n\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'show_infoPopup', extra + '_' + ctrl.product.shortName);\n }\n\n function autorenewCheckboxClick() {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'checkbox_autoRenewal', (ctrl.ui.autorenewState ? 'on' : 'off') + '_' + ctrl.product.shortName);\n\n buyblockService.registerOnce(true, SETUP.isChecked);\n }\n\n function activate() {\n getPriceList();\n initializeGallery();\n buyblockSetup();\n\n licenseCount = ctrl.license.license_count;\n }\n\n function updateARPopupProduct() {\n $rootScope.$emit('shoARPopupProduct', {\n 'name': ctrl.product.shortName\n });\n }\n\n function changeARCheckbox() {\n updateARPopupProduct();\n selectPrices();\n }\n\n function showARPopup() {\n updateARPopupProduct();\n\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'click_infoAutoRenewal', '' + ctrl.product.shortName);\n\n buyblockService.showARPopup(ctrl.ui.showAutoRenew);\n }\n\n function loadBuyLink(item) {\n var price = item.price;\n var price_striked = item.price_striked;\n var delta = 0;\n\n if (!ctrl.ui.busy) {\n ctrl.ui.busy = true;\n\n if (price_striked) {\n delta = Math.round(100 * (price_striked - price) / price_striked);\n }\n\n buyblockService.trackBBEvent('addToCart', 'ecommerce', 'addToCart', ctrl.product.shortName + '_' + parseInt(item.pack, 10) + '_' + parseInt(item.term, 10) + '_' + (item.autorenew ? 'AR' : 'MR') + '_' + delta + '%');\n\n priceData.getCartLink(item.product_id, item.id, ctrl.data.purchaseType, ctrl.product.shortName, '', item['buy_link']).then(function (response) {\n buyblockService.sendToBuyUrl(response.data, ctrl.data.purchaseType);\n ctrl.ui.busy = false;\n }, function (rejection) {\n errorService.warn(rejection);\n ctrl.ui.busy = false;\n });\n }\n }\n\n function buyblockSetup() {\n directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n ctrl.buyblockData = response.data.fields;\n });\n }\n\n function imageUrlToHTML(src) {\n return '\"\"';\n }\n\n function handlerTerm(term) {\n return (term || '').replace(/^(1 )/, '');\n }\n\n function getPriceDiff(priceItem) {\n return (Math.round(priceItem.price_striked * 100 - priceItem.price * 100) / 100).toFixed(2);\n }\n\n function selectVariant() {\n selectPrices();\n\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'selector_devices', ctrl.ui.currentDeviceCount + '_' + ctrl.product.shortName);\n }\n\n function selectPrices() {\n ctrl.ui.priceOneYear = _.find(ctrl.ui.list, function (item) {\n return parseInt(item.term, 10) === 1 && item.pack === ctrl.ui.currentDeviceCount && item.autorenew === ctrl.ui.autorenewState;\n });\n\n ctrl.ui.priceTwoYears = _.find(ctrl.ui.list, function (item) {\n return parseInt(item.term, 10) === 2 && item.pack === ctrl.ui.currentDeviceCount && item.autorenew === ctrl.ui.autorenewState;\n });\n\n licenseCount = parseInt(ctrl.ui.currentDeviceCount, 10) || ctrl.license.license_count;\n }\n\n function getCurrentCount() {\n return (ctrl.ui.priceOneYear || ctrl.ui.priceTwoYears || {})['user_accounts'];\n }\n\n function handlePrice() {\n var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var price = _.find(list, function (item) {\n return parseInt(item.pack, 10) === licenseCount;\n });\n\n ctrl.ui.list = list;\n ctrl.ui.deviceCounts = _.uniq(list.map(function (item) {\n return item.pack;\n })).sort(function (a, b) {\n return parseInt(a.pack, 10) - parseInt(b.pack, 10);\n });\n\n if (price) {\n ctrl.ui.currentDeviceCount = price.pack;\n } else {\n price = _.find(list, function (item) {\n return parseInt(item.pack, 10) > licenseCount;\n });\n\n if (price) {\n ctrl.ui.currentDeviceCount = price.pack;\n } else {\n price = list.filter(function (item) {\n return parseInt(item.pack, 10) < licenseCount;\n }).sort(function (a, b) {\n return parseInt(b.pack, 10) - parseInt(a.pack, 10);\n })[0];\n\n if (price) {\n ctrl.ui.currentDeviceCount = price.pack;\n }\n }\n }\n\n ctrl.ui.showAutoRenewPrice = ctrl.ui.list && ctrl.ui.list.length && _.find(ctrl.ui.list, function (item) {\n return item.autorenew;\n }) && _.find(ctrl.ui.list, function (item) {\n return !item.autorenew;\n });\n\n if (!ctrl.ui.showAutoRenewPrice) {\n if (ctrl.ui.list && ctrl.ui.list.length) {\n ctrl.ui.autorenewState = ctrl.ui.list[0].autorenew;\n } else {\n ctrl.ui.autorenewState = SETUP.isChecked === 'true';\n }\n } else {\n ctrl.ui.autorenewState = SETUP.isChecked === 'true';\n }\n\n selectPrices();\n\n if (!buyBlockReady) {\n buyBlockReady = true;\n\n $rootScope.buyBlockReady();\n }\n\n ctrl.ui.hasPrices = list.length > 0;\n }\n\n function initializeGallery() {\n ctrl.ui.galleryItems = (ctrl.data.extras || []).map(function (item) {\n return {\n 'text': item.text,\n 'title': item.title,\n 'description': item.description,\n 'picture': imageUrlToHTML(item.picture)\n };\n });\n }\n\n function showGallery(index) {\n ctrl.ui.galleryPages = ctrl.ui.galleryPages || ctrl.ui.galleryItems.map(function (item, index) {\n return '
';\n }).join('');\n\n $.magnificPopup.open({\n 'items': ctrl.ui.galleryItems,\n 'mainClass': 'lrc-bb-a-b-test-popup-container',\n 'closeOnBgClick': false,\n 'enableEscapeKey': false,\n 'inline': {\n 'markup': '
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n
\\n
' + ctrl.ui.galleryPages + '
\\n
'\n },\n 'type': 'inline',\n 'gallery': {\n 'enabled': false,\n 'arrowMarkup': ''\n },\n 'callbacks': {\n 'close': function close() {\n var instance = $window.$.magnificPopup.instance;\n\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'close_infoPopupButton', ctrl.ui.galleryItems[instance.index].text + '_' + ctrl.product.shortName);\n },\n 'open': function open() {\n var instance = $window.$.magnificPopup.instance;\n var $popup = angular.element(instance.wrap);\n var $arrowLeft = $popup.find('.lrc-bb-a-b-test-popup-arrow-left');\n var $arrowRight = $popup.find('.lrc-bb-a-b-test-popup-arrow-right');\n var $oages = $popup.find('.lrc-bb-a-b-test-popup-page');\n\n $oages.on('click', function ($event) {\n var currentIndex = instance.index;\n var targetIndex = +$event.target.getAttribute('data-index');\n\n if (currentIndex !== targetIndex) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'navDots_infoPopup', ctrl.ui.galleryItems[currentIndex].text + '_' + ctrl.ui.galleryItems[targetIndex].text + '_' + ctrl.product.shortName);\n\n instance.goTo(targetIndex);\n }\n });\n\n $arrowLeft.on('click', function () {\n var currentIndex = instance.index;\n\n instance.prev();\n\n var targetIndex = instance.index;\n\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'navButton_infoPopup', 'prev_' + ctrl.ui.galleryItems[currentIndex].text + '_' + ctrl.ui.galleryItems[targetIndex].text + '_' + ctrl.product.shortName);\n });\n\n $arrowRight.on('click', function () {\n var currentIndex = instance.index;\n\n instance.next();\n\n var targetIndex = instance.index;\n\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'navButton_infoPopup', 'next_' + ctrl.ui.galleryItems[currentIndex].text + '_' + ctrl.ui.galleryItems[targetIndex].text + '_' + ctrl.product.shortName);\n });\n\n $popup.on('click', function ($event) {\n var content = instance && instance.content && instance.content[0];\n var target = $event.target;\n\n if (content && !$.contains(content, target)) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'close_infoPopupOverlay', ctrl.ui.galleryItems[instance.index].text + '_' + ctrl.product.shortName);\n }\n });\n\n instance.goTo(index);\n },\n 'markupParse': function markupParse(template, item, data) {\n var magnificPopup = $window.$.magnificPopup.instance;\n var $popup = angular.element(template);\n var pages = $popup.find('.lrc-bb-a-b-test-popup-page');\n\n $popup.find('.mfp-counter').html(data.index + 1 + '/' + ctrl.data.extras.length);\n pages.removeClass('active');\n pages.eq(magnificPopup.index || 0).addClass('active');\n }\n }\n });\n }\n\n function handlePriceError(rejection) {\n ctrl.ui.hasPrices = false;\n errorService.warn(rejection);\n }\n\n function getPriceList() {\n var getPriceListIterator = ctrl.ui.getPriceListIterator + 1;\n\n ctrl.ui.getPriceListIterator = getPriceListIterator;\n\n priceData.getPrice(ctrl.product.title, ctrl.data.purchaseType, '', true).then(function (res) {\n if (ctrl.ui.getPriceListIterator === getPriceListIterator) {\n handlePrice(res.data);\n }\n }, function (error) {\n if (ctrl.ui.getPriceListIterator === getPriceListIterator) {\n handlePriceError(error);\n }\n });\n }\n }\n})();\n'use strict';\n\n// This component has been dismissed; please use passing one-price as a template parameter\n// e.g. \n(function () {\n angular.module('kappGlobal.buyblocks').component('buyblockOnePrice', {\n 'bindings': {\n 'productShortName': '@productName',\n 'purchaseType': '@',\n 'valueToSet': '<',\n 'selectedPack': '@',\n 'selectedTerm': '@',\n 'selectedAutorenew': '@',\n 'countMonthly': '@',\n 'estore': '@',\n 'template': '@',\n 'description': '@',\n 'free': '@',\n 'hideTrialButton': '@'\n },\n 'controller': 'buyblockDropdownController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'one-price';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/_shared/components/buyblock/templates/buyblock-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.buyblocks').component('buyblockRadio', {\n 'bindings': {\n 'productShortName': '@productName', //for cases when we only know the name of the product\n 'productInfo': '<', //for cases when we have all product data available\n 'purchaseType': '@',\n 'selectedPack': '@',\n 'selectedTerm': '@',\n 'selectedAutorenew': '@',\n 'estore': '@',\n 'symbol': '@',\n 'locale': '@',\n 'buyButtonText': '@',\n 'productBox': '@',\n 'template': '@',\n 'value': '<', // does nothing? LT\n 'compare': '<', // does nothing? LT\n 'highlighted': '@', // used in featured-products and HMC\n 'highlightButton': '@', // used in featured-products and HMC\n 'setBuyblockValueByProduct': '&',\n 'type': '@',\n 'overrideProductDesc': '@',\n 'hideProductLinks': '@',\n 'promoline': '@',\n 'updateButtonText': '@',\n 'valueToSet': '<',\n 'countMonthly': '@',\n 'description': '@',\n 'free': '@',\n 'resellerOverride': '@',\n 'saveRateText': '@',\n 'savingsPriceType': '@',\n 'hideTrialButton': '@',\n 'disableAutoRenew': '@',\n 'hideArCheckbox': '@',\n 'upgradeButton': '@',\n 'isFailover': '@',\n 'hideAr': '@',\n 'hidePriceDisclaimer': '@',\n 'disclaimerBinding': '<',\n 'component': '@',\n 'hideBv': '@',\n 'hideSection': '@',\n 'hideGplayButton': '@',\n 'setLimitTo': '@',\n 'hideRadioButtons': '@',\n 'disablePriceSync': '<',\n 'showDisclaimer': '@',\n 'getBuyblockSavings': '&',\n 'getBuyblockPriceList': '&',\n 'buyButtonHtmlTop': '<',\n 'buyButtonHtmlBottom': '<'\n },\n 'controller': 'buyblockRadioController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'product-page';\n if ($attrs.template) template = $attrs.template;\n return '/resources/template/html/modules/_shared/components/buyblock/templates/buyblock-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n buyblockRadioController.$inject = [\"$rootScope\", \"$q\", \"$scope\", \"$state\", \"ENV\", \"SEO\", \"$templateCache\", \"SETUP\", \"directiveData\", \"priceData\", \"productData\", \"windowHelperService\", \"currencyManager\", \"buyblockService\", \"errorService\", \"ngDialog\", \"geoLocationManager\", \"appHelperService\", \"tracking\"];\n angular.module('kappGlobal.buyblocks').controller('buyblockRadioController', buyblockRadioController);\n\n function buyblockRadioController($rootScope, $q, $scope, $state, ENV, SEO, $templateCache, SETUP, directiveData, priceData, productData, windowHelperService, currencyManager, buyblockService, errorService, ngDialog, geoLocationManager, appHelperService, tracking) {\n var ctrl = this;\n ctrl.isChecked = SETUP.isChecked;\n ctrl.productPricesExist = true;\n ctrl.showAR = SETUP.showAR;\n ctrl.showOnlyAR = false;\n ctrl.hidePack = false;\n ctrl.curState = $state.current.parent;\n ctrl.stateName = $state.current.name;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n ctrl.currency = buyblockService.getCurrency(ctrl);\n ctrl.$id = $scope.$id || Math.random().toString(36).substring(7); // backup for cases where $scope.$id is 0 and falsey\n ctrl.buyLink = 'no data received yet';\n ctrl.currentValue = {\n 'price': 'no data',\n 'eStore': '/store'\n };\n ctrl.registerOnce = registerOnce;\n ctrl.showARPopup = showARPopup;\n ctrl.getPriceList = getPriceList;\n ctrl.setSelectedOption = setSelectedOption;\n ctrl.applyOption = applyOption;\n ctrl.radioFilter = radioFilter;\n ctrl.sendToBuyUrl = sendToBuyUrl;\n ctrl.addSalesTrackingParameters = addSalesTrackingParameters;\n ctrl.getPromoline = getPromoline;\n ctrl.hasTrialButton = hasTrialButton;\n ctrl.moreDevicesPopup = moreDevicesPopup;\n ctrl.accountDescPopup = accountDescPopup;\n ctrl.handleBundleChange = handleBundleChange;\n ctrl.getSavings = getSavings;\n ctrl.isActive = isActive;\n ctrl.switchTerm = switchTerm;\n ctrl.checkHighlighted = checkHighlighted;\n ctrl.isInteger = isInteger;\n ctrl.productPageName = $state.params.jsonName;\n ctrl.enablePl2 = currencyManager.pl2Enabled();\n\n var isLRC = appHelperService.stateIncludes('lrc-verdict');\n\n ctrl.isLrc = isLRC;\n\n // $rootScope destroy events begin\n var currencyChange = $rootScope.$on('currencyChange', handleCurrencyChange),\n productSelected = void 0,\n arPopupCheck = $rootScope.$on('arPopupCheck', function (event, value) {\n if (value && ctrl.showAR) {\n ctrl.autorenew = value;\n } else {\n ctrl.autorenew = false;\n }\n applyOption();\n }),\n orderBy = {\n 'TERM': 'term',\n 'TERM_PACK': 'term then pack',\n 'PACK': 'pack',\n 'PACK_TERM': 'pack then term'\n };\n\n var otaButtonAvailable = $scope.$on('ota-button-available', function (ev, available) {\n ctrl.otaButtonAvailable = available;\n });\n\n // $rootScope destroy events end\n\n function setUnavailableText() {\n ctrl.buyblockUnavailableText = ctrl.isProductBlocked && isProductKSC() ? ctrl.buyblockData.kscUnavailableText : ctrl.buyblockData.buyblock_not_available_msg;\n if (!ctrl.buyblockUnavailableText) ctrl.buyblockUnavailableText = '

This product is currently unavailable in your region. Please contact us for further details.

';\n }\n\n /**\n * Handler for when an option is selected in another buyblock with the same product.\n * @param {Object} event\n * @param {Object} optionObj The object of the active option\n */\n function handleProductSelected(event, optionObj) {\n if (optionObj.scope === ctrl.$id) return;\n ctrl.autorenew = optionObj.autoRenewal;\n ctrl.hasBundle = optionObj.hasBundle;\n ctrl.isBundleActive = optionObj.isBundleActive;\n ctrl.priceList = optionObj.priceList;\n setSelectedOption(optionObj.optionID);\n if (ctrl.selectedID !== optionObj.optionID) updateSelectedID(optionObj.optionID);\n }\n\n /**\n * Updates the radio checkbox with the active option\n * @param {Number} id The ID of the active option\n */\n function updateSelectedID(id) {\n if (angular.isUndefined(id)) return;\n ctrl.selectedID = id;\n }\n\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.defaults = {\n 'term': ctrl.selectedTerm,\n 'pack': ctrl.selectedPack\n };\n ctrl.locale = ctrl.locale || ENV.locale;\n var productData = getProductData(),\n buyBlockSetup = buyblockSetup(),\n promises = [productData, buyBlockSetup];\n $q.all(promises).then(function () {\n var isB2B = $state.current.parent ? Boolean($state.current.parent.match(/(smb|vsb)/ig)) : false;\n checkDisclaimer(isB2B);\n setUnavailableText();\n });\n $scope.$on('$destroy', handleScopeDestroyed);\n }\n\n function hasTrialButton() {\n return buyblockService.hasTrialButton(ctrl.product) && !appHelperService.isTrue(ctrl.hideTrialButton);\n }\n\n function addSalesTrackingParameters(event) {\n if (event) event.preventDefault();\n ctrl.priceList.forEach(function (item) {\n if (item.id === ctrl.selectedID) {\n ctrl.masterPartner = item.master_partner;\n }\n });\n ctrl.buyLink = tracking.onBuyButtonClick(ctrl.buyLink, ctrl.masterPartner);\n sendToBuyUrl();\n }\n\n function getPriceList(skipEstore) {\n if (!ctrl.productName || ctrl.stateName === 'home-downloads') return;\n if (!skipEstore) setEStore();\n\n return priceData.getPrice(ctrl.productName, ctrl.purchaseType, ctrl.newEstore || '').then(handlePriceSuccess, handlePriceError);\n }\n\n function registerOnce(checked) {\n buyblockService.registerOnce(checked, ctrl.isChecked);\n }\n\n function radioFilter(input) {\n if (!input || input.autorenew !== ctrl.autorenew) {\n return;\n }\n if (ctrl.itemOffersGroupLimit && input.outOfGroupVisibleLimit) {\n return;\n }\n if (ctrl.priceList.length <= ctrl.limitTo || ctrl.showEvenDevices === 'Yes') {\n return true;\n }\n\n var isUSLocale = ENV.locale === 'en-us';\n\n if (isUSLocale && $state.includes('lrc-verdict') && ctrl.defaults.pack) {\n if (parseInt(input.pack) % ctrl.defaults.pack === 0) {\n return true;\n }\n } else if (isUSLocale && ctrl.productShortName === 'ktsmd') {\n if (parseInt(input.pack) % 5 === 0) {\n return true;\n }\n } else {\n if (parseInt(input.pack) % 2 !== 0) {\n return true;\n }\n }\n }\n\n function getPromoline() {\n // GWP-31338 home-security page has a specific promoline\n var isHomeSec = ctrl.stateName === 'home-security';\n return ctrl.buyblockData ? ctrl.buyblockData[isHomeSec ? 'promolineHomeSecurity' : 'promoline'] : ctrl.promoline;\n }\n\n function showARPopup() {\n buyblockService.showARPopup(ctrl.showAR);\n }\n\n function getBuyButtonText() {\n var isExtendedButtonText = angular.isString(ctrl.updateButtonText) ? ctrl.updateButtonText !== 'false' : ctrl.updateButtonText;\n if (ENV.locale === 'ru-ru' && isExtendedButtonText && $rootScope.kaspersky.verdictSite !== 'ATT') {\n ctrl.updatedBuyButtonText = ctrl.buyblockData && ctrl.buyblockData.extendButtonText;\n } else if (ENV.locale === 'en-us' && ctrl.upgradeButton) {\n ctrl.updatedBuyButtonText = ctrl.buyblockData && ctrl.buyblockData.upgradeText;\n } else if (ENV.locale === 'en-us' && !ctrl.upgradeButton && ctrl.purchaseType !== 'Purchase') {\n ctrl.updatedBuyButtonText = ctrl.buyblockData && ctrl.buyblockData.renewText;\n } else {\n ctrl.updatedBuyButtonText = ctrl.buyButtonText || ctrl.buyblockData ? ctrl.buyblockData.buyText : '';\n }\n }\n\n function sendToBuyUrl() {\n buyblockService.sendToBuyUrl(ctrl.buyLink, ctrl.purchaseType);\n }\n\n function hidePack() {\n if (ctrl.locale === 'ru-ru' && (ctrl.productShortName === 'ksc-family' || ctrl.product && ctrl.product.shortName === 'ksc-family')) {\n ctrl.hidePack = true;\n }\n }\n\n // Private methods\n function buyblockSetup() {\n return directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n ctrl.buyblockData = response.data.fields;\n getBuyButtonText();\n });\n }\n\n function doScreenshotsSeo() {\n var newScreenshotsArr = [],\n seoAltTexts = SEO[ENV.locale] || SEO['default'],\n screenshots = ctrl.productInfo ? ctrl.productInfo.screenshots : [];\n for (var i = 0, len = screenshots.length; i < len; i++) {\n var obj = {},\n ss = screenshots[i];\n if (angular.isString(ss)) {\n var name = ss.split('/').pop().split('.')[0];\n obj.path = ss;\n obj.name = name;\n obj.altText = seoAltTexts && seoAltTexts[name] ? seoAltTexts[name] : name;\n newScreenshotsArr.push(obj);\n }\n }\n ctrl.productInfo.screenshots = newScreenshotsArr; // replace array of string, with array of object\n }\n\n function checkDisclaimer(isB2B) {\n var b2bDisclaimer = ctrl.buyblockData.disclaimer || ctrl.buyblockData.smbDisclaimer,\n hideDisclaimer = appHelperService.isTrue(ctrl.product && ctrl.product.hideDisclaimer) || ctrl.hidePriceDisclaimer === 'true';\n ctrl.disclaimerObj = hideDisclaimer && $rootScope.kaspersky.verdictSite !== 'ATT' ? false : ctrl.product && ctrl.product.bbDisclaimer ? { 'disclaimer': ctrl.product.bbDisclaimer, 'asterisk': '*' } : buyblockService.checkDisclaimer(isB2B, ctrl.buyblockData.b2cDisclaimer, b2bDisclaimer);\n }\n\n function resetPricingObjectsToDefault() {\n ctrl.priceList = [];\n ctrl.selectedOption = {\n 'price': ''\n };\n ctrl.selectedPack = ctrl.defaults.pack;\n ctrl.selectedTerm = ctrl.defaults.term;\n ctrl.buyLink = 'no data received yet';\n ctrl.autorenew = ctrl.isChecked === 'true';\n ctrl.productPricesExist = true;\n ctrl.isBBReady = false;\n }\n\n function handleCurrencyChange() {\n if (ctrl.currency === $rootScope.currency) return;\n ctrl.showAR = SETUP.showAR;\n ctrl.isBBReady = false;\n ctrl.currency = $rootScope.currency;\n if (ctrl.product.bbSettings.purchaseType !== 'Free' && !ctrl.isProductBlocked) getPriceList();\n }\n\n function handleBundleChange() {\n if (!ctrl.isBundleActive) ctrl.productNameBackup = ctrl.productName;\n\n ctrl.isBundleActive = !ctrl.isBundleActive;\n ctrl.productName = ctrl.isBundleActive ? ctrl.product.bundleProductName : ctrl.productNameBackup;\n ctrl.previousBundleOption = ctrl.selectedOption;\n $scope.$emit('buyblockBundleChange', {\n 'isActive': ctrl.isBundleActive,\n 'productName': ctrl.productShortName\n });\n\n getPriceList();\n applyOption();\n }\n\n function handleScopeDestroyed() {\n if (angular.isFunction(productSelected)) productSelected();\n currencyChange();\n arPopupCheck();\n $rootScope.mainProductAlreadySelected = false;\n otaButtonAvailable();\n }\n\n /**\n * ctrl.product.bbSettings.eStore pulls data from Tridion component, ctrl.estore takes it from parameter passed in\n * this conditional is probably used to target buyblocks outside of LRC, added lrc state detection to make it work for ATT verdicts - AFedotov\n */\n\n function setEStore() {\n if (ctrl.estore || isLRC) {\n ctrl.newEstore = ctrl.estore;\n if (!currencyManager.pl2Enabled()) setOverrideEstoreID();\n return;\n }\n\n ctrl.newEstore = ctrl.product && ctrl.product.bbSettings ? ctrl.product.bbSettings.eStore : '';\n }\n\n function setOverrideEstoreID() {\n priceData.info(ctrl.productName, ctrl.purchaseType, ctrl.newEstore, isLRC).then(function (response) {\n ctrl.overrideEstoreID = response.data && response.data.id;\n if (!ctrl.overrideEstoreID) handleEstoreOverrideError();\n }).catch(function (rejection) {\n errorService.warn(rejection);\n handleEstoreOverrideError();\n });\n }\n\n function handleEstoreOverrideError() {\n directiveData.getPartnerByName(ctrl.newEstore).then(function (response) {\n ctrl.partnerObj = response;\n if (ctrl.partnerObj) ctrl.buyblockData.lrcPartnerUnavailable = ctrl.buyblockData.lrcPartnerUnavailable && ctrl.buyblockData.lrcPartnerUnavailable.replace('#', ctrl.partnerObj.href);\n });\n }\n\n /**\n * Get the default option either from Product settings or template override\n */\n function getDefaultOption() {\n var option = void 0,\n hasTemplateOverride = void 0,\n hasProductOverride = void 0;\n hasTemplateOverride = ctrl.defaults.term || ctrl.defaults.pack;\n hasProductOverride = ctrl.product.bbSettings && ctrl.product.bbSettings.selectedTerm && ctrl.product.bbSettings.selectedPack;\n\n if (hasTemplateOverride) option = findOptionByKeys(ctrl.defaults.term, ctrl.defaults.pack);\n if (ctrl.previousBundleOption) option = findOptionByKeys(ctrl.previousBundleOption.term, ctrl.previousBundleOption.pack);\n if (!option && hasProductOverride) option = findOptionByKeys(ctrl.product.bbSettings.selectedTerm, ctrl.product.bbSettings.selectedPack);\n if (!option) option = findFirstAvailableOption();\n return option;\n }\n\n function findFirstAvailableOption() {\n var filteredPriceList = ctrl.priceList.filter(radioFilter),\n options = ctrl.showTerm && ctrl.monthlyAvailable ? ['subscription', ctrl.showTerm] : ['autorenew', ctrl.autorenew];\n return _.find(filteredPriceList, options);\n }\n\n /**\n * Get the default options either from Product settings or template override\n */\n function findOptionByKeys(term, pack) {\n var isSelectedTerm = void 0,\n filteredPriceList = ctrl.priceList.filter(radioFilter);\n\n if (!filteredPriceList.length) filteredPriceList = ctrl.priceList;\n\n term = term || ctrl.selectedOption.term || filteredPriceList[0].term;\n pack = pack || ctrl.selectedOption.pack || filteredPriceList[0].pack;\n return _.find(filteredPriceList, function (obj) {\n isSelectedTerm = !term || term.length > 2 ? obj.term === term : parseInt(obj.term) === parseInt(term);\n return isSelectedTerm && parseInt(obj.pack) === parseInt(pack) && obj.autorenew === ctrl.autorenew;\n });\n }\n\n /**\n * Get the default options either from Product settings or template override\n */\n function findOptionById() {\n var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ctrl.selectedID;\n\n return _.find(ctrl.priceList, ['id', parseInt(id)]);\n }\n\n function setupPriceList(listOrderBy) {\n var productHasAutoRenewal = ctrl.priceList.some(function (item) {\n return ctrl.priceList[0].autorenew !== item.autorenew;\n });\n\n // if we have only one autorenew and it doesn't match the default one\n\n if (ctrl.disableAutoRenew === 'true') {\n ctrl.showAR = false;\n ctrl.autorenew = false;\n } else {\n if (!productHasAutoRenewal) {\n ctrl.showAR = false;\n ctrl.autorenew = ctrl.priceList[0].autorenew;\n }\n }\n\n // apply default for RU if not overridden\n if (ENV.locale === 'ru-ru') listOrderBy = !listOrderBy ? orderBy.TERM_PACK : listOrderBy;\n\n var orderByFunc = getOrderByFunction(listOrderBy) || getOrderByFunction(orderBy.PACK_TERM);\n ctrl.priceList.sort(orderByFunc);\n\n if (ctrl.itemOffersGroupLimit) {\n _.values(_.groupBy(ctrl.priceList, 'autorenew')).forEach(function (arGroup) {\n var itemsByTerm = _.values(_.groupBy(arGroup, 'term'));\n\n if (itemsByTerm.length > 1) {\n itemsByTerm.forEach(function (groupedList) {\n groupedList.slice(ctrl.itemOffersGroupLimit).forEach(function (item) {\n return item.outOfGroupVisibleLimit = true;\n });\n });\n }\n });\n }\n\n applyOption(true);\n\n if (isProductKSC()) checkMonthlyOptions();\n\n // Emit Buyblock ready event to currency selector\n $rootScope.buyBlockReady();\n getFirstProductMaxAndMinPrices(ctrl.priceList);\n ctrl.showMoreDevices = hasMoreDevices();\n }\n\n /**\n * Returns the matching sort function or undefined if not matched to one of orderBy constants\n * @param key\n * @return {function|undefined}\n */\n function getOrderByFunction(key) {\n switch (key) {\n case orderBy.TERM:\n return buildOrderByFunction('term');\n case orderBy.TERM_PACK:\n return buildOrderByFunction('term', buildOrderByFunction('pack'));\n case orderBy.PACK:\n return buildOrderByFunction('pack');\n case orderBy.PACK_TERM:\n return buildOrderByFunction('pack', buildOrderByFunction('term'));\n }\n }\n\n /**\n * Builds and returns an int based ordering function for prop\n * @param {String} prop name of prop to sort on\n * @param {function?} equalSort equal case callback\n * @return {function(a, b): number}\n */\n function buildOrderByFunction(prop, equalSort) {\n return function (a, b) {\n var propA = parseInt(a[prop]),\n propB = parseInt(b[prop]);\n return equalSort && propA === propB ? equalSort(a, b) : propA - propB;\n };\n }\n\n function checkMonthlyOptions() {\n // Conditional for non-string term with split values, as the backend is being switched\n var splitPackageDataEnabled = ctrl.priceList.some(function (item) {\n return !!(item.termDuration && item.termType && item.termName);\n });\n\n ctrl.monthlyAvailable = false;\n\n if (ctrl.priceList && !splitPackageDataEnabled) {\n ctrl.priceList.forEach(function (item) {\n if (parseFloat(item.term) % 1 !== 0) {\n ctrl.monthlyAvailable = true;\n var dec = Math.round(item.term.match(/\\d+(.|,)\\d+/g) * 12);\n item.term = item.term.replace(/\\d+(.|,)\\d+/g, dec);\n item.subscription = 'Month';\n } else item.subscription = 'Year';\n });\n } else if (ctrl.priceList && splitPackageDataEnabled) {\n ctrl.priceList.forEach(function (item) {\n if (item.termType === 'M') {\n ctrl.monthlyAvailable = true;\n item.term = item.termDuration + ' ' + item.termName;\n item.subscription = 'Month';\n } else if (item.termType === 'Y') {\n item.term = item.termDuration + ' ' + item.termName;\n item.subscription = 'Year';\n }\n });\n }\n // Set default monthly toggle value\n if (ctrl.monthlyAvailable) {\n ctrl.showTerm = ctrl.product.bbSettings.selectedTab || ctrl.selectedOption.subscription;\n }\n switchArCheckbox();\n }\n\n function isActive(name) {\n return ctrl.showTerm === name;\n }\n\n function switchTerm(showTerm) {\n ctrl.showTerm = showTerm;\n switchArCheckbox();\n }\n\n function updateOptions() {\n ctrl.selectedOption = findFirstAvailableOption();\n updateSelectedID(ctrl.selectedOption.id);\n $scope.$emit('productSelected-' + ctrl.productShortName, {\n 'scope': ctrl.$id,\n 'optionID': ctrl.selectedOption.id,\n 'autoRenewal': ctrl.autorenew,\n 'priceList': ctrl.priceList,\n 'hasBundle': ctrl.hasBundle,\n 'isBundleActive': ctrl.isBundleActive\n });\n getBuyLink();\n }\n\n function switchArCheckbox() {\n ctrl.priceList.some(function (item) {\n if (item.subscription && ctrl.showTerm) {\n if (ctrl.showTerm === 'Month') {\n showHideTabs('true', false);\n } else {\n showHideTabs('true', false);\n }\n ctrl.autorenew = item.autorenew;\n updateOptions();\n return true;\n } else {\n showHideTabs('true', false);\n return true;\n }\n });\n }\n\n function showHideTabs(showAR, showOnlyAR) {\n if (ctrl.monthlyAvailable) {\n ctrl.showAR = showAR;\n ctrl.showOnlyAR = showOnlyAR;\n } else ctrl.showTerm = 'Year';\n }\n\n /**\n * Override buyblock settings with ones from Tridion. Needs to run even if they're set to false.\n */\n function overrideBuyblockSettings() {\n // if we have overridden values come from Tridion - needs to run even if false\n var bbSettings = ctrl.product.bbSettings;\n\n ['isChecked', 'showAR', 'itemOffersOrderBy', 'itemOffersGroupLimit'].filter(function (key) {\n return angular.isDefined(bbSettings[key]);\n }).forEach(function (key) {\n return ctrl[key] = bbSettings[key];\n });\n\n if (angular.isDefined(bbSettings.hideArCheckbox) && bbSettings.hideArCheckbox[0]) ctrl.hideArCheckbox = bbSettings.hideArCheckbox[0];\n }\n\n /**\n * Preparation for pricelist.\n * @param {Object} response The pricelist object\n */\n function handlePriceSuccess(response) {\n overrideBuyblockSettings();\n resetPricingObjectsToDefault();\n\n ctrl.priceList = response.data;\n\n if (!angular.isArray(ctrl.priceList) || !ctrl.priceList.length) {\n if (ctrl.newEstore) {\n errorService.warn('No matches found on ' + ctrl.newEstore + ' for ' + ctrl.productName + '; retrying with default estore');\n delete ctrl.newEstore;\n return getPriceList(true);\n } else {\n errorService.warn('API not available');\n ctrl.productPricesExist = false;\n return false;\n }\n }\n\n if (ctrl.getBuyblockPriceList) {\n ctrl.getBuyblockPriceList({ 'priceList': ctrl.priceList });\n }\n\n setupPriceList(ctrl.product.bbSettings.itemOffersOrderBy);\n }\n\n /**\n * Handles product not found, prices or service not available\n * @param {String} response\n */\n function handlePriceError(response) {\n ctrl.productPricesExist = false;\n ctrl.isBBReady = true;\n errorService.warn(response);\n return false;\n }\n\n function setProductPageLink() {\n ctrl.product.prodPageLink = ctrl.hideProductLinks ? '' : ctrl.product.prodPageLink;\n }\n\n /**\n * Sets the number of options to show in radio list to 6.\n * For US LRC verdicts this is meant to be 3 (except KSC)\n */\n function setOptionsLimit() {\n ctrl.limitTo = ctrl.overrideLimitTo || (ctrl.locale === 'en-us' && $state.includes('lrc-verdict') && !isProductKSC() ? 3 : 6);\n }\n\n /**\n * Get the product data when we already have the product short name available\n */\n function getProductByName() {\n return productData.getb2c(ctrl.productShortName).then(function (response) {\n handleProductData(response.data.fields);\n });\n }\n\n /**\n * Checks whether we need to listen for the product data to come from another component\n */\n function getProductData() {\n if (ctrl.productShortName) return getProductByName();\n\n var productInfo = $scope.$watch('$ctrl.productInfo', function (newV) {\n if (!newV) return;\n handleProductData(ctrl.productInfo);\n productInfo();\n });\n }\n\n function isProductKSC() {\n return ctrl.productShortName.indexOf('ksc') > -1 || ctrl.productShortName.indexOf('ksec') > -1;\n }\n /**\n * Set up product data bindings\n * @param {Object} product Product data\n */\n function handleProductData(product) {\n ctrl.product = ctrl.productInfo = product;\n if (!ctrl.productShortName) ctrl.productShortName = product.shortName;\n ctrl.productName = product.title;\n ctrl.showEvenDevices = product.bbSettings.showEvenDevices;\n ctrl.overrideLimitTo = ctrl.setLimitTo || product.bbSettings.limitTo;\n ctrl.hasBundle = $state.params.bundle && appHelperService.isTrue(ctrl.product.enableBundle) && ctrl.product.bundleProductName;\n\n if (!ctrl.disablePriceSync) {\n productSelected = $rootScope.$on('productSelected-' + ctrl.productShortName, handleProductSelected);\n }\n\n if (ctrl.locale === 'en\\-global' && isProductKSC()) blockProhibitedCountries();\n if (ctrl.product.bbSettings.purchaseType !== 'Free' && !ctrl.isProductBlocked) getPriceList();\n doScreenshotsSeo();\n setProductPageLink();\n setOptionsLimit();\n hidePack();\n }\n\n function blockProhibitedCountries() {\n if (geoLocationManager.isKscProhibitedCountry()) {\n ctrl.isProductBlocked = true;\n handlePriceError('Product not available in this country');\n }\n }\n\n /**\n * Whether to show the button 'Show more devices' or not\n * @return {Boolean}\n */\n function hasMoreDevices() {\n var checkAutoRenewal = _.countBy(ctrl.priceList, 'autorenew'),\n limit = ctrl.itemOffersGroupLimit || ctrl.limitTo;\n // return checkAutoRenewal.false ? checkAutoRenewal.false > limit : checkAutoRenewal.true > limit;\n return checkAutoRenewal[ctrl.autorenew] > limit;\n }\n\n /**\n * Set an option from the radio checkbox or from another buyblock. If ID is present, it's internal.\n * @param {String|Number} id The ID of the option to select\n */\n function setSelectedOption(id) {\n if (angular.isUndefined(id)) {\n $scope.$emit('productSelected-' + ctrl.productShortName, {\n 'scope': ctrl.$id,\n 'optionID': ctrl.selectedID,\n 'autoRenewal': ctrl.autorenew,\n 'priceList': ctrl.priceList,\n 'hasBundle': ctrl.hasBundle,\n 'isBundleActive': ctrl.isBundleActive\n });\n }\n\n if (angular.isArray(ctrl.priceList)) ctrl.selectedOption = findOptionById(id) || findFirstAvailableOption();\n ctrl.getBuyblockSavings({ 'selectedOption': ctrl.selectedOption, 'product': ctrl.product.bbSettings, 'component': ctrl.component });\n getBuyLink();\n }\n\n /**\n * Reapply an existing option (e.g. if switching from AR to non-AR)\n */\n function applyOption(isInit) {\n ctrl.selectedOption = isInit ? getDefaultOption() : findOptionByKeys() || findFirstAvailableOption();\n\n updateSelectedID(ctrl.selectedOption.id);\n $scope.$emit('productSelected-' + ctrl.productShortName, {\n 'scope': ctrl.$id,\n 'optionID': ctrl.selectedOption.id,\n 'autoRenewal': ctrl.autorenew,\n 'priceList': ctrl.priceList,\n 'hasBundle': ctrl.hasBundle,\n 'isBundleActive': ctrl.isBundleActive\n });\n ctrl.getBuyblockSavings({ 'selectedOption': ctrl.selectedOption, 'product': ctrl.product.bbSettings, 'component': ctrl.component });\n getBuyLink();\n ctrl.showMoreDevices = hasMoreDevices();\n }\n\n /**\n * Get the buy link for the current selected option\n */\n function getBuyLink() {\n ctrl.isBBReady = false;\n if (angular.isUndefined(ctrl.selectedOption)) return false;\n return priceData.getCartLink(ctrl.overrideEstoreID || ctrl.selectedOption.product_id, ctrl.selectedOption.id, ctrl.purchaseType, ctrl.productShortName, ctrl.resellerOverride, ctrl.selectedOption['buy_link']).then(handleBuyLinkSuccess, handleBuyLinkError).then(function () {\n ctrl.isBBReady = true;\n });\n }\n\n /**\n * Prepare checkout link for tracking\n * @param {Object} response The checkout link object\n */\n function handleBuyLinkSuccess(response) {\n ctrl.buyLink = response.data;\n }\n\n /**\n * Handle link not found\n * @param {Object|String} response\n */\n function handleBuyLinkError(response) {\n errorService.warn(response);\n ctrl.buyLink = 'Oops! Something went wrong';\n }\n\n /**\n * Handle more devices popup, set more devices popup. Without localTemplate a default design will be used\n * @param { boolean } localTemplate - if true the value will be taken from buyblock template,\n * based on specific popup class\n */\n function moreDevicesPopup(localTemplate) {\n var template = '/resources/template/html/modules/_shared/components/buyblock/templates/buyblock-more-devices-popup.html';\n if (localTemplate) {\n var moreDevicesPopupTemplateUrl = 'buyblock-popup.html';\n var moreDevicesPopupTemplateCache = $templateCache.get(moreDevicesPopupTemplateUrl);\n if (moreDevicesPopupTemplateCache) {\n template = moreDevicesPopupTemplateUrl;\n }\n }\n\n ngDialog.open(buyblockService.ngDialogSettings(ctrl, $scope, {\n 'className': 'ngdialog-no-bg',\n 'template': template\n }));\n }\n\n function accountDescPopup() {\n ngDialog.open(buyblockService.ngDialogSettings(ctrl, $scope, {\n 'className': 'ngdialog-plain ngdialog-narrow',\n 'template': '/resources/template/html/modules/b2c/components/kscloud-disclaimers/templates/account-description.html'\n }));\n }\n\n function getFirstProductMaxAndMinPrices(priceList) {\n if (!angular.isArray(priceList)) return;\n if (!$rootScope.mainProductAlreadySelected) {\n var filteredPriceList = priceList.filter(function (x) {\n return ctrl.radioFilter(x);\n });\n ctrl.minValue = filteredPriceList[0].price;\n ctrl.maxValue = filteredPriceList[filteredPriceList.length - 1].price;\n $rootScope.mainProductAlreadySelected = true;\n }\n }\n\n /**\n * Get savings messaging and value (either custom or default)\n */\n function getSavings(messageType, savingsPriceType, ignoreOverrideText) {\n if (angular.isUndefined(ctrl.product) || angular.isUndefined(ctrl.buyblockData) || angular.isUndefined(ctrl.selectedOption)) return;\n\n var overrideText = ctrl.hasBundle && ctrl.isBundleActive ? ctrl.product.bundleBuyblockPromo : null;\n\n if (ignoreOverrideText) {\n overrideText = null;\n }\n\n return buyblockService.getSavings(messageType, ctrl.selectedOption, ctrl.product.bbSettings, ctrl.buyblockData, overrideText || ctrl.saveRateText, savingsPriceType || ctrl.savingsPriceType, ctrl.component);\n }\n\n function checkHighlighted() {\n if (ctrl.highlighted === 'true') return 'red';else if (ctrl.highlighted === 'grey') return 'grey';else return 'green';\n }\n\n function isInteger(value) {\n return angular.isNumber(value) && isFinite(value) && Math.floor(value) === value;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.buyblocks').component('buyblockStep', {\n 'bindings': {\n 'productShortName': '@productName', //for cases when we only know the name of the product\n 'productInfo': '<', //for cases when we have all product data available\n 'purchaseType': '@',\n 'selectedPack': '@',\n 'selectedTerm': '@',\n 'positionOnPage': '@',\n 'selectedAutorenew': '@',\n 'estore': '@',\n 'symbol': '@',\n 'locale': '@',\n 'buyButtonText': '@',\n 'productBox': '@',\n 'template': '@',\n 'noBoxshot': '@', // does nothing? LT\n 'setBuyblockValueByProduct': '&', // does nothing? LT\n 'valueToSet': '<',\n 'upgradeButton': '@',\n 'highlighted': '@',\n 'type': '@',\n 'kscDisclaimer': '@',\n 'hideProductLinks': '@',\n 'promoline': '@',\n 'countMonthly': '@',\n 'description': '@',\n 'free': '@',\n 'onFormUpdated': '&',\n 'hideTrialButton': '@',\n 'showBbTrialButton': '@',\n 'saveRateText': '@',\n 'savingsPriceType': '@',\n 'disableAutoRenew': '@',\n 'hideArCheckbox': '@',\n 'hideTagline': '@',\n 'hideBv': '@',\n 'buttonText': '@',\n 'showDisclaimer': '@',\n 'getBuyblockSavings': '&',\n 'buyButtonHtmlTop': '<',\n 'buyButtonHtmlBottom': '<'\n },\n 'controller': 'buyblockStepController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'step';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/_shared/components/buyblock/templates/buyblock-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n(function () {\n 'use strict';\n\n buyblockStepController.$inject = [\"$rootScope\", \"$scope\", \"$state\", \"$timeout\", \"$element\", \"ENV\", \"SETUP\", \"appHelperService\", \"directiveData\", \"priceData\", \"productData\", \"windowHelperService\", \"buyblockService\", \"ngDialog\", \"errorService\", \"tracking\", \"currencyManager\"];\n angular.module('kappGlobal.buyblocks').controller('buyblockStepController', buyblockStepController);\n\n function buyblockStepController($rootScope, $scope, $state, $timeout, $element, ENV, SETUP, appHelperService, directiveData, priceData, productData, windowHelperService, buyblockService, ngDialog, errorService, tracking, currencyManager) {\n var ctrl = this;\n ctrl.error = ctrl.error || null;\n ctrl.hidePack = false;\n ctrl.isChecked = '' + SETUP.isChecked;\n ctrl.showAR = '' + SETUP.showAR;\n ctrl.curState = $state.current.parent;\n ctrl.stateName = $state.current.name;\n ctrl.currency = buyblockService.getCurrency(ctrl);\n ctrl.currentValue = {\n 'price': 'no data',\n 'eStore': '/store'\n };\n ctrl.productPricesExist = true;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n ctrl.product = {};\n ctrl.productName = ctrl.productName || '';\n ctrl.productShortName = ctrl.productShortName || '';\n ctrl.asterisk = '';\n ctrl.translations = {};\n ctrl.buyblockData = {\n 'unavailableMsgType': '',\n 'buyblock_not_available_msg': '',\n 'buyblock_not_available_b2b_msg': '', 'b2cDisclaimer': '', 'disclaimer': ''\n };\n ctrl.priceList = [];\n ctrl.packArr = [];\n ctrl.termArr = [];\n ctrl.buyLink = 'no data received yet';\n ctrl.omnitureText = 'Buy';\n ctrl.defaultAutorenew = ctrl.isChecked === 'true';\n ctrl.priceListGroupedBy = { 'term': {}, 'pack': {} };\n ctrl.notAvailableItemsFor = { 'term': {}, 'pack': {} };\n ctrl.isChangeTriggeredByAnotherBuyblock = false;\n\n ctrl.addSalesTrackingParameters = addSalesTrackingParameters;\n ctrl.registerOnce = registerOnce;\n ctrl.setCurrentValue = setCurrentValue;\n ctrl.setCurrentPack = setCurrentPack;\n ctrl.setCurrentTerm = setCurrentTerm;\n ctrl.showARPopup = showARPopup;\n ctrl.sendToBuyUrl = sendToBuyUrl;\n ctrl.getPromoline = getPromoline;\n ctrl.accountDescPopup = accountDescPopup;\n ctrl.getSavings = getSavings;\n ctrl.isPriceSavingDisplayed = isPriceSavingDisplayed;\n ctrl.isPackDisabled = isPackDisabled;\n ctrl.isTermDisabled = isTermDisabled;\n ctrl.hideDisclaimer = hideDisclaimer;\n ctrl.arCheckboxClick = arCheckboxClick;\n ctrl.changePack = changePack;\n ctrl.changeTerm = changeTerm;\n var isLRC = appHelperService.stateIncludes('lrc-verdict');\n ctrl.isLrc = isLRC;\n ctrl.fixedDashTitle = fixedDashTitle;\n\n // $rootScope destroy events begin\n var currencyChange = $rootScope.$on('currencyChange', handleCurrencyChange),\n arPopupCheck = $rootScope.$on('arPopupCheck', function (event, value) {\n ctrl.autorenew = value;\n setCurrentValue();\n });\n // $rootScope destroy events end\n\n ctrl.$onInit = activate;\n ctrl.$onChanges = handleChanges;\n ctrl.hasTrialButton = hasTrialButton;\n\n function fixedDashTitle(title) {\n return (title || '').replace('-', '‑');\n }\n\n function activate() {\n ctrl.locale = ctrl.locale || ENV.locale;\n\n getProductData(ctrl.productShortName);\n getTranslations();\n\n $scope.$on('$destroy', handleScopeDestroyed);\n }\n\n function handleChanges(changesObj) {\n if (changesObj['valueToSet']) {\n handleUpdateCurrentValue(changesObj['valueToSet'].currentValue);\n }\n }\n\n function getPromoline() {\n return ctrl.promoline ? ctrl.promoline : ctrl.buyblockData ? ctrl.buyblockData.promoline : undefined;\n }\n\n function addSalesTrackingParameters(event) {\n if (event) event.preventDefault();\n if (ctrl.error) return;\n\n if (isLRC && ctrl.positionOnPage) {\n var price = ctrl.currentValue.price;\n var price_striked = ctrl.currentValue.price_striked;\n var delta = 0;\n\n if (price_striked) {\n delta = Math.round(100 * (price_striked - price) / price_striked);\n }\n\n buyblockService.trackBBEvent('addToCart', 'ecommerce', 'addToCart', ctrl.positionOnPage + '_' + ctrl.product.shortName + '_' + parseInt(ctrl.packValue, 10) + '_' + parseInt(ctrl.termValue, 10) + '_' + (ctrl.autorenew ? 'AR' : 'MR') + '_' + delta + '%');\n }\n ctrl.priceList.forEach(function (item) {\n if (item.id === ctrl.currentValue.id) {\n ctrl.masterPartner = item.master_partner;\n }\n });\n ctrl.buyLink = tracking.onBuyButtonClick(ctrl.buyLink, ctrl.masterPartner);\n sendToBuyUrl();\n }\n\n function registerOnce(checked) {\n buyblockService.registerOnce(checked, ctrl.defaultAutorenew);\n }\n\n function updateARPopupProduct() {\n if (isLRC) {\n $rootScope.$emit('shoARPopupProduct', {\n 'name': ctrl.product.shortName,\n 'position': ctrl.positionOnPage\n });\n }\n }\n\n function changePack($event) {\n ctrl.setCurrentValue('pack', $event);\n\n if (isLRC && ctrl.positionOnPage) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'selector_devices', ctrl.packValue + '_' + ctrl.positionOnPage + '_' + ctrl.product.shortName);\n }\n }\n\n function changeTerm() {\n ctrl.setCurrentValue('term');\n\n if (isLRC && ctrl.positionOnPage) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'selector_years', ctrl.termValue + '_' + ctrl.positionOnPage + '_' + ctrl.product.shortName);\n }\n }\n\n function showARPopup($event) {\n updateARPopupProduct();\n\n if (isLRC && ctrl.positionOnPage) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'click_infoAutoRenewal', ctrl.positionOnPage + '_' + ctrl.product.shortName);\n }\n\n buyblockService.showARPopup();\n\n if ($event) {\n $event.preventDefault();\n return false;\n }\n }\n\n function arCheckboxClick() {\n updateARPopupProduct();\n\n if (isLRC && ctrl.positionOnPage) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'checkbox_autoRenewal', (ctrl.autorenew ? 'on' : 'off') + '_' + ctrl.positionOnPage + '_' + ctrl.product.shortName);\n }\n\n registerOnce(true);\n }\n\n function handleUpdateCurrentValue(valueToSet) {\n var valueIsDifferent = !_.isEqual(valueToSet, {\n 'pack': ctrl.packValue,\n 'term': ctrl.termValue,\n 'autorenew': ctrl.autorenew\n });\n\n if (valueToSet && valueIsDifferent) {\n ctrl.packValue = valueToSet.pack;\n ctrl.termValue = valueToSet.term;\n ctrl.autorenew = valueToSet.autorenew;\n if (ctrl.priceList && ctrl.priceList.length > 0) setCurrentValue();\n }\n }\n\n function setCurrentPack(direction) {\n var position = ctrl.packArr.indexOf(ctrl.packValue);\n var length = ctrl.packArr.length;\n var newPosition = direction === 'up' ? position + 1 : position - 1;\n\n if (newPosition < 0) {\n newPosition = position;\n } else if (newPosition >= length) {\n newPosition = position;\n }\n\n ctrl.packValue = ctrl.packArr[newPosition];\n setCurrentValue('pack');\n }\n\n function setCurrentTerm(direction) {\n var position = ctrl.termArr.indexOf(ctrl.termValue);\n var length = ctrl.termArr.length;\n var newPosition = direction === 'up' ? position + 1 : position - 1;\n\n if (newPosition < 0) {\n newPosition = position;\n } else if (newPosition >= length) {\n newPosition = position;\n }\n\n ctrl.termValue = ctrl.termArr[newPosition];\n setCurrentValue('pack');\n }\n\n function setCurrentValue(changedProp) {\n findMatch(changedProp);\n ctrl.renewalAvailable = buyblockService.checkRenewal(ctrl.priceList, ctrl.packValue, ctrl.termValue, false);\n ctrl.getBuyblockSavings({ 'selectedOption': ctrl.currentValue, 'product': ctrl.product.bbSettings, 'component': ctrl.component });\n\n var promise = priceData.getCartLink(ctrl.overrideEstoreID || ctrl.currentValue.product_id, ctrl.currentValue.id, ctrl.purchaseType, ctrl.product.shortName, '', ctrl.currentValue['buy_link']).then(function (response) {\n ctrl.buyLink = response.data;\n }, function (rejection) {\n errorService.warn(rejection);\n ctrl.buyLink = 'Oops! Something went wrong';\n });\n // Prevents cyclic buyblock switching of one another and $onChanges() error\n if (!ctrl.isChangeTriggeredByAnotherBuyblock) {\n ctrl.onFormUpdated({\n 'section': 'top',\n 'product': ctrl.product,\n 'values': {\n 'term': ctrl.termValue,\n 'pack': ctrl.packValue,\n 'autorenew': ctrl.autorenew\n }\n });\n } else {\n ctrl.isChangeTriggeredByAnotherBuyblock = false;\n }\n\n setAvailableOptionList(changedProp);\n\n return promise;\n }\n\n function setAvailableOptionList(prop) {\n if (!prop) return;\n\n // this is to avoid repeating the same logic for term and pack\n // prop is pack|term\n // otherProp is the other value\n var otherProp = prop === 'term' ? 'pack' : 'term',\n propValue = ctrl[prop + 'Value'],\n otherPropValueArr = ctrl[otherProp + 'Arr'],\n availableListForOtherProp = _.uniq(ctrl.priceListGroupedBy[prop][propValue].map(function (i) {\n return i[otherProp];\n }));\n\n ctrl.notAvailableItemsFor[otherProp] = _.difference(otherPropValueArr, availableListForOtherProp).reduce(function (res, pack) {\n return angular.extend(res, _defineProperty({}, pack, true));\n }, {});\n }\n\n function isPackDisabled(value) {\n return ctrl.notAvailableItemsFor.pack[value] === true;\n }\n\n function isTermDisabled(value) {\n return ctrl.notAvailableItemsFor.term[value] === true;\n }\n\n function sendToBuyUrl() {\n return buyblockService.sendToBuyUrl(ctrl.buyLink, ctrl.purchaseType);\n }\n\n function hidePack() {\n if (ctrl.locale === 'ru-ru' && (ctrl.productShortName === 'ksc-family' || ctrl.product && ctrl.product.shortName === 'ksc-family')) {\n ctrl.hidePack = true;\n }\n }\n\n // Private helper Methods\n function buyblockSetup() {\n return directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n var bbSettings = ctrl.productInfo ? ctrl.productInfo.bbSettings : {},\n products = ['kesb-select', 'kesb-advanced', 'ksos', 'cloud', 'cloud-old', 'cloud-plus', 'office-365'];\n\n ctrl.isB2B = _.some(products, function (product) {\n return product === ctrl.product.shortName;\n });\n\n ctrl.buyblockData = angular.extend({}, response.data.fields, bbSettings);\n\n ctrl.disablePackSelect = ctrl.buyblockData.packSelectDisabled === 'True';\n ctrl.disableTermSelect = ctrl.buyblockData.termSelectDisabled === 'True';\n\n ctrl.buyblockData.unavailableMsgType = ''; // this.buyblockData.unavailableMsgType used in ng-switch directive to pick b2b_fallback text if it exists and b2c_fallback if not\n if (ctrl.buyblockData.buyblock_not_available_msg && !ctrl.isB2B) ctrl.buyblockData.unavailableMsgType = 'b2c';\n if (ctrl.buyblockData.buyblock_not_available_b2b_msg && ctrl.isB2B) ctrl.buyblockData.unavailableMsgType = 'b2b';\n checkDisclaimer();\n hidePack();\n });\n }\n\n function checkDisclaimer() {\n var b2bDisclaimer = ctrl.buyblockData.disclaimer || ctrl.buyblockData.smbDisclaimer,\n hideAsteriskOnB2B = ctrl.product && appHelperService.isTrue(ctrl.product.hideAsterisk) && ctrl.isB2B;\n var alwaysShowDisclaimer = ctrl.buyblockData.b2cDisclaimerLogicType && !!ctrl.buyblockData.b2cDisclaimerLogicType.length && ctrl.buyblockData.b2cDisclaimerLogicType[0] === 'always show b2c disclaimer';\n if ($rootScope.kaspersky.verdictSite === 'LRC' && !alwaysShowDisclaimer && (!ctrl.isB2B || ctrl.locale === 'en-us')) return ctrl.disclaimerObj = {};\n\n ctrl.disclaimerObj = ctrl.product && ctrl.product.bbDisclaimer ? { 'disclaimer': ctrl.product.bbDisclaimer, 'asterisk': hideAsteriskOnB2B ? '' : '*' } : buyblockService.checkDisclaimer(ctrl.isB2B, ctrl.buyblockData.b2cDisclaimer, b2bDisclaimer, hideAsteriskOnB2B);\n }\n\n function findMatch(changedProp) {\n var otherProp = changedProp === 'pack' ? 'term' : 'pack';\n var otherPropValueArr = ctrl[otherProp + 'Arr'];\n var matchConfig = {\n 'pack': ctrl.packValue,\n 'term': ctrl.termValue,\n 'autorenew': ctrl.autorenew\n },\n matchIndex = buyblockService.findPriceMatch(ctrl.priceList, matchConfig, false);\n var initialMatchConfig = angular.copy(matchConfig);\n\n // First look if opposite autorenew exists, matchIndex will be set above 0 if success\n if (matchIndex < 0) {\n matchConfig.autorenew = !matchConfig.autorenew;\n matchIndex = buyblockService.findPriceMatch(ctrl.priceList, matchConfig, false);\n }\n\n // Second if no opposite autorenew look if an option with higher value of other prop exists\n if (matchIndex < 0) {\n matchConfig.autorenew = !matchConfig.autorenew;\n\n for (var i = 0; i < otherPropValueArr.length; i++) {\n matchConfig[otherProp] = otherPropValueArr[i];\n matchIndex = buyblockService.findPriceMatch(ctrl.priceList, matchConfig, false);\n if (matchIndex >= 0 && !angular.equals(initialMatchConfig, matchConfig)) {\n ctrl[otherProp + 'Value'] = ctrl.priceList[matchIndex][otherProp];\n setAvailableOptionList(otherProp);\n highlightForcedValueChange(otherProp);\n break;\n }\n }\n }\n\n if (matchIndex > -1) {\n ctrl.currentValue = ctrl.priceList[matchIndex];\n }\n }\n\n function highlightForcedValueChange(selectTypeAttr) {\n $element.find('input[' + selectTypeAttr + ']').addClass('highlight');\n $timeout(function () {\n $element.find('input[' + selectTypeAttr + ']').removeClass('highlight');\n }, 1000);\n }\n\n function getTranslations() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n });\n }\n\n function setProductPageLink() {\n ctrl.product.prodPageLink = ctrl.hideProductLinks ? '' : ctrl.product.prodPageLink;\n }\n\n function getProductData(productShortName) {\n if (productShortName) {\n return getCustomProduct(productShortName);\n }\n var productInfo = $scope.$watch('$ctrl.productInfo', function (newV) {\n if (newV) {\n ctrl.product = ctrl.productInfo;\n ctrl.productName = ctrl.productInfo.title;\n setProductPageLink();\n getPriceList();\n productInfo();\n buyblockSetup();\n }\n });\n }\n\n function getCustomProduct(productShortName) {\n return productData.getb2c(productShortName).then(function (response) {\n ctrl.product = response.data.fields;\n ctrl.productName = response.data.fields.title;\n setProductPageLink();\n buyblockSetup();\n }).then(function () {\n getPriceList();\n });\n }\n\n function getPriceList(skipEstore) {\n if (!ctrl.productName) return;\n if (ctrl.purchaseType === 'Free') {\n ctrl.productPricesExist = false;\n return;\n }\n if (!skipEstore) setEStore();\n\n return priceData.getPrice(ctrl.productName, ctrl.purchaseType, ctrl.newEstore || '').then(handlePriceSuccess, handlePriceError);\n }\n\n function handleCurrencyChange() {\n ctrl.currency = $rootScope.currency;\n ctrl.showAR = SETUP.showAR;\n ctrl.isChangeTriggeredByAnotherBuyblock = true;\n getPriceList();\n }\n\n function handlePriceError(rejection) {\n ctrl.productPricesExist = false;\n errorService.warn(rejection);\n }\n\n function handleScopeDestroyed() {\n arPopupCheck();\n currencyChange();\n }\n\n function resetPricingObjectsToDefault() {\n ctrl.packArr = [];\n ctrl.termArr = [];\n ctrl.buyLink = 'no data received yet';\n ctrl.defaultAutorenew = ctrl.isChecked === 'true';\n ctrl.productPricesExist = true;\n }\n\n function handlePriceSuccess(response) {\n setupTracking();\n var bbSettings = ctrl.product.bbSettings;\n\n if (bbSettings.isChecked) ctrl.isChecked = bbSettings.isChecked;\n if (bbSettings.showAR) ctrl.showAR = bbSettings.showAR;\n if (bbSettings.hideArCheckbox[0]) {\n ctrl.showAR = bbSettings.hideArCheckbox[0] && bbSettings.hideArCheckbox[0].toLowerCase() !== 'true';\n }\n\n resetPricingObjectsToDefault();\n\n function sortByPropName(prop, a, b) {\n return parseInt(a[prop]) - parseInt(b[prop]);\n }\n\n ctrl.priceList = response.data;\n ctrl.priceList.sort(function (a, b) {\n var res = sortByPropName('pack', a, b);\n return res !== 0 ? res : sortByPropName('term', a, b);\n });\n\n if (!angular.isArray(ctrl.priceList) || !ctrl.priceList.length) {\n if (ctrl.newEstore) {\n errorService.warn('No matches found on ' + ctrl.newEstore + ' for ' + ctrl.productName + '; retrying with default estore');\n delete ctrl.newEstore;\n return getPriceList(true);\n } else {\n errorService.warn('API not available');\n ctrl.productPricesExist = false;\n return false;\n }\n }\n setupPriceList();\n }\n\n function isPriceSavingDisplayed() {\n var hasCurVal = ctrl.currentValue && ctrl.currentValue.price_striked;\n\n if (isLRC && ctrl.buyblockData.saveRateLRC) ctrl.buyblockData.saveRate = ctrl.buyblockData.saveRateLRC;\n\n return hasCurVal && (ctrl.buyblockData.saveRate || ctrl.buyblockData.saveRateText);\n }\n\n function setEStore() {\n if (ctrl.estore || isLRC) {\n ctrl.newEstore = ctrl.estore;\n if (!currencyManager.pl2Enabled()) setOverrideEstoreID();\n return;\n }\n ctrl.newEstore = ctrl.product.bbSettings.eStore;\n }\n\n function setOverrideEstoreID() {\n priceData.info(ctrl.productName, ctrl.purchaseType, ctrl.newEstore, isLRC).then(function (response) {\n ctrl.overrideEstoreID = response.data && response.data.id;\n if (!ctrl.overrideEstoreID) handleEstoreOverrideError();\n }).catch(function (rejection) {\n errorService.warn(rejection);\n handleEstoreOverrideError();\n });\n }\n\n function handleEstoreOverrideError() {\n directiveData.getPartnerByName(ctrl.newEstore).then(function (response) {\n ctrl.partnerObj = response;\n if (ctrl.partnerObj) ctrl.buyblockData.lrcPartnerUnavailable = ctrl.buyblockData.lrcPartnerUnavailable && ctrl.buyblockData.lrcPartnerUnavailable.replace('#', ctrl.partnerObj.href);\n });\n }\n\n function getCNPackValue() {\n if (ctrl.locale === 'zh-cn' && (ctrl.productShortName === 'kav' || $state.params.productName === 'kav')) {\n return ctrl.packArr[0];\n }\n }\n\n function getUSPackValue() {\n if (ctrl.locale === 'en-us' && (ctrl.productShortName === 'ktsmd' || $state.params.productName === 'ktsmd')) {\n return _.find(ctrl.packArr, function (i) {\n return i === '5 Devices';\n });\n }\n }\n\n function setupPriceList() {\n var hasAutoRenewal = ctrl.priceList.some(function (item) {\n return ctrl.priceList[0].autorenew !== item.autorenew;\n });\n ctrl.packArr = _.uniq(ctrl.priceList.map(function (i) {\n return i.pack;\n }));\n ctrl.termArr = _.uniq(ctrl.priceList.map(function (i) {\n return i.term;\n }));\n var packMonthlyArr = [];\n var packYearlyArr = [];\n\n ctrl.priceList.forEach(function (item) {\n if (item.term_type === 'M') {\n ctrl.monthlyAvailable = true;\n packMonthlyArr.push(item.term);\n } else if (item.term_type === 'Y') {\n packYearlyArr.push(item.term);\n }\n });\n\n ctrl.packMonthlyArr = _.uniq(packMonthlyArr);\n ctrl.packYearlyArr = _.uniq(packYearlyArr);\n\n ctrl.priceListGroupedBy = {\n 'term': _.groupBy(ctrl.priceList, 'term'),\n 'pack': _.groupBy(ctrl.priceList, 'pack')\n };\n\n // if we have only one autorenew and it doesn't match the default one\n if (ctrl.disableAutoRenew === 'true') {\n ctrl.showAR = false;\n ctrl.autorenew = false;\n } else {\n if (!hasAutoRenewal) {\n ctrl.showAR = false;\n ctrl.defaultAutorenew = ctrl.priceList[0].autorenew;\n }\n }\n // when we provided with a number for licenses convert it to string like '1 device' for LRC\n if (ctrl.selectedPack) {\n setCustomSelectedPack(ctrl);\n }\n // when we provided with a number for terms convert it to string like '2 years' for LRC\n if (ctrl.selectedTerm && ctrl.productShortName === 'ksec') {\n ctrl.selectedTermString = ctrl.selectedTerm;\n } else if (ctrl.selectedTerm) {\n setCustomSelectedTerm(ctrl);\n }\n\n ctrl.packValue = getCNPackValue() || ctrl.selectedPackString || getUSPackValue() || ctrl.packArr[0];\n ctrl.termValue = ctrl.selectedTermString || ctrl.termArr[0];\n ctrl.autorenew = ctrl.selectedAutorenew === 'true' || ctrl.defaultAutorenew;\n\n // Emit Buyblock ready event to currency selector\n $rootScope.buyBlockReady();\n\n setCurrentValue();\n setAvailableOptionList('pack');\n setAvailableOptionList('term');\n\n updatePriceFormat();\n }\n\n function setCustomSelectedPack(ctrl) {\n var selectedPack = parseInt(ctrl.selectedPack);\n ctrl.selectedPackString = _.find(ctrl.packArr, function (value) {\n return parseInt(value) === selectedPack;\n });\n }\n\n function setCustomSelectedTerm(ctrl) {\n if (ctrl.selectedTerm === '0') ctrl.selectedTerm = 1;\n\n if (ctrl.selectedTerm === '0.5' && ctrl.priceListGroupedBy.term['6 Months']) {\n ctrl.selectedTerm = ctrl.selectedTermString = '6 Months';\n return;\n }\n\n var selectedTermFloat = parseFloat(ctrl.selectedTerm),\n rounded = selectedTermFloat < 1 ? Math.ceil(selectedTermFloat) : Math.floor(selectedTermFloat);\n\n if (ctrl.selectedTerm < 1) {\n ctrl.packMonthlyArr.forEach(function (value) {\n var valueInt = parseInt(value);\n // this is needed for cases where product is in months, and the term would come as 0.08 (30/365)\n // use ceil for numbers < 1 and floor for numbers > 1\n if (valueInt === rounded || valueInt === rounded - 1) {\n ctrl.selectedTermString = value;\n }\n });\n } else {\n ctrl.packYearlyArr.forEach(function (value) {\n var valueInt = parseInt(value);\n if (valueInt === rounded || valueInt === rounded - 1) {\n ctrl.selectedTermString = value;\n }\n });\n }\n }\n\n function setupTracking() {\n if (ctrl.purchaseType === 'Renewal') ctrl.omnitureText = 'Renew';\n if (ctrl.upgradeButton) ctrl.omnitureText = 'Upgrade';\n }\n\n function accountDescPopup() {\n ngDialog.open(buyblockService.ngDialogSettings(ctrl, $scope, {\n 'className': 'ngdialog-plain ngdialog-narrow',\n 'template': '/resources/template/html/modules/b2c/components/kscloud-disclaimers/templates/account-description.html'\n }));\n }\n\n function hasTrialButton() {\n return buyblockService.hasTrialButton(ctrl.product) && !appHelperService.isTrue(ctrl.hideTrialButton);\n }\n\n /**\n * Get savings messaging and value (either custom or default)\n */\n function getSavings(messageType, savingsPriceType, saveRateText) {\n if (ctrl.product) return buyblockService.getSavings(messageType, ctrl.currentValue, ctrl.product.bbSettings, ctrl.buyblockData, saveRateText || ctrl.saveRateText, savingsPriceType || ctrl.savingsPriceType, ctrl.component);\n }\n\n function updatePriceFormat() {\n ctrl.showLabelFR = appHelperService.stateIncludes('lrc-verdict') && ENV.locale === 'fr-fr';\n }\n\n function hideDisclaimer() {\n var isLrcPage = appHelperService.assertStateByName(['lrc-verdict', 'lrc-serial', 'lrc-b2b', 'lrc-b2b-att', 'lrc-b2c', 'lrc-b2c-att', 'lrc-fallback', 'vsb-lrc-closed']),\n isProduct = ctrl.product && ['cloud', 'cloud-old', 'cloud-plus', 'office-365'].indexOf(ctrl.product.shortName) > -1,\n hasDisclaimer = ctrl.disclaimerObj && ctrl.disclaimerObj.disclaimer,\n hideDisclaimer = appHelperService.isTrue(ctrl.product.hideDisclaimerOnLrc);\n\n return isLrcPage && isProduct && hasDisclaimer && hideDisclaimer;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.buyblocks').component('buyblockVsbDropdown', {\n 'bindings': {\n 'productShortName': '@productName', //for cases when we only know the name of the product\n 'productInfo': '<', //for cases when we have all product data available\n 'purchaseType': '@',\n 'selectedPack': '@',\n 'selectedTerm': '@',\n 'selectedAutorenew': '@',\n 'estore': '@',\n 'template': '@',\n 'overrideTrialButtonText': '@',\n 'overrideTrialButtonLink': '@',\n 'hideProductLinks': '@',\n 'promoline': '@',\n 'hideTrialButton': '@',\n 'saveRateText': '@',\n 'savingsPriceType': '@',\n 'disableAutoRenew': '@',\n 'setCustomLocale': '@',\n 'component': '@',\n 'redesign': '@',\n 'showDisclaimer': '@',\n 'getBuyblockSavings': '&'\n },\n 'controller': 'buyblockVsbDropdownController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'vsb-dropdown';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/_shared/components/buyblock/templates/buyblock-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n buyblockVsbDropdownController.$inject = [\"$rootScope\", \"$scope\", \"$state\", \"ENV\", \"SETUP\", \"buyBlockHelperService\", \"directiveData\", \"priceData\", \"productData\", \"tracking\", \"windowHelperService\", \"buyblockService\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.buyblocks').controller('buyblockVsbDropdownController', buyblockVsbDropdownController);\n\n function buyblockVsbDropdownController($rootScope, $scope, $state, ENV, SETUP, buyBlockHelperService, directiveData, priceData, productData, tracking, windowHelperService, buyblockService, appHelperService, errorService) {\n var ctrl = this;\n ctrl.isChecked = '' + SETUP.isChecked;\n ctrl.showAR = '' + SETUP.showAR;\n ctrl.productPricesExist = true;\n ctrl.currency = buyblockService.getCurrency(ctrl);\n ctrl.currentValue = {\n 'price': 'no data',\n 'eStore': '/store'\n };\n if (!ctrl.isCustomLocale) ctrl.curState = $state.current.parent;\n ctrl.termArr = [];\n ctrl.buyLink = 'no data received yet';\n ctrl.defaultAutorenew = ctrl.isChecked === 'true';\n ctrl.selectedPackString = '';\n ctrl.selectedTermString = '';\n ctrl.showARPopup = showARPopup;\n ctrl.registerOnce = registerOnce;\n ctrl.getPriceList = getPriceList;\n ctrl.setCurrentValue = setCurrentValue;\n ctrl.sendToBuyUrl = sendToBuyUrl;\n ctrl.addSalesTrackingParameters = addSalesTrackingParameters;\n ctrl.getPromoline = getPromoline;\n ctrl.getSavings = getSavings;\n ctrl.hideRenewLink = hideRenewLink;\n ctrl.isTotal = appHelperService.assertStateByName('smb-product-total');\n ctrl.isUniversal = appHelperService.assertStateByName('smb-product-universal');\n\n // $rootScope destroy events begin\n var arPopupCheck = $rootScope.$on('arPopupCheck', function (event, value) {\n ctrl.autorenew = value;\n setCurrentValue();\n }),\n disableAR = $rootScope.$on('disableAR', function () {\n ctrl.autorenew = false;\n setCurrentValue();\n }),\n currencyChange = $rootScope.$on('currencyChange', handleCurrencyChange);\n // $rootScope destroy events end\n ctrl.$onInit = activate;\n ctrl.hasTrialButton = hasTrialButton;\n\n function activate() {\n ctrl.locale = ctrl.locale || ENV.locale;\n ctrl.isCustomLocale = checkCustomLocale();\n ctrl.formattedPromoSavings = '';\n\n getProductData();\n\n $scope.$on('$destroy', handleScopeDestroyed);\n }\n\n function addSalesTrackingParameters(event) {\n if (event) event.preventDefault();\n ctrl.priceList.forEach(function (item) {\n if (item.id === ctrl.currentValue.id) {\n ctrl.masterPartner = item.master_partner;\n }\n });\n ctrl.buyLink = tracking.onBuyButtonClick(ctrl.buyLink, ctrl.masterPartner);\n if (!ctrl.error) ctrl.sendToBuyUrl();\n }\n\n function hideRenewLink() {\n var isLrcPage = appHelperService.assertStateByName(['lrc-verdict', 'lrc-serial', 'lrc-b2b', 'lrc-b2b-att', 'lrc-b2c', 'lrc-b2c-att', 'lrc-fallback', 'vsb-lrc-closed']);\n if (ctrl.product && ctrl.product.shortName) return ctrl.product.shortName === 'ksos' && ctrl.locale === 'en-us' && isLrcPage && !!ctrl.product.renewLink;\n }\n\n function getPromoline() {\n return ctrl.promoline ? ctrl.promoline : ctrl.buyblockData ? ctrl.buyblockData.promoline : undefined;\n }\n\n function getPriceList() {\n if (angular.isUndefined(ctrl.productName)) return;\n if (ctrl.purchaseType === 'Free') {\n ctrl.productPricesExist = false;\n return;\n }\n setEStore();\n\n return priceData.getPrice(ctrl.productName, ctrl.purchaseType, ctrl.newEstore || '').then(handlePriceSuccess, handlePriceError);\n }\n\n function registerOnce(checked) {\n if (ctrl.modalDisplayedOnce) return;\n\n ctrl.modalDisplayedOnce = true;\n buyblockService.registerOnce(checked, ctrl.defaultAutorenew, true);\n }\n\n function sendToBuyUrl() {\n windowHelperService.goToUrl(tracking.formatQueryString(ctrl.buyLink, buyBlockHelperService.hasPurchaseAsPurchaseType(ctrl.purchaseType)));\n }\n\n function setPackArr() {\n var packListMatchingSelectedTerm = ctrl.priceList.filter(function (i) {\n return i.term === ctrl.termValue;\n }).map(function (i) {\n return i.pack;\n });\n\n ctrl.packArr = _.uniq(packListMatchingSelectedTerm).sort(function (a, b) {\n return parseInt(a) - parseInt(b);\n });\n }\n\n function setCurrentValue() {\n setPackArr();\n findMinMax();\n\n // A check for proper text input begin\n var packNumber = parseInt(ctrl.packValue, 10);\n ctrl.error = false;\n\n if (ctrl.isCustomLocale) {\n if (isNaN(packNumber)) ctrl.packValue = ctrl.minValue; // for IE which allows symbols in the number input\n\n if (angular.isUndefined(ctrl.packValue) || packNumber > 0 && packNumber < ctrl.minValue) {\n ctrl.error = true; // the value is incorrect but user could continue his input to get a valid number, triggers red border\n return false;\n }\n\n ctrl.error = false;\n\n if (packNumber <= 0) ctrl.packValue = ctrl.minValue;\n }\n\n if (packNumber > ctrl.maxValue) ctrl.packValue = ctrl.maxValue;\n if (packNumber < ctrl.minValue) ctrl.packValue = ctrl.minValue;\n\n if (ctrl.packValue === undefined) {\n ctrl.error = true;\n return;\n }\n findMatch();\n ctrl.renewalAvailable = buyblockService.checkRenewal(ctrl.priceList, ctrl.packValue, ctrl.termValue, mustParsePackValue());\n ctrl.getBuyblockSavings({ 'selectedOption': ctrl.currentValue, 'product': ctrl.product.bbSettings, 'component': ctrl.component });\n ctrl.formattedPromoSavings = ctrl.product.savingsPromoType !== 'none' ? getSavings('text', ctrl.product.buyblockPromo) : '';\n\n return priceData.getCartLink(ctrl.currentValue.product_id, ctrl.currentValue.id, ctrl.purchaseType, '', '', ctrl.currentValue['buy_link']).then(function (response) {\n ctrl.buyLink = response.data;\n }, function (rejection) {\n errorService.warn(rejection);\n ctrl.buyLink = 'Oops! Something went wrong';\n });\n }\n\n function showARPopup() {\n buyblockService.showARPopup();\n }\n\n // Private methods\n function buyblockSetup() {\n return directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n var products = ['kesb-select', 'kesb-advanced', 'ksos', 'cloud', 'cloud-old', 'cloud-plus', 'office-365', 'kesb-universal'];\n ctrl.isB2B = _.some(products, function (product) {\n return product === ctrl.product.shortName;\n });\n ctrl.buyblockData = response.data.fields;\n ctrl.buyblockData.unavailableMsgType = '';\n if (ctrl.buyblockData.buyblock_not_available_msg) ctrl.buyblockData.unavailableMsgType = 'b2c';\n if (ctrl.buyblockData.buyblock_not_available_b2b_msg) ctrl.buyblockData.unavailableMsgType = 'b2b';\n checkDisclaimer();\n checkMetaCountries();\n });\n }\n\n function checkCustomLocale() {\n var customLocales = ['fi-fi', 'da-dk', 'en-us', 'es-es', 'fr-fr', 'fr-be', 'it-it', 'ja-jp', 'nb-no', 'nl-nl', 'ru-ru', 'sv-se'];\n return ctrl.setCustomLocale || customLocales.indexOf(ctrl.locale) > -1;\n }\n\n function checkMetaCountries() {\n var metaCountries = ['en-za', 'en-ae', 'ar-ae', 'tr-tr'];\n if (metaCountries.indexOf(ctrl.locale) > -1) ctrl.buyblockData.needMore = ctrl.buyblockData.or;\n }\n\n function checkDisclaimer() {\n var b2bDisclaimer = ctrl.buyblockData.disclaimer || ctrl.buyblockData.smbDisclaimer,\n hideAsteriskOnB2B = ctrl.product && appHelperService.isTrue(ctrl.product.hideAsterisk) && ctrl.isB2B;\n\n if (ctrl.locale === 'en-us' && $rootScope.kaspersky.verdictSite === 'LRC' || $state.current.name.indexOf('smb-product') > -1 && ctrl.locale !== 'it-it') return ctrl.disclaimerObj = {};\n\n ctrl.disclaimerObj = ctrl.product && ctrl.product.bbDisclaimer ? { 'disclaimer': ctrl.product.bbDisclaimer, 'asterisk': hideAsteriskOnB2B ? '' : '*' } : buyblockService.checkDisclaimer(ctrl.isB2B, ctrl.buyblockData.b2cDisclaimer, b2bDisclaimer, hideAsteriskOnB2B);\n }\n\n function setProductPageLink() {\n ctrl.product.prodPageLink = ctrl.hideProductLinks ? '' : ctrl.product.prodPageLink;\n }\n\n function getProductData() {\n if (ctrl.productShortName) {\n // for cases when we only know the name of the product\n return getCustomProduct();\n } else {\n // for cases when we have all product data available\n $scope.$watch('$ctrl.productInfo', function (newV) {\n if (newV && angular.isObject(newV)) {\n ctrl.product = ctrl.productInfo;\n ctrl.productName = ctrl.productInfo.title;\n ctrl.hasExtendedFallback = ctrl.product.extendedFallback === 'true';\n ctrl.getPriceList();\n setProductPageLink();\n buyblockSetup();\n }\n });\n }\n }\n\n function handleCurrencyChange() {\n ctrl.currency = $rootScope.currency || '';\n ctrl.getPriceList();\n ctrl.packValue = ctrl.minValue;\n }\n\n function handleScopeDestroyed() {\n arPopupCheck();\n disableAR();\n currencyChange();\n }\n\n /**\n * ctrl.product.bbSettings.eStore pulls data from Tridion component, ctrl.estore takes it from parameter passed in\n * this conditional is probably used to target buyblocks outside of LRC, added lrc state detection to make it work for ATT verdicts - AFedotov\n */\n function setEStore() {\n if (ctrl.estore || $state.includes('lrc-verdict')) {\n ctrl.newEstore = ctrl.estore;\n } else {\n ctrl.newEstore = ctrl.product && ctrl.product.bbSettings ? ctrl.product.bbSettings.eStore : '';\n }\n }\n\n function setupPriceList() {\n var hasAutoRenewal = ctrl.priceList.some(function (item) {\n return ctrl.priceList[0].autorenew !== item.autorenew;\n });\n\n ctrl.termArr = _.uniq(ctrl.priceList.map(function (i) {\n return i.term;\n }));\n ctrl.termTypeArr = _.uniq(ctrl.priceList.map(function (i) {\n return i['term_name'];\n }));\n\n if (ctrl.disableAutoRenew === 'true') {\n ctrl.showAR = false;\n ctrl.autorenew = false;\n } else {\n if (!hasAutoRenewal) {\n ctrl.showAR = false;\n if (!ctrl.isCustomLocale) ctrl.defaultAutorenew = ctrl.priceList[0].autorenew;\n } else {\n ctrl.showAR = '' + SETUP.showAR;\n }\n }\n\n function setCustomSelectedTerm() {\n _.forEach(ctrl.termArr, function (value, index) {\n if (parseInt(value) === parseInt(ctrl.selectedTerm || ctrl.product.bbSettings.selectedTerm)) {\n if (ctrl.selectedTerm && ctrl.selectedTerm.indexOf(ctrl.termTypeArr[index]) === -1) return;\n ctrl.selectedTermString = value;\n }\n });\n }\n\n if (ctrl.product.bbSettings && (ctrl.selectedTerm || ctrl.product.bbSettings.selectedTerm)) setCustomSelectedTerm();\n ctrl.termValue = ctrl.selectedTermString || ctrl.termArr[0];\n ctrl.autorenew = ctrl.defaultAutorenew;\n\n setPackArr();\n\n function setCustomSelectedPack() {\n var x = parseInt(ctrl.selectedPack || ctrl.product.bbSettings.selectedPack);\n ctrl.selectedPackString = ctrl.packArr.reduce(function (prev, curr) {\n return Math.abs(parseInt(curr) - x) < Math.abs(parseInt(prev) - x) ? curr : prev;\n });\n ctrl.showMinMaxDisclaimer = x > parseInt(ctrl.selectedPackString) || x < parseInt(ctrl.selectedPackString);\n }\n\n // let packValueInt = (ctrl.template === 'smb-prod' && !ctrl.isCustomLocale) ? parseInt(ctrl.packArr[0]) : ctrl.packArr[0];\n if (ctrl.product.bbSettings && (ctrl.selectedPack || ctrl.product.bbSettings.selectedPack)) setCustomSelectedPack();\n if (!ctrl.isCustomLocale) ctrl.packValue = parseInt(ctrl.selectedPackString) || parseInt(ctrl.packArr[0]);\n if (ctrl.isCustomLocale) ctrl.packValue = ctrl.selectedPackString || ctrl.packArr[0];\n // ctrl.packValue = ctrl.selectedPackString || packValueInt;\n\n // Emit Buyblock ready event to currency selector\n $rootScope.buyBlockReady();\n setCurrentValue();\n }\n\n function findMinMax() {\n var mappedPackArr = _.map(ctrl.packArr, function (obj) {\n return parseInt(obj);\n });\n ctrl.maxValue = Math.max.apply(Math, mappedPackArr);\n ctrl.minValue = Math.min.apply(Math, mappedPackArr);\n }\n\n function handlePriceError(response) {\n ctrl.productPricesExist = false;\n errorService.warn(response);\n }\n\n function handlePriceSuccess(response) {\n var bbSettings = ctrl.product.bbSettings;\n\n if (bbSettings.isChecked) {\n ctrl.isChecked = bbSettings.isChecked;\n ctrl.defaultAutorenew = ctrl.isChecked === 'true';\n }\n\n if (bbSettings.showAR) {\n ctrl.showAR = bbSettings.showAR;\n }\n\n if (angular.isDefined(bbSettings.hideArCheckbox) && bbSettings.hideArCheckbox[0]) {\n ctrl.hideArCheckbox = bbSettings.hideArCheckbox[0];\n }\n\n ctrl.priceList = response.data;\n if (!angular.isObject(ctrl.priceList) || !ctrl.priceList.length) {\n errorService.warn('API not available');\n ctrl.productPricesExist = false;\n return false;\n }\n setupPriceList();\n ctrl.productPricesExist = true;\n }\n\n function getCustomProduct() {\n var promiseFn = productData.getsmb;\n if (ctrl.productShortName === 'ksos') promiseFn = productData.getvsb;\n return promiseFn(ctrl.productShortName).then(function (response) {\n ctrl.product = ctrl.productInfo = response.data.fields;\n ctrl.productName = response.data.fields.title;\n setProductPageLink();\n buyblockSetup();\n }).then(function () {\n ctrl.getPriceList();\n });\n }\n\n function findMatch() {\n var matchConfig = {\n 'pack': ctrl.packValue,\n 'term': ctrl.termValue,\n 'autorenew': ctrl.autorenew\n },\n matchIndex = buyblockService.findPriceMatch(ctrl.priceList, matchConfig, mustParsePackValue());\n\n if (matchIndex < 0) {\n matchConfig.autorenew = !matchConfig.autorenew;\n\n matchIndex = buyblockService.findPriceMatch(ctrl.priceList, matchConfig, mustParsePackValue());\n }\n\n if (matchIndex > -1) {\n ctrl.currentValue = ctrl.priceList[matchIndex];\n ctrl.currentValuePack = ctrl.currentValue.pack.split(' + ');\n ctrl.packValue = ctrl.isCustomLocale ? ctrl.currentValue.pack : parseInt(ctrl.currentValuePack[0]);\n }\n }\n\n function mustParsePackValue() {\n return ctrl.locale !== 'ru-ru' && ctrl.locale !== 'ja-jp';\n }\n\n function hasTrialButton() {\n return buyblockService.hasTrialButton(ctrl.product) && !appHelperService.isTrue(ctrl.hideTrialButton);\n }\n\n /**\n * Get savings messaging and value (either custom or default)\n */\n function getSavings(messageType, messageText) {\n if (ctrl.product) return buyblockService.getSavings(messageType, ctrl.currentValue, ctrl.product.bbSettings, ctrl.buyblockData, messageText || ctrl.saveRateText, ctrl.savingsPriceType);\n }\n }\n})();\n'use strict';\n\n(function () {\n buyblockService.$inject = [\"$rootScope\", \"currencyManager\", \"windowHelperService\", \"sessionStorageService\", \"appHelperService\", \"$filter\", \"SETUP\", \"$window\"];\n angular.module('kappGlobal.buyblocks').factory('buyblockService', buyblockService);\n\n function buyblockService($rootScope, currencyManager, windowHelperService, sessionStorageService, appHelperService, $filter, SETUP, $window) {\n return {\n 'sendToBuyUrl': sendToBuyUrl,\n 'hasPurchaseAsPurchaseType': hasPurchaseAsPurchaseType,\n 'getCurrency': getCurrency,\n 'checkDisclaimer': checkDisclaimer,\n 'registerOnce': registerOnce,\n 'showARPopup': showARPopup,\n 'checkRenewal': checkRenewal,\n 'ngDialogSettings': ngDialogSettings,\n 'findPriceMatch': findPriceMatch,\n 'hasTrialButton': hasTrialButton,\n 'getSavings': getSavings,\n 'trackBBEvent': trackBBEvent\n };\n\n function trackBBEvent(name, eventCategory, eventAction, eventLabel) {\n if (angular.isFunction($window.trackEvent)) {\n $window.trackEvent(name, {\n 'eventCategory': eventCategory,\n 'eventAction': eventAction,\n 'eventLabel': eventLabel\n });\n }\n }\n\n function sendToBuyUrl(buyLink) {\n return windowHelperService.goToUrl(buyLink);\n }\n\n function hasPurchaseAsPurchaseType(purchaseType) {\n return purchaseType && purchaseType === 'Purchase';\n }\n\n function ngDialogSettings(ctrl, scope, settings) {\n var defaultSettings = {\n 'data': ctrl,\n 'scope': scope\n };\n\n if (settings) for (var attr in settings) {\n defaultSettings[attr] = settings[attr];\n }return defaultSettings;\n }\n\n function getCurrency(value) {\n currencyManager.getCurrencies();\n\n var requiredArray = ['currency', 'symbol', 'locale'];\n var hasAllRequirements = requiredArray.every(function (item) {\n return value.hasOwnProperty(item);\n });\n\n if (!hasAllRequirements) return $rootScope.currency || '';\n $rootScope.populateCurrency({\n 'currency': value.currency,\n 'symbol': value.symbol,\n 'locale': value.locale\n });\n return value.currency;\n }\n\n function checkDisclaimer(isB2B, b2cDisclaimer, b2bDisclaimer, hideAsteriskOnB2B) {\n var disclaimerObj = {};\n\n if (!isB2B && b2cDisclaimer) {\n disclaimerObj.asterisk = '*';\n disclaimerObj.disclaimer = b2cDisclaimer;\n }\n\n if (isB2B && b2bDisclaimer) {\n disclaimerObj.asterisk = hideAsteriskOnB2B ? '' : '*';\n disclaimerObj.disclaimer = b2bDisclaimer;\n }\n\n return disclaimerObj;\n }\n\n function registerOnce(checked, defaultAutoRenew) {\n var canClickTwice = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (!defaultAutoRenew) return;\n var isRegistered = sessionStorageService.get('unchecked');\n if (isRegistered && canClickTwice) {\n $rootScope.$emit('clickedTwice');\n return;\n }\n if (isRegistered) return;\n sessionStorageService.set('unchecked', 'true');\n $rootScope.$emit('onceUnchecked');\n if (checked) {\n $rootScope.$emit('checkboxClicked', true);\n }\n }\n\n function showARPopup() {\n var arPopupButtons = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'true';\n\n $rootScope.$emit('toggleARPopup', arPopupButtons);\n $rootScope.$emit('onceUnchecked');\n }\n\n /**\n * Given a list of price configurations, check if there are two different\n * configurations for the same pack and term values, one with autorenew enabled\n * and another one with no autorenew.\n * @param {object[]} priceList - List containing all the price configurations\n * @param {string | number} packValue - Provided pack value\n * @param {string} termValue - Provided term value\n * @param {boolean} parsePack - If provided and true, the value of the field\n * 'pack' will be parsed to int before comparing\n * @returns {boolean} True if both configurations are found; false otherwise\n */\n function checkRenewal(priceList, packValue, termValue, parsePack) {\n var manualConfig = {\n 'pack': packValue,\n 'term': termValue,\n 'autorenew': false\n },\n autoConfig = {\n 'pack': packValue,\n 'term': termValue,\n 'autorenew': true\n };\n\n return findPriceMatch(priceList, manualConfig, parsePack) > -1 && findPriceMatch(priceList, autoConfig, parsePack) > -1;\n }\n\n /**\n * Find a matching price config on a provided price list.\n * @param {object[]} priceList - List containing all the price configurations\n * @param {object} matchConfig - Target config to be found in the price list\n * @param {boolean} parsePack - If provided and true, the value of the field\n * 'pack' will be parsed to int before comparing\n * @returns {number} The index of the first appearance of a matching config, if any; -1 otherwise\n */\n function findPriceMatch(priceList, matchConfig, parsePack) {\n var comparator = parsePack ? function (config) {\n return parseInt(config.pack) === parseInt(matchConfig.pack) && config.term === matchConfig.term && config.autorenew === matchConfig.autorenew;\n } : matchConfig;\n\n return _.findIndex(priceList, comparator);\n }\n\n /**\n * Check if the trial button must be shown or hidden\n * @param {object} productData - Product data from Tridion\n * @returns {boolean} True if trial button must be shown, false otherwise\n */\n function hasTrialButton(productData) {\n if (!productData) return true;\n if (!productData.freeTrialLink) return false;\n\n var hideInB2c = _.first(productData.hideTrialFromB2C) === 'True';\n var isB2cPage = appHelperService.assertStateByName('home-security');\n if (isB2cPage && hideInB2c) return false;\n\n var hideInSmb = _.first(productData.hideTrialFromSMB) === 'True';\n var isSmbPage = appHelperService.assertStateByName('vsb-home');\n if (isSmbPage && hideInSmb) return false;\n\n var hideInVsb = _.first(productData.hideTrialFromVSB) === 'True';\n var isVsbPage = appHelperService.assertStateByName('vsb-home');\n if (isVsbPage && hideInVsb) return false;\n\n var hideInLrc = SETUP.trialButtonsInsideLrc === 'false' || _.first(productData.hideTrialFromLRC) === 'True';\n var isLrcPage = appHelperService.assertStateByName(['lrc-verdict', 'lrc-serial', 'lrc-b2b', 'lrc-b2b-att', 'lrc-b2c', 'lrc-b2c-att', 'lrc-fallback', 'vsb-lrc-closed']);\n if (isLrcPage && hideInLrc) return false;\n\n var hideInProductPage = _.first(productData.hideTrialFromProductPage) === 'True';\n var isProductPage = false;\n switch (productData.shortName) {\n case 'kac':\n isProductPage = appHelperService.assertStateByName('product-adcleaner');\n break;\n case 'kbls':\n isProductPage = appHelperService.assertStateByName('product-battery-life-saver');\n break;\n case 'kcp':\n isProductPage = appHelperService.assertStateByName('product-cleaner');\n break;\n case 'kfa':\n isProductPage = appHelperService.assertStateByName('product-kfa');\n break;\n case 'kisa-free':\n isProductPage = appHelperService.assertStateByName('product-kisa-free');\n break;\n case 'kpm':\n isProductPage = appHelperService.assertStateByName('home-product-kpm');\n break;\n case 'kqs':\n isProductPage = appHelperService.assertStateByName('product-qr-scanner');\n break;\n case 'ksc':\n isProductPage = appHelperService.assertStateByName('product-system-checker');\n break;\n case 'kscloud':\n isProductPage = appHelperService.assertStateByName('home-product-kscloud');\n break;\n case 'ksec':\n isProductPage = appHelperService.assertStateByName('product-ksec');\n break;\n case 'ksk':\n isProductPage = appHelperService.assertStateByName('product-ksk');\n break;\n case 'kss':\n isProductPage = appHelperService.assertStateByName('product-kss');\n break;\n case 'kwc': // Fall-through\n case 'ksu':\n isProductPage = appHelperService.assertStateByName('product-ksu');\n break;\n case 'kvs':\n isProductPage = appHelperService.assertStateByName('product-kvs');\n break;\n case 'kvspro':\n isProductPage = appHelperService.assertStateByName('product-kvspro');\n break;\n case 'kav': // Fall-through\n case 'kis': // Fall-through\n case 'kisa': // Fall-through\n case 'kismac': // Fall-through\n case 'ktsmd':\n isProductPage = appHelperService.assertStateByName('home-product');\n break;\n case 'kcpc': // Fall-through\n case 'kcpcs': // Fall-through\n case 'kpctu': // Fall-through\n case 'kpis': // Fall-through\n case 'kwbsc':\n isProductPage = appHelperService.assertStateByName('premium-service');\n break;\n case 'ksc-family':\n case 'ksc-personal':\n isProductPage = appHelperService.assertStateByName('home-product-kscloud');\n break;\n case 'kps': // Fall-through\n case 'ksos':\n isProductPage = appHelperService.assertStateByName('vsb-product');\n break;\n case 'kseb-core': // Fall-through\n case 'cloud':\n isProductPage = appHelperService.assertStateByName('smb-product-cloud');\n break;\n case 'kseb-advanced':\n isProductPage = appHelperService.assertStateByName('smb-product-advanced');\n break;\n case 'kseb-select':\n isProductPage = appHelperService.assertStateByName('smb-product-select');\n break;\n case 'total':\n isProductPage = appHelperService.assertStateByName('smb-product-total');\n break;\n }\n return !(isProductPage && hideInProductPage);\n }\n\n function roundPricingPercentage(num) {\n return Math.floor(num / 5) * 5;\n }\n\n /**\n * Generates a text to display for savings based on comparison of original and promo prices\n * @param {string} messageType\n * @param {object} selectedOption\n * @param {object=} bbSettings\n * @param {object=} buyblockData\n * @param {string=} customSaveText\n * @param {string=}customSavingsPriceType\n * @param {object=} component\n * @returns {string|boolean}\n */\n function getSavings(messageType, selectedOption) {\n var bbSettings = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var buyblockData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var customSaveText = arguments[4];\n var customSavingsPriceType = arguments[5];\n var component = arguments[6];\n\n var savingsPrice = '',\n currentPrice = selectedOption.price,\n priceStriked = selectedOption.price_striked,\n savingsPriceType = customSavingsPriceType || bbSettings && bbSettings.savingsPriceType,\n savingsText = customSaveText || bbSettings && bbSettings.saveRateText || (messageType === 'rate' ? buyblockData.saveRate : buyblockData.saveText);\n\n if (angular.isDefined(component) && angular.isDefined(bbSettings.saveMsgOverride)) {\n for (var i = 0; i < bbSettings.saveMsgOverride.length; i++) {\n if (bbSettings.saveMsgOverride[i].component === component) {\n savingsText = bbSettings.saveMsgOverride[i].savingsMsgOverride;\n savingsPriceType = bbSettings.saveMsgOverride[i].savingsPriceType;\n }\n }\n }\n\n if (!savingsPriceType) {\n return savingsText;\n }\n\n if (savingsPriceType && savingsText) {\n if (!priceStriked || savingsPriceType === 'none') return;\n\n if (savingsPriceType === 'difference') {\n savingsPrice = $filter('customCurrency')(priceStriked - currentPrice);\n }\n\n if (savingsPriceType === 'percentage') {\n savingsPrice = Math.round(roundPricingPercentage((priceStriked - currentPrice) / priceStriked * 100)) + '%';\n }\n\n if (savingsPriceType === 'exact') {\n savingsPrice = Math.round((priceStriked - currentPrice) / priceStriked * 100) + '%';\n }\n }\n\n savingsText = _.replace(savingsText, /\\(\\(savings\\)\\)/g, savingsPrice) || false;\n\n return savingsText;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.buyblocks').component('buyblockUserAccount', {\n 'bindings': {\n 'label': '@',\n 'count': '<',\n 'accountInfoOverride': '@',\n 'descriptionPopup': '@',\n 'productName': '@'\n },\n 'controller': 'buyblockUserAccountController',\n 'templateUrl': '/resources/template/html/modules/_shared/components/buyblock-user-account/templates/buyblock-user-accounts.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n buyblockUserAccountController.$inject = [\"$scope\", \"ngDialog\", \"buyblockService\", \"messageFormatService\"];\n angular.module('kappGlobal.buyblocks').controller('buyblockUserAccountController', buyblockUserAccountController);\n\n function buyblockUserAccountController($scope, ngDialog, buyblockService, messageFormatService) {\n var ctrl = this;\n ctrl.$id = $scope.$id || Math.random().toString(36).substring(7);\n ctrl.internalDescriptionPopup = '';\n\n ctrl.$onInit = function () {\n ctrl.internalDescriptionPopup = ctrl.internalDescriptionPopup || ctrl.descriptionPopup;\n // For cases when changes occur before $onInit\n replaceUserAccountString();\n };\n\n ctrl.$onChanges = function () {\n ctrl.setShowFlags();\n\n if (ctrl.showAccountLabel && ctrl.label) {\n ctrl.setPluralizedLabel();\n // For cases when changes occur after $onInit\n replaceUserAccountString();\n }\n };\n\n ctrl.openDescriptionPopup = function () {\n ngDialog.open(buyblockService.ngDialogSettings(ctrl, $scope, {\n 'className': 'ngdialog-plain ngdialog-narrow',\n 'template': '/resources/template/html/modules/b2c/components/kscloud-disclaimers/templates/account-description.html'\n }));\n };\n\n ctrl.setShowFlags = function () {\n ctrl.showAccountOverride = ctrl.hasAccountOverride();\n ctrl.showAccountLabel = !ctrl.hasAccountOverride() && ctrl.hasLabel() && ctrl.hasCount();\n ctrl.showPopupIcon = ctrl.hasDescriptionPopup() && (ctrl.showAccountOverride || ctrl.showAccountLabel);\n };\n\n ctrl.setPluralizedLabel = function () {\n if (!ctrl._mfFormatter || ctrl._mfFormatterLabel !== ctrl.label) {\n ctrl._mfFormatterLabel = ctrl.label;\n // userAccounts: name of the resulting formatter\n ctrl._mfFormatter = messageFormatService.compile({ 'userAccounts': ctrl.label });\n }\n\n ctrl._mfFormatter.then(function (formatter) {\n // USER_ACCOUNTS: name of the param passed\n ctrl.pluralizedLabel = formatter.userAccounts({ 'USER_ACCOUNTS': ctrl.count });\n });\n };\n\n ctrl.hasAccountOverride = function () {\n return isStringNonEmpty(ctrl.accountInfoOverride);\n };\n\n ctrl.hasLabel = function () {\n return isStringNonEmpty(ctrl.label);\n };\n\n ctrl.hasDescriptionPopup = function () {\n return isStringNonEmpty(ctrl.descriptionPopup);\n };\n\n ctrl.hasCount = function () {\n return angular.isDefined(ctrl.count) && ctrl.count > 0;\n };\n\n function isStringNonEmpty(str) {\n return angular.isDefined(str) && str.trim() !== '';\n }\n\n function replaceUserAccountString() {\n var userAccountsRegex = new RegExp('\\\\(\\\\(user_accounts\\\\)\\\\)', 'ig');\n var userAccountsMinusRegex = new RegExp('\\\\(\\\\(user_accounts_minus_1\\\\)\\\\)', 'ig');\n ctrl.internalDescriptionPopup = ctrl.descriptionPopup;\n ctrl.internalDescriptionPopup = ctrl.internalDescriptionPopup.replace(userAccountsRegex, ctrl.count);\n ctrl.internalDescriptionPopup = ctrl.internalDescriptionPopup.replace(userAccountsMinusRegex, ctrl.count - 1);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.callbackForm').component('callbackForm', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/callback-form/templates/callback-form-button.html',\n 'controller': 'callbackFormController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n callbackFormController.$inject = [\"directiveData\", \"$scope\", \"errorService\", \"ENV\", \"ngDialog\", \"$http\", \"$timeout\", \"$document\"];\n angular.module('kappGlobal.callbackForm').controller('callbackFormController', callbackFormController);\n\n function callbackFormController(directiveData, $scope, errorService, ENV, ngDialog, $http, $timeout, $document) {\n var ctrl = this;\n ctrl.env = ENV.locale;\n ctrl.$onInit = activate;\n ctrl.requestCallbackForm = requestCallbackForm;\n ctrl.setCallbackBtnWidth = {};\n ctrl.callbackIsEnabled = false;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl('page-header').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.callbackIsEnabled = ctrl.data.enableCallbackWidget && ctrl.data.enableCallbackWidget[0] === 'true';\n\n if (ctrl.callbackIsEnabled) {\n return $http.get('/content/' + ctrl.env + '/site-header/callback-widget.json', { 'cache': true }).then(function (response) {\n ctrl.callbackPopup = response.data.fields;\n\n $timeout(function () {\n ctrl.setCallbackBtnWidth = {\n 'width': $document.find('#callback-button').outerWidth(true) + 1\n };\n });\n }).catch(handleRejection);\n }\n }).catch(handleRejection);\n }\n\n function requestCallbackForm(munchkinId, formId) {\n ngDialog.open({\n 'template': '/resources/template/html/modules/_shared/components/callback-form/templates/callback-form.html',\n 'className': 'ngdialog-flyout ngdialog-callback-form',\n 'data': ctrl,\n 'showClose': false,\n 'controller': ['marketoHelperService', function (marketoHelperService) {\n marketoHelperService.loadMarketo(munchkinId, formId, $scope);\n }]\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.compareTable').component('compareTable', {\n 'bindings': {\n 'resource': '@',\n 'hideProductLinks': '@',\n 'component': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/compare-table/templates/compare-table.html',\n 'controller': 'compareTableController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n compareTableController.$inject = [\"$http\", \"$element\", \"$scope\", \"directiveData\", \"osDetectService\", \"appHelperService\", \"$rootScope\", \"errorService\", \"ENV\", \"rootScopeHelper\"];\n angular.module('kappGlobal.compareTable').controller('compareTableController', compareTableController);\n\n function compareTableController($http, $element, $scope, directiveData, osDetectService, appHelperService, $rootScope, errorService, ENV, rootScopeHelper) {\n var ctrl = this;\n ctrl.bbData = {};\n ctrl.locale = ENV.locale;\n ctrl.setBuyblockValueByProduct = setBuyblockValueByProduct;\n ctrl.$onInit = activate;\n ctrl.checkForHomeSecurityState = checkForHomeSecurityState;\n ctrl.term = ctrl.locale === 'en-us' && appHelperService.stateIncludes('lrc-b2c') ? 2 : '';\n\n var ngRender = $rootScope.$on('ngRender', function () {\n ctrl.data ? runScripts() : ngRender();\n });\n\n rootScopeHelper.on($scope, 'buyblockBundleChange', handleBundleChange);\n\n function handleBundleChange(event, data) {\n ctrl.isBundleActive = data.isActive;\n ctrl.bundleProductName = data.productName;\n }\n\n function activate() {\n getData();\n setPromoline();\n }\n\n function setBuyblockValueByProduct(product, term, pack, autorenew) {\n ctrl.bbData[product] = { 'term': term, 'pack': pack, 'autorenew': autorenew };\n }\n\n function checkForHomeSecurityState() {\n return appHelperService.assertStateByName(['home-security', 'home-product']);\n }\n\n function setPromoline() {\n directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n ctrl.buyblockData = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n // Helper Methods\n function getData() {\n var featuredProducts = getFeaturedProducts();\n return directiveData.getByUrl(featuredProducts).then(function (response) {\n ctrl.featureSet = []; //Contains objects of every unique feature\n if (!response.data.fields) return false;\n ctrl.header = response.data.fields;\n ctrl.data = response.data.fields.products;\n ctrl.featuresResponse = response.data.fields.featuresOverride;\n var uniqueFeaturedArray = [];\n var counter = 0;\n ctrl.data.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n var featuresArray = Object.keys(response.data.fields.productFeatures).map(function (key) {\n return response.data.fields.productFeatures[key];\n });\n ctrl.data[index] = response.data.fields;\n for (var i in featuresArray) {\n var featured = featuresArray[i];\n if (angular.isDefined(featured.name) && featured.name !== '' && uniqueFeaturedArray.indexOf(featured.name) === -1) {\n uniqueFeaturedArray.push(featured.name);\n ctrl.featureSet.push(featured);\n }\n }\n\n if (ctrl.featuresResponse && counter === 0) {\n counter++;\n return $http.get(ctrl.featuresResponse, { 'cache': true }).then(function (response) {\n ctrl.data.features = response.data.fields.Body;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n });\n }, function (rejection) {\n errorService.warn(rejection);\n $element.hide();\n });\n }\n\n function getFeaturedProducts() {\n var osList = getOsList(),\n featuredProducts = osList[0].data,\n hash = appHelperService.getLocationHash(),\n osDetected = osDetectService.getCurrentOs(hash),\n osProducts = [];\n if (appHelperService.assertStateByName('home-security')) {\n if (osDetected.device !== 'undefined') {\n osProducts = osList.filter(function (obj) {\n return JSON.stringify(obj.os) === JSON.stringify(osDetected.device.type);\n })[0];\n }\n if (osProducts) {\n featuredProducts = osProducts.data;\n return featuredProducts;\n }\n }\n return featuredProducts;\n }\n\n function getOsList() {\n return [{ 'os': 'pc', 'data': ctrl.resource || 'comparison-table' }, { 'os': 'mac', 'data': 'comparison-table-mac' }, {\n 'os': 'mobile', 'data': 'comparison-table-mobile'\n }];\n }\n\n function runScripts() {\n ngRender();\n angular.element(document).ready(function () {\n var mobileDefault = void 0;\n // Check if current page has comparison charts on it\n if ($element.find('.comparison-chart').length) {\n // Loop through each comparison chart and set the default column\n mobileDefault = $element.find('.comparison-chart').data('comparison-default');\n $element.find('.comparison-chart .' + mobileDefault).addClass('currently-active');\n }\n $element.find('.comparison-nav li a').on('click', function (e) {\n e.preventDefault();\n var $this = $(this),\n\n // Get navigation direction\n direction = $this.data('comparison-nav-direction'),\n\n // Get chart ID from the data attribute\n chartID = $this.closest('.comparison-nav').data('comparison-chart'),\n\n // Get comparison chart using that ID\n $comparisonChart = $('.comparison-chart[data-comparison-chart=\"' + chartID + '\"]'),\n\n // Get comparison chart mobile nav\n $comparisonChartNav = $('.comparison-nav[data-comparison-chart=\"' + chartID + '\"]'),\n\n // Get current column\n $currentColumn = $comparisonChart.find('.row-header .column-product.currently-active'),\n currentTitle = $currentColumn.find('h2.product-title a').clone(),\n currentID = parseInt($currentColumn.data('column')),\n nextID = parseInt(currentID + 1),\n prevID = parseInt(currentID - 1),\n nextNavID = parseInt(currentID + 2),\n prevNavID = parseInt(currentID - 2);\n\n // Remove featured style from the comparison chart mobile nav\n $comparisonChartNav.find('li a.feat').removeClass('feat');\n $comparisonChart.find('.row-header .column-product.column-' + ($scope.$ctrl.data.length + 1) + ' h2.product-title a').addClass('feat');\n\n // Check direction and if prev/next column exists\n if (direction === 'prev' && $comparisonChart.find('.column-product.column-' + prevID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + prevID).addClass('currently-active');\n var newPrevTitle = $comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a').clone();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-prev a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-next a').addClass('feat');\n }\n\n $comparisonChartNav.find('li.nav-prev a').html(newPrevTitle.children());\n $comparisonChartNav.find('li.nav-next a').html(currentTitle.children());\n } else if (direction === 'next' && $comparisonChart.find('.column-product.column-' + nextID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + nextID).addClass('currently-active');\n var newNextTitle = $comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a').clone();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-next a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-prev a').addClass('feat');\n }\n $comparisonChartNav.find('li.nav-next a').html(newNextTitle.children());\n $comparisonChartNav.find('li.nav-prev a').html(currentTitle.children());\n }\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n contentRepoService.$inject = [\"$window\", \"$rootScope\", \"$sce\", \"$http\", \"$stateParams\", \"$location\", \"repoMapperService\", \"imageManagerService\", \"SUBCATCONFIG\", \"CATEGORYCONFIG\", \"CERTIFICATESCONFIG\", \"AWARDSCONFIG\", \"ENV\", \"appHelperService\", \"windowHelperService\", \"tracking\"];\n angular.module('kappGlobal.contentRepo').factory('contentRepoService', contentRepoService);\n\n function contentRepoService($window, $rootScope, $sce, $http, $stateParams, $location, repoMapperService, imageManagerService, SUBCATCONFIG, CATEGORYCONFIG, CERTIFICATESCONFIG, AWARDSCONFIG, ENV, appHelperService, windowHelperService, tracking) {\n var apiServer = 'https://api-router.kaspersky-labs.com';\n var config = {\n 'serverUrl': ENV.apiServer,\n 'searchUrl': apiServer + '/contentrepository/docs/query',\n 'headerUrl': 'content/' + ENV.locale + '/repository/headers/',\n 'blogUrl': 'content/' + ENV.locale + '/repository/blogs/',\n 'apiContentRepoPath': 'content/' + ENV.locale + '/repository/',\n 'resourcesB2BUrl': ENV.apiServer + '/content/' + ENV.locale + '/repository/resources/b2b-resources.json',\n 'resourcesB2CUrl': ENV.apiServer + '/content/' + ENV.locale + '/repository/resources/b2c-resources.json',\n 'resourcesAboutUrl': ENV.apiServer + '/content/' + ENV.locale + '/repository/resources/about-resources.json',\n 'defaultOrderBy': 'pub_start desc',\n 'defaultYears': [1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018]\n };\n\n return {\n 'buildCategoryName': buildCategoryName,\n 'buildSubCategoryName': buildSubCategoryName,\n 'getCategories': getCategories,\n 'getCategoryParams': getCategoryParams,\n 'getLinkMediaByPath': getLinkMediaByPath,\n 'getHeaderByName': getHeaderByName,\n 'getPathFromUrl': getPathFromUrl,\n 'getUserFriendlyUrl': getUserFriendlyUrl,\n 'getStrippedString': getStrippedString,\n 'getTrustAsHtml': getTrustAsHtml,\n 'getRandomizedImage': getRandomizedImage,\n 'getResources': getResources,\n 'getCategoriesFromObject': getCategoriesFromObject,\n 'getBlogByName': getBlogByName,\n 'populateLinkFields': populateLinkFields,\n 'populateRepositoryHeaderFields': populateRepositoryHeaderFields,\n 'populateBlogFields': populateBlogFields,\n 'populateBlogResourceFields': populateBlogResourceFields,\n 'populateResourcesFields': populateResourcesFields,\n 'setUrlToCorrectCategory': setUrlToCorrectCategory,\n 'search': search,\n 'getPageNumberFromUrl': getPageNumberFromUrl,\n 'getSelectorFromUrl': getSelectorFromUrl,\n 'getDateFromUrl': getDateFromUrl,\n 'setPaginationUrlValue': setPaginationUrlValue,\n 'setSelectorUrlValue': setSelectorUrlValue,\n 'setDateUrlValue': setDateUrlValue,\n 'formatSelectorForApp': formatSelectorForApp,\n 'getDefaultYears': getDefaultYears,\n 'setTrackPageView': setTrackPageView\n };\n\n function buildSubCategoryName(name, subCategories, repoType) {\n var config = void 0;\n switch (repoType) {\n case 'awards':\n config = AWARDSCONFIG;\n break;\n case 'certificates':\n config = CERTIFICATESCONFIG;\n break;\n default:\n config = SUBCATCONFIG;\n }\n\n return buildConfigCategoryName(name, subCategories, config);\n }\n\n function buildCategoryName(name, categories) {\n return buildConfigCategoryName(name, categories, CATEGORYCONFIG);\n }\n\n function getCategories() {\n return $http.get(config.serverUrl + '/content/' + ENV.locale + '/resources/Categories.json', { 'cache': true });\n }\n\n function getCategoryParams() {\n return $stateParams.category;\n }\n\n function getLinkMediaByPath(path) {\n path = decodeURIComponent('' + config.serverUrl + path);\n return $http.get(path, { 'cache': true });\n }\n\n function getHeaderByName(headerName) {\n var path = decodeURIComponent('' + config.headerUrl + headerName + '.json');\n return $http.get(path, { 'cache': true });\n }\n\n function getPathFromUrl(fileName) {\n fileName = fileName || $stateParams.path.replace(/_/g, '/') + '.json';\n var path = '';\n if (isIscSection()) {\n path = '/' + config.apiContentRepoPath + 'isc/';\n }\n if (isSmbSection()) {\n path = '/' + config.apiContentRepoPath + 'smb/';\n }\n if (isPrSection()) {\n path = '/' + config.apiContentRepoPath + 'pr/';\n fileName = fileName.replace(/_/g, '/');\n }\n if (isAboutSection()) {\n path = '/' + config.apiContentRepoPath + 'about/';\n }\n return path + fileName;\n }\n\n function getUserFriendlyUrl(url) {\n var fileName = url.substr(url.lastIndexOf('/') + 1).replace(/.json/g, '').toLowerCase();\n if (isPrSection()) {\n var values = url.split('/'),\n yearFolder = values[values.length - 2];\n return yearFolder + '_' + fileName;\n }\n return fileName;\n }\n\n function getStrippedString(str, length) {\n return str.substring(0, length);\n }\n\n function getTrustAsHtml(strHtml) {\n return $sce.trustAsHtml(strHtml);\n }\n\n function getRandomizedImage(image) {\n return imageManagerService.getRandomizedImage(image);\n }\n\n function getResources(repoType) {\n var path = '';\n if (repoType === 'smb' || repoType === 'vsb') {\n path = decodeURIComponent('' + config.resourcesB2BUrl);\n }\n if (repoType === 'about') {\n path = decodeURIComponent('' + config.resourcesAboutUrl);\n } else {\n path = decodeURIComponent('' + config.resourcesB2CUrl);\n }\n return $http.get(path, { 'cache': true });\n }\n\n function getCategoriesFromObject(obj, array, repoType) {\n var tempArray = [],\n filteredCategories = void 0;\n array = array || [];\n var categoriesWithSubCat = {};\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n categoriesWithSubCat[key] = obj[key];\n tempArray.push(key);\n }\n }\n\n filteredCategories = removedUnusedCategories(tempArray, repoType);\n\n if (ENV.locale === 'ja-jp' && repoType === 'pr') filteredCategories = reorderJPCategories(filteredCategories);\n\n array = array.concat(filteredCategories ? filteredCategories : tempArray);\n\n return { 'categoriesList': array, 'categoriesWithSubCat': categoriesWithSubCat };\n }\n\n /**\n * Temporary function to reorder JP categories until they're done in Tridion\n * @param {[Array]} array The categories to sort\n * @return {[Array]} The sorted categories\n */\n function reorderJPCategories(array) {\n var order = ['製品ニュース', 'ウイルスニュース', 'スパムニュース', '比較テスト', 'ビジネスニュース', 'イベントカレンダー', 'お知らせ'];\n\n return array.sort(function (a, b) {\n return order.indexOf(a) - order.indexOf(b);\n });\n }\n\n function getBlogByName(blogName) {\n var path = decodeURIComponent('' + config.blogUrl + blogName + '.json');\n return $http.get(path, { 'cache': true });\n }\n\n function populateLinkFields(linkResponse, url) {\n return repoMapperService.mapRepositoryLinkFields(linkResponse, url);\n }\n\n function populateRepositoryHeaderFields(linkResponse) {\n return repoMapperService.mapRepositoryHeaderFields(linkResponse);\n }\n\n function populateBlogFields(linkResponse) {\n return repoMapperService.mapBlogFields(linkResponse);\n }\n\n function populateBlogResourceFields(resource) {\n return repoMapperService.mapBlogResourceFields(resource);\n }\n\n function populateResourcesFields(resource) {\n return repoMapperService.mapResourcesFields(resource);\n }\n\n function setUrlToCorrectCategory(category) {\n var url = $window.location.href;\n var lm = url.split('/').reverse()[1];\n var path = $window.location.pathname;\n if (lm !== category) {\n if (lm === '') {\n lm = '//';\n return $window.location.href = windowHelperService.getDomainName() + path.replace(lm, '/' + category + '/');\n }\n return $window.location.href = windowHelperService.getDomainName() + path.replace(lm, category);\n }\n }\n\n function search() {\n var pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var pageSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n var repoType = arguments[2];\n var contentTypes = arguments[3];\n var category = arguments[4];\n var subcategory = arguments[5];\n var startDate = arguments[6];\n var rawSelect = arguments[7];\n\n var params = buildSearchParams(pageNumber, pageSize, repoType, contentTypes, category, subcategory, startDate, rawSelect);\n return $http.post(config.searchUrl, params, { 'withCredentials': true });\n }\n\n function getPageNumberFromUrl() {\n return $stateParams.rel || 1;\n }\n\n function getSelectorFromUrl() {\n return formatSelectorForApp($stateParams.sel || '');\n }\n\n function getDateFromUrl() {\n return formatSelectorForApp($stateParams.date || '');\n }\n\n function setPaginationUrlValue(value) {\n $location.search('rel', value);\n }\n\n function setSelectorUrlValue(selector) {\n selector = selector.toLowerCase().indexOf('sort-by') === -1 ? selector.toLowerCase() : '';\n $location.search('sel', selector);\n }\n\n function setDateUrlValue(date) {\n $location.search('date', date);\n }\n\n function formatSelectorForApp(value) {\n return value ? value.replace(/-_/g, '**').replace(/-/g, ' ').replace('**', '-') : '';\n }\n\n // Local helper functions\n function buildSearchParams(pageNumber, pageSize) {\n var repoType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var contentTypes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n var category = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';\n var subcategory = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';\n var startDate = arguments[6];\n var rawSelect = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : [];\n\n if (contentTypes === '') contentTypes = [];\n contentTypes = angular.isArray(contentTypes) ? contentTypes : contentTypes.split(',');\n\n var optionsObj = {\n 'locale': '' + ENV.locale,\n 'page_num': parseInt(pageNumber),\n 'page_size': parseInt(pageSize),\n 'repository_type': repoType,\n 'order_by': config.defaultOrderBy,\n 'raw_select': rawSelect\n };\n\n var categoryValues = splitAndFormatWithConfigNumbers(category, buildCategoryName);\n var subCategoryValues = splitAndFormatWithConfigNumbers(subcategory, buildSubCategoryName, repoType);\n\n if (contentTypes && contentTypes.length) {\n angular.extend(optionsObj, { 'contenttype': { 'select': 0, 'value': contentTypes } });\n }\n\n if (categoryValues && categoryValues.length) {\n angular.extend(optionsObj, { 'category': { 'select': 0, 'value': categoryValues } });\n }\n\n if (subCategoryValues && subCategoryValues.length) {\n angular.extend(optionsObj, { 'subcategory': { 'select': 0, 'value': subCategoryValues } });\n }\n\n if (rawSelect && rawSelect.length) {\n angular.extend(optionsObj, { 'raw_select': rawSelect });\n }\n\n if (startDate) {\n var dateFrom = new Date('01/01/' + startDate).getTime(),\n dateTo = new Date('12/31/' + startDate).getTime();\n optionsObj.publication_start = '/Date(' + dateFrom + '+0300)/';\n optionsObj.publication_end = '/Date(' + dateTo + '+0300)/';\n }\n\n return optionsObj;\n }\n\n function buildConfigCategoryName(name, array, config) {\n array = array || config[ENV.locale.split('-')[1]] || config['global'];\n if (array.length < 1) return name;\n for (var i = 0, length = array.length; i < length; i++) {\n var subCat = array[i],\n splitByDoubleColon = subCat.split('::');\n if (splitByDoubleColon.length === 1) throw new Error('Array item is not in correct format');\n if (splitByDoubleColon[1] !== name) continue;\n name = subCat;\n break;\n }\n return name;\n }\n\n function removedUnusedCategories(categoriesArray, repoType) {\n var translatedCategories = [],\n locale = ENV.locale.split('-')[1];\n\n if (repoType === 'pr') translatedCategories = SUBCATCONFIG;\n\n if (translatedCategories[locale]) {\n var categoriesWithoutIds = _.map(translatedCategories[locale], function (category) {\n return category.substr(4);\n });\n return _.intersection(categoriesArray, categoriesWithoutIds);\n }\n\n return false;\n }\n\n function splitAndFormatWithConfigNumbers(obj, callback, repoType) {\n obj = obj === '' ? obj : obj.split(',');\n var result = [];\n angular.forEach(obj, function (value) {\n result.push(callback(value, null, repoType));\n });\n return result;\n }\n\n function isPrSection() {\n var states = ['press-releases', 'press-releases.details', 'in-the-news', 'in-the-news.details', 'press-center', 'press-center.details', 'rss-feeds', 'rss-feeds.details', 'homepage'];\n return appHelperService.assertStateByName(states);\n }\n\n function isSmbSection() {\n var states = ['resources-category.details', 'resources-category', 'smb-resources-category.details', 'smb-resources-category'];\n return appHelperService.assertStateByName(states);\n }\n\n function isIscSection() {\n var states = ['b2c-resource-center.category', 'b2c-resource-center.category-details'];\n return appHelperService.assertStateByName(states);\n }\n\n function isAboutSection() {\n var states = ['policy-blog', 'policy-blog-category', 'policy-blog-category.details'];\n return appHelperService.assertStateByName(states);\n }\n\n function getDefaultYears() {\n return config.defaultYears;\n }\n\n function setTrackPageView() {\n tracking.trackPageView($rootScope.kaspersky.pageName); // search tracking requirement\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.cookiesRequirement').component('cookiesRequirement', {\n 'bindings': {\n 'show': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/cookies-requirement/templates/cookies-requirement.html',\n 'controller': 'cookiesRequirementController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n cookiesRequirementController.$inject = [\"$window\", \"cookieService\", \"cookiesRequirementService\"];\n angular.module('kappGlobal.cookiesRequirement').controller('cookiesRequirementController', cookiesRequirementController);\n\n function cookiesRequirementController($window, cookieService, cookiesRequirementService) {\n var ctrl = this;\n ctrl.show = false;\n ctrl.$onInit = activate;\n ctrl.accept = acceptRequirements;\n\n function activate() {\n getData();\n }\n\n function getData() {\n ctrl.show = !cookieService.get('kl.c.p');\n if (!ctrl.show) return false;\n\n return cookiesRequirementService.getContent().then(function (response) {\n ctrl.data = response;\n if (!ctrl.data.cookieDesc && !ctrl.data.cookieBtn) ctrl.show = false;\n });\n }\n\n function acceptRequirements() {\n var domain = $window.location.host.replace(/^(https?:\\/\\/)?(www)?/, '');\n ctrl.show = false;\n cookieService.set('kl.c.p', false, 30, domain);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n cookiesRequirementService.$inject = [\"$q\", \"sessionStorageService\", \"errorService\", \"directiveData\"];\n angular.module('kappGlobal.cookiesRequirement').factory('cookiesRequirementService', cookiesRequirementService);\n\n function cookiesRequirementService($q, sessionStorageService, errorService, directiveData) {\n return {\n 'getContent': getContent\n };\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getContent() {\n var cachedData = sessionStorageService.get('local[general-translations]'),\n deferred = $q.defer();\n\n if (cachedData) {\n deferred.resolve(cachedData);\n return deferred.promise.then(function (cachedData) {\n return cachedData.fields;\n }, function (error) {\n return deferred.reject(error);\n });\n }\n\n return directiveData.getLocal('general-translations').then(function (response) {\n return response.data.fields;\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.currencySelector').component('currencySelector', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/currency-selector/templates/currency-selector.html',\n 'controller': 'currencySelectorController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n currencySelectorController.$inject = [\"$rootScope\", \"$scope\", \"currencyManager\", \"appHelperService\", \"geoLocationManager\", \"ENV\"];\n angular.module('kappGlobal.currencySelector').controller('currencySelectorController', currencySelectorController);\n\n function currencySelectorController($rootScope, $scope, currencyManager, appHelperService, geoLocationManager, ENV) {\n var ctrl = this;\n ctrl.openCurrencyMenu = false;\n ctrl.showCurrencyMenu = ctrl.showCurrencyMenu || true;\n ctrl.showCurrencySelector = ctrl.showCurrencySelector || false;\n ctrl.currencies = getCurrencies();\n ctrl.setCurrency = setCurrency;\n ctrl.onMenuBlur = onMenuBlur;\n ctrl.$onInit = activate;\n ctrl.locale = ENV.locale;\n ctrl.geoIP = geoLocationManager.getUserGeoIp();\n\n var geoIpGlobalRule = ctrl.geoIP && ctrl.currencies.some(function (item) {\n return item.geoIP.toLowerCase() === ctrl.geoIP;\n }) && ctrl.geoIP !== 'fi';\n ctrl.hideCurrencySelector = ENV.locale === 'ru-ru' || geoIpGlobalRule && ctrl.locale === 'en-au';\n\n function activate() {\n\n ctrl.currenciesCount = 1;\n if (appHelperService.assertLocaleByName('en-in')) {\n ctrl.currenciesCount = 6;\n } else if (appHelperService.assertLocaleByName('ru-ru')) {\n ctrl.currenciesCount = 11;\n }\n ctrl.showCurrencySelectorCondition = ctrl.currencies.length > ctrl.currenciesCount;\n /**\n * Make sure we know of any buyblocks that appeared before currency-switcher by using $rootScope.buyblocksOnPage\n */\n handleCurrencySwitcherAppearance(false, $rootScope.buyblocksOnPage);\n }\n\n /**\n * The function checks whether the currency switcher should be shown or not\n * It's hidden by default every time you enter the state or the component activates and appears if buyblocks are present\n * premium-services state is the exception where it should be shown anyway (without buyblocks)\n * The function is invoked at component activation, state change or at buyblock mount (buyblockReady)\n * @param calledByBuyblock { boolean= } Truthy if we are at the state change, falsy if invoked by buyblock mount\n * @param forceBuyblocksOnPageFlag { boolean= } Forces true if true\n */\n function handleCurrencySwitcherAppearance(calledByBuyblock, forceBuyblocksOnPageFlag) {\n if (!forceBuyblocksOnPageFlag) {\n // At state change we should clear the buyblockOnPage flag, but if called by buyBlockReady it means buyblock is there\n if (calledByBuyblock) ctrl.buyblocksOnPage = true;else ctrl.buyblocksOnPage = false;\n } else {\n // forceBuyblocksOnPageFlag is truthy meaning buyblocks have appeared before then currency-selector appeared then\n ctrl.buyblocksOnPage = true;\n }\n\n if (!ctrl.buyblocksOnPage) {\n ctrl.showCurrencySelector = appHelperService.assertStateByName(['premium-service', 'premium-services']) && ctrl.showCurrencySelectorCondition;\n } else {\n ctrl.showCurrencySelector = ctrl.showCurrencySelectorCondition && !ctrl.hideCurrencySelector;\n }\n }\n\n function getCurrencies() {\n ctrl.currencies = currencyManager.getCurrencies();\n ctrl.currentCurrency = currencyManager.getCurrentCurrencyFromCache() || ctrl.currencies[0];\n return ctrl.currencies;\n }\n\n function setCurrency(item) {\n ctrl.currentCurrency = item;\n ctrl.openCurrencyMenu = false;\n return currencyManager.setCurrency(item);\n }\n\n function onMenuBlur() {\n ctrl.openCurrencyMenu = false;\n }\n\n var buyBlockReady = $rootScope.$on('buyBlockReady', function () {\n return handleCurrencySwitcherAppearance(true);\n });\n var stateChange = $rootScope.$on('$stateChangeSuccess', function () {\n return handleCurrencySwitcherAppearance(false);\n });\n\n $scope.$on('$destroy', handleScopeDestroyed);\n\n function handleScopeDestroyed() {\n buyBlockReady();\n stateChange();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.customHtml').component('customHtml', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/custom-html/templates/custom-html.html',\n 'controller': 'customHtmlController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n customHtmlController.$inject = [\"directiveData\", \"ENV\", \"errorService\", \"$timeout\", \"$element\"];\n angular.module('kappGlobal.customHtml').controller('customHtmlController', customHtmlController);\n\n function customHtmlController(directiveData, ENV, errorService, $timeout, $element) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.env = ENV.locale;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n if (ctrl.resource && ctrl.resource.match(/\\//)) {\n ctrl.resource = ctrl.resource.replace(/cur-locale/, ctrl.env);\n return directiveData.get(ctrl.resource).then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n } else {\n return directiveData.getByUrl(ctrl.resource || 'custom-html').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n $element.find('.accordion-section > li > h4, .ent-accordion .accordion-section .accordion-title').click(function () {\n $(this).parent().toggleClass('open');\n $(this).siblings().slideToggle();\n });\n });\n }, handleRejection);\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.doubleBanner').component('doubleBanner', {\n 'bindings': {\n 'resource': '@',\n 'template': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/double-banner/templates/double-banner.html',\n 'controller': 'doubleBannerController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n doubleBannerController.$inject = [\"directiveData\", \"$element\", \"$rootScope\", \"errorService\"];\n angular.module('kappGlobal.doubleBanner').controller('doubleBannerController', doubleBannerController);\n\n function doubleBannerController(directiveData, $element, $rootScope, errorService) {\n var ctrl = this,\n ngRender = $rootScope.$on('ngRender', runScripts);\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'double-banner').then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function runScripts() {\n var redHeight = $('.quick-menu .red-item').outerWidth(true);\n $element.find('.narrow-link a').css({ 'width': redHeight + 'px' });\n ngRender();\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.customCarousel').component('customCarousel', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/custom-carousel/templates/custom-carousel.html',\n 'controller': 'customCarouselController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n customCarouselController.$inject = [\"directiveData\", \"errorService\", \"$scope\", \"$element\", \"$rootScope\"];\n angular.module('kappGlobal.customCarousel').controller('customCarouselController', customCarouselController);\n\n function customCarouselController(directiveData, errorService, $scope, $element, $rootScope) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n var slickConfig = {\n 'infinite': true,\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'dots': true,\n 'accessibility': false,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'responsive': [{\n 'breakpoint': 1023,\n 'settings': {\n 'slidesToShow': 3,\n 'slidesToScroll': 3,\n 'infinite': true,\n 'dots': true,\n 'arrows': false\n }\n }, {\n 'breakpoint': 769,\n 'settings': {\n 'slidesToShow': 2,\n 'slidesToScroll': 2,\n 'dots': true,\n 'arrows': false\n }\n }, {\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'dots': true,\n 'arrows': false\n }\n }]\n };\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'custom-carousel').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n var ngRender = $rootScope.$on('ngRender', function () {\n startSlick();\n ngRender();\n });\n\n $scope.$on('$destroy', function () {\n stopSlick();\n });\n\n function startSlick() {\n $element.find('.carousel-body').slick(slickConfig);\n }\n\n function stopSlick() {\n $element.find('.slick-initialized').slick('unslick');\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.downloadBlockFeatured').component('downloadBlockFeatured', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/download-block-featured/templates/download-block-featured.html',\n 'controller': 'sharedGetByNameController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.downloadBlock').component('downloadBlock', {\n 'bindings': {\n 'productName': '@',\n 'productInfo': '<',\n 'productData': '<'\n },\n // 'templateUrl': '/resources/template/html/modules/_shared/components/downloads/templates/downloads.html',\n // The change is intentionally made to enable proper children (download-block) appearence detection\n 'template': '
\\n
\\n
\\n \\n \"{{::$ctrl.productInfo.title}}\"\\n \\n
\\n

{{::$ctrl.productInfo.summary}}

\\n

\\n \\n \\n {{::$ctrl.productInfo.prodMainTitle}}\\n {{::$ctrl.productInfo.prodAddTitle || \\' \\'}}\\n \\n

\\n
\\n
\\n
\\n

\\n \\n
\\n
\\n
\\n \\n
',\n 'controller': 'downloadBlockController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n downloadBlockController.$inject = [\"productData\", \"errorService\", \"directiveData\"];\n angular.module('kappGlobal.downloadBlock').controller('downloadBlockController', downloadBlockController);\n\n function downloadBlockController(productData, errorService, directiveData) {\n var ctrl = this;\n ctrl.objProductData = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n getBuyblockTranslations();\n }\n\n function getData() {\n ctrl.objProductData = ctrl.productData;\n if (ctrl.productName) {\n productData.getb2c(ctrl.productName).then(function (response) {\n ctrl.productInfo = response.data.fields;\n getBadges(ctrl.objProductData.badges);\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n if (!ctrl.productName && ctrl.productInfo) {\n getBadges(ctrl.objProductData.badges);\n }\n }\n\n function getBuyblockTranslations() {\n return directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n ctrl.buyblockTranslations = response.data.fields;\n });\n }\n\n function getBadges(badges) {\n _.forEach(badges, function (obj) {\n switch (obj.type) {\n case 'Google Play':\n obj.link = ctrl.productInfo.bbSettings.downloadFromGplayLink;\n break;\n case 'App Store':\n obj.link = ctrl.productInfo.bbSettings.downloadFromIstoreLink;\n break;\n case 'Microsoft':\n obj.link = ctrl.productInfo.bbSettings.downloadFromMicrosoftLink;\n break;\n }\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.eula').component('eula', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/eula/templates/eula.html',\n 'controller': 'eulaController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n eulaController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.eula').controller('eulaController', eulaController);\n\n function eulaController(directiveData, errorService) {\n var ctrl = this;\n\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'eula').then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.featureSection').component('featureSectionSec', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/feature-section/templates/feature-section-sec.html',\n 'controller': 'featureSectionSecController',\n 'bindings': {\n 'resource': '@'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n featureSectionSecController.$inject = [\"directiveData\", \"ENV\", \"$element\", \"$rootScope\", \"$scope\", \"errorService\"];\n angular.module('kappGlobal.featureSection').controller('featureSectionSecController', featureSectionSecController);\n\n function featureSectionSecController(directiveData, ENV, $element, $rootScope, $scope, errorService) {\n var ctrl = this;\n var $body = $('body');\n var $tabNav = void 0;\n var destroyed = false;\n\n ctrl.env = ENV.locale;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n $scope.$on('$destroy', function () {\n destroyed = true;\n\n $body.off('click', bodyClickHandler);\n\n $body = null;\n $tabNav = null;\n });\n\n function activate() {\n getData().then(function () {\n if ($rootScope.isReady) {\n $scope.$applyAsync(function () {\n if (!destroyed) {\n runScripts();\n }\n });\n } else {\n var ngRender = $rootScope.$on('ngRender', function () {\n ngRender();\n\n if (!destroyed) {\n runScripts();\n }\n });\n }\n });\n }\n\n function getData() {\n if (ctrl.resource && ctrl.resource.match(/\\//)) {\n ctrl.resource = ctrl.resource.replace(/cur-locale/, ctrl.env);\n return directiveData.get(ctrl.resource).then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n } else {\n return directiveData.getByUrl(ctrl.resource || 'feature-section-sec').then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n }\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function initializeFirstTab() {\n $element.find('.tab-content-wrapper .tab-content-single').removeClass('tab-show');\n $element.find('.tab-content-wrapper .tab-content-single').eq(0).addClass('tab-show');\n\n $element.find('.tabs-title-wrapper .tab-title').removeClass('selected').eq(0).addClass('selected');\n\n var SelectedName = $tabNav.parent().find('ul.tabs li.selected a').first().text();\n\n $element.find('.tab-nav .tab-label').remove();\n $tabNav.append('
' + SelectedName + '
');\n }\n\n function bodyClickHandler() {\n $tabNav.removeClass('active');\n }\n\n function runScripts() {\n $tabNav = $element.find('.tab-nav');\n\n $body.on('click', bodyClickHandler);\n\n initializeFirstTab();\n\n $element.find('.tab-title a').on('click', function (e) {\n var $this = $(this);\n var $parent = $this.parent();\n var current = $parent.closest('.tabs-title-wrapper').attr('data-tab');\n var tab = $this.attr('href');\n\n e.preventDefault();\n\n $element.find('.tabs-title-wrapper[data-tab=\"' + current + '\"] .tab-title').removeClass('selected');\n $parent.addClass('selected');\n\n $element.find('.tab-content-wrapper[data-tab=\"' + current + '\"] .tab-content-single').not(tab).removeClass('tab-show');\n $(tab).addClass('tab-show');\n\n $tabNav.removeClass('active');\n });\n\n $tabNav.click(function (e) {\n e.stopPropagation();\n\n $tabNav.toggleClass('active');\n });\n\n $element.find('.tab-nav .tabs').click(function (e) {\n e.stopPropagation();\n });\n\n $element.find('.tab-nav .tabs li').click(function (e) {\n var $this = $(this);\n var $parent = $this.parent();\n var $closest = $this.closest('.tab-nav');\n\n e.preventDefault();\n\n $parent.siblings().remove();\n $parent.parent().removeClass('active');\n $closest.append('
' + $this.text() + '
');\n });\n\n $element.find('.toggle-button').click(function (e) {\n var $this = $(this);\n var $container = $this.closest('.toggle-container');\n\n e.preventDefault();\n\n $container.find('.toggle-content').slideToggle();\n\n if ($container.hasClass('open')) {\n $container.removeClass('open');\n } else {\n $container.addClass('open');\n\n initializeFirstTab();\n }\n });\n\n $element.find('.section-footer a').on('click', function (e) {\n e.preventDefault();\n\n $element.find('#tab-win').addClass('tab-show');\n });\n\n $element.find('.accordion-section > li > h4, .ent-accordion .accordion-section .accordion-title').on('click', function (e) {\n var $this = $(this);\n\n e.preventDefault();\n\n $this.parent().toggleClass('open');\n $this.siblings().slideToggle();\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.featureSection').component('featureSection', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/feature-section/templates/feature-section.html',\n 'controller': 'sharedGetByNameController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.featuredProducts').component('featuredProducts', {\n 'bindings': {\n 'resource': '@',\n 'component': '@'\n },\n 'controller': 'featuredProductsController',\n 'templateUrl': '/resources/template/html/modules/_shared/components/featured-products/templates/featured-products.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n featuredProductsController.$inject = [\"osDetectService\", \"directiveData\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.featuredProducts').controller('featuredProductsController', featuredProductsController);\n\n function featuredProductsController(osDetectService, directiveData, appHelperService, errorService) {\n var ctrl = this;\n ctrl.products = '';\n ctrl.highlighted = '';\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n var hash = appHelperService.getLocationHash(),\n osDetected = osDetectService.getCurrentOs(hash),\n osList = getOsList(),\n featuredProducts = getFeaturedProducts(osList, osDetected);\n return directiveData.getByUrl(featuredProducts || 'featured-products').then(function (response) {\n ctrl.products = response.data.fields.productShortName;\n ctrl.highlighted = response.data.fields.highlighted;\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function getFeaturedProducts(dataList, osDetect) {\n var product = dataList[0].data;\n if (!osDetect.device) return product;\n if (appHelperService.assertStateByName('home-security')) {\n var osProducts = dataList.filter(function (obj) {\n return JSON.stringify(obj.os) === JSON.stringify(osDetect.device.type);\n })[0];\n if (!osProducts) return product;\n product = osProducts.data;\n }\n return product;\n }\n\n function getOsList() {\n return [{\n 'os': 'pc',\n 'data': 'featured-products'\n }, {\n 'os': 'mac',\n 'data': 'featured-products-mac'\n }, {\n 'os': 'mobile',\n 'data': 'featured-products-mobile'\n }];\n }\n\n if (appHelperService.stateIncludes('home-security-section')) {\n ctrl.state = 'b2c';\n }\n\n if (appHelperService.stateIncludes('vsb')) {\n ctrl.state = 'vsb';\n }\n\n if (appHelperService.stateIncludes('home-downloads')) {\n ctrl.state = 'hd';\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.featuresGrid').component('featuresGrid', {\n 'bindings': {\n 'resource': '@',\n 'addClass': '@'\n },\n 'controller': 'featuresGridController',\n 'templateUrl': '/resources/template/html/modules/_shared/components/features-grid/templates/features-grid.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n featuresGridController.$inject = [\"directiveData\", \"ENV\", \"errorService\"];\n angular.module('kappGlobal.featuresGrid').controller('featuresGridController', featuresGridController);\n\n function featuresGridController(directiveData, ENV, errorService) {\n var ctrl = this;\n ctrl.env = ENV.locale;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n\n if (ctrl.resource && ctrl.resource.match(/\\//)) {\n ctrl.resource = ctrl.resource.replace(/cur-locale/, ctrl.env);\n return directiveData.get(ctrl.resource).then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n } else {\n return directiveData.getByUrl(ctrl.resource || 'features-grid').then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n }\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.filters').filter('html', [\"$sce\", \"ENV\", function ($sce, ENV) {\n return function (arg) {\n if (arg) {\n arg = arg.replace(/content\\/\\w+\\-\\w+\\//ig, 'content/' + ENV.locale + '/');\n arg = '' + (arg || '') + ''; // for search markup\n }\n\n return $sce.trustAsHtml(arg);\n };\n }]).filter('trustUrl', [\"$sce\", function ($sce) {\n return function (url) {\n return $sce.trustAsResourceUrl(url);\n };\n }]).filter('xpm', [\"$sce\", function ($sce) {\n return function (input, rootEl, name, index) {\n var fieldMarkup = void 0;\n if (name && name.match(/cnt/)) name = name.replace(/cnt/, index);\n fieldMarkup = '' + input;\n return $sce.trustAsHtml(fieldMarkup);\n };\n }]).filter('stripHtmlTags', function () {\n return function (string) {\n\n return angular.isString(string) || string instanceof String ? string.replace(/<\\S[^><]*>/g, '') : string;\n };\n }).filter('capitalizeFirstLetter', function () {\n return function (input) {\n var retVal = input ? input.charAt(0).toUpperCase() + input.substring(1).toLowerCase() : '';\n return retVal;\n };\n }).filter('dashify', function () {\n return function (input) {\n var retVal = input ? input.replace(/\\s+/g, '-').toLowerCase() : '';\n return retVal;\n };\n }).filter('customCurrency', [\"currencyManager\", \"$filter\", \"$locale\", function (currencyManager, $filter, $locale) {\n function customCurrency(input, addMarkup) {\n var currencyObj = currencyManager.getCurrentCurrency();\n if (!currencyObj) return input;\n var currencyTemplate = currencyObj.template || '$1',\n tempVal = void 0,\n decimals = angular.isNumber(currencyObj.decimalCount) ? currencyObj.decimalCount : 2;\n var decimalSep = currencyObj.decimalSep || $locale.NUMBER_FORMATS.DECIMAL_SEP || '.',\n symbol = currencyObj.symbol || $locale.NUMBER_FORMATS.CURRENCY_SYM;\n\n // set the number of decimals for the number, based on config\n tempVal = $filter('number')(input, decimals);\n var decimalsFound = (tempVal || '').indexOf(decimalSep) !== -1;\n // add markup\n if (addMarkup && tempVal && decimalsFound) {\n tempVal = tempVal.split(decimalSep).map(function (item, index) {\n return '' + item + '';\n }).join('' + decimalSep + '');\n }\n var replaceValue = addMarkup ? '' + symbol + '' : symbol;\n // match the template (e.g. $ 1) by replacing $ with the currency symbol and 1 with the number.\n currencyTemplate = currencyTemplate.replace('$', replaceValue).replace('1', tempVal);\n return currencyTemplate;\n }\n customCurrency.$stateful = true;\n return customCurrency;\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.gdprReady', []).component('gdprReady', {\n 'bindings': {\n 'gdprImg': '@'\n },\n 'controller': function controller() {},\n 'template': '
'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.hmc').component('hmcHomeSecurity', {\n 'bindings': {\n 'resource': '@',\n 'component': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/hmc/templates/hmc-b2c-homepage.html',\n 'controller': 'hmcController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.hmc').component('hmcEmbedded', {\n 'bindings': {\n 'resource': '@',\n 'component': '@',\n 'enableHmc': '@',\n 'lrcData': '@',\n 'lrcVerdict': '@',\n 'defaultPack': '@'\n },\n 'controller': 'hmcController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.hmc').component('hmcHomepage', {\n 'bindings': {\n 'resource': '@',\n 'component': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/hmc/templates/hmc-homepage.html',\n 'controller': 'hmcController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.hmc').component('hmcPromo2up', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/hmc/templates/hmc-promo-2up.html',\n 'controller': [\"$rootScope\", \"$scope\", \"directiveData\", \"ENV\", \"errorService\", function controller($rootScope, $scope, directiveData, ENV, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.get('/content/' + ENV.locale + '/hmc/hmc-promo-2up.json').then(function (response) {\n ctrl.data = response.data.fields.Body;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.hmc').component('hmcReviews', {\n 'bindings': {\n 'resource': '@',\n 'productName': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/hmc/templates/hmc-reviews.html',\n 'controller': [\"$rootScope\", \"$scope\", \"directiveData\", \"ENV\", \"errorService\", function controller($rootScope, $scope, directiveData, ENV, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n var reviewPath = ctrl.productName ? '/content/' + ENV.locale + '/home-security/products/' + ctrl.productName + '/reviews-section.json' : '/content/' + ENV.locale + '/hmc/hmc-reviews.json';\n return directiveData.get(reviewPath).then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.hmc').component('helpMeChoose', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'hmcController'\n });\n})();\n'use strict';\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n(function () {\n 'use strict';\n\n hmcController.$inject = [\"$rootScope\", \"$http\", \"$q\", \"currencyManager\", \"ngDialog\", \"$window\", \"cookieService\", \"$state\", \"$timeout\", \"ENV\", \"windowHelperService\", \"errorService\", \"tracking\", \"appHelperService\"];\n angular.module('kappGlobal.hmc').controller('hmcController', hmcController);\n\n function hmcController($rootScope, $http, $q, currencyManager, ngDialog, $window, cookieService, $state, $timeout, ENV, windowHelperService, errorService, tracking, appHelperService) {\n var ctrl = this,\n storeResults = null,\n currentName = '',\n $dialog = ngDialog;\n\n var isLRC = appHelperService.stateIncludes('lrc-verdict');\n ctrl.isLrc = isLRC;\n\n ctrl.hmcData = [{ 'currentStep': 'step-1', 'stateClass': 'hmc-modal-step1' }, { 'currentStep': 'step-2', 'stateClass': 'hmc-modal-step2' }, { 'currentStep': 'results', 'stateClass': 'hmc-modal-results' }, { 'currentStep': 'autoPopup', 'stateClass': 'hmc-modal-auto-popup' }];\n ctrl.finalSelectionFilter = {};\n ctrl.QuestionSelected = [];\n ctrl.stateClass = [];\n ctrl.hmcVerdict = [];\n ctrl.currentState = $state.current.name;\n ctrl.isPopupOpen = false;\n ctrl.bannerPopupActive = false;\n ctrl.requiredOptionActive = false;\n ctrl.allSelected = false;\n ctrl.step = ctrl.hmcData[0];\n ctrl.kscAvailable = false;\n ctrl.template = 'default';\n ctrl.getSelectedOS = getSelectedOS;\n ctrl.backBtn = backBtn;\n ctrl.loadHMC = loadHMC;\n ctrl.closePromoBanner = closePromoBanner;\n ctrl.selectCheckbox = selectCheckbox;\n ctrl.checkQuestions = checkQuestions;\n ctrl.progressBar = progressBar;\n ctrl.selectAll = selectAll;\n ctrl.isMobile = windowHelperService.isMobile();\n ctrl.locale = ENV.locale;\n ctrl.$onInit = activate;\n ctrl.closeDialog = closeDialog;\n ctrl.checkHighlighted = checkHighlighted;\n\n function closeDialog() {\n $dialog.close();\n }\n\n function activate() {\n getData();\n currencyManager.getCurrencies();\n }\n\n function getData() {\n var promises = [$http.get('/content/' + ENV.locale + '/hmc/hmc-ui-fields.json', { 'cache': true }), $http.get('/content/' + ENV.locale + '/hmc/hmc-step-1.json', { 'cache': true }), $http.get('/content/' + ENV.locale + '/hmc/hmc-step-2.json', { 'cache': true }), $http.get('/content/' + ENV.locale + '/hmc/hmc-logic.json', { 'cache': true })];\n\n return $q.all(promises).then(function (response) {\n ctrl.hmcUI = response[0].data.fields;\n ctrl.step1 = response[1].data.fields;\n ctrl.step2 = response[2].data.fields;\n ctrl.settings = response[3].data.fields;\n\n // check for ksc toggle in the CMS component\n if (ctrl.settings.hmc_ksc_enable && ctrl.settings.hmc_ksc_enable[0] === 'true') ctrl.kscAvailable = true;\n\n // template check\n if (ctrl.settings.hmc_template && ctrl.settings.hmc_template === 'v2') ctrl.template = 'v2';\n\n // check for popup option in the CMS component\n if (ctrl.settings.hmc_popup) {\n ctrl.settings.hmc_popup.forEach(function (item, index) {\n autoPopup(item, index);\n });\n }\n\n currentName = $rootScope.kaspersky.pageName;\n });\n }\n\n function stepsDialog() {\n return $dialog.open({\n 'template': '/resources/template/html/modules/_shared/components/hmc/templates/hmc-steps-' + ctrl.template + '.html',\n 'className': 'hmc-modal-wrapper-' + ctrl.template + ' ngdialog-flyout ngdialog-block',\n 'showClose': false,\n 'name': 'default-popup',\n 'data': ctrl,\n 'closeByNavigation': true,\n 'onOpenCallback': function onOpenCallback() {\n ctrl.isPopupOpen = true;\n $timeout(function () {\n ctrl.currentPopup = angular.element(document).find('#hmc-modal');\n }, 200);\n },\n 'preCloseCallback': function preCloseCallback() {\n $timeout(function () {\n ctrl.QuestionSelected.length = 0;\n ctrl.hmcVerdict.length = 0;\n ctrl.stateClass = [];\n ctrl.step = '';\n ctrl.isPopupOpen = false;\n ctrl.requiredOptionActive = false;\n ctrl.allSelected = false;\n ctrl.bannerPopupActive = true;\n ctrl.autoPopupActive = false;\n\n if (ctrl.hmcData && ctrl.hmcData[0].autoPopup) ctrl.hmcData[0].autoPopup = false;\n\n angular.element(document).find('#hmc-os-selection').children().removeClass('selected');\n\n $timeout(function () {\n angular.element(document).find('html').removeClass('hmc-mobile-banner-active-' + ctrl.template);\n }, 400);\n });\n }\n });\n }\n\n function loadHMC($event) {\n $event.stopPropagation();\n $event.preventDefault();\n\n $dialog.closeAll();\n\n $timeout(function () {\n ctrl.stateClass.push('hmc-embedded');\n ctrl.step = ctrl.hmcData[0];\n ctrl.autoPopupActive = false;\n angular.element(document).find('html').removeClass('hmc-mobile-banner-active-' + ctrl.template);\n\n stepsDialog();\n }, 600);\n }\n\n function getSelectedOS($event) {\n $event.preventDefault();\n\n ctrl.OSSelected = [];\n var OSCollection = angular.element(document).find('#hmc-os-selection .form-element.checkbox.selected').parent().children();\n\n if (angular.element(document).find('#hmc-os-selection .form-element.checkbox.selected').length > 0) {\n\n // gather user-selected OS data\n\n _.forEach(angular.element(document).find('#hmc-os-selection .form-element.checkbox.selected'), function (value) {\n ctrl.OSSelected.push(_.findIndex(OSCollection, value));\n });\n }\n\n function skipStep2() {\n processData();\n\n if (!ctrl.isPopupOpen) {\n stepsDialog();\n }\n\n ctrl.stateClass.push('hmc-step2-skipped');\n ctrl.step = ctrl.hmcData[2];\n }\n\n function goToStep2() {\n ctrl.hmcData[1];\n ctrl.step = ctrl.hmcData[1];\n\n if (!ctrl.isPopupOpen) {\n stepsDialog();\n }\n\n $timeout(function () {\n tracking.trackPageView(currentName + ' > HMC > Choose Your Needs');\n }, 100);\n }\n\n if (ctrl.kscAvailable) {\n goToStep2();\n } else {\n if (ctrl.OSSelected.indexOf(0)) {\n skipStep2();\n } else {\n goToStep2();\n }\n }\n }\n\n function selectAll($event) {\n if ($event) $event.preventDefault();\n\n ctrl.allSelected = !ctrl.allSelected;\n\n if (ctrl.allSelected === true) {\n ctrl.requiredOptionActive = true;\n angular.element(document).find('#hmc-questions-selection, form.narrow-wrapper > .row').children().addClass('selected');\n } else {\n ctrl.requiredOptionActive = false;\n angular.element(document).find('#hmc-questions-selection, form.narrow-wrapper > .row').children().removeClass('selected');\n }\n }\n\n function selectCheckbox(event) {\n if (angular.element(document).find(event.currentTarget).hasClass('select-all')) {\n selectAll();\n } else {\n angular.element(document).find(event.currentTarget).toggleClass('selected');\n }\n\n if (angular.element(document).find(event.currentTarget).parent().children().hasClass('selected')) {\n ctrl.requiredOptionActive = true;\n } else {\n ctrl.requiredOptionActive = false;\n }\n\n event.stopPropagation();\n event.preventDefault();\n }\n\n var mediaQuery = $window.matchMedia('(min-width: 769px)');\n mediaQuery.addListener(mqBreakPoint);\n\n function mqBreakPoint(mediaQuery) {\n if (mediaQuery.matches) {\n ctrl.isMobile = false;\n angular.element(document).find('html').removeClass('hmc-mobile-banner-active-' + ctrl.template);\n } else {\n ctrl.isMobile = true;\n if (ctrl.autoPopupActive) angular.element(document).find('html').addClass('hmc-mobile-banner-active-' + ctrl.template);\n }\n }\n\n function closePromoBanner() {\n ctrl.stateClass = ctrl.stateClass.filter(function (e) {\n return e !== 'hmc-promo-popup-v2';\n });\n\n $timeout(function () {\n tracking.trackPageView(currentName + ' > HMC > Select Platform');\n }, 100);\n }\n\n var ngRender = $rootScope.$on('ngRender', function () {\n embeddedBtn();\n ngRender();\n });\n\n function autoPopup(trigger, index) {\n function triggerHMCPopup() {\n cookieService.set('hmc_auto_open', 'true', 1);\n ctrl.isPopupOpen = true;\n ctrl.hmcData[0].autoPopup = true;\n ctrl.stateClass.push('hmc-auto-popup');\n ctrl.autoPopupActive = true;\n\n if (ctrl.template === 'v2') ctrl.stateClass.push('hmc-promo-popup-v2');\n\n var bannerOmnitureValue = $rootScope.$on('ngRender', function () {\n tracking.trackPageView(currentName + ' > HMC > Start');\n bannerOmnitureValue();\n });\n\n mqBreakPoint(mediaQuery);\n\n $timeout(function () {\n stepsDialog();\n }, trigger.hmc_popup_trigger_time || 0);\n }\n\n if (trigger && trigger.hmc_enable_popup[0]) {\n var hmcPopupLocation = '';\n\n switch (trigger.hmc_location) {\n case 'homepage':\n hmcPopupLocation = 'homepage';\n break;\n case 'Product pages':\n hmcPopupLocation = 'home-product';\n break;\n case 'Home Security Homepage':\n hmcPopupLocation = 'home-security';\n break;\n case 'LRC Verdict':\n hmcPopupLocation = 'lrc-verdict';\n break;\n }\n\n if (!cookieService.get('hmc_auto_open')) {\n ctrl.step1.hmcPromo[0] = ctrl.step1.hmcPromo[index];\n\n if (ctrl.currentState === 'lrc-verdict') {\n if (JSON.parse(ctrl.lrcData).enableHmc !== 'true') return;\n ctrl.verdict = JSON.parse(ctrl.lrcVerdict);\n var lrcHmcLogic = JSON.parse(ctrl.lrcData).hmcLogic;\n _.some(lrcHmcLogic, function (item) {\n if (!cookieService.get('hmc_auto_open') && (item.devices === ctrl.verdict.license_count && item.years === Math.round(ctrl.verdict.license_days / 365) || !item.devices && !item.years)) {\n triggerHMCPopup();\n }\n });\n return;\n }\n\n if (ctrl.currentState === hmcPopupLocation) {\n triggerHMCPopup();\n } else if (!hmcPopupLocation.length) {\n triggerHMCPopup();\n }\n }\n }\n }\n\n function checkQuestions($event) {\n $event.preventDefault();\n\n // gather user-selected questions data\n\n var checkboxes = angular.element(document).find('#hmc-questions-selection .form-element.checkbox:not(.select-all)');\n _.forEach(checkboxes, function (el, i) {\n if (!angular.element(el).hasClass('select-all')) {\n if (angular.element(el).hasClass('selected')) {\n ctrl.QuestionSelected.push(i);\n }\n }\n });\n\n ctrl.step = ctrl.hmcData[2];\n\n //$location.hash('hmc-modal');\n //$anchorScroll();\n processData();\n }\n\n function backBtn(event) {\n event.stopPropagation();\n event.preventDefault();\n\n ctrl.QuestionSelected.length = 0;\n ctrl.hmcVerdict.length = 0;\n\n if (ctrl.currentPopup.hasClass('hmc-modal-results')) {\n ctrl.step = ctrl.hmcData[1];\n }\n\n if (ctrl.currentPopup.hasClass('hmc-embedded') || ctrl.currentPopup.hasClass('hmc-auto-popup')) {\n if (ctrl.currentPopup.hasClass('hmc-step2-skipped') && ctrl.currentPopup.hasClass('hmc-modal-results') || ctrl.currentPopup.hasClass('hmc-modal-step2')) {\n ctrl.step = ctrl.hmcData[0];\n ctrl.stateClass.splice(1, 1);\n ctrl.requiredOptionActive = false;\n } else if (ctrl.currentPopup.hasClass('hmc-modal-results')) {\n ctrl.step = ctrl.hmcData[1];\n }\n } else {\n if (ctrl.currentPopup.hasClass('hmc-modal-step1') || ctrl.currentPopup.hasClass('hmc-modal-step2') || ctrl.currentPopup.hasClass('hmc-modal-results') && ctrl.currentPopup.hasClass('hmc-step2-skipped')) {\n closeDialog();\n }\n\n if (ctrl.currentPopup.hasClass('hmc-step2-skipped')) {\n ctrl.stateClass.splice(0, 1);\n } else {\n ctrl.step = ctrl.hmcData[1];\n }\n }\n }\n\n function progressBar(current) {\n if (current.currentStep === 'step-1' || current.currentStep === 'autoPopup') {\n return { 'width': '0' };\n }\n\n if (current.currentStep === 'step-2') {\n return { 'width': '50%' };\n }\n\n if (current.currentStep === 'results') {\n return { 'width': '100%' };\n }\n }\n\n function filterMatch(dataSet, secondDimensionDataSet, relevancy, isOs) {\n var filtered = dataSet;\n var selection = !isOs ? 'hmcQuestionIndex' : 'hmcOsIndex';\n\n if (!secondDimensionDataSet.length) {\n filtered = filtered.filter(function (elem) {\n return !elem[selection].length;\n });\n } else {\n for (var i = 0; i < secondDimensionDataSet.length; i++) {\n filtered = filtered.filter(function (elem) {\n var diff = elem[selection].length - secondDimensionDataSet.length;\n return $.inArray(secondDimensionDataSet[i], elem[selection]) !== -1 && 0 <= diff && diff <= relevancy;\n });\n }\n }\n\n return filtered;\n }\n\n function findByPriority(priorityCheck) {\n var max = 0;\n\n for (var i = 1; i < priorityCheck.length; i++) {\n if (priorityCheck[i].priority > priorityCheck[i - 1].priority) {\n max = i;\n }\n }\n\n return priorityCheck[max];\n }\n\n function getHMCResult(selection) {\n if (!selection || selection.length === 'undefined') {\n selection = {\n 'hmcResultComponents': ['content/' + ENV.locale + '/home-security/products/ktsmd/ktsmd.json']\n };\n\n if (ctrl.kscAvailable) {\n selection = {\n 'hmcResultComponents': ['content/' + ENV.locale + '/home-security/products/ksc-personal/ksc-personal.json', 'content/' + ENV.locale + '/home-security/products/ksc-family/ksc-family.json']\n };\n }\n }\n\n storeResults = selection.hmcResultComponents;\n return selection.hmcResultComponents;\n }\n\n function getSvar64(os, questions, verdicts, version) {\n var sVar64 = [],\n versionId = version || 'acq';\n\n sVar64.push(versionId);\n\n function getValues(item) {\n var holder = [];\n\n _.forEach(item, function (value) {\n holder.push(value);\n });\n\n return holder.length > 0 ? holder : 'na';\n }\n\n // add selected os indexes to array\n\n sVar64.push(getValues(os));\n\n // add selected questions to array\n // if non selected then add 'na'\n\n sVar64.push(getValues(questions) || 'na');\n\n // set verdict data\n\n var verdictData = [],\n recommendedVerdict = void 0;\n\n _.forEach(verdicts, function (value, index) {\n if (value && value.shortName) verdictData.push(value.shortName);\n\n if (index === verdicts.length - 1) {\n recommendedVerdict = value.shortName;\n }\n });\n\n sVar64.push(verdictData);\n\n // set final recommended verdict value\n\n sVar64.push(recommendedVerdict);\n\n return sVar64.join(':');\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function processData() {\n var osRelevancy = 0,\n questionsRelevancy = 3,\n questionSelectionFilter = void 0,\n osSelectionFilter = void 0,\n selectedQuestions = ctrl.QuestionSelected;\n\n if (ctrl.kscAvailable) {\n questionsRelevancy = 8;\n }\n\n var logicBlock = ctrl.lrcData ? JSON.parse(ctrl.lrcData).hmcLogic : ctrl.settings.hmcLogicBlock;\n if (ctrl.lrcVerdictData) ctrl.lrcVerdictData = JSON.parse(ctrl.lrcVerdict);\n\n osSelectionFilter = filterMatch(logicBlock, ctrl.OSSelected, osRelevancy, true);\n questionSelectionFilter = filterMatch(osSelectionFilter, selectedQuestions, questionsRelevancy, false);\n ctrl.finalSelectionFilter = findByPriority(questionSelectionFilter);\n getHMCResult(ctrl.finalSelectionFilter);\n\n // get resource element\n var promises = [];\n storeResults.forEach(function (item) {\n if (item.match(/\\.json/)) {\n promises.push($http.get(item, { 'cache': true }));\n }\n });\n\n $q.all(promises).then(function (responses) {\n ctrl.hmcVerdict = responses.map(function (response) {\n var verdict = response && response.data.fields;\n\n verdict.selectedDevices = 3;\n\n if ((ENV.locale === 'zh-cn' || ENV.locale === 'en-us') && verdict.shortName === 'ktsmd') {\n verdict.selectedDevices = 5;\n }\n\n if (ENV.locale === 'zh-cn' && verdict.shortName === 'kis') {\n verdict.selectedDevices = 1;\n }\n return verdict;\n });\n\n $timeout(function () {\n $window.kaspersky.hmcTool = getSvar64(ctrl.OSSelected, ctrl.QuestionSelected, ctrl.hmcVerdict);\n if (angular.isDefined($window.s)) $window.s.eVar64 = $window.kaspersky.hmcTool;\n tracking.trackPageView(currentName + ' > HMC > We recommend > ' + [].concat(_toConsumableArray(ctrl.hmcVerdict)).pop().title);\n }, 100);\n }).catch(handleRejection);\n }\n\n function runEmbeddedHMC() {\n ctrl.stateClass.push('hmc-embedded');\n ctrl.step = ctrl.hmcData[0];\n stepsDialog();\n\n $timeout(function () {\n tracking.trackPageView(currentName + ' > HMC > Select Platform');\n }, 100);\n }\n\n function embeddedBtn() {\n angular.element(document).find('.hmc-open.hmc-show-start-screen').on('click', function ($event) {\n $event.stopPropagation();\n $event.preventDefault();\n\n if ($event.handled !== true) {\n $event.handled = true;\n runEmbeddedHMC();\n }\n });\n }\n\n function checkHighlighted(product, first, last) {\n if (product !== 'kpm') {\n // For LRC pairs go green/grey and grey/red\n if (ctrl.isLrc) {\n if (last && ctrl.finalSelectionFilter && ctrl.finalSelectionFilter.hmcPromoLastItemColor !== 'green') return 'true';else if (first && ctrl.finalSelectionFilter && ctrl.finalSelectionFilter.hmcPromoLastItemColor === 'green') return 'false';else return 'grey';\n // For b2c first one is green (variable first is passed as false from template), second is either green or red\n } else {\n if (last && ctrl.finalSelectionFilter && ctrl.finalSelectionFilter.hmcPromoLastItemColor !== 'green') return 'true';else if (first) return 'grey';\n }\n } else return 'false';\n }\n } // controller end\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.hmcUniversal').component('hmcUniversalView', {\n 'bindings': {\n 'resource': '@', // changes the content folder within hmc-universal folder\n 'hmcType': '@', // picks template and logic\n 'hmcMod': '@' // modifies logical tree for current hmcType\n },\n 'controller': 'hmcUniversalViewController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var hmcType = $attrs.hmcType || 'smb';\n var templateType = $attrs.template ? '-' + $attrs.template : '';\n return '/resources/template/html/modules/_shared/components/hmc-universal/templates/' + hmcType + '/init' + templateType + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n hmcUniversalViewController.$inject = [\"directiveData\", \"$element\", \"ENV\", \"hmcConfig\", \"ngDialog\", \"errorService\", \"$http\", \"$scope\", \"$rootScope\", \"$window\", \"tracking\"];\n angular.module('kappGlobal.hmcUniversal').controller('hmcUniversalViewController', hmcUniversalViewController);\n\n function hmcUniversalViewController(directiveData, $element, ENV, hmcConfig, ngDialog, errorService, $http, $scope, $rootScope, $window, tracking) {\n var ctrl = this;\n ctrl.step = 'init';\n ctrl.products = {};\n ctrl.partTracking = '';\n ctrl.locale = ENV.locale;\n ctrl.pageName = $rootScope.kaspersky.pageName;\n ctrl.templatePath = '/resources/template/html/modules/_shared/components/hmc-universal/templates';\n ctrl.stepHistory = new Array(ctrl.step);\n ctrl.checkAndChangeStep = checkAndChangeStep;\n ctrl.checkCustomLocale = checkCustomLocale;\n ctrl.backOneStep = backOneStep;\n ctrl.closePopup = closePopup;\n ctrl.$onInit = activate;\n\n var preventSubmit = $element.find('form').on('submit', function (ev) {\n ev.preventDefault();\n });\n\n $scope.$on('$destroy', preventSubmit);\n\n function activate() {\n ctrl.hmcType = ctrl.hmcType || 'smb';\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl('hmc-settings').then(function (res) {\n var _res$data$fields = res.data.fields,\n hmcType = _res$data$fields.hmcType,\n hmcMod = _res$data$fields.hmcMod,\n resource = _res$data$fields.resource;\n\n ctrl.hmcType = hmcType || ctrl.hmcType;\n ctrl.hmcMod = hmcMod || ctrl.hmcMod;\n ctrl.resource = resource || ctrl.resource;\n }).finally(function () {\n ctrl.hmcTypeMod = ctrl.hmcMod ? ctrl.hmcType + '-' + ctrl.hmcMod : ctrl.hmcType;\n getStepData();\n });\n }\n\n function getStepData() {\n ctrl.template = ctrl.templatePath + '/' + ctrl.hmcType + '/' + ctrl.step + '.html';\n ctrl.contentPath = '/content/' + ctrl.locale + '/hmc-universal/' + ctrl.resource + '/' + ctrl.step + '.json';\n\n return directiveData.get('' + ctrl.contentPath).then(function (response) {\n if (ctrl.step === 'init') ctrl.init = response.data.fields;else ctrl.data = response.data.fields;\n\n if (ctrl.data) {\n // setMinMax(); This needs to be restored after DR fix\n\n if (ctrl.data.products) {\n updateTemplate();\n getProductData();\n }\n }\n }, handleRejection);\n }\n\n /**\n * Check if value from Tridion isn't 0\n * Will be 0 if field is empty as Tridion converts it\n * Only needed in specific steps\n */\n function setMinMax() {\n // eslint-disable-line no-unused-vars\n if (ctrl.step === 'area_mailboxes') {\n ctrl.data.minOne = ctrl.data.minOne !== 0 ? ctrl.data.minOne : 1;\n ctrl.data.maxOne = ctrl.data.maxOne !== 0 ? ctrl.data.maxOne : 999;\n ctrl.data.incOne = ctrl.data.incOne !== 0 ? ctrl.data.incOne : 1;\n ctrl.data.minTwo = ctrl.data.minTwo !== 0 ? ctrl.data.minTwo : 1;\n ctrl.data.maxTwo = ctrl.data.maxTwo !== 0 ? ctrl.data.maxTwo : 999;\n ctrl.data.incTwo = ctrl.data.incTwo !== 0 ? ctrl.data.incTwo : 1;\n\n if (checkCustomLocale()) customLocale(ctrl.data.incOne, ctrl.data.incTwo);else watchInputsForMaxValue();\n }\n }\n\n /**\n * Watch group of inputs for max value entered by user\n * Set to max value from Tridion if user enters bigger than allowed\n */\n function watchInputsForMaxValue() {\n ctrl.watchInputs = ['$ctrl.area_mailboxes.devices', '$ctrl.area_mailboxes.nodes'];\n\n $scope.$watchGroup(ctrl.watchInputs, function (newV) {\n if (newV[0] && newV[0] > ctrl.data.maxOne) ctrl[ctrl.step].devices = ctrl.data.maxOne;\n if (newV[1] && newV[1] > ctrl.data.maxTwo) ctrl[ctrl.step].nodes = ctrl.data.maxTwo;\n });\n }\n\n /**\n * Get product data for each product\n *\n * @return (object)\n */\n function getProductData() {\n ctrl.data.products.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.products[index] = response.data.fields;\n }, handleRejection);\n }\n });\n }\n\n /**\n * Update template with either single or double product template\n *\n * @returns {string}\n */\n function updateTemplate() {\n ctrl.template = ctrl.templatePath + '/' + ctrl.hmcType + '/' + (ctrl.data.products.length === 1 ? 'product' : 'product_combo') + '.html';\n return ctrl.template;\n }\n\n /**\n * Check keys and values exist and add correct one\n * Each one is for different steps\n * Check for undefined and replace with null in order to compare\n */\n function setPack() {\n if (ctrl.area_mailboxes && (ctrl.area_mailboxes.devices || ctrl.area_mailboxes.nodes)) {\n ctrl.area_mailboxes.devices = angular.isDefined(ctrl.area_mailboxes.devices) ? ctrl.area_mailboxes.devices : null;\n ctrl.area_mailboxes.nodes = angular.isDefined(ctrl.area_mailboxes.nodes) ? ctrl.area_mailboxes.nodes : null;\n\n ctrl.mismatchDisclaimer = ctrl.area_mailboxes.devices !== ctrl.area_mailboxes.nodes ? ctrl.data.mismatchDisclaimer : null;\n\n ctrl.selectedPack = ctrl.area_mailboxes.devices > ctrl.area_mailboxes.nodes ? ctrl.area_mailboxes.devices : ctrl.area_mailboxes.nodes;\n }\n }\n\n /**\n * Executes the comparison function which tells which step to change to\n * Fetches and update the view and data\n *\n * @param firstStep (string) sets the first step before the checks happen\n * @param step (string) specifies the name of the step you want to navigate back to\n * @returns {boolean}\n */\n function checkAndChangeStep(firstStep, step) {\n var updateHistory = true;\n\n if (firstStep) ctrl[ctrl.step]['resources'] = firstStep;\n\n if (step) {\n updateHistory = false;\n } else {\n step = hmcConfig[ctrl.hmcTypeMod][ctrl.step](ctrl);\n }\n\n if (step) {\n ctrl.step = step;\n } else {\n return false;\n }\n\n if (updateHistory) ctrl.stepHistory.push(ctrl.step);\n\n getStepData().then(function () {\n setPack();\n stepsDialog();\n setupTracking(firstStep, updateHistory);\n });\n }\n\n /**\n * Close and open a new ngDialog with correct template and data\n *\n * @returns {object}\n */\n function stepsDialog() {\n ngDialog.closeAll();\n return ngDialog.open({\n 'template': ctrl.template,\n 'className': 'hmc-modal-wrapper-' + ctrl.hmcType + '-' + ctrl.step + ' ngdialog-flyout',\n 'showClose': false,\n 'closeByEscape': false,\n 'closeByDocument': false,\n 'closeByNavigation': true,\n 'name': 'default-popup',\n 'data': ctrl\n });\n }\n\n /**\n * Close all ngDialog popups and reset everything\n */\n function closePopup() {\n ngDialog.closeAll();\n reset();\n }\n\n /**\n * Delete all keys and reset all values\n * Needed when the popup is closed and want to start over\n * Not been called when using back button in popup\n */\n function reset() {\n for (var i = 0; i <= ctrl.stepHistory.length; i++) {\n for (var key in ctrl) {\n if (ctrl.stepHistory[i] === key) delete ctrl[key];\n }\n }\n ctrl.step = 'init';\n ctrl.selectedPack = null;\n ctrl.stepHistory = new Array(ctrl.step);\n ctrl.partTracking = '';\n $window.kaspersky.hmcTool = '';\n $window.kaspersky.pageName = ctrl.pageName;\n getStepData();\n }\n\n /**\n * Used for the back button, navigates using stepHistory\n * @returns {boolean}\n */\n function backOneStep() {\n if (ctrl.stepHistory.length > 1) {\n ctrl.stepHistory.pop();\n checkAndChangeStep(null, ctrl.stepHistory[ctrl.stepHistory.length - 1]);\n }\n return false;\n }\n\n /**\n * Check for custom locales to show dropdowns instead of inputs\n * Same locales are used here as for buyblocks\n *\n * @returns {boolean}\n */\n function checkCustomLocale() {\n var customLocales = ['da-dk', 'en-us', 'es-es', 'fr-fr', 'it-it', 'ja-jp', 'nb-no', 'nl-nl', 'ru-ru', 'sv-se'];\n return customLocales.indexOf(ctrl.locale) > -1;\n }\n\n /**\n * Set the range for the dropdowns as specified in Tridion\n */\n function customLocale(incOne, incTwo) {\n ctrl.selectRangeOne = {};\n ctrl.selectRangeTwo = {};\n\n if (!ctrl.data) return;\n if (ctrl.data.minOne && ctrl.data.maxOne) {\n for (var i = ctrl.data.minOne; i <= ctrl.data.maxOne; i += incOne) {\n ctrl.selectRangeOne[i] = i;\n }\n }\n if (ctrl.data.minTwo && ctrl.data.maxTwo) {\n for (var _i = ctrl.data.minTwo; _i <= ctrl.data.maxTwo; _i += incTwo) {\n ctrl.selectRangeTwo[_i] = _i;\n }\n }\n }\n\n function setupTracking(firstStep, updateHistory) {\n if (firstStep) ctrl.stepOne = firstStep;\n\n if (!updateHistory) {\n ctrl.partTracking = ctrl.partTracking.replace(/:(,|\\w)+$/g, '');\n return pageTracking();\n }\n\n if (ctrl.stepHistory.length > 2) {\n ctrl.partTracking += ':';\n var tempObj = Object.entries(ctrl[ctrl.stepHistory.slice(-2)[0]]);\n\n ctrl.partTracking += tempObj.map(function (value) {\n return value[1];\n }).join(',');\n }\n\n pageTracking();\n }\n\n function pageTracking() {\n var answerTrkStr = 'HMC VSMB:' + ctrl.stepOne + ctrl.partTracking;\n answerTrkStr += ctrl.stepHistory.slice(-1)[0].indexOf('verdict') !== -1 ? ':' + ctrl.stepHistory.slice(-1)[0] : '';\n var stepTrkStr = ctrl.pageName + ' > HMC > ' + ctrl.step;\n\n $window.kaspersky.hmcTool = answerTrkStr;\n tracking.trackPageView(stepTrkStr);\n $window.kaspersky.pageName = stepTrkStr;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.hmcUniversal').constant('hmcConfig', {\n 'smb': {\n 'init': function init(ctrl) {\n if (!ctrl.init) return;\n return ctrl.init.resources === 'Yes' ? 'console_type' : 'license_number_detection';\n },\n 'license_number_detection': function license_number_detection(ctrl) {\n if (!ctrl.license_number_detection) return;\n return ctrl.license_number_detection.license_number > ctrl.data.number ? 'area_mailboxes' : 'ksos_verdict';\n },\n 'console_type': function console_type(ctrl) {\n if (!ctrl.console_type) return;\n return ctrl.console_type.console_type === 'Cloud' || ctrl.console_type.console_type === 'Doesn\\'t matter' ? 'area_mailboxes' : 'area_patch';\n },\n 'area_mailboxes': function area_mailboxes(ctrl) {\n if (!ctrl.area_mailboxes) return;\n var step = ctrl.area_mailboxes;\n /* This needs to be restored after DR fix\n if (step.devices && !step.nodes) {\n return 'kes_cloud_verdict';\n } else if (!step.devices && step.nodes) {\n return 'ks_o365_verdict';\n } else if (step.devices && step.nodes) {\n return 'ks_o365_plus_kes_cloud_verdict';\n }*/\n return step.area_mailboxes === 'Yes' ? 'kes_cloud_verdict' : 'ks_o365_verdict';\n },\n 'area_patch': function area_patch(ctrl) {\n if (!ctrl.area_patch) return;\n var step = ctrl.area_patch;\n return step.area_patch === 'Yes' ? 'kesb_advanced_verdict' : 'kesb_select_verdict';\n }\n },\n 'smb-endpoint': {\n 'init': function init(ctrl) {\n if (!ctrl.init) return;\n return ctrl.init.resources === 'Yes' ? 'console_type' : 'license_number_detection';\n },\n 'license_number_detection': function license_number_detection(ctrl) {\n if (!ctrl.license_number_detection) return;\n return ctrl.license_number_detection.license_number > ctrl.data.number ? 'endpoint_protection' : 'ksos_verdict';\n },\n 'console_type': function console_type(ctrl) {\n if (!ctrl.console_type) return;\n return ctrl.console_type.console_type === 'Cloud' || ctrl.console_type.console_type === 'Doesn\\'t matter' ? 'endpoint_protection' : 'area_patch';\n },\n 'endpoint_protection': function endpoint_protection(ctrl) {\n if (!ctrl.endpoint_protection) return;\n var step = ctrl.endpoint_protection;\n return step.endpoint_only === 'Yes' ? 'kes_cloud_verdict' : 'kes_cloud_plus_verdict';\n },\n 'area_patch': function area_patch(ctrl) {\n if (!ctrl.area_patch) return;\n var step = ctrl.area_patch;\n return step.area_patch === 'Yes' && ctrl.locale !== 'ru-ru' ? 'kesb_advanced_verdict' : step.area_patch === 'Yes' && ctrl.locale === 'ru-ru' ? 'area_patch_ru' : 'kesb_select_verdict';\n },\n 'area_patch_ru': function area_patch_ru(ctrl) {\n if (!ctrl.area_patch_ru) return;\n var step = ctrl.area_patch_ru;\n return step.area_patch_ru === 'Yes' ? 'kesb_universal_verdict' : 'kesb_advanced_verdict';\n }\n }\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.kssVerdictHeader').component('kssVerdictHeader', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/kss-verdict-header/templates/kss-verdict-header.html',\n 'controller': 'sharedGetByNameController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.landingPage').component('landingPage', {\n 'bindings': {\n 'delay': '@'\n },\n 'controller': 'landingPageController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.landingPage').controller('landingPageController', landingPageController);\n\n function landingPageController() {}\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcDisclaimers').component('lrcDisclaimers', {\n 'bindings': {\n 'disclaimer': '=?'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/lrc-disclaimers/templates/lrc-disclaimers.html',\n 'controller': 'lrcDisclaimersController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n lrcDisclaimersController.$inject = [\"$location\", \"$anchorScroll\", \"rootScopeHelper\", \"$scope\"];\n angular.module('kappGlobal.lrcDisclaimers').controller('lrcDisclaimersController', lrcDisclaimersController);\n\n function lrcDisclaimersController($location, $anchorScroll, rootScopeHelper, $scope) {\n var ctrl = this;\n\n function scrollOnUpdate() {\n var id = $location.hash();\n $location.hash('disclaimer');\n $anchorScroll();\n $location.hash(id);\n }\n\n rootScopeHelper.on($scope, 'lrcDisclaimer', handleDisclaimerChange);\n\n function handleDisclaimerChange(ev, disclaimer) {\n ctrl.disclaimer = disclaimer;\n scrollOnUpdate();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.homepageBanner').component('homepageBanner', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/homepage-banner/templates/homepage-banner.html',\n 'controller': 'homepageBannerController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n homepageBannerController.$inject = [\"$timeout\", \"$element\", \"$state\", \"$scope\", \"directiveData\", \"searchService\", \"appHelperService\", \"windowHelperService\", \"errorService\", \"angularLoad\", \"$q\", \"ENV\", \"ngDialog\", \"$rootScope\", \"$window\"];\n angular.module('kappGlobal.homepageBanner').controller('homepageBannerController', homepageBannerController);\n\n function homepageBannerController($timeout, $element, $state, $scope, directiveData, searchService, appHelperService, windowHelperService, errorService, angularLoad, $q, ENV, ngDialog, $rootScope, $window) {\n var ctrl = this,\n searchFormVisible = false,\n mobileSetup = void 0,\n desktopSetup = void 0,\n animations = {},\n pendingAnimations = {\n 'searchForm': null,\n 'ctas': null,\n 'ctaElements': null\n };\n\n ctrl.data = {};\n ctrl.locale = ENV.locale;\n ctrl.businessNames = ['small', 'medium', 'enterprise'];\n ctrl.search = search;\n ctrl.goToSearchPage = goToSearchPage;\n ctrl.displaySearch = displaySearch;\n ctrl.$onInit = activate;\n ctrl.$onDestroy = destroyGlobalListeners;\n ctrl.isMobile = windowHelperService.isMobile();\n ctrl.handleBusinessHoverIn = handleBusinessHoverIn;\n ctrl.handleBusinessHoverOut = handleBusinessHoverOut;\n ctrl.handleMenuClick = handleMenuClick;\n ctrl.handleHomeHoverIn = handleHomeHoverIn;\n ctrl.handleHomeHoverOut = handleHomeHoverOut;\n ctrl.openLRCDialog = openLRCDialog;\n ctrl.getTabsOrder = getTabsOrder;\n\n angular.element(window).bind('resize.homepageBanner', function () {\n $timeout(function () {\n ctrl.isMobile = windowHelperService.isMobile();\n });\n });\n\n $scope.$watch('$ctrl.isMobile', function (newV, oldV) {\n if (newV !== oldV) {\n if (ctrl.isMobile && !mobileSetup) {\n setupMobileHeader();\n } else if (ctrl.isMobile) {\n desktopSetup = false;\n } else if (!ctrl.isMobile && !desktopSetup) {\n runScript();\n }\n }\n });\n\n function activate() {\n loadScripts();\n }\n\n function getTabsOrder(order) {\n if (ctrl.isInverted) return Math.abs(order - 1);\n return order;\n }\n\n function loadScripts() {\n\n var promises = [angularLoad.loadScript('/resources/template/js/TweenLite.min.js'), angularLoad.loadScript('/resources/template/js/CSSPlugin.min.js'), directiveData.getByUrl('homepage-banner').then(function (response) {\n $element.css({ 'transform': 'translate3d(0,0,0)' });\n return response;\n })];\n\n $q.all(promises).then(handlePromisesSuccess).catch(function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function handlePromisesSuccess(responses) {\n var response = _.find(responses, 'data');\n ctrl.data = response.data.fields;\n ctrl.isInverted = appHelperService.isTrue(ctrl.data.isInverted);\n\n if (ctrl.isInverted) ctrl.data.productCategories.reverse();\n\n ctrl.data.bsnsCategory = _.first(ctrl.data.productCategories);\n ctrl.data.homeCategory = _.last(ctrl.data.productCategories);\n\n runScript();\n }\n\n var autoOff = $rootScope.$on('autocompleteCall', function (ev, val) {\n var reg = new RegExp(val[0], 'ig'),\n searchString = val[0];\n\n ctrl.autocompleteQ = val.filter(function (value, index) {\n return val.indexOf(value) === index;\n });\n ctrl.autocompleteQhtml = ctrl.autocompleteQ.map(function (item) {\n return item.replace(reg, '' + searchString + '');\n });\n });\n\n function destroyGlobalListeners() {\n angular.element(window).off('resize.homepageBanner');\n autoOff();\n }\n\n function search() {\n searchService.autocompleteAPI(ctrl.searchBar).then(function (suggestions) {\n $rootScope.$emit('autocompleteCall', suggestions.data.terms);\n });\n }\n\n function displaySearch() {\n var animationName = searchFormVisible ? 'hideSearchForm' : 'showSearchForm';\n searchFormVisible = !searchFormVisible;\n executeAnimation('searchForm', animationName);\n }\n\n function handleBusinessHoverIn(override) {\n if (!ctrl.onHoverBusiness && !override) executeAnimation('ctas', 'showBusinessCta');\n ctrl.onHoverBusiness = true;\n }\n\n function handleBusinessHoverOut(override) {\n if (ctrl.onHoverBusiness && !override) executeAnimation('ctas', 'hideBusinessCta');\n ctrl.onHoverBusiness = false;\n }\n\n function handleMenuClick(link) {\n $window.location.href = link;\n }\n\n function handleHomeHoverIn(override) {\n if (!ctrl.onHoverHome && !override) executeAnimation('ctas', 'showHomeCta');\n ctrl.onHoverHome = true;\n }\n\n function handleHomeHoverOut(override) {\n if (ctrl.onHoverHome && !override) executeAnimation('ctas', 'hideHomeCta');\n ctrl.onHoverHome = false;\n }\n\n function executeAnimation(animationKey, animationName) {\n if (animations[animationName]) animations[animationName]();else pendingAnimations[animationKey] = animationName;\n }\n\n function registerAnimations(animationsMap) {\n _.extend(animations, animationsMap);\n }\n\n function flushAnimations(animationKey) {\n if (pendingAnimations[animationKey]) {\n animations[pendingAnimations[animationKey]]();\n pendingAnimations[animationKey] = null;\n }\n }\n\n function goToSearchPage(e) {\n var keyCode = void 0;\n if (e && e.type === 'keypress') {\n keyCode = e.which || e.keyCode;\n\n if (keyCode === 13) {\n $state.go('search', {\n 'query': ctrl.searchBar\n });\n }\n } else {\n $state.go('search', {\n 'query': ctrl.searchBar\n });\n }\n }\n\n function openLRCDialog($event) {\n $event.preventDefault();\n ngDialog.open({\n 'template': '
\\n \\t\\t\\n \\t\\t\\t\\n \\t\\t\\n
\\n ',\n 'plain': true,\n 'className': 'ngdialog-flyout ngdialog--lrc-dialog',\n 'data': ctrl,\n 'showClose': false,\n 'scope': $scope\n });\n }\n\n function runScript() {\n $timeout(ctrl.isMobile && !mobileSetup ? setupMobileHeader : setupDesktopHeader);\n }\n\n // desktop header\n function setupDesktopHeader() {\n var $header = $('.homepage-hero-header-desktop'),\n $body = $('body'),\n $headerInner = $header.find('.hero-header-inner'),\n $searchForm = $header.find('.top-nav-search-form'),\n $searchInputWrap = $searchForm.find('.search-input-wrap'),\n $searchInput = $header.find('#homepage-header-search-input'),\n $hideOnSearch = $header.find('.top-nav-hideonsearch'),\n $midCol = $header.find('.hero-mid-col'),\n $bsnsCol = $header.find('.hero-side-col.business'),\n $homeCol = $header.find('.hero-side-col.home'),\n $bsnsOverlay = $bsnsCol.find('.green-overlay'),\n $homeOverlay = $homeCol.find('.green-overlay'),\n $bsnsGrayOverlay = $bsnsCol.find('.gray-overlay'),\n $homeGrayOverlay = $homeCol.find('.gray-overlay'),\n $bsnsSideCtaBox = $bsnsCol.find('.side-cta-box'),\n $homeSideCtaBox = $homeCol.find('.side-cta-box'),\n $bsnsSideScreen = $bsnsCol.find('.side-screen'),\n $homeSideScreen = $homeCol.find('.side-screen'),\n $bsnsStateCtaBtns = $bsnsSideScreen.find('.cta-list > li > a'),\n $homeStateCtaBtns = $homeSideScreen.find('.cta-list > li > a'),\n $stateCtasWrap = $header.find('.cta-list'),\n $stateCtaWraps = $header.find('.cta-list > li'),\n $stateCtaBtns = $header.find('.cta-list > li > a'),\n $midScreenIntro = $header.find('.mid-screen-intro'),\n $midSmallLogo = $header.find('.mid-small-logo'),\n $midSmallLogoLine = $midSmallLogo.find('> span'),\n $selectProductType = $header.find('.select-product-type');\n\n desktopSetup = true;\n\n if (!$header.length) return;\n\n $bsnsSideCtaBox.find('a').click(function (e) {\n e.preventDefault();\n });\n $homeSideCtaBox.find('a').click(function (e) {\n e.preventDefault();\n });\n\n $(window).on('resize', function () {\n // GWP-36621: If you use jquery's width(), it will round the number down.\n // this breaks when users browse at lower zooms e.g. 75%\n var bodyWidth = $body[0].getBoundingClientRect().width,\n midColWidth = $midCol[0].getBoundingClientRect().width;\n\n if (bodyWidth < 768) return;\n\n if (bodyWidth >= 768 && bodyWidth < 992) {\n // since we're sliding the header in this pixel range we\n // need to make it extra wide so the edges don't become\n // visible when it finishes sliding\n bodyWidth += 400;\n }\n\n $headerInner.css({\n 'width': bodyWidth + 'px',\n 'margin-left': '-' + bodyWidth / 2 + 'px'\n });\n $bsnsCol.width((bodyWidth - midColWidth) / 2);\n $homeCol.width((bodyWidth - midColWidth) / 2);\n });\n\n $(window).trigger('resize');\n\n // Search form\n\n registerAnimations({ showSearchForm: showSearchForm, hideSearchForm: hideSearchForm });\n flushAnimations('searchForm');\n\n function showSearchForm() {\n $searchForm.find('.search-bar').show();\n TweenLite.fromTo($hideOnSearch, 0.4, { 'x': 0, 'autoAlpha': 1 }, { 'x': '+=10', 'autoAlpha': 0 });\n TweenLite.fromTo($searchInputWrap, 0.4, { 'x': '-=10', 'opacity': 0 }, { 'x': 0, 'opacity': 1 });\n $searchInputWrap.css('z-index', '1');\n $searchForm.addClass('active');\n $searchInput[0].focus();\n }\n\n function hideSearchForm() {\n $searchForm.find('.search-bar').hide();\n TweenLite.fromTo($hideOnSearch, 0.4, { 'x': '+=10', 'autoAlpha': 0 }, { 'x': 0, 'autoAlpha': 1 });\n TweenLite.fromTo($searchInputWrap, 0.4, { 'x': 0, 'opacity': 1 }, { 'x': '-=10', 'opacity': 0 });\n $searchInputWrap.css('z-index', '-1');\n $searchForm.removeClass('active');\n }\n\n // CTAs\n\n $timeout(function () {\n TweenLite.fromTo($bsnsSideCtaBox, 1, { 'y': '+=20', 'autoAlpha': 0 }, { 'y': 0, 'autoAlpha': 1 });\n TweenLite.fromTo($homeSideCtaBox, 1, { 'y': '+=20', 'autoAlpha': 0 }, { 'y': 0, 'autoAlpha': 1 });\n\n registerAnimations({\n showBusinessCta: showBusinessCta,\n hideBusinessCta: hideBusinessCta,\n showHomeCta: showHomeCta,\n hideHomeCta: hideHomeCta\n });\n flushAnimations('ctas');\n\n $stateCtaBtns.hover(handleCtaBtnHoverIn, handleCtaBtnHoverOut);\n $stateCtaWraps.hover(handleCtaWrapHoverIn);\n $stateCtasWrap.mouseleave(handleCtaWrapHoverOut);\n }, 1000);\n\n function showBusinessCta() {\n if ($body.width() < 992) applyOffset('right');\n TweenLite.to($bsnsSideCtaBox, 0.4, { 'autoAlpha': 0 });\n TweenLite.to($bsnsOverlay, 0.4, { 'autoAlpha': 1 });\n TweenLite.to($homeGrayOverlay, 0.4, { 'autoAlpha': 0.77 });\n TweenLite.to($bsnsSideScreen, 0.4, { 'autoAlpha': 1 });\n // let tl = new TimelineLite();\n // tl.staggerFromTo($bsnsStateCtaBtns, 0.4, {'x': '-=10'}, {'x': 0}, 0.01);\n TweenLite.fromTo($bsnsStateCtaBtns, 0.4, { 'x': '+=10' }, { 'x': 0 });\n TweenLite.to($selectProductType, 0.2, { 'autoAlpha': 0 });\n }\n\n function showHomeCta() {\n if ($body.width() < 992) applyOffset('left');\n TweenLite.to($homeSideCtaBox, 0.4, { 'autoAlpha': 0 });\n TweenLite.to($homeOverlay, 0.4, { 'autoAlpha': 1 });\n TweenLite.to($bsnsGrayOverlay, 0.4, { 'autoAlpha': 0.77 });\n TweenLite.to($homeSideScreen, 0.4, { 'autoAlpha': 1 });\n // let tl = new TimelineLite();\n // tl.staggerFromTo($homeStateCtaBtns, 0.4, {'x': '+=10'}, {'x': 0}, 0.01);\n TweenLite.fromTo($homeStateCtaBtns, 0.4, { 'x': '+=10' }, { 'x': 0 });\n TweenLite.to($selectProductType, 0.2, { 'autoAlpha': 0 });\n }\n\n function hideBusinessCta() {\n if ($body.width() < 992) restoreOffset();\n TweenLite.to($bsnsSideCtaBox, 0.4, { 'autoAlpha': 1 });\n TweenLite.to($bsnsOverlay, 0.4, { 'autoAlpha': 0 });\n TweenLite.to($homeGrayOverlay, 0.4, { 'autoAlpha': 0 });\n TweenLite.to($bsnsSideScreen, 0.4, { 'autoAlpha': 0 });\n TweenLite.to($selectProductType, 0.2, { 'autoAlpha': 1 });\n }\n\n function hideHomeCta() {\n if ($body.width() < 992) restoreOffset();\n TweenLite.to($homeSideCtaBox, 0.4, { 'autoAlpha': 1 });\n TweenLite.to($homeOverlay, 0.4, { 'autoAlpha': 0 });\n TweenLite.to($bsnsGrayOverlay, 0.4, { 'autoAlpha': 0 });\n TweenLite.to($homeSideScreen, 0.4, { 'autoAlpha': 0 });\n TweenLite.to($selectProductType, 0.2, { 'autoAlpha': 1 });\n }\n\n function applyOffset(direction) {\n var offset = calcOffset($body.width()),\n animateDir = void 0;\n if (appHelperService.isPageDirectionRTL()) {\n animateDir = direction === 'right' ? '-=' : '+=';\n } else {\n animateDir = direction === 'right' ? '+=' : '-=';\n }\n TweenLite.to($headerInner, 1.2, { 'ease': Power1.easeOut, 'x': animateDir + offset.x });\n TweenLite.to($midCol, 1.2, { 'ease': Power1.easeOut, 'width': offset.w });\n }\n\n function restoreOffset() {\n TweenLite.to($headerInner, 1.2, { 'ease': Power1.easeOut, 'x': 0 });\n TweenLite.to($midCol, 1.2, { 'ease': Power1.easeOut, 'width': 280 });\n }\n\n function calcOffset(windowWidth) {\n // 425px ~> minimum width of side col that's needed\n // at 768 resolution ~> x:200/w:300\n // at 1200 resolution ~> x:0/w:350\n var minSideWidth = 440,\n maxMidWidth = 280,\n offset = void 0,\n x = void 0,\n w = void 0;\n offset = minSideWidth - (windowWidth - maxMidWidth) / 2;\n if (offset < 0) return { 'x': 0, 'w': maxMidWidth };\n x = offset * 0.85;\n w = maxMidWidth - offset * 0.15;\n return { 'x': x, 'w': w };\n }\n\n function handleCtaBtnHoverIn() {\n TweenLite.to(this, 0.3, { 'opacity': 1 });\n }\n\n function handleCtaBtnHoverOut() {\n TweenLite.to(this, 0.3, { 'opacity': 0.7 });\n }\n\n function handleCtaWrapHoverIn() {\n var $activeScreen = $header.find('.mid-screen.active'),\n $targetScreen = $header.find('.mid-screen.' + $(this).data('screen'));\n\n $activeScreen.removeClass('active');\n $targetScreen.addClass('active');\n\n TweenLite.to($activeScreen, 0.5, { 'autoAlpha': 0 });\n TweenLite.to($midScreenIntro, 0.2, { 'autoAlpha': 0 });\n\n if ($activeScreen.hasClass('mid-screen-intro')) {\n TweenLite.set($midSmallLogo, { 'top': $targetScreen.height() + 22 });\n TweenLite.to($midSmallLogo, 0.5, { 'autoAlpha': 1 });\n } else {\n TweenLite.to($midSmallLogo, 0.5, { 'autoAlpha': 1, 'top': $targetScreen.height() + 22 });\n }\n\n TweenLite.fromTo($midSmallLogoLine, 0.8, { 'width': 2 }, { 'ease': Power1.easeInOut, 'width': 170 });\n TweenLite.to($targetScreen, 0.5, { 'autoAlpha': 1 });\n }\n\n function handleCtaWrapHoverOut() {\n var $activeScreen = $header.find('.mid-screen.active');\n TweenLite.to($activeScreen, 0.5, { 'autoAlpha': 0 });\n TweenLite.to($midSmallLogo, 0.2, { 'autoAlpha': 0 });\n TweenLite.to($midScreenIntro, 0.5, { 'autoAlpha': 1 });\n $activeScreen.removeClass('active');\n $midScreenIntro.addClass('active');\n }\n }\n\n // mobile header\n function setupMobileHeader() {\n var $header = $('.homepage-hero-header-mobile'),\n $allScreens = $header.find('.screen'),\n $introScreen = $header.find('.screen-intro'),\n $bsnsScreen = $header.find('.screen-business'),\n $homeScreen = $header.find('.screen-home'),\n $bsnsCta = $introScreen.find('.cta-list .cta.business'),\n $homeCta = $introScreen.find('.cta-list .cta.home'),\n $backBtn = $header.find('.back-btn');\n\n mobileSetup = true;\n desktopSetup = false;\n\n if (!$header.length) return;\n\n $bsnsCta.click(function (event) {\n event.preventDefault();\n if (!$(this).hasClass(\"hp-hover\")) {\n TweenLite.fromTo($bsnsScreen, 0.5, { 'x': '+=20', 'autoAlpha': 0 }, { 'x': 0, 'autoAlpha': 1 });\n $allScreens.removeClass('active');\n $bsnsScreen.addClass('active');\n }\n });\n\n $homeCta.click(function (event) {\n event.preventDefault();\n if (!$(this).hasClass(\"hp-hover\")) {\n TweenLite.fromTo($homeScreen, 0.5, { 'x': '+=20', 'autoAlpha': 0 }, { 'x': 0, 'autoAlpha': 1 });\n $allScreens.removeClass('active');\n $homeScreen.addClass('active');\n }\n });\n\n $backBtn.click(function () {\n var $activeScreen = $header.find('.screen.active');\n TweenLite.fromTo($activeScreen, 0.5, { 'x': 0, 'autoAlpha': 1 }, { 'x': '-=10', 'autoAlpha': 0 });\n $allScreens.removeClass('active');\n $introScreen.addClass('active');\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.lrcSerial').component('lrcScrollTo', {\n 'bindings': {\n 'label': '@',\n 'targetElementSelector': '@' // defaults to #compare\n },\n 'controller': 'lrcScrollToController',\n 'templateUrl': '/resources/template/html/modules/_shared/components/lrc-scroll-to/templates/lrc-scroll-to.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n lrcScrollToController.$inject = [\"$rootScope\", \"$document\"];\n angular.module('kappGlobal.lrcSerial').controller('lrcScrollToController', lrcScrollToController);\n\n function lrcScrollToController($rootScope, $document) {\n var _this = this;\n\n var ctrl = this;\n ctrl.show = true;\n\n var ngRender = $rootScope.$on('ngRender', function () {\n _this.scrollToElement = $document[0].querySelector(_this.targetElementSelector || '#compare');\n ctrl.show = !!_this.scrollToElement;\n ngRender();\n });\n\n ctrl.scrollTo = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n\n _this.scrollToElement && _this.scrollToElement.scrollIntoView();\n };\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcSerial').component('lrcSerial', {\n 'bindings': {\n 'lostDaysDisclaimerFullText': '=?',\n 'kfaDisclaimer': '=?',\n 'template': '@'\n },\n 'controller': 'lrcSerialController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'lrc-serial';\n\n if ($attrs.template) template = $attrs.template;\n return '/resources/template/html/modules/_shared/components/lrc-serial/templates/' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n lrcSerialController.$inject = [\"$scope\", \"$state\", \"sessionStorageService\", \"directiveData\", \"lrcService\", \"$q\", \"errorService\", \"windowHelperService\", \"$timeout\", \"$window\", \"ngDialog\", \"$rootScope\", \"currencyManager\"];\n angular.module('kappGlobal.lrcSerial').controller('lrcSerialController', lrcSerialController);\n\n function lrcSerialController($scope, $state, sessionStorageService, directiveData, lrcService, $q, errorService, windowHelperService, $timeout, $window, ngDialog, $rootScope, currencyManager) {\n var ctrl = this;\n ctrl.sendSerial = sendSerial;\n ctrl.editInput = editInput;\n ctrl.$onInit = activate;\n ctrl.openScreenshotDialog = openScreenshotDialog;\n var opts = { 'location': false, 'inherit': true };\n\n function activate() {\n ctrl.isPartner = ctrl.template === 'lrc-serial-dialog';\n var promises = [getLrcSerial(), getTranslation()];\n $q.all(promises);\n }\n\n function getLrcSerial() {\n return directiveData.getByUrl('lrc-serial').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.hideSidebar = ctrl.data.hideSidebar && ctrl.data.hideSidebar[0] === 'True';\n }, handleRejection);\n }\n\n function getTranslation() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function openScreenshotDialog($event) {\n $event.preventDefault();\n ngDialog.open({\n 'template': '
\\n \\t\\t\\n \\t\\t\\t\\n \\t\\t\\n
\\n
\\n \\n
',\n 'plain': true,\n 'className': 'ngdialog-flyout ngdialog--lrc-dialog',\n 'data': ctrl,\n 'showClose': false,\n 'scope': $scope,\n 'width': 772\n });\n }\n\n function sendSerial() {\n var isULS = (currencyManager.getCurrentCurrency() || {}).lrcEndpoint;\n\n if (ctrl.serial) {\n if (ctrl.serial.length === 18) {\n var serialArr = ctrl.serial.split('');\n serialArr.splice(4, 0, '-');\n serialArr.splice(11, 0, '-');\n ctrl.serial = serialArr.join('');\n }\n if (ctrl.serial.length === 32) {\n var _serialArr = ctrl.serial.split('');\n _serialArr.splice(8, 0, '-');\n _serialArr.splice(13, 0, '-');\n _serialArr.splice(18, 0, '-');\n _serialArr.splice(23, 0, '-');\n ctrl.serial = _serialArr.join('');\n }\n if (!$scope.serialForm.$invalid) {\n lrcService.searchLicense(ctrl.serial, {}).then(function (response) {\n ctrl.license = response;\n ctrl.error = '';\n if (ctrl.isPartner) return handlePartnerSuccess();\n\n handleLRCSuccess();\n }, function (rejection) {\n if (isULS && rejection && rejection.status && ~~(+rejection.status / 100) === 5) {\n ctrl.error = ctrl.translations.lrcServiceUnavailable || 'LRC service unavailable.';\n } else {\n ctrl.error = ctrl.translations.lrcInvalidSerial || 'You may have made a mistake when entering your License information. Please try entering it again.';\n }\n errorService.warn(rejection);\n });\n } else {\n $scope.serialForm.serial.$dirty = true;\n }\n } else {\n $scope.serialForm.serial.$dirty = true;\n }\n }\n\n function handleLRCSuccess() {\n ctrl.license.data.verdictSerial = ctrl.serial;\n var verdictString = ctrl.license.data['lost_days'] && ctrl.license.data['lost_days']['lost_days_fallback_verdict'] || ctrl.license.data.verdict;\n\n setLostDaysLeft(ctrl.license.data.days_left);\n // Check if the verdict is LOSTDAYS problem related and save partner name and link\n\n if (verdictString.match(/LOSTDAYS_FALLBACK/)) {\n ctrl.lostDaysDisclaimer = {\n 'partner': verdictString.match(/LOSTDAYS_FALLBACK_(.*)/)[1],\n 'link': ctrl.license.data['lost_days'] && ctrl.license.data['lost_days']['provider_url'] || ctrl.license.data.provider_url\n\n };\n $rootScope.$emit('lrcDisclaimer', replaceAll(ctrl.translations[ctrl.lostDaysDisclaimer.partner], /href=\"#\"/, 'href=\"' + ctrl.lostDaysDisclaimer.link + '\"'));\n } else if (verdictString.match(/KSC_FAM_UNKNOWN/)) {\n $rootScope.$emit('lrcDisclaimer', ctrl.translations['KSC_FAM_UNKNOWN']);\n } else if (verdictString.match(/CHANNEL_FALLBACK/)) {\n $rootScope.$emit('lrcDisclaimer', ctrl.translations['CHANNEL_FALLBACK']);\n } else if (verdictString.match(/NOT_DR_CA_FALLBACK/)) {\n $rootScope.$emit('lrcDisclaimer', ctrl.translations['NOT_DR_CA_FALLBACK']);\n\n // temporary redirect for CA users with the above verdict per the PM\n $timeout(function () {\n return $window.location.href = 'https://www.kaspersky.ca/lrc?serial=' + ctrl.license.data.verdictSerial;\n }, 2000);\n } else if (verdictString.match(/EARLY_RENEWAL_FALLBACK/)) {\n var expDateTime = new Date(ctrl.license.data['expiration_datetime']).getTime(),\n renewalTime = new Date(expDateTime - 7776000000),\n renewalDate = renewalTime.toLocaleDateString(),\n today = new Date().getTime(),\n daysLeftDiff = Math.floor((expDateTime - today) / (1000 * 60 * 60 * 24)),\n daysLeft = daysLeftDiff > 0 ? daysLeftDiff : 0;\n\n ctrl.lostDaysDisclaimerFullText = ctrl.translations['EARLY_RENEWAL_FALLBACK'].replace('((days_left))', daysLeft).replace('((renewal_period_start_date))', renewalDate);\n $rootScope.$emit('lrcDisclaimer', ctrl.lostDaysDisclaimerFullText);\n } else {\n $state.go('lrc-verdict', {\n 'verdict': verdictString,\n 'verdictData': ctrl.license.data,\n 'fromSerial': true\n }, opts);\n }\n }\n\n function handlePartnerSuccess() {\n if (!ctrl.license.data.partnerid) return ctrl.noPartner = true;\n getPartnerData();\n }\n\n function getPartnerData() {\n return directiveData.getPartnerByID(ctrl.license.data.partnerid).then(function (response) {\n var partnerObj = response;\n\n if (!partnerObj) return ctrl.noPartner = true;\n\n if (partnerObj.href) windowHelperService.goToUrl(partnerObj.href);\n }, handleRejection);\n }\n\n // Private Methods\n function replaceAll(lostDaysString, find, replace) {\n return lostDaysString.replace(find, replace);\n }\n\n function editInput(newV, oldV) {\n if (newV && oldV && newV.length < 21) {\n if (newV.length > oldV.length && (ctrl.serial.length === 4 || ctrl.serial.length === 11) && ctrl.serial[ctrl.serial.length - 1] !== '-') ctrl.serial += '-';\n } else if (newV && oldV && newV.length === 21) {\n var serialArr = ctrl.serial.replace(/-/g, '').split('');\n serialArr.splice(8, 0, '-');\n serialArr.splice(13, 0, '-');\n serialArr.splice(18, 0, '-');\n ctrl.serial = serialArr.join('');\n if (newV.length > oldV.length && ctrl.serial.length === 23 && ctrl.serial[ctrl.serial.length - 1] !== '-') ctrl.serial += '-';\n } else if (newV && oldV && newV.length > 21) {\n if (newV.length > oldV.length && ctrl.serial.length === 23 && ctrl.serial[ctrl.serial.length - 1] !== '-') ctrl.serial += '-';\n }\n }\n\n function setLostDaysLeft(daysLeft) {\n sessionStorageService.set('lrc-daysLeft', daysLeft);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcStepsSec').component('lrcStepsSec', {\n 'bindings': {},\n 'templateUrl': '/resources/template/html/modules/_shared/components/lrc-steps/templates/lrc-steps-sec.html',\n 'controller': 'lrcStepsSecController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n lrcStepsSecController.$inject = [\"$scope\", \"$timeout\", \"directiveData\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.lrcStepsSec').controller('lrcStepsSecController', lrcStepsSecController);\n\n function lrcStepsSecController($scope, $timeout, directiveData, appHelperService, errorService) {\n var ctrl = this,\n gallerySlider2Config = {\n 'infinite': true,\n 'slidesToShow': 2,\n 'dots': false,\n 'draggable': false,\n 'centerMode': true,\n 'nextArrow': '',\n 'prevArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1\n }\n }]\n },\n magnificPopupConfig = {\n 'delegate': 'a',\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': false,\n 'mainClass': 'mfp-with-zoom mfp-img-mobile',\n 'image': {\n 'verticalFit': true\n },\n 'gallery': {\n 'enabled': true\n },\n 'zoom': {\n 'enabled': true,\n 'duration': 300,\n 'opener': function opener(element) {\n return element.find('img');\n }\n }\n };\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('lrc-steps-sec').then(function (response) {\n ctrl.data = response.data.fields;\n runScript();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n ctrl.tab = 0;\n ctrl.setTab = function (event, newTab) {\n event.preventDefault();\n ctrl.tab = newTab;\n };\n ctrl.isSet = function (tabNum) {\n return $scope.tab === tabNum;\n };\n\n function runScript() {\n $timeout(function () {\n var SelectedName = void 0;\n\n //////////////////////////////////////////////////////\n // Tabs\n //////////////////////////////////////////////////////\n\n $('.tab-title.sec a').on('click', function (e) {\n var $this = $(this),\n $parent = $this.parent(),\n current = void 0,\n tab = void 0;\n e.preventDefault();\n\n // Get the name of tab content that should be controled\n current = $parent.closest('.tabs-title-wrapper').attr('data-tab');\n\n // Remove selected class from all tab titles and add it to the one just clicked\n $('.tabs-title-wrapper.sec[data-tab=\\'' + current + '\\'] .tab-title').removeClass('selected');\n $parent.addClass('selected');\n\n // Check clicked link href and show matching tab content\n tab = $this.attr('href');\n $('.tab-content-wrapper.sec[data-tab=\\'' + current + '\\'] .tab-content-single').not(tab).removeClass('tab-show');\n $(tab).addClass('tab-show');\n });\n\n //////////////////////////////////////////\n // Tabs desktop -> Dropdown mobile\n //////////////////////////////////////////\n\n // Get the name of currently active tab for mobile list\n SelectedName = $('.tab-nav.sec').parent().find('ul.tabs li.selected a').text();\n\n if ($scope.$ctrl.data.steps.length > 1) {\n $('.tab-nav.sec').append('
' + SelectedName + '
');\n }\n\n $('.tab-nav.sec').click(function (e) {\n e.stopPropagation();\n $(this).toggleClass('active');\n });\n\n // Close it if user clicks outside\n $('body').click(function () {\n $('.tab-nav.sec').removeClass('active');\n });\n\n $('.tab-nav.sec .tabs').click(function (e) {\n e.stopPropagation();\n });\n\n // Check when item is clicked and update active tab label\n $('.tab-nav.sec .tabs li').click(function (e) {\n var $this = $(this);\n e.preventDefault();\n $this.parent().siblings().remove();\n $this.closest('.tab-nav').append('
');\n $this.closest('.tab-nav').find('.tab-label').text($(this).text());\n $this.parent().parent().toggleClass('active');\n });\n\n function initGallerySlider2() {\n return gallerySlider2Config;\n }\n\n $('.gallery-slider-2.sec').slick(initGallerySlider2());\n\n $('.reinit-slick.sec .tab-title a').on('click', function (e) {\n e.preventDefault();\n $('.gallery-slider-2.sec').slick('unslick').slick(initGallerySlider2());\n });\n\n $('.popup-gallery.sec div').magnificPopup(magnificPopupConfig);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcSteps').component('lrcSteps', {\n 'bindings': {},\n 'templateUrl': '/resources/template/html/modules/_shared/components/lrc-steps/templates/lrc-steps.html',\n 'controller': 'lrcStepsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n lrcStepsController.$inject = [\"$scope\", \"$timeout\", \"directiveData\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.lrcSteps').controller('lrcStepsController', lrcStepsController);\n\n function lrcStepsController($scope, $timeout, directiveData, appHelperService, errorService) {\n var ctrl = this;\n ctrl.tab = 0;\n ctrl.setTab = setTab;\n ctrl.isSet = isSet;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('lrc-steps').then(function (response) {\n ctrl.data = response.data.fields;\n runScript();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function setTab(event, newTab) {\n event.preventDefault();\n ctrl.tab = newTab;\n }\n\n function isSet(tabNum) {\n return $scope.tab === tabNum;\n }\n\n function runScript() {\n $timeout(function () {\n var SelectedName = void 0;\n\n //////////////////////////////////////////////////////\n // Tabs\n //////////////////////////////////////////////////////\n\n $('.tab-title:not(.sec) a').on('click', function (e) {\n var $this = $(this),\n $parent = $this.parent(),\n current = void 0,\n tab = void 0;\n\n e.preventDefault();\n // Get the name of tab content that should be controled\n current = $parent.closest('.tabs-title-wrapper').attr('data-tab');\n\n // Remove selected class from all tab titles and add it to the one just clicked\n $('.tabs-title-wrapper[data-tab=\\'' + current + '\\'] .tab-title').removeClass('selected');\n $parent.addClass('selected');\n\n // Check clicked link href and show matching tab content\n tab = $this.attr('href');\n $('.tab-content-wrapper[data-tab=\\'' + current + '\\'] .tab-content-single').not(tab).removeClass('tab-show');\n $(tab).addClass('tab-show');\n });\n\n //////////////////////////////////////////\n // Tabs desktop -> Dropdown mobile\n //////////////////////////////////////////\n\n // Get the name of currently active tab for mobile list\n SelectedName = $('.tab-nav:not(.sec)').parent().find('ul.tabs li.selected a').text();\n\n if ($scope.$ctrl.data.steps.length > 1) {\n $('.tab-nav:not(.sec)').append('
' + SelectedName + '
');\n }\n\n $('.tab-nav:not(.sec)').click(function (e) {\n e.stopPropagation();\n $(this).toggleClass('active');\n });\n\n // Close it if user clicks outside\n $('body').click(function () {\n $('.tab-nav:not(.sec)').removeClass('active');\n });\n\n $('.tab-nav:not(.sec) .tabs').click(function (e) {\n e.stopPropagation();\n });\n\n // Check when item is clicked and update active tab label\n $('.tab-nav:not(.sec) .tabs li').click(function (e) {\n var $this = $(this);\n e.preventDefault();\n $this.parent().siblings().remove();\n $this.closest('.tab-nav').append('
');\n $this.closest('.tab-nav').find('.tab-label').text($(this).text());\n $this.parent().parent().toggleClass('active');\n });\n\n function initGallerySlider() {\n return {\n 'infinite': true,\n 'slidesToShow': 2,\n 'dots': false,\n 'draggable': false,\n 'centerMode': true,\n 'nextArrow': '',\n 'prevArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1\n }\n }]\n };\n }\n\n $('.gallery-slider-2:not(.sec)').slick(initGallerySlider());\n\n $('.reinit-slick:not(.sec) .tab-title a').on('click', function (e) {\n e.preventDefault();\n $('.gallery-slider-2:not(.sec)').slick('unslick').slick(initGallerySlider());\n });\n\n $('.popup-gallery:not(.sec) div').magnificPopup({\n 'delegate': 'a',\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': false,\n 'mainClass': 'mfp-with-zoom mfp-img-mobile',\n 'image': {\n 'verticalFit': true\n },\n 'gallery': {\n 'enabled': true\n },\n 'zoom': {\n 'enabled': true,\n 'duration': 300,\n 'opener': function opener(element) {\n return element.find('img');\n }\n }\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.lrcVerdictPage').component('lrcVerdictPage', {\n 'bindings': {\n 'verdict': '@',\n 'verdictData': '<',\n //loc variable sending requests to en-ca depending on query parameter\n 'loc': '<'\n },\n 'template': '',\n 'controller': 'lrcVerdictPageController'\n });\n})();\n'use strict';\n\n(function () {\n lrcVerdictController.$inject = [\"appHelperService\", \"directiveData\", \"productData\", \"priceData\", \"rootScopeHelper\", \"$rootScope\", \"$q\", \"$location\", \"errorService\", \"$state\", \"$scope\", \"$timeout\", \"maxymiser\", \"$element\", \"$http\", \"ENV\", \"windowHelperService\", \"$document\", \"seoHelperService\", \"templateVersion\", \"tracking\", \"buyblockService\", \"currencyManager\", \"localizationService\"];\n angular.module('kappGlobal.lrcVerdictPage').controller('lrcVerdictPageController', lrcVerdictController);\n\n function lrcVerdictController(appHelperService, directiveData, productData, priceData, rootScopeHelper, $rootScope, $q, $location, errorService, $state, $scope, $timeout, maxymiser, $element, $http, ENV, windowHelperService, $document, seoHelperService, templateVersion, tracking, buyblockService, currencyManager, localizationService) {\n\n var DAYS_LEFT_THRESHOLD = 30;\n\n // localization //\n var ctrl = this;\n\n ctrl.$onInit = activate;\n ctrl.handleBuyblockUpdated = handleBuyblockUpdated;\n ctrl.isBuyblockEnabled = isBuyblockEnabled;\n ctrl.checkIPCountry = checkIPCountry;\n ctrl.getPageHeadline = getPageHeadline;\n ctrl.columnLabels = columnLabels;\n ctrl.getBuyblockSavings = getBuyblockSavings;\n ctrl.daysRemainingBanner = daysRemainingBanner; //Revealed for testing purposes\n ctrl.locale = appHelperService.getLocale();\n var parseRUDays = localizationService.parseRUDays;\n\n function activate() {\n ctrl.folder = ctrl.verdict.match(/[a-z0-9]+/i);\n ctrl.displayPageSavings = false;\n ctrl.formattedHeadlineSavings = '';\n ctrl.formattedPromoSavings = '';\n\n var overrideVerdict = handleMM();\n\n if (ctrl.verdictData) {\n handleVerdictData(overrideVerdict);\n if (!currencyManager.pl2Enabled()) {\n priceData.getPartnerEstore(ctrl.verdictData.partnerid).then(function (response) {\n response.label = response.data; // for compatibility with partner-mapping.json structure, remove when json is obsolete\n checkEStoreAvailability(response);\n }, function (err) {\n errorService.warn('Partner mapping is not available on pricelist, falling back to partner-mapping file', err);\n // Fallback to old partner-mapping.json can be safely removed after price-list starts working\n return directiveData.getPartnerByID(ctrl.verdictData.partnerid).then(function (response) {\n checkEStoreAvailability(response);\n }, function (err) {\n checkEStoreAvailability(); // check if the estore is safe to pass through anyway\n handleRejection(err);\n });\n });\n }\n }\n\n ctrl.locale = ENV.locale;\n ctrl.isB2B = false;\n ctrl.ipCountry = windowHelperService.getIPCountry();\n\n getTranslations();\n $timeout(function () {\n checkLostdaysNoPricing();\n }, 3000);\n\n rootScopeHelper.on($scope, 'currencyChange', getPageHeadline($rootScope.currency));\n\n templateVersion.getVer('home-security', 'meta', 'products/kscloud/meta').then(function (response) {\n ctrl.templateVer = response && response.data.fields.template || '1.0';\n });\n }\n\n function handleMM() {\n var searchMM = ($location.search() || {}).mm;\n\n if (searchMM === 'kscup' || searchMM === 'ktsup') {\n handleVerdict('/lrc/verdicts/kis/' + searchMM + '.json');\n\n return {\n 'postfix': searchMM,\n 'test': searchMM === 'ktsup' ? 1 : 2\n };\n } else {\n handleVerdict();\n\n return null;\n }\n }\n\n function checkIPCountry(currency) {\n var ipCountry = currency || $rootScope.currency ? currency || $rootScope.currency : ctrl.ipCountry;\n return [ipCountry !== 'DA', ipCountry !== 'DT', ipCountry !== 'DH'].every(function (condition) {\n return condition;\n });\n }\n\n function getPageHeadline(currency) {\n if (!ctrl.data) return;\n return ctrl.data.headline ? checkIPCountry(currency) ? ctrl.data.pageHeadline : ctrl.data.headline : ctrl.data.pageHeadline;\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getTranslations() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n }, handleRejection);\n }\n\n function handleBuyblockUpdated(section, product, values) {\n var targetSection = section !== 'top' ? 'top' : 'bottom';\n if (!_.isEqual(ctrl.bbData[targetSection][product], values)) {\n ctrl.bbData[targetSection][product] = values;\n }\n }\n\n function isBuyblockEnabled() {\n return _.get(ctrl, 'data.buyblockDisabled[0]') !== 'True';\n }\n\n function columnLabels(colNumber) {\n return ctrl.data.columnLabels && _.find(ctrl.data.columnLabels, function (item) {\n return item.number === colNumber;\n });\n }\n\n // function to get all products information in a promise\n function productsFetcher(products) {\n return $q.all(products.map(function (product) {\n if (product.match(/cloud|total|365|server|mobile|systems|gateway/i) || ctrl.data && ctrl.data.productList.match(/(kes|endpoint|core|advanced|select)/ig)) {\n return productData.getsmb(product);\n }\n if (ctrl.data && ctrl.data.productList.match(/ksos/ig)) {\n return productData.getvsb(product);\n }\n return productData.getb2c(product);\n })).then(function (responses) {\n return responses.map(function (response) {\n return response.data.fields;\n });\n }).catch(handleRejection);\n }\n\n function checkLostdaysNoPricing() {\n var buyblocksOnPage = maxymiser.readComponentData($('buyblock-radio, buyblock-dropdown'));\n\n if (buyblocksOnPage > 0 && buyblocksOnPage.every(function (element) {\n return element.priceList && element.priceList.length === 0;\n })) {\n $state.go('lrc-b2c', {\n 'serial': $rootScope.kaspersky.serialNumber,\n 'lostDaysDisclaimerFullText': ctrl.translations['NO_PRICING_OPTIONS']\n }, { 'location': false, 'inherit': true });\n }\n }\n\n function setRemainingDaysMetaTags() {\n var remainingDaysMetaObj = {\n 'RemainingDaysUntilExpiration': ctrl.verdictData.days_left,\n 'DaysAfterExpiration': ctrl.verdictData.days_expired\n };\n\n if (ctrl.verdictData.days_left >= 0 || ctrl.verdictData.days_expired >= 0) seoHelperService.setMeta(remainingDaysMetaObj);\n }\n\n function overridePageTitle() {\n if (ctrl.data.overridePageTitle) windowHelperService.setWindowTitle(ctrl.data.overridePageTitle);\n }\n\n function handleVerdictData(overrideVerdict) {\n //Tracking\n var verdictType = 'Home > Home Products > LRC > Verdict > ';\n\n if ($location.path() === '/renewal-center/vsb') {\n verdictType = 'Home > Small Business Security > LRC > Verdict > ';\n }\n\n $timeout(function () {\n $rootScope.kaspersky.pageName = verdictType + ctrl.verdict + (overrideVerdict && overrideVerdict.postfix ? '_' + overrideVerdict.postfix : '');\n\n if (ctrl.verdict === 'kis') {\n $rootScope.kaspersky.pageTest = 0;\n\n if (overrideVerdict && overrideVerdict.test) {\n $rootScope.kaspersky.pageTest = overrideVerdict.test;\n }\n }\n }, 300);\n\n $rootScope.kaspersky.pageType = 'lrc';\n $rootScope.kaspersky.verdictSite = ctrl.verdictData.verdict.search(/(^.+_T$)|(KSC_Free_(Pers|Fam)_Free)/i) === -1 ? 'LRC' : 'ATT';\n $rootScope.kaspersky.verdictDevices = ctrl.verdictData.license_count;\n $rootScope.kaspersky.verdictTerm = Math.floor(ctrl.verdictData.license_days / 365);\n $rootScope.kaspersky.verdictLicenseStatus = ctrl.verdictData.expired;\n $rootScope.kaspersky.verdictLicenseProduct = ctrl.verdictData.verdict;\n $rootScope.kaspersky.verdictPartNumber = ctrl.verdictData.sales_tracking && ctrl.verdictData.sales_tracking.pnumber;\n $rootScope.kaspersky.verdictChannel = ctrl.verdictData.sales_tracking && ctrl.verdictData.sales_tracking.channel;\n $rootScope.kaspersky.verdictPartner = ctrl.verdictData.partnerName;\n $rootScope.kaspersky.verdictPartnerId = ctrl.verdictData.partnerid;\n $rootScope.kaspersky.verdictLicenseType = ctrl.verdictData.sales_tracking && ctrl.verdictData.sales_tracking.license_type;\n $rootScope.kaspersky.serialNumber = ctrl.verdictData.verdictSerial;\n $rootScope.kaspersky.regKey = ctrl.verdictData.sales_tracking.reg_key;\n $rootScope.kaspersky.verdictExpDate = ctrl.verdictData.expiration_date;\n $rootScope.kaspersky.verdictExpDateTime = ctrl.verdictData['expiration_datetime'];\n $rootScope.kaspersky.verdictDaysRemaining = ctrl.verdictData.days_left;\n $rootScope.kaspersky.verdictDaysExpired = ctrl.verdictData.days_expired;\n $rootScope.kaspersky.providerToken = ctrl.verdictData.provider && ctrl.verdictData.provider['one_click_token'];\n $rootScope.kaspersky.trackingId = ctrl.verdictData.trackingId;\n\n if (currencyManager.pl2Enabled()) {\n $rootScope.kaspersky.verdictLicenseType = ctrl.verdictData['sales_tracking'] && ctrl.verdictData['sales_tracking']['part_Number_LicenseType'];\n $rootScope.kaspersky.verdictMinPack = ctrl.verdictData['lost_days'] && ctrl.verdictData['lost_days']['lost_days_MR'];\n }\n\n setRemainingDaysMetaTags();\n\n tracking.trackPageView(verdictType + ctrl.verdict);\n\n addVerdictString();\n }\n\n function setVerdictLicenseStatus() {\n return $rootScope.kaspersky.verdictLicenseStatus ? 'ACTIVE' : 'EXPIRED';\n }\n\n function addVerdictString() {\n var verdictRegion = $rootScope.verdictRegion || appHelperService.getISOLocale().id,\n verdictLicenseProduct = $rootScope.kaspersky.verdictLicenseProduct.split('_')[0] || '[NULL]',\n verdictPartner = $rootScope.verdictPartner || '[NULL]',\n licenseStatus = setVerdictLicenseStatus(),\n metaObj = {\n 'verdictString': verdictRegion + '_' + $rootScope.kaspersky.verdictSite + '_' + verdictPartner + '_' + $rootScope.kaspersky.verdictChannel + '_' + verdictLicenseProduct + '_' + $rootScope.kaspersky.verdictDevices + '_' + $rootScope.kaspersky.verdictTerm + '_' + licenseStatus.toUpperCase()\n };\n\n seoHelperService.setMeta(metaObj);\n }\n\n /**\n * Calculates difference between expiration date and current user time, to determine which message to display\n * Server time is UTC but converted to user's time zone (GMT) and compared to current user's GMT time\n * 0 day is if expiration_time - current_time < 1 (handled using Math.floor())\n * Shows banners and text according to rules described in the code\n * @param longDesignLogic { boolean }\n * @returns {string|*|boolean}\n */\n function daysRemainingBanner(longDesignLogic) {\n if (ctrl.verdictData['expiration_datetime'] === null && !longDesignLogic) return false; // Non-activated licenses are \"null\"\n\n if (longDesignLogic) {\n DAYS_LEFT_THRESHOLD = Number.MAX_VALUE;\n }\n\n var verdictExpirationDatetime = ctrl.verdictData['expiration_datetime'] && new Date(ctrl.verdictData['expiration_datetime']).getTime();\n var verdictExpirationDate = new Date(ctrl.verdictData['expiration_date']).getTime();\n var expires = verdictExpirationDatetime !== null ? verdictExpirationDatetime : verdictExpirationDate,\n today = new Date().getTime(),\n daysLeftDiff = Math.floor((expires - today) / (1000 * 60 * 60 * 24)),\n daysLeft = longDesignLogic ? Math.abs(daysLeftDiff) : daysLeftDiff > 0 ? daysLeftDiff : 0,\n daysExpired = expires < today,\n isExcludedVerdict = longDesignLogic ? false : ctrl.verdict.match(/_b|_t|email+/ig),\n isAboveThreshold = daysLeft && daysLeft > DAYS_LEFT_THRESHOLD,\n isDaysRemainingBanner = daysLeft && daysLeft <= DAYS_LEFT_THRESHOLD && !isExcludedVerdict && !daysExpired,\n isExpiredBanner = daysExpired && !isExcludedVerdict,\n isExpirationToday = daysLeft === 0 && !daysExpired && !isExcludedVerdict;\n\n if (isAboveThreshold) return false;\n if (isDaysRemainingBanner) {\n ctrl.daysRemainingText = daysLeft + ' ' + (daysLeft === 1 ? ctrl.data.daysLeftText.replace('days', 'day') : ctrl.data.daysLeftText);\n ctrl.daysRemainingValue = daysLeft;\n ctrl.daysRemainingNote = ctrl.data.daysLeftNote;\n } else if (isExpiredBanner) {\n ctrl.daysRemainingText = ctrl.data.expiredText || ctrl.translations.expiredText;\n ctrl.daysExpiredValue = daysLeft;\n ctrl.daysRemainingNote = ctrl.data.expiredNote || ctrl.translations.expiredNote;\n } else if (isExpirationToday) {\n ctrl.daysRemainingText = ctrl.data.expiresTodayText || ctrl.translations.expiresTodayText;\n ctrl.daysRemainingValue = daysLeft;\n ctrl.daysRemainingNote = ctrl.data.expiredNote || ctrl.translations.expiredNote;\n }\n\n return ctrl.daysRemainingText && (isDaysRemainingBanner || isExpiredBanner || isExpirationToday);\n }\n // fetch data specific for KSC pages\n function fetchSpecificData() {\n if (ctrl.data.productList.match(/(ksc|ksc-personal|ksc-family|ksec)/ig) && !ctrl.verdict.match(/(_T)/ig)) {\n // if kscloud product\n var productFolder = '';\n ctrl.data.productList.split(',').forEach(function (item) {\n if (item === 'ksc-personal' || item === 'ksc-family' || item === 'ksec') {\n return productFolder = item;\n }\n });\n\n directiveData.get('/home-security/products/' + productFolder + '/product-features.json').then(function (response) {\n ctrl.features = response.data.fields;\n }, handleRejection);\n\n directiveData.get('/home-security/products/kscloud/kscloud.json').then(function (response) {\n ctrl.kscloud = response.data.fields;\n }, handleRejection);\n }\n\n if (ctrl.verdict.match(/_uni/ig)) {\n // if uninstall verdict => show 1 up uni page\n directiveData.get('/lrc/verdicts/' + ctrl.folder[0] + '/' + ctrl.verdict + '-features.json').then(function (response) {\n ctrl.features = response.data.fields;\n }, handleRejection);\n }\n }\n\n // rm when all verdicts will be switched to template\n function setTemplateType() {\n ctrl.type = ctrl.data.productList.split(',').length;\n if (ctrl.type === 1 && isB2B(ctrl.data.productList)) ctrl.type = 'vsb'; // if b2b product\n\n // if kscloud product\n if (ctrl.data.productList.match(/(ksc|ksc-personal|ksc-family)/ig) && !ctrl.verdict.match(/(_T)/ig)) {\n ctrl.type += '-ksc';\n }\n if (ctrl.verdict === 'ksc_hard') ctrl.type += '-ksc-hard'; // if kscloud hard upsell verdict\n if (ctrl.verdict === 'ksc_exp') ctrl.type += '-edu'; // if kscloud edu verdict => show ksc experience page\n\n // if uninstall verdict => show 1 up uni page\n if (ctrl.verdict.match(/_uni/ig)) {\n ctrl.type += '-uni';\n }\n\n // if KFA\n if (ctrl.verdict.match(/kfa/ig)) ctrl.type += '-kfa';\n\n ctrl.template = 'v' + ctrl.type + '-up';\n }\n\n /**\n * The function sets a class to body tag according to the lrc template used\n * and removes it when lrc-verdict component is destroyed\n * @param templateName { string } Name of the template to be used as global class\n */\n function setPageClass(templateName) {\n $document.find('body').addClass('page-class-' + templateName);\n $scope.$on('$destroy', function () {\n $document.find('body').removeClass('page-class-' + templateName);\n });\n }\n\n function handleVerdict(verdict) {\n if (ctrl.folder) {\n directiveData.get(verdict || '/lrc/verdicts/' + ctrl.folder[0] + '/' + ctrl.verdict + '.json').then(function (response) {\n ctrl.data = response.data.fields;\n if (ctrl.locale === 'ru-ru' && ctrl.verdictData) {\n ctrl.data.daysLeftText = ctrl.data.daysLeftText.replace('дней', parseRUDays(ctrl.verdictData.days_left));\n }\n\n if (ctrl.data.productList) {\n if (isB2B(ctrl.data.productList)) ctrl.isB2B = true;\n }\n\n fetchSpecificData();\n\n overridePageTitle();\n\n if (ctrl.data.lrcTemplate && ctrl.data.lrcTemplate !== 'false') {\n ctrl.template = ctrl.data.lrcTemplate;\n setPageClass(ctrl.template);\n } else setTemplateType();\n\n if (ctrl.template === 'v-long') {\n ctrl.showDaysLeft = daysRemainingBanner(true);\n } else {\n ctrl.showDaysLeft = daysRemainingBanner();\n }\n\n productsFetcher(ctrl.data.productList.split(',')).then(function (res) {\n ctrl.products = res;\n\n if (ctrl.products[1]) ctrl.productBg = ctrl.products[1].lrcBg || ctrl.products[1].bg;\n\n $rootScope.kaspersky.verdictProduct = ctrl.products[0].title;\n $rootScope.kaspersky.productName = ctrl.products[0].title;\n });\n\n if (ctrl.data.comparisonTableLink) {\n directiveData.get(ctrl.data.comparisonTableLink).then(function (response) {\n if (response.data.schemaName === 'Custom HTML') {\n ctrl.data.comparisonTable = response.data.fields.Body;\n } else {\n //make it possible to insert standalone comparison tables\n ctrl.data.comparisonTable = false;\n }\n }, handleRejection);\n }\n\n if (ctrl.data.upgradeDetails) {\n directiveData.get(ctrl.data.upgradeDetails).then(function (response) {\n ctrl.data.promoBlock = response.data.fields.text;\n }, handleRejection);\n }\n\n if (ctrl.data.quickmenuButtons) {\n ctrl.data.quickmenuButtons.forEach(function (item, index) {\n if (item['product'] && item['product'].match(/\\.json/)) {\n return $http.get(item['product'], { 'cache': true }).then(function (response) {\n return ctrl.data.quickmenuButtons[index].product = response.data.fields;\n }, handleRejection);\n }\n });\n }\n\n if (ctrl.data.sharedVerdictData) {\n directiveData.get(ctrl.data.sharedVerdictData).then(function (response) {\n if (response.data.fields.components) {\n ctrl.sharedVerdictData = response.data.fields.components;\n } else {\n ctrl.sharedVerdictData = response.data.fields;\n }\n }, handleRejection);\n }\n\n // enable the scroll nav if data exists\n\n if (ctrl.data.navScrollItems) {\n $rootScope.$emit('scrollNav', ctrl.data.navScrollItems);\n }\n }, function (rejection) {\n errorService.warn('Verdict is not available', rejection);\n });\n } else {\n $state.go('lrc-b2c', {}, {\n 'location': false,\n 'inherit': true\n });\n }\n }\n\n ctrl.scrollTo = function (id, $event) {\n $event.preventDefault();\n $event.stopPropagation();\n\n $document[0].getElementById(id).scrollIntoView();\n };\n\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n\n var initScriptsOnInclude = $rootScope.$on('$includeContentLoaded', function () {\n $($element).find('.image-link').magnificPopup({\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n\n $timeout(function () {\n var mobileDefault = void 0;\n\n // Check if current page has comparison charts on it\n if ($('.comparison-chart').length) {\n // Loop through each comparison chart and set the default column\n mobileDefault = $('.comparison-chart').data('comparison-default');\n $('.comparison-chart .' + mobileDefault).addClass('currently-active');\n }\n });\n\n $('.comparison-nav li a').on('click', function (e) {\n e.preventDefault();\n var $this = $(this),\n\n // Get navigation direction\n direction = $this.data('comparison-nav-direction'),\n\n // Get chart ID from the data attribute\n chartID = $this.closest('.comparison-nav').data('comparison-chart'),\n\n // Get comparison chart using that ID\n $comparisonChart = $('.comparison-chart[data-comparison-chart=\"' + chartID + '\"]'),\n\n // Get comparison chart mobile nav\n $comparisonChartNav = $('.comparison-nav[data-comparison-chart=\"' + chartID + '\"]'),\n\n // Get current column\n $currentColumn = $comparisonChart.find('.row-header .column-product.currently-active'),\n currentTitle = $currentColumn.find('h2.product-title a').clone(),\n currentID = parseInt($currentColumn.data('column')),\n nextID = parseInt(currentID + 1),\n prevID = parseInt(currentID - 1),\n nextNavID = parseInt(currentID + 2),\n prevNavID = parseInt(currentID - 2);\n\n // Remove featured style from the comparison chart mobile nav\n $comparisonChartNav.find('li a.feat').removeClass('feat');\n $comparisonChart.find('.row-header .column-product.column-' + ($scope.$ctrl.data.length + 1) + ' h2.product-title a').addClass('feat');\n\n // Check direction and if prev/next column exists\n if (direction === 'prev' && $comparisonChart.find('.column-product.column-' + prevID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + prevID).addClass('currently-active');\n var newPrevTitle = $comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a').clone();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' .feat').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-prev a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' .feat').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-next a').addClass('feat');\n }\n\n $comparisonChartNav.find('li.nav-prev a').html(newPrevTitle.children());\n $comparisonChartNav.find('li.nav-next a').html(currentTitle.children());\n } else if (direction === 'next' && $comparisonChart.find('.column-product.column-' + nextID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + nextID).addClass('currently-active');\n var newNextTitle = $comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a').clone();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' .feat').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-next a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' .feat').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-prev a').addClass('feat');\n }\n $comparisonChartNav.find('li.nav-next a').html(newNextTitle.children());\n $comparisonChartNav.find('li.nav-prev a').html(currentTitle.children());\n }\n });\n\n initScriptsOnInclude();\n });\n\n ctrl.bbData = { 'top': {}, 'bottom': {} };\n\n ctrl.setBuyblockValueByProduct = function (product, term, pack, autorenew) {\n ctrl.bbData[product] = {\n 'term': term,\n 'pack': pack,\n 'autorenew': autorenew\n };\n };\n\n function checkEStoreAvailability(partnerData) {\n priceData.estore().then(function (response) {\n\n if (!response.data.length) return;\n if (!ctrl.verdictData.eStoreProvider) {\n ctrl.verdictData.eStoreProvider = partnerData && partnerData.label;\n } else if (response.data.indexOf(ctrl.verdictData.eStoreProvider) === -1) {\n ctrl.verdictData.eStoreProvider = '';\n }\n });\n }\n\n function isB2B(product) {\n return product.match(/(kes|endpoint|cloud|core|advanced|select|ksos|365|server|mobile|systems|gateway)/ig);\n }\n\n function getBuyblockSavings(selectedOption, product) {\n ctrl.formattedHeadlineSavings = selectedOption.price_striked && ctrl.data.headlineSavingsCalcType && ctrl.data.headlineSavingsCalcType !== 'none' ? buyblockService.getSavings('rate', selectedOption, product, {}, ctrl.data.headlineSavings, ctrl.data.headlineSavingsCalcType) : '';\n\n if (selectedOption.price_striked && ctrl.data.savingsBannerCalcType && ctrl.data.savingsBannerCalcType !== 'none') {\n ctrl.formattedPromoSavings = buyblockService.getSavings('rate', selectedOption, product, {}, ctrl.data.buyblockPromo, ctrl.data.savingsBannerCalcType);\n } else if (ctrl.data.savingsBannerCalcType === 'none') {\n ctrl.formattedPromoSavings = '';\n } else if (selectedOption.price_striked || !ctrl.data.savingsBannerCalcType) {\n ctrl.formattedPromoSavings = ctrl.data.buyblockPromo;\n } else if (!selectedOption.price_striked) {\n ctrl.formattedPromoSavings = '';\n }\n // Detect at least one discount and apply a class (in template) to fix height of the element in order to avoid page jumps\n if (!ctrl.displayPageSavings && ctrl.formattedHeadlineSavings) ctrl.displayPageSavings = true;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.malwareStats').component('malwareStats', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/malware-stats/templates/malware-stats.html',\n 'controller': 'sharedGetByNameController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.marketoForm').component('marketoForm', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/marketo-form/templates/marketo-form.template.html',\n 'controller': 'marketoFormController',\n 'bindings': {\n 'appId': '@',\n 'munchkinId': '@',\n 'formId': '@',\n 'fieldCollection': '@',\n 'marketoTemplate': '@'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n marketoFormController.$inject = [\"$window\", \"marketoFormService\"];\n angular.module('kappGlobal.marketoForm').controller('marketoFormController', marketoFormController);\n\n function marketoFormController($window, marketoFormService) {\n var ctrl = this;\n var resourcesLoader = void 0;\n\n function loadPrefill() {\n var DTO = new $window.SimpleDTO({\n 'domain': 'kaspersky.com',\n 'dataSrc': ctrl.marketoTemplate,\n 'debug': true,\n 'mode': 'receive',\n 'cb': function cb() {\n var mktoFields = DTO.getGlobal()[ctrl.fieldCollection];\n\n DTO.cleanup();\n\n $window.MktoForms2.whenReady(function (form) {\n form.setValuesCoerced(mktoFields);\n });\n }\n });\n }\n\n function loadForm() {\n ctrl.showForm = true;\n\n $window.MktoForms2.loadForm(marketoFormService.getMarketoHost(ctrl.appId), ctrl.munchkinId, +ctrl.formId);\n }\n\n ctrl.$onInit = function () {\n resourcesLoader = marketoFormService.loadResurses(ctrl.appId);\n\n resourcesLoader.promise.then(loadForm).then(loadPrefill);\n };\n\n ctrl.$onDestroy = function () {\n resourcesLoader.reject();\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.mobileNav').component('mobileNav', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/mobile-nav/templates/mobile-nav.template.html',\n 'controller': 'mobileNavController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n mobileNavController.$inject = [\"$rootScope\", \"$http\", \"$window\", \"directiveData\", \"currencyManager\", \"ENV\", \"$scope\", \"$timeout\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.mobileNav').controller('mobileNavController', mobileNavController);\n\n function mobileNavController($rootScope, $http, $window, directiveData, currencyManager, ENV, $scope, $timeout, $element, errorService) {\n var ctrl = this,\n hasRun = void 0,\n innerHasRun = {};\n\n ctrl.data = {};\n ctrl.currencies = getCurrencies();\n ctrl.openCurrencyMenu = false;\n ctrl.showCurrencyMenu = ctrl.showCurrencyMenu || true;\n ctrl.showCurrencySelector = ctrl.showCurrencySelector || false;\n ctrl.backBtnText = '';\n ctrl.setCurrency = setCurrency;\n ctrl.setupMobileNavigation = setupMobileNavigation;\n ctrl.$onInit = activate;\n ctrl.getInnerItems = getInnerItems;\n\n function activate() {\n setupMobileNavigation();\n }\n\n function getData() {\n getLocalizedText();\n return $http.get('/content/' + ENV.locale + '/site-header/mobile-nav.json', { 'cache': true }).then(function (response) {\n ctrl.data = response.data.fields;\n if (ctrl.data) ctrl.backBtnText = ctrl.data.nav_ui_back_btn;\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getInnerItems(item) {\n if (item && item.nav_panel_component && angular.isString(item.nav_panel_component) && item.nav_panel_component.match(/\\.json/) && !innerHasRun[item.nav_panel_component]) {\n innerHasRun[item.nav_panel_component] = true;\n\n return $http.get(item.nav_panel_component, { 'cache': true }).then(function (response) {\n item.nav_panel_component = response.data.fields;\n\n ctrl.innerMenu = item.nav_panel_component.mainNavItem.filter(function (obj) {\n return angular.isDefined(obj.megaMenuItem) && obj.megaMenuItem.match(/\\.json/);\n });\n\n ctrl.innerMenu.forEach(function (subItem) {\n return $http.get(subItem.megaMenuItem, { 'cache': true }).then(function (response) {\n subItem.megaMenuItem = response.data.fields;\n subItem.megaMenuItem.product.forEach(function (product, idx2) {\n return $http.get(product, { 'cache': true }).then(function (response) {\n return subItem.megaMenuItem.product[idx2] = response.data.fields;\n }, handleRejection);\n });\n\n if (subItem.megaMenuItem.megaMenuGroups) {\n subItem.megaMenuItem.megaMenuGroups.forEach(function (menuGroups, idx3) {\n subItem.megaMenuItem.megaMenuGroups[idx3].groupProduct.forEach(function (grpProduct, idx4) {\n if (grpProduct.match(/\\.json/)) {\n return $http.get(grpProduct, { 'cache': true }).then(function (response) {\n return subItem.megaMenuItem.megaMenuGroups[idx3].groupProduct[idx4] = response.data.fields;\n }, handleRejection);\n }\n });\n });\n }\n }, handleRejection);\n });\n }, handleRejection);\n }\n }\n\n function getLocalizedText() {\n return directiveData.getLocal('buyblock/buyblock-texts', { 'cache': true }).then(function (response) {\n ctrl.localization = response.data.fields;\n }, handleRejection);\n }\n\n function getCurrencies() {\n ctrl.currencies = currencyManager.getCurrencies();\n ctrl.currentCurrency = currencyManager.getCurrentCurrencyFromCache() || ctrl.currencies[0];\n return ctrl.currencies;\n }\n\n function setCurrency(item) {\n ctrl.currentCurrency = item;\n return currencyManager.setCurrency(item);\n }\n\n var buyblockReady = $rootScope.$on('buyBlockReady', function () {\n ctrl.showCurrencySelector = ctrl.currencies.length > 1;\n });\n\n $scope.$on('$destroy', function () {\n buyblockReady();\n // When element is destroyed we need to clean up a class on html tag\n angular.element($window.document.querySelector('html')).removeClass('mobile-navigation-opened');\n $($element).parent().find('.menu-toggle.open').removeClass('open');\n $($window).off('scroll.home');\n });\n\n function setupMobileNavigation() {\n var mobileMenuWrapper = angular.element($window.document.querySelector('.mobile-menu-wrapper')),\n htmlTag = angular.element($window.document.querySelector('html'));\n\n $('a.menu-toggle').on('click.mobileNav', function (e) {\n e.preventDefault();\n if (!hasRun) {\n getData();\n hasRun = true;\n }\n $(this).toggleClass('open');\n htmlTag.toggleClass('mobile-navigation-opened');\n mobileMenuWrapper.toggleClass('show');\n });\n\n $element.on('click', 'ul.mobile-nav li.parent > a', function (e) {\n var $this = $(this),\n parentTitle = $this.parent().attr('data-parent'),\n parentIcon = $this.parent().attr('data-icon'),\n parentURL = $this.parent().attr('data-url'),\n $subMenu = $this.siblings('ul.submenu'),\n hasIcon = void 0;\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n if (!$subMenu.hasClass('generated')) {\n hasIcon = '';\n if (parentIcon) hasIcon = ' has-icon';\n\n if (parentURL) {\n $this.siblings('ul.submenu').prepend('
  • ' + ctrl.backBtnText + '
  • ' + parentTitle + '
  • ');\n } else if (parentTitle) {\n $this.siblings('ul.submenu').prepend('
  • ' + ctrl.backBtnText + '
  • ' + parentTitle + '
  • ');\n } else {\n $this.siblings('ul.submenu').prepend('
  • ' + ctrl.backBtnText + '
  • ');\n }\n }\n\n $this.siblings('ul.submenu').addClass('show generated');\n $this.closest('ul.submenu').addClass('push-back');\n });\n\n $element.on('click', 'li.back > a', function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n $(this).closest('ul.submenu').removeClass('show');\n $(this).closest('ul.submenu.push-back').removeClass('push-back');\n });\n\n /*\n * Set a listener for all clicks on anchors within the element so that\n * we can close mobile navigation and control .menu-toggle icon.\n * Requires event propogation to be switched off on all submenus (which are anchors as well)\n * */\n $element.on('click', 'a', function () {\n angular.element($window.document.querySelector('html')).removeClass('mobile-navigation-opened');\n angular.element($window.document).find('.mobile-menu-wrapper').removeClass('show');\n $($element).parent().find('.menu-toggle.open').removeClass('open');\n });\n\n var windowResize = angular.element($window),\n windowResizeThrottle = void 0;\n\n windowResize.on('resize.mobileNav', function () {\n clearTimeout(windowResizeThrottle);\n windowResizeThrottle = $timeout(function () {\n if ($window.innerWidth >= 769 && htmlTag.hasClass('mobile-navigation-opened')) {\n $('a.menu-toggle').trigger('click');\n }\n }, 200);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.nanoBanner').component('nanoBanner', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'nanoBannerController',\n 'templateUrl': '/resources/template/html/modules/_shared/components/nano-banner/templates/nano-banner.template.html'\n });\n})();\n'use strict';\n\n(function () {\n nanoBannerController.$inject = [\"directiveData\", \"errorService\", \"windowHelperService\"];\n angular.module('kappGlobal.nanoBanner').controller('nanoBannerController', nanoBannerController);\n\n function nanoBannerController(directiveData, errorService, windowHelperService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'nano-banner').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.newsLetterOptIn').component('newsLetterOptIn', {\n 'bindings': {\n 'resource': '@',\n 'onDataLoaded': '&'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/news-letter-opt-in/templates/news-letter-opt-in.html',\n 'controller': 'newsLetterOptInController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n newsLetterOptInController.$inject = [\"newsLetterOptInService\", \"errorService\"];\n angular.module('kappGlobal.newsLetterOptIn').controller('newsLetterOptInController', newsLetterOptInController);\n\n function newsLetterOptInController(newsLetterOptInService, errorService) {\n var ctrl = this;\n ctrl.optedInComplete = false;\n ctrl.fieldIsValid = true;\n ctrl.enableComponent = true;\n ctrl.submitForm = submitForm;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return newsLetterOptInService.getData().then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.enableComponent = isEnabled(ctrl);\n ctrl.onDataLoaded({\n 'data': ctrl.data,\n 'componentEnabled': ctrl.enableComponent\n });\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function submitForm(form) {\n if (form.$submitted && form.$invalid || !ctrl.email.validateEmail()) {\n ctrl.fieldIsValid = false;\n ctrl.email = '';\n ctrl.data.inputPlaceHolderText = ctrl.data.errorMessageText;\n return;\n }\n return newsLetterOptInService.submitForm(ctrl.email).then(function () {\n ctrl.optedInComplete = true;\n }, handleRejection);\n }\n\n function isEnabled(ctrl) {\n if (angular.isUndefined(ctrl.data)) return false;\n var enableComponent = ctrl.data['enableComponent'];\n return enableComponent && enableComponent.length > 0;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n newsLetterOptInService.$inject = [\"$http\", \"ENV\"];\n angular.module('kappGlobal.newsLetterOptIn').factory('newsLetterOptInService', newsLetterOptInService);\n\n function newsLetterOptInService($http, ENV) {\n return {\n 'getData': getData,\n 'submitForm': submitForm\n };\n\n function getData() {\n return $http.get('/content/' + ENV.locale + '/home-security/news-letter-opt-in.json', { 'cache': true });\n }\n\n function submitForm(email) {\n return $http.post(getLocaleUrl(email));\n }\n\n function getLocaleUrl(email) {\n var envLocale = ENV.locale.toLowerCase(),\n isArabicEnglish = envLocale === 'en-ae',\n locale = isArabicEnglish ? envLocale : envLocale.split('-')[1],\n url = '';\n switch (locale) {\n case 'global':\n url = constructTreUrl('780400033B882D61', 'fdc-gcTrj6k3_hxVsQ4D9b__UD7FccOamf1sNogyDNHRNhRVW0PorKWbewDMUX5s/ErocOmL9732ckHzumMNTaw', email, 'en_Global');\n break;\n case 'us':\n url = constructTreUrl('2AEBC020000C2EDE', 'FA7nTt85nq56Vwh7pdgIA_lMfDELGn9gHwBBo6cOzLsPH_7pCsbnISBAA7tG2H4o/TImyzLu8tvgKR1j7kHsUKQ', email, 'en_US');\n break;\n case 'gb':\n url = constructTreUrl('44516178040000B9', '5MogkJtmuUTTydpjh5YrzhyN8v44N7o25lBK0aXmVTdDM3eA1FPErDoXoXLbQVDN/_vbfLVw14vPo-DO_Ue8BVw', email, 'en_GB');\n break;\n case 'ie':\n url = constructTreUrl('44516178040000B9', '5MogkJtmuUTTydpjh5YrzhyN8v44N7o25lBK0aXmVTdDM3eA1FPErDoXoXLbQVDN/_vbfLVw14vPo-DO_Ue8BVw', email, 'en_GB');\n break;\n case 'au':\n url = constructP8Url('AC2F0080007EA98C', '14xYXmD7amAdedoEAwCadznCBfouX92TY66h99goXAQRRu9EiAURX7FF2-lfwvw7/V7_BhRO71A5kz1iDvBZU2A', email, 'en_AU');\n break;\n case 'nz':\n url = constructP8Url('AC2F0080007EA98C', '14xYXmD7amAdedoEAwCadznCBfouX92TY66h99goXAQRRu9EiAURX7FF2-lfwvw7/V7_BhRO71A5kz1iDvBZU2A', email, 'en_AU');\n break;\n case 'in':\n url = constructP9Url('8000448D0E2C2F00', '3YdbwyBvqBVd5fJ5mJYvima0yO8Drb6v09E7sAiDixWFqCgSUukecu0lLqH4Jbvh/qf5C_6YyrgrwzcEoVqsVAg', email, 'en_IN');\n break;\n case 'ae':\n url = constructP8Url('80003CD312AC2F80', 'EAvoTP3HMGu5e5fMijvvxLpBez-AvBO1uAO03TSP9p1t4NS8m1B9gbxMO2-RZJgV/mm0HB4RPL15PeEzC0Jxjvg', email, 'ar_AE');\n break;\n case 'en-ae':\n url = constructP8Url('40001729D4E8D780', 'UCvJiEZdG7OvaqTww-ZZ8RevTseZ-7OlKojAjcOE-zCzcgaieSJ9IqNcWZsFxZ6v/H7q55uNQMRb5Aq9zAMscBQ', email, 'en_AE');\n break;\n case 'es':\n url = constructP8Url('2C2F00800058D598', 'rqA84m1WnPEPNCdneyk_0umilFcl7AbY2MIOVRyLixvHKaBND-XthC2wnb3T0-Qk/Vk1rivWcC-qJwlX4kqDO3w', email, 'es_ES');\n break;\n case 'br':\n url = constructP8Url('2C2F00800058D598', 'rqA84m1WnPEPNCdneyk_0umilFcl7AbY2MIOVRyLixvHKaBND-XthC2wnb3T0-Qk/Vk1rivWcC-qJwlX4kqDO3w', email, 'pt_BR');\n break;\n case 'fr':\n url = constructP8Url('E01000000732E585', 'f7Kl9J4aJ_iBZjsNoRLTmSGpV5jD2VZhlOq3iEamrzrhyU2yDcdRKZC_Y7mNgur-/KV0itLyVbc_VJ8vcyLAIjQ', email, 'fr_FR');\n break;\n case 'it':\n url = constructP8Url('41E66B0BC020041E', 'Yj9zfqjQuP-oezav8ODulooprlsnF384aPuA6BuhqduhI-4cHNgaFZol_Scqk0nv/GI4XjXV8Nmx_yKLotkF4qA', email, 'it_IT');\n break;\n case 'de':\n url = constructTreUrl('1AAC2F0080000A4A', 'PUzO3oTxzn1b24JSdAdcNlVNdYsNY7YYUtbGrYAPQsZ4g1gaK3QfxwIhfJkcNYw1/TRHLsk6_yw9Tm15ya1H5VQ', email, 'de_DE');\n break;\n case 'cn':\n url = constructP8Url('3197D09617804031', 'gj6hEgHFcz_nNEwW7TFAPG6Pmfp_NGUc7peg63FIyLDpykAWxAhfR0a1qnpYjU5U/xYDwageJipmO1tIupzJAxQ', email, 'zh_CN');\n break;\n case 'ru':\n url = constructP8Url('2C2F00800007F922', '3x6ZYBMx25Voa5LRbupJoy-5HRXxQ1ytOI5SGrGF0H_p7xc48nrjutRyYmmATHJT/fexKE90kGqu_7j-fADsuNQ', email, 'ru_RU');\n break;\n case 'jp':\n url = constructP8Url('12AFD2161780412A', 'buqmlbpa2KSOrPpX7UPMgcyt9LRbKWsvHvSgQsb2VZa59TKnTA_WZXz04ImeVinA/OlS1FKc_yOtaDcdW0HHj5Q', email, 'ja_JP');\n break;\n case 'za':\n url = constructP8Url('80003CD312AC2F80', 'pRqDrK1tqjOW1G9T77iX4WeA333qCfmQqNUiUjcIZJnBjIslwqKzOr4Ify8arwvt/D3pGwqqAysOj8_XBwN9PRQ', email, 'en_ZA');\n break;\n case 'nl':\n url = constructTreUrl('D7804000055959A7', 'bhvlEBXhdR6GWsT5Z8pUV86nRwMi5oki-X9NLZJJp4aXwg6KYaTdjKXqL70Qp_Mu/YF572UoVXFxklUM3UxwAqg', email, 'nl_NL');\n break;\n case 'tr':\n url = constructP8Url('5627D78040001405', 'GhG2K6oRAHhgxo89n2xuJomdKpwrmYB015xAyfyMTNQiloSKGvNKaNN9K9RzQwL8/pz06Mvubk1r_buipm3z4BA', email, 'tr_TR');\n break;\n case 'mx':\n url = constructTreUrl('58304FAF0080005B', '-fQEORkP21MbpHxr6uQ2RZk1j00hH93Wz7Yxbldn165awVIhvDSlzuXMWOETlvgk/dbEyrXEcK1zAx5kr2FYH3w', email, 'es_MX');\n break;\n case 'se':\n url = constructTreUrl('5E010000410B4F58', 'qltB4yJ0UhNt6sfs1A6wkVcNU_vVOWfX3g934i7-nAHbPXIWOgppqEjR_WEX2Kn7/aFERbCTo7Ed72_fWW3yw1g', email, 'sv_SE');\n break;\n case 'dk':\n url = constructTreUrl('BD42927D78040BD4', '2zvGgsFkSrF0l_-0DL3K7hu5od0WiA-k50jwKiSUrS8-Ln8JeVPQtmBTXnf8pc61/nCwETjOskFbks0omp6UTsQ', email, 'da_DK');\n break;\n case 'no':\n url = constructTreUrl('3EBC020001C38F4F', 'cMW52FuwL_4c6vBKqiXvEZiqBLReu-nly1R5-W6PzdVerrvtkIo4YCMEjh2eTpqv/9N6uetd4SXprxZQG5PGfXQ', email, 'nb_NO');\n break;\n case 'ny':\n case 'fi':\n case 'is':\n url = constructTreUrl('5E010000410B4F58', '3-o5mXMqcnpwqIrbvfwvK-km7QwQRHTJSMYwFLNrpzyG2qtjx0hyO4TX7H5_aiF6/xYvjj_gw2DcD6NDKQj2Smg', email, 'Nordics');\n break;\n }\n return url;\n }\n\n function constructTreUrl(emvTag, emvRef, email, locale) {\n return '//tre.emv3.com/D2UTF8?emv_tag=' + emvTag + '&emv_ref=' + emvRef + '&EMAIL_FIELD=' + email + '&LOCALE_FIELD=' + locale + '&SEGMENT_FIELD=NEWSLETTER&OPT_IN_EMAIL_IND_FIELD=1';\n }\n\n function constructP9Url(emvTag, emvRef, email, locale) {\n return '//p9tre.emv3.com/D2UTF8?emv_tag=' + emvTag + '&emv_ref=' + emvRef + '&EMAIL_FIELD=' + email + '&LOCALE_FIELD=' + locale + '&SEGMENT_FIELD=NEWSLETTER&OPT_IN_EMAIL_IND_FIELD=1';\n }\n\n function constructP8Url(emvTag, emvRef, email, locale) {\n return '//p8tre.emv3.com/D2UTF8?emv_tag=' + emvTag + '&emv_ref=' + emvRef + '&EMAIL_FIELD=' + email + '&LOCALE_FIELD=' + locale + '&SEGMENT_FIELD=NEWSLETTER&OPT_IN_EMAIL_IND_FIELD=1';\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.newsLetterPopup').component('newsLetterPopup', {\n 'bindings': {},\n 'controller': 'newsLetterPopupController',\n 'templateUrl': '/resources/template/html/modules/_shared/components/news-letter-popup/templates/news-letter-popup.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n newsLetterPopupController.$inject = [\"$scope\", \"$rootScope\", \"$q\", \"$element\", \"$timeout\", \"$window\", \"$document\", \"marketoHelperService\", \"newsLetterConfigService\", \"sessionStorageService\", \"tracking\"];\n angular.module('kappGlobal.newsLetterPopup').controller('newsLetterPopupController', newsLetterPopupController);\n\n function newsLetterPopupController($scope, $rootScope, $q, $element, $timeout, $window, $document, marketoHelperService, newsLetterConfigService, sessionStorageService, tracking) {\n var ctrl = this,\n storageKey = 'newsletter-popup-status';\n\n ctrl.formData = {};\n ctrl.show = false;\n\n ctrl.$onInit = function () {\n function loadPopupConfigForRoute() {\n newsLetterConfigService.getConfigForCurrentPage().then(ctrl.applyConfig);\n }\n\n $scope.$on('$locationChangeSuccess', function () {\n $element.find('.news-letter-popup form').empty();\n loadPopupConfigForRoute();\n });\n\n loadPopupConfigForRoute();\n };\n\n ctrl.$onDestroy = function () {\n ctrl.clearShowHideHandler();\n };\n\n ctrl.clearShowHideHandler = function () {\n if (ctrl.onWindowScroll) {\n angular.element($window).off('scroll', ctrl.onWindowScroll);\n delete ctrl.onWindowScroll;\n }\n if (ctrl.showHideTimeout) {\n $timeout.cancel(ctrl.showHideTimeout);\n delete ctrl.showHideTimeout;\n }\n };\n\n ctrl.applyConfig = function (config) {\n if (!config) {\n ctrl.show = false;\n return;\n }\n\n ctrl.show = true; // Marketo requires the element to be in the DOM\n ctrl.loaded = false;\n\n ctrl.header = config.header;\n ctrl.footer = config.footer;\n ctrl.formNr = config.formNr;\n ctrl.popupWidth = config.popupWidth;\n\n // because the formId is set in the current function\n // we need to wait for the digest to kick in before calling Marketo\n // as it requires the element with the ID to be in the DOM\n $timeout(function () {\n var loadForm = config.formId && config.formNr ? marketoHelperService.loadMarketo(config.formId, config.formNr, $scope, $element) : $q.resolve();\n\n loadForm.then(function () {\n ctrl.loaded = true;\n }).then(function () {\n return ctrl.evaluatePopupHeight();\n }).then(function () {\n ctrl.setOpenStatus(config.status);\n });\n });\n };\n\n ctrl.evaluatePopupHeight = function () {\n var deferred = $q.defer();\n\n // force the popup to open in a hidden part of the screen\n ctrl.opened = true;\n $element.css({ 'visibility': 'hidden', 'bottom': -100000 });\n\n // give time for rendering\n requestAnimationFrame(function () {\n return requestAnimationFrame(function () {\n // evaluate the height the popup should take at the end of the animation\n ctrl.popupMaxHeight = Math.min($window.innerHeight - 25, $element.find('.news-letter-popup').outerHeight());\n\n // reset the styles and opening status\n $element.css({ 'visibility': '', 'bottom': '' });\n delete ctrl.opened;\n $scope.$apply();\n\n deferred.resolve();\n });\n });\n\n return deferred.promise;\n };\n\n /**\n * \"opened\"/\"closed\" opened/closed on page load\n * \"opened-25%\"/\"closed-25%\" opened/closed after scrolling 25% of the page\n * \"opened-15s\"/\"closed-15s\" opened/closed after 15s\n *\n * @param status\n */\n ctrl.setOpenStatus = function (status) {\n if (!status) return;\n\n if (sessionStorageService.get(storageKey) === 'closed' || status === 'closed') {\n ctrl.opened = false;\n return;\n }\n\n if (status === 'opened' || status === 'closed') {\n setPopupOpenStatus(true, true);\n return;\n }\n\n var split = status.split('-'),\n unit = parseInt(split[1]),\n type = split[1].indexOf('%') !== -1 ? 'scroll' : split[1].indexOf('s') !== -1 ? 'time' : undefined;\n\n if (split[0] === 'closed') {\n // is opened first, will close after scroll\n setPopupOpenStatus(true, true);\n } else {\n ctrl.opened = false;\n }\n\n if (type === 'scroll') {\n if (ctrl.onWindowScroll) return;\n\n ctrl.onWindowScroll = _.throttle(function () {\n var scrolledPastPoint = unit <= ctrl.getWindowScrollPct();\n\n setPopupOpenStatus(split[0] === 'opened' ? scrolledPastPoint : !scrolledPastPoint, true);\n\n $scope.$apply();\n }, 500);\n\n angular.element($window).on('scroll', ctrl.onWindowScroll);\n } else if (type === 'time') {\n ctrl.showHideTimeout = $timeout(function () {\n setPopupOpenStatus(split[0] === 'opened', true);\n }, unit * 1000);\n }\n };\n\n // $window.pageYOffset is for IE compatibility\n ctrl.getWindowScrollPct = function () {\n return 100 / ($document[0].body.scrollHeight / (angular.isDefined($window.scrollY) ? $window.scrollY : $window.pageYOffset));\n };\n\n ctrl.open = function () {\n return setPopupOpenStatus(true);\n };\n\n ctrl.close = function () {\n return setPopupOpenStatus(false);\n };\n\n function setPopupOpenStatus(status, noSave) {\n if (ctrl.opened === status) return;\n\n ctrl.opened = status;\n\n if (status) {\n tracking.trackPageView($rootScope.kaspersky.pageName + ' > Special Offers Opt-in Popup');\n }\n\n if (noSave) return;\n\n ctrl.clearShowHideHandler(); // clear to prevent configured event to trigger after user interaction\n\n if (!status) {\n sessionStorageService.set(storageKey, 'closed');\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n newsLetterConfigService.$inject = [\"ENV\", \"$http\", \"$q\", \"$window\", \"sessionStorageService\"];\n angular.module('kappGlobal.newsLetterPopup').factory('newsLetterConfigService', newsLetterConfigService);\n\n function newsLetterConfigService(ENV, $http, $q, $window, sessionStorageService) {\n var storageKey = 'newsletter-config';\n\n var service = {\n 'getGlobalConfig': function getGlobalConfig() {\n var cachedConfig = sessionStorageService.get(storageKey);\n\n if (cachedConfig) {\n return $q.resolve(cachedConfig);\n }\n\n return $http.get('/content/' + ENV.locale + '/site-general/newsletter-config.json', { 'cache': true }).then(function (response) {\n sessionStorageService.set(storageKey, response.data.fields);\n return response.data.fields;\n }).catch(function () {\n // no global config provided\n // the newsletter popup is disabled on the whole app\n return undefined;\n });\n },\n 'getConfigPathForCurrentPage': function getConfigPathForCurrentPage() {\n return service.getGlobalConfig().then(function (config) {\n if (!config || !config.pathsToConfigMapping) {\n return;\n }\n\n // _.find is for IE compatibility\n var pathToConfigMapping = _.find(config.pathsToConfigMapping, function (d) {\n return $window.location.href.match(d.key) !== null;\n });\n\n return pathToConfigMapping ? pathToConfigMapping.value : undefined;\n });\n },\n 'getConfigForCurrentPage': function getConfigForCurrentPage() {\n return service.getConfigPathForCurrentPage().then(function (configPath) {\n return configPath ? $http.get(configPath, { 'cache': true }).then(function (config) {\n return config.data.fields;\n })\n // resolve even when the config is not there\n .catch(function () {\n return undefined;\n }) : undefined;\n });\n }\n };\n\n return service;\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.notificationBarGeo').component('notificationBarGeo', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/notification-bar-geo/templates/notification-bar-geo.html',\n 'controller': 'notificationBarGeoController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n notificationBarGeoController.$inject = [\"windowHelperService\", \"directiveData\", \"errorService\", \"appHelperService\", \"cookieService\", \"notificationBarGeoService\", \"ENV\", \"ngDialog\", \"tracking\"];\n angular.module('kappGlobal.notificationBarGeo').controller('notificationBarGeoController', notificationBarGeoController);\n\n function notificationBarGeoController(windowHelperService, directiveData, errorService, appHelperService, cookieService, notificationBarGeoService, ENV, ngDialog, tracking) {\n var ctrl = this,\n localeCode = windowHelperService.getIPCountry(),\n urlBlocklList = ['/renewal-center/home', '/downloads', '/downloads/thank-you/antivirus', '/downloads/thank-you/internet-security', '/downloads/thank-you/total-security', '/downloads/thank-you/free-antivirus-download', '/downloads/thank-you/security-scan', '/downloads/thank-you/antivirus-free-trial', '/downloads/thank-you/internet-security-free-trial', '/downloads/thank-you/total-security-free-trial', '/small-business-security/downloads', '/small-business-security/downloads/small-office-security', '/small-business-security/downloads/thank-you/small-office-security-free-trial'],\n isAssertedState = _.includes(urlBlocklList, appHelperService.getLocationPath());\n ctrl.bannerHidden = true;\n ctrl.deprecate = true;\n ctrl.closeNotification = closeNotification;\n ctrl.$onInit = activate;\n /**\n * Check whether to show the geo ip bar or not.\n * If the message should not show, the response will be empty.\n * Also, don't make any further calls if user has already chosen and has cookies\n */\n function activate() {\n var locale = ENV.locale;\n var hasCookie = cookieService.get('ignoreredirects');\n if (isAssertedState || hasCookie || locale.substr(3, 6) !== 'global') return false;\n ctrl.path = windowHelperService.getPathName();\n if (!ctrl.deprecate) {\n return notificationBarGeoService.getXMLRules(ctrl.path).then(function (response) {\n if (!response || response.data && !response.data.length) return;\n initialiseBindings();\n initialise(response.data[0]);\n }).catch(handleRejection);\n }\n }\n\n function initialiseBindings() {\n ctrl.applyOption = applyOption;\n ctrl.regionObj = {};\n }\n\n /**\n * Set binding and get further data.\n * Also set the cookie to switch messages.\n * @param {Object} response Response from promise\n */\n function initialise(response) {\n ctrl.targetUrl = response;\n getRegionConfigData();\n getData();\n }\n\n /**\n * Get the regions to match against IPCountry, and to find its label.\n */\n function getRegionConfigData() {\n return directiveData.get('/site-header/geoip-notification-config.json').then(function (response) {\n if (response && response.data.fields) ctrl.regionsConfig = response.data.fields;\n ctrl.regionObj = notificationBarGeoService.getRegionByCode(localeCode, ctrl.regionsConfig.regions);\n\n // value to interpolate from CMS component\n ctrl.site = ctrl.regionObj.site;\n }).catch(handleRejection);\n }\n\n /**\n * Get copy text for the messages\n */\n function getData() {\n return directiveData.get(ctrl.resource || '/site-header/geoip-notification-bar.json').then(function (response) {\n ctrl.data = response.data.fields;\n cookieService.set('ignoreredirects', true, 7);\n\n if (ctrl.regionObj.lang === 'en-za' || ctrl.regionObj.lang === 'en-tr' || ctrl.regionObj.lang === 'tr-tr') {\n ctrl.overlayEnabled = true;\n callNotificationPopup();\n } else {\n ctrl.bannerHidden = false;\n }\n }).catch(handleRejection);\n }\n\n /**\n * Send error to service\n * @param {object} rejection [description]\n */\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n /**\n * Redirect user and append tracking\n */\n function applyOption($event, path) {\n if ($event) $event.preventDefault();\n cookieService.set('ignoreredirects', false, 7);\n var url = (path || ctrl.targetUrl.host) + ctrl.path;\n return windowHelperService.navigateUserTo('//' + url + '?ignoreredirects=true&utm_source=Internal&utm_medium=Redirect&utm_campaign=IP_Redirect_Pilot&reseller=' + ctrl.regionObj.lang + '_ip-pilot_oth_ona_oth__onl_b2c_kasper_ban_______');\n }\n\n /**\n * Function to call the ngDialog popup\n */\n function callNotificationPopup() {\n ngDialog.open({\n 'template': '/resources/template/html/modules/_shared/components/notification-bar-geo/templates/notification-bar-geo-popup.html',\n 'className': 'ngdialog-plain geo-notification-popup',\n 'data': ctrl,\n 'closeByDocument': false,\n 'showClose': false,\n 'onOpenCallback': function onOpenCallback() {\n tracking.trackPageView('Home > Geo Redirect Suggestion Popup');\n }\n });\n }\n\n /**\n * Function for the ngDialog close button\n */\n function closeNotification($event) {\n if ($event) $event.preventDefault();\n ngDialog.close();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n notificationBarGeoService.$inject = [\"$http\", \"ENV\"];\n angular.module('kappGlobal.notificationBarGeo').factory('notificationBarGeoService', notificationBarGeoService);\n\n function notificationBarGeoService($http, ENV) {\n var config = {\n 'serverUrl': ENV.apiServer,\n 'apiUrl': ENV.apiServer + '/_svc/page/ipinfo'\n };\n\n return {\n 'getRegionByCode': getRegionByCode,\n 'getXMLRules': getXMLRules\n };\n\n function getRegionByCode(code, regions) {\n var regionObj = _.find(regions, function (obj) {\n\n return obj.locales.indexOf(code) > -1;\n });\n if (regionObj && 'name' in regionObj) return regionObj;\n }\n\n function getXMLRules(path) {\n return $http.get(config.apiUrl + '?url=' + path, { 'cache': true });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n breadcrumbController.$inject = [\"$rootScope\"];\n angular.module('kappGlobal.pageHeader').controller('breadcrumbController', breadcrumbController);\n\n function breadcrumbController($rootScope) {\n var ctrl = this;\n ctrl.breadcrumbs = $rootScope.breadcrumbs;\n\n var pageDataReady = $rootScope.$on('pageDataReady', function () {\n ctrl.breadcrumbs = $rootScope.breadcrumbs;\n pageDataReady();\n });\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.pageHeader').component('pageHeader', {\n 'bindings': {\n 'resource': '@',\n 'headerType': '@',\n 'bannerImage': '@',\n 'showBreadcrumb': '@',\n 'noPadding': '@',\n 'product': '<',\n 'resourcesCount': '<',\n 'redesign': '@'\n },\n 'controller': 'pageHeaderController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n if ($attrs.template) template = $attrs.template;\n return '/resources/template/html/modules/_shared/components/page-header/templates/page-header-' + template + '.html';\n }]\n }).component('breadcrumb', {\n 'bindings': {},\n 'template': '

    \\n\\t\\t\\t\\t\\t {{state.title}}\\n\\t\\t\\t\\t

    ',\n 'controller': 'breadcrumbController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n pageHeaderController.$inject = [\"$timeout\", \"$q\", \"$anchorScroll\", \"$location\", \"directiveData\", \"$sce\", \"$http\", \"ENV\", \"$element\", \"windowHelperService\", \"appHelperService\", \"errorService\", \"ngDialog\", \"productData\", \"priceData\", \"geoLocationManager\", \"$rootScope\", \"$scope\", \"$document\", \"$window\"];\n angular.module('kappGlobal.pageHeader').controller('pageHeaderController', pageHeaderController);\n\n function pageHeaderController($timeout, $q, $anchorScroll, $location, directiveData, $sce, $http, ENV, $element, windowHelperService, appHelperService, errorService, ngDialog, productData, priceData, geoLocationManager, $rootScope, $scope, $document, $window) {\n var ctrl = this,\n $dialog = ngDialog,\n $windowElement = angular.element($window),\n windowResizeThrottle = void 0;\n ctrl.data = {};\n ctrl.contentUrl = '';\n ctrl.env = ENV.locale;\n ctrl.videoPopup = videoPopup;\n ctrl.$onInit = activate;\n ctrl.getEltClass = getEltClass;\n ctrl.getBannerButtonClass = getBannerButtonClass;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n ctrl.isTotal = appHelperService.assertStateByName('smb-product-total');\n ctrl.isLRC = appHelperService.assertStateByName('lrc-verdict');\n ctrl.isRTL = appHelperService.isPageDirectionRTL();\n ctrl.subDesc = '';\n\n var currencyChange = $rootScope.$on('currencyChange', handleCurrencyChange);\n\n function activate() {\n getData();\n if (ctrl.env === 'en\\-global') blockProhibitedCountries();\n }\n\n var ngRender = $rootScope.$on('ngRender', function () {\n onToggleTableWrapper();\n ngRender();\n });\n\n function onToggleTableWrapper() {\n var MOBI_DESKTOP_SWITCH_BREAKPOINT = 768;\n\n var isMobile = $window.innerWidth <= MOBI_DESKTOP_SWITCH_BREAKPOINT;\n ctrl.subDesc = isMobile && ctrl.data.mobileDesc ? ctrl.data.mobileDesc : ctrl.data.subDescription;\n }\n\n function onWindowResizeListener() {\n $timeout.cancel(windowResizeThrottle);\n\n windowResizeThrottle = $timeout(onToggleTableWrapper, 200);\n }\n\n function handleScopeDestroyed() {\n currencyChange();\n $windowElement.off('resize', onWindowResizeListener);\n $timeout.cancel(windowResizeThrottle);\n $windowElement = null;\n }\n\n function handleCurrencyChange() {\n if (ctrl.currency === $rootScope.currency || !ctrl.data.productShortName) return;\n ctrl.currency = $rootScope.currency;\n getMinPrice();\n }\n\n $scope.$on('$destroy', handleScopeDestroyed);\n\n function getData() {\n // Get B2C resource center category header path\n\n var b2cResourceCenterCatHeaderState = appHelperService.assertStateByName(['b2c-resource-center.category', 'b2c-resource-center.category-details']);\n\n if (b2cResourceCenterCatHeaderState && !ctrl.resource) ctrl.resource = '/home-security' + $location.path() + '/page-header.json';\n\n // format resource attribute environment path\n\n if (ctrl.resource) ctrl.resource = ctrl.resource.replace(/cur-locale/, ctrl.env);\n\n return directiveData.getByUrl(ctrl.resource || 'page-header').then(function (response) {\n var data = response.data.fields;\n ctrl.data = data;\n ctrl.id = response.data.id;\n ctrl.contentUrl = data.imageUrl ? $sce.trustAsResourceUrl(data.imageUrl) : '';\n\n onToggleTableWrapper();\n $windowElement.on('resize', onWindowResizeListener);\n\n var moreToLoad = [directiveData.getLocal('general-translations').then(function (res) {\n return ctrl.localData = res.data.fields;\n })];\n\n if (data.headerType && data.headerType.indexOf('Buyblock') > -1 && data.moreLink.product) {\n moreToLoad.push(directiveData.getByUrl(data.moreLink.product).then(function (res) {\n return ctrl.productInfo = res.data.fields;\n }));\n }\n\n if (data.surtitle && data.header) {\n var bigText = data.bigText || '';\n data.imageAlt = data.surtitle + ' ' + data.header + ' ' + bigText;\n }\n\n runScript();\n if (ctrl.data.productShortName) getMinPrice();\n\n if (ctrl.data.header === 'Security Cloud') buyblockData();\n\n ctrl.isHeadlineDisplayed = isHeadlineDisplayed();\n ctrl.isOverlayDisplayed = isOverlayDisplayed();\n\n if (data.quickmenuButtons && data.quickmenuButtons.length) data.quickmenuButtons.forEach(function (item, index) {\n if (!item.product || !item.product.match(/\\.json/)) return;\n\n moreToLoad.push($http.get(item.product, { 'cache': true }).then(function (res) {\n return ctrl.data.quickmenuButtons[index].product = res.data.fields;\n }));\n });\n\n return $q.all(moreToLoad);\n }, handleRejection);\n }\n\n function buyblockData() {\n return directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n ctrl.buyblockData = response.data.fields;\n });\n }\n\n function videoPopup(url) {\n var embedSrc = url,\n sources = {\n 'youtube': {\n 'site': 'youtube.com',\n 'id': 'v=',\n 'src': '//www.youtube.com/embed/%id%?autoplay=1&rel=0'\n },\n 'gmaps': {\n 'site': '//maps.google.',\n 'src': '%id%&output=embed'\n }\n };\n\n _.forEach(sources, function (item) {\n if (embedSrc.indexOf(item.site) > -1) {\n if (item.id) {\n if (angular.isString(item.id)) {\n embedSrc = embedSrc.substr(embedSrc.lastIndexOf(item.id) + item.id.length, embedSrc.length);\n }\n }\n embedSrc = item.src.replace('%id%', embedSrc);\n\n return false;\n }\n });\n\n return $dialog.open({\n 'template': '
    ',\n 'className': 'ngdialog-iframe ngdialog-flyout',\n 'showClose': true,\n 'plain': true,\n 'name': 'video-popup'\n });\n }\n\n function runScript() {\n $timeout(function () {\n // About Us Page Header\n\n var $mainMenu = $($element).find('#site-header .main-menu');\n\n $($element).find('.about-us-page-header .cta-scroll').click(function (e) {\n e.preventDefault();\n var $scrollTo = $($(this).attr('href'));\n if ($scrollTo.length) {\n $('html,body').animate({\n 'scrollTop': $scrollTo.offset().top - $mainMenu.outerHeight(true)\n }, 1000);\n }\n });\n $($element).find('.toggle-button').click(function (e) {\n e.preventDefault();\n\n var $this = $(this);\n\n $this.closest('.toggle-container').find('.toggle-content').slideToggle();\n $this.closest('.toggle-container').toggleClass('open');\n });\n $($element).find('.read-less').click(function (e) {\n e.preventDefault();\n\n $location.hash('smb-more-description-id');\n $anchorScroll();\n });\n });\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function blockProhibitedCountries() {\n if (geoLocationManager.isKscProhibitedCountry()) {\n ctrl.isProductBlocked = true;\n }\n }\n\n function getEltClass() {\n var headerType = ctrl.data.headerType;\n return {\n 'product-header': headerType === 'Blank' || headerType === 'SMB Product' || headerType === 'SMB Targeted Solution',\n 'no-breadcrumbs': ctrl.data.hideBreadcrumbs === 'Yes',\n 'no-headlines': !isHeadlineDisplayed(),\n 'image-bg': ctrl.data.bannerImage !== null && headerType !== 'About Team Header',\n 'about-us-page-header': headerType === 'About Team Header',\n 'page-header': headerType !== 'About Team Header',\n 'small-header': headerType === 'SMB Product',\n 'taller-header': headerType === 'Taller header',\n 'ksc-header': headerType === 'KSC',\n 'downloads-header': appHelperService.assertStateByName('home-downloads') && ctrl.env === 'ru-ru'\n };\n }\n\n function isHeadlineDisplayed() {\n var headerType = ctrl.data.headerType;\n return headerType === undefined || ['Blank', 'SMB Product', 'SMB Targeted Solution', 'B2C Thank You V2', 'About Team Header', 'SMB MSP', 'KSC'].indexOf(headerType) === -1;\n }\n\n function getBannerButtonClass(pos) {\n var bannerBtns = ctrl.data.bannerbuttons;\n\n if (pos === 'left') {\n return {\n 'col-l-8': bannerBtns.length === 1,\n 'col-xl-9': ctrl.data.padButtons === 'Yes' && bannerBtns.length === 1,\n 'col-l-12 col-xl-7': bannerBtns.length > 1\n };\n }\n\n return {\n 'col-l-4': bannerBtns.length === 1,\n 'col-xl-3 no-gutter': ctrl.data.padButtons === 'Yes' && bannerBtns.length === 1,\n 'col-l-12 col-xl-5': bannerBtns.length > 1\n };\n }\n\n function isOverlayDisplayed() {\n return ['Blank', 'SMB Product', 'SMB Targeted Solution', 'B2C Thank You V2', 'B2C Thank You V1', 'KSC'].indexOf(ctrl.data.headerType) === -1;\n }\n\n function getMinPrice() {\n return productData.getb2c(ctrl.data.productShortName).then(function (response) {\n priceData.getPrice(response.data.fields.title, ctrl.isLRC ? 'Renewal' : 'Purchase').then(function (response) {\n ctrl.minPrice = response.data[0] && response.data[0].price;\n isLrcVerdict();\n }, handleRejection);\n });\n }\n\n /**\n * Check if LRC Verdict and remove the first button which is Trial\n */\n function isLrcVerdict() {\n if (ctrl.isLRC) {\n if (ctrl.data.nanoBannerButtons[0].class === 'green') ctrl.data.nanoBannerButtons.splice(0, 1);\n $timeout(function () {\n return checkBuyButtonText();\n });\n }\n }\n\n /**\n * On KSC Verdict experience page\n * The button can change from buy, renew and upgrade\n * Check header button have the same name, if not update it\n */\n function checkBuyButtonText() {\n var buyBlock = $document[0].getElementsByTagName('buyblock-radio')[0] || $document[0].getElementsByTagName('buyblock-dropdown')[0];\n var button = buyBlock && buyBlock.getElementsByClassName('button red')[0];\n\n if (button && ctrl.data.nanoBannerButtons[0].text !== button.innerText) ctrl.data.nanoBannerButtons[0].text = button.innerText;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n dirPaginateDirective.$inject = [\"$compile\", \"$parse\", \"paginationService\"];\n dirPaginationControlsDirective.$inject = [\"paginationService\", \"paginationTemplate\", \"errorService\"];\n var DEFAULT_ID = '__default';\n\n angular.module('kappGlobal.paginationModule').directive('dirPaginate', dirPaginateDirective).directive('dirPaginateNoCompile', noCompileDirective).directive('kPagination', dirPaginationControlsDirective);\n\n function dirPaginateDirective($compile, $parse, paginationService) {\n return {\n 'terminal': true,\n 'multiElement': true,\n 'priority': 100,\n 'compile': dirPaginationCompileFn\n };\n\n function dirPaginationCompileFn(tElement, tAttrs) {\n var expression = tAttrs.dirPaginate,\n match = expression.match(/^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/),\n filterPattern = /\\|\\s*itemsPerPage\\s*:\\s*(.*\\(\\s*\\w*\\)|([^\\)]*?(?=\\s+as\\s+))|[^\\)]*)/;\n\n if (match[2].match(filterPattern) === null) {\n throw 'pagination directive: the \\'itemsPerPage\\' filter must be set.';\n }\n var itemsPerPageFilterRemoved = match[2].replace(filterPattern, ''),\n collectionGetter = $parse(itemsPerPageFilterRemoved);\n\n addNoCompileAttributes(tElement);\n\n var rawId = tAttrs.paginationId || DEFAULT_ID;\n paginationService.registerInstance(rawId);\n\n return function dirPaginationLinkFn(scope, element, attrs) {\n var paginationId = $parse(attrs.paginationId)(scope) || attrs.paginationId || DEFAULT_ID;\n paginationService.deregisterInstance(rawId);\n paginationService.registerInstance(paginationId);\n var repeatExpression = getRepeatExpression(expression, paginationId);\n addNgRepeatToElement(element, attrs, repeatExpression);\n\n removeTemporaryAttributes(element);\n var compiled = $compile(element),\n currentPageGetter = makeCurrentPageGetterFn(scope, attrs, paginationId);\n\n paginationService.setCurrentPageParser(paginationId, currentPageGetter, scope);\n\n if (angular.isDefined(attrs.totalItems)) {\n paginationService.setAsyncModeTrue(paginationId);\n scope.$watch(function () {\n return $parse(attrs.totalItems)(scope);\n }, function (result) {\n if (0 <= result) {\n paginationService.setCollectionLength(paginationId, result);\n }\n });\n } else {\n paginationService.setAsyncModeFalse(paginationId);\n scope.$watchCollection(function () {\n return collectionGetter(scope);\n }, function (collection) {\n if (collection) {\n var collectionLength = collection instanceof Array ? collection.length : Object.keys(collection).length;\n paginationService.setCollectionLength(paginationId, collectionLength);\n }\n });\n }\n\n compiled(scope);\n\n scope.$on('$destroy', function destroyDirPagination() {\n paginationService.deregisterInstance(paginationId);\n });\n };\n }\n\n function getRepeatExpression(expression, paginationId) {\n var repeatExpression,\n idDefinedInFilter = !!expression.match(/(\\|\\s*itemsPerPage\\s*:[^|]*:[^|]*)/);\n\n if (paginationId !== DEFAULT_ID && !idDefinedInFilter) {\n repeatExpression = expression.replace(/(\\|\\s*itemsPerPage\\s*:\\s*[^|\\s]*)/, '$1 : \\'' + paginationId + '\\'');\n } else {\n repeatExpression = expression;\n }\n\n return repeatExpression;\n }\n\n function addNgRepeatToElement(element, attrs, repeatExpression) {\n if (element[0].hasAttribute('dir-paginate-start') || element[0].hasAttribute('data-dir-paginate-start')) {\n attrs.$set('ngRepeatStart', repeatExpression);\n element.eq(element.length - 1).attr('ng-repeat-end', true);\n } else {\n attrs.$set('ngRepeat', repeatExpression);\n }\n }\n\n function addNoCompileAttributes(tElement) {\n angular.forEach(tElement, function (el) {\n if (el.nodeType === 1) {\n angular.element(el).attr('dir-paginate-no-compile', true);\n }\n });\n }\n\n function removeTemporaryAttributes(element) {\n angular.forEach(element, function (el) {\n if (el.nodeType === 1) {\n angular.element(el).removeAttr('dir-paginate-no-compile');\n }\n });\n element.eq(0).removeAttr('dir-paginate-start').removeAttr('dir-paginate').removeAttr('data-dir-paginate-start').removeAttr('data-dir-paginate');\n element.eq(element.length - 1).removeAttr('dir-paginate-end').removeAttr('data-dir-paginate-end');\n }\n\n function makeCurrentPageGetterFn(scope, attrs, paginationId) {\n var currentPageGetter;\n if (attrs.currentPage) {\n currentPageGetter = $parse(attrs.currentPage);\n } else {\n var defaultCurrentPage = (paginationId + '__currentPage').replace(/\\W/g, '_');\n scope[defaultCurrentPage] = 1;\n currentPageGetter = $parse(defaultCurrentPage);\n }\n return currentPageGetter;\n }\n }\n function dirPaginationControlsDirective(paginationService, paginationTemplate, errorService) {\n var numberRegex = /^\\d+$/;\n var DDO = {\n 'restrict': 'AE',\n 'scope': {\n 'maxSize': '=?',\n 'onPageChange': '&?',\n 'paginationId': '=?',\n 'autoHide': '=?'\n },\n 'link': dirPaginationControlsLinkFn\n };\n\n var templateString = paginationTemplate.getString();\n if (angular.isDefined(templateString)) {\n DDO.template = templateString;\n } else {\n DDO.templateUrl = function (elem, attrs) {\n return attrs.templateUrl || paginationTemplate.getPath();\n };\n }\n return DDO;\n\n function dirPaginationControlsLinkFn(scope, element, attrs) {\n var rawId = attrs.paginationId || DEFAULT_ID;\n var paginationId = scope.paginationId || attrs.paginationId || DEFAULT_ID;\n\n if (!paginationService.isRegistered(paginationId) && !paginationService.isRegistered(rawId)) {\n var idMessage = paginationId !== DEFAULT_ID ? ' (id: ' + paginationId + ') ' : ' ';\n errorService.warn('Pagination directive: the pagination controls' + idMessage + 'cannot be used without the corresponding pagination directive, which was not found at link time.');\n }\n\n if (!scope.maxSize) {\n scope.maxSize = 9;\n }\n scope.autoHide = angular.isUndefined(scope.autoHide) ? true : scope.autoHide;\n scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : true;\n scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : false;\n\n var paginationRange = Math.max(scope.maxSize, 5);\n scope.pages = [];\n scope.pagination = {\n 'last': 1,\n 'current': 1\n };\n scope.range = {\n 'lower': 1,\n 'upper': 1,\n 'total': 1\n };\n\n scope.$watch('maxSize', function (val) {\n if (val) {\n paginationRange = Math.max(scope.maxSize, 5);\n generatePagination();\n }\n });\n\n scope.$watch(function () {\n if (paginationService.isRegistered(paginationId)) {\n return (paginationService.getCollectionLength(paginationId) + 1) * paginationService.getItemsPerPage(paginationId);\n }\n }, function (length) {\n if (0 < length) {\n generatePagination();\n }\n });\n\n scope.$watch(function () {\n if (paginationService.isRegistered(paginationId)) {\n return paginationService.getItemsPerPage(paginationId);\n }\n }, function (current, previous) {\n if (current !== previous && angular.isDefined(previous)) {\n goToPage(scope.pagination.current);\n }\n });\n\n scope.$watch(function () {\n if (paginationService.isRegistered(paginationId)) {\n return paginationService.getCurrentPage(paginationId);\n }\n }, function (currentPage, previousPage) {\n if (currentPage !== previousPage) {\n goToPage(currentPage);\n }\n });\n\n scope.setCurrent = function (num) {\n if (paginationService.isRegistered(paginationId) && isValidPageNumber(num)) {\n num = parseInt(num, 10);\n paginationService.setCurrentPage(paginationId, num);\n }\n };\n\n scope.tracker = function (id, index) {\n return id + '_' + index;\n };\n\n function goToPage(num) {\n if (paginationService.isRegistered(paginationId) && isValidPageNumber(num)) {\n var oldPageNumber = scope.pagination.current;\n\n scope.pages = generatePagesArray(num, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange);\n scope.pagination.current = num;\n updateRangeValues();\n\n // if a callback has been set, then call it with the page number as the first argument\n // and the previous page number as a second argument\n if (scope.onPageChange) {\n scope.onPageChange({\n 'newPageNumber': num,\n 'oldPageNumber': oldPageNumber\n });\n }\n }\n }\n\n function generatePagination() {\n if (paginationService.isRegistered(paginationId)) {\n var page = parseInt(paginationService.getCurrentPage(paginationId)) || 1;\n scope.pages = generatePagesArray(page, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange);\n scope.pagination.current = page;\n scope.pagination.last = scope.pages[scope.pages.length - 1];\n if (scope.pagination.last < scope.pagination.current) {\n scope.setCurrent(scope.pagination.last);\n } else {\n updateRangeValues();\n }\n }\n }\n\n function updateRangeValues() {\n if (paginationService.isRegistered(paginationId)) {\n var currentPage = paginationService.getCurrentPage(paginationId),\n itemsPerPage = paginationService.getItemsPerPage(paginationId),\n totalItems = paginationService.getCollectionLength(paginationId);\n\n scope.range.lower = (currentPage - 1) * itemsPerPage + 1;\n scope.range.upper = Math.min(currentPage * itemsPerPage, totalItems);\n scope.range.total = totalItems;\n }\n }\n\n function isValidPageNumber(num) {\n return numberRegex.test(num) && 0 < num && num <= scope.pagination.last;\n }\n }\n\n function generatePagesArray(currentPage, collectionLength, rowsPerPage, paginationRange) {\n var pages = [],\n totalPages = Math.ceil(collectionLength / rowsPerPage),\n halfWay = Math.ceil(paginationRange / 2),\n position;\n\n if (currentPage <= halfWay) {\n position = 'start';\n } else if (totalPages - halfWay < currentPage) {\n position = 'end';\n } else {\n position = 'middle';\n }\n\n var ellipsesNeeded = paginationRange < totalPages;\n var i = 1;\n while (i <= totalPages && i <= paginationRange) {\n var pageNumber = calculatePageNumber(i, currentPage, paginationRange, totalPages);\n\n var openingEllipsesNeeded = i === 2 && (position === 'middle' || position === 'end');\n var closingEllipsesNeeded = i === paginationRange - 1 && (position === 'middle' || position === 'start');\n if (ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)) {\n pages.push('...');\n } else {\n pages.push(pageNumber);\n }\n i++;\n }\n return pages;\n }\n\n function calculatePageNumber(i, currentPage, paginationRange, totalPages) {\n var halfWay = Math.ceil(paginationRange / 2);\n if (i === paginationRange) {\n return totalPages;\n } else if (i === 1) {\n return i;\n } else if (paginationRange < totalPages) {\n if (totalPages - halfWay < currentPage) {\n return totalPages - paginationRange + i;\n } else if (halfWay < currentPage) {\n return currentPage - halfWay + i;\n } else {\n return i;\n }\n } else {\n return i;\n }\n }\n }\n function noCompileDirective() {\n return {\n 'priority': 5000,\n 'terminal': true\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n var DEFAULT_ID = '__default';\n\n angular.module('kappGlobal.paginationModule').filter('itemsPerPage', itemsPerPageFilter);\n\n itemsPerPageFilter.$inject = ['paginationService'];\n\n function itemsPerPageFilter(paginationService) {\n return function (collection, itemsPerPage, paginationId) {\n if (angular.isUndefined(paginationId)) paginationId = DEFAULT_ID;\n if (!paginationService.isRegistered(paginationId)) {\n throw 'pagination directive: the itemsPerPage id argument (id: ' + paginationId + ') does not match a registered pagination-id.';\n }\n var end;\n var start;\n if (angular.isObject(collection)) {\n itemsPerPage = parseInt(itemsPerPage) || 9999999999;\n if (paginationService.isAsyncMode(paginationId)) {\n start = 0;\n } else {\n start = (paginationService.getCurrentPage(paginationId) - 1) * itemsPerPage;\n }\n end = start + itemsPerPage;\n paginationService.setItemsPerPage(paginationId, itemsPerPage);\n\n if (collection instanceof Array) {\n return collection.slice(start, end);\n } else {\n var slicedObject = {};\n angular.forEach(keys(collection).slice(start, end), function (key) {\n slicedObject[key] = collection[key];\n });\n return slicedObject;\n }\n }\n return collection;\n };\n }\n\n function keys(obj) {\n if (!Object.keys) {\n var objKeys = [];\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n objKeys.push(i);\n }\n }\n return objKeys;\n } else {\n return Object.keys(obj);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.paginationModule').provider('paginationTemplate', paginationTemplateProvider);\n\n function paginationTemplateProvider() {\n var templatePath = 'resources/template/html/modules/_shared/components/pagination/templates/pagination-1.html';\n var templateString;\n return {\n 'setPath': setPath,\n 'setString': setString,\n '$get': $get\n };\n\n function setPath(path) {\n templatePath = path;\n }\n\n function setString(str) {\n templateString = str;\n }\n\n function $get() {\n return {\n 'getPath': function getPath() {\n return templatePath;\n },\n 'getString': function getString() {\n return templateString;\n }\n };\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.paginationModule').run(['$templateCache', dirPaginationControlsTemplateInstaller]);\n\n function dirPaginationControlsTemplateInstaller($templateCache) {\n $templateCache.put('angularUtils.directives.dirPagination.template', '');\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.paginationModule').factory('paginationService', paginationService);\n\n function paginationService() {\n var instances = {},\n lastRegisteredInstance;\n return {\n 'registerInstance': registerInstance,\n 'deregisterInstance': deregisterInstance,\n 'isRegistered': isRegistered,\n 'getLastInstanceId': getLastInstanceId,\n 'setCurrentPageParser': setCurrentPageParser,\n 'setCurrentPage': setCurrentPage,\n 'getCurrentPage': getCurrentPage,\n 'setItemsPerPage': setItemsPerPage,\n 'getItemsPerPage': getItemsPerPage,\n 'setCollectionLength': setCollectionLength,\n 'getCollectionLength': getCollectionLength,\n 'setAsyncModeTrue': setAsyncModeTrue,\n 'setAsyncModeFalse': setAsyncModeFalse,\n 'isAsyncMode': isAsyncMode\n };\n\n function registerInstance(instanceId) {\n if (angular.isUndefined(instances[instanceId])) {\n instances[instanceId] = {\n 'asyncMode': false\n };\n lastRegisteredInstance = instanceId;\n }\n }\n\n function deregisterInstance(instanceId) {\n delete instances[instanceId];\n }\n\n function isRegistered(instanceId) {\n return angular.isDefined(instances[instanceId]);\n }\n\n function getLastInstanceId() {\n return lastRegisteredInstance;\n }\n\n function setCurrentPageParser(instanceId, val, scope) {\n instances[instanceId].currentPageParser = val;\n instances[instanceId].context = scope;\n }\n\n function setCurrentPage(instanceId, val) {\n instances[instanceId].currentPageParser.assign(instances[instanceId].context, val);\n }\n\n function getCurrentPage(instanceId) {\n var parser = instances[instanceId].currentPageParser;\n return parser ? parser(instances[instanceId].context) : 1;\n }\n\n function setItemsPerPage(instanceId, val) {\n instances[instanceId].itemsPerPage = val;\n }\n\n function getItemsPerPage(instanceId) {\n return instances[instanceId].itemsPerPage;\n }\n\n function setCollectionLength(instanceId, val) {\n instances[instanceId].collectionLength = val;\n }\n\n function getCollectionLength(instanceId) {\n return instances[instanceId].collectionLength;\n }\n\n function setAsyncModeTrue(instanceId) {\n instances[instanceId].asyncMode = true;\n }\n\n function setAsyncModeFalse(instanceId) {\n instances[instanceId].asyncMode = false;\n }\n\n function isAsyncMode(instanceId) {\n return instances[instanceId].asyncMode;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.paginationModule').factory('paginationHelper', paginationHelper);\n\n function paginationHelper() {\n return {\n 'getPaginationNumbering': getPaginationNumbering,\n 'isCurrentPaginationNumber': isCurrentPaginationNumber\n };\n\n function getPaginationNumbering(count) {\n var totalItemsOnPage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n\n var pageCount = angular.copy(count),\n paginationNumbers = [];\n while (pageCount / totalItemsOnPage > 0) {\n paginationNumbers.push((pageCount / totalItemsOnPage).toFixed());\n pageCount -= totalItemsOnPage;\n }\n return paginationNumbers.reverse();\n }\n\n function isCurrentPaginationNumber(currentPaginationNumber, number) {\n return currentPaginationNumber === +number;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.arPopup').component('arPopup', {\n 'bindings': {\n 'isLrc': '<'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/popups/templates/ar-popup.html',\n 'controller': 'arPopupController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n arPopupController.$inject = [\"directiveData\", \"$rootScope\", \"$scope\", \"errorService\", \"buyblockService\"];\n angular.module('kappGlobal.arPopup').controller('arPopupController', arPopupController);\n function arPopupController(directiveData, $rootScope, $scope, errorService, buyblockService) {\n var ctrl = this;\n var productShortName = '';\n var productPosition = '';\n\n ctrl.popupActive = false;\n ctrl.onceChecked = false;\n ctrl.ARcheck = onArCheck;\n ctrl.closePopup = closePopup;\n ctrl.$onInit = activate;\n\n var shoARPopupProductHandler = $rootScope.$on('shoARPopupProduct', function (event, value) {\n productShortName = value.name;\n productPosition = value.position || '';\n });\n\n function activate() {\n getData();\n $scope.$on('$destroy', handleScopeDestroyed);\n }\n\n function closePopup() {\n if (ctrl.isLrc) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'close_autoRenewalPopup', '' + productPosition + (productPosition ? '_' : '') + productShortName);\n }\n\n ctrl.popupActive = false;\n }\n\n function getData() {\n return directiveData.getLocal('buyblock/ar-texts').then(function (response) {\n ctrl.buyblockData = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n var toggleARPopup = $rootScope.$on('toggleARPopup', function (ev, arPopupButtons) {\n ctrl.arPopupButtons = arPopupButtons;\n ctrl.onceChecked = false;\n\n ctrl.popupActive = !ctrl.popupActive;\n });\n\n var onceUnchecked = $rootScope.$on('onceUnchecked', function () {\n if (ctrl.isLrc) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'show_autoRenewalPopup', '' + productPosition + (productPosition ? '_' : '') + productShortName);\n }\n\n ctrl.popupActive = true;\n });\n\n var checkboxClicked = $rootScope.$on('checkboxClicked', function (ev, isChecked) {\n ctrl.onceChecked = isChecked;\n ctrl.arPopupButtons = 'true';\n });\n\n function onArCheck(flag) {\n $rootScope.$emit('arPopupCheck', flag);\n\n if (ctrl.isLrc) {\n buyblockService.trackBBEvent('autoEvent', 'LRC', 'clickButton_autoRenewalPopup', (flag ? ctrl.buyblockData.renewAutomatically : ctrl.buyblockData.renewManually) + '_' + productPosition + (productPosition ? '_' : '') + productShortName);\n }\n\n ctrl.popupActive = false;\n }\n\n function handleScopeDestroyed() {\n shoARPopupProductHandler();\n toggleARPopup();\n onceUnchecked();\n checkboxClicked();\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.popup').factory('popup', popup);\n function popup() {\n return {\n 'popupGallery': function popupGallery(el) {\n el.find('.popup-gallery div, .image-gallery').magnificPopup({\n 'delegate': 'a',\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': false,\n 'mainClass': 'mfp-with-zoom mfp-img-mobile',\n 'image': {\n 'verticalFit': true\n },\n 'gallery': {\n 'enabled': true\n },\n 'zoom': {\n 'enabled': true,\n 'duration': 300,\n 'opener': function opener(element) {\n return element.find('img');\n }\n }\n });\n },\n 'imageGallery': function imageGallery(el) {\n el.find('.popup-image').magnificPopup({\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': false,\n 'fixedContentPos': true,\n 'mainClass': 'mfp-no-margins mfp-with-zoom', // class to remove default margin from left and right side\n 'image': {\n 'verticalFit': true\n },\n 'zoom': {\n 'enabled': true,\n 'duration': 300\n\n }\n });\n }\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.premiumServices').component('premiumServices', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/premium-services/premium-services.template.html',\n 'controller': 'premiumServicesController'\n });\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.productPromo').component('productPromo', {\n 'bindings': {\n 'resource': '@',\n 'type': '@',\n 'template': '@',\n 'headerTitle': '<'\n },\n 'controller': 'productPromoController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var type = 'ksc';\n if ($attrs.type) type = $attrs.type;\n return '/resources/template/html/modules/_shared/components/product-promo/templates/product-promo-' + type + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n productPromoController.$inject = [\"directiveData\", \"$http\", \"errorService\"];\n angular.module('kappGlobal.productPromo').controller('productPromoController', productPromoController);\n\n function productPromoController(directiveData, $http, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n setAnalyticsData();\n }\n\n function setAnalyticsData() {\n if (ctrl.template === 'ksc' && ctrl.resource) {\n switch (ctrl.resource) {\n case 'ksc-promo-top':\n ctrl.analyticsPrefix = 'KSC Banner Top';\n break;\n case 'ksc-promo-middle':\n ctrl.analyticsPrefix = 'KSC Banner Middle';\n break;\n case 'ksc-promo-bottom':\n ctrl.analyticsPrefix = 'KSC Banner Bottom';\n break;\n default:\n }\n }\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'product-promo').then(function (response) {\n ctrl.data = response.data.fields;\n if (!ctrl.data.product) return false;\n\n return $http.get(ctrl.data.product, { 'cache': true }).then(function (response) {\n ctrl.product = response.data.fields;\n }, handleRejection);\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.productScriptsInjector').component('productScriptsInjector', {\n 'bindings': {\n 'productData': '@',\n 'min': '@',\n 'max': '@',\n 'priceValue': '@',\n 'cutPrice': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/product-scripts-injector/templates/product-scripts-injector.html',\n 'controller': 'productScriptsInjectorController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n productScriptsInjectorController.$inject = [\"$rootScope\", \"$document\", \"sessionStorageService\"];\n angular.module('kappGlobal.productScriptsInjector').controller('productScriptsInjectorController', productScriptsInjectorController);\n\n function productScriptsInjectorController($rootScope, $document, sessionStorageService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n performInjection();\n }\n\n function performInjection() {\n var ngRender = $rootScope.$on('ngRender', function () {\n ctrl.productData = JSON.parse(ctrl.productData);\n ctrl.priceValue = JSON.parse(ctrl.priceValue);\n ctrl.cutPrice = ctrl.cutPrice ? JSON.parse(ctrl.cutPrice) : [{ 'price': 'no data' }];\n ctrl.bv = sessionStorageService.get('ratingProduct' + ctrl.productData.bvId);\n ctrl.description = $document[0].querySelector('meta[name=\"description\"]') && $document[0].querySelector('meta[name=\"description\"]').content;\n ngRender();\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n productScriptsInjectorService.$inject = [\"$location\", \"$document\"];\n angular.module('kappGlobal.productScriptsInjector').factory('productScriptsInjectorService', productScriptsInjectorService);\n\n function productScriptsInjectorService($location, $document) {\n return {\n 'performInjection': performInjection,\n 'mapSchema': mapSchema\n };\n\n function performInjection(object) {\n var s = $document[0].createElement('script');\n s.type = 'application/ld+json';\n s.setAttribute('id', 'product-generated');\n\n $('#product-generated').remove();\n\n s.text = JSON.stringify(mapSchema(object));\n $('head').append(s);\n }\n\n function mapSchema(value) {\n var vp = value.productData || {},\n vc = value.cutPrice || [],\n vcv = vc.length ? vc[vc.length - 1] : {},\n vcvp = vcv.price ? vcv.price.toString() : '0',\n vpv = value.priceValue || {},\n vpvp = vpv.price ? vpv.price.toString() : '0';\n\n return {\n '@context': 'http://schema.org/',\n '@type': 'Product',\n 'brand': {\n '@type': 'Organization',\n 'logo': 'https://cdn.press.kaspersky.com/files/2013/06/Kaspersky_png.png',\n 'name': 'Kaspersky'\n },\n 'description': value.description,\n 'image': vp.fullSizeImage,\n 'name': getProductTitle(vp),\n 'aggregateRating': getBvStats(value),\n 'offers': {\n '@type': 'Offer',\n 'availability': 'http://schema.org/InStock',\n 'priceSpecification': {\n 'maxPrice': value.max || vcvp,\n 'minPrice': value.min || vpvp,\n 'price': vpvp,\n 'priceCurrency': vpv.currency\n },\n 'seller': {\n '@type': 'Organization',\n 'name': 'Kaspersky'\n }\n },\n 'url': $location.path() || vp.prodPageLink\n };\n }\n\n function getBvStats(ctrl) {\n var bv = ctrl.bv;\n if (bv && bv.Includes && bv.Includes.Products && bv.Includes.Products[ctrl.productData.bvId]) {\n var reviewStats = bv.Includes.Products[ctrl.productData.bvId].ReviewStatistics;\n return {\n '@type': 'AggregateRating',\n 'ratingValue': reviewStats.AverageOverallRating.toString(),\n 'reviewCount': reviewStats.TotalReviewCount.toString()\n };\n }\n }\n\n function getProductTitle(vp) {\n return vp.prodAddTitle ? vp.prodKasperskyTitle + ' ' + vp.prodMainTitle + ' ' + vp.prodAddTitle : vp.prodKasperskyTitle + ' ' + vp.prodMainTitle;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.productUpdates').component('productUpdates', {\n 'bindings': {\n 'componentData': '<',\n 'productName': '<',\n 'version': '@',\n 'resource': '@',\n 'product': '<',\n 'showDownloadLocale': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/product-updates/templates/product-updates.html',\n 'controller': 'productUpdatesController'\n\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n productUpdatesController.$inject = [\"$q\", \"directiveData\", \"downloadLinks\", \"$log\", \"productData\", \"productDownloadHelper\", \"$element\", \"$scope\", \"validationHelper\", \"ENV\", \"dl2Connector\", \"errorService\"];\n angular.module('kappGlobal.productUpdates').controller('productUpdatesController', productUpdatesController);\n\n function productUpdatesController($q, directiveData, downloadLinks, $log, productData, productDownloadHelper, $element, $scope, validationHelper, ENV, dl2Connector, errorService) {\n var ctrl = this;\n var hideAlphabets = [];\n\n ctrl.data = {};\n ctrl.section = '';\n ctrl.downloadLocales = productDownloadHelper.getDownloadLocales();\n ctrl.languageLocalNameDefault = 'en';\n ctrl.changeRegion = changeRegion;\n ctrl.displayDropdownOption = displayDropdownOption;\n ctrl.displayDropdownDefault = displayDropdownDefault;\n ctrl.isGlobalLocale = isGlobalLocale;\n ctrl.isCNLocale = isCNLocale;\n ctrl.geoIPOverrideForProductUpdates = geoIPOverrideForProductUpdates;\n ctrl.$onInit = activate;\n ctrl.$postLink = dl2Connector.fetchDlScript;\n ctrl.translations = {};\n\n function activate() {\n ctrl.showDownloadLocale = ctrl.showDownloadLocale || false;\n dl2Connector.initEvents($scope, [], true, $element);\n\n $q.all([getGeneralTranslations(), getGeneralSettings(), getProductDownloadData()]).catch(handleRejection);\n\n setRegionDefault();\n setLanguageLocalDefault();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getGeneralTranslations() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n });\n }\n\n function getGeneralSettings() {\n return directiveData.getLocal('general-settings').then(function (response) {\n var res = response.data.fields;\n if (res && res.hideAlphabets) return hideAlphabets = res.hideAlphabets;\n });\n }\n\n function getProductDownloadData(docsSettingsToUpdate) {\n return directiveData.getByUrl(ctrl.resource || 'product-updates').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.section = location.pathname.split('/');\n\n var application = ctrl.data.productsTaxonomy.length === 0 ? '' : ctrl.data.productsTaxonomy.map(function (item) {\n return item.key;\n });\n\n if (ctrl.data.linksType) {\n if (!angular.isString(ctrl.data.selectedLanguagesCodes)) {\n ctrl.data.selectedLanguagesCodes = ctrl.data.selectedLanguagesCodes.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n if (!angular.isString(ctrl.data.fallbackLanguageCode)) {\n ctrl.data.fallbackLanguageCode = ctrl.data.fallbackLanguageCode.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n\n var updateFields = productDownloadHelper.constructUpdateFields(ctrl.data.localeSelectionType, ctrl.data.selectedLanguagesCodes, ctrl.data.websiteCountryCode || 'Global', 'en'),\n globalDefault = productDownloadHelper.getFieldsToUpdate(updateFields);\n\n docsSettingsToUpdate = docsSettingsToUpdate || globalDefault;\n docsSettingsToUpdate = angular.isDefined(docsSettingsToUpdate) && docsSettingsToUpdate.website_country_code !== 'global' ? docsSettingsToUpdate : globalDefault;\n\n return $q.all([productData.getcusjsonb2b(ctrl.section[1], ctrl.data.packName).then(function (response) {\n ctrl.productInfo = response.data.fields;\n return $q.resolve();\n }).catch(handleRejection), getDownloadLinks(application, docsSettingsToUpdate).then(handleDownloadResponse)]);\n }\n });\n }\n\n function isGlobalLocale() {\n return ENV.locale.substr(3, 6) === 'global';\n }\n\n function isCNLocale() {\n return ENV.locale.substr(3, 6) === 'cn';\n }\n\n function geoIPOverrideForProductUpdates(obj, product, link, event) {\n var res = link,\n geoIPLinkOverride = ctrl.data.geoipLinkOverride,\n selectedLanguage = void 0;\n\n event.target.tagName === 'A' ? selectedLanguage = $element.find(event.target).parent().siblings('div').find('option:selected').text() : selectedLanguage = $element.find(event.target).parent().parent().siblings('div').find('option:selected').text();\n\n if (angular.isUndefined(geoIPLinkOverride)) {\n angular.element(event.currentTarget).attr('href', res);\n return false;\n }\n\n if (product === 'Kaspersky Internet Security for Android' && ctrl.data.KISAndroidBuildUrl) {\n res = ctrl.data.KISAndroidBuildUrl;\n } else {\n for (var i = 0, length = geoIPLinkOverride.length; i < length; i++) {\n var item = geoIPLinkOverride[i];\n if (item.product === product && item.language === selectedLanguage) {\n res = item.overrideLink;\n break;\n }\n }\n }\n\n angular.element(event.currentTarget).attr('href', res);\n }\n\n function setRegionDefault() {\n ctrl.downloadLocale = ctrl.downloadLocale || ctrl.downloadLocales[0];\n }\n\n function setLanguageLocalDefault() {\n ctrl.languageLocalNameDefault = ctrl.downloadLocale.locale.split('-')[1];\n }\n\n function displayDropdownDefault(downloads) {\n var download = _.find(downloads, function (d) {\n return angular.isArray(hideAlphabets) ? hideAlphabets.indexOf(d.alphabet) === -1 : true;\n });\n return download ? download.download_url : undefined;\n }\n\n function displayDropdownOption(local) {\n var result = true;\n if (!validationHelper.isNullOrUndefined(hideAlphabets)) {\n hideAlphabets.forEach(function (item) {\n if (item === local.alphabet) {\n result = false;\n }\n });\n }\n\n if (isCNLocale() && local.alphabet_loc_name === 'Traditional') {\n result = false;\n }\n\n return result;\n }\n\n function changeRegion(region) {\n if (region.name === 'Global') {\n return getProductDownloadData();\n }\n\n var regionLocale = productDownloadHelper.getRegionLocale(region),\n fields = productDownloadHelper.constructUpdateFields('', region.selectedLanguages, region.selectedCountryCode, regionLocale.languageCode),\n docsSettingsToUpdate = productDownloadHelper.getFieldsToUpdate(fields);\n\n return getProductDownloadData(docsSettingsToUpdate);\n }\n\n // Private methods\n function getDownloadLinks(application, docsSettingsToUpdate) {\n ctrl.downloadData = [];\n\n var appsQuery = application || ctrl.data.products.split(',');\n if (ctrl.data.productDownloadRequestRedefinition) convertRedefinitionToRequestFormat();\n ctrl.downloadsList = ctrl.data.productDownloadRequestRedefinition || {};\n\n // We make calls for each product separately, extending docSettings in case of request redefinition\n return $q.all(appsQuery.map(function (app) {\n var docSettings = {\n 'applications': [app],\n 'options': {\n 'links_type': ctrl.data.linksType.toString(),\n 'locale_selection_type': docsSettingsToUpdate.locale_selection_type,\n 'selected_languages_codes': docsSettingsToUpdate.selected_languages_codes,\n 'fallback_language_code': docsSettingsToUpdate.fallback_language_code || ctrl.data.fallbackLanguageCode,\n 'website_country_code': docsSettingsToUpdate.website_country_code,\n 'website_language_code': docsSettingsToUpdate.website_language_code,\n 'website_fallback_language': 'en',\n 'lang_locale_link_selection_amount': null,\n 'show_release_version_type': null,\n 'use_aux_lang_for_app_plugins': null,\n 'cpp_id': ctrl.data.cppid\n }\n };\n\n return downloadLinks.getByApp('', modifyRequest(app, docSettings));\n }));\n }\n\n /**\n * Merge the request responses into a single object already grouped by product.\n * @param response {object[]} response API Responses\n */\n function handleDownloadResponse(response) {\n var arrayOfApps = response.map(function (productDownloadRequest) {\n return productDownloadRequest.data.filter(function (productData) {\n return productData.applications.length !== 0;\n });\n });\n\n ctrl.downloadData = arrayOfApps.map(function (app) {\n return app.map(function (linksPack) {\n return angular.extend(linksPack.applications[0], {\n 'linkType': linksPack.link_type,\n 'linkLabel': assignLinkLabel(linksPack.link_type) || linksPack.link_type,\n 'display_omniture': displayOmnitureTags(linksPack.link_type)\n });\n });\n });\n\n return $q.resolve();\n }\n\n /**\n * Validates the set of link types, so that we don't get a broken request by mistake\n * @param {string} links_type contains a set of link types comma separated\n * @returns {string} validated string with incorrect types excluded\n */\n function checkLinksType(links_type) {\n return links_type && links_type.split(',').map(function (type) {\n return type.trim();\n }).filter(function (type) {\n var match = type.match(/^(UpdateBuilds|Docs|OnlineHelp|ApplicationControlPlugins|AdditionalDistributives|ReleaseNotes|Downloaders)$/);\n if (!match) {\n $log.warn('Incorrect link type', links_type);\n }\n return match;\n }).join(',');\n }\n\n /**\n * Converts the redifinition data that comes from Tridion into format usable by the donwloads service\n */\n function convertRedefinitionToRequestFormat() {\n ctrl.data.productDownloadRequestRedefinition.forEach(function (item) {\n Object.keys(item).forEach(function (key) {\n return angular.isArray(item[key]) && !item[key].length || !item[key] ? delete item[key] : false;\n });\n if (item.selected_languages_codes && !angular.isString(item.selected_languages_codes)) {\n item.selected_languages_codes = item.selected_languages_codes.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n if (item.fallback_language_code && !angular.isString(item.fallback_language_code)) {\n item.fallback_language_code = item.fallback_language_code.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n item.links_type = checkLinksType(item.links_type);\n if (!item.links_type) delete item.links_type;\n });\n // Determine which product request has to be redefined\n ctrl.appPositionSearchArray = ctrl.data.productDownloadRequestRedefinition.map(function (item) {\n return item.productTaxonomy.key;\n });\n // We don't need the product name anymore, cleaning it up so that we can extend docSettings object\n ctrl.data.productDownloadRequestRedefinition.forEach(function (item) {\n return delete item.productTaxonomy;\n });\n }\n\n /**\n * Modifies the request to downloads service based on Tridion redefinition data\n * @param app {string}\n * @param docSettings {object} request settings object\n * @returns {object} modified settings\n */\n function modifyRequest(app, docSettings) {\n if (ctrl.data.productDownloadRequestRedefinition) {\n var pos = ctrl.appPositionSearchArray.indexOf(app);\n if (pos !== -1) angular.extend(docSettings.options, ctrl.data.productDownloadRequestRedefinition[pos]);\n }\n return docSettings;\n }\n\n /**\n * Assign a label to each type\n * @param {String} type Download type\n * @return {String} Label for download type\n */\n function assignLinkLabel(type) {\n switch (type) {\n case 'UpdateBuilds':\n return ctrl.data.latestVersionText;\n case 'Downloaders':\n return ctrl.data.latestVersionText;\n case 'TrialBuilds':\n return ctrl.data.trialText;\n case 'Docs':\n return ctrl.data.docsText;\n case 'ApplicationControlPlugins':\n return ctrl.data.applicationControlPluginsText;\n case 'AdditionalDistributives':\n return ctrl.data.additionalDistributivesText;\n case 'ReleaseNotes':\n return ctrl.data.releaseNotesText;\n case 'OnlineHelp':\n return ctrl.data.onlineHelpLabel;\n default:\n return type;\n }\n }\n\n /**\n * Determine whether to show or hide omniture tags\n * @param {String} linkType The download link type\n * @return {Boolean}\n */\n function displayOmnitureTags(linkType) {\n var array = ['UpdateBuilds', 'TrialBuilds', 'Downloaders'];\n return array.indexOf(linkType) > -1;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.productUpdatesPack').component('productUpdatesPack', {\n 'bindings': {\n 'componentData': '<',\n 'productName': '<',\n 'version': '@',\n 'resource': '@',\n 'product': '<'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/product-updates-pack/templates/product-updates-pack.html',\n 'controller': 'productUpdatesPackController'\n\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n productUpdatesPackController.$inject = [\"directiveData\", \"productData\", \"errorService\", \"$window\"];\n angular.module('kappGlobal.productUpdatesPack').controller('productUpdatesPackController', productUpdatesPackController);\n\n function productUpdatesPackController(directiveData, productData, errorService, $window) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.section = '';\n ctrl.$onInit = activate;\n ctrl.isEndPointDownloadPage = isEndPointDownloadPage;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'product-updates-pack').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.section = location.pathname.split('/');\n return productData.getcusjsonb2b(ctrl.section[1], ctrl.data.packName).then(function (response) {\n ctrl.productInfo = response.data.fields;\n }, handleRejection);\n }, handleRejection);\n }\n\n function isEndPointDownloadPage() {\n return ['/small-to-medium-business-security/downloads/endpoint-advanced', '/small-to-medium-business-security/downloads/endpoint-select', '/small-to-medium-business-security/downloads/endpoint-core'].some(function (url) {\n return $window.location.pathname === url;\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.promoSection').component('promoSection', {\n 'bindings': {\n 'resource': '@',\n 'template': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/promo-section/templates/promo-section.html',\n 'controller': 'promoSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n promoSectionController.$inject = [\"$element\", \"$window\", \"directiveData\", \"promoSectionService\", \"errorService\"];\n angular.module('kappGlobal.promoSection').controller('promoSectionController', promoSectionController);\n\n function promoSectionController($element, $window, directiveData, promoSectionService, errorService) {\n var ctrl = this;\n ctrl.data = [];\n ctrl.$onInit = activate;\n ctrl.getBackGroundImage = getBackGroundImage;\n\n /**\n * Hack to keep current implementation along with a new one.\n * If we have a resource override (e.g. promo-settings), check if promo-settings tells us to load other promo content.\n * Otherwise, just load the content.\n */\n function activate() {\n if (ctrl.resource && ctrl.resource !== 'promo-section' && ctrl.template !== 'ent-3.0') {\n return promoSectionService.getPromoMap(ctrl.resource).then(function (response) {\n if (response && response.promoValue === 'true') getData();\n }, handleRejection);\n } else {\n return getData();\n }\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'promo-section').then(function (response) {\n if (response.data && response.data.fields.promotions) {\n ctrl.data = response.data.fields.promotions;\n ctrl.template = response.data.fields.template;\n } else {\n ctrl.data.push(response.data.fields);\n ctrl.id = response.data.id;\n runScript();\n }\n }, handleRejection);\n }\n\n function runScript() {\n var comment = '';\n $($element).prepend(comment);\n }\n\n function getBackGroundImage(promotion) {\n if (promotion.backgroundImageForTablet && $window.innerWidth <= 768 && $window.innerWidth > 481) {\n return {\n 'background-image': 'url(' + promotion.backgroundImageForTablet + ')'\n };\n } else if (promotion.backgroundImageForMobile && $window.innerWidth <= 480) {\n return {\n 'background-image': 'url(' + promotion.backgroundImageForMobile + ')'\n };\n } else if (promotion.backgroundImage) {\n return {\n 'background-image': 'url(' + promotion.backgroundImage + ')'\n };\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n promoSectionService.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.promoSection').factory('promoSectionService', promoSectionService);\n\n function promoSectionService(directiveData, errorService) {\n\n return {\n 'getPromoMap': getPromoMap\n };\n\n function getPromoMap(promoType) {\n return directiveData.getByUrl('promo-settings').then(function (response) {\n if (response.data.fields && response.data.fields.Promotions) {\n return _.find(response.data.fields.Promotions, { 'promoID': promoType });\n }\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.rating').component('ratingSubmit', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/rating/templates/rating-submit.html',\n 'controller': 'ratingSubmitController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n ratingSubmitController.$inject = [\"ENV\", \"angularLoad\", \"$rootScope\", \"errorService\"];\n angular.module('kappGlobal.rating').controller('ratingSubmitController', ratingSubmitController);\n\n function ratingSubmitController(ENV, angularLoad, $rootScope, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n ctrl.locale = ENV.locale;\n ctrl.bvLocale = '';\n ctrl.bvCode = {\n 'en\\-global': '-en_eu',\n 'de-de': '-de_de',\n 'en-gb': '-en_gb',\n 'fr-fr': '-fr_fr',\n 'es-es': '-es_es',\n 'it-it': '-it_it',\n 'nl-nl': '-nl_nl',\n 'sv-se': '-sv_se',\n 'da-dk': '-da_dk',\n 'nb-no': '-no_no',\n 'pt-br': '-pt_br',\n 'tr-tr': '-tr_tr',\n 'en-au': '-en_au',\n 'en-za': '-en_za',\n 'en-in': '-en_in',\n 'en-ae': '-en_ae',\n 'ar-ae': '-ar_sa',\n 'en-us': '',\n 'en-ca': '-en_ca',\n 'es-mx': '-es',\n 'zh-cn': '-zh_cn',\n 'ja-jp': '-ja_jp'\n };\n\n // reset link for rating breadcrum item\n var ngRender = $rootScope.$on('ngRender', function () {\n if ($rootScope.breadcrumbs && $rootScope.breadcrumbs[2] && $rootScope.breadcrumbs[2].title === 'rating') {\n $rootScope.breadcrumbs[2].link = '';\n }\n ngRender();\n });\n\n function activate() {\n getData();\n }\n\n function getData() {\n if (ctrl.locale in ctrl.bvCode) {\n ctrl.bvLocale = ctrl.bvCode[ctrl.locale];\n loadrating();\n }\n }\n\n function loadrating() {\n angularLoad.loadScript('//kaspersky.ugc.rating.com/static/8811' + ctrl.bvLocale + '/bvapi.js').then(function () {\n if ($BV) {\n $BV.ui('submission_container', {});\n }\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.rating').component('rating', {\n 'bindings': {\n 'productId': '@',\n 'template': '@',\n 'buttonText': '@',\n 'enableMicrodata': '@'\n },\n 'controller': 'ratingController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'stars';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/_shared/components/rating/templates/rating-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n ratingController.$inject = [\"directiveData\", \"ratingDataService\", \"errorService\", \"$rootScope\", \"$q\", \"$scope\", \"ngDialog\", \"tracking\"];\n angular.module('kappGlobal.rating').controller('ratingController', ratingController);\n\n function ratingController(directiveData, ratingDataService, errorService, $rootScope, $q, $scope, ngDialog, tracking) {\n var ctrl = this;\n ctrl.rating = {};\n ctrl.ratingData = {};\n ctrl.showReviewsActive = false;\n ctrl.currentPage = 1;\n ctrl.pageSize = 10;\n ctrl.reverse = false;\n ctrl.reviewRating = 'score';\n ctrl.reviewDate = 'created_at';\n ctrl.reviewOrderBy = 'score';\n ctrl.orderByCondition = orderByCondition;\n ctrl.isActive = isActive;\n ctrl.getStars = getStars;\n ctrl.showReviews = showReviews;\n ctrl.$onInit = activate;\n $rootScope.hasMatchingPopupCalled = false;\n\n function getProductId(value) {\n var splitOn = '#rating_';\n return value.match(splitOn) ? value.split(splitOn)[1] : value;\n }\n\n var showReviewsPopupEventUnsub = $rootScope.$on('showReviewsPopup', function (event, value) {\n if (ctrl.productId === getProductId(value) && !$rootScope.hasMatchingPopupCalled) {\n $rootScope.hasMatchingPopupCalled = true;\n showReviews(true);\n }\n });\n\n function activate() {\n $q.all([getData(), getratingData(getProductId(ctrl.productId))]).catch(errorService.warn);\n\n orderByCondition(ctrl.reviewOrderBy);\n $scope.$on('$destroy', handleScopeDestroyed);\n }\n\n function getData() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.ratingData = response.data.fields;\n });\n }\n\n function checkTemplate() {\n if (ctrl.template === 'reviews-carousel') return true;\n }\n\n function getratingData(productId) {\n var popupActive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : checkTemplate();\n\n if (productId) {\n return ratingDataService.getProductReviews(productId, popupActive).then(function (response) {\n if (!response) return false;\n\n var pass = 0;\n ctrl.rating = response.data.response;\n ctrl.total_reviews = ctrl.rating.bottomline.total_reviews || ctrl.rating.bottomline.total_review;\n\n var hasProducts = ctrl.rating && ctrl.rating.products;\n ctrl.starsRange = ctrl.rating.bottomline && Math.round(ctrl.rating.bottomline.average_score) || 5;\n\n ctrl.productName = hasProducts && ctrl.rating.products[0].name;\n\n ctrl.litStars = function (range, value) {\n if (!popupActive) {\n value = ctrl.rating.bottomline && ctrl.rating.bottomline.average_score;\n }\n ctrl.starsValue = Math.round(value * 2) / 2;\n\n if (value > range) {\n pass = value - range;\n\n if (pass <= 0.99 && pass >= 0.01) {\n return 'font-icons icon-star half';\n }\n return 'font-icons icon-star';\n } else {\n return 'font-icons icon-star empty';\n }\n };\n\n ctrl.showReviewsActive = true;\n }).catch(function (err) {\n errorService.warn('rating:', err);\n });\n } else {\n errorService.warn('rating: productId empty');\n }\n }\n\n function orderByCondition(orderByPredicate) {\n var index = ctrl.reviewOrderBy.indexOf('' + orderByPredicate);\n ctrl.reviewOrderBy = orderByPredicate;\n if (index === 0) {\n ctrl.reverse = !ctrl.reverse;\n }\n }\n\n function isActive(name) {\n return ctrl.reviewOrderBy === name;\n }\n\n function getStars(num) {\n return new Array(num);\n }\n\n function showReviews(popupActive) {\n if (ctrl._popupOpened) {\n return;\n }\n\n ctrl._popupOpened = true;\n\n return getratingData(ctrl.productId, popupActive).then(function () {\n ngDialog.open({\n 'template': '/resources/template/html/modules/_shared/components/rating/templates/rating-reviews.html',\n 'className': 'ngdialog-flyout',\n 'data': ctrl,\n 'onOpenCallback': function onOpenCallback() {\n tracking.trackPageView($rootScope.kaspersky.pageName + ' > rating Reviews Popup');\n },\n 'preCloseCallback': function preCloseCallback() {\n ctrl._popupOpened = false;\n $rootScope.hasMatchingPopupCalled = false;\n tracking.trackPageView($rootScope.kaspersky.pageName);\n }\n });\n }, function (rejection) {\n errorService.warn('ratingPopup:', rejection);\n });\n }\n\n function handleScopeDestroyed() {\n showReviewsPopupEventUnsub();\n }\n }\n})();\n'use strict';\n\n(function () {\n ratingDataFactory.$inject = [\"$http\", \"ENV\", \"$q\", \"sessionStorageService\", \"errorService\"];\n angular.module('kappGlobal.rating').factory('ratingDataService', ratingDataFactory);\n function ratingDataFactory($http, ENV, $q, sessionStorageService, errorService) {\n return {\n 'getProductReviews': getProductReviews\n };\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getProductReviews(productId, popupActive) {\n var locale = ENV.locale,\n localKey = '',\n deferred = $q.defer(),\n bvKeys = {\n 'en\\-global': { 'stg': 'caBst7vBCtRNgQQxEC2CbwjvR9FIUDcFAHFyXwAkT3QH0', 'prd': 'SoXS4rfxTjREOzlOF0SmlOT3m5zewmQEhWgVkBmP' },\n 'en-gb': { 'stg': 'ca5wj0Tkb40EOYwllxyc9U5IvvUg0aovEPmu0UKRkpgag', 'prd': 'iT2Xs3kjMPUlVwDYeMfbC30CmD0Uo5e9x5jK317R' },\n 'en-us': { 'stg': 'caeTW2Wz0IbCIZ7K6zy8xSORfsqwl2D7NE8eKfRkp6mR4', 'prd': 'qynaEajrqiMRN5GWW5TykMRF8OVjxN8xZnW5n7sV' },\n 'de-de': { 'stg': 'caMegpfHc9aR33Ln2JNhR1qMcbndtTTu5EOwSV9QtU4es', 'prd': 'f6CFfuEGMkEng0HZ4hVKgrqe8MmsJh91tOkMGSeN' },\n 'es-mx': { 'stg': 'caVzLNrPC7eWB6N7AQgAuQSjAe61k0SJ2oafIteSeaZD0', 'prd': 'FGpAEDZORCwHLLDQb7yda6VUIA3d2HFGe0tkBRai' },\n 'es-es': { 'stg': 'caZN8puAQoLqqbyliP0GfuXPWpyD2YK493IhomwXUuvR8', 'prd': '7uVQbzTcN0l88FYkxoCVMWAH29RvwiCbB8ViqExU' },\n 'fr-fr': { 'stg': 'carrESPmA1PYggPmmtAiG7breXZOtZR8cJHbxPXaC0hac', 'prd': 'RrLCm2nSxADM0CitQ2zbZYfDByjZG7lhdyfy2fAD' },\n 'fr-be': { 'stg': 'carrESPmA1PYggPmmtAiG7breXZOtZR8cJHbxPXaC0hac', 'prd': 'RrLCm2nSxADM0CitQ2zbZYfDByjZG7lhdyfy2fAD' },\n 'it-it': { 'stg': 'caOSimTdXgLnHCUxWBMdWfLM9Bx1j1klnWLfSukPvbA4U', 'prd': '8KNt4BQKitsuHE33d5l1pu3TNRVTRtpTPm2jH6sC' },\n 'nl-nl': { 'stg': 'ca4Mjoe43f8W4pVp9xPF5MxKBRjPnVkGwmanu4PTsVLvw', 'prd': 'SQqrooQYAvQC6SGBFucDlAU4mknMFkkAOYgwuAWB' },\n 'pt-br': { 'stg': 'carZBTVHWSjpR7Q78tZBRBlPR4fBL4PVYaXFLXLtjlZKc', 'prd': 'CPHJ8men4MhvDbpcrM0WRGKoBKZ5uu4KrChBS4nx' },\n 'tr-tr': { 'stg': 'cavvd0H7106fUgPru6O7s2pfr8IEIRgZ96FQO5LV8qa0k', 'prd': 'JSpHM6r79ZZxjMH9Wt4iNXf6tbQFP1Zn3rYCdvYx' },\n 'en-au': { 'stg': 'caUSqmUjIpDHoOQbF0G5mCIFvHIeMAvhlZwMyHXPWNe6s', 'prd': 'ErTaKztldIFfBPVJJrrAuEF0lloVOFdcus6xobnz' },\n 'en-za': { 'stg': 'caBm5x4OK07BqVsseBH1FsfMeVk5lc9udBiy9xxqdGJPw', 'prd': 'socKKGbzx1AFSiCf5HY7o77dZ413RgHzEFFSHJ1z' },\n 'en-in': { 'stg': 'cavuw4tFdeIF3Rqn4Omimh8itmYE2De0Czn3WV35k52xY', 'prd': 'KjrjPCS2G24G54vtTIkLLsTXSLWebf7NrSz8ZUWZ' },\n 'en-ae': { 'stg': 'caNc9CZFhryR9rrgZfO63kcVg0rpqaBYSA8pdXY3LMZ2E', 'prd': 'es9rmflKMOa4clX8mgponMwvsE3JVwlqUULUkrnM' },\n 'ar-ae': { 'stg': 'caZfrlcJUk9SRYAopLzHQkxxrFk2SJpKU6IsJeD1OcFMA', 'prd': 'es9rmflKMOa4clX8mgponMwvsE3JVwlqUULUkrnM' },\n 'sv-se': { 'stg': 'cawERHSSqaHLSJmSw4axAFypWGlOFU8IPEKlcURjFb08A', 'prd': 'CyNMdo1pOxktlHHbLfVrr0EqcUdr9tie09gDVDaa' },\n 'da-dk': { 'stg': 'caHPJwtg2jhjGKzhlPecgUfduBrDlqlZpiTmlOIdRarMY', 'prd': 'caFvvPPqgu1NqAGnpghLzHPGTkMtqIJtG1Ra8ZZE5OaxQ' },\n 'nb-no': { 'stg': 'cawkB2CPhbOZok4H8gu8yZKNLMp7E3ct97Dj2ERZi86D0', 'prd': 'caR1efEJ3uUnQCrIVRuMXxCXBAsnICKqWL6Z7AdiWqWwA' },\n 'zh-cn': { 'stg': 'cajtZIfFT7ZPsjo0yfCRB4RdU1pEvL08Q7bQ8oNSvSUbI', 'prd': 'caNIOX4FfLa2RwCzgodRNrZKquZB66LVVr5Y792jIr1nc' },\n 'ja-jp': { 'stg': 'caPuv3LCkvwbAermx7Un9qFRIsZyhuA1WwEPCv2U5HrPo', 'prd': 'caSk15kP4lHLzcnGHpQfHn4RKaOkCtZ8gvIO6XMfLlNMQ' }\n };\n\n if (!productId) {\n errorService.warn('rating: Product ID empty');\n deferred.reject();\n return deferred.promise;\n }\n\n if (locale in bvKeys) {\n localKey = bvKeys[locale]['prd'];\n } else {\n errorService.warn('rating: No key for this locale');\n deferred.reject();\n return deferred.promise;\n }\n\n var cachedData = sessionStorageService.get(popupActive ? 'ratingReviews' + productId : 'ratingStatistics' + productId);\n\n if (cachedData) {\n deferred.resolve(cachedData);\n return deferred.promise.then(function (cachedData) {\n return { 'data': cachedData };\n }, function (error) {\n return deferred.reject(error);\n });\n }\n\n if (popupActive) {\n var getUrl = 'https://api.yotpo.com/v1/widget';\n return $http.get(getUrl + '/' + localKey + '/products/' + productId + '/reviews.json?page=1&per_page=100&sort=date').then(function (response) {\n sessionStorageService.set('ratingReviews' + productId, response.data);\n return response;\n }, handleRejection);\n } else {\n var _getUrl = 'https://api.yotpo.com/products';\n return $http.get(_getUrl + '/' + localKey + '/' + productId + '/bottomline').then(function (response) {\n sessionStorageService.set('ratingStatistics' + productId, response.data);\n return response;\n }, handleRejection);\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.renewAndAbout').component('renewAndAbout', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/renew-and-about/templates/renew-and-about.html',\n 'controller': 'renewAndAboutController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n renewAndAboutController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.renewAndAbout').controller('renewAndAboutController', renewAndAboutController);\n\n function renewAndAboutController(directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'renew-and-about').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.renewalSteps').component('renewalSteps', {\n 'bindings': {\n 'resource': '@',\n 'renewalStepsData': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/renewal-steps/templates/renewal-steps.template.html',\n 'controller': 'renewalStepsController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.renewalSteps').controller('renewalStepsController', renewalStepsController);\n\n function renewalStepsController() {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.data = JSON.parse(ctrl.renewalStepsData).fields;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.resourceDocuments').component('b2bResourceDocuments', {\n 'bindings': {\n 'resource': '@',\n 'template': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/resource-documents/templates/resource-documents.html',\n 'controller': 'b2bResourceDocumentsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n b2bResourceDocumentsController.$inject = [\"$element\", \"$timeout\", \"$http\", \"$scope\", \"$q\", \"directiveData\", \"appHelperService\", \"errorService\", \"ngDialog\"];\n angular.module('kappGlobal.resourceDocuments').controller('b2bResourceDocumentsController', b2bResourceDocumentsController);\n\n function b2bResourceDocumentsController($element, $timeout, $http, $scope, $q, directiveData, appHelperService, errorService, ngDialog) {\n var ctrl = this,\n $dialog = ngDialog;\n ctrl.scopeId = $scope.$id;\n ctrl.videoPopup = videoPopup;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'resource-documents').then(function (response) {\n ctrl.data = response.data.fields;\n\n // get resource element\n var promises = ctrl.data.resourceDeckItems.map(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n return ctrl.data.resourceDeckItems[index] = response.data.fields;\n }, handleRejection);\n }\n });\n\n $q.all(promises).then(function () {\n $timeout(function () {\n runScripts();\n });\n }, handleRejection);\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function videoPopup(url) {\n var embedSrc = url,\n sources = {\n 'youtube': {\n 'site': 'youtube.com',\n 'id': 'v=',\n 'src': '//www.youtube.com/embed/%id%?autoplay=1&rel=0'\n },\n 'gmaps': {\n 'site': '//maps.google.',\n 'src': '%id%&output=embed'\n }\n };\n\n _.forEach(sources, function (item) {\n if (embedSrc.indexOf(item.site) > -1) {\n if (item.id) {\n if (angular.isString(item.id)) {\n embedSrc = embedSrc.substr(embedSrc.lastIndexOf(item.id) + item.id.length, embedSrc.length);\n }\n }\n embedSrc = item.src.replace('%id%', embedSrc);\n\n return false;\n }\n });\n\n return $dialog.open({\n 'template': '
    ',\n 'className': 'ngdialog-iframe ngdialog-flyout',\n 'showClose': true,\n 'plain': true,\n 'name': 'video-popup'\n });\n }\n\n function runScripts() {\n var maxSlides = ctrl.data && ctrl.data.slides ? parseInt(ctrl.data.slides) : 3,\n arrows = !!(ctrl.data && ctrl.data.slideArrows && ctrl.data.slideArrows.length > 0);\n\n $($element).find('.carousel.carousel-' + ctrl.scopeId).not('.slick-initialized').slick({\n 'mobileFirst': true,\n 'infinite': arrows,\n 'arrows': false,\n 'slide': 'div',\n 'accessibility': false,\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'dots': true,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 769,\n 'settings': {\n 'slidesToShow': maxSlides,\n 'slidesToScroll': maxSlides,\n 'arrows': arrows\n }\n }, {\n 'breakpoint': 661,\n 'settings': {\n 'slidesToShow': maxSlides > 2 ? maxSlides - 1 : 1,\n 'slidesToScroll': maxSlides > 1 ? maxSlides - 1 : 1,\n 'arrows': arrows\n }\n }]\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.rss').component('rssFeedsDetails', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/rss/templates/rss-feeds-details.html',\n 'controller': 'rssFeedsDetailsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n rssFeedsDetailsController.$inject = [\"contentRepoService\", \"errorService\", \"ENV\"];\n angular.module('kappGlobal.rss').controller('rssFeedsDetailsController', rssFeedsDetailsController);\n\n function rssFeedsDetailsController(contentRepoService, errorService, ENV) {\n var ctrl = this;\n ctrl.details = {};\n ctrl.getTrustAsHtml = getTrustAsHtml;\n ctrl.$onInit = activate;\n ctrl.bgSrc = 'content/' + ENV.locale + '/images/repository/headers/press-release-post-header.jpg';\n\n function activate() {\n getDetails();\n }\n\n function getTrustAsHtml() {\n return contentRepoService.getTrustAsHtml(ctrl.details.body);\n }\n\n function getDetails() {\n var path = contentRepoService.getPathFromUrl();\n return contentRepoService.getLinkMediaByPath(path).then(function (response) {\n ctrl.details = contentRepoService.populateLinkFields(response['data'], path);\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.rss').component('rssFeeds', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/rss/templates/rss-feeds.html',\n 'controller': 'rssFeedsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n rssFeedsController.$inject = [\"contentRepoService\", \"errorService\", \"$location\"];\n angular.module('kappGlobal.rss').controller('rssFeedsController', rssFeedsController);\n\n function rssFeedsController(contentRepoService, errorService, $location) {\n var ctrl = this,\n filterSelectorDefault = 'Sort by',\n filterSelectorDate = 'Date';\n ctrl.resources = [];\n ctrl.filterSelections = [filterSelectorDefault, filterSelectorDate];\n ctrl.resourcesTotalCount = 0;\n ctrl.currentPage = Math.max(+$location.search().rel || 1, 1);\n ctrl.pageSize = 10;\n ctrl.changeFilter = changeFilter;\n ctrl.getUserFriendlyUrl = getUserFriendlyUrl;\n ctrl.pageChangeHandler = pageChangeHandler;\n ctrl.$onInit = activate;\n\n function activate() {\n getResourceListData();\n getFilterSelections();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function changeFilter(selection) {\n ctrl.currentPage = 1;\n selection = selection === filterSelectorDefault || selection === filterSelectorDate ? '' : selection;\n return getResourceListData('', '', selection);\n }\n\n function getResourceListData() {\n var contentType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var category = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var subCat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n return contentRepoService.search(ctrl.currentPage, ctrl.pageSize, 'pr', contentType, category, subCat).then(function (response) {\n var responseData = response['data'];\n ctrl.resourcesTotalCount = responseData['count'];\n responseData['docs'].map(function (doc) {\n getLinkMediaByPath(doc['Url']);\n });\n }, handleRejection);\n }\n\n function pageChangeHandler(pageNumber) {\n ctrl.currentPage = pageNumber;\n var selector = ctrl.selector === filterSelectorDefault ? '' : ctrl.selector;\n return getResourceListData('', '', selector);\n }\n\n function getLinkMediaByPath(link) {\n ctrl.resources = [];\n return contentRepoService.getLinkMediaByPath(link).then(function (response) {\n ctrl.resources.push(contentRepoService.populateLinkFields(response.data, link));\n }, handleRejection);\n }\n\n function getUserFriendlyUrl(item) {\n return contentRepoService.getUserFriendlyUrl(item.url);\n }\n\n function getFilterSelections() {\n return contentRepoService.getCategories().then(function (response) {\n var pr = response['data']['pr'];\n ctrl.filterSelections = contentRepoService.getCategoriesFromObject(pr, ctrl.filterSelections).categoriesList;\n ctrl.selector = ctrl.filterSelections[0];\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n runOnLast.$inject = [\"$log\"];\n angular.module('kappGlobal.runOnLast', []).directive('runOnLast', runOnLast);\n function runOnLast($log) {\n return {\n 'link': function link(scope, element, attrs) {\n if (scope.$last) {\n try {\n scope.$parent.$ctrl[attrs.runOnLast]();\n } catch (e) {\n $log.warn('\\'' + attrs.runOnLast + '\\'' + ' not a function.');\n }\n }\n },\n 'restrict': 'A'\n };\n }\n})();\n'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\n(function () {\n 'use strict';\n\n searchService.$inject = [\"$http\", \"$window\", \"$location\", \"$stateParams\", \"ENV\"];\n angular.module('kappGlobal.search').factory('searchService', searchService);\n\n function searchService($http, $window, $location, $stateParams, ENV /*, $rootScope*/) {\n var apiEndpoint = 'https://api-router.kaspersky-labs.com/search';\n var searchUrl = apiEndpoint + '/search';\n var autocompleteUrl = apiEndpoint + '/autocomplete';\n\n var envLang = ENV.locale.match(/^\\w+/i);\n var envCountry = ENV.locale.match(/\\w+$/i);\n\n return {\n 'search': search,\n 'getDataPage': getDataPage,\n 'getSearchQueryValue': getSearchQueryValue,\n 'mapSearchResult': mapSearchResult,\n 'clearLocationSearch': clearLocationSearch,\n 'autocompleteAPI': autocompleteAPI,\n 'setUrlWithSearchQuery': setUrlWithSearchQuery\n };\n\n function search(queryText, section, _sort) {\n var languages = $window.navigator['languages'],\n languageCode = envLang || getCurrentLanguageCode(languages) || 'en',\n countryCode = envCountry || getCurrentCountryCode(languages) || 'global',\n sort = _sort === 'date' ? 'pdate' : '';\n return $http.get(searchUrl + ('?query=' + encodeURIComponent(queryText) + '&languageCode=' + languageCode + '&countryCode=' + countryCode + '&sec=' + section + '&sort=' + sort), { 'withCredentials': true });\n }\n\n function getDataPage() {\n var searchId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var pageNumber = arguments[1];\n\n return $http.get(apiEndpoint + '/getdatapage?searchId=' + searchId + '&pageNumber=' + pageNumber, { 'withCredentials': true });\n }\n\n function getCurrentCountryCode(data) {\n var _data = _slicedToArray(data, 1),\n dataArray = _data[0],\n _dataArray$split = dataArray.split('-'),\n _dataArray$split2 = _slicedToArray(_dataArray$split, 2),\n countryCode = _dataArray$split2[1];\n\n return countryCode.toLowerCase();\n }\n\n function getCurrentLanguageCode(data) {\n var _data2 = _slicedToArray(data, 1),\n dataArray = _data2[0],\n _dataArray$split3 = dataArray.split('-'),\n _dataArray$split4 = _slicedToArray(_dataArray$split3, 1),\n languageCode = _dataArray$split4[0];\n\n return languageCode.toLowerCase();\n }\n\n function getSearchQueryValue() {\n return $stateParams.query;\n }\n\n function setUrlWithSearchQuery(queryText) {\n $location.path('/search').search({ 'query': queryText });\n }\n\n function mapSearchResult(data) {\n return {\n 'searchId': data['search_id'],\n 'numberOfPages': data['pages'],\n 'count': data['count']\n };\n }\n\n function clearLocationSearch() {\n $location.search('searchPageNumber', null);\n }\n\n function autocompleteAPI(phrase, count) {\n count = count || 10;\n phrase = phrase || '';\n\n return $http.get(autocompleteUrl + '/' + envCountry + '/' + envLang + '?term=' + phrase + '&count=' + count);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.siteBar').component('siteBar', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/site-bar/templates/site-bar.html',\n 'controller': 'siteBarController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n siteBarController.$inject = [\"directiveData\", \"errorService\", \"windowHelperService\"];\n angular.module('kappGlobal.siteBar').controller('siteBarController', siteBarController);\n\n function siteBarController(directiveData, errorService, windowHelperService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.closeBar = closeBar;\n ctrl.$onInit = activate;\n ctrl.showSitebar = true;\n\n function activate() {\n getData();\n }\n\n function hideSideBarForNonIndianIP() {\n ctrl.showSitebar = windowHelperService.getIPCountry() === 'IN';\n }\n\n function getData() {\n return directiveData.get('/site-header/site-bar.json').then(function (response) {\n ctrl.data = response.data.fields;\n if (ctrl.data.hideSiteBarForNonIndianIP && ctrl.data.hideSiteBarForNonIndianIP[0] === 'true') hideSideBarForNonIndianIP();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function closeBar() {\n ctrl.data.active = 'No';\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.footerGlobal').component('footerGlobal', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/site-footer/templates/site-footer.html',\n 'controller': 'footerGlobalController',\n 'bindings': {\n 'size': '@'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n footerGlobalController.$inject = [\"$state\", \"directiveData\", \"SETUP\", \"errorService\", \"windowHelperService\", \"ENV\", \"appHelperService\"];\n angular.module('kappGlobal.footerGlobal').controller('footerGlobalController', footerGlobalController);\n\n function footerGlobalController($state, directiveData, SETUP, errorService, windowHelperService, ENV, appHelperService) {\n var ctrl = this;\n var noCustomFooter = void 0;\n var newsletterEnabled = void 0;\n var date = new Date();\n\n ctrl.data = {};\n ctrl.cCountry = '' + SETUP.country;\n ctrl.year = date.getFullYear();\n ctrl.displayRssLink = true;\n ctrl.locale = ENV.locale;\n ctrl.$onInit = activate;\n ctrl.toggleSelector = toggleSelector;\n ctrl.closeSelector = closeSelector;\n ctrl.displayNewsletterForm = displayNewsletterForm;\n ctrl.handleNewsletterLoaded = handleNewsletterLoaded;\n ctrl.getSiteFooterCopyright = getSiteFooterCopyright;\n ctrl.isB2B = $state.current.parent === 'smb' || $state.current.parent === 'vsb';\n ctrl.isENT = $state.current.parent === 'enterprise';\n\n function activate() {\n getPrimaryFooterData().then(function () {\n getFooterBySection();\n getCountrySelector();\n getProductList();\n }, function (rejection) {\n errorService.warn(rejection);\n getFooterBySection();\n getCountrySelector();\n getProductList();\n });\n\n if (['big', 'small'].indexOf(ctrl.size) !== -1) {\n ctrl.bigFooter = ctrl.size === 'big';\n ctrl.smallFooter = ctrl.size === 'small';\n } else {\n if ($state.current.parent === 'home-security-section' || $state.current.name === 'search') {\n ctrl.bigFooter = true;\n } else {\n ctrl.smallFooter = true;\n }\n }\n ctrl.isJP = isJP();\n }\n\n function getPrimaryFooterData() {\n return directiveData.getLocal('footer/footer').then(function (response) {\n ctrl.primaryFooterData = response.data.fields;\n ctrl.cCountry = ctrl.primaryFooterData.currentCountry || ctrl.cCountry;\n }, handleRejection);\n }\n\n function getSiteFooterCopyright() {\n var isHomepage = $state.current.name === 'homepage';\n var result = void 0;\n\n if (isHomepage && ctrl.data.copyrightHomepage) {\n result = composeFooter(ctrl.data.copyrightHomepage);\n } else {\n result = ctrl.isB2B ? composeFooter(ctrl.data.copyright) : ctrl.generalFooterData && composeFooter(ctrl.generalFooterData.copyright);\n }\n return result;\n }\n\n /**\n * Allow WP to change the order of the footer information.\n * For example, moving the date before the copyright symbol.\n * They'd need to use ((copyright)) and ((year)) in the tridion field\n * For example:\n * \"Kaspersky ((copyright)) ((year))\"\n * \"((year)) Kaspersky ((copyright))\"\n * @param {[String]} footer The actual footer to manipulate\n * @return {[String]}\n */\n function composeFooter(footer) {\n if (footer && footer.search(/(\\(\\((year|copyright)\\)\\))/) > -1) {\n footer = footer.replace('((copyright))', '©').replace('((year))', ctrl.year);\n\n ctrl.hasCustomFooter = true;\n }\n\n return footer;\n }\n\n function getFooterBySection() {\n return directiveData.getBySection('footer').then(function (response) {\n if (response && response.data.fields) {\n ctrl.data = response.data.fields;\n setDisplayRssLink(ctrl.data);\n }\n }, function (rejection) {\n errorService.warn(rejection);\n noCustomFooter = true;\n }).then(setGeneralFooterData);\n }\n\n function setGeneralFooterData() {\n overrideCopyrightForSMB_VSB_ENT(ctrl.primaryFooterData);\n ctrl.generalFooterData = ctrl.primaryFooterData;\n setDisplayRssLink(ctrl.generalFooterData);\n if (noCustomFooter) ctrl.data = ctrl.generalFooterData;\n }\n\n /**\n * Overrides copyright value based on\n * https://jira.kaspersky.com/browse/SMB-4260\n * https://jira.kaspersky.com/browse/GWP-33973\n * @param data\n */\n function overrideCopyrightForSMB_VSB_ENT(data) {\n var pathname = windowHelperService.getPathName(),\n getOverride = function getOverride(key) {\n return data[key] ? data[key] : data.copyright;\n };\n\n if (pathname === '/renewal-center/smb') {\n data.copyright = getOverride('copyright-smb');\n } else if (pathname === '/renewal-center/vsb') {\n data.copyright = getOverride('copyright-vsb');\n } else if (ctrl.isENT) {\n data.copyright = getOverride('copyright-ent');\n }\n }\n\n function getCountrySelector() {\n return directiveData.getLocal('footer/country-selector').then(function (response) {\n if (response.data && response.data.fields) {\n ctrl.cSelector = response.data.fields.Body;\n }\n }, handleRejection);\n }\n\n function getProductList() {\n return directiveData.getLocal('footer/product-list').then(function (response) {\n if (response.data && response.data.fields) {\n ctrl.productList = response.data.fields.Body;\n }\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function toggleSelector($event) {\n $event.preventDefault();\n var $footer = $('.footer-selector');\n $($event.currentTarget).toggleClass('active');\n $footer.slideToggle(400);\n\n $('html, body').animate({\n 'scrollTop': $footer.offset().top - 20\n }, 700);\n }\n\n function closeSelector($event) {\n $('.footer-selector').slideToggle(500);\n $('.country-selector-button').removeClass('active');\n\n $event.preventDefault();\n }\n\n function setDisplayRssLink(data) {\n if (data && data.rssLink && data.rssLink.hide[0] === 'Yes') ctrl.displayRssLink = false;\n }\n\n function handleNewsletterLoaded(componentEnabled) {\n newsletterEnabled = componentEnabled;\n }\n\n function displayNewsletterForm() {\n return !windowHelperService.isMobile() || newsletterEnabled;\n }\n\n function isJP() {\n return appHelperService.assertStateByName(['product-kss', 'product-kfa', 'kfa-thank-you']) && ctrl.locale === 'ja-jp';\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.footerGlobalWrapper').component('footerGlobalWrapper', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/site-footer-wrapper/templates/site-footer-wrapper.html',\n 'controller': 'footerGlobalWrapperController',\n 'bindings': {\n 'size': '@'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n footerGlobalWrapperController.$inject = [\"$scope\", \"$timeout\"];\n angular.module('kappGlobal.footerGlobalWrapper').controller('footerGlobalWrapperController', footerGlobalWrapperController);\n\n function footerGlobalWrapperController($scope, $timeout) {\n var $ctrl = this;\n\n $ctrl.showFooter = true;\n\n $scope.$on('$stateChangeStart', function () {\n $ctrl.showFooter = false;\n });\n\n $scope.$on('$stateChangeSuccess', function () {\n $timeout(function () {\n $ctrl.showFooter = true;\n });\n });\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.siteHeader').component('searchBar', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/site-header/templates/search-bar_main-nav.html',\n 'controller': 'searchBarController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n searchBarController.$inject = [\"$state\", \"directiveData\", \"searchService\", \"$document\", \"$rootScope\", \"errorService\"];\n angular.module('kappGlobal.siteHeader').controller('searchBarController', searchBarController);\n\n function searchBarController($state, directiveData, searchService, $document, $rootScope, errorService) {\n var ctrl = this,\n mainNav = angular.element($document[0].querySelector('.main-nav')),\n searchField = $document[0].getElementById('search-main-nav');\n\n ctrl.active = false;\n ctrl.uiStrings = {};\n ctrl.searchTrigger = searchTrigger;\n ctrl.closeSearchTrigger = closeSearchTrigger;\n ctrl.search = search;\n ctrl.goToSearchPage = goToSearchPage;\n ctrl.$onInit = activate;\n ctrl.$onDestroy = handleDestruction;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.uiStrings = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function search() {\n searchService.autocompleteAPI(ctrl.searchBar).then(function (suggestions) {\n $rootScope.$emit('autocompleteCall', suggestions.data.terms);\n });\n }\n\n function goToSearchPage(e) {\n if (e && e.type === 'keypress') {\n var keyCode = e.which || e.keyCode;\n\n if (keyCode === 13) {\n $state.go('search', {\n 'query': ctrl.searchBar\n });\n }\n } else {\n $state.go('search', {\n 'query': ctrl.searchBar\n });\n }\n }\n\n function searchTrigger($event) {\n $event.stopPropagation();\n $event.preventDefault();\n ctrl.active = true;\n\n if (angular.isDefined(ctrl.searchBar) && ctrl.searchBar.length) {\n return goToSearchPage();\n }\n\n mainNav.toggleClass('search-active');\n searchField.focus();\n }\n\n function closeSearchTrigger($event) {\n $event.stopPropagation();\n $event.preventDefault();\n ctrl.active = false;\n ctrl.searchBar = '';\n mainNav.toggleClass('search-active');\n }\n\n // Autocomplete functionality starts here\n\n var autoOff = $rootScope.$on('autocompleteCall', function (ev, val) {\n var reg = new RegExp(val[0], 'ig'),\n searchString = val[0];\n\n ctrl.autocompleteQ = val.filter(function (value, index) {\n return val.indexOf(value) === index;\n });\n ctrl.autocompleteQhtml = ctrl.autocompleteQ.map(function (item) {\n return item.replace(reg, '' + searchString + '');\n });\n });\n\n function handleDestruction() {\n autoOff();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.siteHeader').component('siteHeaderScrollNav', {\n 'bindings': {\n 'items': '<'\n },\n 'template': '\\n\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t {{item.title}}\\n\\t\\t\\t\\t
  • \\n ',\n 'controller': 'siteHeaderScrollNavController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n siteHeaderScrollNavController.$inject = [\"errorService\"];\n angular.module('kappGlobal.siteHeader').controller('siteHeaderScrollNavController', siteHeaderScrollNavController);\n\n function siteHeaderScrollNavController(errorService) {\n var ctrl = this;\n ctrl.animatedScrollTo = animatedScrollTo;\n\n function animatedScrollTo(id, $event) {\n $event.preventDefault();\n $event.stopPropagation();\n\n var target = $('#' + id);\n var offset = $('.site-header').outerHeight(true);\n\n if (!target.length) return errorService.warn('Couldn\\'t find [' + id + '] on the page');\n\n $('html, body').animate({\n 'scrollTop': target.offset().top - offset\n }, 500);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.siteHeader').component('siteHeader', {\n 'bindings': {\n 'resource': '@',\n 'hideDesktopMenu': '@',\n 'showCurrencySelector': '@',\n 'hideMainNav': '<'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/site-header/templates/site-header.html',\n 'controller': 'siteHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n siteHeaderController.$inject = [\"$http\", \"directiveData\", \"appHelperService\", \"windowHelperService\", \"$scope\", \"$q\", \"errorService\", \"rootScopeHelper\", \"$timeout\", \"$element\", \"ENV\", \"tracking\"];\n angular.module('kappGlobal.siteHeader').controller('siteHeaderController', siteHeaderController);\n\n function siteHeaderController($http, directiveData, appHelperService, windowHelperService, $scope, $q, errorService, rootScopeHelper, $timeout, $element, ENV, tracking) {\n var ctrl = this,\n hasRun = void 0,\n promises = [],\n timeoutPromise = [],\n utmParams = {};\n\n ctrl.showMenuUtility = !appHelperService.assertStateByName('search');\n ctrl.getMainNav = getMainNav;\n ctrl.$onInit = activate;\n ctrl.$onDestroy = destroyGlobalListeners;\n ctrl.getInnerItems = getInnerItems;\n ctrl.isMobile = windowHelperService.isMobile();\n ctrl.hideGetInTouchCta = hideGetInTouchCta;\n ctrl.hasCrimeStopperLogo = hasCrimeStopperLogo;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n\n angular.element(window).on('resize.siteHeader', function () {\n ctrl.isMobile = windowHelperService.isMobile();\n $scope.$digest();\n });\n\n function activate() {\n utmParams = tracking.getUtmParams();\n getMainNav();\n }\n\n rootScopeHelper.on($scope, 'ngRender', updateUtm);\n\n function updateUtm() {\n directiveData.getByUrl('meta').then(function (response) {\n ctrl.utm = response.data.fields.utm;\n if (!ctrl.rightMenuItem || !ctrl.utm) return;\n if (ctrl.rightMenuItem.ctaPassParams && ctrl.rightMenuItem.ctaLink.indexOf('?') !== -1) {\n ctrl.rightMenuItem.ctaLink = ctrl.rightMenuItem.ctaLink + ctrl.utm.replace('?', '&');\n } else {\n ctrl.rightMenuItem.ctaLink = ctrl.rightMenuItem.ctaLink + ctrl.utm;\n }\n }).catch(handleRejection);\n }\n\n function hasCrimeStopperLogo() {\n var states = ['home-security', 'product-kss'];\n return appHelperService.assertStateByName(states) && ENV.locale === 'en-au';\n }\n\n function hideGetInTouchCta() {\n if (!ctrl.rightMenuItem || !ctrl.rightMenuItem.ctaText || !ctrl.rightMenuItem.ctaLink) return false;\n var states = void 0;\n if (appHelperService.stateIncludes('enterprise')) {\n states = ['enterprise-wiki-section', 'enterprise-wiki-section-home'];\n return !appHelperService.assertStateByName(states);\n } else {\n states = ['vsb-home', 'smb-home'];\n return appHelperService.assertStateByName(states);\n }\n }\n\n function destroyGlobalListeners() {\n angular.element(window).off('resize.siteHeader');\n }\n\n function getMainNav() {\n return directiveData.getBySection(ctrl.resource || 'main-nav').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.mainNavItems = response.data.fields['mainNavItem'];\n ctrl.rightMenuItem = response.data.fields.rightMenuItem;\n if (ctrl.rightMenuItem && ctrl.rightMenuItem.ctaPassParams) {\n ctrl.rightMenuItem.ctaLink = appHelperService.generateParams(utmParams, ctrl.rightMenuItem.ctaLink);\n }\n $timeout(function () {\n var totalHeight = $($element).find('.site-top').outerHeight(true) + $($element).find('.site-header .site-title').outerHeight(true);\n $element.attr('site-top-height', totalHeight);\n });\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getInnerItems(event) {\n // Megamenu disappearance with delay\n if (event.type === 'mouseleave' && $($element).find('li.hover').length) {\n // When we leave the menu item, add a $timeout promise to \"queue\" - array of promises \"timeoutPromise\"\n // as soon as timeout promise is resolved, remove class hover and remove an item from the array\n // if at the moment of timeout Promise resolution we hover over other nav item with\n // megamenu enabled, then add .hover to that one\n\n timeoutPromise.push([$timeout(function (target) {\n $element.find(target).removeClass('hover');\n timeoutPromise.pop();\n\n if (!timeoutPromise.length && $('.main-menu > .dropdown:hover').length) {\n $('.main-menu > .dropdown:hover').addClass('hover');\n }\n }, 300, true, event.currentTarget), event.currentTarget]);\n } else if (event.type === 'mouseenter') {\n // If the user moved cursor away from megamenu and returned within the timeout delay value\n // cancel the promise and leave the current megamenu hovering\n timeoutPromise = timeoutPromise.filter(function (timer) {\n if (event.currentTarget === timer[1]) {\n $timeout.cancel(timer[0]);\n return false;\n } else return timer;\n });\n // If there are no megamenus with .hover and pending $timeout promise for disappearance and the cursor\n // is on top of megamenu item add class hover to it\n if (!timeoutPromise.length && $('.main-menu > .dropdown:hover').length) $(event.currentTarget).addClass('hover');\n }\n\n if (hasRun) return false;\n hasRun = true;\n\n ctrl.mainNavItems.forEach(function (item, index) {\n if (item.megaMenuItem && item.megaMenuItem.match(/\\.json/)) {\n return $http.get(item.megaMenuItem, { 'cache': true }).then(function (response) {\n var megaMenuItem = ctrl.mainNavItems[index].megaMenuItem = response.data.fields;\n\n if (megaMenuItem.megaSideBlock2) {\n // megaSideBlock2 could be HTML commented out\n // strip out comments and white spaces to avoid creating an additional list item\n megaMenuItem.megaSideBlock2 = megaMenuItem.megaSideBlock2.replaceAll('', '').trim();\n }\n\n if (megaMenuItem.product) {\n megaMenuItem.product.forEach(function (product, idx2) {\n if (product.match(/\\.json/)) {\n promises.push(getProductItems(product, index, idx2));\n }\n });\n }\n if (megaMenuItem.megaMenuGroups) {\n megaMenuItem.megaMenuGroups.forEach(function (menuGroups, idx3) {\n ctrl.mainNavItems[index].megaMenuItem.megaMenuGroups[idx3].groupProduct.forEach(function (grpProduct, idx4) {\n if (grpProduct.match(/\\.json/)) {\n promises.push(getProductGroups(grpProduct, index, idx3, idx4));\n }\n });\n });\n }\n $q.all(promises).then(function () {\n $timeout(function () {\n $element.find('.main-menu > li > ul a').on('click', function () {\n return $($element).find('li.hover').removeClass('hover');\n });\n });\n });\n }, handleRejection);\n }\n });\n }\n\n function getProductItems(product, index, idx2) {\n return $http.get(product, { 'cache': true }).then(function (response) {\n return ctrl.mainNavItems[index].megaMenuItem.product[idx2] = response.data.fields;\n }, handleRejection);\n }\n\n function getProductGroups(grpProduct, index, idx3, idx4) {\n return $http.get(grpProduct, { 'cache': true }).then(function (response) {\n return ctrl.mainNavItems[index].megaMenuItem.megaMenuGroups[idx3].groupProduct[idx4] = response.data.fields;\n }, handleRejection);\n }\n\n rootScopeHelper.on($scope, 'scrollNav', getScrollNavItems);\n\n function getScrollNavItems(event, items) {\n ctrl.scrollNavItems = items;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.siteHeader').component('mainNav', {\n 'bindings': {\n 'resource': '@'\n },\n 'require': {\n 'siteHeader': '^siteHeader'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/site-header/templates/site-header_main-nav.html',\n 'controller': 'mainNavController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n mainNavController.$inject = [\"$state\", \"$window\", \"rootScopeHelper\", \"geoLocationManager\", \"appHelperService\", \"directiveData\", \"templateVersion\", \"$scope\", \"$rootScope\", \"windowHelperService\", \"errorService\", \"tracking\"];\n angular.module('kappGlobal.siteHeader').controller('mainNavController', mainNavController);\n\n function mainNavController($state, $window, rootScopeHelper, geoLocationManager, appHelperService, directiveData, templateVersion, $scope, $rootScope, windowHelperService, errorService, tracking) {\n var ctrl = this,\n curUrl = $state.href($state.current.name, $state.params, { 'absolute': true }),\n geoIP = geoLocationManager.getUserGeoIp(curUrl),\n utmParams = {};\n\n var states = ['search', 'lrc-serial', 'lrc-verdict'];\n\n ctrl.activeState = [];\n ctrl.showMenu = !appHelperService.assertStateByName(states);\n ctrl.getTemplateUrl = getTemplateUrl;\n ctrl.$onInit = activate;\n ctrl.$onDestroy = destroyGlobalListeners;\n ctrl.getInnerItems = getInnerItems;\n ctrl.isSMBSingleColumn = isSMBSingleColumn;\n ctrl.hideGetInTouchCta = hideGetInTouchCta;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n ctrl.isVPN = geoLocationManager.isVpnProhibitedCountry(geoIP);\n\n // Switching the highlighted nav panel item on stateChange\n var stateChangeSuccessListener = $rootScope.$on('$stateChangeSuccess', updateActiveNav);\n\n function updateActiveNav() {\n ctrl.activeState = (appHelperService.getCurrentStateData() || {}).navPath || [];\n }\n\n function getMainNav() {\n return directiveData.getBySection('main-nav').then(function (response) {\n ctrl.entData = response.data.fields.rightMenuItem;\n if (!ctrl.entData) return;\n if (ctrl.entData.ctaPassParams) {\n ctrl.entData.ctaLink = appHelperService.generateParams(utmParams, ctrl.entData.ctaLink);\n }\n }, handleRejection);\n }\n\n function getInnerItems(event, skip) {\n ctrl.siteHeader.getInnerItems(event, skip);\n }\n\n function activate() {\n getData();\n utmParams = tracking.getUtmParams();\n updateActiveNav();\n if (appHelperService.stateIncludes('enterprise')) setENTStateNavIndex();\n if (appHelperService.assertStateByName(['smb-home', 'vsb-home'])) {\n getMainNav().then(function () {\n if (ctrl.entData.ctaLink) overrideSearch();\n });\n }\n }\n\n rootScopeHelper.on($scope, 'ngRender', updateUtm);\n\n function updateUtm() {\n directiveData.getByUrl('meta').then(function (response) {\n ctrl.utm = response.data.fields.utm;\n if (!ctrl.entData || !ctrl.utm) return;\n if (ctrl.entData.ctaPassParams && ctrl.entData.ctaLink.indexOf('?') !== -1) {\n ctrl.entData.ctaLink = ctrl.entData.ctaLink + ctrl.utm.replace('?', '&');\n } else {\n ctrl.entData.ctaLink = ctrl.entData.ctaLink + ctrl.utm;\n }\n }).catch(handleRejection);\n }\n\n function hideGetInTouchCta() {\n if (ctrl.utm) return false;\n var states = void 0;\n if (appHelperService.stateIncludes('enterprise')) {\n states = ['enterprise-wiki-section', 'enterprise-wiki-section-home'];\n return !appHelperService.assertStateByName(states);\n } else {\n states = ['vsb-home', 'smb-home'];\n return appHelperService.assertStateByName(states);\n }\n }\n\n function destroyGlobalListeners() {\n angular.element(window).off('scroll.mainNavController');\n stateChangeSuccessListener();\n }\n\n function setENTStateNavIndex() {\n var sts = ['enterprise-resources', 'enterprise-resource', 'enterprise-case-studies-ferrari'];\n getTemplateVersion().then(function (response) {\n if (sts.indexOf(appHelperService.getCurrentState()) > -1 && response.template === '2.0') {\n updateActiveNav();\n }\n if (response.template === '3.0') {\n getMainNav();\n overrideSearch();\n }\n }, handleRejection);\n }\n\n function getTemplateVersion() {\n return templateVersion.getVer('enterprise-security', 'ent-hp-menu', 'meta').then(function (response) {\n return response.data.fields;\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getTemplateUrl(template) {\n if (template) return '/resources/template/html/modules/_shared/components/site-header/templates/site-header_mega-menu__' + template + '.html';\n }\n\n function getData() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.generalData = response.data.fields;\n }, handleRejection);\n }\n\n function overrideSearch() {\n var $body = $('body');\n\n angular.element($window).on('scroll.mainNavController', function () {\n ctrl.hideSearch = $body.hasClass('sticky-header-on') || $body.hasClass('sticky-lrc-nano');\n\n $scope.$digest();\n });\n }\n\n function isSMBSingleColumn(item) {\n var secNav = item.megaMenuItem.mega_menu_secondary_nav;\n return item.megaMenuItem.menuType === 'smb' && !(secNav && secNav.secondary_nav_side_links && secNav.secondary_nav_side_links.length);\n }\n }\n})();\n'use strict';\n\n(function () {\n\n 'use strict';\n\n angular.module('kappGlobal.siteTop', []).component('siteTop', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/site-top/templates/site-top.html',\n 'controller': 'siteTopController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n siteTopController.$inject = [\"$element\", \"$rootScope\", \"$state\", \"$timeout\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.siteTop').controller('siteTopController', siteTopController);\n\n function siteTopController($element, $rootScope, $state, $timeout, directiveData, errorService) {\n var ctrl = this;\n ctrl.getActiveItem = getActiveItem;\n ctrl.$onInit = activate;\n\n function activate() {\n return directiveData.getLocal('sitetop/sitetop').then(function (response) {\n ctrl.data = response.data.fields;\n prependComment(response.data.id);\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function prependComment(id) {\n $timeout(function () {\n var comment = '';\n $($element).prepend(comment);\n });\n }\n\n function getActiveItem(link) {\n if (!$rootScope.pageDataReady) {\n var pageDataReady = $rootScope.$on('pageDataReady', function () {\n ctrl.breadcrumbs = $rootScope.breadcrumbs;\n pageDataReady();\n });\n } else {\n ctrl.breadcrumbs = $rootScope.breadcrumbs;\n }\n\n if (ctrl.breadcrumbs) {\n return ctrl.breadcrumbs && ctrl.breadcrumbs[1] && ctrl.breadcrumbs[1].link === link || $state.current.url === link;\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.socialSharing').component('socialSharing', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/social-sharing/template/social-sharing.html',\n 'bindings': {\n 'template': '@'\n },\n 'controller': 'socialSharingController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n socialSharingController.$inject = [\"$location\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.socialSharing').controller('socialSharingController', socialSharingController);\n\n function socialSharingController($location, directiveData, errorService) {\n var ctrl = this;\n ctrl.socialData = {};\n ctrl.pageUrl = $location.absUrl();\n ctrl.template = ctrl.template || 'awards';\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.socialData = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.statsWidget').component('statsWidget', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/stats-widget/templates/stats-widget.html',\n 'controller': 'statsWidgetController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n statsWidgetController.$inject = [\"directiveData\", \"errorService\", \"ENV\"];\n angular.module('kappGlobal.statsWidget').controller('statsWidgetController', statsWidgetController);\n\n function statsWidgetController(directiveData, errorService, ENV) {\n var ctrl = this;\n ctrl.$onInit = activate;\n ctrl.locale = ENV.locale;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.get('/site-general/stats-widget/stats-widget.json').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.statsWidgetNumbers').component('statsWidgetNumbers', {\n 'bindings': {\n 'statisticsData': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/stats-widget-numbers/templates/stats-widget-numbers.html',\n 'controller': 'statsWidgetNumbersController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.statsWidgetNumbers').controller('statsWidgetNumbersController', statsWidgetNumbersController);\n\n function statsWidgetNumbersController() {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.data = JSON.parse(ctrl.statisticsData).fields;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.trustpilotReviews').component('trustpilotReviews', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/trustpilot-reviews/templates/trustpilot-reviews.html',\n 'controller': 'trustpilotReviewsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n trustpilotReviewsController.$inject = [\"directiveData\", \"errorService\", \"trustpilotReviewsService\", \"$timeout\", \"$element\"];\n angular.module('kappGlobal.trustpilotReviews').controller('trustpilotReviewsController', trustpilotReviewsController);\n\n function trustpilotReviewsController(directiveData, errorService, trustpilotReviewsService, $timeout, $element) {\n var ctrl = this;\n ctrl.reviews = [];\n ctrl.starsArr = _.range(0, 5, 1);\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'trustpilot-reviews').then(function (response) {\n ctrl.data = response.data.fields;\n if (!ctrl.data) return false;\n ctrl.starsFilter = ctrl.data.starsFilter || '5';\n ctrl.reviewsNum = ctrl.data.reviewsNum || '14';\n ctrl.tagFilter = ctrl.data.tagFilter || '';\n getReviews();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function getReviews() {\n return trustpilotReviewsService.getCustomerReviews(ctrl.starsFilter, ctrl.reviewsNum, ctrl.tagFilter).then(function (response) {\n ctrl.protoReviews = response.data.reviews;\n while (ctrl.protoReviews.length) {\n ctrl.reviews.push(ctrl.protoReviews.splice(0, 2));\n }runScripts();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n $timeout(function () {\n var slickConfig = {\n 'slidesToShow': 1,\n 'dots': true,\n 'accessibility': false,\n 'draggable': false,\n 'arrows': true,\n 'nextArrow': '',\n 'prevArrow': '',\n 'responsive': [{\n 'breakpoint': 769,\n 'settings': {\n 'arrows': false,\n 'dots': true\n }\n }]\n };\n $($element).find('.reviews-list').slick(slickConfig);\n\n $($element).find('.reviews-personal blockquote').dotdotdot({\n 'ellipsis': '... ',\n 'height': 70\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n trustpilotReviewsFactory.$inject = [\"$http\", \"errorService\"];\n angular.module('kappGlobal.trustpilotReviews').factory('trustpilotReviewsService', trustpilotReviewsFactory);\n function trustpilotReviewsFactory($http, errorService) {\n return {\n 'getCustomerReviews': getCustomerReviews\n };\n\n function getCustomerReviews(starsFilter, reviewsNum, tagFilter) {\n return $http.jsonp('https://api.trustpilot.com/v1/business-units/49bd50700000640005042760/reviews?apikey=whUgvv6UJzvK6a1z2M8pK279osL7EdUl&stars=' + starsFilter + '&perPage=' + reviewsNum + '&tagValue=' + tagFilter, { 'jsonpCallbackParam': 'callback' }).then(function (response) {\n return response;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.tabbedSectionBuyblock').component('tabbedSectionBuyblock', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/tabbed-section-buyblock/templates/tabbed-section-buyblock.html',\n 'controller': 'tabbedSectionBuyblockController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n tabbedSectionBuyblockController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.tabbedSectionBuyblock').controller('tabbedSectionBuyblockController', tabbedSectionBuyblockController);\n\n function tabbedSectionBuyblockController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('tabbed-section-buyblock').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.tabbedSectionBuyblock').component('regularSectionTabbed', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/tabbed-section-buyblock/templates/regular-section-tabbed.html',\n 'controller': 'regularSectionTabbedController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n regularSectionTabbedController.$inject = [\"directiveData\", \"errorService\", \"$timeout\", \"$element\"];\n angular.module('kappGlobal.tabbedSectionBuyblock').controller('regularSectionTabbedController', regularSectionTabbedController);\n\n function regularSectionTabbedController(directiveData, errorService, $timeout, $element) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.selected = 0;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n ctrl.selectTab = function (tabIndex) {\n ctrl.selected = tabIndex;\n };\n\n function getData() {\n return directiveData.getByUrl('regular-section-tabbed').then(function (response) {\n ctrl.data = response.data.fields;\n runScripts();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n $timeout(function () {\n //////////////////////////////////////////\n // Tabs desktop -> Dropdown mobile\n //////////////////////////////////////////\n\n // Get the name of currently active tab for mobile list\n var SelectedName = $('ul.tabs li.selected').text();\n $($element).find('.tab-nav').append('
    ' + SelectedName + '
    ');\n $($element).find('.tab-nav').click(function (e) {\n e.stopPropagation();\n $(this).toggleClass('active');\n });\n\n // Close it if user clicks outside\n $('body').click(function () {\n $('.tab-nav').removeClass('active');\n });\n\n $($element).find('.tab-nav .tabs').click(function (e) {\n e.stopPropagation();\n });\n\n // Check when item is clicked and update active tab label\n $($element).find('.tab-nav .tabs li').click(function (e) {\n e.preventDefault();\n var $this = $(this);\n $this.parent().siblings().remove();\n $this.closest('.tab-nav').append('
    ');\n $this.closest('.tab-nav').find('.tab-label').text($(this).text());\n $this.parent().parent().toggleClass('active');\n });\n\n //////////////////////////////////////////\n // Accordion\n\n $($element).find('.accordion-section > li > h4, .ent-accordion .accordion-section .accordion-title').click(function () {\n $(this).parent().toggleClass('open');\n $(this).siblings().slideToggle();\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.videoMarkup').component('videoMarkup', {\n 'bindings': {\n 'video': '<',\n 'article': '<'\n },\n 'template': '',\n 'controller': function controller() {\n var $ctrl = this;\n\n $ctrl.isValid = false;\n\n $ctrl.$onInit = function () {\n var article = $ctrl.article || {};\n var video = $ctrl.video || {};\n\n $ctrl.isValid = video.name && video.description && video.uploadDate;\n\n $ctrl.data = {\n '@context': 'https://schema.org',\n '@type': 'VideoObject',\n 'name': video.name || '',\n 'description': video.description || '',\n 'thumbnailUrl': [article.articleBigImg || article.articleImg || ''],\n 'uploadDate': video.uploadDate\n };\n };\n }\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.vpnProhibitedMessage').component('vpnProhibitedMessage', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/vpn-prohibited-message/templates/vpn-prohibited-message.html',\n 'controller': 'vpnProhibitedMessageController'\n });\n})();\n'use strict';\n\n(function () {\n vpnProhibitedMessageController.$inject = [\"$location\", \"geoLocationManager\", \"vpnProhibitedMessageService\", \"errorService\"];\n angular.module('kappGlobal.vpnProhibitedMessage').controller('vpnProhibitedMessageController', vpnProhibitedMessageController);\n\n function vpnProhibitedMessageController($location, geoLocationManager, vpnProhibitedMessageService, errorService) {\n var ctrl = this;\n ctrl.message = '';\n ctrl.$onInit = activate;\n activate();\n function activate() {\n var url = $location.absUrl();\n ctrl.showMessage = geoLocationManager.showVpnProhibitedMessage(url);\n getProhibitedMessage();\n }\n\n function getProhibitedMessage() {\n return vpnProhibitedMessageService.getVpnProhibitedMessageResource().then(function (resource) {\n ctrl.message = resource.message;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n vpnProhibitedMessageService.$inject = [\"$http\", \"ENV\"];\n angular.module('kappGlobal.vpnProhibitedMessage').factory('vpnProhibitedMessageService', vpnProhibitedMessageService);\n\n function vpnProhibitedMessageService($http, ENV) {\n var serverUrl = '' + ENV.server;\n return {\n 'getVpnProhibitedMessageResource': getVpnProhibitedMessageResource\n };\n function getVpnProhibitedMessageResource() {\n return $http.get(serverUrl + 'vpnmessage/', { 'cache': true });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n localStorageService.$inject = [\"$window\"];\n angular.module('kappGlobal.caching').factory('localStorageService', localStorageService);\n\n function localStorageService($window) {\n var storage = storageAvailable('localStorage');\n\n return {\n 'set': set,\n 'get': get,\n 'remove': remove,\n 'removeAll': removeAll\n };\n\n function storageAvailable(type) {\n try {\n var _storage = $window[type],\n x = '__storage_test__';\n _storage.setItem(x, x);\n _storage.removeItem(x);\n return !_storage.getItem('disableStorage');\n } catch (e) {\n return e instanceof DOMException && (e.code === 22 || e.code === 1014 || e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && storage && storage.length !== 0;\n }\n }\n\n function set(cacheName, data, cacheTimeInMinutes) {\n if (!storage) return null;\n var date = new Date();\n if (angular.isDefined(cacheTimeInMinutes)) {\n date.setHours(date.getHours() + cacheTimeInMinutes / 60);\n } else {\n date = null;\n }\n var dataToCache = {\n 'data': data,\n 'expiryTime': date\n },\n objectToSaveToJSON = angular.toJson(dataToCache);\n localStorage.setItem(cacheName, objectToSaveToJSON);\n }\n\n function get(cacheName) {\n if (!storage) return null;\n var cached = angular.fromJson(localStorage.getItem(cacheName));\n if (cached === null || angular.isUndefined(cached)) {\n return null;\n }\n var currentDate = new Date();\n if (cached.expiryTime !== null && cached.expiryTime < currentDate) {\n return null;\n }\n return cached.data;\n }\n\n function remove(cacheNames) {\n if (!storage) return null;\n if (angular.isArray(cacheNames)) {\n _.forEach(cacheNames, function (cacheName) {\n localStorage.removeItem(cacheName);\n });\n } else {\n localStorage.removeItem(cacheNames);\n }\n }\n\n function removeAll() {\n if (!storage) return null;\n localStorage.clear();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n sessionStorageService.$inject = [\"$window\"];\n angular.module('kappGlobal.caching').factory('sessionStorageService', sessionStorageService);\n\n function sessionStorageService($window) {\n var storage = storageAvailable('sessionStorage');\n\n return {\n 'set': set,\n 'get': get,\n 'remove': remove,\n 'removeAll': removeAll\n };\n\n function storageAvailable(type) {\n try {\n var _storage = $window[type],\n x = '__storage_test__';\n _storage.setItem(x, x);\n _storage.removeItem(x);\n return !_storage.getItem('disableStorage');\n } catch (e) {\n return e instanceof DOMException && (e.code === 22 || e.code === 1014 || e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && storage && storage.length !== 0;\n }\n }\n\n function set(cacheName, data) {\n if (!storage) return null;\n var dataToCache = { 'data': data };\n var objectToSaveToJSON = angular.toJson(dataToCache);\n sessionStorage.setItem(cacheName, objectToSaveToJSON);\n }\n\n function get(cacheName) {\n if (!storage) return null;\n var cached = angular.fromJson(sessionStorage.getItem(cacheName));\n if (cached === null || angular.isUndefined(cached)) {\n return null;\n }\n return cached.data;\n }\n\n function remove(cacheNames) {\n if (!storage) return null;\n if (angular.isArray(cacheNames)) {\n _.forEach(cacheNames, function (cacheName) {\n sessionStorage.removeItem(cacheName);\n });\n } else {\n sessionStorage.removeItem(cacheNames);\n }\n }\n\n function removeAll() {\n if (!storage) return null;\n sessionStorage.clear();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n dynamicModel.$inject = [\"$compile\", \"$parse\"];\n angular.module('kappGlobal.dynamicModelBinding').directive('dynamicModel', dynamicModel);\n\n function dynamicModel($compile, $parse) {\n return {\n 'restrict': 'A',\n 'terminal': true,\n 'priority': 100000,\n 'link': function link(scope, elem) {\n var name = $parse(elem.attr('dynamic-model'))(scope);\n elem.removeAttr('dynamic-model');\n elem.attr('ng-model', name);\n $compile(elem)(scope);\n }\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n appHelperService.$inject = [\"ENV\", \"$location\", \"$state\"];\n angular.module('kappGlobal.helpers').factory('appHelperService', appHelperService);\n function appHelperService(ENV, $location, $state) {\n\n var pageDirection = void 0,\n locale = void 0,\n idGenerator = {};\n\n return {\n 'getPageDirection': getPageDirection,\n 'isPageDirectionRTL': isPageDirectionRTL,\n 'getLocale': getLocale,\n 'setLocale': setLocale,\n 'assertLocaleByName': assertLocaleByName,\n 'getHostName': getHostName,\n 'getLocationHash': getLocationHash,\n 'getLocationPath': getLocationPath,\n 'getCurrentState': getCurrentState,\n 'getCurrentStateData': getCurrentStateData,\n 'assertStateByName': assertStateByName,\n 'stateIncludes': stateIncludes,\n 'searchParam': searchParam,\n 'generateParams': generateParams,\n 'getISOLocale': getISOLocale,\n 'isTrue': isTrue,\n 'isVisibleDOMElement': isVisibleDOMElement,\n 'objectKeysToLowerCase': objectKeysToLowerCase,\n 'generateId': generateId,\n 'getIds': getIds\n };\n\n function isVisibleDOMElement(element) {\n return !!(element && (element.offsetWidth || element.offsetHeight || element.getClientRects && element.getClientRects().length));\n }\n\n /**\n * Returns whether the page direction is LTR or RTL\n * @return {[type]} [description]\n */\n function getPageDirection() {\n if (!pageDirection) {\n pageDirection = isArabic() ? 'rtl' : 'ltr';\n }\n\n return pageDirection;\n }\n\n /**\n * Asserts whether the page direction is RTL\n * @return {Boolean}\n */\n function isPageDirectionRTL() {\n return getPageDirection() === 'rtl';\n }\n\n /**\n * Asserts whether the locale is Arabic\n * @return {Boolean}\n */\n function isArabic() {\n var arabicLocales = ['ar-ar', 'ar-uea', 'ar-qa', 'ar-sa', 'ar-ae'],\n currentLocale = ENV.locale.toLowerCase();\n return arabicLocales.indexOf(currentLocale) > -1;\n }\n\n /**\n * Returns the current locale\n * @return {String} The current locale, e.g. en-au, or, fr-fr\n */\n function getLocale() {\n if (!locale) {\n locale = ENV.locale;\n }\n return locale;\n }\n\n /**\n * Overrides the current locale\n * @param {String} loc The new locale, e.g. en-au, or, fr-fr\n */\n function setLocale(loc) {\n locale = loc;\n return true;\n }\n\n /**\n * Returns the hostname\n * @return {String} The hostname, e.g. example.com\n */\n function getHostName() {\n return $location.host();\n }\n\n /**\n * Returns the content after the hash\n * @return {String} The hash\n */\n function getLocationHash() {\n return $location.hash();\n }\n\n /**\n * Returns the current path\n * @return {String} The path\n */\n function getLocationPath() {\n return $location.path();\n }\n\n /**\n * Returns the current state\n * @return {String} The current state\n */\n function getCurrentState() {\n return $state.current.name;\n }\n\n /**\n * Returns any available state data\n * @return {Object} The state data\n */\n function getCurrentStateData() {\n return $state.current.data || '';\n }\n\n /**\n * Asserts whether the current state matches the one given\n * @param {String|Array} names One or a collection of states to assert\n * @return {Boolean}\n */\n function assertStateByName(names) {\n if (!angular.isArray(names)) return getCurrentState() === names;\n return names.indexOf(getCurrentState()) > -1;\n }\n\n /**\n * Asserts whether the current locale matches the one given\n * @param {String} name The locale to assert\n * @return {Boolean}\n */\n function assertLocaleByName(name) {\n if (!locale) locale = ENV.locale;\n return locale === name;\n }\n\n /**\n * Asserts whether the current state includes the one given\n * @param {String} name The state to assert\n * @return {Boolean}\n */\n function stateIncludes(name) {\n return $state.includes(name);\n }\n\n /**\n * Searches the url parameters.\n * @param {Array|String} names The parameter(s) to assert\n * @return {String} The content of the matched parameter\n */\n function searchParam(names) {\n var paramsObj = $location.search();\n if (!angular.isArray(names)) return paramsObj[names];\n\n var paramValue = void 0;\n _.forEachRight(names, function (name) {\n if (paramsObj[name]) paramValue = paramsObj[name];\n });\n return paramValue;\n }\n\n /**\n * Generates query string parameters from object and appends it to a url\n * Function processes links with their own parameters in the url\n * - Parameters with falsy values are stripped out\n * - In case if the there are 2 entries of the same parameter with different values, both are kept\n * - In case if the there are 2 entries of the same parameter with same values, duplicate is removed\n * @param paramsObj { Object. } a set of parameters to append, each entry contains a string\n * @param link { string } the link to which the parameters will be appended\n * @param stripInitialParams { boolean } Indicates whether to remove link parameters or not\n * @returns { string } final link with all parameters\n */\n function generateParams() {\n var paramsObj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var link = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var stripInitialParams = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var paramsPresentInLink = link.indexOf('?') !== -1;\n var hashPresentInLink = link.indexOf('#') !== -1;\n var hash = link.split('#')[1] ? '#' + link.split('#')[1] : '';\n var noParametersToAppend = !Object.keys(paramsObj).length;\n var resultParams = {};\n var paramsString = noParametersToAppend && !paramsPresentInLink ? '' : '?';\n var initialLinkParamsObj = {};\n\n if (hashPresentInLink) {\n link = link.split('#')[0];\n }\n\n if (paramsPresentInLink) {\n var initialLinkParamsString = link.substr(link.indexOf('?') + 1);\n link = link.substr(0, link.indexOf('?'));\n initialLinkParamsObj = initialLinkParamsString.split('&').reduce(function (acc, param) {\n var splitParam = param.split('=');\n if (angular.isArray(acc[splitParam[0]]) && splitParam[1]) {\n acc[splitParam[0]].push(splitParam[1]);\n } else if (!angular.isArray(acc[splitParam[0]]) && splitParam[1]) {\n acc[splitParam[0]] = [splitParam[1]];\n }\n return acc;\n }, {});\n }\n\n if (stripInitialParams) {\n resultParams = convertObjectKeysToArray(paramsObj);\n } else {\n resultParams = mergeParameterObjects(initialLinkParamsObj, paramsObj);\n }\n\n var keys = Object.keys(resultParams);\n for (var keyNum = 0; keyNum < keys.length; keyNum++) {\n var currentParameterArray = resultParams[keys[keyNum]];\n if (currentParameterArray && currentParameterArray.length) {\n for (var duplicateNum = 0; duplicateNum < currentParameterArray.length; duplicateNum++) {\n paramsString += keyNum === 0 && duplicateNum === 0 ? keys[keyNum] + '=' + currentParameterArray[duplicateNum] : '&' + keys[keyNum] + '=' + currentParameterArray[duplicateNum];\n }\n }\n }\n\n return link + paramsString + hash;\n }\n\n function getISOLocale() {\n return _.find(ENV.ISOConfig, ['locale', ENV.locale]);\n }\n\n /**\n * Returns true if the param passed:\n * - is a boolean === true\n * - is a string equals 'True' || 'Yes'\n * - is an array having the first item equals 'True' || 'Yes'\n * Returns false otherwise.\n * Case insensitive\n * @param o\n * @param variation string variation for 'True' || 'Yes'\n * @example\n * appHelperService.isTrue(value)\n * appHelperService.isTrue(value, 'active')\n * @return {boolean}\n */\n function isTrue(o, variation) {\n if (!o) return false;\n if (o === true) return o;\n\n var value = angular.isArray(o) ? o[0] : o;\n\n if (!value) return false;\n\n var valueLc = value.toLowerCase();\n return variation ? variation.toLowerCase() === valueLc : valueLc === 'true' || valueLc === 'yes';\n }\n\n /**\n * Turns object keys to lowercase, based on a regex match\n * If paramsToProcess regex is not provided, object keys do not change\n * By default matching flag is case insensitive\n * @param {object} obj Contains the object to parse\n * @param {=string} paramsToProcess Regex that matches param keys to be put ot lowercase\n * @param {=string} flags Set regular expression flags\n * @returns {{}} Returns an object with lowercase keys names\n */\n function objectKeysToLowerCase(obj) {\n var paramsToProcess = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'i';\n\n var paramsRegex = new RegExp(paramsToProcess, flags);\n return Object.keys(obj).reduce(function (acc, key) {\n if (paramsToProcess && key.match(paramsRegex)) {\n acc[key.toLowerCase()] = obj[key];\n } else {\n acc[key] = obj[key];\n }\n return acc;\n }, {});\n }\n\n /**\n * Universal function to generate unique ids for collections\n * @param {string} context A string key that holds context\n * @returns {number}\n */\n function generateId(context) {\n if (!idGenerator[context]) {\n idGenerator[context] = 1;\n } else {\n idGenerator[context]++;\n }\n return idGenerator[context];\n }\n\n /**\n * Returns object with ids stored within context\n * @returns { object }\n */\n function getIds() {\n return idGenerator;\n }\n\n /**\n * Merges 2 parameter objects - one level deep\n * @param main {Object.} object containing arrays of strings/numbers\n * @param ext {Object.} object containing plain strings\n * @returns {Object.} object containing arrays of strings/numbers\n */\n function mergeParameterObjects(main, ext) {\n var i = void 0,\n res = angular.extend({}, main);\n var mainKeys = Object.keys(main),\n extKeys = Object.keys(ext);\n for (i = 0; i < extKeys.length; i++) {\n if (mainKeys.indexOf(extKeys[i]) === -1) {\n res[extKeys[i]] = ext[extKeys[i]] && [ext[extKeys[i]]];\n } else {\n if (res[extKeys[i]].indexOf(ext[extKeys[i]]) === -1) res[extKeys[i]].push(ext[extKeys[i]]);\n }\n }\n\n return res;\n }\n\n /**\n * Converts object with plain strings to object with string arrays\n * @param obj { Object. }\n * @returns { Object. }\n */\n function convertObjectKeysToArray(obj) {\n var res = {};\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n res[keys[i]] = obj[keys[i]] && [obj[keys[i]]];\n }\n return res;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.helpers').factory('buyBlockHelperService', appHelperService);\n\n function appHelperService() {\n\n return {\n 'hasPurchaseAsPurchaseType': hasPurchaseAsPurchaseType\n };\n\n function hasPurchaseAsPurchaseType(purchaseType) {\n\n var hasPurchase = purchaseType ? purchaseType === 'Purchase' : true;\n\n return hasPurchase;\n }\n }\n})();\n'use strict';\n\n/* global grecaptcha:false */\n(function () {\n 'use strict';\n\n marketoHelperService.$inject = [\"$window\", \"$q\", \"$rootScope\", \"angularLoad\", \"errorService\", \"ENV\"];\n angular.module('kappGlobal.helpers').factory('marketoHelperService', marketoHelperService);\n\n function marketoHelperService($window, $q, $rootScope, angularLoad, errorService, ENV) {\n\n var siteKey = '6Lf2eUQUAAAAAC-GQSZ6R2pjePmmD6oA6F_3AV7j',\n lang = ENV.locale.substring(0, 2);\n\n return {\n 'loadMarketo': loadMarketo\n };\n\n function loadMarketo(formId, formNr, scope, element) {\n function loadForm() {\n var deferred = $q.defer();\n\n MktoForms2.loadForm('//app-sj06.marketo.com', formId, formNr, function (form) {\n var submitButton = $window.document.querySelector('.mktoButtonRow .mktoButton[type=\"submit\"]');\n\n insertElement(formNr, element);\n renderRecaptcha(formNr);\n\n submitButton.addEventListener('click', submitHandler);\n\n function submitHandler(e) {\n e.preventDefault();\n if (form.validate()) {\n var res = validateForm(form, formNr);\n if (res) form.submit();\n }\n }\n\n // destroy submit button event handler\n\n scope.$on('$destroy', function () {\n submitButton.removeEventListener('click', submitHandler);\n });\n\n deferred.resolve();\n\n /**\n * Changes the final url where the form leads to, to provide better tracking\n */\n form.onSuccess(function (values, followUpUrl) {\n var formPageName = $rootScope.kaspersky.pageName + ' > Thank You';\n //Remove any extra blank spaces\n if (angular.isString(followUpUrl)) followUpUrl = followUpUrl.trim();\n // Take the lead to a different page on successful submit, ignoring the form's configured followUpUrl\n location.href = followUpUrl + '?pageName=' + formPageName;\n return false;\n });\n });\n\n return deferred.promise;\n }\n\n return $q.all([angularLoad.loadScript('//www.google.com/recaptcha/api.js?hl=' + lang), angularLoad.loadScript('//app-sj06.marketo.com/js/forms2/js/forms2.min.js')]).then(function () {\n return loadForm();\n }).catch(function (err) {\n errorService.warn(err);\n });\n }\n\n function insertElement(formNr, element) {\n var submitButton = element ? element.find('.mktoButtonRow')[0] : $window.document.querySelector('.mktoButtonRow'),\n cDiv = $window.document.createElement('div');\n cDiv.setAttribute('id', 'g-recaptcha-' + formNr);\n cDiv.classList.add('g-recaptcha');\n\n return submitButton.parentNode.insertBefore(cDiv, submitButton);\n }\n\n function renderRecaptcha(formNr) {\n return grecaptcha.render('g-recaptcha-' + formNr, {\n 'sitekey': siteKey\n });\n }\n\n function validateForm(form, formNr) {\n var vals = form.vals().subscriptionSingleOptIn || form.vals().consenttoPersonalDataProcessing;\n var agreeButton = form.getFormElem().find('#subscriptionSingleOptIn') || form.getFormElem().find('#consenttoPersonalDataProcessing');\n\n if (vals === 'no' && $(agreeButton).parent('div').hasClass('mktoRequired')) {\n form.showErrorMessage('\"*\" !', agreeButton);\n } else {\n return validateRecaptcha(formNr, form);\n }\n }\n\n function validateRecaptcha(formNr, form) {\n var recaptchaEl = $window.document.getElementById('g-recaptcha-' + formNr),\n recaptchaResponse = getResponse();\n\n if (!recaptchaResponse) {\n recaptchaEl.classList.add('mktoInvalid');\n return false;\n } else {\n form.addHiddenFields({\n 'reCAPTCHAFormResponse': recaptchaResponse\n });\n recaptchaEl.classList.remove('mktoInvalid');\n return true;\n }\n }\n\n function getResponse() {\n return grecaptcha.getResponse();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n rootScopeHelper.$inject = [\"$rootScope\"];\n angular.module('kappGlobal.helpers').factory('rootScopeHelper', rootScopeHelper);\n\n function rootScopeHelper($rootScope) {\n function on($scope, eventName, handler) {\n $scope.$on('$destroy', $rootScope.$on(eventName, handler));\n }\n\n return {\n 'on': on\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n seoHelperService.$inject = [\"$document\", \"$state\", \"windowHelperService\", \"ENV\"];\n angular.module('kappGlobal.helpers').factory('seoHelperService', seoHelperService);\n function seoHelperService($document, $state, windowHelperService, ENV) {\n\n return {\n 'setMeta': setMeta,\n 'removeMeta': removeMeta,\n 'getContentLocation': getContentLocation,\n 'getDefaultBreadcrumbs': getDefaultBreadcrumbs,\n 'parseBreadcrumbs': parseBreadcrumbs\n };\n\n /**\n * Parses the meta Object and sets meta tags if already existing\n * @param {Object} metaObj The meta object to parse\n */\n function setMeta(metaObj) {\n if (!angular.isObject(metaObj)) return false;\n\n for (var key in metaObj) {\n var tag = key.indexOf(':') === -1 ? $document[0].querySelector('meta[name=' + key + ']') : $document[0].querySelector('meta[name=' + ['key'] + ']');\n if (tag) {\n tag.setAttribute('content', metaObj[key]);\n } else {\n writeMeta(key);\n }\n }\n\n /**\n * Inserts new meta tag in the DOM\n * @param {String} key The name of the tag\n */\n function writeMeta(key) {\n var node = $document[0].createElement('meta');\n node.name = key;\n node.content = metaObj[key];\n $document[0].getElementsByTagName('head')[0].appendChild(node);\n }\n }\n\n /**\n * Removes a meta tag from the DOM\n * @param {String} name The meta tag to be removed\n */\n function removeMeta(name) {\n angular.element($document[0].querySelector('meta[name=' + name + ']')).remove();\n }\n\n function getContentLocation() {\n var contentLocation = $state.href($state.current.name).replace(/(\\?|#).*/, '');\n var states = ['press-releases.details', 'press-center.details', 'in-the-news.details', 'resources-category.details', 'smb-resources-category.details', 'policy-blog-category.details'];\n if (contentLocation === '/' && (windowHelperService.getLocationHref().indexOf('kaspersky') > -1 || windowHelperService.isStaging())) contentLocation = '/homepage';\n // if (contentLocation === '/') contentLocation = '/homepage';\n if ($state.current.name === 'lrc-verdict' || $state.current.name === 'lrc-serial') {\n var str = contentLocation.substring(5),\n path = ENV.locale === 'en-us' ? str.split('_')[4] : str.replace(/_.+/, '');\n\n contentLocation = '/lrc/verdicts' + (path ? '/' + path : '');\n }\n if ($state.current.name === 'b2c-resource-center' || $state.current.name === 'b2c-resource-center.category') {\n contentLocation = '/home-security' + contentLocation;\n } else if ($state.current.name === 'b2c-resource-center.category-details') {\n var clArr = contentLocation.split('/');\n contentLocation = contentLocation.replace('/' + clArr[clArr.length - 1], '');\n contentLocation = '/home-security' + contentLocation;\n } else if (states.indexOf($state.current.name) > -1) {\n var _clArr = contentLocation.split('/');\n contentLocation = contentLocation.replace('/' + _clArr[_clArr.length - 1], '');\n }\n return contentLocation;\n }\n\n function getDefaultBreadcrumbs(removeLink, contentLocation) {\n var urlArr = contentLocation.match(/\\/?((?!\\/).)*\\/?/g).filter(function (item) {\n if (item && !item.match(/(index|http)/)) return item; //filter out unwanted stuff\n });\n var link = '',\n res = void 0;\n res = urlArr.map(function (item) {\n var textVal = item.replace(/(#|\\?).*/, '').replace(/\\.[a-z]+/i, '').replace(/\\//ig, '').replace(/-/ig, ' ');\n link = link + item;\n if (textVal) textVal = textVal[0].toUpperCase() + textVal.slice(1);\n return { 'title': textVal, 'link': link.replace(/\\/$/, '') };\n });\n res.unshift({ 'title': 'Home', 'link': '/' });\n if (removeLink) {\n // Check for encoded titles and decode them\n if (res[res.length - 1].title.match(/%[0-9a-f]{2}/i)) res[res.length - 1].title = decodeURIComponent(res[res.length - 1].title);\n // Remove link from last item making it unclickable\n res[res.length - 1].link = '';\n }\n return res;\n }\n\n function parseBreadcrumbs(breadcrumb) {\n return breadcrumb.reduce(function (prev, curr, index) {\n return !index ? prev + curr.title : prev + ' > ' + curr.title;\n }, '');\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n translationsHelperService.$inject = [\"directiveData\"];\n angular.module('kappGlobal.helpers').factory('translationsHelperService', translationsHelperService);\n function translationsHelperService(directiveData) {\n\n return {\n 'getCategoryTranslation': getCategoryTranslation,\n 'getRepoTranslations': getRepoTranslations,\n 'getPageTitleAppendix': getPageTitleAppendix\n };\n\n function getCategoryTranslation(id) {\n var translatedTerm = void 0;\n return getCategoryTranslations().then(function (response) {\n if (!response || !response.translations) return false;\n translatedTerm = _.find(response.translations, function (obj) {\n return obj.termKey === id;\n });\n return translatedTerm.termTranslation ? translatedTerm.termTranslation : id;\n });\n }\n\n function getCategoryTranslations() {\n return directiveData.getLocal('categories-translation').then(function (response) {\n return response.data.fields;\n });\n }\n\n function getPageTitleAppendix() {\n return directiveData.getLocal('general-translations').then(function (response) {\n var appendix = 'Kaspersky';\n if (response && response.data && response.data.fields) appendix = response.data.fields.pageTitleAppendix;\n return appendix;\n });\n }\n\n function getRepoTranslations() {\n return directiveData.getLocal('repo-translation').then(function (response) {\n return response.data.fields && response.data.fields.translations ? mapObjectFromArray(response.data.fields.translations) : null;\n });\n }\n\n /**\n * [mapObjectFromArray description]\n * @param {object} obj The tridion object in this format: [{\"termKey\": \"keyA\", \"termTranslation\": \"translA\"}, {\"termKey\": \"keyB\", \"termTranslation\": \"translB\"}]\n * @return {object} A new object in this format: {\"keyA\": \"TranslA\", \"keyB\": \"translB\"\"}\n */\n function mapObjectFromArray(obj) {\n return _.fromPairs(obj.map(function (item) {\n return [item.termKey, item.termTranslation];\n }));\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n windowHelperService.$inject = [\"$window\", \"$location\", \"$timeout\", \"$anchorScroll\", \"translationsHelperService\", \"appHelperService\"];\n angular.module('kappGlobal.helpers').factory('windowHelperService', windowHelperService);\n function windowHelperService($window, $location, $timeout, $anchorScroll, translationsHelperService, appHelperService) {\n var cachedAppendix = void 0;\n\n return {\n 'getIPCountry': getIPCountry,\n 'getGeoLocation': getGeoLocation,\n 'setWindowTitle': setWindowTitle,\n 'goToUrl': goToUrl,\n 'getLocationHref': getLocationHref,\n 'getCanonicalUrl': getCanonicalUrl,\n 'isMobile': isMobile,\n 'getDomainName': getDomainName,\n 'getPathName': getPathName,\n 'navigateUserTo': navigateUserTo,\n 'isStaging': isStaging,\n 'setComponentResponsiveFlag': setComponentResponsiveFlag,\n 'updateQueryStringParameters': updateQueryStringParameters\n };\n\n function getIPCountry() {\n return $window.IPCountry || '';\n }\n\n function getGeoLocation() {\n return $window.navigator.geolocation;\n }\n\n function setWindowTitle(title) {\n if (cachedAppendix) return setTitle(cachedAppendix);\n translationsHelperService.getPageTitleAppendix().then(function (response) {\n var country = $location.search().country;\n cachedAppendix = country && country.toLowerCase() === 'ca' ? response.replace('US', 'CA') : response;\n return setTitle(cachedAppendix);\n });\n\n function setTitle(appendix) {\n var res = [];\n if (title) res.push(title);\n if (appendix) res.push(appendix);\n $window.document.title = res.join(' | ');\n }\n }\n\n function goToUrl(url, newTab) {\n if (newTab) {\n return $window.open(url, '_blank');\n }\n return $window.location.href = url;\n }\n\n function getLocationHref() {\n return $window.location.href;\n }\n\n function getCanonicalUrl() {\n return fixCanonicalUrl(getLocationHref());\n }\n\n function fixCanonicalUrl(url) {\n var newUrl = url.split(/(?=[;?&#])/)[0];\n return newUrl;\n }\n\n function getDomainName() {\n if (!$window.location.origin) $window.location.origin = $window.location.protocol + '//' + $window.location.hostname + ($window.location.port ? ':' + $window.location.port : '');\n\n return $window.location.origin;\n }\n\n function getPathName() {\n return $window.location.pathname;\n }\n\n function isMobile(breakpoint) {\n return $window.innerWidth < (breakpoint || 769);\n }\n\n /**\n * Set a flag to that identifies mobile representation and track it on resize\n * @param {object} ctrl Component controller\n * @param {object} $scope Component scope\n * @param {number=} breakpoint Resolution breakpoint to consider mobile, defaults to 769\n * @param {string=} mobileFlag Mobile flag name in case if a different name is required (or multiple breakpoints)\n * @returns {boolean}\n */\n function setComponentResponsiveFlag(ctrl, $scope) {\n var _this = this;\n\n var breakpoint = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 769;\n var mobileFlag = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'isMobile';\n\n if (!ctrl || !$scope) return false; //required parameters\n\n var windowResizeThrottle = void 0;\n var $windowElement = angular.element($window);\n var scopeId = $scope.$id || Math.random().toString(36).substring(7);\n var namespace = 'namespace' + scopeId + '-' + Math.round(Math.random() * 1000);\n\n var windowResizeListener = $windowElement.on('resize.' + namespace, function () {\n $timeout.cancel(windowResizeThrottle);\n windowResizeThrottle = $timeout(function () {\n ctrl[mobileFlag] = _this.isMobile(breakpoint);\n }, 200);\n });\n\n $scope.$on('$destroy', function () {\n $windowElement.off('resize.' + namespace, windowResizeListener);\n $timeout.cancel(windowResizeThrottle);\n $windowElement = null;\n });\n }\n\n function isAnchor(link) {\n return link.indexOf('#') === 0;\n }\n\n function isLink(link) {\n return link.indexOf('http') === 0 || link.indexOf('/') === 0;\n }\n\n function navigateUserTo(id, $event, isExternal) {\n if ($event) {\n $event.preventDefault();\n }\n\n if (isAnchor(id)) {\n id = id.substring(1);\n }\n\n if (isExternal || isLink(id)) {\n if (isExternal) {\n $window.open(id, '_blank');\n } else {\n var split = id.split('#');\n\n if (split.length > 1) {\n if (split[0] === $location.path()) {\n $location.hash(split[1]);\n } else {\n $window.location.href = id;\n }\n } else {\n $window.location.href = id;\n }\n\n $anchorScroll();\n }\n } else {\n $anchorScroll(id);\n }\n }\n function isStaging() {\n var isStaging = 0,\n isDebug = $location.search().debug;\n if ((getLocationHref().match(/localhost|ngdev|ngtst|stg|127.0.0.1/) || isDebug) && isDebug !== 'prod') isStaging = 1;\n return isStaging;\n }\n\n /**\n * Updates all query string params based on he provided params object\n * To avoid parameter text value casing problems, a regex can be provided to lowercase matching values\n * @param {object} paramsObj\n * @param {=string} paramsToLowercase Regex of parameters to make lowercase\n */\n function updateQueryStringParameters() {\n var paramsObj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var paramsToLowercase = arguments[1];\n\n $location.search(angular.extend(appHelperService.objectKeysToLowerCase($location.search(), paramsToLowercase), paramsObj));\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n mapperService.$inject = [\"imageManagerService\"];\n angular.module('kappGlobal.mapper').factory('repoMapperService', mapperService);\n\n function mapperService(imageManagerService) {\n var _categoryNameSplitter = '::';\n\n return {\n 'mapRepositoryLinkFields': mapRepositoryLinkFields,\n 'mapRepositoryHeaderFields': mapRepositoryHeaderFields,\n 'mapBlogFields': mapBlogFields,\n 'mapBlogResourceFields': mapBlogResourceFields,\n 'mapResourcesFields': mapResourcesFields\n };\n\n function mapRepositoryLinkFields(linkResponse, url) {\n return {\n 'head': linkResponse['fields']['head'],\n 'body': linkResponse['fields']['body'],\n 'boost': linkResponse['fields']['boost'],\n 'category': mapCategory(linkResponse['fields']['category']),\n 'categoryName': getTitle(linkResponse['fields']['category']),\n 'date_publication_start': linkResponse['fields']['date_publication_start'],\n 'image': imageManagerService.getResourceImage(linkResponse),\n 'thumb': imageManagerService.getResourceThumb(linkResponse),\n 'id': linkResponse['id'],\n 'labels': linkResponse['fields']['labels'],\n 'link': mapLinkFields(linkResponse['fields']['link']),\n 'pubDate': new Date(linkResponse['pubdate']),\n 'repository_type': linkResponse['fields']['repository_type'],\n 'schemaName': linkResponse['schemaName'],\n 'subtitle': linkResponse['fields']['subtitle'],\n 'summary': linkResponse['fields']['summary'],\n 'subcategory': mapCategory(linkResponse['fields']['subcategory']),\n 'subcategoryTitle': getTitle(linkResponse['fields']['subcategory']),\n 'title': linkResponse['fields']['title'],\n 'url': url,\n 'video': linkResponse['fields'] && linkResponse['fields']['video'] ? linkResponse['fields']['video'].trim() : '',\n 'videoTitle': linkResponse['fields']['video_title'],\n 'isVideoContent': angular.isDefined(linkResponse['fields']['video'])\n };\n }\n\n function mapRepositoryHeaderFields(linkResponse) {\n return {\n 'id': linkResponse['id'],\n 'title': linkResponse['title'],\n 'pubDate': new Date(linkResponse['pubdate']),\n 'schemaName': linkResponse['schemaName'],\n 'headerTitle': linkResponse['fields']['headerTitle'],\n 'headerSubTitle': linkResponse['fields']['headerSubTitle'],\n 'headerDescription': linkResponse['fields']['headerDescription'],\n 'headerBgImg': imageManagerService.getRandomizedImage(linkResponse['fields']['headerBgImg']),\n 'buttons': linkResponse['fields']['buttons'],\n 'menu': linkResponse['fields']['menu'],\n 'filters': linkResponse['fields']['filters']\n };\n }\n\n function mapBlogFields(linkResponse) {\n return {\n 'id': linkResponse['id'],\n 'title': linkResponse['title'],\n 'pubDate': new Date(linkResponse['pubdate']),\n 'schemaName': linkResponse['schemaName'],\n 'blogSectionTitle': linkResponse['fields']['title'],\n 'resources': linkResponse['fields']['resources']\n };\n }\n\n function mapBlogResourceFields(resource) {\n return {\n 'resourceTitle': resource['resourceTitle'],\n 'resourceSubTitle': resource['resourceSubTitle'],\n 'resourceExcerpt': resource['resourceExcerpt'],\n 'resourceExcerptSummary': resource['resourceExcerptSummary'],\n 'resourceImage': imageManagerService.getRandomizedImage(resource['resourceImage']),\n 'resourceImageAlt': resource['resourceImageAlt'],\n 'resourceLogo': imageManagerService.getRandomizedImage(resource['resourceLogo']),\n 'resourceLogoAlt': resource['resourceLogoAlt'],\n 'resourceLink': resource['resourceLink'],\n 'resourceLinkText': resource['resourceLinkText'],\n 'resourceLinkTarget': resource['resourceLinkTarget']\n };\n }\n\n function mapResourcesFields(resource) {\n return {\n 'resourceCategory': resource['resourceCategory'],\n 'resourceTitle': resource['resourceTitle'],\n 'resourceSummary': resource['resourceSummary'],\n 'resourceImage': imageManagerService.getRandomizedImage(resource['resourceImage']),\n 'resourceLink': resource['resourceLink']\n };\n }\n\n function mapCategory(values) {\n var array = [];\n if (!values) return array;\n values.map(function (value) {\n array.unshift(mapContentSubCategoryFields(value));\n });\n return array;\n }\n\n function mapLinkFields(link) {\n if (!link) return {};\n return {\n 'text': link['text'],\n 'link': link['link'],\n 'isExternal': link['isExternal'],\n 'class': link['class']\n };\n }\n\n function mapContentSubCategoryFields(subcategory) {\n if (!subcategory) return {};\n return {\n 'id': subcategory['id'],\n 'key': subcategory['key'],\n 'title': subcategory['title'],\n 'description': subcategory['description']\n };\n }\n\n function getTitle(value) {\n if (!value || value.length < 1) return '';\n var valueTitle = value[0]['title'],\n splitter = valueTitle.split(_categoryNameSplitter);\n if (splitter.length > 1) {\n valueTitle = splitter[1];\n }\n return valueTitle;\n }\n }\n})();\n'use strict';\n\n/**\n * Created by Fedotov_Al on 17.10.2016.\n */\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.ngSrcLocaleHack').filter('addLocalRoot', [\"ENV\", function (ENV) {\n return function (arg) {\n var sourceLink = arg;\n if (arg) {\n if (sourceLink.match(/content\\/en-au\\//)) {\n\n sourceLink = sourceLink.replace(/content\\/en-au\\//, '');\n }\n sourceLink = 'content/' + ENV.locale + '/' + sourceLink;\n }\n\n return sourceLink;\n };\n }]);\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutAccordion', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/accordion/templates/accordion.html',\n 'controller': 'aboutAccordionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutAccordionController.$inject = [\"$timeout\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.about').controller('aboutAccordionController', aboutAccordionController);\n\n function aboutAccordionController($timeout, directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('about-accordion').then(function (response) {\n ctrl.data = response.data.fields;\n\n $timeout(function () {\n //////////////////////////////////////////\n // Accordion\n //////////////////////////////////////////\n\n $('.accordion-section > li > h4').click(function () {\n $(this).parent().toggleClass('open');\n $(this).siblings().slideToggle();\n });\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutAnchorHeader', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/anchor-header/templates/anchor-header.html',\n 'controller': 'aboutAnchorHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutAnchorHeaderController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.about').controller('aboutAnchorHeaderController', aboutAnchorHeaderController);\n\n function aboutAnchorHeaderController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('about-anchor-header').then(function (response) {\n ctrl.data = response.data.fields;\n runScript();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScript() {\n $(document).ready(function () {\n var $mainMenu = $('#site-header .main-menu');\n $('.about-us-page-header .cta-scroll').click(function (e) {\n e.preventDefault();\n var $scrollTo = $($(this).attr('href'));\n if ($scrollTo.length) {\n $('html,body').animate({\n 'scrollTop': $scrollTo.offset().top - $mainMenu.outerHeight(true)\n }, 1000);\n }\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n imageManagerService.$inject = [\"$http\", \"localStorageService\", \"ENV\", \"errorService\"];\n angular.module('kappGlobal.imageManager').factory('imageManagerService', imageManagerService);\n\n function imageManagerService($http, localStorageService, ENV, errorService) {\n\n var config = {\n 'serverUrl': ENV.apiServer,\n 'cacheName': 'kapp-randomisedImages',\n 'fallbackImage': '/content/' + ENV.locale + '/images/repository/smb/fallback/photo-6.jpg',\n 'prRepoFallbackImagesPath': '/content/' + ENV.locale + '/repository/fall-back/resources-fall-back-images.json'\n };\n\n return {\n 'getDefaultImage': getDefaultImage,\n 'getResourceImage': getResourceImage,\n 'getResourceThumb': getResourceThumb,\n 'getRandomizedImage': getRandomizedImage,\n 'activateRandomImagesCache': activateRandomImagesCache\n };\n\n function getDefaultImage(image) {\n if (angular.isUndefined(image) || image.length < 1) {\n return '' + ENV.apiServer + config.fallbackImage;\n }\n if (image.constructor === Array) image = image[0];\n return config.serverUrl + '/' + image;\n }\n\n function getRandomizedImage(image) {\n if (angular.isUndefined(image) || image.length < 1) {\n return generateRandomImage();\n }\n if (image.constructor === Array) image = image[0];\n return config.serverUrl + '/' + image;\n }\n\n function generateRandomImage() {\n var cached = localStorageService.get(config.cacheName);\n if (cached !== null) {\n var rand = Math.random() * cached.length - 1;\n rand = rand < 0 ? 1 : rand;\n return cached[Math.floor(rand)];\n }\n return activateRandomImagesCache();\n }\n\n function activateRandomImagesCache() {\n if (!localStorageService.get(config.cacheName)) {\n return getFallBackImages().then(function (response) {\n var imagesArray = [];\n response.data['fields']['images'].map(function (image) {\n imagesArray.push(config.serverUrl + '/' + image['fallBackImage']);\n });\n localStorageService.set(config.cacheName, imagesArray, 1440);\n return imagesArray[Math.floor(Math.random() * imagesArray.length) - 1];\n }).catch(function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n\n function getFallBackImages() {\n return $http.get(decodeURIComponent('' + config.serverUrl + config.prRepoFallbackImagesPath, { 'cache': true }));\n }\n\n function getResourceImage(linkResponse) {\n var image = linkResponse['fields']['image'],\n thumb = linkResponse['fields']['thumbnail_image'];\n image = hasContent(image) ? image : thumb;\n if (angular.isUndefined(image) || image.length === 0) {\n image = config.fallbackImage;\n }\n image = constructUrl(image);\n return image;\n }\n\n function getResourceThumb(linkResponse) {\n var image = linkResponse['fields']['image'],\n thumb = linkResponse['fields']['thumbnail_image'];\n image = hasContent(thumb) ? thumb : image;\n if (angular.isUndefined(image) || image.length === 0) {\n image = config.fallbackImage;\n }\n image = constructUrl(image);\n return image;\n }\n\n function hasContent(content) {\n return angular.isDefined(content) && content.length > 0;\n }\n\n function constructUrl(imagePath) {\n if (imagePath.constructor === Array) imagePath = imagePath[0];\n if (imagePath.match(config.serverUrl)) {\n return imagePath.replace(config.serverUrl, '');\n }\n return imagePath;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutArticleBannerText', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/article-banner-text/templates/article-banner-text.html',\n 'controller': 'aboutController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutAwardsList', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/awards-list/templates/awards-list.html',\n 'controller': 'aboutController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutAwardsSmall', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/awards-small/templates/awards-small.html',\n 'controller': 'aboutController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutBenefitsList', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/benefits-list/templates/benefits-list.html',\n 'controller': 'aboutController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutBot', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/bot/templates/bot.html',\n 'controller': 'aboutBotController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutBotController.$inject = [\"directiveData\", \"errorService\", \"botDataService\", \"$scope\", \"$sanitize\"];\n angular.module('kappGlobal.about').controller('aboutBotController', aboutBotController);\n\n function aboutBotController(directiveData, errorService, botDataService, $scope, $sanitize) {\n var ctrl = this;\n ctrl.answer = '';\n ctrl.question = '';\n ctrl.$onInit = activate;\n ctrl.sendQ = sendQ;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'about-bot').then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n }\n\n // Sanitization of an input\n $scope.$watch('$ctrl.question', function (newV) {\n ctrl.question = $sanitize(newV.replace(/<[^>]+>/gm, ''));\n });\n\n function sendQ() {\n return botDataService.getBotAnswer(ctrl.question).then(function (response) {\n if (!response) return;\n ctrl.answer = response.data.answers[0].answer.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '\"');\n if (response.data.answers[0].score === 0) ctrl.answer = ctrl.data.failedAnswer;\n return ctrl.answer;\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n botDataFactory.$inject = [\"$http\", \"ENV\", \"errorService\"];\n angular.module('kappGlobal.about').factory('botDataService', botDataFactory);\n\n function botDataFactory($http, ENV, errorService) {\n return {\n 'getBotAnswer': getBotAnswer\n };\n\n function getBotAnswer(question) {\n var country = ENV.locale.substring(3, 5).toUpperCase(),\n botKeysIDs = {\n 'GL': { 'key': '39fbefe45c6240d2a2fde14fc86dee14', 'id': '0fa5d06d-103d-47ea-9c81-7406f8307953' },\n 'GB': { 'key': '', 'id': '' },\n 'US': { 'key': '', 'id': '' },\n 'DE': { 'key': '', 'id': '' },\n 'MX': { 'key': '', 'id': '' },\n 'ES': { 'key': '', 'id': '' },\n 'FR': { 'key': '', 'id': '' },\n 'IT': { 'key': '', 'id': '' },\n 'NL': { 'key': '', 'id': '' },\n 'BR': { 'key': '', 'id': '' },\n 'TR': { 'key': '', 'id': '' },\n 'AU': { 'key': '', 'id': '' },\n 'ZA': { 'key': '', 'id': '' },\n 'IN': { 'key': '', 'id': '' },\n 'AE': { 'key': '', 'id': '' },\n 'SE': { 'key': '', 'id': '' }\n },\n config = {\n 'headers': {\n 'Ocp-Apim-Subscription-Key': '',\n 'Content-Type': 'application/json'\n }\n },\n localID = '';\n\n if (country in botKeysIDs) {\n localID = botKeysIDs[country]['id'];\n config.headers['Ocp-Apim-Subscription-Key'] = botKeysIDs[country]['key'];\n } else {\n localID = botKeysIDs['GL']['id'];\n config.headers['Ocp-Apim-Subscription-Key'] = botKeysIDs['GL']['key'];\n }\n\n return $http.post('https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/' + localID + '/generateAnswer', { 'question': question }, config).then(function (response) {\n return response;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutCalendarSearch', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/calendar-search/templates/calendar-search.html',\n 'controller': 'aboutController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutContent', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/content/templates/content.html',\n 'controller': 'aboutController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutHeadQuartersMap', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/head-quarters-map/templates/head-quarters-map.html',\n 'controller': 'aboutHeadQuartersMapController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutHeadQuartersMapController.$inject = [\"$scope\", \"directiveData\", \"errorService\", \"ngDialog\", \"$timeout\", \"$element\", \"ENV\", \"aboutHeadQuartersMapDataService\"];\n angular.module('kappGlobal.about').controller('aboutHeadQuartersMapController', aboutHeadQuartersMapController);\n\n function aboutHeadQuartersMapController($scope, directiveData, errorService, ngDialog, $timeout, $element, ENV, aboutHeadQuartersMapDataService) {\n var ctrl = this;\n ctrl.setTab = setTab;\n ctrl.isSet = isSet;\n ctrl.$onInit = activate;\n ctrl.openLRCDialog = openLRCDialog;\n\n function activate() {\n return getData().then(function () {\n $timeout(function () {\n aboutHeadQuartersMapDataService.addIframe($element, ctrl.data.hqs);\n checkLocale();\n });\n // Maps Javascript API\n // return aboutHeadQuartersMapDataService.loadMap(ctrl.data.hqs, ctrl.data.localSec).then(() => {\n // checkLocale();\n // });\n });\n }\n\n function getData() {\n return directiveData.getByUrl('about-headquaters-map').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.tab = 0;\n ctrl.hq = ctrl.data.hqs[0];\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function checkLocale() {\n if (ENV.locale === 'en-us') {\n var usHQIndex = _.findIndex(ctrl.data.hqs, ['link', '#americas-headquarters']);\n setTab(null, usHQIndex, ctrl.data.hqs[usHQIndex].lat, ctrl.data.hqs[usHQIndex].lon, ctrl.data.hqs[usHQIndex].placeId, ctrl.data.hqs[usHQIndex]);\n } else if (ctrl.data.localSec) {\n var localOffice = {\n 'hqTitle': ctrl.data.localOfficeTitle,\n 'lat': ctrl.data.localLat,\n 'lon': ctrl.data.localLon,\n 'placeId': ctrl.data.placeId,\n 'link': ctrl.data.localLink,\n 'section': ctrl.data.localSec,\n 'showLrcBalancer': ctrl.data.myKasperskyBalancer && ctrl.data.myKasperskyBalancer[0],\n 'lrcBalancerText': ctrl.data.myKasperskyBalancerButton\n };\n ctrl.data.hqs.push(localOffice);\n\n var currHqData = ctrl.data.hqs[ctrl.data.hqs.length - 1];\n setTab(null, ctrl.data.hqs.length - 1, currHqData.lat, currHqData.lon, currHqData.placeId, currHqData);\n }\n }\n\n function setTab(event, newTab, lat, lon, placeId, obj) {\n if (event) event.preventDefault();\n ctrl.tab = newTab || findIndexOfHq(obj);\n ctrl.hq = obj || ctrl.data.hqs[ctrl.tab];\n aboutHeadQuartersMapDataService.modifyIframeLocation($element, lat, lon, placeId);\n // aboutHeadQuartersMapDataService.newLocation(null, lat, lon);\n }\n\n function isSet(tabNum) {\n return ctrl.tab === tabNum;\n }\n\n function findIndexOfHq(obj) {\n var index = 0;\n if (!obj) return index;\n for (var i = 0, length = ctrl.data.hqs.length; i < length; i++) {\n var hq = ctrl.data.hqs[i];\n if (hq.hqTitle !== obj.hqTitle) continue;\n index = i;\n break;\n }\n return index;\n }\n\n function openLRCDialog() {\n ngDialog.open({\n 'template': '
    \\n \\n \\n \\n
    \\n ',\n 'plain': true,\n 'className': 'ngdialog-flyout ngdialog--lrc-dialog',\n 'data': ctrl,\n 'showClose': false,\n 'scope': $scope\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutHeadQuartersMapDataFactory.$inject = [\"$window\", \"ENV\", \"errorService\", \"angularLoad\"];\n angular.module('kappGlobal.about').factory('aboutHeadQuartersMapDataService', aboutHeadQuartersMapDataFactory);\n\n function aboutHeadQuartersMapDataFactory($window, ENV, errorService, angularLoad) {\n var ctrl = this;\n var googleEmbedEndpoint = 'https://www.google.com/maps/embed/v1/place';\n var key = getEmbedKey();\n var iframeParameters = {};\n\n return {\n 'loadMap': loadMap,\n 'newLocation': newLocation,\n 'addIframe': addIframe,\n 'modifyIframeLocation': modifyIframeLocation\n };\n\n /* Google Maps Embed API Methods START*/\n function getEmbedKey() {\n return 'AIzaSyCn0vbX5xd2rpbtVj4qWZzDnZOzd9DsB-s';\n }\n\n function addIframe(element, hqs) {\n var iframe = $window.document.createElement('iframe');\n\n if (hqs[0].placeId) {\n iframeParameters.q = encodeURIComponent(hqs[0].placeId);\n } else {\n iframeParameters.q = hqs[0].lat + ',' + hqs[0].lon;\n }\n\n iframeParameters.zoom = 13;\n\n var mapSource = googleEmbedEndpoint + '?q=' + iframeParameters.q + '&zoom=' + iframeParameters.zoom + '&key=' + key;\n\n iframe.width = '100%';\n iframe.height = '350px';\n iframe.frameborder = 0;\n iframe.src = mapSource;\n iframe.setAttribute('allowfullscreen', '');\n\n $(element).find('#map-iframe-wrapper').append(iframe);\n }\n\n function modifyIframeLocation(element, lat, lon, placeId) {\n var iframe = element.find('iframe');\n\n if (placeId) {\n iframeParameters.q = encodeURIComponent(placeId);\n } else {\n iframeParameters.q = lat + ',' + lon;\n }\n\n iframe.attr({ 'src': googleEmbedEndpoint + '?q=' + iframeParameters.q + '&zoom=' + iframeParameters.zoom + '&key=' + key });\n }\n /* Google Maps Embed API Methods END*/\n\n /* Google Maps JavaScipt API methods START*/\n function getKey() {\n var country = ENV.locale,\n googleMpaKeys = {\n 'en-au': 'AIzaSyAlE5csEf7aBVKLISsJ2purdmcI1SjbzKQ'\n };\n\n return country in googleMpaKeys ? googleMpaKeys[country] : googleMpaKeys['en-au'];\n }\n\n function setupMap(hqs) {\n var marker = void 0,\n i = void 0;\n\n // Map options\n var mapOptions = {\n // Zoom (smaller number to zoom out)\n 'zoom': 13,\n\n // Initial map location\n 'center': new google.maps.LatLng(hqs[0].lat, hqs[0].lon),\n\n // Kaspersky map style\n 'styles': [{ 'featureType': 'administrative', 'elementType': 'labels.text.fill', 'stylers': [{ 'color': '#444444' }] }, { 'featureType': 'landscape', 'elementType': 'all', 'stylers': [{ 'color': '#f2f2f2' }] }, { 'featureType': 'poi', 'elementType': 'all', 'stylers': [{ 'visibility': 'off' }] }, { 'featureType': 'road', 'elementType': 'all', 'stylers': [{ 'saturation': -100 }, { 'lightness': 45 }] }, { 'featureType': 'road.highway', 'elementType': 'all', 'stylers': [{ 'visibility': 'simplified' }] }, { 'featureType': 'road.highway', 'elementType': 'geometry', 'stylers': [{ 'color': '#ed2939' }, { 'weight': '1.68' }, { 'lightness': '9' }] }, { 'featureType': 'road.arterial', 'elementType': 'labels.icon', 'stylers': [{ 'visibility': 'off' }] }, { 'featureType': 'transit', 'elementType': 'all', 'stylers': [{ 'visibility': 'off' }] }, { 'featureType': 'water', 'elementType': 'all', 'stylers': [{ 'color': '#7bd0f2' }, { 'visibility': 'on' }] }]\n };\n\n // Check if map element exists in DOM\n var mapElement = $window.document.getElementById('map'),\n infoWindow = new google.maps.InfoWindow();\n\n if (mapElement) {\n // Create a new map\n ctrl.map = new google.maps.Map(mapElement, mapOptions);\n\n // If mapLocations variable is set generate new markers and their names\n for (i = 0; i < hqs.length; i++) {\n // Generate markers\n marker = new google.maps.Marker({\n 'position': new google.maps.LatLng(hqs[i].lat, hqs[i].lon),\n 'map': ctrl.map\n });\n\n // Add info windows to markers\n google.maps.event.addListener(marker, 'click', function (marker, i) {\n return function () {\n infoWindow.setContent(hqs[i].hqTitle);\n infoWindow.open(ctrl.map, marker);\n };\n }(marker, i));\n }\n }\n\n // Set the map\n marker.setMap(ctrl.map);\n\n // Set lat, lon and pan to it\n newLocation(hqs);\n\n zoomFix();\n }\n\n function zoomFix() {\n // Zoom fix (map zooms out on trackpads)\n // - pointer events are disabled in CSS and on click enabled again\n // - mouse leave disables pointer events again\n // - only for elements with \".map\" and \".zoom-fix\" classes\n $('.map.zoom-fix').click(function () {\n $('.map.zoom-fix > div').css('pointer-events', 'auto');\n });\n\n $('.map.zoom-fix').mouseleave(function () {\n $('.map.zoom-fix > div').css('pointer-events', 'none');\n });\n }\n\n function newLocation(hqs, lat, lon) {\n if (!ctrl.map) return errorService.warn('Google Maps, map have not been initiated');\n\n // Set local office as starting location or first element\n var location = lat && lon ? new google.maps.LatLng(lat, lon) : new google.maps.LatLng(hqs[0].lat, hqs[0].lon);\n ctrl.map.panTo(location);\n }\n\n function loadMap(hqs) {\n if (!hqs) return errorService.warn('Google Maps, hqs object is empty');\n\n var key = getKey();\n return angularLoad.loadScript('//maps.googleapis.com/maps/api/js?key=' + key).then(function () {\n setupMap(hqs);\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n /* Google Maps JavaScipt API methods END*/\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutItemHeroBanner', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/item-hero-banner/templates/item-hero-banner.html',\n 'controller': 'aboutController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutFeaturesBlock', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/features-block/templates/features-block.html',\n 'controller': 'aboutController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('licenseList', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/license-list/template/license-list.template.html',\n 'controller': 'licenseListController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n licenseListController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.about').controller('licenseListController', licenseListController);\n\n function licenseListController(directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n var getData = function getData() {\n directiveData.getByUrl('license-list').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n };\n\n function activate() {\n getData();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutNewsList', {\n 'bindings': {\n 'resource': '@',\n 'item': '<',\n 'isTransparencyPage': '<'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/news-list/templates/news-list.html',\n 'controller': 'aboutNewsListController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutNewsListController.$inject = [\"$http\", \"$scope\", \"directiveData\", \"errorService\", \"ngDialog\", \"$q\"];\n angular.module('kappGlobal.about').controller('aboutNewsListController', aboutNewsListController);\n\n function aboutNewsListController($http, $scope, directiveData, errorService, ngDialog, $q) {\n var ctrl = this;\n var itemsMap = {};\n\n ctrl.$onInit = activate;\n ctrl.openNewsPopup = openNewsPopup;\n\n function activate() {\n getData();\n }\n\n function handleShowItem() {\n if (ctrl.item && itemsMap.hasOwnProperty(ctrl.item)) {\n ctrl.openNewsPopup(itemsMap[ctrl.item]);\n }\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'about-news-list').then(function (response) {\n ctrl.data = response.data.fields;\n var promises = [];\n ctrl.data.news.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n promises.push($http.get(item, {\n 'cache': true\n }));\n\n if (ctrl.isTransparencyPage) {\n itemsMap[item.split('/').reverse()[0].split('.')[0].toLowerCase()] = index;\n }\n }\n });\n $q.all(promises).then(function (responses) {\n ctrl.data.news = responses.map(function (response) {\n return response.data.fields;\n });\n\n if (ctrl.isTransparencyPage) {\n handleShowItem();\n }\n });\n }, handleRejection);\n }\n\n function openNewsPopup(idx, $event) {\n if ($event) {\n $event.preventDefault();\n }\n\n ctrl.idx = idx;\n\n ngDialog.open({\n 'template': '/resources/template/html/modules/about/components/news-list/templates/news-list-popup.html',\n 'className': 'ngdialog-flyout',\n 'data': ctrl,\n 'scope': $scope\n });\n }\n }\n})();\n'use strict';\n\n/**\n * Created by Fedotov_Al on 21.06.2017.\n */\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('pressCategories', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'pressCategoriesController',\n 'templateUrl': '/resources/template/html/modules/about/components/press-categories/templates/press-categories.template.html'\n });\n})();\n'use strict';\n\n/**\n * Created by Fedotov_Al on 21.06.2017.\n */\n(function () {\n 'use strict';\n\n pressCategoriesController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.about').controller('pressCategoriesController', pressCategoriesController);\n\n function pressCategoriesController(directiveData, errorService) {\n var ctrl = this;\n\n ctrl.$onInit = activate();\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl('categories-section').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n/**\n * Created by Fedotov_Al on 21.06.2017.\n */\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('pressCategoryDetails', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'pressCategoryDetailsController',\n 'templateUrl': '/resources/template/html/modules/about/components/press-category-details/templates/press-category-details.template.html'\n });\n})();\n'use strict';\n\n/**\n * Created by Fedotov_Al on 21.06.2017.\n */\n(function () {\n 'use strict';\n\n pressCategoryDetailsController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.about').controller('pressCategoryDetailsController', pressCategoryDetailsController);\n\n function pressCategoryDetailsController(directiveData, errorService) {\n var ctrl = this;\n\n ctrl.$onInit = activate();\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl('gallery-details').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutTeamGrid', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/team-grid/templates/team-grid.html',\n 'controller': 'aboutTeamGridController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutTeamGridController.$inject = [\"$http\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.about').controller('aboutTeamGridController', aboutTeamGridController);\n\n function aboutTeamGridController($http, directiveData, errorService) {\n var ctrl = this;\n ctrl.data = { 'teams': [] };\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl('about-team-grid').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.data.teams.forEach(function (item, index1) {\n item.items.forEach(function (item, index2) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n return ctrl.data.teams[index1].items[index2] = response.data.fields;\n }, handleRejection);\n }\n });\n });\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutStoryList', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/story-list/templates/story-list.html',\n 'controller': 'aboutStoryListController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutStoryListController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.about').controller('aboutStoryListController', aboutStoryListController);\n\n function aboutStoryListController(directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'about-story-list').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n/**\n * Created by Fedotov_Al on 21.06.2017.\n */\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('pressContacts', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'pressContactsController',\n 'templateUrl': '/resources/template/html/modules/about/components/press-contacts/templates/press-contacts.template.html'\n });\n})();\n'use strict';\n\n/**\n * Created by Fedotov_Al on 21.06.2017.\n */\n(function () {\n 'use strict';\n\n pressContactsController.$inject = [\"directiveData\", \"$timeout\", \"popup\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.about').controller('pressContactsController', pressContactsController);\n\n function pressContactsController(directiveData, $timeout, popup, $element, errorService) {\n var ctrl = this;\n\n ctrl.$onInit = activate();\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl('contacts').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n runScripts();\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n popup.imageGallery($element);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutVideoBigHeader', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/video-big-header/templates/video-big-header.html',\n 'controller': 'aboutVideoBigHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutVideoBigHeaderController.$inject = [\"$element\", \"$timeout\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.about').controller('aboutVideoBigHeaderController', aboutVideoBigHeaderController);\n\n function aboutVideoBigHeaderController($element, $timeout, directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('about-video-big-header').then(function (response) {\n ctrl.data = response.data.fields;\n\n // About us magnific popup\n $timeout(function () {\n\n if (!ctrl.data.link) {\n $($element).find('.about-us-hero-video button').css('background-image', 'none');\n }\n\n $($element).find('.about-us-hero-video .popup-video, .about-us-page-header .cta-play').magnificPopup({\n 'type': 'iframe',\n 'mainClass': 'mfp-fade',\n 'removalDelay': 160,\n 'preloader': false,\n 'fixedContentPos': false\n });\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.about').component('aboutVideoButtonHeader', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/about/components/video-button-header/templates/video-button-header.html',\n 'controller': 'aboutVideoButtonHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n aboutVideoButtonHeaderController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.about').controller('aboutVideoButtonHeaderController', aboutVideoButtonHeaderController);\n function aboutVideoButtonHeaderController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('about-video-button-header').then(function (response) {\n ctrl.data = response.data.fields;\n\n //////////////////////////////////////////\n // About us magnific popup\n //////////////////////////////////////////\n\n angular.element(document).ready(function () {\n $('.about-us-hero-video .popup-video, .about-us-page-header .cta-play').magnificPopup({\n 'type': 'iframe',\n 'mainClass': 'mfp-fade',\n 'removalDelay': 160,\n 'preloader': false,\n 'fixedContentPos': false\n });\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('animatedFeatures', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/animated-features/templates/animated-features.html',\n 'controller': 'animatedFeaturesController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n animatedFeaturesController.$inject = [\"directiveData\", \"errorService\", \"angularLoad\", \"$rootScope\"];\n angular.module('kappGlobal.b2c').controller('animatedFeaturesController', animatedFeaturesController);\n\n function animatedFeaturesController(directiveData, errorService, angularLoad, $rootScope) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n var ngRender = $rootScope.$on('ngRender', function () {\n runScripts();\n ngRender();\n });\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'animated-features').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n /* eslint-disable */\n angularLoad.loadScript('resources/template/js/jquery.waypoints.sticky.min.js').then(function () {\n var timetableOffset = 0;\n var mainnavHeight2 = $('#site-header .main-nav').outerHeight(true);\n\n if ($('.timetable').length) {\n timetableOffset = mainnavHeight2 + 65;\n\n var continuousElements = $('.timetable .timetable-wrapper');\n continuousElements.each(function () {\n var $this = $(this);\n var sticky = new Waypoint.Sticky({\n 'element': $this[0],\n 'handler': function handler(direction) {\n $this.find('.timetable-section-icon').css('top', timetableOffset);\n },\n 'offset': timetableOffset\n });\n var inViewList = new Waypoint.Inview({\n 'element': $this[0],\n 'exited': function exited(direction) {\n if (direction === 'down') {\n $this.addClass('exited');\n }\n },\n 'enter': function enter(direction) {\n if (direction === 'up') {\n $this.removeClass('exited');\n }\n }\n });\n });\n }\n });\n /* eslint-enable */\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('downloadsPromo', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/downloads-promo/templates/downloads-promo.html',\n 'controller': 'downloadsPromoController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n downloadsPromoController.$inject = [\"directiveData\", \"$http\", \"errorService\", \"templateVersion\"];\n angular.module('kappGlobal.b2c').controller('downloadsPromoController', downloadsPromoController);\n\n function downloadsPromoController(directiveData, $http, errorService, templateVersion) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n checkTemplateVersion();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getDataNewDesign() {\n return directiveData.getByUrl(ctrl.resource || 'downloads-promo').then(function (response) {\n ctrl.products = response.data.fields.products;\n ctrl.data = response.data.fields;\n\n _.forEach(ctrl.products, function (item, index) {\n if (item.match(/\\.json/)) {\n $http.get(item, { 'cache': true }).then(function (response) {\n return ctrl.products[index] = response.data.fields;\n }, handleRejection);\n }\n });\n }, handleRejection);\n }\n\n // Need two functions since the schema have change\n // Once 2.0 is everywhere, this can be removed\n // Before we had data holding mainProduct, product1 and product2\n // Now we have data.products which holds all 3 of them\n function getDataOldDesign() {\n return directiveData.getByUrl(ctrl.resource || 'downloads-promo').then(function (response) {\n ctrl.data = response.data.fields;\n angular.forEach(ctrl.data, function (item, index) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.data[index] = response.data.fields;\n }, handleRejection);\n });\n }, handleRejection);\n }\n\n function checkTemplateVersion() {\n templateVersion.getVer('home-security', 'meta', 'products/kscloud/meta').then(function (response) {\n ctrl.template = response && response.data.fields.template || '1.0';\n ctrl.template === '2.0' ? getDataNewDesign() : getDataOldDesign();\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('headerFeatures', {\n 'bindings': {\n 'resource': '@',\n 'fullWidth': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/header-features/templates/header-features.html',\n 'controller': 'headerFeaturesController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n headerFeaturesController.$inject = [\"directiveData\", \"errorService\", \"windowHelperService\", \"$scope\"];\n angular.module('kappGlobal.b2c').controller('headerFeaturesController', headerFeaturesController);\n\n function headerFeaturesController(directiveData, errorService, windowHelperService, $scope) {\n var ctrl = this;\n\n ctrl.data = {};\n ctrl.isMobile = windowHelperService.isMobile();\n ctrl.$onInit = activate;\n ctrl.downloadButtonTracking = downloadButtonTracking;\n\n function activate() {\n getData();\n windowHelperService.setComponentResponsiveFlag(ctrl, $scope);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'header-features').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n // Tracking is required in case if the link leads to download page\n function downloadButtonTracking(link) {\n if (link && link.match(/download/)) return 'Download Page Link2';\n return '';\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2c').component('b2cHmcBlock', {\n 'bindings': {\n 'resource': '@',\n 'contentName': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/hmc-block/templates/hmc-block.html',\n 'controller': 'b2cController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('kscloudDisclaimers', {\n 'bindings': {\n 'types': '<',\n 'disclaimerText': '<'\n },\n 'controller': 'kscloudDisclaimersController',\n 'templateUrl': '/resources/template/html/modules/b2c/components/kscloud-disclaimers/templates/kscloud-disclaimers.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n kscloudDisclaimersController.$inject = [\"directiveData\", \"$scope\", \"ngDialog\", \"errorService\"];\n angular.module('kappGlobal.b2c').controller('kscloudDisclaimersController', kscloudDisclaimersController);\n\n function kscloudDisclaimersController(directiveData, $scope, ngDialog, errorService) {\n var ctrl = this;\n ctrl.kscDisclaimerPopup = kscDisclaimerPopup;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.get('/home-security/products/kscloud/ksc-disclaimers.json').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function kscDisclaimerPopup() {\n ngDialog.open({\n 'data': ctrl,\n 'scope': $scope,\n 'className': 'ngdialog-plain ngdialog-narrow',\n 'template': '/resources/template/html/modules/b2c/components/kscloud-disclaimers/templates/kscloud-disclaimers-popup.html',\n 'closeByNavigation': true\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('kscloudFeaturedProducts', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'kscloudFeaturedProductsController',\n 'templateUrl': '/resources/template/html/modules/b2c/components/kscloud-featured-products/templates/kscloud-featured-products.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n kscloudFeaturedProductsController.$inject = [\"directiveData\", \"ENV\", \"productData\", \"errorService\"];\n angular.module('kappGlobal.b2c').controller('kscloudFeaturedProductsController', kscloudFeaturedProductsController);\n\n function kscloudFeaturedProductsController(directiveData, ENV, productData, errorService) {\n var ctrl = this;\n ctrl.env = ENV.locale;\n ctrl.products = '';\n ctrl.highlighted = '';\n ctrl.$onInit = activate;\n ctrl.bgArray = [];\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n if (ctrl.resource) ctrl.resource = ctrl.resource.replace(/cur-locale/, ctrl.env);\n\n return directiveData.getByUrl(ctrl.resource || 'featured-products-ksc').then(function (response) {\n ctrl.products = response.data.fields.productShortName;\n ctrl.data = response.data.fields;\n\n _.forEach(ctrl.products, function (value, index) {\n productData.getb2c(value).then(function (res) {\n ctrl.bgArray[index] = res.data.fields.bg;\n }, handleRejection);\n });\n\n ctrl.highlighted = response.data.fields.highlighted;\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('overTheAirInstall', {\n 'bindings': {\n 'resource': '@',\n 'otaData': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/over-the-air-install/templates/over-the-air-install.html',\n 'controller': 'overTheAirInstallController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n overTheAirInstallController.$inject = [\"angularLoad\", \"$scope\", \"$element\", \"$timeout\", \"$window\", \"windowHelperService\", \"errorService\"];\n angular.module('kappGlobal.b2c').controller('overTheAirInstallController', overTheAirInstallController);\n\n function overTheAirInstallController(angularLoad, $scope, $element, $timeout, $window, windowHelperService, errorService) {\n var ctrl = this,\n auth2 = void 0,\n isMobile = windowHelperService.isMobile();\n ctrl.signedIn = false;\n ctrl.id = $scope.$id;\n ctrl.$onChanges = waitForBinding;\n ctrl.$onInit = activate;\n\n function waitForBinding() {\n ctrl.otaData = JSON.parse(ctrl.otaData);\n }\n\n function activate() {\n if (!isMobile) loadOtaButton();\n }\n\n function loadOtaButton() {\n $scope.$emit('ota-button-available', true);\n\n angularLoad.loadScript('https://apis.google.com/js/api:client.js').then(function () {\n if ($window.gapi) {\n $window.gapi.load('auth2', function () {\n auth2 = $window.gapi.auth2.init({\n 'client_id': ctrl.otaData.otaClientId\n });\n\n auth2.then(function (googleAuth) {\n googleAuth.attachClickHandler('googleSignin-' + ctrl.id, {\n 'app_package_name': ctrl.otaData.otaPackageName\n }, onSuccess, handleRejection);\n }, handleRejection);\n\n auth2.isSignedIn.listen(onSuccess);\n }, handleRejection);\n }\n }, handleRejection);\n }\n\n function onSuccess() {\n // wait for digest\n $timeout(function () {\n return ctrl.signedIn = true;\n });\n }\n\n function handleRejection(rejection) {\n if (rejection.error === 'idpiframe_initialization_failed' || rejection.type === 'error') {\n $timeout(function () {\n return $scope.$emit('ota-button-available', false);\n });\n $element.hide();\n }\n\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2c').component('productDescriptionTable2up', {\n 'templateUrl': '/resources/template/html/modules/b2c/components/product-description-table-2up/templates/product-description-table-2up.html',\n 'multiElement': true,\n 'controller': 'productDescriptionTable2upController',\n 'bindings': {\n 'product': '<',\n 'resource': '@',\n 'buyblocks': '@'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n productDescriptionTable2upController.$inject = [\"$element\", \"$scope\", \"directiveData\", \"appHelperService\", \"windowHelperService\", \"$document\", \"$timeout\", \"errorService\", \"ENV\", \"geoLocationManager\"];\n angular.module('kappGlobal.b2c').controller('productDescriptionTable2upController', productDescriptionTable2upController);\n\n function productDescriptionTable2upController($element, $scope, directiveData, appHelperService, windowHelperService, $document, $timeout, errorService, ENV, geoLocationManager) {\n var ctrl = this;\n ctrl.syncPriceList = $scope.$parent.$ctrl ? $scope.$parent.$ctrl.syncPriceList : '';\n ctrl.$onInit = activate;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n ctrl.locale = ENV.locale;\n\n function activate() {\n getData();\n setupAffiliate();\n\n if (appHelperService.assertStateByName('product-kscloud-free')) blockProhibitedCountries();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'product-description-table-2up').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n runScript();\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function blockProhibitedCountries() {\n if (ctrl.locale === 'en\\-global' && geoLocationManager.isKscProhibitedCountry() || ctrl.locale === 'ru-ru' && geoLocationManager.getUserGeoIp() === 'by') {\n ctrl.isProductBlocked = true;\n directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n var res = response.data.fields;\n ctrl.buyblockUnavailableText = res.kscUnavailableText || res.buyblock_not_available_msg;\n });\n }\n }\n\n function setupAffiliate() {\n ctrl.isAffiliate = appHelperService.assertStateByName('product-ksk-affiliate');\n if (ctrl.isAffiliate) {\n ctrl.affiliateBuyLink = $scope.$parent.$ctrl.data.affiliateBuyLink;\n ctrl.affiliateBuyText = $scope.$parent.$ctrl.data.affiliateBuyText;\n }\n }\n\n function runScript() {\n var table = angular.element($document[0].getElementsByClassName('comparison-chart'));\n\n // Check if current page has comparison charts on it\n if (table.length) {\n // Loop through each comparison chart and set the default column\n var mobileDefault = table[0].getAttribute('data-comparison-default');\n\n $timeout(function () {\n var newElements = angular.element(table[0].getElementsByClassName(mobileDefault));\n newElements.addClass('currently-active');\n });\n }\n\n $($element).find('.comparison-nav li a').on('click', function (e) {\n e.preventDefault();\n var $this = $(this),\n direction = $this.data('comparison-nav-direction'),\n chartID = $this.closest('.comparison-nav').data('comparison-chart'),\n $comparisonChart = $('.comparison-chart[data-comparison-chart=\"' + chartID + '\"]'),\n $comparisonChartNav = $('.comparison-nav[data-comparison-chart=\"' + chartID + '\"]');\n\n $comparisonChartNav.find('li a.feat').removeClass('feat');\n\n // Get current column\n var $currentColumn = $comparisonChart.find('.row-header .column-product.currently-active'),\n currentTitle = $currentColumn.find('h2.product-title a').html(),\n currentID = parseInt($currentColumn.data('column')),\n nextID = parseInt(currentID + 1),\n prevID = parseInt(currentID - 1),\n nextNavID = parseInt(currentID + 2),\n prevNavID = parseInt(currentID - 2);\n\n // Check direction and if prev/next column exists\n if (direction === 'prev' && $comparisonChart.find('.column-product.column-' + prevID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + prevID).addClass('currently-active');\n var newPrevTitle = $comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a').html();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-prev a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-next a').addClass('feat');\n }\n\n $comparisonChartNav.find('li.nav-prev a').empty().html(newPrevTitle);\n $comparisonChartNav.find('li.nav-next a').empty().html(currentTitle);\n } else if (direction === 'next' && $comparisonChart.find('.column-product.column-' + nextID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + nextID).addClass('currently-active');\n var newNextTitle = $comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a').html();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-next a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-prev a').addClass('feat');\n }\n\n $comparisonChartNav.find('li.nav-next a').empty().html(newNextTitle);\n $comparisonChartNav.find('li.nav-prev a').empty().html(currentTitle);\n }\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('productFeatures', {\n 'bindings': {\n 'type': '@',\n 'productInfo': '<',\n 'resource': '@',\n 'upgradeButton': '@',\n 'template': '@',\n 'redesign': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/product-features/templates/product-features.html',\n 'controller': 'productFeaturesController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n productFeaturesController.$inject = [\"$timeout\", \"directiveData\", \"appHelperService\", \"windowHelperService\", \"$element\", \"ENV\", \"errorService\", \"ngDialog\"];\n angular.module('kappGlobal.b2c').controller('productFeaturesController', productFeaturesController);\n\n function productFeaturesController($timeout, directiveData, appHelperService, windowHelperService, $element, ENV, errorService, ngDialog) {\n var ctrl = this,\n isRTL = appHelperService.isPageDirectionRTL(),\n $dialog = ngDialog,\n isB2CProduct = appHelperService.assertStateByName('home-product'),\n slickConfig = {\n 'infinite': true,\n 'slidesToShow': 3,\n 'slidesToScroll': 3,\n 'autoplaySpeed': 4000,\n 'adaptiveHeight': isB2CProduct,\n 'dots': true,\n 'rtl': isRTL,\n 'accessibility': false,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'responsive': [{\n 'breakpoint': isRTL ? 769 : 901,\n 'settings': {\n 'slidesToShow': 3,\n 'slidesToScroll': 3,\n 'infinite': true,\n 'dots': true\n }\n }, {\n 'breakpoint': isRTL ? 600 : 769,\n 'settings': {\n 'slidesToShow': 2,\n 'slidesToScroll': 2\n }\n }, {\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'arrows': false\n }\n }]\n };\n ctrl.env = ENV.locale;\n ctrl.$onInit = activate;\n ctrl.videoPopup = videoPopup;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n ctrl.buyblockData = response.data.fields;\n }, handleRejection);\n\n if (ctrl.resource) ctrl.resource = ctrl.resource.replace(/cur-locale/, ctrl.env);\n\n return directiveData.getByUrl(ctrl.resource || 'product-features').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n runScripts();\n });\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function runScripts() {\n $($element).find('.image-link').magnificPopup({\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n\n $($element).find('.product-features-carousel:not(.slick-initialized)').slick(slickConfig);\n }\n\n function videoPopup(url) {\n var embedSrc = url,\n sources = {\n 'youtube': {\n 'site': 'youtube.com',\n 'id': 'v=',\n 'src': '//www.youtube.com/embed/%id%?autoplay=1&rel=0'\n },\n 'gmaps': {\n 'site': '//maps.google.',\n 'src': '%id%&output=embed'\n }\n };\n\n _.forEach(sources, function (item) {\n if (embedSrc.indexOf(item.site) > -1) {\n if (item.id) {\n if (angular.isString(item.id)) {\n embedSrc = embedSrc.substr(embedSrc.lastIndexOf(item.id) + item.id.length, embedSrc.length);\n }\n }\n embedSrc = item.src.replace('%id%', embedSrc);\n\n return false;\n }\n });\n\n return $dialog.open({\n 'template': '
    ',\n 'className': 'ngdialog-iframe ngdialog-flyout',\n 'showClose': true,\n 'plain': true,\n 'name': 'video-popup'\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('productsCarousel', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/products-carousel/templates/products-carousel.html',\n 'controller': 'productsCarouselController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n productsCarouselController.$inject = [\"$element\", \"errorService\", \"$location\", \"$http\", \"$timeout\", \"$scope\", \"$q\", \"directiveData\", \"osDetectService\", \"appHelperService\", \"geoLocationManager\", \"$state\"];\n angular.module('kappGlobal.b2c').controller('productsCarouselController', productsCarouselController);\n\n function productsCarouselController($element, errorService, $location, $http, $timeout, $scope, $q, directiveData, osDetectService, appHelperService, geoLocationManager, $state) {\n var ctrl = this,\n curUrl = $state.href($state.current.name, $state.params, { 'absolute': true }),\n geoIP = geoLocationManager.getUserGeoIp(curUrl),\n isRTL = appHelperService.isPageDirectionRTL();\n\n ctrl.data = {};\n ctrl.isVPN = geoLocationManager.isVpnProhibitedCountry(geoIP);\n ctrl.$onInit = activate;\n ctrl.toggleMobileFilters = toggleMobileFilters;\n ctrl.scopeId = $scope.$id;\n ctrl.setMobileNavTitle = setMobileNavTitle;\n ctrl.selectTab = selectTab;\n ctrl.getActiveTab = getActiveTab;\n ctrl.isKSC = isKSC;\n ctrl.borderAndBackground = borderAndBackground;\n ctrl.uniqProducts = [];\n ctrl.productOrderMatrix = [];\n ctrl.tabContent = [];\n ctrl.tabOrder = [];\n\n var slickConfig = {\n 'infinite': true,\n 'slidesToShow': 4,\n 'slidesToScroll': 4,\n 'autoplaySpeed': 4000,\n 'dots': true,\n 'rtl': isRTL,\n 'accessibility': false,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'responsive': [{\n 'breakpoint': isRTL ? 769 : 901,\n 'settings': {\n 'slidesToShow': 3,\n 'slidesToScroll': 3,\n 'infinite': true,\n 'dots': true\n }\n }, {\n 'breakpoint': isRTL ? 600 : 769,\n 'settings': {\n 'slidesToShow': 2,\n 'slidesToScroll': 2\n }\n }, {\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1,\n 'slidesToScroll': 1\n }\n }]\n };\n\n function activate() {\n getData();\n getBuyblockTranslations();\n\n $scope.$on('$destroy', function () {\n stopSlick();\n });\n }\n\n function startSlick() {\n $element.find('.product-list.slides').slick(slickConfig);\n\n // fix for https://jira.kaspersky.com/browse/TRAFFIC-1624\n // issue with Slick 1.7.1 where calling unslick seems to remove all events bounds on children elements\n // including ng-click\n $element.find('.product-carousel-item rating .reviews').on('click', function () {\n $scope.$broadcast('open-popup', $(this).parent('rating').attr('product-id'));\n });\n }\n\n function stopSlick() {\n $element.find('.slick-initialized').slick('unslick');\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'product-carousel').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.enableTabFilter = ctrl.data.enableTabFilter === 'true';\n ctrl.autoPlayEnabled = ctrl.data.enableAutoPlay === 'true';\n\n if (ctrl.autoPlayEnabled) _.set(slickConfig, 'autoplay', 'true');\n\n var uniqArr = [],\n tabOrder = [];\n\n for (var i = 0; i < ctrl.data.carouselTabs.length; i++) {\n ctrl.productOrderMatrix.push(ctrl.data.carouselTabs[i].carouselProduct);\n tabOrder.push(ctrl.data.carouselTabs[i].tabID);\n\n for (var j = 0; j < ctrl.data.carouselTabs[i].carouselProduct.length; j++) {\n if (uniqArr.indexOf(ctrl.data.carouselTabs[i].carouselProduct[j]) === -1) uniqArr.push(ctrl.data.carouselTabs[i].carouselProduct[j]);\n }\n }\n\n if (!ctrl.enableTabFilter) selectTab(0);\n\n return $q.all(uniqArr.map(function (product) {\n if (product.match(/\\.json/)) {\n return $http.get(product, { 'cache': true }).then(function (response) {\n return [product, response.data];\n }, handleRejection);\n }\n })).then(function (response) {\n ctrl.uniqProducts = response;\n var activeTab = tabOrder.indexOf(mapSelectedKey());\n selectTab(activeTab > 0 ? activeTab : 0);\n });\n }, function (rejection) {\n errorService.warn('Unable to get product-section data', rejection);\n $element.hide();\n });\n }\n\n function getBuyblockTranslations() {\n return directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n ctrl.buyblockTranslations = response.data.fields;\n });\n }\n\n function setMobileNavTitle() {\n return $element.find('.tabs li.selected:first a').text().trim();\n }\n\n function getDefaultOS() {\n var hash = $location.hash(),\n osDetected = osDetectService.getCurrentOs(hash),\n osSelection = osDetected.device && osDetected.device.type;\n\n if (osDetected.device && String(osDetected.device.type) === 'mobile') {\n if (osDetected.device.subDevice.os.length) {\n osSelection = osDetected.device.subDevice.os;\n } else {\n osSelection = osDetected.device.type;\n }\n }\n return osSelection;\n }\n\n function toggleMobileFilters() {\n ctrl.showMobileFilters = !ctrl.showMobileFilters;\n }\n\n function mapSelectedKey() {\n var defaultOS = getDefaultOS(),\n keysMap = [{ 'os': 'pc', 'active': 'pc-tab' }, { 'os': 'mac', 'active': 'osx-tab' }, { 'os': 'android', 'active': 'android-tab' }, { 'os': 'ios', 'active': 'ios-tab' }, { 'os': 'mobile', 'active': 'android-tab' }, { 'os': 'free-tools', 'active': 'free-tools-tab' }],\n key = _.find(keysMap, function (obj) {\n return obj.os === defaultOS;\n });\n return !key ? 'all-tab' : key.active;\n }\n\n function selectTab(tab) {\n stopSlick();\n ctrl.currentTab = tab;\n\n var pathToDataMap = ctrl.uniqProducts.reduce(function (res, value) {\n res[value[0]] = value[1];\n return res;\n }, {});\n\n // force all items to clear\n // solves slick changing item order\n ctrl.tabContent = [];\n\n $timeout(function () {\n ctrl.tabContent = ctrl.productOrderMatrix[tab].filter(function (path) {\n return pathToDataMap[path] !== undefined;\n }).map(function (item) {\n return pathToDataMap[item];\n });\n\n $timeout(function () {\n return startSlick();\n });\n });\n\n if (ctrl.showMobileFilters) toggleMobileFilters();\n }\n\n function getActiveTab(tabUrl) {\n return tabUrl === ctrl.currentTab;\n }\n\n function borderAndBackground(tabFields) {\n if (!appHelperService.isTrue(ctrl.data.borderAndBg)) {\n if (tabFields.shortName === 'ksc-personal') return 'combine-item combine-item-left';else if (tabFields.shortName === 'ksc-family') return 'combine-item combine-item-right';\n }\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function isKSC(tab) {\n return tab.fields.shortName === 'ksc-personal' || tab.fields.shortName === 'ksc-family';\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.promoComparisonChart').component('promoComparisonChart', {\n 'bindings': {\n 'resource': '@',\n 'template': '@',\n 'component': '@'\n },\n 'controller': 'promoComparisonChartController',\n 'templateUrl': ['$attrs', function ($attrs) {\n var template = 'default';\n\n if ($attrs.template) {\n template = $attrs.template;\n }\n\n return '/resources/template/html/modules/b2c/components/promo-comparison-chart/templates/promo-comparison-chart-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n promoComparisonChartController.$inject = [\"$http\", \"$element\", \"$scope\", \"$timeout\", \"directiveData\", \"$rootScope\", \"errorService\", \"osDetectService\", \"appHelperService\", \"ENV\", \"$window\"];\n angular.module('kappGlobal.promoComparisonChart').controller('promoComparisonChartController', promoComparisonChartController);\n\n function promoComparisonChartController($http, $element, $scope, $timeout, directiveData, $rootScope, errorService, osDetectService, appHelperService, ENV, $window) {\n var ctrl = this;\n ctrl.products = {};\n ctrl.toggleHidden = true;\n ctrl.$onInit = activate;\n\n var ngRender = $rootScope.$on('ngRender', function () {\n if (ctrl.data) {\n runScripts();\n }\n\n ngRender();\n });\n\n // temp fix for landing pages running this compare table\n // it wouldn't work on mobile because ngRender doesn't trigger\n if ($window.customFlag) $timeout(function () {\n runScripts();\n }, 2000);\n\n function activate() {\n var OS = getOS();\n if (OS && OS.type === 'mobile' && ENV.locale === 'en-gb') return;\n getData();\n }\n\n function getOS() {\n var hash = appHelperService.getLocationHash(),\n osDetected = osDetectService.getCurrentOs(hash);\n return osDetected.device;\n }\n\n function isRowHeader(row) {\n return row.chartRowHeader && row.chartRowHeader[0] === 'true';\n }\n\n function isRowHidePoint(row) {\n return row.chartHidePastPoint && row.chartHidePastPoint[0] === 'true';\n }\n\n function getGroupedRows(data) {\n var rows = [],\n currentGroupId = 0,\n currentGroupHide = false,\n insertExpandCollapse = function insertExpandCollapse() {\n rows.push({ 'isExpandCollapse': true, 'groupId': currentGroupId });\n };\n\n for (var i = 0, row; i < data.chartRows.length; i++) {\n row = data.chartRows[i];\n\n var isHeader = isRowHeader(row),\n hideAfter = isRowHidePoint(row);\n\n if (isHeader) {\n row.isHeader = true;\n row.chartColumns = [].constructor(data.chartHeader.length);\n\n if (currentGroupHide) {\n insertExpandCollapse();\n }\n\n currentGroupId++;\n currentGroupHide = false;\n }\n\n if (hideAfter) {\n currentGroupHide = true;\n }\n\n row.groupId = currentGroupId;\n row.shouldHide = currentGroupHide;\n\n rows.push(row);\n }\n\n if (currentGroupHide) {\n insertExpandCollapse();\n }\n\n return rows;\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'promo-comparison-chart').then(function (response) {\n if (!response.data.fields) return false;\n\n ctrl.data = response.data.fields;\n ctrl.data.chartRows = getGroupedRows(ctrl.data);\n ctrl.expandedGroups = {};\n\n ctrl.data.chartHeader.forEach(function (item, index) {\n if (item.chartColProduct && item.chartColProduct.match(/\\.json/)) {\n $http.get(item.chartColProduct, { 'cache': true }).then(function (response) {\n return ctrl.products[index] = response.data.fields;\n }, handleRejection);\n }\n });\n }, function (rejection) {\n $element.hide();\n errorService.warn(rejection);\n });\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function runScripts() {\n var mobileDefault = void 0;\n // Check if current page has comparison charts on it\n if ($('.comparison-chart').length) {\n // Loop through each comparison chart and set the default column\n mobileDefault = $('.comparison-chart').data('comparison-default');\n $('.comparison-chart .' + mobileDefault).addClass('currently-active');\n }\n $('.comparison-nav li a').on('click', function (e) {\n e.preventDefault();\n var $this = $(this),\n\n // Get navigation direction\n direction = $this.data('comparison-nav-direction'),\n\n // Get chart ID from the data attribute\n chartID = $this.closest('.comparison-nav').data('comparison-chart'),\n\n // Get comparison chart using that ID\n $comparisonChart = $('.comparison-chart[data-comparison-chart=\"' + chartID + '\"]'),\n\n // Get comparison chart mobile nav\n $comparisonChartNav = $('.comparison-nav[data-comparison-chart=\"' + chartID + '\"]'),\n\n // Get current column\n $currentColumn = $comparisonChart.find('.row-header .column-product.currently-active'),\n currentTitle = $currentColumn.find('h2.product-title a').clone(),\n currentID = parseInt($currentColumn.data('column')),\n nextID = parseInt(currentID + 1),\n prevID = parseInt(currentID - 1),\n nextNavID = parseInt(currentID + 2),\n prevNavID = parseInt(currentID - 2);\n\n // Remove featured style from the comparison chart mobile nav\n $comparisonChartNav.find('li a.feat').removeClass('feat');\n $comparisonChart.find('.row-header:not(.no-feat) .column-product.column-' + ($scope.$ctrl.data.chartHeader.length + 1) + ' h2.product-title a').addClass('feat');\n\n // Check direction and if prev/next column exists\n if (direction === 'prev' && $comparisonChart.find('.column-product.column-' + prevID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + prevID).addClass('currently-active');\n var newPrevTitle = $comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a').clone();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('ul:not(.no-feat) li.nav-prev a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('ul:not(.no-feat) li.nav-next a').addClass('feat');\n }\n\n $comparisonChartNav.find('li.nav-prev a').html(newPrevTitle.children());\n $comparisonChartNav.find('li.nav-next a').html(currentTitle.children());\n } else if (direction === 'next' && $comparisonChart.find('.column-product.column-' + nextID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + nextID).addClass('currently-active');\n var newNextTitle = $comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a').clone();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('ul:not(.no-feat) li.nav-next a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('ul:not(.no-feat) li.nav-prev a').addClass('feat');\n }\n $comparisonChartNav.find('li.nav-next a').html(newNextTitle.children());\n $comparisonChartNav.find('li.nav-prev a').html(currentTitle.children());\n }\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('b2cResourceCenterBlock', {\n 'bindings': {\n 'contentName': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/resource-center-block/templates/resource-center-block.html',\n 'controller': 'b2cController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('hpReviewsSection', {\n 'bindings': {\n 'resource': '@',\n 'productId': '@',\n 'alignHeight': '<'\n },\n 'controller': 'hpReviewsSectionController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n if ($attrs.template) template = $attrs.template;\n return '/resources/template/html/modules/b2c/components/reviews-section/templates/reviews-section-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n hpReviewsSectionController.$inject = [\"$timeout\", \"$element\", \"$rootScope\", \"directiveData\", \"sessionStorageService\", \"errorService\", \"appHelperService\"];\n angular.module('kappGlobal.b2c').controller('hpReviewsSectionController', hpReviewsSectionController);\n\n function hpReviewsSectionController($timeout, $element, $rootScope, directiveData, sessionStorageService, errorService, appHelperService) {\n var ctrl = this,\n ngRender = $rootScope.$on('ngRender', runScripts),\n isRTL = appHelperService.isPageDirectionRTL(),\n isB2CProduct = appHelperService.assertStateByName('home-product'),\n slickConfig = {\n 'infinite': true,\n 'slidesToShow': 3,\n 'slidesToScroll': 3,\n 'autoplaySpeed': 4000,\n 'adaptiveHeight': isB2CProduct,\n 'dots': true,\n 'rtl': isRTL,\n 'accessibility': false,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'responsive': [{\n 'breakpoint': isRTL ? 769 : 901,\n 'settings': {\n 'slidesToShow': 3,\n 'slidesToScroll': 3,\n 'infinite': true,\n 'dots': true\n }\n }, {\n 'breakpoint': isRTL ? 600 : 769,\n 'settings': {\n 'slidesToShow': 2,\n 'slidesToScroll': 2\n }\n }, {\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'arrows': false\n }\n }]\n };\n ctrl.showReviews = showReviews;\n ctrl.starsArr = _.range(0, 5, 1);\n ctrl.$onInit = activate;\n\n function activate() {\n getTitleTranslations();\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'reviews-section').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.productId = ctrl.data.bvId ? ctrl.data.bvId : ctrl.productId;\n ctrl.bvCarouselEnabled = Boolean(ctrl.data.disableBvCarousel && ctrl.data.disableBvCarousel[0] === 'true');\n }, function (rejection) {\n $element.hide();\n errorService.warn(rejection);\n });\n }\n\n function getTitleTranslations() {\n var cachedTranslations = sessionStorageService.get('local[general-translations]');\n\n if (cachedTranslations) {\n ctrl.translations = cachedTranslations.fields;\n } else {\n directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n });\n }\n }\n\n function showReviews(value) {\n $rootScope.$emit('showReviewsPopup', value);\n }\n\n function runSlickConfig() {\n $element.find('.reviews-list:not(.slick-initialized):not(.bv-slides)').slick(slickConfig);\n $element.find('.reviews-list.bv-slides:not(.slick-initialized)').slick(angular.extend({}, slickConfig, {\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'responsive': [{\n 'breakpoint': isRTL ? 769 : 901,\n 'settings': {\n 'slidesToShow': 1,\n 'slidesToScroll': 1\n }\n }, {\n 'breakpoint': isRTL ? 600 : 769,\n 'settings': {\n 'slidesToShow': 1,\n 'slidesToScroll': 1\n }\n }, {\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'arrows': false\n }\n }]\n }));\n }\n\n function runScripts() {\n $('.ellipsis').dotdotdot({\n 'callback': function callback() {\n $timeout(function () {\n runSlickConfig();\n }, 100);\n },\n 'ellipsis': '... ',\n 'height': 240\n });\n\n ngRender();\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('safeKids', {\n 'bindings': {\n 'copy': '@'\n },\n 'controller': 'safeKidsController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/b2c/components/safe-kids/templates/safe-kids-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n safeKidsController.$inject = [\"$rootScope\", \"$scope\", \"directiveData\", \"priceData\", \"appHelperService\", \"buyblockService\", \"errorService\"];\n angular.module('kappGlobal.b2c').controller('safeKidsController', safeKidsController);\n\n function safeKidsController($rootScope, $scope, directiveData, priceData, appHelperService, buyblockService, errorService) {\n var ctrl = this,\n currencyChange = $rootScope.$on('currencyChange', handleCurrencyChange);\n\n ctrl.data = {};\n ctrl.syncPriceList = {};\n ctrl.currency = buyblockService.getCurrency(ctrl);\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n $scope.$on('$destroy', handleScopeDestroyed);\n }\n\n function getData() {\n return directiveData.get('/b2c-tools/ksk/kss-section.json').then(function (response) {\n ctrl.data = response.data.fields;\n if (!appHelperService.assertStateByName('product-ksk-affiliate')) {\n setupPriceList();\n }\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function setupPriceList() {\n ctrl.syncPriceList.active = ctrl.data.priceList[0] === 'active';\n if (ctrl.syncPriceList.active && ctrl.data.priceListId) {\n ctrl.syncPriceList.priceListCTA = ctrl.data.priceListCTA;\n getPriceList();\n }\n }\n\n function getPriceList() {\n var autorenew = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n return priceData.getPrice(ctrl.data.priceListId, 'Purchase').then(function (response) {\n var priceList = response.data;\n\n ctrl.syncPriceList.hasAR = priceList.some(function (item) {\n return item.autorenew;\n });\n ctrl.syncPriceList.priceList = _.find(priceList, function (item) {\n return item.autorenew === (ctrl.syncPriceList.hasAR && autorenew);\n });\n if (!angular.isObject(ctrl.syncPriceList.priceList)) {\n return handlePriceError('API not available');\n }\n ctrl.syncPriceList.productPricesExist = true;\n return getBuyUrl();\n }, handlePriceError);\n }\n\n /**\n * Handles product not found, prices or service not available\n * @param {String} response\n */\n function handlePriceError(response) {\n ctrl.syncPriceList.productPricesExist = false;\n ctrl.isBBReady = true;\n $rootScope.buyBlockReady();\n errorService.warn(response);\n return false;\n }\n\n function getBuyUrl() {\n ctrl.syncPriceList.priceId = ctrl.syncPriceList.priceList.id;\n return priceData.getCartLink(ctrl.syncPriceList.priceList.product_id, ctrl.syncPriceList.priceId, 'Purchase', '', '', ctrl.syncPriceList.buyLink).then(function (response) {\n ctrl.syncPriceList.buyLink = response.data;\n $rootScope.buyBlockReady();\n }, handleRejection);\n }\n\n function handleCurrencyChange() {\n if (ctrl.currency === $rootScope.currency) return;\n ctrl.currency = $rootScope.currency;\n if (ctrl.syncPriceList.active && ctrl.data.priceListId) {\n getPriceList();\n }\n }\n\n var arPopupCheck = $rootScope.$on('arPopupCheck', handleARChange);\n\n function handleARChange(event, value) {\n getPriceList(value);\n }\n\n function handleScopeDestroyed() {\n currencyChange();\n arPopupCheck();\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('secondaryList', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/secondary-list/templates/secondary-list.html',\n 'controller': 'secondaryListController'\n\n }).component('secondaryListDocumentationItem', {\n 'bindings': {\n 'productGroup': '<'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/secondary-list/templates/secondary-list-documentation-item.html',\n 'controller': 'secondaryListDocumentationItemController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n secondaryListController.$inject = [\"$element\", \"$timeout\", \"directiveData\", \"errorService\"];\n secondaryListDocumentationItemController.$inject = [\"$element\", \"$timeout\", \"downloadLinks\", \"ENV\", \"errorService\"];\n angular.module('kappGlobal.b2c').controller('secondaryListController', secondaryListController).controller('secondaryListDocumentationItemController', secondaryListDocumentationItemController);\n\n function secondaryListController($element, $timeout, directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.buttonMore = true;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'secondary-list').then(function (response) {\n ctrl.data = response.data.fields;\n runScript();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScript() {\n $timeout(function () {\n $($element).find('.section-footer .button').click(function (e) {\n e.preventDefault();\n });\n });\n }\n\n ctrl.showMore = function () {\n if (ctrl.buttonMore) {\n $element.find('li').addClass('hide-previous');\n $element.find('.previous-wrapper').slideDown();\n $element.find('li').toggleClass('show-previous', true);\n } else {\n $element.find('li').addClass('show-previous');\n $element.find('.previous-wrapper').slideUp();\n $element.find('li').toggleClass('show-previous', false);\n }\n\n ctrl.buttonMore = !ctrl.buttonMore;\n };\n }\n\n function secondaryListDocumentationItemController($element, $timeout, downloadLinks, ENV, errorService) {\n var ctrl = this,\n application = '',\n docSettings = {};\n ctrl.productGroup = ctrl.productGroup || {\n 'productListTaxonomy': [], 'selectedLanguagesCodes': '',\n 'fallbackLanguageCode': '', 'productsList': [], 'websiteCountryCode': ''\n };\n ctrl.$onInit = activate;\n\n function activate() {\n setupProductGroupOptions();\n getData();\n }\n\n function setupProductGroupOptions() {\n if (ctrl.productGroup.productListTaxonomy && ctrl.productGroup.productListTaxonomy.length > 0) {\n application = ctrl.productGroup.productListTaxonomy.map(function (item) {\n return item.key;\n });\n }\n if (ctrl.productGroup.selectedLanguagesCodes && !angular.isString(ctrl.productGroup.selectedLanguagesCodes)) {\n ctrl.productGroup.selectedLanguagesCodes = ctrl.productGroup.selectedLanguagesCodes.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n if (ctrl.productGroup.fallbackLanguageCode && !angular.isString(ctrl.productGroup.fallbackLanguageCode)) {\n ctrl.productGroup.fallbackLanguageCode = ctrl.productGroup.fallbackLanguageCode.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n docSettings = {\n 'applications': application || ctrl.productGroup.productsList.split(','),\n 'options': {\n 'links_type': 'Docs',\n 'locale_selection_type': ctrl.productGroup.localeSelectionType,\n 'selected_languages_codes': ctrl.productGroup.selectedLanguagesCodes,\n 'fallback_language_code': ctrl.productGroup.fallbackLanguageCode || 'en',\n 'website_country_code': ctrl.productGroup.websiteCountryCode || ENV.locale.substr(3, 5),\n 'website_language_code': 'en',\n 'website_fallback_language': '',\n 'lang_locale_link_selection_amount': null,\n 'show_release_version_type': null,\n 'use_aux_lang_for_app_plugins': null\n }\n };\n }\n\n function getData() {\n return downloadLinks.getByApp('', docSettings).then(function (response) {\n ctrl.downloadsData = response.data;\n runScript();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScript() {\n $timeout(function () {\n $($element).find('.toggle').click(function (e) {\n e.preventDefault();\n $(this).parents('li').toggleClass('show-previous');\n $(this).parent().siblings('.previous-wrapper').slideToggle();\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n simpleTableWrapperController.$inject = [\"$timeout\", \"$window\", \"$rootScope\", \"$scope\"];\n angular.module('kappGlobal.b2c').component('simpleTableWrapper', {\n 'bindings': {\n 'mobileTemplate': '@'\n },\n 'controller': 'simpleTableWrapperController',\n 'templateUrl': '/resources/template/html/modules/b2c/components/simple-table/templates/simple-table-wrapper.html'\n }).controller('simpleTableWrapperController', simpleTableWrapperController);\n\n function simpleTableWrapperController($timeout, $window, $rootScope, $scope) {\n var ctrl = this,\n $windowElement = angular.element($window),\n windowResizeThrottle = void 0;\n\n ctrl.toggleTable = toggleTable;\n ctrl.$onInit = activate;\n ctrl.isMobile = false;\n\n function onToggleTableWrapper() {\n var REDESIGN_TABLE_MOBI_DESKTOP_SWITCH_BREAKPOINT = 769;\n\n ctrl.isMobile = $window.innerWidth < REDESIGN_TABLE_MOBI_DESKTOP_SWITCH_BREAKPOINT;\n\n $timeout(function () {\n $scope.$broadcast('ngWrapperRender');\n });\n }\n\n function onWindowResizeListener() {\n $timeout.cancel(windowResizeThrottle);\n\n windowResizeThrottle = $timeout(onToggleTableWrapper, 200);\n }\n\n $windowElement.on('resize', onWindowResizeListener);\n\n ctrl.$onDestroy = function () {\n $windowElement.off('resize', onWindowResizeListener);\n $timeout.cancel(windowResizeThrottle);\n\n $windowElement = null;\n };\n\n var ngRender = $rootScope.$on('ngRender', function () {\n onToggleTableWrapper();\n ngRender();\n });\n\n function toggleTable(event) {\n event.preventDefault();\n ctrl.showTable = !ctrl.showTable;\n }\n\n function activate() {\n onToggleTableWrapper();\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('simpleTable', {\n 'bindings': {\n 'resource': '@',\n 'template': '@',\n 'products': '@',\n 'notResponsive': '<',\n 'wrapperMode': '<'\n },\n 'controller': 'simpleTableController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n if ($attrs.template) template = $attrs.template;\n return '/resources/template/html/modules/b2c/components/simple-table/templates/simple-table-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n simpleTableController.$inject = [\"directiveData\", \"$element\", \"$timeout\", \"$location\", \"errorService\", \"$http\", \"ENV\"];\n angular.module('kappGlobal.b2c').controller('simpleTableController', simpleTableController);\n\n function simpleTableController(directiveData, $element, $timeout, $location, errorService, $http, ENV) {\n var ctrl = this;\n\n ctrl.currentProduct = 1;\n ctrl.locationPath = $location.path();\n ctrl.chart = 0;\n ctrl.cols = 0;\n ctrl.attr = 0;\n ctrl.data = {};\n ctrl.$onInit = activate;\n ctrl.locale = ENV.locale;\n ctrl.toggleTable = toggleTable;\n ctrl.columnLabels = columnLabels;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'simple-table').then(function (response) {\n var promises = void 0;\n var getStartCol = function getStartCol(rowIndex) {\n for (var x = 1; x < ctrl.rowToCell[rowIndex].length; x++) {\n if (!ctrl.rowToCell[rowIndex][x].fill) {\n return x;\n }\n }\n };\n\n ctrl.rowToCell = [];\n ctrl.data = response.data.fields;\n ctrl.products = ctrl.data.tableLastRow.slice() || [];\n ctrl.cols = ctrl.data.rows[0].cell.length !== 0 ? ctrl.data.rows[0].cell.length : ctrl.data.rows[0].rowTxt.length;\n ctrl.chart = ctrl.cols - 1;\n ctrl.attr = ctrl.chart * ctrl.cols;\n ctrl.default = ctrl.data.default || 2;\n ctrl.maxRows = parseInt(ctrl.data.maxRows) || 999;\n ctrl.showMore = ctrl.data.showMoreText || 'Show more features';\n ctrl.showLess = ctrl.data.showLessText || 'Show less features';\n ctrl.data.template = ctrl.data.template || '';\n\n if (ctrl.products) {\n promises = ctrl.products.map(function (item, index) {\n if (item.productLink && item.productLink.match(/\\.json/)) {\n return $http.get(item.productLink, { 'cache': true }).then(function (response) {\n ctrl.products[index] = response.data.fields;\n });\n }\n });\n }\n\n ctrl.data.rows.forEach(function () {\n var cells = [];\n\n ctrl.data.rows[0].cell.forEach(function () {\n cells.push({});\n });\n\n ctrl.rowToCell.push(cells);\n });\n\n ctrl.data.rows.forEach(function (row, rowIndex) {\n if (rowIndex > 0) {\n if (row.isDivider[0] !== 'True') {\n row.cell.forEach(function (col, colIndex) {\n var rowspan = void 0;\n var colspan = void 0;\n var startCol = void 0;\n var cell = void 0;\n var x = void 0;\n var y = void 0;\n\n if (colIndex > 0) {\n rowspan = col.rowspan || 1;\n colspan = col.colspan || 1;\n startCol = getStartCol(rowIndex);\n\n for (x = 0; x < colspan; x++) {\n for (y = 0; y < rowspan; y++) {\n cell = ctrl.rowToCell[rowIndex + y][startCol + x];\n cell.fill = true;\n cell.row = rowIndex;\n cell.col = colIndex;\n }\n }\n }\n });\n }\n }\n });\n\n ctrl.getRowToCell = function (index) {\n var cell = ctrl.rowToCell[index] && ctrl.rowToCell[index][ctrl.currentProduct];\n\n return cell ? ctrl.data.rows[cell.row].cell[cell.col] : {};\n };\n\n ctrl.reloader = true;\n ctrl.reloaderHeight = 0;\n\n ctrl.getReloaderStyle = function () {\n return {\n 'height': (ctrl.reloader ? 'auto' : ctrl.reloaderHeight) + 'px'\n };\n };\n\n ctrl.changeCurrentProduct = function (delta, $event) {\n if ($event) {\n $event.preventDefault();\n }\n\n ctrl.reloaderHeight = $element.get(0).getBoundingClientRect().height;\n ctrl.currentProduct += delta;\n ctrl.reloader = false;\n\n $timeout(function () {\n ctrl.reloader = true;\n });\n\n return false;\n };\n\n return promises;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function toggleTable(event) {\n event.preventDefault();\n ctrl.showTable = !ctrl.showTable;\n }\n\n function columnLabels(colNumber) {\n return ctrl.data.columnLabels && _.find(ctrl.data.columnLabels, function (item) {\n return item.number === colNumber;\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('softwareDocs', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/software-docs/templates/software-docs.html',\n 'controller': 'softwareDocsController'\n\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n softwareDocsController.$inject = [\"$q\", \"ENV\", \"directiveData\", \"downloadLinks\", \"errorService\"];\n angular.module('kappGlobal.b2c').controller('softwareDocsController', softwareDocsController);\n\n function softwareDocsController($q, ENV, directiveData, downloadLinks, errorService) {\n var ctrl = this,\n application = '',\n docSettings = {},\n hideAlphabets = [];\n ctrl.downloadData = [];\n ctrl.downloads = [];\n ctrl.downloadVer = [];\n ctrl.filteredDownloads = [];\n ctrl.mergedDownloads = [];\n ctrl.langArray = [];\n ctrl.onLanguageChange = onLanguageChange;\n ctrl.$onInit = activate;\n // Year dropdown and functionality removed in this sha 16643d9c8036ec7701e4d57571b88fa1e2d06413\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function activate() {\n var promises = [getGeneralSettings(), getProductDownloadData()];\n $q.all(promises);\n }\n\n function getGeneralSettings() {\n return directiveData.getLocal('general-settings').then(function (response) {\n var res = response.data.fields;\n if (res && res.hideAlphabets) return hideAlphabets = res.hideAlphabets;\n }, handleRejection);\n }\n\n function getProductDownloadData() {\n return directiveData.getByUrl(ctrl.resource || 'software-docs').then(function (response) {\n ctrl.data = response.data.fields;\n setupDownload();\n }, handleRejection);\n }\n\n function setupDownload() {\n if (ctrl.data.prodTax && ctrl.data.prodTax.length > 0) {\n application = ctrl.data.prodTax.map(function (item) {\n return item.key;\n });\n }\n if (!angular.isString(ctrl.data.selectedLanguagesCodes)) {\n ctrl.data.selectedLanguagesCodes = ctrl.data.selectedLanguagesCodes.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n if (!angular.isString(ctrl.data.fallbackLanguageCode)) {\n ctrl.data.fallbackLanguageCode = ctrl.data.fallbackLanguageCode.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n\n docSettings = {\n 'applications': application,\n 'options': {\n 'links_type': ctrl.data.linksType.toString(),\n 'locale_selection_type': ctrl.data.localeSelectionType,\n 'selected_languages_codes': ctrl.data.selectedLanguagesCodes,\n 'fallback_language_code': ctrl.data.fallbackLanguageCode || 'en',\n 'website_country_code': ctrl.data.websiteCountryCode || ENV.locale.substr(3),\n 'website_language_code': ctrl.data.websiteLanguageCode || 'en',\n 'website_fallback_language': 'en',\n 'lang_locale_link_selection_amount': null,\n 'show_release_version_type': null,\n 'use_aux_lang_for_app_plugins': null,\n 'cpp_id': null\n }\n };\n getDownloadLinks();\n }\n\n function getDownloadLinks() {\n return downloadLinks.getByApp('', docSettings).then(function (response) {\n for (var i = 0, length = response.data.length; i < length; i++) {\n if (response.data[i].link_type === 'OnlineHelp') {\n response.data[i].link_type = ctrl.data.manualText;\n } else if (response.data[i].link_type === 'Eulas') {\n response.data[i].link_type = ctrl.data.eulaText;\n }\n for (var j = 0, _length = response.data[i].applications.length; j < _length; j++) {\n response.data[i].applications[j]['link_type'] = response.data[i].link_type;\n }\n }\n\n ctrl.downloadData = _.concat(response.data[0].applications, response.data[1].applications);\n\n var _loop = function _loop(_i, _length2) {\n _.forEach(ctrl.downloadData[_i].groups, function (value, key) {\n if (value.downloads && key > 0) {\n ctrl.downloadData[_i].groups[0].downloads = _.concat(ctrl.downloadData[_i].groups[0].downloads, value.downloads);\n delete ctrl.downloadData[_i].groups[key];\n }\n });\n ctrl.downloadData[_i].groups[0]['product_name'] = ctrl.downloadData[_i].name;\n ctrl.downloadData[_i].groups[0]['link_type'] = ctrl.downloadData[_i].link_type;\n ctrl.downloadData[_i]['groups'].map(function (value) {\n ctrl.downloadVer.push(value);\n });\n };\n\n for (var _i = 0, _length2 = ctrl.downloadData.length; _i < _length2; _i++) {\n _loop(_i, _length2);\n }\n\n ctrl.downloadVer.map(function (downloadVer) {\n downloadVer['downloads'].map(function (download) {\n download['product_name'] = downloadVer['product_name'];\n download['link_type'] = downloadVer['link_type'];\n download['display_name_alphabet'] = (download.language_loc_name + ' ' + download.alphabet_loc_name).trim();\n hideAlphabets.forEach(function (item) {\n if (item !== download.alphabet) {\n ctrl.downloads.push(download);\n ctrl.langArray.push(download.display_name_alphabet);\n }\n });\n });\n });\n\n ctrl.langArray = _.uniqBy(ctrl.langArray);\n\n filterDownloads(ctrl.langArray[0]);\n setDropDownDefaults();\n }, handleRejection);\n }\n\n function filterDownloads(lang) {\n ctrl.filteredDownloads = [];\n for (var i = 0, length = ctrl.downloads.length; i < length; i++) {\n if (ctrl.downloads[i].display_name_alphabet === lang) {\n ctrl.filteredDownloads.push(ctrl.downloads[i]);\n }\n }\n ctrl.mergedDownloads = _.groupBy(ctrl.filteredDownloads, 'product_name');\n }\n\n function setDropDownDefaults() {\n if (ctrl.filteredDownloads[0]) {\n ctrl.selectedLanguage = ctrl.filteredDownloads[0].display_name_alphabet;\n }\n }\n\n function onLanguageChange(lang) {\n filterDownloads(lang);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2c').component('specialOffersItem', {\n 'bindings': {\n 'resource': '@',\n 'offerData': '<'\n },\n 'controller': 'SpecialOffersItemController',\n 'templateUrl': '/resources/template/html/modules/b2c/components/special-offers/templates/special-offers-item.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n SpecialOffersItemController.$inject = [\"windowHelperService\", \"$scope\"];\n angular.module('kappGlobal.b2c').controller('SpecialOffersItemController', SpecialOffersItemController);\n\n function SpecialOffersItemController(windowHelperService, $scope) {\n var ctrl = this;\n\n var dateWatcher = $scope.$watch('$ctrl.offerData.dates', function (newVal) {\n if (newVal) {\n ctrl.offerData.summaryDate = ctrl.offerData.dates.replace(/<(?:.|\\n)*?>/gm, '');\n dateWatcher();\n }\n });\n\n ctrl.handleLink = function ($event) {\n var data = ctrl.offerData,\n newTab = data.newTab && data.newTab[0] === 'true';\n\n if (data.overrideLink || newTab) {\n $event.preventDefault();\n\n windowHelperService.goToUrl(data.overrideLink || data.url, newTab);\n }\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2c').component('specialOffersList', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/special-offers/templates/special-offers-list.html',\n 'controller': 'SpecialOffersController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n SpecialOffersController.$inject = [\"directiveData\", \"$q\", \"$state\", \"errorService\"];\n angular.module('kappGlobal.b2c').controller('SpecialOffersController', SpecialOffersController);\n\n function SpecialOffersController(directiveData, $q, $state, errorService) {\n var ctrl = this;\n\n ctrl.$onInit = activate;\n ctrl.itemsRendered = 0;\n\n var getSpecialOffers = function getSpecialOffers(links) {\n var promises = links.map(function (item) {\n return directiveData.getByUrl(item).then(function (response) {\n return angular.extend(response.data.fields, { 'title': response.data.title, 'url': $state.current.url + '/' + response.data.title });\n }, handleRejection);\n });\n\n return $q.all(promises);\n };\n\n var getData = function getData() {\n return directiveData.getByUrl(ctrl.resource || 'special-offers-list').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.data.title = response.data.title;\n return getSpecialOffers(ctrl.data.specialOffersLinks).then(function (res) {\n ctrl.data.specialOffersData = res;\n });\n }, handleRejection);\n };\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('tabsSection', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/tabs-section/templates/tabs-section.html',\n 'controller': 'tabsSectionController'\n });\n})();\n'use strict';\n\n(function () {\n tabsSectionController.$inject = [\"$timeout\", \"directiveData\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.b2c').controller('tabsSectionController', tabsSectionController);\n\n function tabsSectionController($timeout, directiveData, $element, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'b2c-tabs-section').then(function (response) {\n ctrl.data = response.data.fields;\n runScript();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScript() {\n $timeout(function () {\n $element.find('.anchorLink').on('click', function (e) {\n e.preventDefault();\n var anchor = $(this).attr('href');\n $('body').animate({ 'scrollTop': $(anchor).offset().top }, 'slow');\n });\n\n // Tabs\n $element.find('.tab-title a').on('click', function (e) {\n e.preventDefault();\n var $this = $(this);\n var $parent = $this.parent();\n\n // Get the name of tab content that should be controled\n var current = $parent.closest('.tabs-title-wrapper').attr('data-tab');\n\n // Remove selected class from all tab titles and add it to the one just clicked\n $element.find('.tabs-title-wrapper[data-tab=\\'' + current + '\\'] .tab-title').removeClass('selected');\n $parent.addClass('selected');\n\n // Check clicked link href and show matching tab content\n var tab = $this.attr('href');\n $element.find('.tab-content-wrapper[data-tab=\\'' + current + '\\'] .tab-content-single').not(tab).removeClass('tab-show');\n $element.find(tab).addClass('tab-show');\n });\n\n // Tabs desktop -> Dropdown mobile\n // Get the name of currently active tab for mobile list\n var SelectedName = $element.find('.tab-nav').parent().find('ul.tabs li.selected a').first().text();\n\n $element.find('.tab-nav').append('
    ' + SelectedName + '
    ');\n $element.find('.tab-nav').click(function (e) {\n e.stopPropagation();\n $(this).toggleClass('active');\n });\n\n // Close it if user clicks outside\n $('body').click(function () {\n $element.find('.tab-nav').removeClass('active');\n });\n\n $element.find('.tab-nav .tabs').click(function (e) {\n e.stopPropagation();\n });\n\n // Check when item is clicked and update active tab label\n $element.find('.tab-nav .tabs li').click(function (e) {\n e.preventDefault();\n var $this = $(this);\n $this.parent().siblings().remove();\n $this.closest('.tab-nav').append('
    ');\n $this.closest('.tab-nav').find('.tab-label').text($(this).text());\n $this.parent().parent().toggleClass('active');\n });\n\n // Accordion\n $('.accordion-section > li > h4, .ent-accordion .accordion-section .accordion-title').click(function () {\n $(this).parent().toggleClass('open');\n $(this).siblings().slideToggle();\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('b2cThankYouV1Header', {\n 'templateUrl': '/resources/template/html/modules/b2c/components/thank-you-v1-header/templates/thank-you-v1-header.html',\n 'controller': 'b2cController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('b2cThankYouItem', {\n 'bindings': {\n 'componentData': '<',\n 'productId': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/thankyou-section/templates/thank-you-item.html',\n 'controller': 'b2cThankYouItemController'\n });\n})();\n'use strict';\n\n(function () {\n b2cThankYouItemController.$inject = [\"downloadLinks\", \"productData\", \"geoLocationManager\", \"ENV\", \"validationHelper\", \"windowHelperService\", \"GEO\", \"directiveData\", \"appHelperService\", \"thankYouService\", \"errorService\", \"$http\", \"$scope\"];\n angular.module('kappGlobal.b2c').controller('b2cThankYouItemController', b2cThankYouItemController);\n\n function b2cThankYouItemController(downloadLinks, productData, geoLocationManager, ENV, validationHelper, windowHelperService, GEO, directiveData, appHelperService, thankYouService, errorService, $http, $scope) {\n var ctrl = this,\n isTrue = appHelperService.isTrue;\n var docSettings = {};\n\n ctrl.downloadData = [];\n ctrl.downloads = [];\n ctrl.downloadVer = [];\n ctrl.getProductDownloadData = getProductDownloadData;\n ctrl.displayDropdownOption = displayDropdownOption;\n ctrl.onVersionChange = onVersionChange;\n ctrl.onLanguageChange = onLanguageChange;\n ctrl.isCNLocale = isCNLocale;\n ctrl.dropdownOptionLabel = dropdownOptionLabel;\n ctrl.handleClick = handleClick;\n ctrl.$onInit = activate;\n\n function activate() {\n if (ctrl.componentData.dl2ProductCodeName) {\n // DL2 is enabled for this product\n return;\n }\n\n setUpComponentData();\n getProductInfo();\n getProductDownloadData();\n }\n\n var hideAlphabets = [];\n directiveData.getLocal('general-settings').then(function (response) {\n var res = response.data.fields;\n if (res && res.hideAlphabets) return hideAlphabets = res.hideAlphabets;\n }, handleRejection);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function handleClick($event) {\n $event.stopPropagation();\n\n applyProductConfig();\n }\n\n function applyProductConfig(isPageLoad) {\n ctrl.dlStarted = false;\n if (isPageLoad && thankYouService.isAutoDownloadEnabled(ctrl.componentData)) {\n startDownload();\n ctrl.dlStarted = true;\n }\n if (thankYouService.isDialogFormEnabled(ctrl.componentData, isPageLoad)) {\n openDialog();\n } else if (thankYouService.isCrossSellPopupEnabled(ctrl.componentData, isPageLoad)) {\n !ctrl.dlStarted && startDownload();\n openCrossSellPopup();\n } else if (!isPageLoad) {\n startDownload();\n ctrl.dlStarted = true;\n }\n }\n\n function openDialog() {\n $scope.$emit('dl-open-form-popup', {\n 'link': getDownloadLink(),\n 'startOnClose': !ctrl.dlStarted && isTrue(ctrl.componentData.startOnClose),\n 'form': {\n 'url': ctrl.componentData.formUrl,\n 'width': ctrl.componentData.formWidth,\n 'height': ctrl.componentData.formHeight\n }\n });\n }\n\n function openCrossSellPopup() {\n var data = ctrl.componentData;\n\n if (!data.crossSellPopup || !isTrue(data.crossSellPopup.enableCrossSellPopup)) return;\n\n $scope.$emit('dl-open-cross-sell-popup', data);\n }\n\n function getProductInfo() {\n\n if (ctrl.componentData.product && ctrl.componentData.product.split(',').length >= 1) {\n ctrl.product = ctrl.componentData.product.split(',');\n productData.getb2c(ctrl.product[0]).then(function (response) {\n ctrl.productInfo = response.data.fields;\n }, handleRejection);\n }\n }\n\n /**\n * @function requestDownloads20\n * @description\n * Load download data if download20QueryString set in Tridion.\n * Parse new response from API 2.0 and setting variables that are going\n * to work with old API 1.0 templates and codebase.\n * @todo Should be refactored after fully migrating to new DL API 2.0.\n */\n function requestDownloads20() {\n $http.get('https://webapi.kaspersky.com/downloads/' + ctrl.componentData.download20QueryString, { 'cache': true }).then(function (response) {\n var downloads = response.data[0];\n\n if (!downloads[0]) {\n return;\n }\n\n ctrl.downloadVer = downloads.map(function (download) {\n download.display_name = '' + download.VersionNumber + (download.SubVersion || '');\n download.download_url = download.Link;\n download.downloads = [];\n download.Localization.forEach(function (localization) {\n var downloadCopy = angular.copy(download);\n downloadCopy.alphabet_loc_name = '';\n downloadCopy.language_loc_name = localization;\n downloadCopy.display_name_alphabet = (downloadCopy.alphabet_loc_name + ' ' + downloadCopy.language_loc_name).trim();\n download.downloads.push(downloadCopy);\n });\n\n return download;\n });\n\n setDropDownDefaults();\n startDownload();\n // Set geoIP based custom link override\n geoLocationManager.geoIPOverride(ctrl.componentData, ctrl.downloadVersion);\n }, handleRejection);\n }\n\n function getProductDownloadData() {\n if (ctrl.componentData.download20QueryString) {\n requestDownloads20();\n return;\n }\n\n docSettings.options.selected_languages_codes = ctrl.selectedLanguagesCodesOverride || docSettings.options.selected_languages_codes;\n return downloadLinks.getByApp('', docSettings).then(function (response) {\n ctrl.downloadData = angular.extend({}, response.data[0].applications);\n ctrl.dropDown = { 'languages': [], 'uniqueLanguages': [] };\n ctrl.downloadVer = _.chain(ctrl.downloadData).map('groups').flatten().each(function (value) {\n value['display_name'] = getDisplayText(value['release_version']);\n }).value();\n\n ctrl.downloadVer.map(function (downloadVer) {\n downloadVer['downloads'].map(function (download) {\n download['display_name'] = downloadVer['display_name'];\n download['display_name_alphabet'] = (download.alphabet_loc_name + ' ' + download.language_loc_name).trim();\n ctrl.downloads.push(download);\n });\n });\n\n // Set geoIP based custom link override\n geoLocationManager.geoIPOverride(ctrl.componentData, ctrl.downloadVersion);\n\n setDropDownDefaults();\n applyProductConfig(true);\n }, handleRejection);\n }\n\n function setDropDownDefaults() {\n if (ctrl.downloadVer[0]) {\n ctrl.selectedVersion = ctrl.downloadVer[0];\n var download = _.find(ctrl.selectedVersion.downloads, function (d) {\n return validationHelper.isNullOrUndefined(hideAlphabets) ? true : hideAlphabets.indexOf(d.alphabet) === -1;\n });\n if (download !== null) {\n ctrl.downloadVersion = download;\n }\n }\n }\n\n function getDownloadLink() {\n var downloadLink = ctrl.componentData.overrideDownloadLink;\n\n if (!downloadLink) {\n downloadLink = ctrl.downloadVersion && ctrl.downloadVersion.download_url ? ctrl.downloadVersion.download_url : '';\n }\n\n return downloadLink;\n }\n\n function startDownload() {\n $scope.$emit('dl-start-download', getDownloadLink(), ctrl.componentData.linksType);\n }\n\n function setUpComponentData() {\n if (!angular.isString(ctrl.componentData.selectedLanguagesCodes)) {\n ctrl.componentData.selectedLanguagesCodes = ctrl.componentData.selectedLanguagesCodes.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n if (!angular.isString(ctrl.componentData.fallbackLanguageCode)) {\n ctrl.componentData.fallbackLanguageCode = ctrl.componentData.fallbackLanguageCode.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n var application = getApplication(ctrl),\n isRU = void 0;\n\n if (ENV.locale === 'ru-ru') {\n var ruLocales = GEO.getRUCountries,\n IPCountry = windowHelperService.getIPCountry();\n isRU = ruLocales.indexOf(IPCountry) > -1 ? IPCountry : null;\n }\n\n docSettings = {\n 'applications': application,\n 'options': {\n 'links_type': ctrl.componentData.linksType,\n 'locale_selection_type': ctrl.componentData.localeSelectionType,\n 'selected_languages_codes': ctrl.componentData.selectedLanguagesCodes,\n 'fallback_language_code': ctrl.componentData.fallbackLanguageCode,\n 'cpp_id': ctrl.componentData.cppid || '',\n 'website_country_code': isRU || ctrl.componentData.websiteCountryCode || ENV.locale.substr(3, 5),\n 'website_language_code': 'en',\n 'website_fallback_language': 'en',\n 'lang_locale_link_selection_amount': null,\n 'show_release_version_type': null,\n 'use_aux_lang_for_app_plugins': null\n }\n };\n }\n\n function getDisplayText(value) {\n return value.major + '.' + value.minor + '.' + value.build + '.' + value.revision + value.subrevision;\n }\n\n function onVersionChange(version) {\n ctrl.downloadVersion = version['downloads'][0];\n geoLocationManager.geoIPOverride(ctrl.componentData, ctrl.downloadVersion);\n }\n\n function onLanguageChange() {\n geoLocationManager.geoIPOverride(ctrl.componentData, ctrl.downloadVersion);\n }\n\n function isCNLocale() {\n return ENV.locale.substr(3, 6) === 'cn';\n }\n\n function dropdownOptionLabel(alphabetLocName, languageLocName) {\n return (alphabetLocName !== null && !ctrl.isCNLocale() ? alphabetLocName + ' ' : '') + languageLocName;\n }\n\n function getApplication(ctrl) {\n var componentData = ctrl.componentData,\n productTaxonomy = componentData['productTaxonomy'];\n if (angular.isUndefined(componentData) || !productTaxonomy.length) return ctrl.componentData.product.split(',') || [];\n var productTaxonomyKeys = [];\n productTaxonomy.map(function (product) {\n productTaxonomyKeys.push(product['key']);\n });\n return productTaxonomyKeys;\n }\n\n function displayDropdownOption(local) {\n return _.includes(hideAlphabets, local.alphabet) === false;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('b2cThankYou', {\n 'bindings': {\n 'productName': '<',\n 'version': '@',\n 'resource': '@',\n 'product': '<'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/thankyou-section/templates/thank-you.html',\n 'controller': 'b2cThankYouController'\n });\n})();\n'use strict';\n\n(function () {\n b2cThankYouController.$inject = [\"dl2Connector\", \"$scope\", \"$element\"];\n angular.module('kappGlobal.b2c').controller('b2cThankYouController', b2cThankYouController);\n\n function b2cThankYouController(dl2Connector, $scope, $element) {\n var ctrl = this;\n ctrl.$onInit = dl2Connector.initEvents($scope, [], false, $element);\n ctrl.$postLink = dl2Connector.fetchDlScript;\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n thankYouService.$inject = [\"appHelperService\"];\n angular.module('kappGlobal.b2c').factory('thankYouService', thankYouService);\n\n function thankYouService(appHelperService) {\n var isTrue = appHelperService.isTrue;\n\n return {\n 'isCrossSellPopupEnabled': function isCrossSellPopupEnabled(product, enabledOnLoad) {\n return product.crossSellPopup && isTrue(product.crossSellPopup.enableCrossSellPopup) && (!enabledOnLoad || isTrue(product.showCrossSellPopupOnPageLoad));\n },\n\n 'isDialogFormEnabled': function isDialogFormEnabled(product, enabledOnLoad) {\n return isTrue(product.showDialog) && (!enabledOnLoad || isTrue(product.showDialogOnPageLoad));\n },\n\n 'isAutoDownloadEnabled': function isAutoDownloadEnabled(product) {\n return isTrue(product.autoDownload, 'active');\n }\n };\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('b2cThankYouV2Header', {\n 'templateUrl': '/resources/template/html/modules/b2c/components/thank-you-v2-header/templates/thank-you-v2-header.html',\n 'controller': 'b2cController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('kpmSection', {\n 'templateUrl': '/resources/template/html/modules/b2c/components/tools/templates/kpm-section.html',\n 'controller': 'b2cController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2c').component('kssSection', {\n 'bindings': {\n 'type': '@',\n 'copy': '@',\n 'syncPriceList': '='\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/tools/templates/kss-section.html',\n 'controller': 'kssSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n kssSectionController.$inject = [\"$element\", \"$timeout\", \"directiveData\", \"appHelperService\", \"$http\", \"ENV\", \"tracking\", \"windowHelperService\", \"errorService\", \"angularLoad\", \"$document\", \"geoLocationManager\", \"$rootScope\"];\n angular.module('kappGlobal.b2c').controller('kssSectionController', kssSectionController);\n\n function kssSectionController($element, $timeout, directiveData, appHelperService, $http, ENV, tracking, windowHelperService, errorService, angularLoad, $document, geoLocationManager, $rootScope) {\n var ctrl = this,\n hasClicked = void 0,\n magnificPopupConfig = {\n 'delegate': 'a',\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': false,\n 'mainClass': 'mfp-with-zoom mfp-img-mobile',\n 'image': {\n 'verticalFit': true\n },\n 'gallery': {\n 'enabled': true\n },\n 'zoom': {\n 'enabled': true,\n 'duration': 300,\n 'opener': function opener(element) {\n return element.find('img');\n }\n }\n },\n gallerySlider2Config = {\n 'infinite': true,\n 'slidesToShow': 2,\n 'dots': true,\n 'draggable': false,\n 'centerMode': true,\n 'nextArrow': '',\n 'prevArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1\n }\n }]\n };\n\n ctrl.isAffiliate = appHelperService.assertStateByName('product-ksk-affiliate');\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n ctrl.currentLocale = ENV.locale;\n ctrl.$onInit = activate;\n ctrl.isBuyblockAvailable = isBuyblockAvailable;\n\n function activate() {\n getData();\n buyblockSetup();\n\n if (appHelperService.assertStateByName('product-kscloud-free')) blockProhibitedCountries();\n }\n\n function blockProhibitedCountries() {\n if (ctrl.currentLocale === 'en\\-global' && geoLocationManager.isKscProhibitedCountry() || ctrl.currentLocale === 'ru-ru' && geoLocationManager.getUserGeoIp() === 'by') ctrl.isProductBlocked = true;\n }\n\n function buyblockSetup() {\n return directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n ctrl.buyblockData = response.data.fields;\n });\n }\n\n function loadBodyMovin() {\n if (!ctrl.data.animations) return;\n angularLoad.loadScript('resources/template/js/bodymovin_light.4.13.0.min.js').then(function () {\n ctrl.data.animations.forEach(function (animation) {\n var params = {\n 'container': angular.element($document[0].getElementById(animation.id))[0],\n 'renderer': 'svg',\n 'loop': true,\n 'autoplay': true,\n 'animationData': JSON.parse(animation.animationData)\n };\n\n if (params.container && params.animationData) bodymovin.loadAnimation(params);\n });\n });\n }\n\n function removeHtml(str) {\n return str.replace(/(<([^>]+)>)/ig, '');\n }\n\n function isBuyblockAvailable() {\n return ctrl.syncPriceList && ctrl.syncPriceList.active && !ctrl.syncPriceList.productPricesExist && angular.isDefined(ctrl.syncPriceList.productPricesExist);\n }\n\n function checkBuyLink(link) {\n return link.indexOf('https://store.kaspersky') > -1;\n }\n\n function getData() {\n return directiveData.getByUrl('kss-section').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.relValue = ENV.locale === 'en-in' || ENV.locale === 'en-us' && ctrl.data.productName === 'Free' ? 'nofollow' : '';\n var imgAlt = removeHtml(ctrl.data.productBrand + ' ' + ctrl.data.productName);\n if (ctrl.data.mainImage && ctrl.data.mainImage[0]) ctrl.data.mainImage[0].imageAlt = imgAlt;\n ctrl.isBuyLink = checkBuyLink(ctrl.data.downloadLink || '');\n runScript();\n\n loadBodyMovin();\n\n if (ctrl.data.quickmenuButtons) {\n ctrl.data.quickmenuButtons.forEach(function (item, index) {\n if (item['product'] && item['product'].match(/\\.json/)) {\n return $http.get(item['product'], { 'cache': true }).then(function (response) {\n return ctrl.data.quickmenuButtons[index].product = response.data.fields;\n }, handleRejection);\n }\n });\n }\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function runScript() {\n $timeout(function () {\n\n $($element).find('.popup-gallery div').magnificPopup(magnificPopupConfig);\n\n function initGallerySlider2() {\n return gallerySlider2Config;\n }\n\n $($element).find('.gallery-slider-2').slick(initGallerySlider2());\n });\n }\n\n ctrl.sendToBuyUrl = function (buyLink) {\n var link = ctrl.syncPriceList && ctrl.syncPriceList.buyLink || buyLink;\n windowHelperService.goToUrl(tracking.formatQueryString(link));\n };\n\n ctrl.addSalesTrackingParameters = function (event, buyLink) {\n if (event) event.preventDefault();\n ctrl.sendToBuyUrl(buyLink);\n };\n\n ctrl.handleARChange = function () {\n if (hasClicked) return $rootScope.$emit('arPopupCheck', ctrl.syncPriceList.priceList.autorenew);\n ctrl.showARPopup();\n hasClicked = true;\n };\n\n ctrl.showARPopup = function () {\n var arPopupButtons = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'true';\n\n $rootScope.$emit('toggleARPopup', arPopupButtons);\n $rootScope.$emit('onceUnchecked');\n };\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('b2cThreatsPostHeader', {\n 'templateUrl': '/resources/template/html/modules/b2c/components/threats-post-header/templates/threats-post-header.html',\n 'controller': 'b2cController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2c').component('welcomeSection', {\n 'bindings': {\n 'type': '@',\n 'productInfo': '<'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/welcome-section/templates/welcome-section.html',\n 'controller': 'welcomeSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n welcomeSectionController.$inject = [\"$location\"];\n angular.module('kappGlobal.b2c').controller('welcomeSectionController', welcomeSectionController);\n\n function welcomeSectionController($location) {\n var ctrl = this;\n ctrl.popupGallery = popupGallery;\n ctrl.pageAbsUrl = $location.absUrl();\n\n function popupGallery() {\n $('.popup-gallery div').magnificPopup({\n 'delegate': 'a',\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': false,\n 'mainClass': 'mfp-with-zoom mfp-img-mobile',\n 'image': {\n 'verticalFit': true\n },\n 'gallery': {\n 'enabled': true\n },\n 'zoom': {\n 'enabled': true,\n 'duration': 300,\n 'opener': function opener(element) {\n return element.find('img');\n }\n }\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2b').component('b2bApplicationsList', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2b/components/applications-list/templates/applications-list.template.html',\n 'controller': 'b2bApplicationsListController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n b2bApplicationsListController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.b2b').controller('b2bApplicationsListController', b2bApplicationsListController);\n\n function b2bApplicationsListController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n //TODO: remove timeout after more testing\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'b2b-applications-list').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2b').component('b2bCtaBar', {\n 'templateUrl': '/resources/template/html/modules/b2b/components/cta-bar/templates/cta-bar.template.html',\n 'controller': 'b2bController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2b').component('b2bBottomBar', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2b/components/bottom-bar/templates/bottom-bar.html',\n 'controller': 'bottomBarController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n bottomBarController.$inject = [\"directiveData\", \"$state\", \"$element\", \"errorService\", \"appHelperService\", \"tracking\"];\n angular.module('kappGlobal.b2b').controller('bottomBarController', bottomBarController);\n\n function bottomBarController(directiveData, $state, $element, errorService, appHelperService, tracking) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n var utmParams = {};\n\n function activate() {\n getData();\n utmParams = tracking.getUtmParams();\n }\n\n function getData() {\n var section = '';\n\n if ($state.includes('vsb')) section = '/small-business-security';\n if ($state.includes('smb')) section = '/small-to-medium-business-security';\n\n return directiveData.getByUrl(ctrl.resource || 'b2b-bottom-bar').then(function (response) {\n if (response && response.data.fields.overrideShared && response.data.fields.overrideShared[0] === 'True') {\n ctrl.data = response.data.fields;\n addUtmParams();\n } else {\n return directiveData.getByUrl(ctrl.resource || section + '/b2b-bottom-bar.json').then(function (response) {\n ctrl.data = response.data.fields;\n addUtmParams();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }, function (rejection) {\n $element.hide();\n errorService.warn(rejection);\n });\n }\n\n function addUtmParams() {\n angular.forEach(ctrl.data.dlButtons, function (button) {\n if (button.passParams) {\n button.link = appHelperService.generateParams(utmParams, button.link);\n }\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2b').component('b2bInfoToggle', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2b/components/info-toggle/templates/info-toggle.template.html',\n 'controller': 'b2bInfoToggleController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n b2bInfoToggleController.$inject = [\"$element\", \"$timeout\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.b2b').controller('b2bInfoToggleController', b2bInfoToggleController);\n\n function b2bInfoToggleController($element, $timeout, directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n //TODO: remove time out\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'info-toggle').then(function (response) {\n ctrl.data = response.data.fields;\n\n $timeout(function () {\n //////////////////////////////////////////\n // Global list slideToggle\n //////////////////////////////////////////\n\n $($element).find('.toggle-button').click(function (e) {\n e.preventDefault();\n\n var $this = $(this);\n\n $this.closest('.toggle-container').find('.toggle-content').slideToggle();\n $this.closest('.toggle-container').toggleClass('open');\n });\n\n $('.accordion-section > li > h4, .ent-accordion .accordion-section .accordion-title').click(function () {\n $(this).parent().toggleClass('open');\n $(this).siblings().slideToggle();\n });\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2b').component('b2bMiniSidebar', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2b/components/mini-sidebar/templates/b2b-mini-sidebar.template.html',\n 'controller': 'b2bMiniSidebarController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n b2bMiniSidebarController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.b2b').controller('b2bMiniSidebarController', b2bMiniSidebarController);\n\n function b2bMiniSidebarController(directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl('b2b-mini-sidebar').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2b').component('b2bProductDescription', {\n 'multiElement': true,\n 'controller': 'b2bProductDescriptionController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/b2b/components/product-description/templates/product-description-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n b2bProductDescriptionController.$inject = [\"$timeout\", \"directiveData\", \"errorService\", \"ENV\"];\n angular.module('kappGlobal.b2b').controller('b2bProductDescriptionController', b2bProductDescriptionController);\n\n function b2bProductDescriptionController($timeout, directiveData, errorService, ENV) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.getContainerClass = getContainerClass;\n ctrl.getSideBarClass = getSideBarClass;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function isCustomLocale() {\n return [ENV.locale === 'ru-ru', ENV.locale === 'it-it', ENV.locale === 'tr-tr'].some(function (condition) {\n return condition;\n });\n }\n\n function getContainerClass() {\n if (!ctrl.data.sidebarHeader) {\n return 'col-l-12';\n } else if (isCustomLocale()) {\n return 'col-l-8';\n } else {\n return 'col-l-9';\n }\n }\n\n function getSideBarClass() {\n if (isCustomLocale()) {\n return 'col-l-4';\n } else {\n return 'col-l-3';\n }\n }\n\n //TODO: remove timeout\n function getData() {\n return directiveData.getByUrl('product-description').then(function (response) {\n ctrl.data = response.data.fields;\n\n $timeout(function () {\n\n //////////////////////////////////////////////////////\n // Tabs\n //////////////////////////////////////////////////////\n\n $('.tab-title a').on('click', function (e) {\n e.preventDefault();\n var $this = $(this);\n var $parent = $this.parent();\n\n // Get the name of tab content that should be controled\n var current = $parent.closest('.tabs-title-wrapper').attr('data-tab');\n\n // Remove selected class from all tab titles and add it to the one just clicked\n $('.tabs-title-wrapper[data-tab=\\'' + current + '\\'] .tab-title').removeClass('selected');\n $parent.addClass('selected');\n\n // Check clicked link href and show matching tab content\n var tab = $this.attr('href');\n $('.tab-content-wrapper[data-tab=\\'' + current + '\\'] .tab-content-single').not(tab).removeClass('tab-show');\n $(tab).addClass('tab-show');\n });\n\n //////////////////////////////////////////\n // Tabs desktop -> Dropdown mobile\n //////////////////////////////////////////\n\n // Get the name of currently active tab for mobile list\n var SelectedName = $('.tab-nav').parent().find('ul.tabs li.selected a').text();\n\n $('.tab-nav').append('
    ' + SelectedName + '
    ');\n $('.tab-nav').click(function (e) {\n e.stopPropagation();\n $(this).toggleClass('active');\n });\n\n // Close it if user clicks outside\n $('body').click(function () {\n $('.tab-nav').removeClass('active');\n });\n\n $('.tab-nav .tabs').click(function (e) {\n e.stopPropagation();\n });\n\n // Check when item is clicked and update active tab label\n $('.tab-nav .tabs li').click(function (e) {\n e.preventDefault();\n var $this = $(this);\n $this.parent().siblings().remove();\n $this.closest('.tab-nav').append('
    ');\n $this.closest('.tab-nav').find('.tab-label').text($(this).text());\n $this.parent().parent().toggleClass('active');\n });\n\n //////////////////////////////////////////\n // Accordion\n //////////////////////////////////////////\n\n $('.accordion-section > li > h4, .ent-accordion .accordion-section .accordion-title').click(function () {\n $(this).parent().toggleClass('open');\n $(this).siblings().slideToggle();\n });\n\n //////////////////////////////////////////\n // Global list slideToggle\n //////////////////////////////////////////\n\n $('.toggle-button').click(function (e) {\n e.preventDefault();\n var $this = $(this);\n $this.closest('.toggle-container').find('.toggle-content').slideToggle();\n $this.closest('.toggle-container').toggleClass('open');\n });\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2b').component('b2bProductsDownloadList', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2b/components/products-download-list/templates/products-download-list.template.html',\n 'controller': 'b2bProductsDownloadListController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n b2bProductsDownloadListController.$inject = [\"$http\", \"$location\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.b2b').controller('b2bProductsDownloadListController', b2bProductsDownloadListController);\n\n function b2bProductsDownloadListController($http, $location, directiveData, errorService) {\n var ctrl = this;\n ctrl.data = { 'smbProducts': [], 'fields': {} };\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n var page = $location.path().substr($location.path().lastIndexOf('/') + 1);\n return directiveData.getByUrl(ctrl.resource || 'downloads-list').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.data.smbProducts.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.data.smbProducts[index] = response.data.fields;\n\n if (page === 'support') {\n ctrl.data.smbProducts[index].freeTrialText = response.data.fields.KnowledgeBaseLinkText;\n ctrl.data.smbProducts[index].freeTrialLink = response.data.fields.KnowledgeBaseLink;\n }\n\n return [ctrl.data.smbProducts[index], ctrl.data.smbProducts[index].freeTrialText || '', ctrl.data.smbProducts[index].freeTrialLink || ''];\n }, handleRejection);\n }\n });\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2b').component('tabSection', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2b/components/tab-section/templates/tab-section.template.html',\n 'controller': 'tabSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.b2b').controller('tabSectionController', tabSectionController);\n\n tabSectionController.$inject = ['directiveData'];\n\n function tabSectionController(directiveData, errorService) {\n var _this = this;\n\n var ctrl = this;\n ctrl.$onInit = activate;\n this.selected = 0;\n this.active = false;\n\n function activate() {\n getData();\n }\n\n this.selectTab = function (index) {\n _this.selected = index;\n _this.active = !_this.active;\n };\n\n function getData() {\n directiveData.getByUrl('tab-section').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entArticle', {\n 'bindings': {\n 'resource': '@',\n 'template': '@',\n 'type': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/article/templates/article.html',\n 'controller': 'entArticleController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entArticleController.$inject = [\"$timeout\", \"$element\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entArticleController', entArticleController);\n\n function entArticleController($timeout, $element, directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-articles').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n $($element).find('.image-link').magnificPopup({\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n\n $($element).find('.popup-link').magnificPopup({\n 'type': 'iframe',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.b2b').component('b2bAccordion', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/b2b/components/accordion/templates/b2b-accordion.template.html',\n 'controller': 'b2bAccordionController'\n });\n})();\n'use strict';\n\n(function () {\n b2bAccordionController.$inject = [\"directiveData\", \"$element\", \"$timeout\", \"errorService\"];\n angular.module('kappGlobal.b2b').controller('b2bAccordionController', b2bAccordionController);\n\n function b2bAccordionController(directiveData, $element, $timeout, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl('b2b-accordion').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n }).then(function () {\n $timeout(function () {\n $element.find('li > h4, .ent-accordion .accordion-section .accordion-title').click(function () {\n $(this).parent().toggleClass('open');\n $(this).siblings().slideToggle();\n });\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entAwardsExtended', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/awards/templates/awards-extended.html',\n 'controller': 'entAwardsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entAwards', {\n 'bindings': {\n 'resource': '@',\n 'template': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/awards/templates/awards.html',\n 'controller': 'entAwardsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entAwardsController.$inject = [\"directiveData\", \"errorService\", \"$timeout\", \"$window\"];\n angular.module('kappGlobal.enterprise').controller('entAwardsController', entAwardsController);\n\n function entAwardsController(directiveData, errorService, $timeout, $window) {\n var windowResize = angular.element($window);\n\n var ctrl = this;\n var windowResizeThrottle = void 0;\n\n ctrl.$onInit = activate;\n ctrl.$onDestroy = destroyHandler;\n\n windowResize.on('resize.awards', function () {\n clearTimeout(windowResizeThrottle);\n windowResizeThrottle = $timeout(function () {\n onWindowResize();\n }, 200);\n });\n\n function activate() {\n ctrl.columns = setColumnsNumber();\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-awards').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function destroyHandler() {\n windowResize.off('resize.awards');\n }\n\n function onWindowResize() {\n ctrl.columns = setColumnsNumber();\n }\n\n function setColumnsNumber() {\n return $window.innerWidth < 930 ? 3 : 4;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entBanner', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/banner/templates/banner.html',\n 'controller': 'entBannerController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entBannerController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entBannerController', entBannerController);\n function entBannerController(directiveData, errorService) {\n var ctrl = this;\n ctrl.hasColor = false;\n ctrl.hasImg = false;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-banner').then(function (response) {\n ctrl.data = response.data.fields;\n if (ctrl.data.bannerBgColor) ctrl.hasColor = true;\n if (ctrl.data.bannerBgImg) ctrl.hasImg = true;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entBenefitsSection', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/benefits-section/templates/benefits-section.html',\n 'controller': 'enterpriseController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('bttBtn', {\n 'templateUrl': '/resources/template/html/modules/enterprise/components/btt-btn/templates/scroll-button.html',\n 'controller': 'bttBtnController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n bttBtnController.$inject = [\"$rootScope\", \"$scope\", \"$window\", \"$document\"];\n angular.module('kappGlobal.enterprise').controller('bttBtnController', bttBtnController);\n\n function bttBtnController($rootScope, $scope, $window, $document) {\n var ctrl = this,\n ngRender = $rootScope.$on('ngRender', function () {\n loadBtt();\n\n ngRender();\n });\n\n function loadBtt() {\n var NEXT_SCROLL_GAP = 50;\n var END_SCROLL_GAP = 50;\n var SECTION_TOP_OFFEST = 106;\n var SCROLL_DURATION = 500;\n var TRANSITION_TYPE = 'swing';\n\n var $html = $('html, body'),\n sectionsNodes = getSectionsNodes(),\n isBackState = null,\n $windowElement = angular.element($window);\n\n $windowElement.on('scroll', onScrollHandler);\n\n function getSectionsNodes() {\n return $document.find('.btt-section, .ent-section').filter(function (index, node) {\n var $node = $(node);\n\n return $node.contents().filter(function (index, node) {\n return node.nodeType === 1;\n }).length && node.style.display !== 'none';\n }).filter(function (index) {\n return index;\n });\n }\n\n function getSectionsTops() {\n return sectionsNodes ? sectionsNodes.map(function (index, node) {\n var $node = $(node);\n\n return $node.offset().top;\n }).toArray() : null;\n }\n\n function getScrollTop() {\n return $document.scrollTop();\n }\n\n function onScrollHandler() {\n ctrl.scrollButtonTop = getScrollTop() + $window.innerHeight >= $document.height() - END_SCROLL_GAP;\n\n if (isBackState !== ctrl.scrollButtonTop) {\n isBackState = ctrl.scrollButtonTop;\n\n $scope.$applyAsync();\n }\n }\n\n ctrl.btt = function ($event) {\n var nextTop = 0,\n sectionsTops = getSectionsTops(),\n currentScrollTop = getScrollTop();\n\n $event.preventDefault();\n\n if (!isBackState) {\n if (sectionsTops && sectionsTops.length) {\n sectionsTops.forEach(function (top) {\n if (!nextTop && top - NEXT_SCROLL_GAP > currentScrollTop + SECTION_TOP_OFFEST) {\n nextTop = top;\n }\n });\n }\n }\n\n if (!nextTop && !ctrl.scrollButtonTop) {\n nextTop = currentScrollTop + $window.innerHeight;\n }\n\n if (nextTop || !nextTop && ctrl.scrollButtonTop) {\n nextTop -= SECTION_TOP_OFFEST;\n\n $html.stop(true).animate({\n 'scrollTop': nextTop\n }, SCROLL_DURATION, TRANSITION_TYPE);\n }\n\n return false;\n };\n\n $scope.$on('$destroy', function () {\n if ($windowElement) {\n $windowElement.off('scroll', onScrollHandler);\n $windowElement = null;\n }\n\n if ($html) {\n $html.stop(true);\n $html = null;\n }\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('categoryMenuProducts', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/category-menu/templates/category-menu-products.html',\n 'controller': 'categoryMenuController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('categoryMenu', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/category-menu/templates/category-menu.html',\n 'controller': 'categoryMenuController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n categoryMenuController.$inject = [\"$rootScope\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('categoryMenuController', categoryMenuController);\n\n function categoryMenuController($rootScope, directiveData, errorService) {\n var ctrl = this;\n ctrl.template = '';\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n var ngRender = $rootScope.$on('ngRender', runScripts);\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'category-menu').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n angular.forEach(angular.element.find('.title.title-enterprise-solution'), function (value) {\n var computedHeight = (110 - value.offsetHeight) / 2 - 10;\n value.style.top = computedHeight.toString() + 'px';\n });\n ngRender();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entCaseStudies', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/case-studies/templates/case-studies.html',\n 'controller': 'entCaseStudiesController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entCaseStudiesController.$inject = [\"$q\", \"$http\", \"$rootScope\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entCaseStudiesController', entCaseStudiesController);\n\n function entCaseStudiesController($q, $http, $rootScope, directiveData, errorService) {\n var ctrl = this;\n ctrl.show = false;\n ctrl.solutions = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl(ctrl.resource || 'case-studies').then(function (response) {\n ctrl.data = response.data.fields;\n\n var promises = ctrl.data.solutions.map(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.solutions[index] = response.data.fields;\n\n if (angular.isDefined(ctrl.solutions[index].ArticleTitle)) {\n ctrl.solutions[index].ArticleTitle = String(ctrl.solutions[index].ArticleTitle).replace(/<[^>]+>/gm, '');\n }\n });\n }\n });\n return $q.all(promises);\n }).then(function () {\n if (angular.equals({}, ctrl.solutions)) return;\n\n ctrl.show = true;\n }).catch(handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n var ngRender = $rootScope.$on('ngRender', runScripts);\n\n function runScripts() {\n $('.play-video').magnificPopup({\n 'type': 'iframe',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n ngRender();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entContactForm', {\n 'bindings': {\n 'resource': '@',\n 'template': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/contact-form/templates/contact-form.html',\n 'controller': 'entContactFormController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entContactFormController.$inject = [\"directiveData\", \"$scope\", \"marketoHelperService\", \"errorService\", \"$element\"];\n angular.module('kappGlobal.enterprise').controller('entContactFormController', entContactFormController);\n function entContactFormController(directiveData, $scope, marketoHelperService, errorService, $element) {\n var ctrl = this;\n ctrl.formId = '';\n ctrl.formNr = 0;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-contact-form').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.formId = ctrl.data.formId;\n ctrl.formNr = parseInt(ctrl.data.formNr);\n runMarketo(ctrl.formId, ctrl.formNr);\n }, handleRejection);\n }\n\n function runMarketo(mId, mNr) {\n marketoHelperService.loadMarketo(mId, mNr, $scope, $element);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entDisclaimer', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/disclaimer/templates/disclaimer.html',\n 'controller': 'enterpriseController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entGrid', {\n 'bindings': {\n 'resource': '@',\n 'type': '@'\n },\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'ent-grid';\n\n switch ($attrs.type) {\n case 'related-products':\n template = 'related-products';\n break;\n case 'res-article':\n template = 'res-articles';\n break;\n case '2.0-related-products':\n template = 'related-products';\n break;\n }\n\n if ($attrs.resource && $attrs.resource !== 'ent-solution-grid-2' && !$attrs.resource.match(/related-products-(.*)/)) template = $attrs.resource;\n\n return '/resources/template/html/modules/enterprise/components/ent-grid/templates/' + template + '.html';\n }],\n 'controller': 'entGridController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entGridController.$inject = [\"directiveData\", \"appHelperService\", \"$element\", \"$http\", \"$q\", \"$scope\", \"$timeout\", \"errorService\", \"$state\", \"ENV\"];\n angular.module('kappGlobal.enterprise').controller('entGridController', entGridController);\n\n function entGridController(directiveData, appHelperService, $element, $http, $q, $scope, $timeout, errorService, $state, ENV) {\n var ctrl = this;\n ctrl.entBlockType = ' ellipsis ';\n ctrl.summaryDisplay = '';\n ctrl.tab = 0;\n ctrl.setTab = setTab;\n ctrl.isSet = isSet;\n ctrl.scopeId = $scope.$id;\n ctrl.$onInit = activate;\n ctrl.locale = ENV.locale;\n ctrl.$onDestroy = function () {\n ctrl.dotdotdotObj && ctrl.dotdotdotObj.destroy();\n $($element).find('.solutions-slider:not(.slick-initialized):not(.solutions-slider-disabled).solutions-slider-' + ctrl.scopeId).slick('unslick');\n };\n\n // slider option definitions\n\n var slickConfig = {\n 'slidesToShow': 1,\n 'prevArrow': '',\n 'nextArrow': '',\n 'dots': $state.current.name !== 'enterprise-wiki-section',\n 'accessibility': false,\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'mobileFirst': true,\n 'responsive': [{\n 'breakpoint': 992,\n 'settings': {\n 'slidesToShow': 3,\n 'slidesToScroll': 3,\n 'arrows': true\n }\n }, {\n 'breakpoint': 600,\n 'settings': {\n 'slidesToShow': 2,\n 'slidesToScroll': 2\n }\n }]\n };\n\n // magnificPopup plugin option definitions\n\n var magnificPopupConfig = {\n 'type': 'iframe',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n };\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n var blockType = 'ent-solution-grid';\n\n switch (ctrl.type) {\n case 'res-article':\n blockType = 'ent-res-articles';\n break;\n case 'related-products':\n blockType = 'ent-product-slider';\n break;\n case '2.0-related-products':\n blockType = '2.0-related-products';\n break;\n case '2.0-case-studies':\n blockType = '2.0-case-studies';\n break;\n case '2.0-white-papers':\n blockType = '2.0-white-papers';\n break;\n }\n\n return directiveData.getByUrl(ctrl.resource || blockType).then(function (response) {\n ctrl.data = response.data.fields;\n if (blockType === 'ent-product-slider' || blockType === '2.0-related-products') {\n var promises = ctrl.data.products.map(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n return ctrl.data.products[index] = response.data.fields;\n }, handleRejection);\n }\n });\n $q.all(promises).then(function () {\n loadScripts();\n }, handleRejection);\n } else {\n var _promises = [];\n ctrl.data.sections.forEach(function (item, index1) {\n var solutionPromises = item.solutions.map(function (item, index2) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n var states = ['enterprise-home', 'enterprise-resource', 'enterprise-resources'];\n if (response.data.fields.HideSummary && response.data.fields.HideSummary[0] === 'True' && !appHelperService.assertStateByName(states)) {\n ctrl.summaryDisplay = 'hide-summary';\n }\n\n return ctrl.data.sections[index1].solutions[index2] = response.data.fields;\n }, handleRejection);\n }\n });\n _promises = _promises.concat(solutionPromises);\n });\n $q.all(_promises).then(function () {\n loadScripts();\n }, handleRejection);\n }\n }, handleRejection);\n }\n\n function updateSlider() {\n $($element).find('.ellipsis .content').trigger('update.dot');\n }\n\n function setTab(newTab) {\n ctrl.tab = newTab;\n\n $timeout(function () {\n $($element).find('.slider-' + newTab + '--slider .solutions-slider').slick('setPosition');\n updateSlider();\n });\n }\n\n function isSet(tabNum) {\n return ctrl.tab === tabNum;\n }\n\n function activateSliders() {\n var slider = '.solutions-slider:not(.slick-initialized):not(.solutions-slider-disabled).solutions-slider-' + ctrl.scopeId,\n dotdotdotSelector = ['.ellipsis-short .content', '.ellipsis-short .content p', '.ellipsis-short product-title h3', '.ellipsis .content product-desc p', '.ellipsis .content article-title h3', '.ellipsis .content solution-summary'].join(', '),\n elt = $($element),\n sliderElt = elt.find(slider);\n\n sliderElt.on('init', function () {\n ctrl.dotdotdotObj && ctrl.dotdotdotObj.destroy && ctrl.dotdotdotObj.destroy();\n\n var $selectedElts = $(elt[0].querySelectorAll(dotdotdotSelector));\n\n ctrl.dotdotdotObj = $selectedElts.dotdotdot({\n 'watch': true,\n 'ellipsis': '... ',\n 'height': ctrl.type === '2.0-related-products' ? 120 : 80\n }).data('dotdotdot');\n });\n\n sliderElt.slick(slickConfig);\n\n elt.find('.solutions-slider.solutions-slider-' + ctrl.scopeId).on('breakpoint', function () {\n updateSlider();\n });\n }\n\n function loadScripts() {\n\n $timeout(function () {\n activateSliders();\n $($element).find('.videoPopup, .ent-btn.play').magnificPopup(magnificPopupConfig);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entFeatureCaseStudy', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/feature-case-study/templates/feature-case-study.html',\n 'controller': 'entFeatureCaseStudyController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entFeatureCaseStudyController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entFeatureCaseStudyController', entFeatureCaseStudyController);\n function entFeatureCaseStudyController(directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'feature-case-study').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entFeatures', {\n 'bindings': {\n 'resource': '@',\n 'template': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/features/templates/features.html',\n 'controller': 'entFeaturesController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entFeaturesController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entFeaturesController', entFeaturesController);\n function entFeaturesController(directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-features').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entContent', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/content/templates/content.html',\n 'controller': 'entContentController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entContentController.$inject = [\"$element\", \"$timeout\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entContentController', entContentController);\n\n function entContentController($element, $timeout, directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('ent-content').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n $($element).find('.popup-link').magnificPopup({\n 'closeOnContentClick': false,\n 'closeBtnInside': true,\n 'fixedContentPos': true,\n 'mainClass': 'mfp-no-margins mfp-with-zoom',\n 'image': {\n 'verticalFit': true\n },\n 'zoom': {\n 'enabled': true,\n 'duration': 300\n }\n });\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entGallerySlider', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/gallery-slider/templates/gallery-slider.html',\n 'controller': 'entGallerySliderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entGallerySliderController.$inject = [\"$timeout\", \"directiveData\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entGallerySliderController', entGallerySliderController);\n\n function entGallerySliderController($timeout, directiveData, appHelperService, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('ent-gallery-slider').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n //////////////////////////////////////////\n // Slider\n //////////////////////////////////////////\n var slickConfig = {\n 'slidesToShow': 1,\n 'prevArrow': '',\n 'nextArrow': '',\n 'arrows': true,\n 'dots': true,\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 769,\n 'settings': {\n 'arrows': false,\n 'dots': true\n }\n }]\n };\n $('.gallery-slider').each(function () {\n $(this).slick(slickConfig);\n });\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entHeader', {\n 'bindings': {\n 'resource': '@',\n 'template': '@',\n 'overlay': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/header/templates/header.html',\n 'controller': 'entHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entHeaderController.$inject = [\"$anchorScroll\", \"$location\", \"directiveData\", \"appHelperService\", \"tracking\", \"windowHelperService\", \"$scope\", \"$timeout\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entHeaderController', entHeaderController);\n\n function entHeaderController($anchorScroll, $location, directiveData, appHelperService, tracking, windowHelperService, $scope, $timeout, errorService) {\n var ctrl = this;\n var utmParams = {};\n ctrl.changeMenu = changeMenu;\n ctrl.animatedScrollTo = animatedScrollTo;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n utmParams = tracking.getUtmParams();\n }\n\n $scope.$on('$destroy', runScripts);\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-header').then(function (response) {\n ctrl.data = response.data.fields;\n setMenuDefault();\n addUtmParams();\n $timeout(function () {\n runScripts();\n }, 200);\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n var $window = $(window);\n\n ctrl.scrollTo = function (id) {\n $location.hash(id);\n $anchorScroll();\n };\n\n function updateSideNav($nav, $navItems, $navWrap, $sections, navWrapOffsetTop) {\n var windowMiddle = $window.scrollTop() + $window.height() / 3;\n\n if ($window.scrollTop() < navWrapOffsetTop) {\n $navWrap.removeClass('stuck');\n $navItems.removeClass('active');\n return;\n }\n\n $navWrap.addClass('stuck');\n $sections.each(function () {\n var $elt = $(this);\n // var offsetBottom = $(this).offset().top + $(this).outerHeight(true);\n // if (windowMiddle >= offsetTop && windowMiddle < offsetBottom) {\n if (windowMiddle < $elt.offset().top) {\n return;\n }\n\n var getNavItemFromHref = function getNavItemFromHref(href) {\n return $nav.find('a[href$=\"#' + href + '\"]').first();\n },\n\n // case 1: the anchor is a child element\n $navItem = getNavItemFromHref($elt.find('a[id]').attr('id'));\n\n // case 2: the anchor is a previous sibling\n $navItem = $navItem.length !== 0 ? $navItem : getNavItemFromHref($elt.parent().find('a').attr('id'));\n\n if ($navItem.length) {\n $navItems.removeClass('active');\n $navItem.parent().addClass('active');\n }\n });\n }\n\n var mainnavHeight2 = $('#site-header .main-nav').outerHeight(true),\n $siteTop = $('.site-top'),\n $siteHeaderTitle = $('.site-header .site-title'),\n totalHeight = $siteTop.outerHeight(true) + $siteHeaderTitle.outerHeight(true),\n headerHeight = $siteTop.outerHeight(true) + $('.site-header').outerHeight(true) + $('.page-header').outerHeight(true) - $('.page-nav').outerHeight(true),\n sections = $('.ent-section > section:not(:empty)'),\n nav = $('#page-nav');\n\n function handleStickyHeaderOnScroll() {\n var scroll = $window.scrollTop();\n var $body = $('body');\n\n if (scroll >= totalHeight) {\n $body.addClass('sticky-header-on');\n } else {\n $body.removeClass('sticky-header-on');\n }\n if (scroll >= headerHeight) {\n $body.addClass('sticky-pagenav-on');\n if ($window.width() > 768) {\n $('#page-nav').css('top', mainnavHeight2 > 100 ? 50 : mainnavHeight2);\n }\n } else {\n $body.removeClass('sticky-pagenav-on');\n $('#page-nav').css('top', 'auto');\n }\n }\n\n function handleInnerEntScroll() {\n var cur_pos = $(this).scrollTop();\n\n sections.each(function () {\n var $elt = $(this),\n top = $elt.offset().top - nav.outerHeight(true) - 200;\n\n if (cur_pos >= top && $elt.attr('id')) {\n nav.find('a').removeClass('active');\n sections.removeClass('active');\n\n $elt.addClass('active');\n\n var href = $elt.attr('id');\n nav.find('a[href=\"#' + href + '\"]').addClass('active');\n }\n });\n }\n\n if (ctrl.template !== '2.1' && ctrl.template !== 'ent-3.0') {\n var $navWrap = $('.enterprise-solutions-nav-wrapper');\n\n if (!$navWrap.length) {\n return;\n }\n\n var $nav = $navWrap.find('.enterprise-solutions-nav'),\n $navItems = $nav.find('> li'),\n $mainNav = $('#site-header .main-nav'),\n navWrapOffsetTop = $navWrap.offset().top + $mainNav.height() - 96,\n $sections = $();\n\n // build up the selection of sections and subsections (multiple a[id] inside one section)\n $('.section').each(function () {\n var $elt = $(this),\n parentAnchor = $elt.parent().find('a').attr('id'),\n anchoredSubSections = $elt.find('a[id]');\n\n if (parentAnchor) {\n $sections = $sections.add($elt);\n }\n\n anchoredSubSections.each(function () {\n if (this.id) {\n $sections = $sections.add($(this).closest('.row'));\n }\n });\n });\n\n $navItems.find('> a').click(function (e) {\n e.preventDefault();\n var $scrollToSection = $($(this).attr('href'));\n if ($scrollToSection.length) {\n // $('html, body').animate({scrollTop: ($scrollToSection.offset().top - ($mainNav.height() + $nav.height()))}, 700);\n $('html, body').animate({ 'scrollTop': $scrollToSection.offset().top }, 700);\n }\n });\n\n updateSideNav($nav, $navItems, $navWrap, $sections, navWrapOffsetTop);\n\n angular.element($window).on('scroll.entHeader', function () {\n updateSideNav($nav, $navItems, $navWrap, $sections, navWrapOffsetTop);\n });\n\n angular.element($window).on('resize.entHeader', function () {\n updateSideNav($nav, $navItems, $navWrap, $sections, navWrapOffsetTop);\n });\n\n $scope.$on('$destroy', function () {\n $($window).off('scroll.entHeader');\n $($window).off('resize.entHeader');\n });\n } else if (ctrl.template === '2.1' || ctrl.template === 'ent-3.0') {\n angular.element($window).on('scroll.stickyNav', handleStickyHeaderOnScroll);\n angular.element($window).on('scroll.innerEnt', handleInnerEntScroll);\n\n $scope.$on('$destroy', function () {\n $($window).off('scroll.stickyNav');\n $($window).off('scroll.innerEnt');\n });\n }\n }\n\n function animatedScrollTo(id, $event) {\n $event.preventDefault();\n $event.stopPropagation();\n\n var target = $('#' + id);\n var offset = $('.main-menu').outerHeight(true) + $('.page-nav').outerHeight(true);\n\n if (!target.length) return errorService.warn('Couldn\\'t find [' + id + '] on the page');\n\n $('html, body').animate({\n 'scrollTop': target.offset().top - offset\n }, 500);\n }\n\n function changeMenu(menu) {\n windowHelperService.goToUrl(menu.link);\n }\n\n function setMenuDefault() {\n if (ctrl.data.headerMenu) ctrl.selectedMenu = ctrl.data.headerMenu[0];\n }\n\n function addUtmParams() {\n angular.forEach(ctrl.data.headerButtons, function (button) {\n if (button.passParams) {\n button.link = appHelperService.generateParams(utmParams, button.link);\n }\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entHpMenu', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/hp-menu/templates/hp-menu.html',\n 'controller': 'entHpMenuController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entHpMenuController.$inject = [\"$timeout\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entHpMenuController', entHpMenuController);\n\n function entHpMenuController($timeout, directiveData, errorService) {\n var ctrl = this;\n ctrl.template = '';\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-hp-menu').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.template = ctrl.data.template || '1.0';\n }).then(function () {\n $timeout(function () {\n runScripts();\n });\n }).catch(handleRejection);\n }\n\n function runScripts() {\n angular.forEach(angular.element.find('.title.title-enterprise-solution'), function (value) {\n var computedHeight = (110 - value.offsetHeight) / 2 - 10;\n value.style.top = computedHeight.toString() + 'px';\n });\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entOfferSection', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/offer-section/templates/offer-section.html',\n 'controller': 'entOfferSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entOfferSectionController.$inject = [\"$http\", \"$element\", \"$scope\", \"$timeout\", \"ngDialog\", \"directiveData\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entOfferSectionController', entOfferSectionController);\n\n function entOfferSectionController($http, $element, $scope, $timeout, ngDialog, directiveData, appHelperService, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n ctrl.openPopup = openPopup;\n\n function activate() {\n getData();\n ctrl.getSectionClass = getSectionClass;\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getSectionClass() {\n var classes = [];\n\n if (ctrl.data.diamondList === 'Yes') {\n classes.push('diamond-list');\n }\n if (ctrl.data.products.length < 6 && ctrl.data.products.length !== 4 && ctrl.data.products.length !== 3) {\n classes.push('section-col-l-' + ctrl.data.products.length);\n }\n\n if (ctrl.data.products.length % 4 === 0) {\n classes.push('section-col-l-4');\n } else if (ctrl.data.products.length % 3 === 0) {\n classes.push('section-col-l-3');\n }\n\n return classes.join(' ');\n }\n\n function openPopup() {\n ngDialog.open({\n 'plain': true,\n 'template': '
    ',\n 'className': 'cyber-incident-banner-popup',\n 'data': ctrl,\n 'scope': $scope\n });\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-offer-section').then(function (response) {\n function init_carousel() {\n $timeout(function () {\n\n //////////////////////////////////////////\n // Slider\n //////////////////////////////////////////\n\n $($element).find('.solutions-slider').addClass('solutions-slider-' + $scope.$id);\n\n $('.solutions-slider.solutions-slider-' + $scope.$id).each(function () {\n var slickConfig = {\n 'slidesToShow': 3,\n 'prevArrow': '',\n 'nextArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 992,\n 'settings': {\n 'slidesToShow': 2\n }\n }, {\n 'breakpoint': 769,\n 'settings': {\n 'slidesToShow': 1,\n 'arrows': false,\n 'dots': true\n }\n }]\n };\n $(this).slick(slickConfig);\n });\n });\n }\n\n var loop_counter = 0;\n ctrl.data = response.data.fields;\n ctrl.data.products.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n loop_counter++;\n if (loop_counter === ctrl.data.products.length) {\n init_carousel();\n }\n return ctrl.data.products[index] = response.data.fields;\n }, handleRejection);\n }\n });\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entOverview', {\n 'bindings': {\n 'resource': '@',\n 'template': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/overview/templates/overview.html',\n 'controller': 'entOverviewController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entOverviewController.$inject = [\"$q\", \"$http\", \"directiveData\", \"errorService\", \"$timeout\", \"$element\"];\n angular.module('kappGlobal.enterprise').controller('entOverviewController', entOverviewController);\n\n function entOverviewController($q, $http, directiveData, errorService, $timeout, $element) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n openPopup();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function openPopup() {\n $timeout(function () {\n $($element).find('.image-link').magnificPopup({\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n\n $($element).find('.video-link').magnificPopup({\n 'type': 'iframe',\n 'closeOnContentClick': false,\n 'closeBtnInside': true,\n 'iframe': {\n 'patterns': {\n 'youtube': {\n 'index': 'youtube.com/',\n 'id': 'v=',\n 'src': '//www.youtube.com/embed/%id%?autoplay=1&rel=0'\n }\n }\n }\n });\n }, 1000);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-overview').then(function (response) {\n ctrl.data = response.data.fields;\n\n var promises = ctrl.data.products.map(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n return ctrl.data.products[index] = response.data.fields;\n });\n }\n });\n\n return $q.all(promises);\n }).catch(handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entPost', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/post/templates/post.html',\n 'controller': 'entPostController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entPostController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entPostController', entPostController);\n\n function entPostController(directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-post').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entPromo', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/promo/templates/promo.html',\n 'controller': 'entPromoController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entPromoController.$inject = [\"$timeout\", \"$element\", \"directiveData\", \"appHelperService\", \"errorService\", \"$window\", \"$scope\"];\n angular.module('kappGlobal.enterprise').controller('entPromoController', entPromoController);\n function entPromoController($timeout, $element, directiveData, appHelperService, errorService, $window, $scope) {\n var ctrl = this,\n isRTL = appHelperService.isPageDirectionRTL();\n ctrl.autoPlay = false;\n ctrl.autoPlaySpeed = 0;\n ctrl.getBgImage = getBgImage;\n ctrl.mediaQuery = 'desktop';\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-promo').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.promoType = ctrl.data.promoType || 'banner';\n\n if (ctrl.data.autoPlaySpeed) {\n ctrl.autoPlay = true;\n ctrl.autoPlaySpeed = ctrl.data.autoPlaySpeed * 1000;\n }\n $timeout(function () {\n runScripts();\n });\n }, function (rejection) {\n $element.hide();\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n $($element).find('.slides-1-fade').not('.activate-auto-play').slick({\n 'infinite': true,\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'rtl': isRTL,\n 'dots': true,\n 'draggable': false,\n 'fade': true,\n 'arrows': true,\n 'nextArrow': '',\n 'prevArrow': ''\n });\n\n $($element).find('.slides-1-fade.activate-auto-play').slick({\n 'infinite': true,\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'rtl': isRTL,\n 'dots': true,\n 'draggable': false,\n 'fade': true,\n 'arrows': true,\n 'nextArrow': '',\n 'prevArrow': '',\n 'autoplay': ctrl.autoPlay,\n 'autoplaySpeed': ctrl.autoPlaySpeed\n });\n }\n\n var windowsElem = angular.element($window);\n\n function mqMatches() {\n if ($window.matchMedia('(max-width: 479px)').matches) {\n ctrl.mediaQuery = 'mobile';\n } else if ($window.matchMedia('(max-width: 768px)').matches) {\n ctrl.mediaQuery = 'tablet';\n } else {\n ctrl.mediaQuery = 'desktop';\n }\n }\n\n mqMatches();\n\n windowsElem.on('resize.promoBanner', mqMatches);\n\n function getBgImage(bg) {\n if (bg.mobileImage && ctrl.mediaQuery === 'mobile') {\n return bg.mobileImage;\n }\n\n if (bg.tabletImage && ctrl.mediaQuery === 'tablet') {\n return bg.tabletImage;\n }\n\n return bg.desktopImage;\n }\n\n $scope.$on('$destroy', function () {\n windowsElem.off('resize.promoBanner', mqMatches);\n });\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entPyramid', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/pyramid/templates/pyramid.html',\n 'controller': 'entPyramidController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entPyramidController.$inject = [\"directiveData\", \"windowHelperService\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entPyramidController', entPyramidController);\n\n function entPyramidController(directiveData, windowHelperService, errorService) {\n var ctrl = this;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('ent-pyramid').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entRecognitionBlockColumn', {\n 'bindings': {\n 'columnTitle': '<',\n 'items': '<'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/recognition-block/templates/recognition-block-column.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entRecognitionBlock', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/recognition-block/templates/recognition-block.html',\n 'controller': 'entRecognitionBlockController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entRecognitionBlockController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entRecognitionBlockController', entRecognitionBlockController);\n\n function entRecognitionBlockController(directiveData, errorService) {\n var ctrl = this;\n\n ctrl.$onInit = activate;\n ctrl.single = false;\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl(ctrl.resource || 'ent-recognition-block').then(function (response) {\n var data = response.data.fields;\n var items = void 0;\n\n if (data && data.leftItems && data.leftItems.length) {\n if (!(data.rightItems && data.rightItems.length)) {\n items = data.leftItems;\n\n ctrl.singleTitle = data.titleLeft;\n\n data.titleLeft = '';\n data.titleRight = '';\n data.leftItems = [];\n\n items.forEach(function (item, index) {\n if (index & 1) {\n data.rightItems.push(item);\n } else {\n data.leftItems.push(item);\n }\n });\n\n if (data.rightItems.length === 0) {\n ctrl.single = true;\n } else {\n ctrl.singleTwoColumns = true;\n }\n }\n }\n\n ctrl.data = data;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entRelatedProducts', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'entRelatedProductsController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/enterprise/components/related-products/templates/related-products-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entRelatedProductsController.$inject = [\"$q\", \"$http\", \"$rootScope\", \"directiveData\", \"$timeout\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entRelatedProductsController', entRelatedProductsController);\n\n function entRelatedProductsController($q, $http, $rootScope, directiveData, $timeout, appHelperService, errorService) {\n var ctrl = this,\n isRTL = appHelperService.isPageDirectionRTL();\n ctrl.show = false;\n ctrl.products = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-related-products').then(function (response) {\n ctrl.data = response.data.fields;\n\n var promises = ctrl.data.products.map(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.products[index] = response.data.fields;\n ctrl.products[index].ArticleTitle = String(ctrl.products[index].ArticleTitle).replace(/<[^>]+>/gm, '');\n });\n }\n });\n\n return $q.all(promises);\n }).finally(function () {\n if (angular.equals({}, ctrl.products)) return;\n\n ctrl.show = true;\n }).catch(handleRejection);\n }\n\n var ngRender = $rootScope.$on('ngRender', runScripts);\n\n function runScripts() {\n $timeout(function () {\n $('.related-products-section .slides').not('.slick-initialized').slick({\n 'infinite': true,\n 'slidesToShow': 3,\n 'slidesToScroll': 3,\n 'dots': true,\n 'rtl': isRTL,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'responsive': [{\n 'breakpoint': 769,\n 'settings': {\n 'slidesToShow': 2,\n 'slidesToScroll': 2,\n 'infinite': true,\n 'arrows': false,\n 'dots': true\n }\n }, {\n 'breakpoint': 600,\n 'settings': {\n 'slidesToShow': 2,\n 'slidesToScroll': 2,\n 'arrows': false\n }\n }, {\n 'breakpoint': 480,\n 'settings': {\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'arrows': false\n }\n }]\n });\n }, 1000);\n\n ngRender();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entResArticles', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/res-articles/templates/res-articles.html',\n 'controller': 'entResArticlesController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entResArticlesController.$inject = [\"$http\", \"$timeout\", \"directiveData\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entResArticlesController', entResArticlesController);\n\n function entResArticlesController($http, $timeout, directiveData, appHelperService, errorService) {\n var ctrl = this;\n ctrl.entBlockType = ' item-short ellipsis-short ';\n ctrl.summaryDisplay = '';\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl('ent-res-articles').then(function (response) {\n var states = ['enterprise-home', 'enterprise-resource', 'enterprise-resources'];\n if (appHelperService.assertStateByName(states)) ctrl.entBlockType = 'ellipsis';\n\n ctrl.data = response.data.fields;\n ctrl.data.sections.forEach(function (item, index) {\n item.solutions.forEach(function (solution, ind) {\n if (solution.match(/\\.json/)) {\n return $http.get(solution, { 'cache': true }).then(function (response) {\n return ctrl.data.sections[index].solutions[ind] = response.data.fields;\n }, handleRejection);\n }\n\n ctrl.data.sections[index].solutions[ind].Filters.forEach(function (filter, i) {\n if (filter.match(/\\.json/)) {\n return $http.get(filter, { 'cache': true }).then(function (response) {\n return ctrl.data.solutions[ind].Filters[i] = response.data.fields;\n }, handleRejection);\n }\n });\n });\n });\n angular.element(document).ready(function () {\n init_scripts();\n });\n }, handleRejection);\n }\n\n function init_scripts() {\n $timeout(function () {\n // ellipsis\n $('.ellipsis .content h3').css('fontSize', '20px');\n\n $('.ellipsis .content').dotdotdot({\n 'ellipsis': '... ',\n 'height': 170,\n 'callback': function callback(isTruncated) {\n if (isTruncated) {\n $(this).animate({ 'opacity': 1 }, 'fast');\n }\n }\n });\n $('.ellipsis-short .content').dotdotdot({\n 'ellipsis': '... ',\n 'height': 85,\n 'callback': function callback(isTruncated) {\n if (isTruncated) {\n $(this).animate({ 'opacity': 1 }, 'fast');\n }\n }\n });\n\n //////////////////////////////////////////\n // Slider\n //////////////////////////////////////////\n\n $('.solutions-slider').not('.slick-initialized').each(function () {\n var slickConfig = {\n 'slidesToShow': 3,\n 'prevArrow': '',\n 'nextArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 992,\n 'settings': {\n 'slidesToShow': 2\n }\n }, {\n 'breakpoint': 769,\n 'settings': {\n 'slidesToShow': 1,\n 'arrows': false,\n 'dots': true\n }\n }]\n };\n $(this).slick(slickConfig);\n });\n\n $('.videoPopup, .ent-btn.play').magnificPopup({\n 'type': 'iframe',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n }, 1000);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('resHeader', {\n 'bindings': {\n 'resource': '@',\n 'template': '@',\n 'currentData': '='\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/res-header/templates/res-header.html',\n 'controller': 'resHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n resHeaderController.$inject = [\"$http\", \"$timeout\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('resHeaderController', resHeaderController);\n\n function resHeaderController($http, $timeout, directiveData, errorService) {\n var ctrl = this;\n ctrl.defaultFilter = [];\n ctrl.activeState = 0;\n ctrl.filterEnterpriseSolutions = null;\n ctrl.makeActive = makeActive;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'res-header').then(function (response) {\n ctrl.data = response.data.fields;\n\n if (ctrl.data.filters) {\n ctrl.data.filters.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.defaultFilter = ctrl.data.filters[0].FilterID;\n return ctrl.data.filters[index] = response.data.fields;\n }, handleRejection);\n }\n });\n }\n // Filter groups for ENT 2.1\n if (ctrl.data.filterGroups) {\n ctrl.data.filterGroups.forEach(function (item, index) {\n item.group.forEach(function (value, key) {\n if (value.match(/\\.json/)) {\n return $http.get(value, { 'cache': true }).then(function (response) {\n if (ctrl.currentData && ctrl.currentData[index]) {\n ctrl.currentData[index] = item.group[0].FilterID;\n }\n\n return ctrl.data.filterGroups[index].group[key] = response.data.fields;\n }, handleRejection);\n }\n });\n });\n }\n }, handleRejection);\n }\n\n function makeActive(index) {\n ctrl.activeState = index;\n }\n\n $timeout(function () {\n // case studies page filter\n ctrl.filterEnterpriseSolutions = function (category) {\n var $container = $('.row-enterprise-solution-filtered');\n if (category === 'all') {\n if ($container.hasClass('slick-slider')) {\n $container.slick('slickUnfilter');\n } else {\n $container.find('.item:hidden').fadeIn(100).addClass('visible');\n }\n } else {\n if ($container.hasClass('slick-slider')) {\n $container.slick('slickUnfilter');\n $container.find('.item:not(.enterprise-category--' + category + ')').removeClass('visible');\n $container.find('.item.enterprise-category--' + category).addClass('visible');\n $container.slick('slickFilter', '.visible');\n $container.slick('slickGoTo', 0);\n } else {\n $.when($container.find('.item:not(.enterprise-category--' + category + ')').removeClass('visible').fadeOut(100)).done(function () {\n $container.find('.item.enterprise-category--' + category).fadeIn(100, function () {\n $(this).addClass('visible');\n });\n });\n }\n }\n };\n });\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entResItem', {\n 'bindings': {\n 'resource': '@',\n 'template': '@',\n 'resourceName': '@',\n 'currentData': '='\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/res-item/templates/res-item.html',\n 'controller': 'entResItemController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entResItemController.$inject = [\"$http\", \"directiveData\", \"$timeout\", \"$window\", \"$element\", \"$q\", \"$rootScope\", \"appHelperService\", \"$scope\", \"errorService\", \"ENV\"];\n angular.module('kappGlobal.enterprise').controller('entResItemController', entResItemController);\n function entResItemController($http, directiveData, $timeout, $window, $element, $q, $rootScope, appHelperService, $scope, errorService, ENV) {\n var ctrl = this;\n ctrl.windowWidth = $window.innerWidth;\n ctrl.entBlockType = ' item-short ellipsis-short ';\n ctrl.summaryDisplay = '';\n ctrl.$onInit = activate;\n ctrl.$donDestroy = destroyGlobalListeners;\n ctrl.currentPage = 1;\n ctrl.pageSize = 9;\n ctrl.reverse = false;\n ctrl.newData = [];\n ctrl.locale = ENV.locale;\n\n ctrl.resFilter = function (artArray) {\n var counter = 0,\n resFilter = '^';\n\n for (var i = 0; i < ctrl.currentData.length; i++) {\n if (ctrl.currentData[i] !== 'all') {\n resFilter += '(?=.*\\\\b' + ctrl.currentData[i] + '\\\\b)';\n }\n }\n resFilter += '.*$';\n\n var re = new RegExp(resFilter);\n\n ctrl.currentData.forEach(function (item) {\n if (item === 'all') {\n counter++;\n }\n });\n if (counter === ctrl.currentData.length) {\n return artArray;\n } else {\n return artArray.filter(function (item) {\n if (item.itemClass.match(re)) {\n return item;\n }\n });\n }\n };\n\n function activate() {\n setEntBlockType();\n getData();\n }\n\n function destroyGlobalListeners() {\n angular.element(window).off('resize.resItem');\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n var allDone = $q.defer(),\n articlePromises = [],\n filterPromises = [];\n return directiveData.getByUrl('ent-res-item').then(function (response) {\n ctrl.data = response.data.fields.article;\n ctrl.data.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n articlePromises.push($http.get(item, { 'cache': true }).then(function (response) {\n ctrl.data[index] = response.data.fields;\n ctrl.data[index].Filters.forEach(function (filter) {\n if (filter.match(/\\.json/)) {\n filterPromises.push($http.get(filter, { 'cache': true }).then(function (response) {\n if (angular.isUndefined(ctrl.data[index].itemClass)) ctrl.data[index].itemClass = '';\n return ctrl.data[index].itemClass += 'enterprise-category--' + response.data.fields.FilterID + ' ';\n }, handleRejection));\n }\n });\n }, handleRejection).then(function () {\n var states = ['enterprise-home', 'enterprise-resource', 'enterprise-resources'];\n if (response.data.fields.HideSummary && response.data.fields.HideSummary[0] === 'True' && !appHelperService.assertStateByName(states)) {\n ctrl.summaryDisplay = 'hide-summary';\n }\n }));\n }\n });\n $q.all(articlePromises).then(function () {\n $q.all(filterPromises).then(function () {\n // ctrl.newData = ctrl.resFilter(ctrl.data); Causes a problem for case-studies. Legacy code before SPA\n $scope.$watch('$ctrl.currentData', function (newVal) {\n if (newVal) {\n ctrl.newData = ctrl.resFilter(ctrl.data);\n }\n }, true);\n });\n });\n\n allDone.resolve();\n }, handleRejection);\n }\n\n function setEntBlockType() {\n var states = ['enterprise-home', 'enterprise-resource', 'enterprise-resources'];\n if (appHelperService.assertStateByName(states)) ctrl.entBlockType = 'ellipsis';\n }\n\n function updateSlider() {\n $($element).find('.ellipsis .content').trigger('update.dot');\n }\n\n var throttleTimer = void 0;\n\n angular.element($window).on('resize.resItem', function () {\n clearTimeout(throttleTimer);\n throttleTimer = $timeout(function () {\n updateSlider();\n }, 250);\n });\n\n var ngRender = $rootScope.$on('ngRender', loadScripts);\n\n function loadScripts() {\n $timeout(function () {\n\n $($element).find('.ellipsis .content').dotdotdot({\n 'ellipsis': '... ',\n 'height': 150,\n 'callback': function callback(isTruncated) {\n if (isTruncated) {\n $(this).animate({ 'opacity': 1 }, 'fast');\n }\n }\n });\n\n $($element).find('.ellipsis-short .content').dotdotdot({\n 'ellipsis': '... ',\n 'height': 85,\n 'callback': function callback(isTruncated) {\n if (isTruncated) {\n $(this).animate({ 'opacity': 1 }, 'fast');\n }\n }\n });\n\n $($element).find('.solutions-slider').not('.slick-initialized').each(function () {\n var slickConfig = {\n 'slidesToShow': 1,\n 'arrows': false,\n 'dots': true,\n 'mobileFirst': true,\n 'prevArrow': '',\n 'nextArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 600,\n 'settings': 'unslick'\n }]\n };\n $(this).slick(slickConfig);\n });\n\n $($element).find('.videoPopup').magnificPopup({\n 'type': 'iframe',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n }, 200);\n\n ngRender();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entRisk', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/risk/templates/risk.html',\n 'controller': 'entRiskController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entRiskController.$inject = [\"$timeout\", \"$element\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entRiskController', entRiskController);\n\n function entRiskController($timeout, $element, directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-risk').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n runScripts();\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n $($element).find('.image-popup').magnificPopup({\n 'type': 'image',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n\n $($element).find('.video-popup').magnificPopup({\n 'type': 'iframe',\n 'closeOnContentClick': false,\n 'closeBtnInside': true\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entResourceDocuments', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/resource-documents/templates/resource-documents.html',\n 'controller': 'entResourceDocumentsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entResourceDocumentsController.$inject = [\"$http\", \"$rootScope\", \"directiveData\", \"errorService\", \"appHelperService\"];\n angular.module('kappGlobal.enterprise').controller('entResourceDocumentsController', entResourceDocumentsController);\n function entResourceDocumentsController($http, $rootScope, directiveData, errorService, appHelperService) {\n var ctrl = this,\n isRTL = appHelperService.isPageDirectionRTL();\n ctrl.show = false;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'resource-documents').then(function (response) {\n ctrl.data = response.data.fields;\n\n ctrl.data.sections.forEach(function (item, index1) {\n item.solutions.forEach(function (item, index2) {\n if (item.match(/\\.json/)) {\n $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.data.sections[index1].solutions[index2] = response.data.fields;\n ctrl.data.sections[index1].solutions[index2].ArticleTitle = String(ctrl.data.sections[index1].solutions[index2].ArticleTitle).replace(/<[^>]+>/gm, '');\n return ctrl.data.sections[index1].solutions[index2];\n }, handleRejection).then(function () {\n if (!angular.equals({}, ctrl.data.sections.solutions)) ctrl.show = true;\n });\n }\n });\n });\n }, handleRejection);\n }\n\n var ngRender = $rootScope.$on('ngRender', runScripts);\n\n function runScripts() {\n var maxSlides = ctrl.data && ctrl.data.slides ? parseInt(ctrl.data.slides) : 3;\n\n $('.carousel.mobile-1.desktop-3').slick({\n 'mobileFirst': true,\n 'infinite': true,\n 'arrows': false,\n 'slide': 'div',\n 'accessibility': false,\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'dots': true,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 992,\n 'settings': {\n 'slidesToShow': maxSlides,\n 'slidesToScroll': maxSlides,\n 'arrows': true\n }\n }, {\n 'breakpoint': 661,\n 'settings': {\n 'slidesToShow': maxSlides > 2 ? maxSlides - 1 : 1,\n 'slidesToScroll': maxSlides > 1 ? maxSlides - 1 : 1,\n 'arrows': false\n }\n }]\n });\n\n ngRender();\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('simulatedAttacks', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/simulated-attacks/templates/simulated-attacks.html',\n 'controller': 'simulatedAttacksController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n simulatedAttacksController.$inject = [\"directiveData\", \"$http\", \"$q\", \"appHelperService\", \"errorService\", \"$window\", \"$timeout\", \"$scope\"];\n angular.module('kappGlobal.enterprise').controller('simulatedAttacksController', simulatedAttacksController);\n\n function simulatedAttacksController(directiveData, $http, $q, appHelperService, errorService, $window, $timeout, $scope) {\n var ctrl = this,\n isRTL = appHelperService.isPageDirectionRTL();\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'simulated-attacks').then(function (response) {\n ctrl.data = response.data.fields;\n\n var promise = ctrl.data.simulations.map(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.data.simulations[index] = response.data.fields;\n });\n }\n });\n\n return $q.all(promise).then(function () {\n $timeout(function () {\n runScripts();\n }, 100);\n });\n }).catch(handleRejection);\n }\n\n function runScripts() {\n $('.simulated-attacks-slides-carousel.slides').slick({\n 'mobileFirst': true,\n 'infinite': true,\n 'arrows': false,\n 'slide': 'div',\n 'accessibility': false,\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'dots': true,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 992,\n 'settings': {\n 'arrows': true\n }\n }, {\n 'breakpoint': 661,\n 'settings': {\n 'arrows': false\n }\n }]\n });\n\n // inner carousel popups\n\n var btnGroup = $window.document.querySelectorAll('.simulated-attacks a[name=\"showPopup\"]');\n\n for (var i = 0; i < btnGroup.length; i++) {\n btnGroup[i].addEventListener('click', triggerPopup, false);\n }\n\n function triggerPopup(e) {\n e.stopPropagation();\n e.preventDefault();\n\n var h = $window.outerHeight,\n w = $window.outerWidth,\n left = 800 - w / 2,\n top = 500 - h / 2,\n params = 'height=500, width=1060, left=' + left + ', top=' + top + ', menubar=yes, status=yes, directories=yes, scrollbars=yes';\n\n $window.open(this.getAttribute('data-popupurl'), 'module', params);\n }\n\n $scope.$on('$destroy', function () {\n for (var _i = 0; _i < btnGroup.length; _i++) {\n btnGroup[_i].removeEventListener('click', triggerPopup);\n }\n });\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('solutions', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/solutions/templates/solutions.html',\n 'controller': 'solutionsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n solutionsController.$inject = [\"$http\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('solutionsController', solutionsController);\n function solutionsController($http, directiveData, errorService) {\n var ctrl = this;\n ctrl.show = false;\n ctrl.solutions = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl(ctrl.resource || 'solutions').then(function (response) {\n ctrl.data = response.data.fields;\n\n ctrl.data.solutions.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.solutions[index] = response.data.fields;\n if (angular.isDefined(ctrl.solutions[index].ArticleTitle)) {\n ctrl.solutions[index].ArticleTitle = String(ctrl.solutions[index].ArticleTitle).replace(/<[^>]+>/gm, '');\n }\n }, handleRejection).then(function () {\n if (!angular.equals({}, ctrl.solutions)) ctrl.show = true;\n });\n }\n });\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entSupport', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/support/templates/support.html',\n 'controller': 'entSupportController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entSupportController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entSupportController', entSupportController);\n function entSupportController(directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-support').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entTableSection', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/table-section/templates/table-section.html',\n 'controller': 'enterpriseController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('entThreat', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/threat/templates/threat.html',\n 'controller': 'entThreatController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n entThreatController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.enterprise').controller('entThreatController', entThreatController);\n function entThreatController(directiveData, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'ent-threat').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.enterprise').component('trainingModules', {\n 'bindings': {\n 'resource': '@',\n 'path': '@'\n },\n 'templateUrl': '/resources/template/html/modules/enterprise/components/training-modules/templates/training-modules.html',\n 'controller': 'trainingModulesController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n trainingModulesController.$inject = [\"directiveData\", \"$http\", \"$q\", \"errorService\", \"ngDialog\"];\n angular.module('kappGlobal.enterprise').controller('trainingModulesController', trainingModulesController);\n\n function trainingModulesController(directiveData, $http, $q, errorService, ngDialog) {\n var ctrl = this;\n ctrl.loadDemo = loadDemo;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'training-modules').then(function (response) {\n ctrl.data = response.data.fields;\n\n var promise = ctrl.data.modules.map(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.data.modules[index] = response.data.fields;\n });\n }\n });\n\n return $q.all(promise);\n }).catch(handleRejection);\n }\n\n function loadDemo(data, path) {\n return ngDialog.open({\n 'template': '/resources/template/html/modules/enterprise/components/training-modules/templates/training-demo-popup.html',\n 'className': 'ngdialog-plain training-demo',\n 'data': { 'data': data, 'path': path },\n 'closeByNavigation': true,\n 'showClose': false\n });\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('appsInside', {\n 'bindings': {\n 'resource': '@',\n 'redesign': '@'\n },\n 'templateUrl': '/resources/template/html/modules/smb/components/apps-inside/templates/apps-inside.template.html',\n 'controller': 'sharedGetByNameController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbContactUs', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/smb/components/contact-us/templates/contact-us.template.html',\n 'controller': 'smbContactUsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n smbContactUsController.$inject = [\"ngDialog\", \"$sce\", \"directiveData\", \"$scope\", \"errorService\", \"marketoHelperService\", \"$element\"];\n angular.module('kappGlobal.smb').controller('smbContactUsController', smbContactUsController);\n\n function smbContactUsController(ngDialog, $sce, directiveData, $scope, errorService, marketoHelperService, $element) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.formId = '';\n ctrl.formNr = 0;\n ctrl.$onInit = activate;\n ctrl.openPopup = openPopup;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function openPopup($event) {\n if ($event) {\n $event.stopPropagation();\n $event.preventDefault();\n }\n\n var $targetElt = $($event.target),\n popupUrl = $targetElt.data('popup-url');\n\n if (!popupUrl) return;\n\n var embedSrc = $sce.trustAsResourceUrl(popupUrl);\n\n ngDialog.open({\n 'template': '\\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    ',\n 'className': 'ngdialog-iframe ngdialog-flyout custom-width-popup',\n 'showClose': false,\n 'scope': $scope,\n 'width': $targetElt.data('popup-width'),\n 'height': $targetElt.data('popup-height'),\n 'plain': true,\n 'name': 'video-popup'\n });\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'smb-contact-us').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.formId = ctrl.data.formId;\n ctrl.formNr = parseInt(ctrl.data.formNr);\n runMarketo(ctrl.formId, ctrl.formNr);\n }, handleRejection);\n }\n\n function runMarketo(mId, mNr) {\n marketoHelperService.loadMarketo(mId, mNr, $scope, $element);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbCompareTable4up', {\n 'multiElement': true,\n 'controller': 'smbCompareTable4upController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n if ($attrs.template) template = $attrs.template;\n return '/resources/template/html/modules/smb/components/compare-table-4up/templates/compare-table-4up-' + template + '.template.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n smbCompareTable4upController.$inject = [\"directiveData\", \"$timeout\", \"errorService\", \"$http\", \"angularLoad\", \"$scope\", \"$rootScope\", \"appHelperService\"];\n angular.module('kappGlobal.smb').controller('smbCompareTable4upController', smbCompareTable4upController);\n\n function smbCompareTable4upController(directiveData, $timeout, errorService, $http, angularLoad, $scope, $rootScope, appHelperService) {\n var ctrl = this;\n var isTrue = appHelperService.isTrue;\n\n ctrl.data = {};\n ctrl.$onInit = activate;\n ctrl.toggleTable = toggleTable;\n ctrl.showTable = false;\n ctrl.enableFixedHeaders = false;\n\n function activate() {\n getData();\n }\n\n var ngRender = $rootScope.$on('ngRender', function () {\n runScripts();\n ngRender();\n });\n\n function toggleTable(event) {\n event.preventDefault();\n ctrl.showTable = !ctrl.showTable;\n\n if (ctrl.enableFixedHeaders) {\n $timeout(function () {\n /* eslint-disable */\n Waypoint.refreshAll();\n /* eslint-enable */\n }, 500);\n }\n }\n\n function getData() {\n return directiveData.getByUrl('smb-product-compare').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.products = ctrl.data.products || [];\n ctrl.enableFixedHeaders = isTrue(ctrl.data.enableFixedHeaders);\n\n var promises = void 0;\n\n if (ctrl.products) {\n promises = ctrl.products.map(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.products[index] = response.data.fields;\n });\n }\n });\n }\n\n if (ctrl.data.secondColHighlight && ctrl.data.secondColHighlight[0]) {\n ctrl.featuCol = 2;\n } else if (ctrl.data.thirdColHighlight && ctrl.data.thirdColHighlight[0]) {\n ctrl.featuCol = 3;\n } else if (ctrl.data.fourthColHighlight && ctrl.data.fourthColHighlight[0]) {\n ctrl.featuCol = 4;\n } else if (ctrl.data.fifthColHighlight && ctrl.data.fifthColHighlight[0]) {\n ctrl.featuCol = 5;\n }\n\n return promises;\n }).catch(function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n // Check if current page has comparison charts on it\n if ($('.comparison-chart').length) {\n // Loop through each comparison chart and set the default column\n var mobileDefault = $('.comparison-chart').data('comparison-default');\n $('.comparison-chart .' + mobileDefault).addClass('currently-active');\n }\n\n $('.comparison-nav li a').on('click', function (e) {\n e.preventDefault();\n var $this = $(this),\n\n // Get navigation direction\n direction = $this.data('comparison-nav-direction'),\n\n // Get chart ID from the data attribute\n chartID = $this.closest('.comparison-nav').data('comparison-chart'),\n\n // Get comparison chart using that ID\n $comparisonChart = $('.comparison-chart[data-comparison-chart=\"' + chartID + '\"]'),\n\n // Get comparison chart mobile nav\n $comparisonChartNav = $('.comparison-nav[data-comparison-chart=\"' + chartID + '\"]');\n\n // Remove featured style from the comparison chart mobile nav\n $comparisonChartNav.find('li a.feat').removeClass('feat');\n\n // Get current column\n var $currentColumn = $comparisonChart.find('.row-header .column-product.currently-active'),\n currentTitle = $currentColumn.find('h2.product-title > a').clone(),\n currentID = parseInt($currentColumn.data('column')),\n nextID = parseInt(currentID + 1),\n prevID = parseInt(currentID - 1),\n nextNavID = parseInt(currentID + 2),\n prevNavID = parseInt(currentID - 2),\n newNextTitle = void 0;\n\n // Check direction and if prev/next column exists\n if (direction === 'prev' && $comparisonChart.find('.column-product.column-' + prevID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + prevID).addClass('currently-active');\n var newPrevTitle = $comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title > a').clone();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-prev a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-next a').addClass('feat');\n }\n\n $comparisonChartNav.find('li.nav-prev a').html(newPrevTitle.text());\n $comparisonChartNav.find('li.nav-next a').html(currentTitle.text());\n } else if (direction === 'next' && $comparisonChart.find('.column-product.column-' + nextID).length) {\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + nextID).addClass('currently-active');\n newNextTitle = $comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title > a').clone();\n\n if ($comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-next a').addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $comparisonChartNav.find('li.nav-prev a').addClass('feat');\n }\n\n $comparisonChartNav.find('li.nav-next a').html(newNextTitle.text());\n $comparisonChartNav.find('li.nav-prev a').html(currentTitle.text());\n }\n });\n\n if (ctrl.enableFixedHeaders) loadWaypoints();\n }\n\n function loadWaypoints() {\n angularLoad.loadScript('resources/template/js/jquery.waypoints.sticky.min.js').then(function () {\n var siteTitle = $('.site-header .site-title').outerHeight(true),\n mainNavHeight = $('#site-header .main-nav').outerHeight(true);\n\n /* eslint-disable */\n var sticky = new Waypoint.Sticky({\n 'element': $('.sticky-row-header')[0],\n 'offset': -$('.sticky-row-header .row-item').height() + 150\n }),\n inViewList = new Waypoint.Inview({\n 'element': $('.comparison-chart .row-footer')[0],\n 'entered': function entered(direction) {\n if (direction === 'down') {\n $('.sticky-row-header').hide();\n }\n },\n 'exit': function exit(direction) {\n if (direction === 'up') {\n $('.sticky-row-header').show();\n }\n }\n });\n /* eslint-enable */\n\n $('.sticky-row-header').css('top', siteTitle);\n\n if ($(window).width() > 768) {\n $('.sticky-row-header').css('top', mainNavHeight);\n }\n\n $scope.$on('$destroy', function () {\n inViewList.destroy();\n sticky.destroy();\n });\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbProdDownload', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/smb/components/prod-download/templates/prod-download.template.html',\n 'controller': 'smbProdDownloadController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n smbProdDownloadController.$inject = [\"$http\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.smb').controller('smbProdDownloadController', smbProdDownloadController);\n\n function smbProdDownloadController($http, directiveData, errorService) {\n var ctrl = this;\n ctrl.product = [];\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl('product-download').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.product = response.data.fields.product;\n if (ctrl.product.match(/\\.json/)) {\n return $http.get(ctrl.product, { 'cache': true }).then(function (response) {\n return ctrl.product = response.data.fields;\n }, handleRejection);\n }\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbProdList', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/smb/components/prod-list/templates/prod-list.template.html',\n 'controller': 'smbProdListController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n smbProdListController.$inject = [\"$http\", \"ENV\", \"errorService\"];\n angular.module('kappGlobal.smb').controller('smbProdListController', smbProdListController);\n\n function smbProdListController($http, ENV, errorService) {\n var ctrl = this;\n ctrl.data = { 'product': [] };\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return $http.get('/content/' + ENV.locale + '/smb-downloads/smb-downloads-products.json', { 'cache': true }).then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.data.product.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n return ctrl.data.product[index] = response.data.fields;\n }, handleRejection);\n }\n });\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbDownloadThankYou', {\n 'bindings': {\n 'componentData': '<',\n 'productName': '<',\n 'version': '@',\n 'resource': '@',\n 'product': '<'\n },\n 'templateUrl': '/resources/template/html/modules/smb/components/download-thank-you/templates/download-thank-you.template.html',\n 'controller': 'smbDownloadThankYouController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n smbDownloadThankYouController.$inject = [\"$timeout\", \"ENV\", \"directiveData\", \"downloadLinks\", \"errorService\"];\n angular.module('kappGlobal.smb').controller('smbDownloadThankYouController', smbDownloadThankYouController);\n\n function smbDownloadThankYouController($timeout, ENV, directiveData, downloadLinks, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.downloadData = [];\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'thank-you').then(function (response) {\n var fallbackLanguageCodes = void 0;\n ctrl.data = response.data.fields;\n\n if (ctrl.data.linksType) {\n if (!angular.isString(ctrl.data.selectedLanguagesCodes)) {\n ctrl.data.selectedLanguagesCodes = ctrl.data.selectedLanguagesCodes.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n if (!angular.isString(ctrl.data.fallbackLanguageCodes)) {\n fallbackLanguageCodes = ctrl.data.fallbackLanguageCodes.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n var docSettings = {\n 'applications': ctrl.data.shortProdName.split(','),\n 'options': {\n 'links_type': ctrl.data.linksType,\n 'locale_selection_type': ctrl.data.localeSelectionType,\n 'selected_languages_codes': ctrl.data.selectedLanguagesCodes,\n 'fallback_language_code': fallbackLanguageCodes,\n 'website_country_code': ctrl.data.websiteCountryCode || ENV.locale.substr(3, 5),\n 'website_language_code': 'en',\n 'website_fallback_language': 'en',\n 'lang_locale_link_selection_amount': null,\n 'show_release_version_type': null,\n 'use_aux_lang_for_app_plugins': null\n }\n };\n\n $timeout(function () {\n //productData.getsmb(ctrl.data.prodName).then((response)=>{\n //ctrl.productInfo = response.data.fields;\n downloadLinks.getByApp('', docSettings).then(function (response) {\n ctrl.downloadData = response.data[0].applications[0];\n }, handleRejection);\n //})\n });\n }\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbProds', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/smb/components/prods/templates/prods.template.html',\n 'controller': 'smbProdsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n smbProdsController.$inject = [\"$http\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.smb').controller('smbProdsController', smbProdsController);\n\n function smbProdsController($http, directiveData, errorService) {\n var ctrl = this;\n ctrl.data = [];\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl('smb-products').then(function (response) {\n ctrl.data = response.data.fields.product;\n ctrl.data.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n return ctrl.data[index] = response.data.fields;\n }, handleRejection);\n }\n });\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbProdsBlock', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'smbProdsBlockController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n if ($attrs.template) template = $attrs.template;\n return '/resources/template/html/modules/smb/components/prods-block/templates/prods-block-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n smbProdsBlockController.$inject = [\"$http\", \"appHelperService\", \"directiveData\", \"errorService\", \"ENV\", \"$anchorScroll\", \"$rootScope\"];\n angular.module('kappGlobal.smb').controller('smbProdsBlockController', smbProdsBlockController);\n\n function smbProdsBlockController($http, appHelperService, directiveData, errorService, ENV, $anchorScroll, $rootScope) {\n var ctrl = this;\n\n ctrl.data = {};\n ctrl.products = [];\n ctrl.downloadState = appHelperService.assertStateByName('smb-downloads');\n ctrl.$onInit = activate;\n ctrl.locale = ENV.locale;\n\n function activate() {\n getData();\n getBuyblockData();\n }\n\n var ngRender = $rootScope.$on('ngRender', scrollTo);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'smb-products-block').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.products = response.data.fields.products;\n ctrl.products.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n return ctrl.products[index] = response.data.fields;\n }, handleRejection);\n }\n });\n }, handleRejection);\n }\n\n function getBuyblockData() {\n return directiveData.getLocal('buyblock/buyblock-texts').then(function (response) {\n ctrl.buyblockData = response.data.fields;\n });\n }\n\n function scrollTo() {\n $anchorScroll();\n ngRender();\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbFeaturedSection', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/smb/components/smb-featured-section/templates/smb-featured-section.template.html',\n 'controller': 'smbFeaturedSectionController'\n });\n})();\n'use strict';\n\n(function () {\n smbFeaturedSectionController.$inject = [\"directiveData\", \"errorService\", \"$http\"];\n angular.module('kappGlobal').controller('smbFeaturedSectionController', smbFeaturedSectionController);\n\n function smbFeaturedSectionController(directiveData, errorService, $http) {\n var ctrl = this;\n\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl(ctrl.resource || 'smb-featured-section').then(function (res) {\n ctrl.data = res.data.fields;\n ctrl.products = ctrl.data.products;\n var promises = void 0;\n\n if (ctrl.products) {\n promises = ctrl.products.map(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n ctrl.products[index] = response.data.fields;\n });\n }\n });\n }\n return promises;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbSupportCustomHtml', {\n 'templateUrl': '/resources/template/html/modules/smb/components/support-custom-html/templates/support-custom-html.template.html',\n 'controller': 'smbSupportCustomHtmlController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n smbSupportCustomHtmlController.$inject = [\"$http\", \"ENV\", \"errorService\"];\n angular.module('kappGlobal.smb').controller('smbSupportCustomHtmlController', smbSupportCustomHtmlController);\n\n function smbSupportCustomHtmlController($http, ENV, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return $http.get('/content/' + ENV.locale + '/smb-support/smb-support-custom-html.json', { 'cache': true }).then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.smb').component('smbTargetedSolutions', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'smbTargetedSolutionsController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'default';\n if ($attrs.template) template = $attrs.template;\n return '/resources/template/html/modules/smb/components/targeted-solutions/templates/targeted-solutions-' + template + '.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n smbTargetedSolutionsController.$inject = [\"$http\", \"directiveData\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.smb').controller('smbTargetedSolutionsController', smbTargetedSolutionsController);\n\n function smbTargetedSolutionsController($http, directiveData, $element, errorService) {\n var ctrl = this;\n ctrl.data = { 'smbProducts': [] };\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.prodNumberClass = '';\n getData();\n }\n\n function handleRejection(rejection) {\n $element.hide();\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'targeted-solutions').then(function (response) {\n ctrl.data = response.data.fields;\n ctrl.prodNumberClass = 'products-number-' + ctrl.data.smbProducts.length;\n ctrl.data.smbProducts.forEach(function (item, index) {\n if (item.match(/\\.json/)) {\n return $http.get(item, { 'cache': true }).then(function (response) {\n return ctrl.data.smbProducts[index] = response.data.fields;\n }, handleRejection);\n }\n });\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.vsb').component('vsbAwards', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/vsb/components/awards/templates/awards.template.html',\n 'controller': 'vsbAwardsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n vsbAwardsController.$inject = [\"errorService\", \"directiveData\"];\n angular.module('kappGlobal.vsb').controller('vsbAwardsController', vsbAwardsController);\n function vsbAwardsController(errorService, directiveData) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n if (ctrl.resource && ctrl.resource.match(/\\//)) {\n return directiveData.get(ctrl.resource).then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n } else {\n return directiveData.getByUrl(ctrl.resource || 'vsb-awards').then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n }\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.vsb').component('vsbCompareTable4up', {\n 'templateUrl': '/resources/template/html/modules/vsb/components/compare-table-4up/templates/compare-table-4up.template.html',\n 'controller': 'vsbCompareTable4upController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n vsbCompareTable4upController.$inject = [\"$timeout\", \"$element\", \"directiveData\", \"windowHelperService\", \"errorService\"];\n angular.module('kappGlobal.vsb').controller('vsbCompareTable4upController', vsbCompareTable4upController);\n\n function vsbCompareTable4upController($timeout, $element, directiveData, windowHelperService, errorService) {\n var ctrl = this;\n\n ctrl.data = {};\n ctrl.$onInit = activate;\n ctrl.navigateUserTo = windowHelperService.navigateUserTo;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('vsb-home-compare-table').then(function (response) {\n ctrl.data = response.data.fields;\n }).then(function () {\n $timeout(function () {\n runScripts();\n });\n }).catch(function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n // Check if current page has comparison charts on it\n if ($($element).find('.comparison-chart').length) {\n // Loop through each comparison chart and set the default column\n var mobileDefault = $($element).find('.comparison-chart').data('comparison-default');\n\n $('.comparison-chart .' + mobileDefault).addClass('currently-active');\n }\n\n $($element).find('.comparison-nav li a').on('click', function (e) {\n e.preventDefault();\n var $this = $(this),\n direction = $this.data('comparison-nav-direction'),\n chartID = $this.closest('.comparison-nav').data('comparison-chart'),\n $comparisonChart = $('.comparison-chart[data-comparison-chart=\"' + chartID + '\"]'),\n $comparisonChartNav = $('.comparison-nav[data-comparison-chart=\"' + chartID + '\"]'),\n $prev = $comparisonChartNav.find('li.nav-prev a'),\n $next = $comparisonChartNav.find('li.nav-next a'),\n $currentColumn = $comparisonChart.find('.row-header .column-product.currently-active'),\n currentTitle = $currentColumn.find('h2.product-title a'),\n currentID = parseInt($currentColumn.data('column'), 10),\n nextID = currentID + 1,\n prevID = currentID - 1,\n nextNavID = currentID + 2,\n prevNavID = currentID - 2;\n\n $comparisonChartNav.find('li a.feat').removeClass('feat');\n\n // Check direction and if prev/next column exists\n if (direction === 'prev' && $comparisonChart.find('.column-product.column-' + prevID).length) {\n var newPrevTitle = $comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a');\n\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n $comparisonChart.find('.column-' + prevID).addClass('currently-active');\n\n if ($comparisonChart.find('.row-header .column-product.column-' + prevNavID + ' h2.product-title a').hasClass('feat')) {\n $prev.addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $next.addClass('feat');\n }\n\n $prev.html(newPrevTitle.length ? newPrevTitle.html() : ' ').toggleClass('hide-item', !newPrevTitle.length);\n\n $next.html(currentTitle.length ? currentTitle.html() : ' ').toggleClass('hide-item', !currentTitle.length);\n } else if (direction === 'next' && $comparisonChart.find('.column-product.column-' + nextID).length) {\n var newNextTitle = $comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a');\n\n $comparisonChart.find('.column-' + currentID).removeClass('currently-active');\n\n $comparisonChart.find('.column-' + nextID).addClass('currently-active');\n\n if ($comparisonChart.find('.row-header .column-product.column-' + nextNavID + ' h2.product-title a').hasClass('feat')) {\n $next.addClass('feat');\n }\n\n if ($comparisonChart.find('.row-header .column-product.column-' + currentID + ' h2.product-title a').hasClass('feat')) {\n $prev.addClass('feat');\n }\n\n $next.html(newNextTitle.length ? newNextTitle.html() : ' ').toggleClass('hide-item', !newNextTitle.length);\n\n $prev.html(currentTitle.length ? currentTitle.html() : ' ').toggleClass('hide-item', !currentTitle.length);\n }\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.vsb').component('vsbDownloadThankYou', {\n 'bindings': {\n 'componentData': '<',\n 'productName': '<',\n 'version': '@',\n 'resource': '@',\n 'product': '<'\n },\n 'templateUrl': '/resources/template/html/modules/vsb/components/download-thank-you/templates/download-thank-you.template.html',\n 'controller': 'vsbDownloadThankYouController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n vsbDownloadThankYouController.$inject = [\"$rootScope\", \"$timeout\", \"ENV\", \"directiveData\", \"downloadLinks\", \"validationHelper\", \"errorService\"];\n angular.module('kappGlobal.vsb').controller('vsbDownloadThankYouController', vsbDownloadThankYouController);\n\n function vsbDownloadThankYouController($rootScope, $timeout, ENV, directiveData, downloadLinks, validationHelper, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n var hideAlphabets = [];\n directiveData.getLocal('general-settings').then(function (response) {\n var res = response.data.fields;\n if (res && res.hideAlphabets) return hideAlphabets = res.hideAlphabets;\n }, handleRejection);\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'small-office-security-free-trial').then(function (response) {\n ctrl.data = response.data.fields;\n $rootScope.kaspersky.productName = ctrl.data.prodName || ctrl.productName;\n\n var application = '';\n if (ctrl.data.shortProdNameTaxonomy.length > 0) {\n application = ctrl.data.shortProdNameTaxonomy.map(function (item) {\n return item.key;\n });\n }\n if (ctrl.data.linksType) {\n if (!angular.isString(ctrl.data.selectedLanguagesCodes)) {\n ctrl.data.selectedLanguagesCodes = ctrl.data.selectedLanguagesCodes.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n if (!angular.isString(ctrl.data.fallbackLanguageCode)) {\n ctrl.data.fallbackLanguageCode = ctrl.data.fallbackLanguageCode.reduce(function (prev, cur, index) {\n return index !== 0 ? prev + ',' + cur.key : prev + cur.key;\n }, '');\n }\n var docSettings = {\n 'applications': application || ctrl.data.shortProdName.split(','),\n 'options': {\n 'links_type': ctrl.data.linksType,\n 'locale_selection_type': ctrl.data.localeSelectionType,\n 'selected_languages_codes': ctrl.data.selectedLanguagesCodes,\n 'fallback_language_code': ctrl.data.fallbackLanguageCode,\n 'website_country_code': ctrl.data.websiteCountryCode || ENV.locale.substr(3, 5),\n 'website_language_code': 'en',\n 'website_fallback_language': 'en',\n 'lang_locale_link_selection_amount': null,\n 'show_release_version_type': null,\n 'use_aux_lang_for_app_plugins': null\n }\n };\n\n $timeout(function () {\n downloadLinks.getByApp('', docSettings).then(function (response) {\n ctrl.downloadData = response.data[0].applications[0];\n _.forEach(ctrl.downloadData.groups, function (group) {\n group.downloads = _.remove(group.downloads, function (d) {\n return validationHelper.isNullOrUndefined(hideAlphabets) ? true : hideAlphabets.indexOf(d.alphabet) === -1;\n });\n });\n });\n });\n }\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.vsb').component('infoSection', {\n 'bindings': {\n 'resource': '@',\n 'requestParams': '<'\n },\n 'templateUrl': '/resources/template/html/modules/vsb/components/info-section/templates/info-section.template.html',\n 'controller': 'infoSectionController'\n });\n})();\n'use strict';\n\n(function () {\n infoSectionController.$inject = [\"directiveData\", \"pdcProxyService\", \"$element\", \"$window\", \"$timeout\", \"errorService\"];\n angular.module('kappGlobal.vsb').controller('infoSectionController', infoSectionController);\n\n function infoSectionController(directiveData, pdcProxyService, $element, $window, $timeout, errorService) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl(ctrl.resource || 'info-section').then(function (res) {\n ctrl.data = res.data.fields;\n }).catch(function (rejection) {\n return errorService.warn(rejection);\n }).finally(function () {\n $timeout(function () {\n $($element).find('a.js-start-download').click(function (e) {\n e.preventDefault();\n startDownload();\n });\n });\n });\n }\n\n function startDownload() {\n return pdcProxyService.getPackage(ctrl.requestParams).then(function (res) {\n var packageUrl = res.data.customizationUrl;\n $window.open(packageUrl, '_self');\n }).catch(function (rejection) {\n return errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.vsb').component('vsbLrcAlertBlock', {\n 'templateUrl': '/resources/template/html/modules/vsb/components/lrc-alert-block/templates/lrc-alert-block.template.html',\n 'controller': 'vsbLrcAlertBlockController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n vsbLrcAlertBlockController.$inject = [\"$http\", \"ENV\", \"errorService\"];\n angular.module('kappGlobal.vsb').controller('vsbLrcAlertBlockController', vsbLrcAlertBlockController);\n function vsbLrcAlertBlockController($http, ENV, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return $http.get('/content/' + ENV.locale + '/vsb-lrc-closed/vsb-lrc-alert-block.json', { 'cache': true }).then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.vsb').component('instructionSteps', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/vsb/components/instruction-steps/templates/instruction-steps.template.html',\n 'controller': 'instructionStepsController'\n });\n})();\n'use strict';\n\n(function () {\n instructionStepsController.$inject = [\"directiveData\"];\n angular.module('kappGlobal.vsb').controller('instructionStepsController', instructionStepsController);\n\n function instructionStepsController(directiveData) {\n var ctrl = this;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n directiveData.getByUrl(ctrl.resource || 'instruction-steps').then(function (res) {\n ctrl.data = res.data.fields;\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.vsb').component('vsbProductArticles', {\n 'bindings': {\n 'resource': '@'\n },\n 'controller': 'vsbProductArticlesController',\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'product-articles';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/vsb/components/product-articles/templates/' + template + '.template.html';\n }]\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n vsbProductArticlesController.$inject = [\"$element\", \"$timeout\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.vsb').controller('vsbProductArticlesController', vsbProductArticlesController);\n function vsbProductArticlesController($element, $timeout, directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'vsb-product-articles').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n $($element).find('.toggle-button').click(function (e) {\n var $this = $(this);\n e.preventDefault();\n $this.closest('.toggle-container').find('.toggle-content').slideToggle();\n $this.closest('.toggle-container').toggleClass('open');\n });\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.vsb').component('vsbWelcomeSection', {\n 'bindings': {\n 'type': '@',\n 'productInfo': '<',\n 'redesign': '@'\n },\n 'templateUrl': '/resources/template/html/modules/vsb/components/welcome-section/templates/welcome-section.template.html',\n 'controller': 'vsbWelcomeSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n vsbWelcomeSectionController.$inject = [\"$state\", \"$location\", \"directiveData\", \"productData\", \"errorService\", \"ngDialog\"];\n angular.module('kappGlobal.vsb').controller('vsbWelcomeSectionController', vsbWelcomeSectionController);\n\n function vsbWelcomeSectionController($state, $location, directiveData, productData, errorService, ngDialog) {\n var ctrl = this,\n $dialog = ngDialog;\n ctrl.data = {};\n ctrl.productShortName = '';\n ctrl.productInfo = '';\n ctrl.$onInit = activate;\n ctrl.videoPopup = videoPopup;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n ctrl.curState = $state.$current.name;\n ctrl.pageAbsUrl = $location.absUrl();\n return directiveData.getByUrl('welcome-section').then(function (response) {\n ctrl.lrcTitle = response.data.fields.lrcTitle;\n ctrl.productShortName = response.data.fields.productShortName;\n productData.getvsb(ctrl.productShortName).then(function (response) {\n ctrl.productInfo = response.data.fields;\n }, handleRejection);\n }, handleRejection);\n }\n\n function videoPopup(url) {\n var embedSrc = url,\n sources = {\n 'youtube': {\n 'site': 'youtube.com',\n 'id': 'v=',\n 'src': '//www.youtube.com/embed/%id%?autoplay=1&rel=0'\n },\n 'gmaps': {\n 'site': '//maps.google.',\n 'src': '%id%&output=embed'\n }\n };\n\n _.forEach(sources, function (item) {\n if (embedSrc.indexOf(item.site) > -1) {\n if (item.id) {\n if (angular.isString(item.id)) {\n embedSrc = embedSrc.substr(embedSrc.lastIndexOf(item.id) + item.id.length, embedSrc.length);\n }\n }\n embedSrc = item.src.replace('%id%', embedSrc);\n\n return false;\n }\n });\n\n return $dialog.open({\n 'template': '
    ',\n 'className': 'ngdialog-iframe ngdialog-flyout',\n 'showClose': true,\n 'plain': true,\n 'name': 'video-popup'\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.partners').component('partnersAwardsBlock', {\n 'templateUrl': '/resources/template/html/modules/partners/components/awards-block/templates/awards-block.template.html',\n 'controller': 'partnersAwardsBlockController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n partnersAwardsBlockController.$inject = [\"$http\", \"ENV\", \"errorService\"];\n angular.module('kappGlobal.partners').controller('partnersAwardsBlockController', partnersAwardsBlockController);\n\n function partnersAwardsBlockController($http, ENV, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return $http.get('/content/' + ENV.locale + '/partners/partners-award-block.json', { 'cache': true }).then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.partners').component('partnersCaseStudies', {\n 'templateUrl': '/resources/template/html/modules/partners/components/case-studies-section/templates/case-studies-section.template.html',\n 'controller': 'partnersCaseStudiesController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n partnersCaseStudiesController.$inject = [\"directiveData\", \"$http\", \"errorService\"];\n angular.module('kappGlobal.partners').controller('partnersCaseStudiesController', partnersCaseStudiesController);\n\n function partnersCaseStudiesController(directiveData, $http, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.caseStudies = [];\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl('msp-case-studies').then(function (response) {\n ctrl.data = response.data.fields;\n if (ctrl.data && ctrl.data.caseStudies) {\n ctrl.caseStudies.length = ctrl.data.caseStudies.length;\n ctrl.data.caseStudies.forEach(function (caseStudy, index) {\n return $http.get(caseStudy, { 'cache': true }).then(function (response) {\n ctrl.caseStudies[index] = response.data.fields;\n }, handleRejection);\n });\n }\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.partners').component('partnersForm', {\n 'bindings': {\n 'resource': '@',\n 'formName': '@',\n 'email': '@'\n },\n 'templateUrl': '/resources/template/html/modules/partners/components/form/templates/form.template.html',\n 'controller': 'partnersFormController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n partnersFormController.$inject = [\"partnersFormService\", \"directiveData\", \"$scope\", \"marketoHelperService\", \"errorService\", \"$element\"];\n angular.module('kappGlobal.partners').controller('partnersFormController', partnersFormController);\n\n function partnersFormController(partnersFormService, directiveData, $scope, marketoHelperService, errorService, $element) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.form = {\n 'form': ctrl.formName || 'vas',\n 'email': ctrl.email || 'kss_sales@kaspersky.com',\n 'termsAndConditions': false\n };\n ctrl.thankYouState = ctrl.thankYouState || 'partners-contact-thank-you';\n ctrl.submitted = false;\n ctrl.submitForm = submitForm;\n ctrl.changeTerms = changeTerms;\n ctrl.$onInit = activate;\n\n function activate() {\n return directiveData.getByUrl(ctrl.resource || 'how-to-buy-form').then(function (response) {\n ctrl.data = response.data.fields;\n if (ctrl.data.marketoCheck && ctrl.data.marketoCheck[0] === 'Yes') {\n runMarketo(ctrl.data.marketoId, ctrl.data.marketoNr);\n } else {\n runPartner();\n }\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function runMarketo(mId, mNr) {\n marketoHelperService.loadMarketo(mId, mNr, $scope, $element);\n }\n\n function runPartner() {\n setupLabel();\n function setupLabel() {\n if ($('.checkbox input').length) {\n $('.checkbox').each(function () {\n $(this).removeClass('selected');\n });\n $('.checkbox input:checked').each(function () {\n $(this).parent('.checkbox').addClass('selected');\n });\n }\n }\n\n $('body').on('click', '.checkbox label', function () {\n var $this = $(this),\n $parent = $this.parent();\n $parent.toggleClass('selected');\n });\n }\n\n function submitForm(form) {\n ctrl.submitted = true;\n if (form.$invalid) return;\n ctrl.submitted = false;\n ctrl.form.termsAndConditions = true;\n return partnersFormService.submitForm(ctrl.form).then(function () {\n return partnersFormService.goToThankYouPage(ctrl.thankYouState);\n });\n }\n\n function changeTerms() {\n ctrl.form.termsAndConditions = !ctrl.form.termsAndConditions;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n partnersFormService.$inject = [\"$http\", \"$state\", \"ENV\"];\n angular.module('kappGlobal.partners').factory('partnersFormService', partnersFormService);\n\n function partnersFormService($http, $state, ENV) {\n return {\n 'submitForm': submitForm,\n 'goToThankYouPage': goToThankYouPage\n };\n\n function submitForm(form, formName) {\n var formSubmissionValues = formatFormData(form, formName);\n return $http.post(ENV.server + '/_svc/FormService/', formSubmissionValues);\n }\n\n function goToThankYouPage(state) {\n return $state.go(state);\n }\n\n function formatFormData(obj) {\n var result = '';\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) continue;\n result += '&' + key + '=' + obj[key];\n }\n return result;\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.partners').component('partnersHomeFeaturedSection', {\n 'templateUrl': '/resources/template/html/modules/partners/components/home-featured-section/templates/home-featured-section.template.html',\n 'controller': 'partnersHomeFeaturedSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n partnersHomeFeaturedSectionController.$inject = [\"directiveData\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.partners').controller('partnersHomeFeaturedSectionController', partnersHomeFeaturedSectionController);\n\n function partnersHomeFeaturedSectionController(directiveData, $element, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('partners-home-featured-section').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n $element.hide();\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.partners').component('logoList', {\n 'bindings': {\n 'sections': '<'\n },\n 'templateUrl': '/resources/template/html/modules/partners/components/logos/templates/logo-list.template.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.partners').component('partnersLogos', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/partners/components/logos/templates/logos.template.html',\n 'controller': 'partnersLogosController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n partnersLogosController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.partners').controller('partnersLogosController', partnersLogosController);\n\n function partnersLogosController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'logo-grid').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.partners').component('partnersProgramsListSection', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/partners/components/programs-list-section/templates/programs-list-section.template.html',\n 'controller': 'partnersProgramsListSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n partnersProgramsListSectionController.$inject = [\"directiveData\", \"$http\", \"errorService\"];\n angular.module('kappGlobal.partners').controller('partnersProgramsListSectionController', partnersProgramsListSectionController);\n\n function partnersProgramsListSectionController(directiveData, $http, errorService) {\n var ctrl = this;\n ctrl.programs = [];\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'programs-and-integrations').then(function (response) {\n ctrl.data = response.data.fields;\n if (ctrl.data && ctrl.data.programs) {\n ctrl.programs.length = ctrl.data.programs.length;\n ctrl.data.programs.forEach(function (program, index) {\n return $http.get(program, { 'cache': true }).then(function (response) {\n ctrl.programs[index] = response.data.fields;\n }, handleRejection);\n });\n }\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.partners').component('partnersPartnershipPremiumServices', {\n 'templateUrl': '/resources/template/html/modules/partners/components/partnership-premium-services/templates/partnership-premium-services.template.html',\n 'controller': 'partnersPartnershipPremiumServicesController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n partnersPartnershipPremiumServicesController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.partners').controller('partnersPartnershipPremiumServicesController', partnersPartnershipPremiumServicesController);\n\n function partnersPartnershipPremiumServicesController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('partners-premium-services-section').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.about').component('strategicPartnersCarousel', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/partners/components/strategic-partners-carousel/templates/strategic-partners-carousel.html',\n 'controller': 'strategicPartnersCarouselController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n strategicPartnersCarouselController.$inject = [\"directiveData\", \"appHelperService\", \"$timeout\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.partners').controller('strategicPartnersCarouselController', strategicPartnersCarouselController);\n\n function strategicPartnersCarouselController(directiveData, appHelperService, $timeout, $element, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('strategic-partners-carousel').then(function (response) {\n ctrl.data = response.data.fields;\n runScript();\n }, function (rejection) {\n $element.hide();\n errorService.warn(rejection);\n });\n }\n\n function runScript() {\n var slickConfig = {\n 'dots': true,\n 'infinite': true,\n 'slidesToShow': 4,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 769,\n 'settings': {\n 'slidesToShow': 1\n }\n }]\n };\n\n $timeout(function () {\n angular.element('.partners .slider').not('.slick-initialized').slick(slickConfig);\n }, 0);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.partners').component('partnersTestimonialCarousel', {\n 'templateUrl': '/resources/template/html/modules/partners/components/testimonials-carousel/templates/testimonials-carousel.template.html',\n 'controller': 'partnersTestimonialCarouselController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n partnersTestimonialCarouselController.$inject = [\"$timeout\", \"directiveData\", \"appHelperService\", \"errorService\"];\n angular.module('kappGlobal.partners').controller('partnersTestimonialCarouselController', partnersTestimonialCarouselController);\n\n function partnersTestimonialCarouselController($timeout, directiveData, appHelperService, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('testimonial-carousel').then(function (response) {\n ctrl.data = response.data.fields;\n $timeout(function () {\n var slickConfig = {\n 'dots': true,\n 'infinite': true,\n 'slidesToShow': 2,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'rtl': appHelperService.isPageDirectionRTL(),\n 'responsive': [{\n 'breakpoint': 769,\n 'settings': {\n 'slidesToShow': 1\n }\n }]\n };\n $('.testimonials-slider').slick(slickConfig);\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.lrcLong').component('longComparisonTable', {\n 'bindings': {\n 'bbSyncData': '<',\n 'handleBuyblockUpdated': '<',\n 'componentData': '<',\n 'verdictControllerData': '<',\n 'verdictServiceData': '<'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/lrc-long/long-comparison-table/templates/long-comparison-table.template.html',\n 'controller': 'longComparisonTableController'\n });\n})();\n'use strict';\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n(function () {\n 'use strict';\n\n longComparisonTableController.$inject = [\"$location\", \"$http\", \"$element\", \"$q\", \"$rootScope\", \"$scope\", \"angularLoad\", \"ENV\", \"customCurrencyFilter\", \"$log\", \"appHelperService\"];\n angular.module('kappGlobal.lrcLong').controller('longComparisonTableController', longComparisonTableController);\n\n function longComparisonTableController($location, $http, $element, $q, $rootScope, $scope, angularLoad, ENV, customCurrencyFilter, $log, appHelperService) {\n var ctrl = this;\n ctrl.currentProduct = 1;\n ctrl.locationPath = $location.path();\n ctrl.chart = 0;\n ctrl.cols = 0;\n ctrl.attr = 0;\n ctrl.data = {};\n ctrl.extendedRow = 0;\n ctrl.activeColumn = 1;\n ctrl.hideTable = false;\n ctrl.locale = ENV.locale;\n ctrl.columnLabels = columnLabels;\n ctrl.getBuyblockPriceList = getBuyblockPriceList;\n ctrl.toggleRowExtraInfo = toggleRowExtraInfo;\n ctrl.toggleHiddenTable = toggleHiddenTable;\n ctrl.generateProductCardText = generateProductCardText;\n ctrl.getPurchaseType = getPurchaseType;\n ctrl.getEStore = getEStore;\n ctrl.getSelectedTerm = getSelectedTerm;\n ctrl.getSelectedPack = getSelectedPack;\n ctrl.getLimitTo = getLimitTo;\n\n ctrl.$onInit = activate;\n ctrl.$onDestroy = destroy;\n\n var isRTL = appHelperService.isPageDirectionRTL();\n\n var slickConfig = {\n 'centerMode': true,\n 'infinite': false,\n 'slidesToShow': 1,\n 'slidesToScroll': 1,\n 'dots': true,\n 'rtl': isRTL,\n 'accessibility': false,\n 'draggable': false,\n 'nextArrow': '',\n 'prevArrow': '',\n 'variableWidth': true\n };\n\n function getVerdictProductBBSetting(productName, key) {\n var result = '';\n\n try {\n var data = ctrl.verdictControllerData;\n var buyblockSettings = data.buyblockSettings;\n var productList = data.productList.split(',');\n var productIndex = productList.indexOf(productName);\n\n result = buyblockSettings[productIndex][key];\n } catch (err) {\n $log.warn(err);\n }\n\n return result;\n }\n\n function getLimitTo(productName) {\n return getVerdictProductBBSetting(productName, 'limitTo');\n }\n\n function getSelectedTerm(productName) {\n return getVerdictProductBBSetting(productName, 'selectedTerm');\n }\n\n function getSelectedPack(productName) {\n return getVerdictProductBBSetting(productName, 'selectedPack');\n }\n\n function getPurchaseType(productName) {\n return getVerdictProductBBSetting(productName, 'purchaseType');\n }\n\n function getEStore(productName) {\n return getVerdictProductBBSetting(productName, 'eStore');\n }\n\n function activate() {\n tableSetup().finally(function () {\n loadWaypoints();\n });\n\n var ngRender = $rootScope.$on('ngRender', function () {\n startSlick();\n ngRender();\n });\n }\n\n function destroy() {\n stopSlick();\n }\n\n function tableSetup() {\n var promises = void 0;\n var getStartCol = function getStartCol(rowIndex) {\n for (var x = 1; x < ctrl.rowToCell[rowIndex].length; x++) {\n if (!ctrl.rowToCell[rowIndex][x].fill) {\n return x;\n }\n }\n };\n\n ctrl.rowToCell = [];\n ctrl.data = ctrl.componentData.fields;\n ctrl.products = ctrl.data.tableLastRow.slice() || [];\n ctrl.cols = ctrl.data.rows[0].cell.length !== 0 ? ctrl.data.rows[0].cell.length : ctrl.data.rows[0].rowTxt.length;\n ctrl.chart = ctrl.cols - 1;\n ctrl.attr = ctrl.chart * ctrl.cols;\n ctrl.default = ctrl.data.default || 2;\n ctrl.maxRows = parseInt(ctrl.data.maxRows) || 999;\n ctrl.showMore = ctrl.data.showMoreText || 'Show more features';\n ctrl.showLess = ctrl.data.showLessText || 'Show less features';\n ctrl.data.showTable = ctrl.data.showTable || 'Show table';\n ctrl.data.hideTable = ctrl.data.hideTable || 'Hide table';\n\n if (ctrl.products) {\n promises = ctrl.products.map(function (item, index) {\n if (item.productLink && item.productLink.match(/\\.json/)) {\n return $http.get(item.productLink, { 'cache': true }).then(function (response) {\n ctrl.products[index] = response.data.fields;\n });\n }\n });\n }\n\n ctrl.data.rows.forEach(function () {\n var cells = [];\n\n ctrl.data.rows[0].cell.forEach(function () {\n cells.push({});\n });\n\n ctrl.rowToCell.push(cells);\n });\n\n ctrl.data.rows.forEach(function (row, rowIndex) {\n if (rowIndex > 0) {\n if (row.isDivider[0] !== 'True') {\n row.cell.forEach(function (col, colIndex) {\n var rowspan = void 0;\n var colspan = void 0;\n var startCol = void 0;\n var cell = void 0;\n var x = void 0;\n var y = void 0;\n\n if (colIndex > 0) {\n rowspan = col.rowspan || 1;\n colspan = col.colspan || 1;\n startCol = getStartCol(rowIndex);\n\n for (x = 0; x < colspan; x++) {\n for (y = 0; y < rowspan; y++) {\n cell = ctrl.rowToCell[rowIndex + y][startCol + x];\n cell.fill = true;\n cell.row = rowIndex;\n cell.col = colIndex;\n }\n }\n }\n });\n }\n }\n });\n\n ctrl.getRowToCell = function (index) {\n var cell = ctrl.rowToCell[index] && ctrl.rowToCell[index][ctrl.currentProduct];\n\n return cell ? ctrl.data.rows[cell.row].cell[cell.col] : {};\n };\n\n return $q.all(promises);\n }\n\n /**\r\n * Used in the buyblocks output binding\r\n * priceList is set in buyblock, buyblockIndex is passed from html template\r\n * @param priceList { object } // Contains pricelist of a buyblock\r\n * @param buyblockColumnIndex { number } // Contains index of a column where the buyblock is placed\r\n */\n function getBuyblockPriceList(priceList, buyblockColumnIndex) {\n ctrl.products[buyblockColumnIndex].priceList = priceList;\n ctrl.products[buyblockColumnIndex].cheapestPrice = Math.min.apply(Math, _toConsumableArray(priceList.map(function (item) {\n return item.price;\n })));\n }\n\n function columnLabels(colNumber) {\n return ctrl.data.columnLabels && _.find(ctrl.data.columnLabels, function (item) {\n return item.number === colNumber;\n });\n }\n\n function toggleRowExtraInfo(rowIndex) {\n if (rowIndex === ctrl.extendedRow) {\n ctrl.extendedRow = 0;\n } else {\n ctrl.extendedRow = rowIndex;\n }\n }\n\n function startSlick() {\n var carouselElement = $element.find('.row-header.mobile .row-item');\n carouselElement.slick(slickConfig);\n carouselElement.on('afterChange', function (event, slick, currentSlide) {\n ctrl.activeColumn = currentSlide + 1;\n $scope.$digest();\n });\n }\n\n function stopSlick() {\n $element.find('.slick-initialized').slick('unslick');\n $element.find('.row-header.mobile .row-item').off();\n }\n\n function loadWaypoints() {\n angularLoad.loadScript('resources/template/js/jquery.waypoints.sticky.min.js').then(function () {\n /* eslint-disable */\n var stickyDesktopEl = $element.find('.sticky-row-header.desktop');\n var stickyMobileEl = $element.find('.sticky-row-header.mobile');\n var stickyDesktop = new Waypoint.Sticky({\n 'element': stickyDesktopEl,\n 'offset': -stickyDesktopEl.find('.row-item').height(),\n 'handler': function handler(direction) {\n if (direction === 'down') {\n stickyDesktopEl.find('.row-item').addClass('container');\n } else {\n stickyDesktopEl.find('.row-item').removeClass('container');\n }\n }\n });\n var stickyMobile = new Waypoint.Sticky({\n 'element': stickyMobileEl,\n 'offset': 0,\n 'handler': function handler(direction) {\n if (direction === 'down') {\n stickyMobileEl.find('.row-item').addClass('container');\n } else {\n stickyMobileEl.find('.row-item').removeClass('container');\n }\n $('.slick-slider').slick('refresh');\n }\n });\n\n var inViewListDesktop = new Waypoint.Inview({\n 'element': $('.long-comparison-chart .row-body')[0],\n 'enter': function enter(direction) {\n if (direction === 'up') {\n $('.sticky-row-header').show();\n $('.slick-slider').slick('refresh');\n }\n },\n 'exited': function exited(direction) {\n if (direction === 'down') {\n $('.sticky-row-header').hide();\n }\n }\n });\n\n $scope.$on('$destroy', function () {\n inViewListDesktop.destroy();\n stickyDesktop.destroy();\n stickyMobile.destroy();\n });\n });\n }\n\n function toggleHiddenTable() {\n ctrl.hideTable = !ctrl.hideTable;\n }\n\n function generateProductCardText(priceValue) {\n if (!priceValue) return '';\n var priceText = customCurrencyFilter(priceValue);\n var productCardText = ctrl.data.productCardPriceText || \"From ((price))\";\n return productCardText.replace('((price))', priceText);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.lrcLong').component('longFeaturesGrid', {\n 'bindings': {\n 'componentData': '<'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/lrc-long/long-features-grid/templates/long-features-grid.template.html',\n 'controller': 'longFeaturesGridController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.lrcLong').controller('longFeaturesGridController', longFeaturesGridController);\n\n function longFeaturesGridController() {\n var ctrl = this;\n\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.content = ctrl.componentData.fields;\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.lrcLong').component('lrcMasthead', {\n 'bindings': {\n 'resource': '@',\n 'verdictControllerData': '<',\n 'bbSyncData': '<',\n 'handleBuyblockUpdatedPass': '&',\n 'verdictServiceData': '<',\n 'mastHeadData': '<',\n 'daysRemainingValue': '<',\n 'daysExpiredValue': '<',\n 'product': '<',\n 'isDeadEnd': '<'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/lrc-long/lrc-masthead/templates/lrc-masthead.template.html',\n 'controller': 'lrcMastheadController',\n 'controllerAs': '$ctrl'\n });\n})();\n'use strict';\n\n(function () {\n lrcMastheadController.$inject = [\"localizationService\", \"ENV\", \"$anchorScroll\", \"buyblockService\"];\n angular.module('kappGlobal.lrcLong').controller('lrcMastheadController', lrcMastheadController);\n\n function lrcMastheadController(localizationService, ENV, $anchorScroll, buyblockService) {\n var ctrl = this;\n ctrl.locale = ENV.locale;\n ctrl.getBuyblockSavings = getBuyblockSavings;\n ctrl.handleBuyblockUpdated = handleBuyblockUpdated;\n\n var parseRUDays = localizationService.parseRUDays;\n\n ctrl.$onInit = activate;\n\n ctrl.scrollTo = function (id) {\n $anchorScroll(id);\n };\n\n function activate() {\n ctrl.content = ctrl.mastHeadData.fields;\n ctrl.daysHeader = ctrl.content.header.replace('((days_remaining))', ctrl.daysRemainingValue).replace('дней', parseRUDays(ctrl.daysRemainingValue)).replace('-', '‑');\n ctrl.daysDescription = ctrl.content.description;\n if (ctrl.daysExpiredValue) {\n ctrl.daysHeader = ctrl.content.expiredHeader.replace('((days_expired))', ctrl.daysExpiredValue).replace('дней', parseRUDays(ctrl.daysExpiredValue)).replace('-', '‑');\n ctrl.daysDescription = ctrl.content.expiredDescription;\n }\n ctrl.bgImage = 'url(/' + ctrl.content.backgroundImage + ')';\n }\n\n function getBuyblockSavings(selectedOption, product) {\n ctrl.formattedHeadlineSavings = selectedOption.price_striked && ctrl.verdictControllerData.headlineSavingsCalcType && ctrl.verdictControllerData.headlineSavingsCalcType !== 'none' ? buyblockService.getSavings('rate', selectedOption, product, {}, ctrl.verdictControllerData.headlineSavings, ctrl.verdictControllerData.headlineSavingsCalcType) : '';\n\n if (selectedOption.price_striked && ctrl.verdictControllerData.savingsBannerCalcType && ctrl.verdictControllerData.savingsBannerCalcType !== 'none') {\n ctrl.formattedPromoSavings = buyblockService.getSavings('rate', selectedOption, product, {}, ctrl.verdictControllerData.buyblockPromo, ctrl.verdictControllerData.savingsBannerCalcType);\n } else if (ctrl.verdictControllerData.savingsBannerCalcType === 'none') {\n ctrl.formattedPromoSavings = '';\n } else if (selectedOption.price_striked || !ctrl.verdictControllerData.savingsBannerCalcType) {\n ctrl.formattedPromoSavings = ctrl.verdictControllerData.buyblockPromo;\n } else if (!selectedOption.price_striked) {\n ctrl.formattedPromoSavings = '';\n }\n // Detect at least one discount and apply a class (in template) to fix height of the element in order to avoid page jumps\n if (!ctrl.displayPageSavings && ctrl.formattedHeadlineSavings) ctrl.displayPageSavings = true;\n }\n\n function handleBuyblockUpdated(section, product, values) {\n ctrl.handleBuyblockUpdatedPass({\n 'section': section,\n 'product': product,\n 'values': values\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.search').component('search', {\n 'bindings': {\n 'resource': '@',\n 'queryStringSearch': '<',\n 'queryStringSection': '<'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/search/components/templates/search.component.html',\n 'controller': 'searchController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n searchController.$inject = [\"$rootScope\", \"$stateParams\", \"$scope\", \"$window\", \"directiveData\", \"searchService\", \"$sanitize\", \"$log\", \"errorService\", \"tracking\"];\n angular.module('kappGlobal.search').controller('searchController', searchController);\n\n function searchController($rootScope, $stateParams, $scope, $window, directiveData, searchService, $sanitize, $log, errorService, tracking) {\n var ctrl = this;\n ctrl.searchModel = {\n 'query': '',\n 'searchTerm': '',\n 'orderBy': 'relevance',\n 'responseCount': 0,\n 'responsePages': 0,\n 'currentPage': 1,\n 'pageSize': 10,\n 'responseData': [],\n 'allPages': [],\n 'pageNumbers': []\n };\n\n ctrl.showNoresultDisplay = false;\n ctrl.search = search;\n ctrl.getPaginationNumbering = getPaginationNumbering;\n ctrl.changeOrderBy = changeOrderBy;\n ctrl.getPageDisplayTotal = getPageDisplayTotal;\n ctrl.getPageStartDisplay = getPageStartDisplay;\n ctrl.pageChangeHandler = pageChangeHandler;\n ctrl.$onInit = activate;\n ctrl.$onDestroy = handleDestruction;\n\n function decodeSearchQuery(searchQuery) {\n var doc = $window.document,\n element = doc.createElement('div');\n element.innerHTML = searchQuery;\n return element.textContent;\n }\n\n function activate() {\n getData();\n var searchQuery = $sanitize($stateParams.query);\n ctrl.searchModel.query = decodeSearchQuery(searchQuery);\n if (!searchQuery) return;\n search(searchQuery);\n ctrl.autocomplete();\n }\n // Sanitization of an input\n $scope.$watch('$ctrl.searchModel.query', function (newV) {\n ctrl.searchModel.query = decodeSearchQuery($sanitize(newV.replace(/<[^>]+>/gm, '')));\n });\n\n function getData() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.searchData = response.data.fields;\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n var autoOff = $rootScope.$on('autocompleteCall', function (ev, val) {\n ctrl.autocompleteQ = val;\n });\n\n ctrl.autocomplete = function () {\n searchService.autocompleteAPI(ctrl.searchModel.query).then(function (suggestions) {\n $rootScope.$emit('autocompleteCall', suggestions.data.terms);\n });\n };\n\n function handleDestruction() {\n autoOff();\n }\n\n function search(queryText, section, event) {\n if (event) event.preventDefault();\n if (!queryText) return false;\n var decodedQueryText = decodeSearchQuery(queryText);\n reset(decodedQueryText);\n return searchAndGetPages(decodedQueryText, section);\n }\n\n function searchAndGetPages(queryText) {\n var section = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n return searchService.search(queryText, section, ctrl.searchModel.orderBy).then(getSearchResponse, handleRejection);\n }\n\n function reset(queryText) {\n ctrl.searchModel.allPages = [];\n ctrl.searchModel.currentPage = 1;\n ctrl.searchModel.responseCount = 0;\n ctrl.searchModel.searchTerm = queryText;\n ctrl.searchModel.query = queryText;\n ctrl.autocompleteQhtml = undefined;\n ctrl.autocompleteQ = undefined;\n }\n\n function getSearchResponse(response) {\n ctrl.searchModel.responseData = searchService.mapSearchResult(response.data);\n ctrl.searchModel.responseCount = response.data['count'];\n ctrl.searchModel.responsePages = response.data['pages'];\n\n if (ctrl.searchModel.responseCount === 0) {\n ctrl.showNoresultDisplay = true;\n\n setRootScopeProperties(ctrl.searchModel.query, 0);\n } else {\n return searchService.getDataPage(ctrl.searchModel.responseData.searchId, ctrl.searchModel.currentPage).then(function (value) {\n ctrl.searchModel.allPages = value.data;\n setRootScopeProperties(ctrl.searchModel.query, ctrl.searchModel.responseCount);\n }, handleRejection);\n }\n }\n\n function getPaginationNumbering(index) {\n return ctrl.searchModel.pageSize * ctrl.searchModel.currentPage - (ctrl.searchModel.pageSize - index) + 1;\n }\n\n function changeOrderBy(orderBy) {\n if (orderBy !== ctrl.searchModel.orderBy) {\n ctrl.searchModel.orderBy = orderBy;\n searchAndGetPages(ctrl.searchModel.query);\n }\n }\n\n function getPageDisplayTotal() {\n var totalOnCurrentPageViewing = ctrl.searchModel.pageSize * ctrl.searchModel.currentPage;\n if (ctrl.searchModel.responseCount < totalOnCurrentPageViewing) return ctrl.searchModel.responseCount;\n return totalOnCurrentPageViewing;\n }\n\n function getPageStartDisplay() {\n var totalOnCurrentPageViewing = ctrl.searchModel.pageSize * ctrl.searchModel.currentPage;\n return totalOnCurrentPageViewing - ctrl.searchModel.pageSize + 1;\n }\n\n function pageChangeHandler(number) {\n ctrl.searchModel.currentPage = number;\n return searchAndGetPages(ctrl.searchModel.query);\n }\n\n function setRootScopeProperties(searchQuery, searchCount) {\n $rootScope.search.query = searchQuery;\n $rootScope.search.count = searchCount;\n $rootScope.kaspersky.searchTotalResults = searchCount;\n $rootScope.kaspersky.searchQuery = searchQuery;\n $log.log($rootScope.kaspersky);\n tracking.trackPageView($rootScope.kaspersky.pageName); // search tracking requirement\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.premiumServices').component('b2cBottomSection', {\n 'templateUrl': '/resources/template/html/modules/b2c/components/premium-services/premium-service-banner/templates/premium-service-banner.html',\n 'controller': 'premiumServicesBannerController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n premiumServicesBannerController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.premiumServices').controller('premiumServicesBannerController', premiumServicesBannerController);\n\n function premiumServicesBannerController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('b2c-premium-services-live-chat').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.premiumServices').component('b2cPremiumServiceDescription', {\n 'bindings': {\n 'productInfo': '<'\n },\n 'templateUrl': '/resources/template/html/modules/b2c/components/premium-services/premium-service-description/templates/premium-service-description.template.html',\n 'controller': 'premiumServiceDescriptionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n premiumServiceDescriptionController.$inject = [\"priceData\", \"$rootScope\", \"$timeout\", \"$scope\", \"errorService\"];\n angular.module('kappGlobal.premiumServices').controller('premiumServiceDescriptionController', premiumServiceDescriptionController);\n\n function premiumServiceDescriptionController(priceData, $rootScope, $timeout, $scope, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.syncPriceList = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n $timeout(function () {\n getPriceList();\n });\n }\n\n function getPriceList() {\n return priceData.getPrice(ctrl.productInfo.title).then(function (response) {\n ctrl.syncPriceList.priceList = response.data[0];\n if (ctrl.syncPriceList.priceList) getBuyUrl();\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getBuyUrl() {\n ctrl.syncPriceList.priceId = ctrl.syncPriceList.priceList.id;\n return priceData.getCartLink(ctrl.syncPriceList.priceList.product_id, ctrl.syncPriceList.priceId, 'Purchase', '', '', ctrl.syncPriceList.buyLink).then(function (response) {\n ctrl.syncPriceList.buyLink = response.data;\n }, handleRejection);\n }\n\n function handleCurrencyChange() {\n ctrl.currency = $rootScope.currency || '';\n getPriceList();\n }\n\n // Prices update when currency selector is switched\n var currencyChange = $rootScope.$on('currencyChange', handleCurrencyChange);\n\n function handleScopeDestroyed() {\n currencyChange();\n }\n\n $scope.$on('$destroy', handleScopeDestroyed);\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.premiumServices').component('b2cPremiumServicesFaq', {\n 'templateUrl': '/resources/template/html/modules/b2c/components/premium-services/premium-services-faq/templates/premium-services-faq.template.html',\n 'controller': 'premiumServicesFaqController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n premiumServicesFaqController.$inject = [\"directiveData\", \"$timeout\", \"errorService\"];\n angular.module('kappGlobal.premiumServices').controller('premiumServicesFaqController', premiumServicesFaqController);\n\n function premiumServicesFaqController(directiveData, $timeout, errorService) {\n var ctrl = this;\n ctrl.faqs = {};\n ctrl.premiumServices = {};\n ctrl.sideBarTitle = '';\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n getfaqs();\n getServices();\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getfaqs() {\n //side-bar-product-list\n return directiveData.getByUrl('faqs-accordion-list').then(function (response) {\n ctrl.faqs = response.data.fields;\n $timeout(function () {\n $('.accordion-section > li > h4, .ent-accordion .accordion-section .accordion-title').click(function () {\n $(this).parent().toggleClass('open');\n $(this).siblings().slideToggle();\n });\n });\n }, handleRejection);\n }\n function getServices() {\n return directiveData.getByUrl('side-bar-product-list').then(function (response) {\n //return directiveData.get(`/home-security/premium-service-faq/faqs-side-bar-services.json`).then((response) => {\n ctrl.sideBarTitle = response.data.fields.title;\n if (response.data.fields.products) {\n ctrl.premiumServices.length = response.data.fields.products.length;\n response.data.fields.products.forEach(function (premiumService, index) {\n return directiveData.get(premiumService).then(function (response) {\n ctrl.premiumServices[index] = response.data.fields;\n }, handleRejection);\n });\n }\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n premiumServicesSectionController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.premiumServices').controller('premiumServicesFeatureSectionController', premiumServicesSectionController);\n\n function premiumServicesSectionController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.premiumServices = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('premium-services-features').then(function (response) {\n ctrl.data = response.data.fields;\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.premiumServices').component('premiumServicesFeatureSection', {\n 'templateUrl': 'resources/template/html/modules/b2c/components/premium-services/premium-services-features-section/templates/premium-services-features-section.html',\n 'controller': 'premiumServicesFeatureSectionController'\n });\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.premiumServices').component('b2cPageHeader', {\n 'bindings': {\n 'productInfo': '<',\n 'template': '@'\n },\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'header.template';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/b2c/components/premium-services/premium-services-header/templates/premium-services-' + template + '.html';\n }],\n 'controller': 'premiumServicesHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n premiumServicesHeaderController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.premiumServices').controller('premiumServicesHeaderController', premiumServicesHeaderController);\n\n function premiumServicesHeaderController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('page-header').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.premiumServices').component('premiumServicesOfferSection', {\n 'templateUrl': 'resources/template/html/modules/b2c/components/premium-services/premium-services-offer-section/templates/premium-services-offer-section.html',\n 'controller': 'premiumServicesOfferSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n premiumServicesOfferSectionController.$inject = [\"directiveData\", \"errorService\", \"priceData\", \"windowHelperService\", \"tracking\", \"buyBlockHelperService\"];\n angular.module('kappGlobal.premiumServices').controller('premiumServicesOfferSectionController', premiumServicesOfferSectionController);\n\n function premiumServicesOfferSectionController(directiveData, errorService, priceData, windowHelperService, tracking, buyBlockHelperService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.premiumServices = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('premium-service-offer-section').then(function (response) {\n ctrl.data = response.data.fields;\n preparePriceRequest();\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function preparePriceRequest() {\n return priceData.getPrice(ctrl.data.premiumSectionTitle).then(function (response) {\n ctrl.priceList = response.data[0];\n if (ctrl.priceList) getBuyUrl(ctrl.priceList);\n }, handleRejection);\n }\n\n function getBuyUrl(priceList) {\n ctrl.priceId = priceList.id;\n return priceData.getCartLink(priceList.product_id, ctrl.priceId, 'Purchase', '', '', ctrl.buyLink).then(function (response) {\n ctrl.buyLink = response.data;\n }, handleRejection);\n }\n\n ctrl.sendToBuyUrl = function ($event, buyUrl) {\n if ($event) $event.preventDefault();\n\n windowHelperService.goToUrl(tracking.formatQueryString(buyUrl, buyBlockHelperService.hasPurchaseAsPurchaseType(ctrl.purchaseType)));\n };\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.premiumServices').component('b2cPremiumServicesSection', {\n 'templateUrl': '/resources/template/html/modules/b2c/components/premium-services/premium-services-section/templates/premium-services-section.html',\n 'controller': 'premiumServicesSectionController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n premiumServicesSectionController.$inject = [\"$document\", \"directiveData\", \"priceData\", \"$rootScope\", \"angularLoad\", \"$scope\", \"tracking\", \"windowHelperService\", \"buyBlockHelperService\", \"errorService\"];\n angular.module('kappGlobal.premiumServices').controller('premiumServicesSectionController', premiumServicesSectionController);\n\n function premiumServicesSectionController($document, directiveData, priceData, $rootScope, angularLoad, $scope, tracking, windowHelperService, buyBlockHelperService, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.premiumServices = {};\n ctrl.loadInstantChat = loadInstantChat;\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function loadInstantChat() {\n angularLoad.loadScript('//secure.logmeinrescue.com/InstantChat/InstantChat.aspx').then(function () {\n $document[0].getElementById('ICContainer').style.display = '';\n\n var ICLoader = new RescueInstantChatLoader();\n ICLoader.ICContainer = 'ICContainer';\n ICLoader.HostedCSS = 'https://secure.logmeinrescue.com/InstantChat/Standard/InstantChat.css';\n ICLoader.HostedLanguagesForChatOnlyMode = 'https://secure.logmeinrescue.com/InstantChat/LanguagesForChatOnlyMode.js';\n ICLoader.HostedLanguagesForAppletMode = 'https://secure.logmeinrescue.com/InstantChat/LanguagesForAppletMode.js';\n ICLoader.EntryID = '1969317522';\n ICLoader.Tracking0 = ''; /* optional */\n ICLoader.Language = ''; /* optional */\n ICLoader.PostMessageTargetOrigin = ''; /* optional (For implementation details, see the LogMeIn Rescue Customization and Integration Guide) */\n ICLoader.Start();\n }, handleRejection);\n }\n\n function getData() {\n return directiveData.getByUrl('premium-services-list').then(function (response) {\n ctrl.data = response.data.fields;\n if (ctrl.data && ctrl.data.products) {\n ctrl.premiumServices.length = ctrl.data.products.length;\n preparePriceRequest();\n }\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function preparePriceRequest() {\n ctrl.data.products.forEach(function (premiumService, index) {\n return directiveData.get(premiumService).then(function (response) {\n ctrl.premiumServices[index] = response.data.fields;\n getPriceList(ctrl.premiumServices[index]);\n }, handleRejection);\n });\n }\n\n function getPriceList(premiumService) {\n return priceData.getPrice(premiumService.title).then(function (response) {\n premiumService.priceList = response.data[0];\n if (premiumService.priceList) getBuyUrl(premiumService);\n }, handleRejection);\n }\n\n function getBuyUrl(premiumService) {\n premiumService.priceId = premiumService.priceList.id;\n return priceData.getCartLink(premiumService.priceList.product_id, premiumService.priceId, 'Purchase', '', '', premiumService.buyLink).then(function (response) {\n premiumService.buyLink = response.data;\n }, handleRejection);\n }\n\n function handleCurrencyChange() {\n ctrl.currency = $rootScope.currency || '';\n preparePriceRequest();\n }\n\n // Prices update when currency selector is switched\n var currencyChange = $rootScope.$on('currencyChange', handleCurrencyChange);\n\n function handleScopeDestroyed() {\n currencyChange();\n }\n\n $scope.$on('$destroy', handleScopeDestroyed);\n\n ctrl.sendToBuyUrl = function ($event, buyUrl) {\n if ($event) $event.preventDefault();\n\n windowHelperService.goToUrl(tracking.formatQueryString(buyUrl, buyBlockHelperService.hasPurchaseAsPurchaseType(ctrl.purchaseType)));\n };\n }\n})();\n'use strict';\n\n(function () {\n angular.module('kappGlobal.premiumServices').component('premiumServicesGrid', {\n 'templateUrl': 'resources/template/html/modules/b2c/components/premium-services/premium-services-grid/templates/premium-services-grid.html',\n 'controller': 'premiumServicesGridController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n premiumServicesGridController.$inject = [\"directiveData\", \"errorService\", \"priceData\", \"windowHelperService\", \"tracking\", \"buyBlockHelperService\"];\n angular.module('kappGlobal.premiumServices').controller('premiumServicesGridController', premiumServicesGridController);\n\n function premiumServicesGridController(directiveData, errorService, priceData, windowHelperService, tracking, buyBlockHelperService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.premiumServices = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl('premium-service-one-time').then(function (response) {\n ctrl.data = response.data.fields;\n preparePriceRequest();\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function preparePriceRequest() {\n ctrl.data.premiumServiceOneTimeBlocks.forEach(function (premiumService) {\n return priceData.getPrice(premiumService.premiumServiceTitle).then(function (response) {\n premiumService.priceList = response.data[0];\n if (premiumService.priceList) getBuyUrl(premiumService);\n }, handleRejection);\n });\n }\n\n function getBuyUrl(premiumService) {\n premiumService.priceId = premiumService.priceList.id;\n return priceData.getCartLink(premiumService.priceList.product_id, premiumService.priceId, 'Purchase', '', '', premiumService.buyLink).then(function (response) {\n premiumService.buyLink = response.data;\n }, handleRejection);\n }\n\n ctrl.sendToBuyUrl = function ($event, buyUrl) {\n if ($event) $event.preventDefault();\n\n windowHelperService.goToUrl(tracking.formatQueryString(buyUrl, buyBlockHelperService.hasPurchaseAsPurchaseType(ctrl.purchaseType)));\n };\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('certificatesDetails', {\n 'bindings': {\n 'certInfo': '<'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/certificates/templates/certificates-details.template.html'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('newsDetails', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/news/templates/news-details.html',\n 'controller': 'sharedPressDetailsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('news', {\n 'bindings': {\n 'subcategory': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/news/templates/news.html',\n 'controller': 'sharedPressController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressArticlesBottombar', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-articles/templates/press-articles-bottombar.html',\n 'bindings': {\n 'usePressDetailTemplate': '<',\n 'relatedArticleCategory': '@'\n },\n 'controller': 'pressArticlesBottombarController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n pressArticlesBottombarController.$inject = [\"$state\", \"contentRepoService\", \"directiveData\", \"errorService\", \"ENV\"];\n angular.module('kappGlobal.contentRepo').controller('pressArticlesBottombarController', pressArticlesBottombarController);\n\n function pressArticlesBottombarController($state, contentRepoService, directiveData, errorService, ENV) {\n var ctrl = this;\n ctrl.resources = [];\n ctrl.getUserFriendlyUrl = getUserFriendlyUrl;\n ctrl.$onInit = activate;\n ctrl.$onChanges = handleChanges;\n\n ctrl.isJPPressReleasesDetailsPage = $state.current.name === 'press-releases.details' && ENV.locale === 'ja-jp';\n\n function activate() {\n ctrl.usePressDetailTemplate = false;\n getTranslations();\n }\n\n function handleChanges(changesObj) {\n if (changesObj['relatedArticleCategory'].currentValue !== changesObj['relatedArticleCategory'].previousValue) {\n getResourceListData();\n }\n }\n\n function getResourceListData() {\n return contentRepoService.search(1, 5, 'pr', '', '', ctrl.relatedArticleCategory).then(function (response) {\n response['data']['docs'].map(function (doc) {\n getLinkMediaByPath(doc['Url']);\n });\n }, handleRejection);\n }\n\n function getTranslations() {\n directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getLinkMediaByPath(link) {\n return contentRepoService.getLinkMediaByPath(link).then(function (response) {\n ctrl.resources.unshift(contentRepoService.populateLinkFields(response.data, link));\n }, handleRejection);\n }\n\n function getUserFriendlyUrl(item) {\n return contentRepoService.getUserFriendlyUrl(item.url);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressCenterDetails', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-center/templates/press-center-details.html',\n 'controller': 'sharedPressDetailsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressCenter', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-center/templates/press-center.html',\n 'controller': 'sharedPressController',\n 'bindings': {\n 'filterSelectorDefault': '@',\n 'pageSize': '@',\n 'subcategory': '@'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressCenterAdvanced', {\n 'bindings': {\n 'template': '@',\n 'resource': '@'\n },\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'horizontal-list';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/_shared/components/content-repository/components/press-center-advanced/templates/press-center-' + template + '.html';\n }],\n 'controller': 'pressCenterAdvancedController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n pressCenterAdvancedController.$inject = [\"directiveData\", \"contentRepoService\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('pressCenterAdvancedController', pressCenterAdvancedController);\n function pressCenterAdvancedController(directiveData, contentRepoService, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n getTranslations();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'press-center-advanced').then(function (response) {\n ctrl.data = response.data.fields;\n if (ctrl.template === 'horizontal-list') getRepoData();\n }, handleRejection);\n }\n\n function getRepoData() {\n return contentRepoService.search(1, 3, ctrl.repoType || 'smb', '', ctrl.repoCategory || '01::customers').then(handleRepoData, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function handleRepoData(response) {\n if (response && response.data) ctrl.articleUrls = response.data.docs;\n if (ctrl.articleUrls.length) {\n ctrl.articles = [];\n _.forEach(ctrl.articleUrls, function (article) {\n contentRepoService.getLinkMediaByPath(article.Url).then(function (response) {\n ctrl.articles.unshift(response.data);\n }, handleRejection);\n });\n }\n }\n\n function getTranslations() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n }, handleRejection);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressCenterFooter', {\n 'bindings': {\n 'resource': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-center-footer/templates/press-center-footer.html',\n 'controller': 'pressCenterFooterController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n pressCenterFooterController.$inject = [\"directiveData\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('pressCenterFooterController', pressCenterFooterController);\n function pressCenterFooterController(directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n\n function activate() {\n getData();\n }\n\n function getData() {\n return directiveData.getByUrl(ctrl.resource || 'press-center-footer').then(function (response) {\n ctrl.data = response.data.fields;\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressCenterNav', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-center-nav/templates/press-center-nav.html',\n 'controller': 'pressCenterNavController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n pressCenterNavController.$inject = [\"$window\", \"$scope\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('pressCenterNavController', pressCenterNavController);\n function pressCenterNavController($window, $scope, directiveData, errorService) {\n var ctrl = this;\n ctrl.data = {};\n ctrl.$onInit = activate;\n ctrl.$onDestroy = destroyGlobalListeners;\n\n function activate() {\n getData();\n }\n\n function destroyGlobalListeners() {\n angular.element(window).off('scroll.pressCenterNavController');\n }\n\n function getData() {\n return directiveData.getByUrl('press-center-nav').then(function (response) {\n ctrl.data = response.data.fields;\n runScripts();\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n\n function runScripts() {\n angular.element($window).on('scroll.pressCenterNavController', function () {\n if ($window.scrollY >= 447) {\n ctrl.stickyNav = true;\n angular.element('#page-header').css('margin-bottom', '73px');\n } else {\n ctrl.stickyNav = false;\n angular.element('#page-header').css('margin-bottom', '0px');\n }\n $scope.$apply();\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressCenterHeader', {\n 'bindings': {\n 'breadCrumbLink': '@',\n 'breadCrumbTitle': '@',\n 'contentName': '@',\n 'template': '@'\n },\n 'templateUrl': ['$element', '$attrs', function ($element, $attrs) {\n var template = 'header';\n\n if ($attrs.template) template = $attrs.template;\n\n return '/resources/template/html/modules/_shared/components/content-repository/components/press-headers/templates/press-center-' + template + '.html';\n }],\n 'controller': 'repoHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressDetailsHeader', {\n 'bindings': {\n 'summary': '@',\n 'title': '@',\n 'datePublicationStart': '@',\n 'breadCrumbLink': '@',\n 'breadCrumbTitle': '@',\n 'contentName': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-headers/templates/press-details-header.html',\n 'controller': 'repoHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressReleasesHeader', {\n 'bindings': {\n 'breadCrumbLink': '@',\n 'breadCrumbTitle': '@',\n 'contentName': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-headers/templates/press-center-header.html',\n 'controller': 'repoHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressReleasesDetails', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-releases/templates/press-releases-details.html',\n 'controller': 'sharedPressDetailsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressReleasesHp', {\n 'bindings': {\n 'subcategory': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-releases/templates/press-releases-hp.html',\n 'controller': 'sharedPressController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('pressReleases', {\n 'bindings': {\n 'subcategory': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/press-releases/templates/press-releases.html',\n 'controller': 'sharedPressController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('repoHeader', {\n 'bindings': {\n 'showFigure': '<',\n 'contentName': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/repo-header/templates/repo-header.html',\n 'controller': 'repoHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n repoHeaderController.$inject = [\"localStorageService\", \"contentRepoService\", \"$element\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('repoHeaderController', repoHeaderController);\n\n function repoHeaderController(localStorageService, contentRepoService, $element, errorService) {\n var ctrl = this;\n ctrl.contentName = ctrl.contentName || $element['context'].localName;\n var pressHeaderCacheName = ctrl.contentName + '-cache-name';\n ctrl.headerData = {};\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.headerData = getHeaderDataFromCache();\n if (ctrl.headerData === null) {\n getHeaderByName(ctrl.contentName);\n }\n }\n\n function getHeaderDataFromCache() {\n return localStorageService.get(pressHeaderCacheName);\n }\n\n function getHeaderByName(headerName) {\n return contentRepoService.getHeaderByName(headerName).then(function (response) {\n ctrl.headerData = contentRepoService.populateRepositoryHeaderFields(response.data);\n localStorageService.set(pressHeaderCacheName, ctrl.headerData);\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('resourcesCategoryDetailsHeader', {\n 'bindings': {\n 'pageDescription': '@',\n 'contentName': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/repo-header/templates/resources-category-details-header.html',\n 'controller': 'repoHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('smbRepoAllArticlesHeader', {\n 'bindings': {\n 'showFigure': '<',\n 'contentName': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/repo-header/templates/smb-repo-all-articles-header.html',\n 'controller': 'repoHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('smbRepoHeader', {\n 'bindings': {\n 'showFigure': '<',\n 'contentName': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/repo-header/templates/smb-repo-header.html',\n 'controller': 'repoHeaderController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('articlesBottomWidget', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/resources-articles/templates/articles-bottom-widget.html',\n 'controller': 'articlesBottomWidgetController',\n 'bindings': {\n 'repoType': '@'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n articlesBottomWidgetController.$inject = [\"$q\", \"contentRepoService\", \"directiveData\", \"translationsHelperService\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('articlesBottomWidgetController', articlesBottomWidgetController);\n\n function articlesBottomWidgetController($q, contentRepoService, directiveData, translationsHelperService, errorService) {\n var ctrl = this;\n ctrl.resources = [];\n ctrl.currentPage = 1;\n ctrl.pageSize = 6;\n ctrl.getUserFriendlyUrl = getUserFriendlyUrl;\n ctrl.getStrippedString = getStrippedString;\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.repoType = ctrl.repoType || 'smb';\n getResourceListData();\n getTranslations();\n }\n\n function getTranslations() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getResourceListData() {\n contentRepoService.getCategories().then(function (response) {\n var repoType = ctrl.repoType === 'vsb' ? 'smb' : ctrl.repoType,\n dataCategory = response['data'][repoType],\n categories = contentRepoService.getCategoriesFromObject(dataCategory).categoriesList;\n categories.map(function (val) {\n return contentRepoService.search(1, 5, repoType, '', val).then(getSearchResources, handleRejection);\n });\n }, handleRejection);\n }\n\n function getSearchResources(response) {\n var ajaxCalls = [],\n paths = [];\n\n response['data']['docs'].map(function (doc) {\n var url = doc['Url'];\n ajaxCalls.push(contentRepoService.getLinkMediaByPath(url));\n paths.push(url);\n });\n\n $q.all(ajaxCalls).then(function (response) {\n response.map(function (val, index) {\n ctrl.resources.unshift(contentRepoService.populateLinkFields(val.data, paths[index]));\n });\n }, handleRejection).finally(function () {\n _.forEach(ctrl.resources, function (obj) {\n translationsHelperService.getCategoryTranslation(obj.categoryName).then(function (response) {\n obj.translatedCategoryName = response;\n }, handleRejection);\n });\n });\n }\n\n function getUserFriendlyUrl(item) {\n return contentRepoService.getUserFriendlyUrl(item.url);\n }\n\n function getStrippedString(str, length) {\n return contentRepoService.getStrippedString(str, length);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('resourcesArticleSidebar', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/resources-articles/templates/articles-sidebar.html',\n 'controller': 'articleSidebarController',\n 'bindings': {\n 'category': '<',\n 'repoType': '<',\n 'showBanner': '<'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n articleSidebarController.$inject = [\"$q\", \"localStorageService\", \"contentRepoService\", \"directiveData\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('articleSidebarController', articleSidebarController);\n\n function articleSidebarController($q, localStorageService, contentRepoService, directiveData, errorService) {\n var ctrl = this,\n cached = localStorageService.get(ctrl.cacheName);\n ctrl.resources = [];\n ctrl.currentPage = 1;\n ctrl.pageSize = 5;\n ctrl.banner = null;\n ctrl.getUserFriendlyUrl = contentRepoService.getUserFriendlyUrl;\n ctrl.$onInit = activate;\n\n function loadBanner() {\n if (ctrl.showBanner) {\n directiveData.getByUrl('/repository/rc-side-banner.json').then(function (response) {\n ctrl.banner = response.data.fields;\n ctrl.b2cBanner = ctrl.banner.image;\n ctrl.b2bBanner = ctrl.banner.b2bImg;\n }, handleRejection);\n }\n }\n\n function activate() {\n ctrl.repoType = ctrl.repoType || 'smb';\n ctrl.cacheName = 'side-widget-' + ctrl.repoType + '-' + ctrl.category;\n\n if (cached !== null) {\n ctrl.resources = cached;\n } else {\n getResourceListData();\n }\n getTranslations();\n }\n\n function getResourceListData() {\n var repoType = ctrl.repoType === 'vsb' ? 'smb' : ctrl.repoType;\n return contentRepoService.search(1, 5, repoType, '', ctrl.category).then(getSearchResources, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getTranslations() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.translations = response.data.fields;\n }, handleRejection);\n }\n\n function getSearchResources(response) {\n var ajaxCalls = [],\n paths = [];\n\n response['data']['docs'].map(function (doc) {\n var url = doc['Url'];\n ajaxCalls.push(contentRepoService.getLinkMediaByPath(url));\n paths.push(url);\n });\n\n $q.all(ajaxCalls).then(function (response) {\n response.map(function (val, index) {\n ctrl.resources.unshift(contentRepoService.populateLinkFields(val.data, paths[index]));\n });\n }, handleRejection).finally(function () {\n if (ctrl.resources.length) {\n loadBanner();\n }\n\n localStorageService.set(ctrl.cacheName, ctrl.resources, 120);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('resourcesBlogs', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/resources-blogs/templates/resources-blogs.html',\n 'controller': 'resourcesBlogsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n resourcesBlogsController.$inject = [\"localStorageService\", \"contentRepoService\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('resourcesBlogsController', resourcesBlogsController);\n\n function resourcesBlogsController(localStorageService, contentRepoService, errorService) {\n var ctrl = this,\n blogsCacheName = 'blogsCache-name',\n blogsResourcesCacheName = 'blogsResourcesCache-name';\n ctrl.blogData = {};\n ctrl.resources = [];\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.blogData = getBlogDataFromCache();\n if (ctrl.blogData === null) {\n getBlogByName('resource-center-blog-section');\n } else {\n ctrl.resources = getBlogResourcesDataFromCache();\n if (ctrl.resources === null) {\n getBlogByName('resource-center-blog-section');\n }\n }\n }\n\n function getBlogDataFromCache() {\n return localStorageService.get(blogsCacheName);\n }\n\n function getBlogResourcesDataFromCache() {\n return localStorageService.get(blogsResourcesCacheName);\n }\n\n function getBlogByName(blogName) {\n return contentRepoService.getBlogByName(blogName).then(function (response) {\n ctrl.blogData = contentRepoService.populateBlogFields(response.data);\n if (ctrl.blogData !== null) {\n ctrl.blogData['resources'].map(function (resource) {\n ctrl.resources.push(contentRepoService.populateBlogResourceFields(resource));\n });\n }\n localStorageService.set(blogsCacheName, ctrl.blogData);\n localStorageService.set(blogsResourcesCacheName, ctrl.resources);\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('resourcesCategoryDetails', {\n 'bindings': {\n 'details': '<',\n 'repoType': '@'\n },\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/resources-category/templates/resources-category-details.html',\n 'controller': 'resourcesCategoryDetailsController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n resourcesCategoryDetailsController.$inject = [\"contentRepoService\", \"translationsHelperService\", \"seoHelperService\", \"windowHelperService\", \"errorService\", \"$window\"];\n angular.module('kappGlobal.contentRepo').controller('resourcesCategoryDetailsController', resourcesCategoryDetailsController);\n function resourcesCategoryDetailsController(contentRepoService, translationsHelperService, seoHelperService, windowHelperService, errorService, $window) {\n var ctrl = this;\n ctrl.details = {};\n ctrl.updatedBody = '';\n ctrl.titleSummary = '';\n ctrl.path = '';\n ctrl.isVideoList = false;\n ctrl.showOriginalImage = true;\n ctrl.$onInit = activate;\n ctrl.getRepoTranslation = translationsHelperService.getRepoTranslation;\n\n function activate() {\n ctrl.repoType = ctrl.repoType || 'smb';\n getDetails();\n getRepoTranslations();\n }\n\n function getRepoTranslations() {\n translationsHelperService.getRepoTranslations().then(function (response) {\n ctrl.repoTranslations = response;\n }).catch(handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getDetails() {\n var path = contentRepoService.getPathFromUrl();\n ctrl.path = contentRepoService.getUserFriendlyUrl(path).replace(/-/g, ' ');\n return contentRepoService.getLinkMediaByPath(path).then(function (response) {\n windowHelperService.setWindowTitle(response.data.fields.metaTitle || response.data.fields.title);\n ctrl.details = contentRepoService.populateLinkFields(response['data'], path);\n seoHelperService.setMeta({ 'description': response.data.fields.metaDesc });\n\n if (ctrl.details.head) {\n var head = angular.element($window.document.querySelector('head'));\n var detailsHead = angular.element(ctrl.details.head);\n\n head.append(detailsHead);\n }\n\n var detailsBody = angular.element(ctrl.details.body);\n angular.forEach(detailsBody, function (value, index) {\n if ((value.tagName === 'H1' || value.tagName === 'H2') && index === 0) {\n ctrl.titleSummary = value.innerHTML;\n } else {\n if (value.nodeType !== 3) {\n ctrl.updatedBody += value.outerHTML + '\\n';\n }\n }\n\n if (value.innerHTML && value.innerHTML.match(/ 0;\n });\n }, handleRejection);\n }\n\n function getCategories() {\n return contentRepoService.getCategories().then(function (response) {\n var repoType = ctrl.repoType === 'vsb' ? 'smb' : ctrl.repoType,\n category = response['data'][repoType];\n ctrl.categoriesList = contentRepoService.getCategoriesFromObject(category, ctrl.filterSelections);\n ctrl.categories = ctrl.categoriesList.categoriesWithSubCat[ctrl.category];\n }, handleRejection);\n }\n\n function getUserFriendlyUrl(item) {\n return contentRepoService.getUserFriendlyUrl(item.url);\n }\n\n function pageChangeHandler(number) {\n ctrl.currentPage = number;\n contentRepoService.setPaginationUrlValue(ctrl.currentPage);\n return getResourceListData();\n }\n\n function formatSelectorForUrl(value) {\n return value.replace(/\\s+/g, '-');\n }\n\n function formatSelectorForApp(value) {\n return value ? value.replace(/-/g, ' ') : '';\n }\n\n function setParams(pageNumber, selector, startDate) {\n contentRepoService.setPaginationUrlValue(pageNumber);\n contentRepoService.setSelectorUrlValue(formatSelectorForUrl(selector));\n contentRepoService.setDateUrlValue(formatSelectorForUrl(startDate));\n }\n\n function setAttribute() {\n $timeout(function () {\n var list = $($element).find('.articles-list li .icon-doc');\n list.each(function (i, elem) {\n if ($(elem).hasClass('icon-pdf')) {\n $(elem).attr('download', true);\n }\n });\n }, 5000);\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('resourcesItem', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/resources-gallery/templates/resources-gallery-item.html',\n 'controller': 'resourcesGalleryItemController',\n 'bindings': {\n 'categoryStrings': '@',\n 'repoType': '@'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n resourcesGalleryItemController.$inject = [\"contentRepoService\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('resourcesGalleryItemController', resourcesGalleryItemController);\n\n function resourcesGalleryItemController(contentRepoService, errorService) {\n var ctrl = this;\n ctrl.resources = [];\n ctrl.categoryStrings = ctrl.categoryStrings || 'customers';\n ctrl.filteredResources = [];\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.repoType = ctrl.repoType || 'smb';\n getResourceListData();\n }\n\n function getResourceListData() {\n var repoType = ctrl.repoType === 'vsb' ? 'smb' : ctrl.repoType;\n return contentRepoService.getResources(repoType).then(function (response) {\n if (response.data && response.data.fields && angular.isObject(response.data.fields.resourceCenterItems)) {\n var responseData = response.data.fields.resourceCenterItems;\n responseData.map(function (resourceCenterItem) {\n ctrl.resources.unshift(contentRepoService.populateResourcesFields(resourceCenterItem));\n });\n var localCategories = ctrl.categoryStrings.split(',').reverse();\n angular.forEach(ctrl.resources, function (outerValue) {\n angular.forEach(localCategories, function (innerValue) {\n var categoryName = innerValue;\n if (innerValue !== 'certificates') categoryName = contentRepoService.buildCategoryName(innerValue);\n if (outerValue.resourceCategory && outerValue.resourceCategory.title === categoryName) {\n ctrl.filteredResources.unshift({ 'category': innerValue, 'resource': outerValue });\n }\n });\n });\n }\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('resourcesGallery', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/resources-gallery/templates/resources-gallery.html',\n 'controller': 'resourcesGalleryController',\n 'bindings': {\n 'repoType': '@'\n }\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n resourcesGalleryController.$inject = [\"contentRepoService\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('resourcesGalleryController', resourcesGalleryController);\n\n function resourcesGalleryController(contentRepoService, errorService) {\n var ctrl = this;\n ctrl.categories = [];\n ctrl.categoryStrings = '';\n ctrl.$onInit = activate;\n\n function activate() {\n ctrl.repoType = ctrl.repoType || 'smb';\n getResourceListData();\n }\n\n function getResourceListData() {\n contentRepoService.getCategories().then(function (response) {\n var repoType = ctrl.repoType === 'vsb' ? 'smb' : ctrl.repoType,\n dataCategory = response['data'][repoType];\n ctrl.categories = contentRepoService.getCategoriesFromObject(dataCategory).categoriesList;\n ctrl.categories.map(function (value, index) {\n if (index === ctrl.categories.length - 1) {\n ctrl.categoryStrings += value;\n } else {\n ctrl.categoryStrings += value + ',';\n }\n });\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n sharedPressDetailsController.$inject = [\"contentRepoService\", \"windowHelperService\", \"seoHelperService\", \"errorService\", \"stripHtmlTagsFilter\"];\n angular.module('kappGlobal.contentRepo').controller('sharedPressDetailsController', sharedPressDetailsController);\n\n function sharedPressDetailsController(contentRepoService, windowHelperService, seoHelperService, errorService, stripHtmlTagsFilter) {\n var ctrl = this;\n ctrl.details = {};\n ctrl.getTrustAsHtml = getTrustAsHtml;\n ctrl.$onInit = activate;\n\n function activate() {\n getDetails();\n }\n\n function getTrustAsHtml() {\n return contentRepoService.getTrustAsHtml(ctrl.details.body);\n }\n\n function getDescriptionMetaValue(text) {\n if (text.length > 300) {\n text = text.substring(0, 300);\n return stripHtmlTagsFilter(text) + '...';\n } else return text;\n }\n\n function getDetails() {\n var path = contentRepoService.getPathFromUrl();\n return contentRepoService.getLinkMediaByPath(path).then(function (response) {\n ctrl.details = contentRepoService.populateLinkFields(response['data'], path);\n seoHelperService.setMeta({ 'description': response.data.fields.metaDesc || response.data.fields.summary || getDescriptionMetaValue(response.data.fields.body) });\n windowHelperService.setWindowTitle(response.data.fields.metaTitle || response.data.fields.title);\n }, function (rejection) {\n errorService.warn(rejection);\n });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n sharedPressController.$inject = [\"$q\", \"$state\", \"contentRepoService\", \"directiveData\", \"stringHelper\", \"errorService\", \"ENV\", \"geoLocationManager\"];\n angular.module('kappGlobal.contentRepo').controller('sharedPressController', sharedPressController);\n\n function sharedPressController($q, $state, contentRepoService, directiveData, stringHelper, errorService, ENV, geoLocationManager) {\n var ctrl = this,\n currentPage = void 0,\n currentSelection = void 0;\n ctrl.resources = [];\n ctrl.resourcess = {};\n ctrl.prData = {};\n ctrl.filterSelections = [];\n ctrl.subcategoriesToFetch = '';\n ctrl.resourcesTotalCount = 0;\n ctrl.currentPage = 1;\n ctrl.pageSize = ctrl.pageSize || 10;\n ctrl.selector = '';\n ctrl.changeFilter = changeFilter;\n ctrl.getUserFriendlyUrl = getUserFriendlyUrl;\n ctrl.getHrefFromState = getHrefFromState;\n ctrl.getSubCat = getSubCat;\n ctrl.pageChangeHandler = pageChangeHandler;\n ctrl.$onInit = activate;\n ctrl.locale = ENV.locale;\n\n var isJPHomepage = $state.current.name === 'homepage' && ctrl.locale === 'ja-jp';\n var isRu = ENV.locale === 'ru-ru';\n\n function activate() {\n ctrl.currentPage = contentRepoService.getPageNumberFromUrl();\n return getTranslation().then(function () {\n ctrl.selector = stringHelper.replaceDmToSpam(stringHelper.toTitleCase(contentRepoService.getSelectorFromUrl(), isRu));\n if (isJPHomepage) return getHomepageData();\n getFilterSelections();\n }).catch(handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getTranslation() {\n return directiveData.getLocal('general-translations').then(function (response) {\n ctrl.prData = response.data.fields;\n var filterSelectorDefault = ctrl.prData.prSortBy || 'Sort by',\n filterSelectorDate = ctrl.prData.prDate || 'Date';\n ctrl.filterDefaultSelections = ctrl.locale === 'ja-jp' ? [filterSelectorDefault, ''] : [filterSelectorDefault, filterSelectorDate];\n }).catch(handleRejection);\n }\n\n function getHomepageData() {\n return directiveData.getByUrl(ctrl.resource || 'press-releases').then(function (response) {\n ctrl.categories = response.data.fields.categories;\n getResourceListHp(ctrl.categories);\n }).catch(handleRejection);\n }\n\n function changeFilter(selection) {\n return getResourceList(1, selection);\n }\n\n function getResourceListHp(cats) {\n var rawSelect = ['fields.title'];\n\n cats.map(function (item) {\n ctrl.pageSize = item.numberItems;\n getResourceList(1, item.category, rawSelect).then(function (response) {\n item['prs'] = response;\n });\n });\n }\n\n function getResourceList(pageNumber, selection, rawSelect) {\n var targetSelection = checkDefaultSelector(selection);\n var targetPage = pageNumber;\n\n ctrl.currentPage = targetPage;\n\n if (targetSelection !== currentSelection || targetPage !== currentPage) {\n currentSelection = targetSelection || ctrl.subcategoriesToFetch;\n currentPage = targetPage;\n return getResourceListData('', '', currentSelection, rawSelect);\n }\n }\n\n function getResourceListData() {\n var contentType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var category = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var subCat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var rawSelect = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n\n if (!isJPHomepage) {\n contentRepoService.setPaginationUrlValue(ctrl.currentPage);\n contentRepoService.setSelectorUrlValue(formatSelectorForUrl(ctrl.selector));\n }\n\n return contentRepoService.search(ctrl.currentPage, ctrl.pageSize, 'pr', contentType, category, subCat, null, rawSelect).then(function (response) {\n var responseData = response['data'];\n ctrl.resourcesTotalCount = responseData['count'];\n\n return $q.all(responseData['docs'].map(function (doc) {\n var isContentFromApi = !!doc.RawContent;\n if (isContentFromApi) {\n var pubStart = doc.DatePublicationStart && new Date(Number(doc.DatePublicationStart.match(/\\d+/)[0]));\n angular.extend(doc.RawContent.fields, { 'date_publication_start': pubStart });\n return $q.resolve(contentRepoService.populateLinkFields(doc.RawContent, doc['Url']));\n }\n return getLinkMediaByPath(doc['Url']);\n }));\n }).then(function (resources) {\n ctrl.resources = _.without(resources, undefined);\n return ctrl.resources;\n }).catch(handleRejection);\n }\n\n function checkDefaultSelector(selection) {\n if (ctrl.filterDefaultSelections.indexOf(selection) !== -1) selection = '';\n return selection;\n }\n\n function pageChangeHandler(pageNumber) {\n getResourceList(pageNumber, ctrl.selector);\n }\n\n function getLinkMediaByPath(link) {\n return contentRepoService.getLinkMediaByPath(link).then(function (response) {\n return contentRepoService.populateLinkFields(response.data, link);\n }).catch(handleRejection);\n }\n\n function getUserFriendlyUrl(item) {\n return contentRepoService.getUserFriendlyUrl(item.url);\n }\n\n function getFilterSelections() {\n return contentRepoService.getCategories().then(function (response) {\n var pr = response['data']['pr'];\n ctrl.filterSelections = contentRepoService.getCategoriesFromObject(pr, ctrl.filterSelections, 'pr').categoriesList;\n ctrl.selector = ctrl.selector || ctrl.filterDefaultSelections[1] || ctrl.filterDefaultSelections[0];\n if (ctrl.filterDefaultSelections[1]) ctrl.filterSelections.unshift(ctrl.filterDefaultSelections[1]);\n if (isRu) applyRuKzCategoriesLogic(ctrl);\n }).catch(handleRejection).finally(function () {\n getResourceList(ctrl.currentPage, ctrl.selector);\n });\n }\n\n /**\n * The function applies filter for Kazakh news on Russian website. By the following logic\n * - if ip=kz then display \"Kazakh news\" in selector and preselect the value by default\n * - else remove \"Kazakh News\" category from the API request (by default empty value sent to API means \"all\n * categories\", which will be replaced with an array with excluded \"Kazakh News\" and remove it from category list\n * )\n * @param ctrl {object} sharedPressController instance\n */\n function applyRuKzCategoriesLogic(ctrl) {\n var excludedCategory = 'Новости Казахстана';\n if (geoLocationManager.getUserGeoIp() === 'kz') {\n ctrl.selector = excludedCategory;\n } else {\n ctrl.filterSelections = ctrl.filterSelections.filter(function (item) {\n return item !== excludedCategory;\n });\n ctrl.subcategoriesToFetch = ctrl.filterSelections.join(',');\n }\n }\n\n function formatSelectorForUrl(value) {\n if (!value) return '';\n value = value.replace(/-/g, '-_');\n return stringHelper.replaceSpamText(value.replace(/\\s+/g, '-'));\n }\n\n function getSubCat(value) {\n return contentRepoService.buildSubCategoryName(value);\n }\n\n function getHrefFromState(item) {\n return $state.href('press-releases.details', { 'path': getUserFriendlyUrl(item) });\n }\n }\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n angular.module('kappGlobal.contentRepo').component('videoSideBar', {\n 'templateUrl': '/resources/template/html/modules/_shared/components/content-repository/components/resources-videos/templates/resources-video-sidebar.html',\n 'controller': 'resourcesVideoSideBarController'\n });\n})();\n'use strict';\n\n(function () {\n 'use strict';\n\n resourcesVideoSideBarController.$inject = [\"contentRepoService\", \"errorService\"];\n angular.module('kappGlobal.contentRepo').controller('resourcesVideoSideBarController', resourcesVideoSideBarController);\n\n function resourcesVideoSideBarController(contentRepoService, errorService) {\n var ctrl = this;\n ctrl.videos = [];\n ctrl.$onInit = activate;\n ctrl.getUserFriendlyUrl = getUserFriendlyUrl;\n\n function activate() {\n getMoreVideos();\n }\n\n function getMoreVideos() {\n return contentRepoService.search(1, 1000, 'smb', 'Repository Video').then(function (response) {\n response['data']['docs'].map(function (doc) {\n getLinkMediaByPath(doc['Url']);\n });\n }, handleRejection);\n }\n\n function getLinkMediaByPath(link) {\n return contentRepoService.getLinkMediaByPath(link).then(function (response) {\n ctrl.videos.unshift(contentRepoService.populateLinkFields(response.data, link));\n }, handleRejection);\n }\n\n function handleRejection(rejection) {\n errorService.warn(rejection);\n }\n\n function getUserFriendlyUrl(item) {\n return contentRepoService.getUserFriendlyUrl(item.url);\n }\n }\n})();"],"names":["ajaxSpinner","$http","restrict","templateUrl","link","scope","isLoading","pendingRequests","length","$watch","v","$","show","hide","_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","_toConsumableArray","arr","Array","isArray","i","arr2","from","angular","module","rootScopeSetup","$rootScope","$window","$location","sessionStorageService","currencyManager","appHelperService","PARTNERS","ENV","windowHelperService","VER","BRANCH","localizationService","hostUrl","populateCurrency","currencyItem","cachedCurrency","get","getCacheNames","currencyLocaleCache","getDefaultCurrencyFromConfig","getLocale","setCurrencyLocale","setCurrentCurrency","isUndefined","currencyLocale","locale","currency","stateChangeInProgress","currenciesCache","getHostName","dir","getPageDirection","products","search","query","count","currentBreadcrumbs","kaspersky","trackPageViewOnLoad","platformName","siteType","siteLocale","pageCharset","pageName","eCommProvider","verdictSite","verdictRegion","verdictChannel","verdictPartner","verdictProduct","verdictDevices","verdictTerm","verdictLicenseStatus","serialNumber","verdictPartNumber","verdictLicenseType","searchQuery","searchTotalResults","isStaging","version","rev","branch","name","date","sha","api","apiServer","hmcTool","prevPageName","buyBlockReady","$broadcast","performance","mark","isFavDownloadPage","path","isResourceCenterPage","some","condition","directStateVisit","langLinkTags","href","hreflang","$inject","run","siteSetup","$state","$stateParams","cookieService","seoHelperService","$log","tracking","directiveData","$templateCache","maxymiser","$rootElement","softRedirectService","contentLocation","hrefLangTagAdded","dataLayer","off","searchParam","set","element","document","find","addClass","initialize","templates","item","put","decodeURIComponent","setupMeta","description","title","keywords","internalSearch","current","customFlag","setWindowTitle","data","parseBreadcrumbs","breadcrumbs","indexOf","resourceTitle","_","startCase","getPathName","split","pop","replace","productName","toLowerCase","setMeta","removeMeta","$emit","pageDataReady","searchAreaContent","includes","metaObj","DocId","getLocationPath","DocType","PublishDate","Date","toISOString","slice","PubLang","match","PubCountry","Breadcrumb","reduce","prev","curr","index","SearchAreaNavigator","internalsearch","handleMetaSuccess","response","res","fields","linkedComponents","stateData","getDefaultBreadcrumbs","handleMetaError","setTrackingCookie","setAdobeCampaignValues","setAdmitadRefererParams","$on","event","newUrl","oldUrl","ev","to","toParams","pageSettings","go","location","preventDefault","checkPageSetting","url","parent","navigateUserTo","handleProxiesJP","scrollTo","getContentLocation","undefined","regKey","verdictLicenseProduct","providerToken","buyblocksOnPage","buyblockListener","detectBuyBlockPresence","referrerValue","referrer","sessionReferrer","remove","params","canonical","getDomainName","then","catch","forEach","tag","hrefLangTag","createElement","rel","head","appendChild","viewContentListener","getTestability","whenStable","totalLoadTimeVal","RProfiler","timingObj","isLRC","frontendNGReadyTimeVal","getEntriesByName","startTime","firstPaintTimeVal","firstPaintTime","timing","loadEventEnd","fetchStart","addInfo","fireMMEvent","assertStateByName","copy","trackPageView","push","page","removeHrefLangTags","tags","querySelectorAll","parentNode","removeChild","log","config","$urlMatcherFactoryProvider","$locationProvider","$urlRouterProvider","$stateProvider","caseInsensitive","strictMode","html5Mode","enabled","requireBase","hashPrefix","otherwise","$injector","error404","error500","decorator","state","views","isDefined","","view","resolveAs","handleStickyHeaderOnScroll","scroll","scrollTop","$body","siteHeaderAvail","totalHeight","attr","stickyClass","outerHeight","hasClass","activeElement","blur","removeClass","abstract","template","css","controller","$scope","on","wrap","navPath","_this","this","getByUrl","careerName","career","controllerAs","_this2","personName","person","templateProvider","templateVersion","$templateFactory","errorService","getVer","fromUrl","rejection","warn","isTransparencyPage","reloadOnSearch","imageManagerService","activateRandomImagesCache","when","jsonName","inherit","setCanonicalLink","getCanonicalUrl","osRecognitionController","osDetectService","osDetected","getCurrentOs","hash","device","type","showMobile","opts","productData","ctrl","getb2c","product","bundle","_this3","geoLocationManager","_this4","curUrl","absolute","geoIP","getUserGeoIp","isVpnProhibitedCountry","_this5","twitter:card","twitter:creator","twitter:title","twitter:description","twitter:image","$anchorScroll","_this6","_this7","_this8","_this9","offerName","offerData","routeComponentsController","stateUrl","entPath","resourceName","currentData","dl2Connector","loadDl2WC","appHelperServiceProvider","$get","handleStickyHeaderOnViewportChange","$elementWindow","$siteHeader","siteHeaderElement","toggleClass","isVisibleDOMElement","lrcSerialRouteController","serialStateHandler","$match","serialValue","serial","Serial","SERIAL","updateQueryStringParameters","fromSerial","result","lostDaysDisclaimerFullText","serialNotValid","serialData","lrcService","$timeout","translations","queryArr","queryObj","param","Key","Value","loc","getLocal","finally","searchLicense","license","verdictSerial","kpc","edu","trackingId","daysLeftDiff","lostDaysString","verdictString","verdict","days_left","lostDaysDisclaimer","partner","provider_url","expDateTime","getTime","renewalDate","toLocaleDateString","today","Math","floor","verdictData","kfaDisclaimer","spage","sendSerial","resolve","reload","$q","isTrue","hasNewTemplateForInternetGateway","headerType","getsmb","category","pdcDownload","packageUrl","customizationUrl","open","pdcProxyService","$sanitize","localization","Localization","appId","ApplicationID","applicationid","platform","Platform","leadId","leadid","releaseType","releasetype","rebrandingCode","rebrandingcode","requestParams","getPackage","request","constant","global","ru","es","fr","it","de","nl","tr","ae","br","se","dk","no","cn","mx","jp","$compileProvider","$httpProvider","$sanitizeProvider","navigator","userAgent","isDebug","window","host","isProd","commentDirectivesEnabled","cssClassDirectivesEnabled","debugInfoEnabled","useApplyAsync","addValidAttrs","showAR","isChecked","country","trialButtonsInsideLrc","lrc2Enabled","constructCurrencyObject","currencyDisplayName","symbol","region","displayName","arguments","groupSep","decimalSep","decimalCount","priceListLocale","globalCurrencies","auCurrencies","aeCurrencies","arCurrencies","brCurrencies","deCurrencies","esCurrencies","frCurrencies","beCurrencies","fiCurrencies","gbCurrencies","inCurrencies","itCurrencies","nlCurrencies","zaCurrencies","seCurrencies","dkCurrencies","noCurrencies","trCurrencies","usCurrencies","cnCurrencies","mxCurrencies","ruCurrencies","jpCurrencies","regions","selectedLanguages","selectedCountryCode","server","ISOConfig","id","constructGeoObject","countryName","vpnProhibitedCountries","kscProhibitedCountries","downloadUrls","getRUCountries","ar-ae","da-dk","de-de","en-ae","en-au","en-gb","en-in","en-us","en-za","es-es","es-mx","fr-fr","it-it","nb-no","nl-nl","pt-br","sv-se","tr-tr","zh-cn","ru-ru","ja-jp","EN-GB-DATA","product-box-KPM","screen-KTSMD-01","screen-KTSMD-02","screen-KTSMD-03","screen-KTSMD-04","screen-KIS-01","screen-KIS-02","screen-KIS-03","screen-KIS-04","screen-KAV-01","screen-KAV-02","screen-KAV-03","screen-KISMAC-01","screen-KISMAC-02","screen-KISMAC-03","screen-KISA-01","screen-KISA-02","screen-KISA-03","screen-KISA-04","screen-KPM-01","screen-KPM-02","screen-KPM-03","screen-KPM-04","default","DEFAULT-DATA","valToString","val","toString","encode","decode","is","$sceDelegateProvider","resourceUrlWhitelist","$provide","PLURAL_CATEGORY","DATETIME_FORMATS","AMPMS","DAY","ERANAMES","ERAS","FIRSTDAYOFWEEK","MONTH","SHORTDAY","SHORTMONTH","STANDALONEMONTH","WEEKENDRANGE","fullDate","longDate","medium","mediumDate","mediumTime","short","shortDate","shortTime","NUMBER_FORMATS","CURRENCY_SYM","DECIMAL_SEP","GROUP_SEP","PATTERNS","gSize","lgSize","maxFrac","minFrac","minInt","negPre","negSuf","posPre","posSuf","localeID","pluralCat","n","opt_precision","base","min","pow","f","paginationConfig","paginationTemplateProvider","setPath","String","prototype","replaceAll","RegExp","validateEmail","test","canonicalHrefService","locationChangeWatcher","locationChangeHandler","factory","$document","setCookie","getCookie","days","domain","expiry","setTime","toUTCString","cookie","encodeURIComponent","cookies","escapedKey","cookieValue","CURRENCY","currentCurrencyObj","getCurrencies","overrideCurrencies","defaultCurrency","geoIp","currenciesCacheName","cachedCurrencies","getLocaleCurrencyInfoByValue","getOrSetCurrencies","currencies","geoIpDefaultCurrency","getDefaultCurrencyByGeoIp","indexToRemove","getUniqueCurrenciesByRegion","map","previousResult","getUniqueCurrencies","e","splice","unshift","filterCurrenciesByDefault","filterCurrenciesByRegion","setCurrency","getCurrentCurrencyFromCache","currencyLocaleCacheName","getCurrencyLocaleCacheName","countryCode","localeCurrencyConfig","Error","getCurrentCurrency","pl2Enabled","currencyObj","MAX_SCROLL_ATTEMPTS","SELECTORS_QUERY_STRING","$html","forceId","ngRenderWatcher","ngRendered","routerChangeStartWatcher","stop","getYOffset","each","node","$node","height","$element","targetId","last","htmlScroll","yOffset","elementOffsetTop","offset","top","counter","animate","easing","step","newYOffset","fName","cachedData","cache","error","getBySection","endsWith","reject","section","directory","getPartnerByName","getPartnerByID","fPath","content","x","thankYouService","ngDialog","$sce","angularLoad","windowElt","variable","B2B","linksType","dl2DownloadClick","dlChange","B2C","dl2Autodownload","initEvents","isB2B","downloadsList","sitelet","dlStarted","applyProductConfig","trackAutodownload","addEventListener","evt","startDownload","detail","Link","TypeName","OmniLink","options","openFormDialog","removeIframeEvent","removeEventListener","resetCrossSellDialogData","fetchDlScript","dl2Tag","querySelector","setAttribute","body","loadScript","loadCSS","src","data-config-src","data-config-patch-src","async","appendTo","downloadLink","linkType","trackDownload","isPageLoad","codeName","preventEventDefault","originalEvent","nativeEvent","CodeName","block","dl2ProductCodeName","productTaxonomy","prod","initialSet","allowedTypes","exceptionList","trim","apply","isDialogFormEnabled","Param","form","formUrl","width","formWidth","formHeight","startOnClose","isCrossSellPopupEnabled","all","_crossSellDialogData","crossSellPopup","prodKey","responses","getProductCrossSellProductsData","className","preCloseCallback","isPopupOpen","onLinkClick","goToUrl","target","_formDialog","enable","formURL","popupWidth","popupHeight","startDownloadOnClose","closeDialog","embedSrc","trustAsResourceUrl","setCurrentDownloadOptions","onIframeEvent","__openedDialog","showClose","plain","parseInt","onOpenCallback","__currentDownloadOptions","origin","callClose","close","trackPDCProxy","downloadLinksFactory","getByApp","applications","isString","errorObj","status","statusText","parseError","logToApi","webLoggerPayload","defaultPayload","message","getISOLocale","reqConfig","method","extend","headers","Content-Type","rej","GEO","geoIpUrlName","IPCountry","getIPCountry","getVpnProhibitedCountries","getProhibitedDownloadUrl","getGeoLocation","isKscProhibitedCountry","userGeoIp","geoIPOverride","componentData","downloadVersion","geoIPLinkOverride","localeRegex","overrideDownloadLink","getOverrideLinkWithDownloadVersion","getOverrideLinkWithoutDownloadVersion","showVpnProhibitedMessage","downloadUrl","isDownloadUrl","getGeoIpFromUrl","heightSyncServiceController","guidCounter","elWindow","containers","domReady","currentWindowWidth","ngRenderHandler","innerWidth","syncContainers","keys","containerId","syncContainerManager","syncResponsiveContainer","nested","groups","greatestHeights","container","nesteds","responsive","itemName","elemnentTop","rect","finded","nodes","items","getBoundingClientRect","round","y","group","abs","groupsNames","style","setProperty","greatestHeight","groupNodes","max","offsetHeight","requestAnimationFrame","syncContainer","itemsHeight","itemsName","filter","itemHeight","clearContainer","update","added","updateId","clearContainerItems","debounce","windowWidth","getGUID","getContainerHash","setContainerHash","addContainer","isResponsive","removeContainer","newContainers","containersKeys","addItem","itemId","jqElement","hasOwnProperty","parents","removeItem","currentCount","newCount","httpInterceptor","hasFired","requestCounter","minReached","handleNGReady","isReady","_response","responseError","interceptors","injectScriptOnceService","scriptInjected","scriptPending","scriptDeferred","scriptList","resultDeferred","scriptTag","defer","MktoForms2","onload","promise","$locale","parseRUDays","SETUP","queryParams","lrcUrl","generateParams","reformatLrc2Response","post","provider","marketoFormService","SIMPLE_DTO_LIBRARY_URL","getMarketoHost","loadMarketoFormScript","loadResurses","deferred","$compile","priceData","readComponentData","componentSelector","children","eltScope","eltCtrl","$ctrl","changeComponentData","changesObj","scopeCurrent","$digest","changeComponentTemplate","html","contents","_loop","prepareModelForDropdown","_scope","packArr","termArr","isObject","priceList","aFlag","autorenew","pack","term","defaultAutorenew","selectedPack","selectedPackString","selectedTerm","_i","selectedTermString","packValue","termValue","selectedAutorenew","setCurrentValue","setDropdownValues","setCurrentValueDropdown","prepareModelForRadio","_scope2","cutPriceList","selectedValue","tempObj","price","sort","a","b","tempPrice","rememberPack","bbSettings","_i3","JSON","stringify","setRadioValues","setCurrentValueRadio","mmDOMReady","createEvent","initEvent","dispatchEvent","valueFound","price_id","product_id","currentValue","_i2","getCartLink","purchaseType","buyLink","selectedValueObject","parse","setBuyblockValueByProduct","productShortName","messageFormatService","messageFormatLoad","MessageFormat","compile","format","messageFormat","ngRenderAnchorScrollService","OSDetected","subDevice","os","getCurrentOsHash","findOSInArray","array","pageInfoService","pageInfoUrl","ipInfo","languages","pdcProxyUrl","priceDataFactory","buyBlockHelperService","serverUrlPriceService","PL2_MASTER_PARTNER_ID_NAME","PL2_MASTER_PARTNER_TIME_NAME","estore","getPrice","defaultPurchaseUrl","minPack","verdictMinPack","partnerid","verdictPartnerId","sessionPartner","sessionPartnerStorage","localStorage","getItem","pl2Timestamp","curDate","pl2PurchaseType","now","storeArgs","formatQueryString","hasPurchaseAsPurchaseType","curdate","session_partner","getPriceUrl","withCredentials","handlePl2Response","resellerOverride","productId","priceId","getCartLinkUrl","purchase","info","getPartnerEstore","getPartnerUrl","product_name","priceOption","generateId","join","getvsb","getcusjsonb2b","productDownloadHelper","constructLocale","language","constructUpdateFields","localeSelectionType","selectedLanguagesCodes","languageCode","getApplication","productTaxonomyKeys","getDownloadLocales","getDocSettings","application","docFieldsToUpdate","componentSettings","links_type","locale_selection_type","selected_languages_codes","fallback","getSelectedLanguages","fallback_language_code","website_country_code","website_language_code","website_fallback_language","lang_locale_link_selection_amount","show_release_version_type","use_aux_lang_for_app_plugins","getFieldsToUpdate","getRegionLocale","regionLocale","storageKey","cookieCancelKey","cachedConfig","process","_data","isActive","fullPathRedirect","redirectMap","redirect","userCountry","cachedCancel","pages","activePage","closeByDocument","cancel","ngDialogData","ngDialogId","stripParams","redirectUrl","redirectLink","urlParserElement","pathname","protocol","siteLet","comp","compOverride","returnCached","responseOverride","localStorageService","adobeParams","admitadParams","utmParams","knownProviders","urlObj","urlArray","queryString","getUrlObject","len","validateUrlArray","queryStringAppendix","salesTrackingMapper","formattedProduct","setQueryString","estoreProviders","getAdobeCampaignValues","salesTrackingMapping","defaultProvider","matched","matchProvider","sn","setParameterValue","referer2","referer6","referer3","referer4","referer5","regkey","octoken","ADDITIONAL_reseller","ADDITIONAL_spage","ADDITIONAL_channel","ADDITIONAL_pnumber","ADDITIONAL_regkey","ADDITIONAL_sn","getDigitalRiverObject","typnews","channel","pnumber","x-campaign","x-spage","x-channel","x-pnumber","extendSalesTrackingMapping","aclid","acregion","acaid","acipmccid","acaiid","acmid","acbid","klsiteclass","p4s_p_push_subscriber_id","om-site-id","tracking-id","getSalesTrackingMapping","substr","onBuyButtonClick","masterPartner","setItem","stripBuyLinkParams","stripArr","splitUrl","modded","refererParam","buildOmnitureFunctionReadyProxy","getUtmParams","acc","cur","omnitureFunctionName","omnitureFunc","omnitureTag","_len","_key","getElementById","getElementsByTagName","affiliate","pgm","getFormattedPageName","directive","component","errorHttpInterceptor","exceptionHandler","attrs","toTitleCase","str","isRu","txt","charAt","toUpperCase","replaceSpamText","text","caseInsensitiveReplace","replaceDmToSpam","searchMask","replaceMask","regEx","isNullOrUndefined","isNull","getModule","htmlReady","$evalAsync","setTimeout","callPhantom","define","amd","aboutController","$onInit","elementName","localName","getData","b2cController","contentName","b2bController","resource","enterpriseController","sharedGetByNameController","alignContainerController","$attrs","heightSyncService","interval","currentTextLength","destroyed","alignContainerResponsive","setInterval","nodesHash","containerHash","newHash","call","getAttribute","innerHTML","textLength","clearInterval","profilingFormController","handleRejection","marketoHelperService","loadMarketo","profilingMrktoNum","profilingMrktoID","whenRendered","submitButtonRow","getFormElem","newBtn","clone","append","onSuccess","context","closePromise","repoMapper","_categoryNameSplitter","mapRepositoryLinkFields","linkResponse","boost","mapCategory","categoryName","getTitle","date_publication_start","image","getResourceImage","thumb","getResourceThumb","labels","isExternal","mapLinkFields","pubDate","repository_type","schemaName","subtitle","summary","subcategory","subcategoryTitle","video","videoTitle","isVideoContent","hasContent","mapRepositoryHeaderFields","headerTitle","headerSubTitle","headerDescription","headerBgImg","getRandomizedImage","buttons","menu","filters","mapBlogFields","blogSectionTitle","resources","mapBlogResourceFields","resourceSubTitle","resourceExcerpt","resourceExcerptSummary","resourceImage","resourceImageAlt","resourceLogo","resourceLogoAlt","resourceLink","resourceLinkText","resourceLinkTarget","mapResourcesFields","resourceCategory","resourceSummary","values","valueTitle","splitter","bindings","accordionController","applyAccordion","click","siblings","slideToggle","articlesSectionController","block_sections","article_item_blocks","articles","parseYoutubeUrl","awardsSectionController","comment","prepend","awardsCarouselController","slickConfig","infinite","slidesToShow","slidesToScroll","dots","accessibility","draggable","nextArrow","prevArrow","breakpoint","settings","arrows","ngRender","slick","bottomBannerController","env","setBackgroundImage","backgroundImage","productInfo","positionOnPage","buyButtonText","productBox","noBoxshot","valueToSet","upgradeButton","highlighted","kscDisclaimer","hideProductLinks","promoline","countMonthly","free","onFormUpdated","hideTrialButton","showBbTrialButton","saveRateText","savingsPriceType","disableAutoRenew","hideArCheckbox","hideTagline","hideBv","buttonText","showDisclaimer","getBuyblockSavings","getBuyblockPriceList","buyButtonHtmlTop","buyButtonHtmlBottom","buyBlockPriceRatePrefix","buyBlockPriceRatePostfix","buyblockDropdownController","buyblockService","hidePack","curState","stateName","getCurrency","eStore","productPricesExist","asterisk","buyblockData","unavailableMsgType","buyblock_not_available_msg","buyblock_not_available_b2b_msg","b2cDisclaimer","disclaimer","omnitureText","priceListGroupedBy","notAvailableItemsFor","isChangeTriggeredByAnotherBuyblock","addSalesTrackingParameters","price_striked","delta","trackBBEvent","shortName","master_partner","sendToBuyUrl","registerOnce","showARPopup","updateARPopupProduct","getPromoline","accountDescPopup","ngDialogSettings","getSavings","messageType","isPriceSavingDisplayed","hasCurVal","saveRateLRC","saveRate","isPackDisabled","isTermDisabled","hideDisclaimer","isLrcPage","isProduct","hasDisclaimer","disclaimerObj","hideDisclaimerOnLrc","arCheckboxClick","changePack","$event","changeTerm","stateIncludes","currencyChange","isLrc","getPriceList","arPopupCheck","checked","position","changedProp","findMatch","otherProp","otherPropValueArr","matchConfig","matchIndex","findPriceMatch","initialMatchConfig","equals","setAvailableOptionList","selectTypeAttr","highlightForcedValueChange","renewalAvailable","checkRenewal","selectedOption","overrideEstoreID","prop","propValue","availableListForOtherProp","uniq","difference","buyblockSetup","disablePackSelect","packSelectDisabled","disableTermSelect","termSelectDisabled","b2bDisclaimer","smbDisclaimer","hideAsteriskOnB2B","hideAsterisk","alwaysShowDisclaimer","b2cDisclaimerLogicType","bbDisclaimer","checkDisclaimer","setProductPageLink","prodPageLink","skipEstore","newEstore","handleEstoreOverrideError","handlePriceSuccess","handlePriceError","handleScopeDestroyed","sortByPropName","rounded","hasAutoRenewal","packMonthlyArr","packYearlyArr","term_type","monthlyAvailable","groupBy","selectedTermFloat","parseFloat","ceil","valueInt","getCNPackValue","getUSPackValue","showLabelFR","partnerObj","lrcPartnerUnavailable","getCustomProduct","newV","getProductData","$onChanges","valueIsDifferent","isEqual","handleUpdateCurrentValue","hasTrialButton","red","buyblockLrcABTestController","licenseCount","selectPrices","ui","priceOneYear","list","currentDeviceCount","autorenewState","priceTwoYears","license_count","getPriceListIterator","deviceCounts","showAutoRenewPrice","hasPrices","handlePrice","busy","showAutoRenew","changeARCheckbox","getCurrentCount","getPriceDiff","priceItem","toFixed","handlerTerm","extraClick","extra","trackExtraClick","galleryPages","galleryItems","magnificPopup","mainClass","closeOnBgClick","enableEscapeKey","inline","markup","gallery","arrowMarkup","callbacks","instance","$popup","$arrowLeft","$arrowRight","currentIndex","targetIndex","goTo","next","contains","markupParse","extras","eq","showGallery","trackExtraHover","autorenewCheckboxClick","trackBenefit","innerText","trackExtraLabelClick","selectVariant","picture","loadBuyLink","compare","highlightButton","overrideProductDesc","updateButtonText","isFailover","hideAr","hidePriceDisclaimer","disclaimerBinding","hideSection","hideGplayButton","setLimitTo","hideRadioButtons","disablePriceSync","buyblockRadioController","SEO","showOnlyAR","$id","random","substring","setSelectedOption","applyOption","radioFilter","selectedID","isHomeSec","moreDevicesPopup","localTemplate","moreDevicesPopupTemplateUrl","handleBundleChange","isBundleActive","productNameBackup","bundleProductName","previousBundleOption","ignoreOverrideText","overrideText","hasBundle","bundleBuyblockPromo","showTerm","switchTerm","switchArCheckbox","checkHighlighted","isInteger","isNumber","isFinite","productPageName","enablePl2","isBBReady","isProductBlocked","productSelected","orderBy","TERM","TERM_PACK","PACK","PACK_TERM","otaButtonAvailable","available","handleProductSelected","optionObj","autoRenewal","optionID","updateSelectedID","input","itemOffersGroupLimit","outOfGroupVisibleLimit","limitTo","showEvenDevices","isUSLocale","defaults","isFunction","mainProductAlreadySelected","findFirstAvailableOption","filteredPriceList","findOptionByKeys","setupPriceList","listOrderBy","productHasAutoRenewal","orderByFunc","getOrderByFunction","arGroup","itemsByTerm","groupedList","isProductKSC","checkMonthlyOptions","splitPackageDataEnabled","termDuration","termType","termName","dec","subscription","selectedTab","minValue","maxValue","showMoreDevices","hasMoreDevices","buildOrderByFunction","equalSort","propA","propB","showHideTabs","getBuyLink","itemOffersOrderBy","handleProductData","overrideLimitTo","enableBundle","newScreenshotsArr","seoAltTexts","screenshots","ss","altText","checkAutoRenewal","countBy","limit","findOptionById","isInit","hasTemplateOverride","hasProductOverride","option","handleBuyLinkSuccess","handleBuyLinkError","buyBlockSetup","isExtendedButtonText","updatedBuyButtonText","extendButtonText","upgradeText","buyText","renewText","promises","Boolean","buyblockUnavailableText","kscUnavailableText","buyblockStepController","setCurrentPack","direction","newPosition","setCurrentTerm","fixedDashTitle","overrideTrialButtonText","overrideTrialButtonLink","setCustomLocale","redesign","buyblockVsbDropdownController","isCustomLocale","modalDisplayedOnce","hideRenewLink","renewLink","isTotal","isUniversal","disableAR","setPackArr","packListMatchingSelectedTerm","mappedPackArr","packNumber","isNaN","mustParsePackValue","currentValuePack","formattedPromoSavings","savingsPromoType","buyblockPromo","needMore","or","termTypeArr","showMinMaxDisclaimer","messageText","promiseFn","hasExtendedFallback","extendedFallback","$filter","every","defaultAutoRenew","canClickTwice","isRegistered","arPopupButtons","parsePack","autoConfig","defaultSettings","freeTrialLink","hideInB2c","first","hideTrialFromB2C","hideInSmb","hideTrialFromSMB","hideInVsb","hideTrialFromVSB","hideInLrc","hideTrialFromLRC","hideInProductPage","hideTrialFromProductPage","isProductPage","customSaveText","customSavingsPriceType","savingsPrice","currentPrice","priceStriked","savingsText","saveText","saveMsgOverride","savingsMsgOverride","num","roundPricingPercentage","eventCategory","eventAction","eventLabel","trackEvent","findIndex","label","accountInfoOverride","descriptionPopup","buyblockUserAccountController","isStringNonEmpty","replaceUserAccountString","userAccountsRegex","userAccountsMinusRegex","internalDescriptionPopup","setShowFlags","showAccountLabel","setPluralizedLabel","openDescriptionPopup","showAccountOverride","hasAccountOverride","hasLabel","hasCount","showPopupIcon","hasDescriptionPopup","_mfFormatter","_mfFormatterLabel","userAccounts","formatter","pluralizedLabel","USER_ACCOUNTS","callbackFormController","callbackIsEnabled","enableCallbackWidget","callbackPopup","setCallbackBtnWidth","outerWidth","requestCallbackForm","munchkinId","formId","compareTableController","rootScopeHelper","bbData","featuredProducts","osList","getLocationHash","osProducts","getFeaturedProducts","featureSet","header","featuresResponse","featuresOverride","uniqueFeaturedArray","featuresArray","productFeatures","featured","features","Body","checkForHomeSecurityState","ready","mobileDefault","$this","chartID","closest","$comparisonChart","$comparisonChartNav","$currentColumn","currentTitle","currentID","nextID","prevID","nextNavID","prevNavID","newPrevTitle","newNextTitle","contentRepoService","repoMapperService","SUBCATCONFIG","CATEGORYCONFIG","CERTIFICATESCONFIG","AWARDSCONFIG","serverUrl","searchUrl","headerUrl","blogUrl","apiContentRepoPath","resourcesB2BUrl","resourcesB2CUrl","resourcesAboutUrl","defaultOrderBy","defaultYears","buildCategoryName","buildSubCategoryName","getCategories","getCategoryParams","getLinkMediaByPath","getHeaderByName","headerName","getPathFromUrl","fileName","isPrSection","getUserFriendlyUrl","lastIndexOf","getStrippedString","getTrustAsHtml","strHtml","trustAsHtml","getResources","repoType","getCategoriesFromObject","tempArray","filteredCategories","categoriesWithSubCat","categoriesArray","translatedCategories","categoriesWithoutIds","intersection","removedUnusedCategories","order","reorderJPCategories","categoriesList","concat","getBlogByName","blogName","populateLinkFields","populateRepositoryHeaderFields","populateBlogFields","populateBlogResourceFields","populateResourcesFields","setUrlToCorrectCategory","lm","reverse","pageNumber","pageSize","contentTypes","startDate","rawSelect","optionsObj","page_num","page_size","order_by","raw_select","categoryValues","splitAndFormatWithConfigNumbers","subCategoryValues","contenttype","select","dateFrom","dateTo","publication_start","publication_end","buildSearchParams","getPageNumberFromUrl","getSelectorFromUrl","formatSelectorForApp","sel","getDateFromUrl","setPaginationUrlValue","setSelectorUrlValue","selector","setDateUrlValue","getDefaultYears","setTrackPageView","subCategories","buildConfigCategoryName","categories","subCat","splitByDoubleColon","callback","cookiesRequirementController","cookiesRequirementService","getContent","cookieDesc","cookieBtn","accept","currencySelectorController","geoIpGlobalRule","openCurrencyMenu","showCurrencyMenu","showCurrencySelector","currentCurrency","onMenuBlur","currenciesCount","assertLocaleByName","showCurrencySelectorCondition","handleCurrencySwitcherAppearance","calledByBuyblock","forceBuyblocksOnPageFlag","hideCurrencySelector","stateChange","customHtmlController","doubleBannerController","redHeight","customCarouselController","downloadBlockController","getBadges","badges","downloadFromGplayLink","downloadFromIstoreLink","downloadFromMicrosoftLink","objProductData","buyblockTranslations","eulaController","featureSectionSecController","$tabNav","initializeFirstTab","SelectedName","bodyClickHandler","runScripts","$parent","tab","not","stopPropagation","$closest","$container","$applyAsync","featuredProductsController","dataList","osDetect","featuresGridController","arg","rootEl","string","customCurrency","addMarkup","currencyTemplate","tempVal","decimals","decimalsFound","$stateful","gdprImg","enableHmc","lrcData","lrcVerdict","defaultPack","reviewPath","hmcController","storeResults","currentName","$dialog","stepsDialog","closeByNavigation","currentPopup","QuestionSelected","hmcVerdict","stateClass","requiredOptionActive","allSelected","bannerPopupActive","autoPopupActive","hmcData","autoPopup","selectAll","currentStep","finalSelectionFilter","currentState","kscAvailable","getSelectedOS","OSSelected","OSCollection","goToStep2","processData","backBtn","loadHMC","closeAll","closePromoBanner","selectCheckbox","currentTarget","checkQuestions","checkboxes","el","progressBar","isMobile","hmcUI","step1","step2","hmc_ksc_enable","hmc_template","hmc_popup","trigger","triggerHMCPopup","bannerOmnitureValue","mqBreakPoint","mediaQuery","hmc_popup_trigger_time","hmc_enable_popup","hmcPopupLocation","hmc_location","hmcPromo","lrcHmcLogic","hmcLogic","devices","years","license_days","hmcPromoLastItemColor","matchMedia","matches","addListener","handled","filterMatch","dataSet","secondDimensionDataSet","relevancy","isOs","filtered","selection","elem","diff","inArray","questionsRelevancy","selectedQuestions","logicBlock","hmcLogicBlock","lrcVerdictData","osSelectionFilter","questionSelectionFilter","priorityCheck","priority","findByPriority","hmcResultComponents","selectedDevices","getValues","holder","questions","verdicts","sVar64","recommendedVerdict","s","eVar64","hmcType","hmcMod","hmcUniversalViewController","hmcConfig","preventSubmit","partTracking","templatePath","stepHistory","checkAndChangeStep","checkCustomLocale","backOneStep","closePopup","getStepData","reset","_res$data$fields","hmcTypeMod","contentPath","init","firstStep","updateHistory","area_mailboxes","mismatchDisclaimer","closeByEscape","setupTracking","stepOne","entries","pageTracking","answerTrkStr","stepTrkStr","smb","license_number_detection","license_number","number","console_type","area_patch","smb-endpoint","endpoint_protection","endpoint_only","area_patch_ru","delay","lrcDisclaimersController","scrollOnUpdate","homepageBannerController","searchService","searchFormVisible","mobileSetup","desktopSetup","animations","pendingAnimations","searchForm","ctas","ctaElements","handlePromisesSuccess","isInverted","productCategories","bsnsCategory","homeCategory","runScript","businessNames","autocompleteAPI","searchBar","suggestions","terms","goToSearchPage","which","keyCode","displaySearch","animationName","executeAnimation","transform","loadScripts","$onDestroy","autoOff","handleBusinessHoverIn","override","onHoverBusiness","handleBusinessHoverOut","handleMenuClick","handleHomeHoverIn","onHoverHome","handleHomeHoverOut","openLRCDialog","getTabsOrder","bind","oldV","setupMobileHeader","reg","searchString","autocompleteQ","autocompleteQhtml","animationKey","registerAnimations","animationsMap","flushAnimations","setupDesktopHeader","$header","$headerInner","$searchForm","$searchInputWrap","$searchInput","$hideOnSearch","$midCol","$bsnsCol","$homeCol","$bsnsOverlay","$homeOverlay","$bsnsGrayOverlay","$homeGrayOverlay","$bsnsSideCtaBox","$homeSideCtaBox","$bsnsSideScreen","$homeSideScreen","$bsnsStateCtaBtns","$homeStateCtaBtns","$stateCtasWrap","$stateCtaWraps","$stateCtaBtns","$midScreenIntro","$midSmallLogo","$midSmallLogoLine","$selectProductType","showBusinessCta","applyOffset","TweenLite","autoAlpha","fromTo","showHomeCta","hideBusinessCta","restoreOffset","hideHomeCta","w","animateDir","isPageDirectionRTL","ease","Power1","easeOut","handleCtaBtnHoverIn","opacity","handleCtaBtnHoverOut","handleCtaWrapHoverIn","$activeScreen","$targetScreen","easeInOut","handleCtaWrapHoverOut","bodyWidth","midColWidth","margin-left","showSearchForm","focus","hideSearchForm","hover","mouseleave","$allScreens","$introScreen","$bsnsScreen","$homeScreen","$bsnsCta","$homeCta","$backBtn","targetElementSelector","lrcScrollToController","scrollToElement","scrollIntoView","lrcSerialController","isULS","lrcEndpoint","_serialArr","serialArr","serialForm","$invalid","$dirty","isPartner","noPartner","daysLeft","lrcServiceUnavailable","lrcInvalidSerial","editInput","hideSidebar","openScreenshotDialog","lrcStepsSecController","gallerySlider2Config","centerMode","rtl","magnificPopupConfig","delegate","closeOnContentClick","closeBtnInside","verticalFit","zoom","duration","opener","steps","setTab","newTab","isSet","tabNum","lrcStepsController","initGallerySlider","lrcVerdictController","DAYS_LEFT_THRESHOLD","folder","displayPageSavings","formattedHeadlineSavings","overrideVerdict","searchMM","mm","handleVerdict","postfix","handleMM","verdictType","pageTest","pageType","expired","sales_tracking","partnerName","license_type","reg_key","verdictExpDate","expiration_date","verdictExpDateTime","verdictDaysRemaining","verdictDaysExpired","days_expired","remainingDaysMetaObj","RemainingDaysUntilExpiration","DaysAfterExpiration","setRemainingDaysMetaTags","licenseStatus","addVerdictString","handleVerdictData","checkEStoreAvailability","err","ipCountry","getPageHeadline","templateVer","handleBuyblockUpdated","targetSection","isBuyblockEnabled","checkIPCountry","columnLabels","colNumber","headlineSavingsCalcType","headlineSavings","savingsBannerCalcType","daysRemainingBanner","headline","pageHeadline","longDesignLogic","Number","MAX_VALUE","verdictExpirationDatetime","verdictExpirationDate","expires","daysExpired","isExcludedVerdict","isDaysRemainingBanner","isExpiredBanner","isExpirationToday","daysRemainingText","daysLeftText","daysRemainingValue","daysRemainingNote","daysLeftNote","expiredText","daysExpiredValue","expiredNote","expiresTodayText","productFolder","templateName","productList","kscloud","overridePageTitle","lrcTemplate","showDaysLeft","productBg","lrcBg","bg","comparisonTableLink","comparisonTable","upgradeDetails","promoBlock","quickmenuButtons","sharedVerdictData","components","navScrollItems","initScriptsOnInclude","partnerData","eStoreProvider","bottom","fieldCollection","marketoTemplate","marketoFormController","resourcesLoader","loadPrefill","DTO","SimpleDTO","dataSrc","debug","mode","cb","mktoFields","getGlobal","cleanup","whenReady","setValuesCoerced","loadForm","showForm","mobileNavController","hasRun","innerHasRun","backBtnText","nav_ui_back_btn","setupMobileNavigation","getInnerItems","nav_panel_component","innerMenu","mainNavItem","megaMenuItem","subItem","idx2","megaMenuGroups","menuGroups","idx3","groupProduct","grpProduct","idx4","buyblockReady","mobileMenuWrapper","htmlTag","windowResize","parentTitle","parentIcon","parentURL","$subMenu","hasIcon","stopImmediatePropagation","windowResizeThrottle","clearTimeout","nanoBannerController","onDataLoaded","newsLetterOptInController","newsLetterOptInService","optedInComplete","fieldIsValid","enableComponent","submitForm","$submitted","email","inputPlaceHolderText","errorMessageText","isEnabled","componentEnabled","envLocale","constructTreUrl","constructP8Url","getLocaleUrl","emvTag","emvRef","newsLetterPopupController","newsLetterConfigService","setPopupOpenStatus","noSave","opened","clearShowHideHandler","formData","loadPopupConfigForRoute","getConfigForCurrentPage","applyConfig","empty","onWindowScroll","showHideTimeout","loaded","footer","formNr","evaluatePopupHeight","setOpenStatus","visibility","popupMaxHeight","innerHeight","$apply","unit","throttle","scrolledPastPoint","getWindowScrollPct","scrollHeight","scrollY","pageYOffset","service","getGlobalConfig","getConfigPathForCurrentPage","pathsToConfigMapping","pathToConfigMapping","d","configPath","notificationBarGeoController","notificationBarGeoService","localeCode","isAssertedState","targetUrl","regionObj","lang","bannerHidden","deprecate","closeNotification","hasCookie","getXMLRules","regionsConfig","getRegionByCode","site","overlayEnabled","code","locales","breadcrumbController","bannerImage","showBreadcrumb","noPadding","resourcesCount","pageHeaderController","$windowElement","contentUrl","videoPopup","youtube","gmaps","moreToLoad","imageUrl","onToggleTableWrapper","onWindowResizeListener","localData","moreLink","surtitle","bigText","imageAlt","$mainMenu","$scrollTo","getMinPrice","isHeadlineDisplayed","isOverlayDisplayed","getEltClass","product-header","no-breadcrumbs","hideBreadcrumbs","no-headlines","image-bg","about-us-page-header","page-header","small-header","taller-header","ksc-header","downloads-header","getBannerButtonClass","pos","bannerBtns","bannerbuttons","col-l-4","col-xl-3 no-gutter","padButtons","col-l-12 col-xl-5","col-l-8","col-xl-9","col-l-12 col-xl-7","isRTL","subDesc","mobileDesc","subDescription","minPrice","nanoBannerButtons","class","buyBlock","button","getElementsByClassName","dirPaginateDirective","dirPaginationControlsDirective","DEFAULT_ID","$parse","paginationService","terminal","multiElement","tElement","tAttrs","expression","dirPaginate","filterPattern","itemsPerPageFilterRemoved","collectionGetter","rawId","nodeType","addNoCompileAttributes","paginationId","registerInstance","repeatExpression","deregisterInstance","idDefinedInFilter","getRepeatExpression","compiled","hasAttribute","$set","removeAttr","currentPageGetter","currentPage","defaultCurrentPage","makeCurrentPageGetterFn","setCurrentPageParser","totalItems","setAsyncModeTrue","setCollectionLength","setAsyncModeFalse","$watchCollection","collection","collectionLength","paginationTemplate","numberRegex","DDO","maxSize","onPageChange","autoHide","idMessage","directionLinks","$eval","boundaryLinks","paginationRange","goToPage","oldPageNumber","isValidPageNumber","pagination","generatePagesArray","getCollectionLength","getItemsPerPage","updateRangeValues","newPageNumber","generatePagination","getCurrentPage","setCurrent","itemsPerPage","range","lower","upper","total","previous","previousPage","setCurrentPage","tracker","templateString","getString","getPath","rowsPerPage","halfWay","totalPages","ellipsesNeeded","itemsPerPageFilter","end","start","slicedObject","isAsyncMode","setItemsPerPage","objKeys","setString","lastRegisteredInstance","instances","instanceId","asyncMode","getLastInstanceId","currentPageParser","assign","parser","getPaginationNumbering","totalItemsOnPage","pageCount","paginationNumbers","isCurrentPaginationNumber","currentPaginationNumber","arPopupController","productPosition","shoARPopupProductHandler","popupActive","onceChecked","ARcheck","flag","renewAutomatically","renewManually","toggleARPopup","onceUnchecked","checkboxClicked","popupGallery","imageGallery","fixedContentPos","productPromoController","analyticsPrefix","setAnalyticsData","priceValue","cutPrice","productScriptsInjectorController","bv","bvId","performInjection","productScriptsInjectorService","object","mapSchema","vp","vc","vcv","vcvp","vpv","vpvp","@context","@type","brand","logo","fullSizeImage","prodAddTitle","prodKasperskyTitle","prodMainTitle","aggregateRating","Includes","Products","ratingValue","reviewStats","ReviewStatistics","AverageOverallRating","reviewCount","TotalReviewCount","getBvStats","offers","availability","priceSpecification","maxPrice","priceCurrency","seller","showDownloadLocale","productUpdatesController","downloadLinks","validationHelper","hideAlphabets","getProductDownloadData","docsSettingsToUpdate","globalDefault","productsTaxonomy","fallbackLanguageCode","updateFields","websiteCountryCode","packName","downloadData","appsQuery","productDownloadRequestRedefinition","appPositionSearchArray","app","docSettings","cpp_id","cppid","modifyRequest","getDownloadLinks","handleDownloadResponse","isCNLocale","arrayOfApps","productDownloadRequest","linksPack","link_type","linkLabel","latestVersionText","trialText","docsText","applicationControlPluginsText","additionalDistributivesText","releaseNotesText","onlineHelpLabel","assignLinkLabel","display_omniture","downloadLocales","languageLocalNameDefault","changeRegion","displayDropdownOption","local","alphabet","alphabet_loc_name","displayDropdownDefault","downloads","download","download_url","isGlobalLocale","geoIPOverrideForProductUpdates","geoipLinkOverride","selectedLanguage","tagName","KISAndroidBuildUrl","overrideLink","downloadLocale","$postLink","productUpdatesPackController","isEndPointDownloadPage","promoSectionController","promoSectionService","promotions","getPromoMap","promoValue","getBackGroundImage","promotion","backgroundImageForTablet","background-image","backgroundImageForMobile","promoType","Promotions","promoID","ratingSubmitController","bvCode","bvLocale","$BV","en-global","en-ca","enableMicrodata","ratingController","ratingDataService","getProductId","rating","ratingData","showReviewsActive","reviewRating","reviewDate","reviewOrderBy","orderByCondition","getStars","showReviews","getratingData","hasMatchingPopupCalled","showReviewsPopupEventUnsub","checkTemplate","getProductReviews","total_reviews","bottomline","total_review","pass","hasProducts","starsRange","average_score","litStars","starsValue","orderByPredicate","_popupOpened","ratingDataFactory","localKey","bvKeys","stg","prd","fr-be","getUrl","_getUrl","renewAndAboutController","renewalStepsData","b2bResourceDocumentsController","scopeId","resourceDeckItems","maxSlides","slides","slideArrows","mobileFirst","slide","rssFeedsDetailsController","details","getDetails","bgSrc","rssFeedsController","filterSelectorDefault","filterSelectorDate","getResourceListData","responseData","resourcesTotalCount","doc","filterSelections","changeFilter","pageChangeHandler","pr","runOnLast","$last","_slicedToArray","Symbol","iterator","sliceIterator","_arr","_n","_d","_e","_s","done","TypeError","apiEndpoint","envLang","envCountry","queryText","_sort","_dataArray$split3","getCurrentLanguageCode","_dataArray$split","getCurrentCountryCode","getDataPage","searchId","getSearchQueryValue","mapSearchResult","numberOfPages","clearLocationSearch","phrase","autocompleteUrl","setUrlWithSearchQuery","siteBarController","closeBar","active","hideSiteBarForNonIndianIP","showSitebar","size","footerGlobalController","noCustomFooter","newsletterEnabled","composeFooter","year","hasCustomFooter","getFooterBySection","setDisplayRssLink","setGeneralFooterData","getOverride","copyright","primaryFooterData","isENT","generalFooterData","getCountrySelector","cSelector","getProductList","rssLink","displayRssLink","cCountry","getFullYear","currentCountry","bigFooter","smallFooter","isJP","toggleSelector","$footer","closeSelector","displayNewsletterForm","handleNewsletterLoaded","getSiteFooterCopyright","isHomepage","copyrightHomepage","footerGlobalWrapperController","showFooter","searchBarController","mainNav","searchField","uiStrings","searchTrigger","closeSearchTrigger","siteHeaderScrollNavController","animatedScrollTo","hideDesktopMenu","hideMainNav","siteHeaderController","timeoutPromise","getMainNav","mainNavItems","rightMenuItem","ctaPassParams","ctaLink","showMenuUtility","timer","megaSideBlock2","hideGetInTouchCta","ctaText","states","hasCrimeStopperLogo","utm","scrollNavItems","require","siteHeader","mainNavController","stateChangeSuccessListener","activeState","showMenu","getTemplateUrl","generalData","updateActiveNav","sts","getCurrentState","overrideSearch","setENTStateNavIndex","entData","skip","isSMBSingleColumn","secNav","mega_menu_secondary_nav","menuType","secondary_nav_side_links","isVPN","getCurrentStateData","hideSearch","siteTopController","getActiveItem","socialSharingController","socialData","pageUrl","absUrl","statsWidgetController","statisticsData","trustpilotReviewsController","trustpilotReviewsService","reviews","starsArr","starsFilter","reviewsNum","tagFilter","getCustomerReviews","protoReviews","dotdotdot","ellipsis","trustpilotReviewsFactory","jsonp","jsonpCallbackParam","tabbedSectionBuyblockController","regularSectionTabbedController","selected","selectTab","tabIndex","article","isValid","uploadDate","thumbnailUrl","articleBigImg","articleImg","vpnProhibitedMessageController","vpnProhibitedMessageService","activate","showMessage","getVpnProhibitedMessageResource","storage","_storage","DOMException","storageAvailable","cacheName","cacheTimeInMinutes","setHours","getHours","dataToCache","expiryTime","objectToSaveToJSON","toJson","cached","fromJson","currentDate","cacheNames","removeAll","clear","sessionStorage","dynamicModel","pageDirection","idGenerator","setLocale","names","paramsObj","paramValue","forEachRight","stripInitialParams","paramsPresentInLink","hashPresentInLink","noParametersToAppend","resultParams","paramsString","initialLinkParamsObj","initialLinkParamsString","splitParam","convertObjectKeysToArray","main","ext","mainKeys","extKeys","mergeParameterObjects","keyNum","currentParameterArray","duplicateNum","o","variation","valueLc","offsetWidth","getClientRects","objectKeysToLowerCase","paramsToProcess","flags","paramsRegex","getIds","currentLocale","siteKey","cDiv","submitButton","submitHandler","validate","vals","subscriptionSingleOptIn","consenttoPersonalDataProcessing","agreeButton","recaptchaEl","recaptchaResponse","grecaptcha","getResponse","addHiddenFields","reCAPTCHAFormResponse","classList","add","validateRecaptcha","showErrorMessage","validateForm","submit","insertBefore","render","sitekey","followUpUrl","formPageName","eventName","handler","writeMeta","getLocationHref","_clArr","clArr","removeLink","urlArr","textVal","breadcrumb","translationsHelperService","getCategoryTranslation","termKey","termTranslation","getRepoTranslations","fromPairs","getPageTitleAppendix","appendix","pageTitleAppendix","cachedAppendix","geolocation","setTitle","fixCanonicalUrl","hostname","port","isLink","setComponentResponsiveFlag","mobileFlag","namespace","windowResizeListener","paramsToLowercase","mapperService","sourceLink","aboutAccordionController","aboutAnchorHeaderController","fallbackImage","prRepoFallbackImagesPath","getDefaultImage","constructor","constructUrl","rand","generateRandomImage","imagesArray","imagePath","aboutBotController","botDataService","answer","question","sendQ","getBotAnswer","answers","score","failedAnswer","botDataFactory","botKeysIDs","GL","GB","US","DE","MX","ES","FR","IT","NL","BR","TR","AU","ZA","IN","AE","SE","Ocp-Apim-Subscription-Key","localID","aboutHeadQuartersMapController","aboutHeadQuartersMapDataService","lat","lon","placeId","hqs","hqTitle","findIndexOfHq","hq","modifyIframeLocation","currHqData","addIframe","usHQIndex","localSec","localOffice","localOfficeTitle","localLat","localLon","localLink","showLrcBalancer","myKasperskyBalancer","lrcBalancerText","myKasperskyBalancerButton","aboutHeadQuartersMapDataFactory","googleEmbedEndpoint","iframeParameters","loadMap","googleMpaKeys","getKey","setupMap","marker","mapOptions","center","google","maps","LatLng","styles","featureType","elementType","stylers","color","saturation","lightness","weight","mapElement","infoWindow","InfoWindow","Map","Marker","setContent","setMap","newLocation","iframe","q","mapSource","frameborder","panTo","licenseListController","aboutNewsListController","itemsMap","news","openNewsPopup","idx","pressCategoriesController","pressCategoryDetailsController","aboutTeamGridController","teams","index1","index2","aboutStoryListController","pressContactsController","popup","aboutVideoBigHeaderController","removalDelay","preloader","aboutVideoButtonHeaderController","animatedFeaturesController","timetableOffset","mainnavHeight2","Waypoint","Sticky","Inview","exited","enter","downloadsPromoController","fullWidth","headerFeaturesController","downloadButtonTracking","types","disclaimerText","kscloudDisclaimersController","kscDisclaimerPopup","kscloudFeaturedProductsController","bgArray","otaData","overTheAirInstallController","auth2","signedIn","gapi","load","client_id","otaClientId","googleAuth","attachClickHandler","app_package_name","otaPackageName","isSignedIn","listen","buyblocks","productDescriptionTable2upController","syncPriceList","table","isAffiliate","affiliateBuyLink","affiliateBuyText","productFeaturesController","autoplaySpeed","adaptiveHeight","productsCarouselController","enableTabFilter","autoPlayEnabled","enableAutoPlay","uniqArr","tabOrder","carouselTabs","productOrderMatrix","carouselProduct","tabID","j","uniqProducts","defaultOS","activeTab","osSelection","getDefaultOS","stopSlick","toggleMobileFilters","setMobileNavTitle","getActiveTab","tabUrl","currentTab","isKSC","borderAndBackground","tabFields","borderAndBg","tabContent","showMobileFilters","pathToDataMap","promoComparisonChartController","toggleHidden","OS","getOS","chartRows","row","rows","currentGroupId","currentGroupHide","insertExpandCollapse","isExpandCollapse","groupId","isHeader","chartRowHeader","isRowHeader","hideAfter","chartHidePastPoint","isRowHidePoint","chartColumns","chartHeader","shouldHide","getGroupedRows","expandedGroups","chartColProduct","alignHeight","hpReviewsSectionController","cachedTranslations","getTitleTranslations","bvCarouselEnabled","disableBvCarousel","safeKidsController","priceListId","hasAR","priceListCTA","productGroup","secondaryListController","buttonMore","showMore","slideDown","slideUp","secondaryListDocumentationItemController","productListTaxonomy","productsList","setupProductGroupOptions","downloadsData","simpleTableWrapperController","toggleTable","showTable","mobileTemplate","notResponsive","wrapperMode","simpleTableController","currentProduct","locationPath","chart","cols","rowToCell","tableLastRow","cell","rowTxt","maxRows","showMoreText","showLess","showLessText","productLink","cells","rowIndex","isDivider","col","colIndex","rowspan","colspan","startCol","fill","getStartCol","getRowToCell","reloader","reloaderHeight","getReloaderStyle","changeCurrentProduct","softwareDocsController","filterDownloads","filteredDownloads","display_name_alphabet","mergedDownloads","downloadVer","langArray","onLanguageChange","prodTax","websiteLanguageCode","manualText","eulaText","_length","_length2","language_loc_name","uniqBy","SpecialOffersItemController","dateWatcher","newVal","summaryDate","dates","handleLink","SpecialOffersController","itemsRendered","links","getSpecialOffers","specialOffersLinks","specialOffersData","tabsSectionController","anchor","b2cThankYouItemController","onVersionChange","dropdownOptionLabel","alphabetLocName","languageLocName","handleClick","isRU","ruLocales","isAutoDownloadEnabled","getDownloadLink","enableCrossSellPopup","download20QueryString","selectedLanguagesCodesOverride","dropDown","uniqueLanguages","chain","flatten","major","minor","build","revision","subrevision","setDropDownDefaults","display_name","VersionNumber","SubVersion","downloadCopy","selectedVersion","b2cThankYouController","enabledOnLoad","showCrossSellPopupOnPageLoad","showDialog","showDialogOnPageLoad","autoDownload","kssSectionController","hasClicked","relValue","imgAlt","productBrand","mainImage","isBuyLink","animation","renderer","loop","autoplay","animationData","bodymovin","loadAnimation","isBuyblockAvailable","handleARChange","welcomeSectionController","pageAbsUrl","b2bApplicationsListController","bottomBarController","overrideShared","addUtmParams","dlButtons","passParams","b2bInfoToggleController","b2bMiniSidebarController","b2bProductDescriptionController","getContainerClass","sidebarHeader","getSideBarClass","b2bProductsDownloadListController","smbProducts","freeTrialText","KnowledgeBaseLinkText","KnowledgeBaseLink","tabSectionController","entArticleController","b2bAccordionController","entAwardsController","setColumnsNumber","columns","entBannerController","hasColor","hasImg","bannerBgColor","bannerBgImg","bttBtnController","getScrollTop","onScrollHandler","scrollButtonTop","isBackState","sectionsNodes","display","btt","nextTop","sectionsTops","toArray","currentScrollTop","categoryMenuController","computedHeight","entCaseStudiesController","solutions","ArticleTitle","entContactFormController","mNr","mId","entGridController","entBlockType","summaryDisplay","updateSlider","blockType","_promises","sections","solutionPromises","HideSummary","dotdotdotObj","destroy","slider","dotdotdotSelector","elt","sliderElt","$selectedElts","watch","entFeatureCaseStudyController","entFeaturesController","entContentController","entGallerySliderController","overlay","entHeaderController","updateSideNav","$nav","$navItems","$navWrap","$sections","navWrapOffsetTop","windowMiddle","getNavItemFromHref","$navItem","$elt","$siteTop","$siteHeaderTitle","headerHeight","nav","$mainNav","parentAnchor","anchoredSubSections","$scrollToSection","cur_pos","changeMenu","headerMenu","selectedMenu","headerButtons","entHpMenuController","entOfferSectionController","getSectionClass","classes","diamondList","loop_counter","openPopup","entOverviewController","patterns","entPostController","entPromoController","autoPlay","autoPlaySpeed","getBgImage","mobileImage","tabletImage","desktopImage","fade","windowsElem","mqMatches","entPyramidController","columnTitle","entRecognitionBlockController","leftItems","rightItems","singleTitle","titleLeft","titleRight","single","singleTwoColumns","entRelatedProductsController","entResArticlesController","solution","ind","Filters","isTruncated","resHeaderController","defaultFilter","filterEnterpriseSolutions","makeActive","FilterID","filterGroups","fadeIn","fadeOut","entResItemController","allDone","articlePromises","filterPromises","itemClass","newData","resFilter","$donDestroy","artArray","re","throttleTimer","entRiskController","entResourceDocumentsController","simulatedAttacksController","simulations","btnGroup","triggerPopup","h","solutionsController","entSupportController","entThreatController","trainingModulesController","loadDemo","modules","smbContactUsController","$targetElt","popupUrl","smbCompareTable4upController","enableFixedHeaders","secondColHighlight","featuCol","thirdColHighlight","fourthColHighlight","fifthColHighlight","refreshAll","siteTitle","mainNavHeight","sticky","inViewList","entered","exit","smbProdDownloadController","smbProdListController","smbDownloadThankYouController","fallbackLanguageCodes","shortProdName","smbProdsController","smbProdsBlockController","downloadState","smbFeaturedSectionController","smbSupportCustomHtmlController","smbTargetedSolutionsController","prodNumberClass","vsbAwardsController","vsbCompareTable4upController","$prev","$next","vsbDownloadThankYouController","prodName","shortProdNameTaxonomy","infoSectionController","vsbLrcAlertBlockController","instructionStepsController","vsbProductArticlesController","vsbWelcomeSectionController","$current","lrcTitle","partnersAwardsBlockController","partnersCaseStudiesController","caseStudies","caseStudy","formName","partnersFormController","partnersFormService","termsAndConditions","thankYouState","submitted","goToThankYouPage","changeTerms","marketoCheck","marketoId","marketoNr","formSubmissionValues","formatFormData","partnersHomeFeaturedSectionController","partnersLogosController","partnersProgramsListSectionController","programs","program","partnersPartnershipPremiumServicesController","strategicPartnersCarouselController","partnersTestimonialCarouselController","bbSyncData","verdictControllerData","verdictServiceData","longComparisonTableController","customCurrencyFilter","extendedRow","activeColumn","hideTable","buyblockColumnIndex","cheapestPrice","toggleRowExtraInfo","toggleHiddenTable","generateProductCardText","priceText","productCardPriceText","getPurchaseType","getVerdictProductBBSetting","getEStore","getSelectedTerm","getSelectedPack","getLimitTo","tableSetup","stickyDesktopEl","stickyMobileEl","stickyDesktop","stickyMobile","inViewListDesktop","carouselElement","currentSlide","variableWidth","buyblockSettings","handleBuyblockUpdatedPass","mastHeadData","isDeadEnd","lrcMastheadController","daysHeader","daysDescription","expiredHeader","expiredDescription","bgImage","queryStringSearch","queryStringSection","searchController","decodeSearchQuery","textContent","searchModel","searchTerm","responseCount","responsePages","allPages","pageNumbers","showNoresultDisplay","changeOrderBy","searchAndGetPages","getPageDisplayTotal","totalOnCurrentPageViewing","getPageStartDisplay","searchData","autocomplete","decodedQueryText","getSearchResponse","setRootScopeProperties","searchCount","premiumServicesBannerController","premiumServiceDescriptionController","premiumServicesFaqController","faqs","premiumServices","sideBarTitle","premiumService","premiumServicesSectionController","premiumServicesHeaderController","premiumServicesOfferSectionController","premiumSectionTitle","buyUrl","preparePriceRequest","loadInstantChat","ICLoader","RescueInstantChatLoader","ICContainer","HostedCSS","HostedLanguagesForChatOnlyMode","HostedLanguagesForAppletMode","EntryID","Tracking0","Language","PostMessageTargetOrigin","Start","premiumServicesGridController","premiumServiceOneTimeBlocks","premiumServiceTitle","certInfo","usePressDetailTemplate","relatedArticleCategory","pressArticlesBottombarController","previousValue","isJPPressReleasesDetailsPage","pressCenterAdvancedController","handleRepoData","articleUrls","docs","Url","repoCategory","pressCenterFooterController","pressCenterNavController","stickyNav","breadCrumbLink","breadCrumbTitle","datePublicationStart","showFigure","repoHeaderController","pressHeaderCacheName","headerData","pageDescription","articlesBottomWidgetController","getSearchResources","ajaxCalls","paths","translatedCategoryName","dataCategory","showBanner","articleSidebarController","banner","b2cBanner","b2bBanner","b2bImg","resourcesBlogsController","blogsCacheName","blogsResourcesCacheName","blogData","resourcesCategoryDetailsController","updatedBody","titleSummary","isVideoList","showOriginalImage","metaTitle","metaDesc","detailsHead","detailsBody","outerHTML","repoTranslations","getRepoTranslation","resourcesCategoryVideoController","contentType","hidePageHeader","resourceCategoryController","selectorModel","mediaByPathAjaxCalls","urls","hasResources","formatSelectorForUrl","setParams","changeSelector","isPolicyAuthorBlogPage","authorName","categoryStrings","resourcesGalleryItemController","filteredResources","localCategories","resourceCenterItems","resourceCenterItem","outerValue","innerValue","resourcesGalleryController","sharedPressDetailsController","stripHtmlTagsFilter","sharedPressController","stringHelper","currentSelection","isJPHomepage","resourcess","prData","subcategoriesToFetch","getResourceList","getHrefFromState","getSubCat","prSortBy","prDate","filterDefaultSelections","cats","numberItems","excludedCategory","targetSelection","checkDefaultSelector","targetPage","pubStart","RawContent","DatePublicationStart","without","resourcesVideoSideBarController","videos"],"mappings":"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6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,+BAAgCC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,4BAA6BC,SAAY,MAAQ,CAAED,KAAQ,4BAA6BC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SAAW,CAAED,KAAQ,gCAAiCC,SAAY,SA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,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAAM,QAAS,YAAa,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,mBAAoB,SAAUA,EAAwB,MAAO,mBAAoB,KAA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"}