{"version":3,"file":"sparkle.mjs","mappings":"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","sources":["webpack://bb.ads/./lib/stubs/bloomberg.js","webpack://bb.ads/./lib/stubs/eventrecorder.js","webpack://bb.ads/./lib/stubs/googletag.js","webpack://bb.ads/./lib/stubs/headertag.js","webpack://bb.ads/./lib/stubs/spritz.js","webpack://bb.ads/./node_modules/@foundation/cmp-client/lib/es/exports.js","webpack://bb.ads/./node_modules/blueimp-md5/js/md5.js","webpack://bb.ads/./node_modules/js-cookie/dist/js.cookie.js","webpack://bb.ads/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://bb.ads/./node_modules/react/cjs/react.production.min.js","webpack://bb.ads/./node_modules/react/index.js","webpack://bb.ads/./node_modules/react/jsx-runtime.js","webpack://bb.ads/./src/DependencyLoader.ts","webpack://bb.ads/./src/Sparkle.ts","webpack://bb.ads/./src/ad_blocker/AdBlocker.ts","webpack://bb.ads/./src/ad_blocker/AdBlockerModal.ts","webpack://bb.ads/./src/adsService/AdsServiceClient.ts","webpack://bb.ads/./src/adsService/ContentTargetingProvider.ts","webpack://bb.ads/./src/adsService/UserContentTargetingProvider.ts","webpack://bb.ads/./src/adsService/UserGlobalTargetingProvider.ts","webpack://bb.ads/./src/bombora/Bombora.ts","webpack://bb.ads/./src/communication/PostMessages.ts","webpack://bb.ads/./src/constants.ts","webpack://bb.ads/./src/debug/AdDebug.ts","webpack://bb.ads/./src/debug/AdDebugRegistry.ts","webpack://bb.ads/./src/doubleVerify/DoubleVerifyTracking.ts","webpack://bb.ads/./src/doubleVerify/doubleVerifyScript.ts","webpack://bb.ads/./src/eventrecorder/EventRecorderLoader.ts","webpack://bb.ads/./src/gpt/Ad.ts","webpack://bb.ads/./src/gpt/GPT.ts","webpack://bb.ads/./src/gpt/SlotRenderEndedEvent.ts","webpack://bb.ads/./src/gpt/fixInlineBlockBaseline.ts","webpack://bb.ads/./src/refreshing/AlwaysRefreshStrategy.ts","webpack://bb.ads/./src/refreshing/CompanionGroup.ts","webpack://bb.ads/./src/refreshing/CompanionGroupCoordinator.ts","webpack://bb.ads/./src/refreshing/GroupInViewportRefreshStrategy.ts","webpack://bb.ads/./src/rendering/AlwaysRenderRenderingStrategy.ts","webpack://bb.ads/./src/rendering/CompanionAdRenderingStrategy.ts","webpack://bb.ads/./src/rendering/InstantRenderRenderingStrategy.ts","webpack://bb.ads/./src/rendering/IntersectionObserverRenderingStrategy.ts","webpack://bb.ads/./src/rendering/Renderer.ts","webpack://bb.ads/./src/session/UserInfo.ts","webpack://bb.ads/./src/taglessAd/FallbackAd.ts","webpack://bb.ads/./src/taglessAd/TaglessAd.ts","webpack://bb.ads/./src/taglessAd/TaglessAdHandler.ts","webpack://bb.ads/./src/taglessAd/constants.ts","webpack://bb.ads/./src/taglessAd/type.ts","webpack://bb.ads/./src/type.ts","webpack://bb.ads/./src/util/AdObserver.ts","webpack://bb.ads/./src/util/Environment.ts","webpack://bb.ads/./src/util/EventTarget.ts","webpack://bb.ads/./src/util/Overlayer.ts","webpack://bb.ads/./src/util/Storage.ts","webpack://bb.ads/./src/util/consent.ts","webpack://bb.ads/./src/util/curry.ts","webpack://bb.ads/./src/util/eventRecorderClient.ts","webpack://bb.ads/./src/util/getObjectSignature.ts","webpack://bb.ads/./src/util/identity.ts","webpack://bb.ads/./src/util/invertObject.ts","webpack://bb.ads/./src/util/makeMeasure.ts","webpack://bb.ads/./src/util/monitoring/NewRelicBrowserReporter.ts","webpack://bb.ads/./src/util/monitoring/PerformanceAPIReporter.ts","webpack://bb.ads/./src/util/monitoring/PerformanceMonitor.ts","webpack://bb.ads/./src/util/monitoring/Reporter.ts","webpack://bb.ads/./src/util/monitoring/clientUtilsNR.ts","webpack://bb.ads/./src/util/pageEnabledChecker.ts","webpack://bb.ads/./src/util/parseJson.ts","webpack://bb.ads/./src/util/requestHelpers.ts","webpack://bb.ads/./src/util/stripSlashes.ts","webpack://bb.ads/./src/util/targetingModifiers.ts","webpack://bb.ads/./src/util/timeouts.ts","webpack://bb.ads/./src/viewability/Viewability.ts","webpack://bb.ads/./src/viewability/Visibility.ts","webpack://bb.ads/./src/watchlists/WatchlistClient.ts","webpack://bb.ads/./src/watchlists/WatchlistProvider.ts","webpack://bb.ads/./node_modules/ua-parser-js/src/ua-parser.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/rng.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/regex.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/validate.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/v1.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/parse.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/v35.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/md5.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/v3.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/v4.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/sha1.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/v5.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/nil.js","webpack://bb.ads/./node_modules/uuid/dist/esm-browser/version.js","webpack://bb.ads/webpack/bootstrap","webpack://bb.ads/webpack/runtime/amd options","webpack://bb.ads/webpack/runtime/compat get default export","webpack://bb.ads/webpack/runtime/define property getters","webpack://bb.ads/webpack/runtime/hasOwnProperty shorthand","webpack://bb.ads/webpack/runtime/make namespace object","webpack://bb.ads/./src/sparkle.web.js"],"sourcesContent":["window.__bloomberg__ = window.__bloomberg__ || {};\n","window.eventRecorder = window.eventRecorder || { cmd: [] };\n\n","window.googletag = window.googletag || {};\nwindow.googletag.cmd = window.googletag.cmd || [];\n","window.headertag = window.headertag || {};\nwindow.headertag.cmd = window.headertag.cmd || [];\n","window.Spritz = window.Spritz || {};\nwindow.Spritz.cmd = window.Spritz.cmd || [];\n","import { jsxs, Fragment, jsx } from 'react/jsx-runtime';\n\nconst SOURCEPOINT_HOST = \"sourcepointcmp.bloomberg.com\";\nconst SOURCEPOINT_ACCOUNT_ID = \"1425\";\nconst AUTHENTICATION_COOKIE = \"_breg-uid\";\nconst REQ_FLAG_DEFAULT = \"req1\";\nconst FUN_FLAG_DEFAULT = \"fun0\";\nconst PAD_FLAG_DEFAULT = \"pad0\";\nconst DAY_IN_MILLISECONDS = 24 * 60 * 60 * 1000;\nconst CONSENT_COOKIE_KEY = \"bbgconsentstring\";\nconst TCFAPI_VERSION = 2;\nconst GDPR_PRIVACY_MANAGER_ID_v2 = 817623;\nconst KISA_PRIVACY_MANAGER_ID_V2 = 880326;\nconst MSPS_PRIVACY_MANAGER_ID = 987296;\nconst FUN_ID = \"5f29641df70e58290010d5aa\";\nconst PAD_ID = \"5f2c366203c8584077858803\";\nconst FOOTER_LABELS = {\n    ccpa: {\n        ja: \"私の個人情報を販売しない(カリフォルニア州消費者プライバシー法)\",\n        en: \"Do Not Sell or Share My Personal Information\"\n    },\n    gdpr: {\n        ja: \"クッキーを管理する\",\n        en: \"Manage Cookies\"\n    }\n};\n\nvar Stubs;\n(function (Stubs) {\n    Stubs[\"GDPR\"] = \"\\n        <script id=\\\"gdpr-stub-script\\\">\\n            !function () { var e = function () { var e, t = \\\"__tcfapiLocator\\\", a = [], n = window; for (; n;) { try { if (n.frames[t]) { e = n; break } } catch (e) { } if (n === window.top) break; n = n.parent } e || (!function e() { var a = n.document, r = !!n.frames[t]; if (!r) if (a.body) { var i = a.createElement(\\\"iframe\\\"); i.style.cssText = \\\"display:none\\\", i.name = t, a.body.appendChild(i) } else setTimeout(e, 5); return !r }(), n.__tcfapi = function () { for (var e, t = arguments.length, n = new Array(t), r = 0; r < t; r++)n[r] = arguments[r]; if (!n.length) return a; if (\\\"setGdprApplies\\\" === n[0]) n.length > 3 && 2 === parseInt(n[1], 10) && \\\"boolean\\\" == typeof n[3] && (e = n[3], \\\"function\\\" == typeof n[2] && n[2](\\\"set\\\", !0)); else if (\\\"ping\\\" === n[0]) { var i = { gdprApplies: e, cmpLoaded: !1, cmpStatus: \\\"stub\\\" }; \\\"function\\\" == typeof n[2] && n[2](i) } else a.push(n) }, n.addEventListener(\\\"message\\\", (function (e) { var t = \\\"string\\\" == typeof e.data, a = {}; try { a = t ? JSON.parse(e.data) : e.data } catch (e) { } var n = a.__tcfapiCall; n && window.__tcfapi(n.command, n.version, (function (a, r) { var i = { __tcfapiReturn: { returnValue: a, success: r, callId: n.callId } }; t && (i = JSON.stringify(i)), e.source.postMessage(i, \\\"*\\\") }), n.parameter) }), !1)) }; \\\"undefined\\\" != typeof module ? module.exports = e : e() }();\\n        </script>\\n    \";\n    Stubs[\"CCPA\"] = \"\\n        <script id=\\\"ccpa-stub-script\\\">\\n            (function () { var e = false; var c = window; var t = document; function r() { if (!c.frames[\\\"__uspapiLocator\\\"]) { if (t.body) { var a = t.body; var e = t.createElement(\\\"iframe\\\"); e.style.cssText = \\\"display:none\\\"; e.name = \\\"__uspapiLocator\\\"; a.appendChild(e) } else { setTimeout(r, 5) } } } r(); function p() { var a = arguments; __uspapi.a = __uspapi.a || []; if (!a.length) { return __uspapi.a } else if (a[0] === \\\"ping\\\") { a[2]({ gdprAppliesGlobally: e, cmpLoaded: false }, true) } else { __uspapi.a.push([].slice.apply(a)) } } function l(t) { var r = typeof t.data === \\\"string\\\"; try { var a = r ? JSON.parse(t.data) : t.data; if (a.__cmpCall) { var n = a.__cmpCall; c.__uspapi(n.command, n.parameter, function (a, e) { var c = { __cmpReturn: { returnValue: a, success: e, callId: n.callId } }; t.source.postMessage(r ? JSON.stringify(c) : c, \\\"*\\\") }) } } catch (a) { } } if (typeof __uspapi !== \\\"function\\\") { c.__uspapi = p; __uspapi.msgHandler = l; c.addEventListener(\\\"message\\\", l, false) } })();\\n        </script>\\n    \";\n    Stubs[\"GDPR_V2\"] = \"\\n        <script id=\\\"gdpr-stub-script\\\">\\n            function _typeof(t){return(_typeof=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t})(t)}!function(){for(var t,e,o=[],n=window,r=n;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=n.parent}t||(function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement(\\\"iframe\\\");r.style.cssText=\\\"display:none\\\",r.name=\\\"__tcfapiLocator\\\",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return o;\\\"setGdprApplies\\\"===n[0]?n.length>3&&2===parseInt(n[1],10)&&\\\"boolean\\\"==typeof n[3]&&(e=n[3],\\\"function\\\"==typeof n[2]&&n[2](\\\"set\\\",!0)):\\\"ping\\\"===n[0]?\\\"function\\\"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:\\\"stub\\\"}):o.push(n)},n.addEventListener(\\\"message\\\",(function(t){var e=\\\"string\\\"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n=\\\"object\\\"===_typeof(o)?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,\\\"*\\\")}),n.parameter)}),!1))}();\\n        </script>\\n    \";\n    Stubs[\"MSPS\"] = \"\\n        <script id=\\\"msps-stub-script\\\">\\n            window.__gpp_addFrame=function(e){if(!window.frames[e])if(document.body){var t=document.createElement(\\\"iframe\\\");t.style.cssText=\\\"display:none\\\",t.name=e,document.body.appendChild(t)}else window.setTimeout(window.__gpp_addFrame,10,e)},window.__gpp_stub=function(){var e=arguments;if(__gpp.queue=__gpp.queue||[],__gpp.events=__gpp.events||[],!e.length||1==e.length&&\\\"queue\\\"==e[0])return __gpp.queue;if(1==e.length&&\\\"events\\\"==e[0])return __gpp.events;var t=e[0],p=e.length>1?e[1]:null,s=e.length>2?e[2]:null;if(\\\"ping\\\"===t)p({gppVersion:\\\"1.1\\\",cmpStatus:\\\"stub\\\",cmpDisplayStatus:\\\"hidden\\\",signalStatus:\\\"not ready\\\",supportedAPIs:[\\\"2:tcfeuv2\\\",\\\"5:tcfcav1\\\",\\\"6:uspv1\\\",\\\"7:usnatv1\\\",\\\"8:uscav1\\\",\\\"9:usvav1\\\",\\\"10:uscov1\\\",\\\"11:usutv1\\\",\\\"12:usctv1\\\"],cmpId:0,sectionList:[],applicableSections:[],gppString:\\\"\\\",parsedSections:{}},!0);else if(\\\"addEventListener\\\"===t){\\\"lastId\\\"in __gpp||(__gpp.lastId=0),__gpp.lastId++;var n=__gpp.lastId;__gpp.events.push({id:n,callback:p,parameter:s}),p({eventName:\\\"listenerRegistered\\\",listenerId:n,data:!0,pingData:{gppVersion:\\\"1.1\\\",cmpStatus:\\\"stub\\\",cmpDisplayStatus:\\\"hidden\\\",signalStatus:\\\"not ready\\\",supportedAPIs:[\\\"2:tcfeuv2\\\",\\\"5:tcfcav1\\\",\\\"6:uspv1\\\",\\\"7:usnatv1\\\",\\\"8:uscav1\\\",\\\"9:usvav1\\\",\\\"10:uscov1\\\",\\\"11:usutv1\\\",\\\"12:usctv1\\\"],cmpId:0,sectionList:[],applicableSections:[],gppString:\\\"\\\",parsedSections:{}}},!0)}else if(\\\"removeEventListener\\\"===t){for(var a=!1,i=0;i<__gpp.events.length;i++)if(__gpp.events[i].id==s){__gpp.events.splice(i,1),a=!0;break}p({eventName:\\\"listenerRemoved\\\",listenerId:s,data:a,pingData:{gppVersion:\\\"1.1\\\",cmpStatus:\\\"stub\\\",cmpDisplayStatus:\\\"hidden\\\",signalStatus:\\\"not ready\\\",supportedAPIs:[\\\"2:tcfeuv2\\\",\\\"5:tcfcav1\\\",\\\"6:uspv1\\\",\\\"7:usnatv1\\\",\\\"8:uscav1\\\",\\\"9:usvav1\\\",\\\"10:uscov1\\\",\\\"11:usutv1\\\",\\\"12:usctv1\\\"],cmpId:0,sectionList:[],applicableSections:[],gppString:\\\"\\\",parsedSections:{}}},!0)}else\\\"hasSection\\\"===t?p(!1,!0):\\\"getSection\\\"===t||\\\"getField\\\"===t?p(null,!0):__gpp.queue.push([].slice.apply(e))},window.__gpp_msghandler=function(e){var t=\\\"string\\\"==typeof e.data;try{var p=t?JSON.parse(e.data):e.data}catch(e){p=null}if(\\\"object\\\"==typeof p&&null!==p&&\\\"__gppCall\\\"in p){var s=p.__gppCall;window.__gpp(s.command,(function(p,n){var a={__gppReturn:{returnValue:p,success:n,callId:s.callId}};e.source.postMessage(t?JSON.stringify(a):a,\\\"*\\\")}),\\\"parameter\\\"in s?s.parameter:null,\\\"version\\\"in s?s.version:\\\"1.1\\\")}},\\\"__gpp\\\"in window&&\\\"function\\\"==typeof window.__gpp||(window.__gpp=window.__gpp_stub,window.addEventListener(\\\"message\\\",window.__gpp_msghandler,!1),window.__gpp_addFrame(\\\"__gppLocator\\\"));\\n        </script>\\n    \";\n})(Stubs || (Stubs = {}));\n\nconst PROPERTY_ID = 31489;\nconst KISA_PROPERTY_ID = 29886;\nfunction v2(params = {}) {\n    const { accountId = SOURCEPOINT_ACCOUNT_ID, domain = SOURCEPOINT_HOST, kisaEnabled = false } = params;\n    // language=JavaScript\n    return `\n        ${Stubs.CCPA}\n        ${Stubs.MSPS}\n        ${Stubs.GDPR_V2}\n        <script id=\"cmp-client-config\">\n            (function(){\n                function getCookieValue(name) {\n                    const matches = document.cookie.match(\"(^|;) ?\" + name + \"=([^;$]*)\");\n                    return matches ? matches[2] : \"\";\n                }\n                const isKisa = ${kisaEnabled} && getCookieValue(\"country_code\") === \"KR\";\n                window._sp_queue = [];\n                window._sp_ = {\n                    config: {\n                        accountId: ${accountId},\n                        authCookie: \"${AUTHENTICATION_COOKIE}\",\n                        baseEndpoint: \"https://${domain}\",\n                        propertyId: isKisa ? ${KISA_PROPERTY_ID} : ${PROPERTY_ID},\n                        propertyHref: isKisa ? \"https://kisa.bloomberg.com\" : \"https://mc.bloomberg.com\",\n                        joinHref: true,\n                        targetingParams: {\n                            isKisa: isKisa,\n                            view: window.isTerminal ? \"terminal\" : \"web\"\n                        },\n                        usnat: {\n                            includeUspApi: true\n                        },\n                        gdpr: {},\n                        events: {}\n                    }\n                }\n            })();\n        </script>\n        <script async src=\"https://${domain}/unified/wrapperMessagingWithoutDetection.js\"></script>\n`;\n}\n\nfunction getCookieValue(name) {\n    const matches = document.cookie.match(`(^|;) ?${name}=([^;$]*)`);\n    return matches ? matches[2] : \"\";\n}\nfunction getDomain(host) {\n    const str = host.split(\"bloomberg.\");\n    if ((str === null || str === void 0 ? void 0 : str.length) <= 1) {\n        return host;\n    }\n    return `.bloomberg.${str[1]}`;\n}\nfunction setCookieValue(name, value, days) {\n    const d = new Date;\n    d.setTime(d.getTime() + DAY_IN_MILLISECONDS * days);\n    document.cookie = `${name}=${value};path=/;domain=${getDomain(window.location.hostname)};expires=${d.toUTCString()}`;\n}\nfunction includes(str, substr) {\n    return str.indexOf(substr) !== -1;\n}\nfunction reqAllowed() {\n    const bbgConsentString = getCookieValue(CONSENT_COOKIE_KEY);\n    return includes(bbgConsentString, \"req1\");\n}\nfunction funAllowed() {\n    const bbgConsentString = getCookieValue(CONSENT_COOKIE_KEY);\n    return includes(bbgConsentString, \"fun1\");\n}\nfunction padAllowed() {\n    const bbgConsentString = getCookieValue(CONSENT_COOKIE_KEY);\n    return includes(bbgConsentString, \"pad1\");\n}\nvar manageCookie = {\n    includes,\n    reqAllowed,\n    reqAllowedAsync: () => Promise.resolve(reqAllowed()),\n    funAllowed,\n    funAllowedAsync: () => Promise.resolve(funAllowed()),\n    padAllowed,\n    padAllowedAsync: () => Promise.resolve(padAllowed()),\n    getDomain,\n    getCookieValue,\n    setCookieValue,\n};\n\nconst CmpClientScripts = ({ assetHost = \"assets.bwbx.io\", clientParams, stubParams, }) => (jsxs(Fragment, { children: [jsx(\"div\", { dangerouslySetInnerHTML: { __html: v2(stubParams) } }), jsx(\"script\", { src: `https://${assetHost}/s3/foundation/cmp-client/v3/cmp-client.min.js`, crossOrigin: \"anonymous\", async: true }), jsx(\"script\", { id: \"cmp-client-init\", dangerouslySetInnerHTML: {\n                __html: `window.cmpClient = window.cmpClient || { cmd: [] };\n                        window.cmpClient.cmd.push(function () {\n                            const cmpClient = window.getCmpClient(${JSON.stringify(clientParams)});\n                            cmpClient.init();\n                        });`,\n            } })] }));\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\n\nconst apis = [\"usnat\", \"usca\", \"usco\", \"usct\", \"usut\", \"usva\"];\nconst getGPPSection = (pingData) => {\n    for (const key of apis) {\n        if (pingData.parsedSections[key] !== undefined)\n            return pingData.parsedSections[key];\n    }\n    return undefined;\n};\n\nvar _CmpClient_instances, _CmpClient_loadV2GdprPrivacyManager, _CmpClient_onPrivacyManager, _CmpClient_handleGPPEventLister, _CmpClient_handleConsentString, _CmpClient_validateTcData, _CmpClient_fireBbgConsentReadyGTMEventOnce, _CmpClient_fireEREvt, _CmpClient_trackCmpError, _CmpClient_trackCmpEvents;\nclass CmpClient {\n    constructor({ domain = SOURCEPOINT_HOST, language = \"en\" }) {\n        _CmpClient_instances.add(this);\n        _CmpClient_loadV2GdprPrivacyManager.set(this, () => {\n            const managerId = window._sp_.config.targetingParams.isKisa\n                ? KISA_PRIVACY_MANAGER_ID_V2\n                : GDPR_PRIVACY_MANAGER_ID_v2;\n            window._sp_.gdpr.loadPrivacyManagerModal && window._sp_.gdpr.loadPrivacyManagerModal(managerId);\n        });\n        this.baseEndpoint = `https://${domain}`;\n        this.startTime = Date.now();\n        this.loaded = false;\n        this.consentReadyEventFired = false;\n        this.language = language;\n        this.initialized = false;\n    }\n    init() {\n        if (!window.__tcfapi) {\n            console.error(\"[cmp-client] CMP required tcfapi stub missing, exiting init\");\n            return;\n        }\n        this.startTime = Date.now();\n        window.gtag_enable_tcf_support = true;\n        this.initialized = true;\n        window.__tcfapi(\"addEventListener\", TCFAPI_VERSION, __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_handleConsentString).bind(this));\n        window.addEventListener(\"beforeunload\", __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_trackCmpEvents).bind(this));\n    }\n    addPrivacyManager(footerLink) {\n        if (!window.__tcfapi) {\n            console.warn(\"[cmp-client] CMP required stub missing, exiting addPrivacyManager\");\n            return;\n        }\n        window.__tcfapi(\"addEventListener\", TCFAPI_VERSION, __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_onPrivacyManager).bind(this, footerLink));\n    }\n    removeEventListener(listenerId) {\n        window.__tcfapi(\"removeEventListener\", TCFAPI_VERSION, (success) => {\n            if (!success) {\n                console.warn(`[cmp-client] Failed to remove __tcfapi event listener with id: ${listenerId}`);\n            }\n        }, listenerId);\n    }\n    onGdprConsent(consents, success) {\n        if (!success) {\n            const error = new Error(\"[cmp-client] Failed to `getCustomVendorConsents` with __tcfapi\");\n            console.error(\"[cmp-client]\", error);\n            return;\n        }\n        const consentValues = { req: REQ_FLAG_DEFAULT, fun: FUN_FLAG_DEFAULT, pad: PAD_FLAG_DEFAULT };\n        [...consents.consentedPurposes, ...consents.legIntPurposes].forEach((purpose) => {\n            if (purpose._id === FUN_ID) {\n                consentValues.fun = \"fun1\";\n                for (const [, grant] of Object.entries(consents.grants)) {\n                    if (FUN_ID in grant.purposeGrants && !grant.purposeGrants[FUN_ID]) {\n                        consentValues.fun = \"fun0\";\n                    }\n                }\n            }\n            if (purpose._id === PAD_ID) {\n                consentValues.pad = \"pad1\";\n                for (const [, grant] of Object.entries(consents.grants)) {\n                    if (PAD_ID in grant.purposeGrants && !grant.purposeGrants[PAD_ID]) {\n                        consentValues.pad = \"pad0\";\n                    }\n                }\n            }\n        });\n        const consentString = Object.values(consentValues).join(\"\");\n        setCookieValue(CONSENT_COOKIE_KEY, consentString, 365);\n        __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_fireBbgConsentReadyGTMEventOnce).call(this, consentString);\n        // eslint-disable-next-line no-restricted-syntax\n        console.log(\"[cmp-client] GDPR applies, custom consent string\", consentString);\n        // This return is here for unit tests\n        // eslint-disable-next-line consistent-return\n        return consentString;\n    }\n    onUSPSPing(ping, success) {\n        if (!success) {\n            console.error(\"[cmp-client] Failed to `ping` with __gpp\");\n            return \"\";\n        }\n        // This is required because SourcePoint changed their behavior to send an array with -1 in in\n        const applicableSections = ping.applicableSections.filter((e) => e !== -1);\n        if (applicableSections.length === 0) {\n            // The region neither imposes GDPR nor MSPS\n            console.info(\"[cpm-client] this region doesn't apply GDPR nor MSPS\");\n            const consentString = \"req1fun1pad1\";\n            setCookieValue(CONSENT_COOKIE_KEY, consentString, 365);\n            __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_fireBbgConsentReadyGTMEventOnce).call(this, consentString);\n            return \"\";\n        }\n        else if (ping.signalStatus !== \"ready\") {\n            // We are in MSPS applicable section but data is not ready yet\n            console.info(\"[cmp-client] gpp ping data is not ready yet\");\n            return \"\";\n        }\n        // MSPS data is ready, and we are in the right region\n        const gppSection = getGPPSection(ping);\n        const consentString = ((gppSection === null || gppSection === void 0 ? void 0 : gppSection.SaleOptOut) === 2) ? \"req1fun1pad1\" : \"req1fun0pad0\";\n        setCookieValue(CONSENT_COOKIE_KEY, consentString, 365);\n        __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_fireBbgConsentReadyGTMEventOnce).call(this, consentString);\n        // This return is here for unit tests\n        // eslint-disable-next-line consistent-return\n        return consentString;\n    }\n}\n_CmpClient_loadV2GdprPrivacyManager = new WeakMap(), _CmpClient_instances = new WeakSet(), _CmpClient_onPrivacyManager = function _CmpClient_onPrivacyManager(footerLink, tcData, success) {\n    // Assuming that footer is ready; may need backport\n    if (!__classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_validateTcData).call(this, tcData, success))\n        return;\n    if (!footerLink)\n        return;\n    if (tcData.gdprApplies) {\n        // eslint-disable-next-line no-param-reassign\n        footerLink.textContent = FOOTER_LABELS.gdpr[this.language];\n        // eslint-disable-next-line no-param-reassign\n        footerLink.onclick = () => __classPrivateFieldGet(this, _CmpClient_loadV2GdprPrivacyManager, \"f\").call(this);\n    }\n    else {\n        // eslint-disable-next-line no-param-reassign\n        footerLink.textContent = FOOTER_LABELS.ccpa[this.language];\n        // eslint-disable-next-line no-param-reassign\n        footerLink.onclick = () => window._sp_.usnat.loadPrivacyManagerModal &&\n            window._sp_.usnat.loadPrivacyManagerModal(MSPS_PRIVACY_MANAGER_ID);\n    }\n    this.removeEventListener(tcData.listenerId);\n}, _CmpClient_handleGPPEventLister = function _CmpClient_handleGPPEventLister(data, success) {\n    if (!success) {\n        const error = new Error(\"[cmp-client] Failure received from __gpp `addEventListener`\");\n        console.warn(\"[cmp-client]\", error);\n        __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_trackCmpError).call(this, error);\n        return;\n    }\n    this.onUSPSPing(data.pingData, success);\n}, _CmpClient_handleConsentString = function _CmpClient_handleConsentString(tcData, success) {\n    if (!__classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_validateTcData).call(this, tcData, success)) {\n        return;\n    }\n    this.loaded = true;\n    if (tcData.gdprApplies) {\n        /**\n         * GDPR logic for European countries\n         */\n        if (tcData.eventStatus !== \"tcloaded\" && tcData.eventStatus !== \"useractioncomplete\") {\n            console.warn(\"[cmp-client] CMP UI is shown, waiting for user consent\");\n            return;\n        }\n        window.__tcfapi(\"getCustomVendorConsents\", TCFAPI_VERSION, this.onGdprConsent.bind(this));\n    }\n    else {\n        /**\n         * Global Privacy Platform (GPP) MSPS API\n         */\n        if (!window.__gpp) {\n            console.error(\"[cmp-client] CMP required gpp stub missing\");\n            return;\n        }\n        window.__gpp(\"addEventListener\", __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_handleGPPEventLister).bind(this));\n    }\n}, _CmpClient_validateTcData = function _CmpClient_validateTcData(tcData, success) {\n    if (!success) {\n        const error = new Error(\"[cmp-client] Failure received from __tcfapi `addEventListener`\");\n        console.warn(\"[cmp-client]\", error);\n        __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_trackCmpError).call(this, error);\n        return false;\n    }\n    if (tcData.gdprApplies === undefined) {\n        const error = new Error(\"[cmp-client] Received `gdprApplies` as undefined\");\n        console.warn(\"[cmp-client]\", error);\n        __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_trackCmpError).call(this, error);\n        return false;\n    }\n    return true;\n}, _CmpClient_fireBbgConsentReadyGTMEventOnce = function _CmpClient_fireBbgConsentReadyGTMEventOnce(consentString) {\n    if (!this.consentReadyEventFired) {\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push({ event: \"bbg_consent_ready\" });\n        __classPrivateFieldGet(this, _CmpClient_instances, \"m\", _CmpClient_fireEREvt).call(this, consentString);\n    }\n    this.consentReadyEventFired = true;\n}, _CmpClient_fireEREvt = function _CmpClient_fireEREvt(consentString) {\n    window.eventRecorder = window.eventRecorder || {\n        cmd: []\n    };\n    window.eventRecorder.cmd.push(() => {\n        const eventRecorder = window.getEventRecorderClient();\n        eventRecorder.fireEvent(\"CmpClient\", undefined, { consent: consentString });\n    });\n}, _CmpClient_trackCmpError = function _CmpClient_trackCmpError(error) {\n    if (!navigator.sendBeacon)\n        return;\n    navigator.sendBeacon(\"/javelin/api/cmp_tracker\", new Blob([JSON.stringify({\n            url: window.location.href,\n            event: \"sourcepoint_cmp_error\",\n            message: error.message,\n            userAgent: navigator.userAgent,\n            timeElapsed: (Date.now() - this.startTime) / 1000\n        })], { type: \"application/json\" }));\n}, _CmpClient_trackCmpEvents = function _CmpClient_trackCmpEvents() {\n    if (!navigator.sendBeacon)\n        return;\n    const wasGtmDomEventPushed = window.dataLayer.find(({ event }) => event === \"gtm.dom\");\n    const wasGtmLoadEventPushed = window.dataLayer.find(({ event }) => event === \"gtm.load\");\n    const didGoogletagLoadStart = Boolean(window.googletag._loadStarted_);\n    if (!this.loaded || !this.consentReadyEventFired || !didGoogletagLoadStart) {\n        navigator.sendBeacon(\"/javelin/api/cmp_tracker\", new Blob([JSON.stringify({\n                url: window.location.href,\n                event: \"integration_load_anomaly\",\n                userAgent: navigator.userAgent,\n                sourcepointCMPLoaded: this.loaded,\n                gtmDom: wasGtmDomEventPushed,\n                gtmLoad: wasGtmLoadEventPushed,\n                googletagLoadStart: didGoogletagLoadStart,\n                message: \"See attached metadata\",\n                timeElapsed: (Date.now() - this.startTime) / 1000\n            })], { type: \"application/json\" }));\n    }\n    if (this.loaded && !this.consentReadyEventFired) {\n        navigator.sendBeacon(\"/javelin/api/cmp_tracker\", new Blob([JSON.stringify({\n                url: window.location.href,\n                event: \"bbg_consent_ready\",\n                userAgent: navigator.userAgent,\n                message: \"User left the page before CMP was submitted\",\n                timeElapsed: (Date.now() - this.startTime) / 1000\n            })], { type: \"application/json\" }));\n    }\n};\n\nfunction getCMPData() {\n    if (!window.__tcfapi) {\n        console.error(\"[cmp-client] CMP required tcfapi stub missing, exiting init\");\n        return Promise.reject(\"tcfapi stub is missing\");\n    }\n    return new Promise((resolve, reject) => {\n        window.__tcfapi(\"addEventListener\", TCFAPI_VERSION, (tcData, success1) => {\n            if (!success1) {\n                reject(\"CMP did not return proper data\");\n            }\n            else if (tcData.eventStatus === \"tcloaded\" || tcData.eventStatus === \"useractioncomplete\") {\n                const gdprApplies = tcData.gdprApplies;\n                if (gdprApplies) {\n                    resolve({\n                        gdprApplies: true,\n                        iabConsentString: tcData.tcString\n                    });\n                }\n                else {\n                    window.__gpp(\"addEventListener\", (event, success2) => {\n                        if (!success2) {\n                            reject(\"MSPA did not return proper data\");\n                        }\n                        else if (event.pingData.applicableSections.filter((e) => e !== -1).length === 0) {\n                            // GDPR nor MSPS apply here\n                            resolve({\n                                gdprApplies: false,\n                                usPrivacyString: \"1NNN\"\n                            });\n                        }\n                        else if (event.pingData.signalStatus === \"ready\") {\n                            const gppSection = getGPPSection(event.pingData);\n                            resolve({\n                                gdprApplies: false,\n                                usPrivacyString: `1${(gppSection === null || gppSection === void 0 ? void 0 : gppSection.SaleOptOutNotice) === 1 ? \"Y\" : \"N\"}${(gppSection === null || gppSection === void 0 ? void 0 : gppSection.SaleOptOut) === 2 ? \"N\" : \"Y\"}${(gppSection === null || gppSection === void 0 ? void 0 : gppSection.MspaCoveredTransactions) === 1 ? \"Y\" : \"N\"}`\n                            });\n                            const gppListenerId = event.listenerId;\n                            window.__gpp(\"removeEventListener\", (dataGPP, success3) => {\n                                if (!success3) {\n                                    console.warn(`[cmp-client] Failed to remove __gpp event listener with id: ${gppListenerId}`);\n                                }\n                            }, gppListenerId);\n                        }\n                        else {\n                            // Ping data is not ready yet. Let's wait\n                            console.warn(\"[cmp-client] Ping data is not ready yet. waiting...\");\n                        }\n                    });\n                }\n                const listenerId = tcData.listenerId;\n                window.__tcfapi(\"removeEventListener\", TCFAPI_VERSION, (success4) => {\n                    if (!success4) {\n                        console.warn(`[cmp-client] Failed to remove __tcfapi event listener with id: ${listenerId}`);\n                    }\n                }, listenerId);\n            }\n        });\n    });\n}\n\nexport { CmpClient as CmpClientLegacy, CmpClientScripts, manageCookie as cmpCookie, getCMPData, v2 };\n//# sourceMappingURL=exports.js.map\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/* global define */\n\n/* eslint-disable strict */\n\n;(function ($) {\n  'use strict'\n\n  /**\n   * Add integers, wrapping at 2^32.\n   * This uses 16-bit operations internally to work around bugs in interpreters.\n   *\n   * @param {number} x First integer\n   * @param {number} y Second integer\n   * @returns {number} Sum\n   */\n  function safeAdd(x, y) {\n    var lsw = (x & 0xffff) + (y & 0xffff)\n    var msw = (x >> 16) + (y >> 16) + (lsw >> 16)\n    return (msw << 16) | (lsw & 0xffff)\n  }\n\n  /**\n   * Bitwise rotate a 32-bit number to the left.\n   *\n   * @param {number} num 32-bit number\n   * @param {number} cnt Rotation count\n   * @returns {number} Rotated number\n   */\n  function bitRotateLeft(num, cnt) {\n    return (num << cnt) | (num >>> (32 - cnt))\n  }\n\n  /**\n   * Basic operation the algorithm uses.\n   *\n   * @param {number} q q\n   * @param {number} a a\n   * @param {number} b b\n   * @param {number} x x\n   * @param {number} s s\n   * @param {number} t t\n   * @returns {number} Result\n   */\n  function md5cmn(q, a, b, x, s, t) {\n    return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)\n  }\n  /**\n   * Basic operation the algorithm uses.\n   *\n   * @param {number} a a\n   * @param {number} b b\n   * @param {number} c c\n   * @param {number} d d\n   * @param {number} x x\n   * @param {number} s s\n   * @param {number} t t\n   * @returns {number} Result\n   */\n  function md5ff(a, b, c, d, x, s, t) {\n    return md5cmn((b & c) | (~b & d), a, b, x, s, t)\n  }\n  /**\n   * Basic operation the algorithm uses.\n   *\n   * @param {number} a a\n   * @param {number} b b\n   * @param {number} c c\n   * @param {number} d d\n   * @param {number} x x\n   * @param {number} s s\n   * @param {number} t t\n   * @returns {number} Result\n   */\n  function md5gg(a, b, c, d, x, s, t) {\n    return md5cmn((b & d) | (c & ~d), a, b, x, s, t)\n  }\n  /**\n   * Basic operation the algorithm uses.\n   *\n   * @param {number} a a\n   * @param {number} b b\n   * @param {number} c c\n   * @param {number} d d\n   * @param {number} x x\n   * @param {number} s s\n   * @param {number} t t\n   * @returns {number} Result\n   */\n  function md5hh(a, b, c, d, x, s, t) {\n    return md5cmn(b ^ c ^ d, a, b, x, s, t)\n  }\n  /**\n   * Basic operation the algorithm uses.\n   *\n   * @param {number} a a\n   * @param {number} b b\n   * @param {number} c c\n   * @param {number} d d\n   * @param {number} x x\n   * @param {number} s s\n   * @param {number} t t\n   * @returns {number} Result\n   */\n  function md5ii(a, b, c, d, x, s, t) {\n    return md5cmn(c ^ (b | ~d), a, b, x, s, t)\n  }\n\n  /**\n   * Calculate the MD5 of an array of little-endian words, and a bit length.\n   *\n   * @param {Array} x Array of little-endian words\n   * @param {number} len Bit length\n   * @returns {Array<number>} MD5 Array\n   */\n  function binlMD5(x, len) {\n    /* append padding */\n    x[len >> 5] |= 0x80 << len % 32\n    x[(((len + 64) >>> 9) << 4) + 14] = len\n\n    var i\n    var olda\n    var oldb\n    var oldc\n    var oldd\n    var a = 1732584193\n    var b = -271733879\n    var c = -1732584194\n    var d = 271733878\n\n    for (i = 0; i < x.length; i += 16) {\n      olda = a\n      oldb = b\n      oldc = c\n      oldd = d\n\n      a = md5ff(a, b, c, d, x[i], 7, -680876936)\n      d = md5ff(d, a, b, c, x[i + 1], 12, -389564586)\n      c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)\n      b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330)\n      a = md5ff(a, b, c, d, x[i + 4], 7, -176418897)\n      d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)\n      c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341)\n      b = md5ff(b, c, d, a, x[i + 7], 22, -45705983)\n      a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)\n      d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417)\n      c = md5ff(c, d, a, b, x[i + 10], 17, -42063)\n      b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162)\n      a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)\n      d = md5ff(d, a, b, c, x[i + 13], 12, -40341101)\n      c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290)\n      b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329)\n\n      a = md5gg(a, b, c, d, x[i + 1], 5, -165796510)\n      d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632)\n      c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)\n      b = md5gg(b, c, d, a, x[i], 20, -373897302)\n      a = md5gg(a, b, c, d, x[i + 5], 5, -701558691)\n      d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)\n      c = md5gg(c, d, a, b, x[i + 15], 14, -660478335)\n      b = md5gg(b, c, d, a, x[i + 4], 20, -405537848)\n      a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)\n      d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690)\n      c = md5gg(c, d, a, b, x[i + 3], 14, -187363961)\n      b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)\n      a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467)\n      d = md5gg(d, a, b, c, x[i + 2], 9, -51403784)\n      c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)\n      b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734)\n\n      a = md5hh(a, b, c, d, x[i + 5], 4, -378558)\n      d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463)\n      c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)\n      b = md5hh(b, c, d, a, x[i + 14], 23, -35309556)\n      a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060)\n      d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)\n      c = md5hh(c, d, a, b, x[i + 7], 16, -155497632)\n      b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640)\n      a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)\n      d = md5hh(d, a, b, c, x[i], 11, -358537222)\n      c = md5hh(c, d, a, b, x[i + 3], 16, -722521979)\n      b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)\n      a = md5hh(a, b, c, d, x[i + 9], 4, -640364487)\n      d = md5hh(d, a, b, c, x[i + 12], 11, -421815835)\n      c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)\n      b = md5hh(b, c, d, a, x[i + 2], 23, -995338651)\n\n      a = md5ii(a, b, c, d, x[i], 6, -198630844)\n      d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)\n      c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905)\n      b = md5ii(b, c, d, a, x[i + 5], 21, -57434055)\n      a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)\n      d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606)\n      c = md5ii(c, d, a, b, x[i + 10], 15, -1051523)\n      b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799)\n      a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)\n      d = md5ii(d, a, b, c, x[i + 15], 10, -30611744)\n      c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380)\n      b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)\n      a = md5ii(a, b, c, d, x[i + 4], 6, -145523070)\n      d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379)\n      c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)\n      b = md5ii(b, c, d, a, x[i + 9], 21, -343485551)\n\n      a = safeAdd(a, olda)\n      b = safeAdd(b, oldb)\n      c = safeAdd(c, oldc)\n      d = safeAdd(d, oldd)\n    }\n    return [a, b, c, d]\n  }\n\n  /**\n   * Convert an array of little-endian words to a string\n   *\n   * @param {Array<number>} input MD5 Array\n   * @returns {string} MD5 string\n   */\n  function binl2rstr(input) {\n    var i\n    var output = ''\n    var length32 = input.length * 32\n    for (i = 0; i < length32; i += 8) {\n      output += String.fromCharCode((input[i >> 5] >>> i % 32) & 0xff)\n    }\n    return output\n  }\n\n  /**\n   * Convert a raw string to an array of little-endian words\n   * Characters >255 have their high-byte silently ignored.\n   *\n   * @param {string} input Raw input string\n   * @returns {Array<number>} Array of little-endian words\n   */\n  function rstr2binl(input) {\n    var i\n    var output = []\n    output[(input.length >> 2) - 1] = undefined\n    for (i = 0; i < output.length; i += 1) {\n      output[i] = 0\n    }\n    var length8 = input.length * 8\n    for (i = 0; i < length8; i += 8) {\n      output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32\n    }\n    return output\n  }\n\n  /**\n   * Calculate the MD5 of a raw string\n   *\n   * @param {string} s Input string\n   * @returns {string} Raw MD5 string\n   */\n  function rstrMD5(s) {\n    return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))\n  }\n\n  /**\n   * Calculates the HMAC-MD5 of a key and some data (raw strings)\n   *\n   * @param {string} key HMAC key\n   * @param {string} data Raw input string\n   * @returns {string} Raw MD5 string\n   */\n  function rstrHMACMD5(key, data) {\n    var i\n    var bkey = rstr2binl(key)\n    var ipad = []\n    var opad = []\n    var hash\n    ipad[15] = opad[15] = undefined\n    if (bkey.length > 16) {\n      bkey = binlMD5(bkey, key.length * 8)\n    }\n    for (i = 0; i < 16; i += 1) {\n      ipad[i] = bkey[i] ^ 0x36363636\n      opad[i] = bkey[i] ^ 0x5c5c5c5c\n    }\n    hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8)\n    return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))\n  }\n\n  /**\n   * Convert a raw string to a hex string\n   *\n   * @param {string} input Raw input string\n   * @returns {string} Hex encoded string\n   */\n  function rstr2hex(input) {\n    var hexTab = '0123456789abcdef'\n    var output = ''\n    var x\n    var i\n    for (i = 0; i < input.length; i += 1) {\n      x = input.charCodeAt(i)\n      output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f)\n    }\n    return output\n  }\n\n  /**\n   * Encode a string as UTF-8\n   *\n   * @param {string} input Input string\n   * @returns {string} UTF8 string\n   */\n  function str2rstrUTF8(input) {\n    return unescape(encodeURIComponent(input))\n  }\n\n  /**\n   * Encodes input string as raw MD5 string\n   *\n   * @param {string} s Input string\n   * @returns {string} Raw MD5 string\n   */\n  function rawMD5(s) {\n    return rstrMD5(str2rstrUTF8(s))\n  }\n  /**\n   * Encodes input string as Hex encoded string\n   *\n   * @param {string} s Input string\n   * @returns {string} Hex encoded string\n   */\n  function hexMD5(s) {\n    return rstr2hex(rawMD5(s))\n  }\n  /**\n   * Calculates the raw HMAC-MD5 for the given key and data\n   *\n   * @param {string} k HMAC key\n   * @param {string} d Input string\n   * @returns {string} Raw MD5 string\n   */\n  function rawHMACMD5(k, d) {\n    return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))\n  }\n  /**\n   * Calculates the Hex encoded HMAC-MD5 for the given key and data\n   *\n   * @param {string} k HMAC key\n   * @param {string} d Input string\n   * @returns {string} Raw MD5 string\n   */\n  function hexHMACMD5(k, d) {\n    return rstr2hex(rawHMACMD5(k, d))\n  }\n\n  /**\n   * Calculates MD5 value for a given string.\n   * If a key is provided, calculates the HMAC-MD5 value.\n   * Returns a Hex encoded string unless the raw argument is given.\n   *\n   * @param {string} string Input string\n   * @param {string} [key] HMAC key\n   * @param {boolean} [raw] Raw output switch\n   * @returns {string} MD5 output\n   */\n  function md5(string, key, raw) {\n    if (!key) {\n      if (!raw) {\n        return hexMD5(string)\n      }\n      return rawMD5(string)\n    }\n    if (!raw) {\n      return hexHMACMD5(key, string)\n    }\n    return rawHMACMD5(key, string)\n  }\n\n  if (typeof define === 'function' && define.amd) {\n    define(function () {\n      return md5\n    })\n  } else if (typeof module === 'object' && module.exports) {\n    module.exports = md5\n  } else {\n    $.md5 = md5\n  }\n})(this)\n","/*! js-cookie v3.0.5 | MIT */\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n    var current = global.Cookies;\n    var exports = global.Cookies = factory();\n    exports.noConflict = function () { global.Cookies = current; return exports; };\n  })());\n})(this, (function () { 'use strict';\n\n  /* eslint-disable no-var */\n  function assign (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        target[key] = source[key];\n      }\n    }\n    return target\n  }\n  /* eslint-enable no-var */\n\n  /* eslint-disable no-var */\n  var defaultConverter = {\n    read: function (value) {\n      if (value[0] === '\"') {\n        value = value.slice(1, -1);\n      }\n      return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n    },\n    write: function (value) {\n      return encodeURIComponent(value).replace(\n        /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n        decodeURIComponent\n      )\n    }\n  };\n  /* eslint-enable no-var */\n\n  /* eslint-disable no-var */\n\n  function init (converter, defaultAttributes) {\n    function set (name, value, attributes) {\n      if (typeof document === 'undefined') {\n        return\n      }\n\n      attributes = assign({}, defaultAttributes, attributes);\n\n      if (typeof attributes.expires === 'number') {\n        attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n      }\n      if (attributes.expires) {\n        attributes.expires = attributes.expires.toUTCString();\n      }\n\n      name = encodeURIComponent(name)\n        .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n        .replace(/[()]/g, escape);\n\n      var stringifiedAttributes = '';\n      for (var attributeName in attributes) {\n        if (!attributes[attributeName]) {\n          continue\n        }\n\n        stringifiedAttributes += '; ' + attributeName;\n\n        if (attributes[attributeName] === true) {\n          continue\n        }\n\n        // Considers RFC 6265 section 5.2:\n        // ...\n        // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n        //     character:\n        // Consume the characters of the unparsed-attributes up to,\n        // not including, the first %x3B (\";\") character.\n        // ...\n        stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n      }\n\n      return (document.cookie =\n        name + '=' + converter.write(value, name) + stringifiedAttributes)\n    }\n\n    function get (name) {\n      if (typeof document === 'undefined' || (arguments.length && !name)) {\n        return\n      }\n\n      // To prevent the for loop in the first place assign an empty array\n      // in case there are no cookies at all.\n      var cookies = document.cookie ? document.cookie.split('; ') : [];\n      var jar = {};\n      for (var i = 0; i < cookies.length; i++) {\n        var parts = cookies[i].split('=');\n        var value = parts.slice(1).join('=');\n\n        try {\n          var found = decodeURIComponent(parts[0]);\n          jar[found] = converter.read(value, found);\n\n          if (name === found) {\n            break\n          }\n        } catch (e) {}\n      }\n\n      return name ? jar[name] : jar\n    }\n\n    return Object.create(\n      {\n        set,\n        get,\n        remove: function (name, attributes) {\n          set(\n            name,\n            '',\n            assign({}, attributes, {\n              expires: -1\n            })\n          );\n        },\n        withAttributes: function (attributes) {\n          return init(this.converter, assign({}, this.attributes, attributes))\n        },\n        withConverter: function (converter) {\n          return init(assign({}, this.converter, converter), this.attributes)\n        }\n      },\n      {\n        attributes: { value: Object.freeze(defaultAttributes) },\n        converter: { value: Object.freeze(converter) }\n      }\n    )\n  }\n\n  var api = init(defaultConverter, { path: '/' });\n  /* eslint-enable no-var */\n\n  return api;\n\n}));\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};exports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;\nexports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=function(){throw Error(\"act(...) is not supported in production builds of React.\");};\nexports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};exports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};\nexports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};exports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};\nexports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.2.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { logError } from \"./util/monitoring/clientUtilsNR\";\n\nexport default class DependencyLoader {\n\n    private _scriptLoadPromise: Promise<unknown> | null = null;\n\n    whenReady() {\n        return this._scriptLoadPromise ? this._scriptLoadPromise.then(() => this) : Promise.reject(this);\n    }\n\n    loadScriptDependency(src: string, opt = {}) {\n        this._scriptLoadPromise = new Promise((resolve) => {\n            window.Spritz.cmd.push(() => {\n                resolve(window.Spritz.inject(src, opt));\n            });\n        }).catch((err) => logError(err));\n\n        return this._scriptLoadPromise;\n    }\n\n    destroy() {\n        this._scriptLoadPromise = null;\n    }\n\n}\n","import UAParser from \"ua-parser-js\";\nimport Cookies from \"js-cookie\";\nimport { CmpInitResponse } from \"@foundation/cmp-client\";\nimport AdBlocker from \"./ad_blocker/AdBlocker\";\nimport AdDebugRegistry from \"./debug/AdDebugRegistry\";\nimport CompanionGroupCoordinator from \"./refreshing/CompanionGroupCoordinator\";\nimport GPT from \"./gpt/GPT\";\nimport TaglessAd from \"./taglessAd/TaglessAd\";\nimport DoubleVerifyTracking from \"./doubleVerify/DoubleVerifyTracking\";\nimport identity from \"./util/identity\";\nimport PostMessages from \"./communication/PostMessages\";\nimport Renderer from \"./rendering/Renderer\";\nimport UserInfo from \"./session/UserInfo\";\nimport Viewability from \"./viewability/Viewability\";\nimport Visibility from \"./viewability/Visibility\";\nimport getObjectSignature from \"./util/getObjectSignature\";\nimport PerformanceMonitor from \"./util/monitoring/PerformanceMonitor\";\nimport makeMeasure from \"./util/makeMeasure\";\nimport Ad from \"./gpt/Ad\";\nimport getUserConsentData from \"./util/consent\";\nimport Bombora from \"./bombora/Bombora\";\nimport fireEREvt from \"./util/eventRecorderClient\";\nimport { urlModifier } from \"./util/targetingModifiers\";\nimport AdsServiceClient from \"./adsService/AdsServiceClient\";\nimport { doubleVerifyScriptUrl } from \"./doubleVerify/doubleVerifyScript\";\nimport { checkIfTaglessAdEnabled } from \"./util/pageEnabledChecker\";\nimport { EventRecorderLoader } from \"./eventrecorder/EventRecorderLoader\";\nimport { AdContextData, AdOptions, Destructible, SimpleCb, SparkleInitOptions, SparkleStub, TargetingDecorator } from \"./type\";\nimport { Targeting } from \"./interfaces/TargetingProvider\";\nimport SlotRenderEndedEvent from \"./gpt/SlotRenderEndedEvent\";\nimport CompanionGroup from \"./refreshing/CompanionGroup\";\nimport { WatchlistProvider } from \"./watchlists/WatchlistProvider\";\n\nconst DISABLE_SPARKLE_COOKIE_NAME = \"term\";\n\nconst SET_IFRAME_HEIGHT_METHOD = \"setIframeHeight\";\nconst SET_IFRAME_DIMENSIONS_METHOD = \"setIframeDimensions\";\n\nconst SUBSCRIBER_TARGETING_KEY = \"subscriber\";\n\nfunction composeFunctions(listOfFunctions: TargetingDecorator[], initialValue: Targeting) {\n    return listOfFunctions.reduce(\n        async (oldValue, newFunction) => newFunction(await oldValue),\n        Promise.resolve(initialValue)\n    );\n}\n\nconst makeSetIframeHeightListenerFor = (ad: Ad) =>\n    ({ height }: { height: string }) => ad.setHeight(height);\nconst makeSetIframeDimensionsListenerFor = (ad: Ad) =>\n    ({ width, height }: { width: string, height: string }) => ad.setDimensions(width, height);\n\nconst FALL_BACK_AD_PAGE_IDS = [\"industries\"];\nconst CONSENT_TIMEOUT_PAGE_IDS = [\"industries\"];\nconst checkIfFallbackAdEnabled = (pageId: string) => FALL_BACK_AD_PAGE_IDS.includes(pageId);\nconst checkIfConsentTimeoutEnabled = (pageId: string) => CONSENT_TIMEOUT_PAGE_IDS.includes(pageId);\n\nexport default class Sparkle implements Destructible {\n\n    adCodeDecoratorFunction: (adCode: string) => string = identity;\n    userInfo = new UserInfo();\n    adsServiceClient: AdsServiceClient;\n    watchlistProvider: WatchlistProvider;\n    gpt: GPT;\n    gamTaglessAd: TaglessAd;\n    postMessages: PostMessages;\n    viewability: Viewability;\n    visibility: Visibility;\n    renderer: Renderer;\n    bombora: Bombora;\n\n    cmd: { push: (cb: SimpleCb) => void } = [] as SimpleCb[];\n\n    initialized = false;\n    initPending = false;\n\n    isDecoupled = false;\n\n    isFallbackAdEnabled = false;\n\n    isConsentTimeoutEnabled = false;\n\n    isTaglessAdEnabled = false;\n\n    disabled = Cookies.get(DISABLE_SPARKLE_COOKIE_NAME) === \"equality\";\n\n    /**\n     * @type {string}\n     */\n    version = process.env.VERSION;\n\n    /**\n     * Queue for all methods invoked prior to init()\n     * @type {Function[]}\n     * @private\n     */\n    _initQueue: SimpleCb[] = [];\n    /**\n     * @type {*[]}\n     * @private\n     */\n    _targets = [];\n\n    /**\n     * @type {*[]}\n     * @private\n     */\n    _destructibles: Destructible[] = [];\n\n    /**\n     * @type {PerformanceMonitor}\n     * @private\n     */\n    _performanceMonitor = new PerformanceMonitor(\"Sparkle\");\n\n    /**\n     * @type {Function}\n     * @private\n     */\n    _measure = makeMeasure(new PerformanceMonitor(\"Sparkle\"));\n\n    /**\n     * @type {AdDebugRegistry}\n     * @private\n     */\n    _adDebugRegistry = new AdDebugRegistry();\n\n    /**\n     * @type {CompanionGroupCoordinator}\n     * @private\n     */\n    _companionGroupCoordinator = new CompanionGroupCoordinator();\n\n    _adMap: Map<string, Ad> = new Map();\n\n    GPT = {\n        html: GPT.html\n    };\n\n    /**\n     * @param {Object|Sparkle} [stub]\n     * @return {Sparkle}\n     */\n    constructor(stub: SparkleStub = {}) {\n        const stubSignature = stub && getObjectSignature(Object.getPrototypeOf(stub));\n        const selfSignature = getObjectSignature(Object.getPrototypeOf(this));\n\n        // Check if stub is already an instance of Sparkle\n        if (stubSignature === selfSignature) {\n            return stub as this;\n        }\n\n        this.cmd = stub && stub.cmd || this.cmd;\n        this.cmd.push = (cb) => {\n            if (typeof cb === \"function\") cb();\n        };\n    }\n\n    showDebugInformationOnRender() {\n        PerformanceMonitor.printInstructions();\n        this._adDebugRegistry.showDebugInformationOnRender();\n\n        return this;\n    }\n\n    _init({\n        disableTrigr = false,\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        useCachedConsent = false,\n        networkCode,\n        breakpoints,\n        adCodeDecorator = identity,\n        adBlockerShouldBeBlocked = true,\n        pageTargeting = {},\n        observerOptions,\n        isDecoupled = false,\n        dvScriptUrl = doubleVerifyScriptUrl,\n        adContextData = {},\n        application,\n        enableEventRecorder = false,\n        excludeTargetingTypes\n    }: SparkleInitOptions) {\n        new EventRecorderLoader({ application, enabled: enableEventRecorder }).init();\n\n        fireEREvt(\"ad-init\", { breakpoints, pageTargeting });\n\n        this.isDecoupled = isDecoupled;\n\n        const { page: pageId = \"\" } = pageTargeting;\n\n        this.isFallbackAdEnabled = checkIfFallbackAdEnabled(pageId);\n        this.isConsentTimeoutEnabled = checkIfConsentTimeoutEnabled(pageId);\n\n        this.isTaglessAdEnabled = checkIfTaglessAdEnabled(pageId);\n\n        if (this.disabled) {\n            return Promise.resolve();\n        }\n\n        const ua = new UAParser();\n        const { name, major } = ua.getBrowser();\n\n        const doubleVerifyTracking = new DoubleVerifyTracking(dvScriptUrl);\n\n        this.adCodeDecoratorFunction = adCodeDecorator;\n        this.adsServiceClient = new AdsServiceClient(\n            this.userInfo,\n            pageId,\n            isDecoupled,\n            true, // useCachedTargeting\n            adContextData,\n            excludeTargetingTypes,\n            disableTrigr\n        );\n        this.watchlistProvider = new WatchlistProvider(this.userInfo);\n        // Trigger process of getting targeting kv from AdService\n        // It will fetch the IVT related targetings.\n        // If isDecoupled flag is enabled, we will get back the personalization\n        // targetings too.\n        this.adsServiceClient.getTargetingFromAdsService();\n        this.gpt = new GPT(\n            networkCode,\n            doubleVerifyTracking,\n            this.adsServiceClient,\n            this.watchlistProvider,\n            isDecoupled\n        );\n\n        // `subscriber` is page-level rather than slot-level targeting: a host\n        // that sets it on its own slots still wins (GAM applies slot-level\n        // over page-level), but nothing else can shadow it and leave it\n        // stale for the life of the slot. Doesn't cover a host passing\n        // `subscriber` via `pageTargeting`/`addPageTargeting` instead -\n        // not observed in practice.\n        //\n        // Resolved once here for the whole page. If the reg-ui-client is not\n        // up yet this falls back to the previous page load's value and the\n        // listener below re-publishes once corrected.\n        this.userInfo.onSubscriberChange(\n            (subsInfo) => this.gpt.setTargeting(SUBSCRIBER_TARGETING_KEY, subsInfo)\n        );\n        this.userInfo.resolveSubscriberInfo();\n\n        this.gamTaglessAd = new TaglessAd();\n        this.postMessages = new PostMessages();\n        this.viewability = new Viewability(breakpoints);\n        this.visibility = new Visibility();\n        this.renderer = new Renderer(\n            this.gpt,\n            this.gamTaglessAd,\n            this.isTaglessAdEnabled,\n            this.viewability,\n            this.visibility,\n            null,\n            observerOptions\n        );\n\n        if (this.isDecoupled) {\n            // enable debugAds\n            //\n            // debugAds is currently enable in foundation/sparkle, which\n            // happens after decouple ad is created. Therefore we need to\n            // enable debugAds here.\n            // In the future, this kind of logic should probably be migrated\n            // from foundation to bb.ads for all ads\n            // @ts-expect-error ts-migration\n            const urlObj = new URL(window.location);\n\n            if (urlObj.searchParams.get(\"debugAds\") === \"true\") {\n                this.showDebugInformationOnRender();\n            }\n\n        }\n\n        this.bombora = new Bombora(this.gpt);\n\n        this.gpt.setTargeting(\"browser\", `${ name }${ major }`);\n\n        /**\n         * Register objects that can be destroyed\n         * @type {*[]}\n         * @private\n         */\n        this._destructibles = [\n            ...this._destructibles,\n            this._adDebugRegistry,\n            this._companionGroupCoordinator,\n            this.gpt,\n            this.postMessages,\n            this.renderer,\n            this.userInfo,\n            this.viewability,\n            this.visibility\n        ];\n\n        /**\n         * Automatic clean-up before leaving the page\n         */\n        // Disabling this error to see if this fixes errors with Bazaar new Nav launch\n        // window.addEventListener(\"beforeunload\", () => this.destroy());\n\n        return this._measure(\"waitForUserConsent\", getUserConsentData, this.isConsentTimeoutEnabled)\n            .then((consentData) => {\n                try {\n                    this.bombora.init();\n                } catch (err) {\n                    console.error(err);\n                }\n\n                try {\n                    doubleVerifyTracking.init();\n                } catch (err) {\n                    console.error(err);\n                }\n\n                if (!consentData && this.isConsentTimeoutEnabled) {\n                    fireEREvt(\"ad-consent-timeout\");\n                    this.renderer.setFallbackFlag(true);\n                    Promise.resolve();\n                } else {\n                    this._measure(\"addPageTargeting\", this.initPageTargeting, pageTargeting, consentData);\n                }\n            })\n            .then(() => {\n                if (adBlockerShouldBeBlocked) {\n                    AdBlocker.blockTheAdBlocker();\n                }\n\n                this.initialized = true;\n                this._flushInitQueue();\n            })\n            .catch((err) => console.error(err));\n    }\n\n    init(options: SparkleInitOptions): void {\n        if (this.initPending || this.initialized) {\n            return;\n        }\n\n        this.initPending = true;\n        this._measure(\"initialize\", this._init, options)\n            .finally(() => {\n                this.initPending = false;\n            });\n    }\n\n    addPageTargeting(pageTargeting: Targeting) {\n        return Promise.resolve(this._setGptTargeting(pageTargeting));\n    }\n\n    initPageTargeting(pageTargeting: Targeting, consentData: CmpInitResponse) {\n        fireEREvt(\"ad-page-targeting\");\n\n        return this.gpt.setPersonalization(this.userInfo, consentData.gdprApplies)\n            .then((uid) => {\n                const { gdprApplies, usPrivacyString, iabConsentString } = consentData;\n                const exp_pref = Cookies.get(\"exp_pref\");\n                const newTargeting = {\n                    exp_pref,\n                    uid,\n                    gdpr: gdprApplies ? \"1\" : \"0\",\n                    us_privacy: usPrivacyString,\n                    gdpr_consent: iabConsentString,\n                    ...pageTargeting\n                };\n\n                this.gamTaglessAd.addTargeting({\n                    gdpr: newTargeting.gdpr,\n                    us_privacy: newTargeting.us_privacy,\n                    gdpr_consent: newTargeting.gdpr_consent\n                });\n\n                this._setGptTargeting(newTargeting);\n                fireEREvt(\"ad-page-targeting-end\");\n            });\n    }\n\n    _setGptTargeting(targeting: Record<string, unknown>) {\n        Object.keys(targeting)\n            .filter((key) => targeting[key] !== undefined && targeting[key] !== null)\n            .forEach((key) => this.gpt.setTargeting(key, targeting[key] as string));\n    }\n\n    async createAd(adOptions: AdOptions): Promise<Ad> {\n        if (this.disabled) {\n            return new Promise(() => {\n            });\n        }\n\n        /**\n         * Queue ad creation until Sparkle is initialized\n         */\n        if (!this.initialized) {\n            return this._enqueue(() => this.createAd(adOptions));\n        }\n\n        const {\n            containerId,\n            adCode,\n            dimensions,\n            targeting,\n            strategy,\n            viewportOffset = 0,\n            targetingModifiers = [],\n            isInterstitial = false,\n            isDecoupled = false,\n            shadowHostElement\n        } = adOptions;\n\n        fireEREvt(\"ad-create\", { \"container-id\": containerId, \"ad-code\": adCode });\n\n        if (!(containerId && adCode && dimensions)) {\n            const msg = `Sparkle#createAd requires containerId, adCode and dimensions ${ containerId }, ${ adCode }, ${ dimensions }`;\n\n            fireEREvt(\"ad-err\", msg);\n            throw new Error(msg);\n        }\n\n        /**\n         * Performance ID is used for tagging performance events\n         * @type {string}\n         */\n        const performanceId = `${ containerId }@${ targeting.position }`;\n\n        const createAdMetric = this._performanceMonitor.createMetric(`createAd-${ performanceId }`);\n\n        // include targeting modifiers time as part of the createAd metric\n        createAdMetric.start();\n\n        const newTargeting = await composeFunctions(\n            [\n                ...targetingModifiers,\n                ...(isDecoupled ? [urlModifier] : [])\n            ],\n            targeting\n        );\n\n        newTargeting.performanceId = performanceId;\n\n        // `subscriber` is deliberately not in the ad's targeting - it is set\n        // page-level in _init. Report what the request will actually carry:\n        // a host-supplied slot-level value overrides page-level in GAM.\n        const subscriber = (newTargeting.subscriber as string | undefined) ??\n            this.userInfo.getSubscriberInfo();\n\n        const adRenderMetric = this._performanceMonitor.createMetric(`renderAd-${ newTargeting.performanceId }`);\n        const adLoadMetric = this._performanceMonitor.createMetric(`loadAd-${ newTargeting.performanceId }`);\n\n        const ad = this.gpt.createAd(\n            this.viewability,\n            containerId,\n            this.adCodeDecoratorFunction(adCode),\n            dimensions,\n            newTargeting,\n            isDecoupled,\n            shadowHostElement\n        )\n            .setViewportOffset(viewportOffset)\n            .setInterstitialFlag(isInterstitial);\n\n        this._adDebugRegistry.push(ad, containerId, this.gpt);\n        // for now, only store decouple ad slot\n        if (isDecoupled) {\n            this._adMap.set(containerId, ad);\n        }\n        // dispatch create ad event\n        ad.notifyAdCreated();\n\n        this.postMessages.addEventListener(\n            ad.getId(),\n            SET_IFRAME_HEIGHT_METHOD,\n            makeSetIframeHeightListenerFor(ad)\n        );\n        this.postMessages.addEventListener(\n            ad.getId(),\n            SET_IFRAME_DIMENSIONS_METHOD,\n            makeSetIframeDimensionsListenerFor(ad)\n        );\n\n        ad.addEventListener(Ad.EVENTS.ON_BEFORE_RENDER, () => {\n            adRenderMetric.start();\n        }, { once: true });\n        ad.addEventListener<SlotRenderEndedEvent>(Ad.EVENTS.ON_RENDER,\n            (event) => {\n                adRenderMetric.end(event.toJSON());\n                adLoadMetric.start();\n            }, { once: true });\n        ad.addEventListener<SlotRenderEndedEvent>(Ad.EVENTS.ON_EMPTY,\n            (event) => {\n                adRenderMetric.end(event.toJSON());\n                adLoadMetric.start();\n\n                if (this.isFallbackAdEnabled) {\n                    this.renderer.setFallbackFlag(true);\n                    this.renderer.render(ad, { strategy });\n                }\n\n            }, { once: true });\n        ad.addEventListener(Ad.EVENTS.ON_LOAD, () => adLoadMetric.end(), { once: true });\n        this.renderer.render(ad, { strategy });\n\n        createAdMetric.end();\n        fireEREvt(\"ad-create-end\", { \"container-id\": containerId, subscriber: subscriber || null });\n\n        this.adsServiceClient.setAd(ad);\n\n        return ad;\n    }\n\n    getAd(containerId: string): Ad | undefined {\n        return this._adMap.get(containerId);\n    }\n\n    // deprecated\n    createInterstitialAd(adOptions: AdOptions): Promise<Ad> {\n        Object.defineProperties(adOptions, {\n            isInterstitial: { value: true },\n            strategy: { value: \"always\" },\n            dimensions: { value: [0] }\n        });\n\n        return this.createAd(adOptions);\n    }\n\n    disableCompanionAdBackfilling(): this {\n        if (!this.initialized) {\n            this._enqueue(() => this.gpt.setRefreshUnfilledSlots(false));\n\n            return this;\n        }\n\n        this.gpt.setRefreshUnfilledSlots(false);\n\n        return this;\n    }\n\n    enableVideoAds(): this {\n        if (!this.initialized) {\n            this._enqueue(() => this.gpt.enableVideoAds());\n\n            return this;\n        }\n\n        this.gpt.enableVideoAds();\n\n        return this;\n    }\n\n    getCompanionGroup(companionId: string): CompanionGroup {\n        return this._companionGroupCoordinator.findOrCreate(companionId);\n    }\n\n    clearAllCompanionChildren(): void {\n        this._companionGroupCoordinator.clearAllChildren();\n    }\n\n    refresh(ads: Ad[], options = {}) {\n        const refreshAds = () => {\n            if (!this.renderer) return;\n\n            ads.forEach((ad: Ad) => {\n                const name = `refreshAd-${ ad.getTargeting().performanceId }.${ ad.getAndIncrementRefreshAttempt() }`;\n                const adRefreshMetric = this._performanceMonitor.createMetric(name);\n\n                ad.addEventListener(Ad.EVENTS.ON_BEFORE_RENDER, () => {\n                    adRefreshMetric.start();\n                }, { once: true });\n                ad.addEventListener<SlotRenderEndedEvent>(Ad.EVENTS.ON_RENDER,\n                    (event) => {\n                        adRefreshMetric.end(event.toJSON());\n                    }, { once: true });\n                ad.addEventListener<SlotRenderEndedEvent>(Ad.EVENTS.ON_EMPTY,\n                    (event) => {\n                        adRefreshMetric.end(event.toJSON());\n                    }, { once: true });\n            });\n\n            this.renderer.refresh(ads, options);\n        };\n\n        if (!this.initialized) {\n            this._enqueue(refreshAds);\n\n            return this;\n        }\n\n        refreshAds();\n\n        return this;\n    }\n\n    destroy() {\n        // @ts-expect-error ts-migration\n        this._adDebugRegistry = null;\n        // @ts-expect-error ts-migration\n        this._companionGroupCoordinator = null;\n        // @ts-expect-error ts-migration\n        this._targets = null;\n        // @ts-expect-error ts-migration\n        this.adCodeDecoratorFunction = null;\n        // @ts-expect-error ts-migration\n        this.gpt = null;\n        // @ts-expect-error ts-migration\n        this.postMessages = null;\n        // @ts-expect-error ts-migration\n        this.renderer = null;\n        // @ts-expect-error ts-migration\n        this.viewability = null;\n        // @ts-expect-error ts-migration\n        this.visibility = null;\n\n        PerformanceMonitor.metrics.clear();\n\n        let destructible = this._destructibles.shift();\n\n        while (destructible) {\n            if (typeof destructible.destroy === \"function\") {\n                destructible.destroy();\n            }\n            destructible = this._destructibles.shift();\n        }\n    }\n\n    showDebugInformation() {\n        this._adDebugRegistry.showDebugInformation(this.gpt);\n\n        return this;\n    }\n\n    updateCorrelator() {\n        if (!this.initialized) {\n            this._enqueue(() => this.gpt.updateCorrelator());\n\n            return this;\n        }\n\n        this.gpt.updateCorrelator();\n\n        return this;\n    }\n\n    resetAdContext(newAdContextData: AdContextData) {\n        // The AdServiceClient will update the ad context data\n        // and then fetch targetings again from AdService\n        this.adsServiceClient.resetTargetings(newAdContextData);\n\n        return this;\n    }\n\n    /**\n     * Queues execution until initialized\n     * @param cb\n     * @returns {Promise<*>}\n     * @private\n     */\n    _enqueue<T>(cb: () => T): Promise<T> {\n        return new Promise((resolve) => {\n            this._initQueue.push(() => resolve(cb()));\n        });\n    }\n\n    private _flushInitQueue() {\n        // @ts-expect-error ts-migration\n        this._initQueue.push = (cb) => {\n            if (typeof cb === \"function\") cb();\n        };\n\n        let cb = this._initQueue.shift();\n\n        while (cb) {\n            cb();\n            cb = this._initQueue.shift();\n        }\n    }\n\n    _flushQueue() {\n        if (Array.isArray(this.cmd)) {\n            let cb = this.cmd.shift();\n\n            while (cb) {\n                if (typeof cb === \"function\") cb();\n                cb = this.cmd.shift();\n            }\n        }\n    }\n\n    /**\n     * Used inside Dev Tools console to generate a table of performance measurements\n     */\n    logPerformanceInfo(): void {\n        PerformanceMonitor.logPerformanceInfo();\n    }\n\n    /**\n     * Used inside Dev Tools console to generate a table of performance measurements for an Ad\n     */\n    logIndividualAdPerformance(position: string): void {\n        PerformanceMonitor.logIndividualAdPerformance(position);\n    }\n\n}\n","import { ServerStorage, Storage } from \"../util/Storage\";\nimport AdBlockerModal from \"./AdBlockerModal\";\n\nconst VISIT_MULTIPLIER = 5; // user will be shown the blocker every 5 visits after the 1st\nconst MESSAGE_DURATION = 5;\nconst AD_BLOCKER_NAME_KEY = \"bbAdBlocker\";\nconst AD_BLOCKER_INCREMENTED_KEY = \"bbAbIncremented\";\nconst AD_BLOCKER_MULTIPLIER_KEY = \"bbAbVisitMultiplier\";\nconst AD_BLOCKER_DURATION_KEY = \"bbAbMessageDuration\";\nconst AD_BLOCKER_VISITS_KEY = \"bbAbVisits\";\nconst AD_BLOCKER_MESSAGE_KEY = \"bbAbMessage\";\nconst AD_BLOCKER_COOKIE_EXPIRATION = 365; // days\nconst CONTAINER_ID = \"adBlockerContainer\";\nconst MESSAGE_ID = \"adBlockerMessage\";\nconst CONTINUE_LINK_ID = \"adBlockerContinue\";\nconst TIMER_ID = \"adBlockerTimer\";\nconst DEFAULT_LOCAL_STORAGE_OBJECT = {\n    [AD_BLOCKER_DURATION_KEY]: MESSAGE_DURATION,\n    [AD_BLOCKER_MULTIPLIER_KEY]: VISIT_MULTIPLIER,\n    [AD_BLOCKER_MESSAGE_KEY]: AdBlockerModal.getBlockerMessage()\n};\n\nexport type StorageArg = { session: ServerStorage, local: ServerStorage, cookie: ServerStorage };\n\n/**\n * @class AdBlocker\n */\nexport default class AdBlocker {\n\n    /**\n     * Serves modal to users who utilize ad blockers\n     * asking them to add our site(s) to allowlist.\n     */\n\n    static blockTheAdBlocker() {\n\n        if (!validBody()) {\n            return;\n        }\n\n        insertFakeAdInDom();\n\n        checkForAdBlockerScript()\n            .then((result) => {\n                checkForAdBlockerBehavior({\n                    hasAdBlocker: handleAdBlocker,\n                    withoutAdBlocker: clearAdBlockerData,\n                    javascriptTest: result\n                });\n            });\n    }\n\n}\n\n/**\n * Confirms document has valid body\n * for testing in consuming apps.\n *\n\n * @returns {boolean}\n */\nfunction validBody() {\n    return Boolean(document.body);\n}\n\n/**\n * Creates fake ad div and places\n * it on the page with styles.\n */\nfunction insertFakeAdInDom() {\n    const fakeAd = document.createElement(\"div\");\n\n    fakeAd.setAttribute(\"class\", AdBlockerModal.fakeAdClasses());\n    fakeAd.setAttribute(\"style\", AdBlockerModal.fakeAdStyles());\n    document.body.appendChild(fakeAd);\n}\n\n/**\n * Fires GA event only if adBlocker\n * usage has been detected\n *\n * @param {String} source\n */\nfunction fireGAEvent(source: string) {\n    window.dataLayer = window.dataLayer || [];\n\n    window.dataLayer.push({\n        event: \"adBlockerInUse\",\n        eventCategory: \"Ad Blocker\",\n        eventAction: \"detected ad blocker use\",\n        eventLabel: source\n    });\n}\n\n/**\n * Uses html div and computed style attributes to\n * test for ad blocker. If user does, initiates the blocking\n * workflow. If user does not have blocker,\n * clears data from local/session/cookie\n * storage and exits.\n *\n * @param {object} options\n * @param {Function} options.hasAdBlocker\n * @param {Function} options.withoutAdBlocker\n * @param {Boolean} options.javascriptResult\n */\nfunction checkForAdBlockerBehavior(\n    { hasAdBlocker, withoutAdBlocker, javascriptTest }:\n    { hasAdBlocker: () => void, withoutAdBlocker: () => void, javascriptTest: boolean }\n) {\n\n    if (javascriptTest) {\n        fireGAEvent(\"javascript\");\n    }\n\n    if (window.getComputedStyle !== undefined) {\n\n        setTimeout(() => {\n            const fakeAdElement = window.document.getElementsByClassName(\"pub_300x250\")[0];\n            const fakeAdTemp = window.getComputedStyle(fakeAdElement, null);\n\n            if (fakeAdTemp && (fakeAdTemp.getPropertyValue(\"display\") === \"none\" || fakeAdTemp.getPropertyValue(\"visibility\") === \"hidden\" || fakeAdTemp.getPropertyValue(\"height\") === \"0\")) {\n                fireGAEvent(\"fake element\");\n                hasAdBlocker();\n\n                return;\n            }\n\n            withoutAdBlocker();\n        }, 2500);\n    }\n\n}\n\n/**\n * Clears data from sessionStorage, localStorage\n * and cookies\n */\nexport function clearAdBlockerData() {\n    const _storage = {\n        local: Storage.createLocalStorage(),\n        session: Storage.createSessionStorage(),\n        cookie: Storage.createCookieStorage(AD_BLOCKER_COOKIE_EXPIRATION)\n    };\n\n    if (!userHasStorage(_storage)) {\n        return;\n    }\n\n    const sessionStorage = _storage.session;\n    const localStorage = _storage.local;\n    const cookieStorage = _storage.cookie;\n    const adBlockerObject = DEFAULT_LOCAL_STORAGE_OBJECT;\n\n    // @ts-expect-error this doesn't seem correct but not changing logic in Q4\n    if (sessionStorage && !sessionStorage.AD_BLOCKER_NAME_KEY) {\n        cookieStorage.remove(AD_BLOCKER_VISITS_KEY);\n    }\n\n    Object.keys(adBlockerObject).forEach((key) => localStorage.remove(key));\n\n    sessionStorage.set(AD_BLOCKER_INCREMENTED_KEY, \"true\");\n}\n\n/**\n * User has an ad blocker, now deduce whether\n * they should have the blocker blocked, and\n * compile data needed to create and render\n * the modal.\n */\nexport function handleAdBlocker() {\n    const _storage = {\n        local: Storage.createLocalStorage(),\n        session: Storage.createSessionStorage(),\n        cookie: Storage.createCookieStorage(AD_BLOCKER_COOKIE_EXPIRATION)\n    };\n\n    if (!userHasStorage(_storage) || userShouldNotBeBlocked(_storage)) {\n        return;\n    }\n\n    _storage.session.set(AD_BLOCKER_NAME_KEY, \"true\");\n    setAdBlockerData(_storage);\n    blockTheAdBlocker(_storage);\n}\n\n/**\n * Sets relevant data into user's\n * localStorage, sessionStorage and cookies\n */\nexport function setAdBlockerData(storage: StorageArg) {\n    const sessionStorage = storage.session;\n    const localStorage = storage.local;\n    const adBlockerObject = DEFAULT_LOCAL_STORAGE_OBJECT;\n    const cookieStorage = storage.cookie;\n\n    const visitsFromCookie = cookieStorage.get(AD_BLOCKER_VISITS_KEY);\n    const visits = visitsFromCookie ? parseInt(visitsFromCookie, 10) + 1 : 1;\n\n    // @ts-expect-error this doesn't seem correct but not changing logic in Q4\n    cookieStorage.set(AD_BLOCKER_VISITS_KEY, visits, AD_BLOCKER_COOKIE_EXPIRATION);\n\n    Object.keys(adBlockerObject)\n        .forEach((key) =>\n            localStorage.set(key, adBlockerObject[key as keyof typeof adBlockerObject] as string));\n\n    sessionStorage.set(AD_BLOCKER_INCREMENTED_KEY, \"true\");\n}\n\n/**\n * Determines if Ad Blocker message\n * should be displayed based on presence\n * of ad blocker and user's total number\n * of visits\n */\nexport function blockTheAdBlocker(storage: StorageArg) {\n    const visits = storage.cookie.get(AD_BLOCKER_VISITS_KEY);\n    const multiplier = getMultiplier(storage);\n\n    // @ts-expect-error this doesn't seem correct but not changing logic in Q4\n    if (!blockerShouldDisplay(visits, multiplier)) {\n        return;\n    }\n\n    renderMessage(storage);\n}\n\n/**\n * Creates modal\n * Adds listener on false-positive link\n * to trigger Google Analytics event when\n * link is clicked\n */\nexport function renderMessage(storage: StorageArg) {\n    const message = getMessage(storage);\n    const duration = getDuration(storage);\n\n    if (!(document && message && duration)) {\n        return;\n    }\n\n    const container = AdBlockerModal.renderModal(message, duration);\n\n    document.body.appendChild(container);\n    // @ts-expect-error this doesn't seem correct but not changing logic in Q4\n    document.getElementById(MESSAGE_ID).focus();\n\n    // @ts-expect-error this doesn't seem correct but not changing logic in Q4\n    window.onLoad = countdownAndReset(duration);\n}\n\n/**\n * Retrieves message for modal from\n * localStorage or uses default message\n * from this file\n */\nexport function getMessage(storage: StorageArg) {\n    if (!userHasStorage(storage)) {\n        return AdBlockerModal.getBlockerMessage();\n    }\n\n    return storage.session.get(AD_BLOCKER_MESSAGE_KEY) || AdBlockerModal.getBlockerMessage();\n}\n\n/**\n * Retrieves duration of countdown for modal\n * from localStorage or uses default duration\n * from this file\n */\nfunction getDuration(storage: StorageArg) {\n    if (!userHasStorage(storage)) {\n        return MESSAGE_DURATION;\n    }\n\n    return storage.local.get(AD_BLOCKER_DURATION_KEY) || MESSAGE_DURATION;\n}\n\n/**\n * Retrieves muliplier used to determine\n * is user should be shown modal on this\n * visit (every 5th visit, for example)\n * from localStorage or uses default\n * multiplier from this file\n */\nfunction getMultiplier(storage: StorageArg) {\n    if (!userHasStorage(storage)) {\n        return VISIT_MULTIPLIER;\n    }\n\n    return storage.local.get(AD_BLOCKER_MULTIPLIER_KEY) || VISIT_MULTIPLIER;\n}\n\n/**\n * Uses visitNumber and multiplier to\n * determine if the blocker should be\n * displayed to the user on this visit.\n */\nfunction blockerShouldDisplay(visitNumber: string, multiplier: string) {\n    const visits = parseInt(visitNumber, 10);\n    const frequency = parseInt(multiplier, 10);\n\n    if ((visits - 2) % frequency !== 0) {\n        return false;\n    }\n\n    return true;\n}\n\n/**\n * Checks to see if user has localStorage\n * and sessionStorage\n */\nfunction userHasStorage(storage: StorageArg) {\n    const local = storage.local.get;\n    const session = storage.session.get;\n\n    return Boolean(typeof local === \"function\" && typeof session === \"function\");\n}\n\n/**\n * Checks to see if user has already been\n * blocked in this visit.\n */\nfunction userShouldNotBeBlocked(storage: StorageArg) {\n    return Boolean(storage.session.get(AD_BLOCKER_INCREMENTED_KEY));\n}\n\n/**\n * Runs a countdown timer in modal\n * when duration has been decreased\n * to zero, changes styles on link\n * and allows user to close modal.\n */\nexport function countdownAndReset(duration: number) {\n    let timer = duration;\n    const DELAY = 1000; // 1 second\n    // eslint-disable-next-line prefer-const\n    let interval: NodeJS.Timer;\n    const container = document.getElementById(CONTAINER_ID) as HTMLElement;\n    const continueButton = document.getElementById(CONTINUE_LINK_ID) as HTMLElement;\n    const timerDiv = document.getElementById(TIMER_ID) as HTMLDivElement;\n\n    function clickListener() {\n        container.setAttribute(\"style\", \"display:none\");\n        stopListening();\n    }\n\n    function stopListening() {\n        continueButton.removeEventListener(\"click\", clickListener);\n    }\n\n    function count() {\n        timerDiv.textContent = timer as unknown as string;\n        if (--timer < 0) {\n            clearInterval(interval);\n            timerDiv.setAttribute(\"style\", \"display:none\");\n            continueButton.style.color = \"#2800D7\";\n            continueButton.style.cursor = \"pointer\";\n            continueButton.setAttribute(\"aria-label\", \"Continue to site\");\n            continueButton.addEventListener(\"click\", clickListener);\n        }\n    }\n\n    interval = setInterval(count, DELAY);\n}\n\n/**\n * Attempts to fetch from a google adsense URL\n * if the attempt succeeds, we can assume the\n * user is not using an ad blocker. If the attempt fails,\n * we assume the user is using an ad blocker.\n *\n * @returns {Promise}\n */\nfunction checkForAdBlockerScript() {\n    return fetch(\n        \"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\",\n        {\n            method: \"HEAD\",\n            mode: \"no-cors\"\n        }\n    )\n        .then(() => false)\n        .catch(() => true);\n}\n","const BLOCKER_MESSAGE = `We noticed that you're using an ad blocker,\n    which may adversely affect the performance and content on\n    Bloomberg.com. For the best experience, please\n    allowlist the site.`;\n\nconst BLOCKER_FOOTER_TEXT = `If you believe that you may have received\n    this message in error <a href=\"https://www.bloomberg.com/feedback\" style=\"color: #2B00F7\" id=\"adBlockerFooterLink\">please let\n    us know</a>.`;\n\nconst LOGO_STYLES = [\n    \"font-family:BWHaasHead-95Black,BWHaasHead,Helvetica Neue,Helvetica\",\n    \"font-size:45px\",\n    \"margin:0 auto\",\n    \"text-align:center\",\n    \"color:white\",\n    \"background-color:#2800D7\",\n    \"padding:15px 0\"\n];\n\nconst MESSAGE_DIV_STYLES = [\n    \"font-size:18px\",\n    \"line-height:28px\",\n    \"background-color:white\",\n    \"color:black\",\n    \"padding: 20px\",\n    \"font-family:Tiempos,Helvetica Neue,Helvetica\"\n];\n\nconst CONTAINER_STYLES = [\n    \"height:100%\",\n    \"width:100%\",\n    \"z-index:10000\", // Set to 10_000 to take precedence over 9999 set on /graphics pages\n    \"color:white\",\n    \"background:rgba(256,256,256,.8)\",\n    \"position:fixed\",\n    \"top:0\",\n    \"left:0\"\n];\n\nconst ELEMENT_STYLES = [\n    \"min-width:300px\",\n    \"border:2px solid #2800D7\",\n    \"width:50%\",\n    \"background-color:white\",\n    \"color:black\",\n    \"margin: 20vh auto\"\n];\n\nconst CONTINUE_DISPLAY_STYLES = [\n    \"background-color:#D8D8D8\",\n    \"color:#000000\",\n    \"font-size:20px\",\n    \"text-align:center\",\n    \"font-weight:bold\",\n    \"font-family:BWHaasHead-75Bold,BWHaasHead,Helvetica Neue,Helvetica\",\n    \"margin:0 auto 20px\",\n    \"padding:5px\",\n    \"width:165px\"\n];\n\nconst TIMER_STYLES = [\n    \"margin-left:4px\",\n    \"display:inline-block\",\n    \"border:1px solid #000000\",\n    \"border-radius:100%\",\n    \"color:#000000\",\n    \"background-color:#D8D8D8\",\n    \"font-size:20px\",\n    \"text-align:center\",\n    \"line-height:20px\",\n    \"width:26px\",\n    \"padding:3px\"\n];\n\nconst FAKE_AD_STYLES = [\n    \"width:1px !important\",\n    \"height:1px !important\",\n    \"position:absolute !important\",\n    \"display:block\",\n    \"top:-5000px\",\n    \"left:-5000px;\"\n];\n\nconst FAKE_AD_CLASSES = [\n    \"pub_300x250\",\n    \"pub_300x250m\",\n    \"pub_728x90\",\n    \"text-ad\",\n    \"textAd\",\n    \"text_ad\",\n    \"text_ads\",\n    \"text-ads\",\n    \"text-ad-links\"\n];\n\nconst TEST_DIV_CLASSES = [\n    \"a-real-div-for-testing\",\n    \"false-positive-test\"\n];\n\nconst TEST_DIV_STYLES = [\n    \"display: block\",\n    \"position: absolute\",\n    \"right: 200%\",\n    \"height: 1%\",\n    \"width: 1%\"\n];\n\nconst BLOCKER_FOOTER_STYLES = [\n    \"font-size:14px\",\n    \"line-height:18px\",\n    \"background-color:white\",\n    \"color:black\",\n    \"padding: 20px\",\n    \"font-family:Tiempos,Helvetica Neue,Helvetica\"\n];\n\nconst FOOTER_ID = \"adBlockerFooter\";\nconst CONTAINER_ID = \"adBlockerContainer\";\nconst MESSAGE_ID = \"adBlockerMessage\";\nconst CONTINUE_LINK_ID = \"adBlockerContinue\";\nconst TIMER_ID = \"adBlockerTimer\";\nconst LOGO_ID = \"adBlockerTitle\";\n\nexport default class AdBlockerModal {\n\n    static renderModal(message: string, duration: number | string) {\n        const _document = document;\n\n        const container = _document.createElement(\"aside\");\n        const element = _document.createElement(\"div\");\n        const logo = _document.createElement(\"h1\");\n        const logoText = _document.createTextNode(\"Bloomberg\");\n        const messageDiv = _document.createElement(\"div\");\n        const messageText = _document.createTextNode(message);\n        const continueDisplay = _document.createElement(\"div\");\n        const continueDisplayText = _document.createTextNode(\"Continue\");\n        const timer = _document.createElement(\"div\");\n        const timerText = _document.createTextNode(duration as unknown as string);\n        const footerDiv = _document.createElement(\"div\");\n\n        container.setAttribute(\"id\", CONTAINER_ID);\n        container.setAttribute(\"role\", \"dialog\");\n        container.setAttribute(\"aria-modal\", \"true\");\n        container.setAttribute(\"aria-labelledby\", LOGO_ID);\n        container.setAttribute(\"aria-describedby\", MESSAGE_ID);\n        logo.setAttribute(\"id\", LOGO_ID);\n        messageDiv.setAttribute(\"id\", MESSAGE_ID);\n        messageDiv.setAttribute(\"tabindex\", \"0\");\n        continueDisplay.setAttribute(\"id\", CONTINUE_LINK_ID);\n        continueDisplay.setAttribute(\"tabindex\", \"0\");\n        continueDisplay.setAttribute(\"role\", \"button\");\n        continueDisplay.setAttribute(\"aria-label\", `Continue in ${ duration } seconds`);\n        timer.setAttribute(\"id\", TIMER_ID);\n        timer.setAttribute(\"aria-live\", \"polite\");\n        timer.setAttribute(\"aria-atomic\", \"true\");\n        footerDiv.setAttribute(\"id\", FOOTER_ID);\n\n        logo.setAttribute(\"style\", this.logoStyles());\n        messageDiv.setAttribute(\"style\", this.messageDivStyles());\n        container.setAttribute(\"style\", this.containerStyles());\n        element.setAttribute(\"style\", this.elementStyles());\n        continueDisplay.setAttribute(\"style\", this.continueDisplayStyles());\n        timer.setAttribute(\"style\", this.timerStyles());\n        footerDiv.setAttribute(\"style\", this.footerStyles());\n\n        // Add keyboard handler for Enter/Space on continue button\n        // Only triggers click if countdown has expired (timer is hidden)\n        continueDisplay.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n            if (event.key === \"Enter\" || event.key === \" \") {\n                event.preventDefault();\n\n                if (timer.style.display === \"none\") {\n                    continueDisplay.click();\n                }\n            }\n        });\n\n        logo.appendChild(logoText);\n        messageDiv.appendChild(messageText);\n        continueDisplay.appendChild(continueDisplayText);\n        timer.appendChild(timerText);\n        continueDisplay.appendChild(timer);\n        footerDiv.innerHTML = BLOCKER_FOOTER_TEXT;\n\n        // Get footer link after innerHTML is set\n        const footerLink = footerDiv.querySelector(\"#adBlockerFooterLink\") as HTMLElement | null;\n\n        // Focus trap: cycle between messageDiv, continueDisplay, and optionally footerLink\n        const focusableElements = [messageDiv, continueDisplay, footerLink].filter(Boolean) as HTMLElement[];\n        const firstElement = focusableElements[0];\n        const lastElement = focusableElements[focusableElements.length - 1];\n\n        container.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n            // Escape key handler - dismiss modal after countdown expires\n            if (event.key === \"Escape\") {\n                // Only allow Escape if timer is hidden (countdown has expired)\n                if (timer.style.display === \"none\") {\n                    event.preventDefault();\n                    continueDisplay.click();\n                }\n            }\n\n            // Tab key focus trap\n            if (event.key === \"Tab\") {\n                if (event.shiftKey) {\n                    // Shift+Tab: moving backwards\n                    if (document.activeElement === firstElement) {\n                        event.preventDefault();\n                        lastElement.focus();\n                    }\n                } else if (document.activeElement === lastElement) {\n                    // Tab: moving forwards\n                    event.preventDefault();\n                    firstElement.focus();\n                }\n            }\n        });\n\n        element.appendChild(logo);\n        element.appendChild(messageDiv);\n        element.appendChild(continueDisplay);\n        element.appendChild(footerDiv);\n        container.appendChild(element);\n\n        // Set initial focus to messageDiv after rendering\n        setTimeout(() => {\n            messageDiv.focus();\n        }, 0);\n\n        return container;\n    }\n\n    static getBlockerMessage() {\n        return BLOCKER_MESSAGE;\n    }\n\n    static logoStyles() {\n        return LOGO_STYLES.join(\"; \");\n    }\n\n    static messageDivStyles() {\n        return MESSAGE_DIV_STYLES.join(\"; \");\n    }\n\n    static containerStyles() {\n        return CONTAINER_STYLES.join(\"; \");\n    }\n\n    static elementStyles() {\n        return ELEMENT_STYLES.join(\"; \");\n    }\n\n    static continueDisplayStyles() {\n        return CONTINUE_DISPLAY_STYLES.join(\"; \");\n    }\n\n    static timerStyles() {\n        return TIMER_STYLES.join(\"; \");\n    }\n\n    static fakeAdStyles() {\n        return FAKE_AD_STYLES.join(\"; \");\n    }\n\n    static fakeAdClasses() {\n        return FAKE_AD_CLASSES.join(\" \");\n    }\n\n    static testDivStyles() {\n        return TEST_DIV_STYLES.join(\"; \");\n    }\n\n    static testDivClasses() {\n        return TEST_DIV_CLASSES.join(\" \");\n    }\n\n    static footerStyles() {\n        return BLOCKER_FOOTER_STYLES.join(\"; \");\n    }\n\n}\n","import { isAdserviceDVTargetingEnabled, isArticleDecoupled, isPersonalizedTargetingEnabled } from \"../util/pageEnabledChecker\";\nimport UserInfo from \"../session/UserInfo\";\nimport { AdContextData, ExcludeTargetingType, TARGETING_TYPES } from \"../type\";\nimport Ad from \"../gpt/Ad\";\nimport { Targeting } from \"../interfaces/TargetingProvider\";\nimport { ContentTargetingProvider, ContentTargetingType } from \"./ContentTargetingProvider\";\nimport { UserContentTargetingProvider, UserContentTargetingType } from \"./UserContentTargetingProvider\";\nimport { UserGlobalTargetingProvider, UserGlobalTargetingType } from \"./UserGlobalTargetingProvider\";\n\nconst ARTICLE_TARGETING_TIMEOUT = 400;\nconst DEFAULT_CONTENT_TARGETING_TIMEOUT = 5000;\n\nexport default class AdsServiceClient {\n\n    private _useCachedTargeting: boolean;\n    private _userInfo: UserInfo;\n    private _pageId: string;\n    // adContextData contains some extra page meta data like page type\n    // and slug, which will be used to determine the content targetings\n    // we are fetching from AdService\n    private _adContextData: AdContextData = {};\n    private _contentTargetingProvider;\n    private _contentTargetingTimeout = DEFAULT_CONTENT_TARGETING_TIMEOUT;\n    private _isDecoupled: boolean;\n    private _userContentTargetingProvider: UserContentTargetingProvider;\n    private _userGlobalTargetingProvider: UserGlobalTargetingProvider;\n    private _excludeTargetingTypes: ExcludeTargetingType[] | undefined;\n    private _disableTrigr: boolean;\n\n    static _firstAd: {\n        setFirstAd: (value: Ad) => void;\n        waitForAd: Promise<Ad>;\n        ad?: Ad;\n    };\n\n    constructor(userInfo: UserInfo, pageId: string, isDecoupled: boolean, useCachedTargeting = true,\n        adContextData: AdContextData = {}, excludeTargetingTypes:ExcludeTargetingType[] = [],\n        disableTrigr: boolean) {\n        this._userInfo = userInfo;\n        this._useCachedTargeting = useCachedTargeting;\n        this._isDecoupled = isDecoupled;\n        this._pageId = pageId;\n        this._adContextData = adContextData;\n        this._excludeTargetingTypes = excludeTargetingTypes;\n        this._disableTrigr = disableTrigr;\n        this._contentTargetingTimeout = isArticleDecoupled(\n            this._adContextData,\n            this._isDecoupled\n        )\n            ? ARTICLE_TARGETING_TIMEOUT\n            : DEFAULT_CONTENT_TARGETING_TIMEOUT;\n        this._contentTargetingProvider = new ContentTargetingProvider(\n            adContextData,\n            this._getContentTargetingTypes(),\n            this._contentTargetingTimeout\n        );\n        this._userContentTargetingProvider = new UserContentTargetingProvider(\n            adContextData,\n            this._getUserContentTargetingTypes(),\n            userInfo,\n            this._contentTargetingTimeout\n        );\n\n        this._userGlobalTargetingProvider = new UserGlobalTargetingProvider(\n            this._getUserGlobalTargetingTypes(),\n            userInfo,\n            this._contentTargetingTimeout\n        );\n\n        AdsServiceClient.initFirstAdHandler();\n    }\n\n    static initFirstAdHandler() {\n        let resolver: (ad: Ad) => void;\n\n        const promise = new Promise<Ad>((resolve) => {\n            resolver = resolve;\n        });\n\n        this._firstAd = {\n            waitForAd: promise,\n            setFirstAd: resolver!\n        };\n    }\n\n    static waitForFirstAd(): Promise<Ad> {\n        return AdsServiceClient._firstAd.waitForAd;\n    }\n\n    setAd(ad: Ad) {\n        if (!AdsServiceClient._firstAd.ad) {\n            AdsServiceClient._firstAd.setFirstAd(ad);\n            AdsServiceClient._firstAd.ad = ad;\n        }\n    }\n\n    private _getUserContentTargetingTypes() {\n        return isPersonalizedTargetingEnabled(this._adContextData, this._isDecoupled)\n            ? [UserContentTargetingType.PERSONALIZATION]\n            : [];\n    }\n\n    private _getUserGlobalTargetingTypes() {\n        return [\n            UserGlobalTargetingType.PERSONALIZATION,\n            isAdserviceDVTargetingEnabled(this._pageId) ? UserGlobalTargetingType.DV : undefined,\n            this._disableTrigr ? undefined : UserGlobalTargetingType.TRIGR,\n            TARGETING_TYPES.IVT\n        ].filter((t) => Boolean(t)) as UserGlobalTargetingType[];\n    }\n\n    private _getContentTargetingTypes() {\n        return [\n            isAdserviceDVTargetingEnabled(this._pageId) ? TARGETING_TYPES.DV_BRANDSAFETY : undefined,\n            TARGETING_TYPES.CONTENT\n        ].filter((t) => Boolean(t)) as ContentTargetingType[];\n    }\n\n    private _getTargetingUtil(promises: Promise<Targeting>[]) {\n        return Promise.allSettled(promises)\n            .then((results) => results.reduce((result, obj) => Object.assign(result, obj.status === \"rejected\" ? {} : obj.value), {}));\n\n    }\n\n    getTargetingFromAdsService() {\n        return this._getTargetingUtil([\n            this.getTargetingFromAdsServiceSync(),\n            this.getTargetingFromAdsServiceAsync()\n        ]);\n    }\n\n    getTargetingFromAdsServiceSync() {\n        return this._excludeTargetingTypes?.includes(TARGETING_TYPES.CONTENT) ? this._getTargetingUtil([\n            this._userGlobalTargetingProvider.getTargeting()\n        ]) : this._getTargetingUtil([\n            this._contentTargetingProvider.getTargeting(),\n            this._userGlobalTargetingProvider.getTargeting()\n        ]);\n    }\n\n    // use this function to get all the targetings which won't block ad loading\n    getTargetingFromAdsServiceAsync() {\n        return this._getTargetingUtil([\n            this._userContentTargetingProvider.getTargeting()\n        ]);\n    }\n\n    getTargetingsForAdSync(): Promise<Targeting> {\n        return this.getTargetingFromAdsServiceSync();\n    }\n\n    getTargetingsForAdAsync(): Promise<Targeting> {\n        return this.getTargetingFromAdsServiceAsync();\n    }\n\n    resetTargetings(newAdContextData: AdContextData): void {\n        // if it is the same slug, no need to reset\n        if (newAdContextData.slug === this._adContextData.slug) {\n            return;\n        }\n\n        // If the reset call is coming from article page, it means the page is\n        // transporting to a different article. In this case, we clean up the\n        // _excludeTargetingTypes to fetch all types of targeting from front end\n        if (newAdContextData.adPageType === \"article\") {\n            this._excludeTargetingTypes = [];\n        }\n\n        this._adContextData = { ...this._adContextData, ...newAdContextData };\n        this._contentTargetingProvider = new ContentTargetingProvider(\n            newAdContextData,\n            this._getContentTargetingTypes(),\n            this._contentTargetingTimeout\n        );\n        this._userContentTargetingProvider = new UserContentTargetingProvider(\n            newAdContextData,\n            this._getUserContentTargetingTypes(),\n            this._userInfo,\n            this._contentTargetingTimeout\n        );\n        this.getTargetingFromAdsService();\n    }\n\n}\n","import { Targeting, TargetingProvider } from \"../interfaces/TargetingProvider\";\nimport { AdContextData } from \"../type\";\nimport { makeCachedGet } from \"../util/requestHelpers\";\n\nexport enum ContentTargetingType {\n    DV_BRANDSAFETY = \"dv_brandsafety\",\n    CONTENT = \"content\"\n}\n\nexport class ContentTargetingProvider implements TargetingProvider {\n\n    targetingUrl = `${ process.env.ADS_SERVICE_ENDPOINT }/ad-targeting/content`;\n    get: ReturnType<typeof makeCachedGet<Targeting>>;\n    private timeoutInMs: number;\n    adContextData: AdContextData;\n    types: ContentTargetingType[];\n\n    constructor(\n        adContextData: AdContextData,\n        targetingTypes: ContentTargetingType[],\n        timeout: number = 5000\n    ) {\n        this.adContextData = adContextData;\n        this.types = targetingTypes;\n        this.get = makeCachedGet<Targeting>(\"ContentTargeting\");\n        this.timeoutInMs = timeout;\n    }\n\n    private buildUrl(): string {\n        const targetingTypes = `?targeting_types=${ this.types.join(\",\") }&page_type=${ this.adContextData.adPageType }`;\n\n        return this.types.reduce((prevUrl, type) => {\n            if (type === ContentTargetingType.CONTENT) {\n                // generate parameters based on adContextData\n                const slugParam = this.adContextData.slug ? `&slug=${ encodeURIComponent(this.adContextData.slug) }` : \"\";\n                const adCodeParam = this.adContextData.adCode ? `&ad_code=${ encodeURIComponent(this.adContextData.adCode) }` : \"\";\n                const tickerIdParam = this.adContextData.tickerId ? `&ticker_id=${ encodeURIComponent(this.adContextData.tickerId) }` : \"\";\n                const personIdParam = this.adContextData.personId ? `&person_id=${ encodeURIComponent(this.adContextData.personId) }` : \"\";\n                const suidParam = this.adContextData.suid ? `&suid=${ encodeURIComponent(this.adContextData.suid) }` : \"\";\n\n                return `${ prevUrl }${ slugParam }${ adCodeParam }${ tickerIdParam }${ personIdParam }${ suidParam }`;\n            } else if (type === ContentTargetingType.DV_BRANDSAFETY) {\n                return `${ prevUrl }&url=${ encodeURIComponent(window.location.href) }`;\n            }\n\n            return prevUrl;\n        }, `${ this.targetingUrl }${ targetingTypes }`);\n    }\n\n    getTargeting(): Promise<Targeting> {\n        if (this.types.length === 0) return Promise.resolve({});\n\n        return this.get(this.buildUrl(), this.timeoutInMs, {});\n    }\n\n}\n","import { cmpCookie } from \"@foundation/cmp-client\";\nimport { AdContextData } from \"../type\";\nimport { makeCachedGet } from \"../util/requestHelpers\";\nimport UserInfo from \"../session/UserInfo\";\nimport { Targeting, TargetingProvider } from \"../interfaces/TargetingProvider\";\n\nexport enum UserContentTargetingType {\n    PERSONALIZATION = \"personalization\"\n}\n\nexport class UserContentTargetingProvider implements TargetingProvider {\n\n    private targetingUrl = `${ process.env.ADS_SERVICE_ENDPOINT }/ad-targeting/user-content`;\n    private get: ReturnType<typeof makeCachedGet<Targeting>>;\n    private timeoutInMs: number;\n    private adContextData: AdContextData;\n    private types: UserContentTargetingType[];\n    private _userInfo: UserInfo;\n\n    constructor(\n        adContextData: AdContextData,\n        targetingTypes: UserContentTargetingType[],\n        userInfo: UserInfo,\n        timeout:number = 5000\n    ) {\n        this.adContextData = adContextData;\n        this.types = targetingTypes;\n        this.get = makeCachedGet<Targeting>(\"UserContentTargeting\");\n        this._userInfo = userInfo;\n        this.timeoutInMs = timeout;\n    }\n\n    private async buildUrl(): Promise<string> {\n        const padAllowed = cmpCookie.padAllowed() ? \"true\" : \"false\";\n        const sessionId = await this._userInfo.getSessionId();\n\n        const slugParam = this.adContextData?.slug ? `&slug=${ encodeURIComponent(this.adContextData.slug) }` : \"\";\n        const tickerIdParam = this.adContextData.tickerId ? `&ticker_id=${ encodeURIComponent(this.adContextData.tickerId) }` : \"\";\n        const url = `${ this.targetingUrl }?targeting_types=${ this.types.join(\",\") }&session_id=${ sessionId }&consent=${ padAllowed }${ slugParam }${ tickerIdParam }`;\n\n        return url;\n    }\n\n    async getTargeting(): Promise<Targeting> {\n        if (this.types.length === 0) return Promise.resolve({});\n\n        return this.get(await this.buildUrl(), this.timeoutInMs, {});\n    }\n\n}\n","import { cmpCookie } from \"@foundation/cmp-client\";\nimport UserInfo from \"../session/UserInfo\";\nimport { makeCachedGet } from \"../util/requestHelpers\";\nimport { Targeting, TargetingProvider } from \"../interfaces/TargetingProvider\";\nimport AdsServiceClient from \"./AdsServiceClient\";\n\nexport enum UserGlobalTargetingType {\n    PERSONALIZATION = \"personalization\",\n    DV = \"dv\",\n    TRIGR = \"tr\"\n}\nconst storageKey = \"bbads_targetings\";\n\nexport class UserGlobalTargetingProvider implements TargetingProvider {\n\n    private targetingUrl = `${ process.env.ADS_SERVICE_ENDPOINT }/ad-targeting/user-global`;\n    private get: ReturnType<typeof makeCachedGet<Targeting>>;\n    private timeoutInMs: number;\n    private types: UserGlobalTargetingType[];\n    private _userInfo: UserInfo;\n\n    constructor(\n        targetingTypes: UserGlobalTargetingType[],\n        userInfo: UserInfo,\n        timeout:number = 5000\n    ) {\n        this.types = targetingTypes;\n        this.get = makeCachedGet<Targeting>(\"UserGlobalTargeting\");\n        this._userInfo = userInfo;\n        this.timeoutInMs = timeout;\n    }\n\n    private async buildUrl(): Promise<string> {\n        // need to send user consent to AdService to determine whether to call\n        // coordinator for user information\n        const padAllowed = cmpCookie.padAllowed() ? \"true\" : \"false\";\n        // need slot id and ad unit path to target away from IVT\n        const ad = await AdsServiceClient.waitForFirstAd();\n        const sessionId = await this._userInfo.getSessionId().catch((error) => console.error(\"Failed to get session ID:\", error));\n        const adCode = `&ad_code=${ encodeURIComponent(ad.getUnitName()) }`;\n        const slotId = `&slot_id=${ ad.getId() }`;\n        const url = `${ this.targetingUrl }?targeting_types=${ this.types }${ sessionId ? `&session_id=${ sessionId }` : \"\" }&consent=${ padAllowed }${ adCode }${ slotId }`;\n\n        return url;\n    }\n\n    async getTargeting(): Promise<Targeting> {\n        return this.get(await this.buildUrl(), this.timeoutInMs, {}, storageKey);\n    }\n\n}\n","import { cmpCookie } from \"@foundation/cmp-client\";\nimport PerformanceMonitor from \"../util/monitoring/PerformanceMonitor\";\nimport makeMeasure from \"../util/makeMeasure\";\nimport DependencyLoader from \"../DependencyLoader\";\nimport { Storage } from \"../util/Storage\";\nimport GPT from \"../gpt/GPT\";\nimport fireEREvt from \"../util/eventRecorderClient\";\n\nconst local = Storage.createLocalStorage();\nconst bomboraUrl = \"https://vi.ml314.com/get?eid=50066&tk=aO1CCthMyYq5eNlVwlKQXL9igGlRPy95K4LLnm84p2bE3d&fp=\";\n\nexport default class Bombora extends DependencyLoader {\n\n    private _gpt: GPT;\n    private _measure = makeMeasure(new PerformanceMonitor(\"Sparkle:Bombora\"));\n\n    constructor(gpt: GPT) {\n        super();\n        this._gpt = gpt;\n    }\n\n    init() {\n        // Gate both the script load and the targeting: loading the script\n        // alone already sends the _ccmaid identifier to Bombora.\n        if (!cmpCookie.padAllowed()) {\n            fireEREvt(\"ad-bombora-no-consent\");\n\n            return;\n        }\n\n        this.loadBombora();\n        this.addBomboraTargeting();\n    }\n\n    loadBombora() {\n        // if script/stub already setup, no need to do it again\n        if (window._bmb) return;\n\n        this.setupStub();\n        this._measure(\"loadBombora\", () => this.loadScriptDependency(this.getUrl()))\n            .catch((e) => console.error(`Error init Bombora Script:  ${ e }`));\n    }\n\n    setupStub() {\n        // @ts-expect-error bombora stub taken from docs\n        // eslint-disable-next-line\n        const o = window._bmb = function () { o.x ? o.x.apply(o, arguments) : o.q.push(arguments) };\n\n        // @ts-expect-error bombora stub taken from docs\n        o.q = [];\n    }\n\n    getUrl() {\n        const ccmaid = local.get(\"_ccmaid\") ?? \"\";\n\n        return `${ bomboraUrl }${ ccmaid }`;\n    }\n\n    addBomboraTargeting() {\n        if (!window._bmb) return;\n\n        window._bmb(\"vi\", (data) => {\n            if (data) {\n                const tmpSegment = [\n                    data.industry_id,\n                    data.revenue_id,\n                    data.size_id,\n                    data.functional_area_id,\n                    data.professional_group_id,\n                    data.seniority_id,\n                    data.decision_maker_id,\n                    data.install_data_id,\n                    data.topic_id,\n                    data.interest_group_id,\n                    data.segment,\n                    data.b2b_interest_cluster_id\n                ].filter(Boolean).join(\",\");\n\n                if (tmpSegment !== \"\") {\n                    this._gpt.setTargeting(\"bmb\", tmpSegment.split(\",\"));\n                }\n            }\n        });\n    }\n\n}\n","import parseJson from \"../util/parseJson\";\n\nconst MESSAGE_EVENT = \"message\";\n\nfunction isAnObject(something: unknown): boolean {\n    return typeof something === \"object\";\n}\n\nfunction destructureEvent(event: MessageEvent) {\n    const data = isAnObject(event.data) ? event.data : parseJson(event.data, {});\n    const id = data.id || data.windowId;\n    const method = data.method;\n\n    return { data, id, method };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Cb = (data?: any) => void;\n\n/**\n * Façade for registering listeners to messages posted to window\n *\n * @class\n */\nclass PostMessages {\n\n    _listeners: Record<string, Record<string, Cb[]>> = {};\n\n    constructor() {\n\n        this._contextifyCallbacks();\n        this._delegateEvents();\n    }\n\n    /**\n     * Bind methods to self for use as callbacks\n     *\n     * @private\n     */\n    _contextifyCallbacks() {\n        this._dispatchEventListeners = this._dispatchEventListeners.bind(this);\n    }\n\n    /**\n     * Registers global event listener for message event\n     *\n     * @private\n     */\n    _delegateEvents() {\n        window.addEventListener(MESSAGE_EVENT, this._dispatchEventListeners);\n    }\n\n    /**\n     * Dispatches callbacks with method and id from event data\n     */\n    _dispatchEventListeners(event: MessageEvent) {\n        const { data, id, method } = destructureEvent(event);\n        const callbacks = (this._listeners[id] ? this._listeners[id][method] : []) || [];\n\n        callbacks.forEach((callback) => callback(data));\n    }\n\n    /**\n     * Tears down global event listener for visibility change\n     *\n     * @private\n\n     */\n    _undelegateEvents() {\n        window.removeEventListener(MESSAGE_EVENT, this._dispatchEventListeners);\n    }\n\n    /**\n     * Destructor\n     */\n    destroy() {\n        this._undelegateEvents();\n        this._listeners = {};\n    }\n\n    /**\n     * Add post message listener to id and method\n     * @example\n     * postMessages.addEventListener(\"1\", \"setIframeHeight\", function(data) {\n     *     iframe.setAttribute(\"height\", data.height);\n     * });\n     */\n    addEventListener(id: string, method: string, callback: Cb) {\n        this._listeners[id] = this._listeners[id] || {};\n\n        const listenersForId = this._listeners[id];\n\n        listenersForId[method] = listenersForId[method] || [];\n        listenersForId[method].push(callback);\n    }\n\n    /**\n     * Remove post message listener from id and method\n     * @example\n     * postMessages.removeEventListener(\"1\", \"setIframeHeight\", setIframeHeight);\n     */\n    removeEventListener(id: string, method: string, callback: Cb) {\n        const listenersForId = this._listeners[id];\n\n        if (listenersForId && listenersForId[method]) {\n            listenersForId[method] = listenersForId[method].filter((item) => item !== callback);\n        }\n    }\n\n}\n\nexport default PostMessages;\n","export const IX_BIDDABLE_SIZES = [\n    \"1x7v\",\n    \"300x250\",\n    \"300x600\",\n    \"320x50\",\n    \"728x90\",\n    \"970x250\"\n];\n\nexport const SLOT_RENDER_EVENT = \"slotRenderEnded\";\nexport const SLOT_ONLOAD_EVENT = \"slotOnload\";\nexport const SLOT_RESPONSE_RECEIVED_EVENT = \"slotResponseReceived\";\nexport const SLOT_REQUESTED = \"slotRequested\";\n","import type Ad from \"../gpt/Ad\";\nimport type GPT from \"../gpt/GPT\";\nimport Overlayer from \"../util/Overlayer\";\nimport { type AdSizes } from \"../viewability/Viewability\";\n\nconst formatTimestamp = (ts: number) => `${ Math.floor(ts) }ms`;\n\nconst LIST_STYLE = \"list-style-type: disc; padding-left: 20px; margin: 4px 0 0;\";\n\nfunction unrenderedMessage() {\n    return [\"GPT render event not received for this ad.\",\n        \"Either the request has not been sent out or\",\n        \"the response has not yet been received.\"].join(\"<br/>\");\n}\n\ninterface AdMetrics {\n    adCode: string;\n    sizes: AdSizes;\n    empty: boolean;\n    creativeId: string | number | null;\n    lineItemId: string | number | null;\n    // time taken to make ad slot request\n    timeToRequest: number;\n    // time taken to respond to ad slot request\n    timeToRespond: number;\n    // total time from Sparkle.init() -> rendered ad\n    timeToRender: number;\n}\n\nfunction renderMessage(metrics: AdMetrics | null): string {\n    if (!metrics) {\n        return unrenderedMessage();\n    }\n\n    return [\n        `AdCode: ${ metrics.adCode }`,\n        `Empty?: ${ metrics.empty }`,\n        `Creative ID: ${ metrics.creativeId }`,\n        `Line Item ID: ${ metrics.lineItemId }`,\n        `Time To Request: ${ formatTimestamp(metrics.timeToRequest) }`,\n        `Time To Respond: ${ formatTimestamp(metrics.timeToRespond) }`,\n        `Time To Render: ${ formatTimestamp(metrics.timeToRender) }`,\n        `Sizes: [${ metrics.sizes }]`\n    ].join(\"<br/>\");\n}\n\n/**\n * This is util function which takes in two functions of getting\n * targeting keys and targeting info, parses them, and return back\n * a formated html string\n * @param {Function} getTargetingKeys\n * @param {Function} getTargeting\n * @returns {String}\n */\nfunction targetingListUtil(\n    getTargetingKeys: () => string[],\n    getTargeting: (key: string) => string | string[]\n) {\n    const targetingListString = getTargetingKeys().reduce((output, key) => `${ output }<li>${ key }: ${ getTargeting(key) }</li>`, \"\");\n\n    if (!targetingListString) {\n        return \"\";\n    }\n\n    return `<ul style=\"${ LIST_STYLE }\">${ targetingListString }</ul>`;\n}\n\nfunction pageTargetingList(gpt: GPT): string {\n    if (!gpt) {\n        return \"\";\n    }\n\n    return targetingListUtil(gpt.getTargetingKeys.bind(gpt), gpt.getTargeting.bind(gpt));\n}\n\nfunction targetingList(ad: Ad): string {\n    const targeting = ad.getTargeting();\n    const targetingListString = Object.keys(targeting).reduce((output, key) => `${ output }<li>${ key }: ${ targeting[key] }</li>`, \"\");\n\n    return `<ul style=\"${ LIST_STYLE }\">${ targetingListString }</ul>`;\n}\n\nfunction slotTargetingList(ad: Ad): string {\n    const slot = ad.getSlot();\n\n    if (!slot) {\n        return \"\";\n    }\n\n    const targeting = slot.getConfig(\"targeting\").targeting ?? {};\n\n    return targetingListUtil(() => Object.keys(targeting), (key) => targeting[key] ?? []);\n}\n\n/**\n * @class AdDebug\n */\nclass AdDebug {\n\n    /**\n     * Shows debug information for a particular ad\n     */\n    static show(startTime: number, ad: Ad, gpt: GPT) {\n        const adElement = ad.getElement();\n        const adWasRemovedFromDom = !adElement;\n\n        if (!ad.isDisplayable() || adWasRemovedFromDom) {\n            return;\n        }\n\n        const metrics = AdDebug.metrics(startTime, ad);\n        const targeting = targetingList(ad);\n        const slotTargeting = slotTargetingList(ad);\n        const pageTargeting = pageTargetingList(gpt);\n\n        const content = renderMessage(metrics) + slotTargeting + targeting + pageTargeting;\n\n        Overlayer.overlay({\n            content,\n            adElement,\n            empty: !metrics || metrics.empty\n        });\n    }\n\n    static metrics(startTime: number, ad: Ad): AdMetrics | null {\n        const event = ad.getSlotRenderedEvent();\n\n        if (!event) {\n            return null;\n        }\n\n        const timeToRequest = ad.getRequestTime() as number - startTime;\n        const timeToRender = ad.getRenderTime() as number - startTime;\n        const timeToRespond = timeToRender - timeToRequest;\n\n        return {\n            adCode: ad.getUnitName(),\n            sizes: ad.getSizes(),\n            empty: event.isEmpty(),\n            creativeId: event.getCreativeId(),\n            lineItemId: event.getLineItemId(),\n            timeToRequest,\n            timeToRespond,\n            timeToRender\n        };\n    }\n\n}\n\nexport default AdDebug;\n","import Environment from \"../util/Environment\";\nimport curry from \"../util/curry\";\nimport Overlayer from \"../util/Overlayer\";\nimport type Ad from \"../gpt/Ad\";\nimport type GPT from \"../gpt/GPT\";\nimport AdDebug from \"./AdDebug\";\n\nclass AdDebugRegistry {\n\n    private _registeredAds: Ad[] = [];\n    private _startTime = Environment.currentTime();\n    private _debugOnRenderMode = false;\n    private _adMetrics: Record<string, unknown> = {};\n\n    constructor() {\n        // @ts-expect-error fix when not in Q4\n        window.__bloomberg__.adMetrics = this._adMetrics;\n    }\n\n    /**\n     * Add an Ad to the registry for debugging\n     */\n    push(ad: Ad, name: string, gpt: GPT) {\n        if (this._debugOnRenderMode) {\n            ad.onRender(curry(AdDebug.show, this._startTime, ad, gpt));\n            ad.onEmpty(curry(AdDebug.show, this._startTime, ad, gpt));\n        }\n\n        this._adMetrics[name] = new Promise((resolve) => {\n            const resolveMetrics = () => resolve(AdDebug.metrics(this._startTime, ad));\n\n            ad.onRender(resolveMetrics);\n            ad.onEmpty(resolveMetrics);\n        });\n\n        this._registeredAds.push(ad);\n    }\n\n    /**\n     * Displays debug information for all registered ads\n     */\n    showDebugInformation(gpt: GPT) {\n        Overlayer.clearOverlays();\n\n        this._registeredAds.forEach(curry((ad) => AdDebug.show(this._startTime, ad, gpt)));\n    }\n\n    /**\n     * Displays debug information when Ad has finished rendering\n     *\n\n     */\n    showDebugInformationOnRender() {\n        this._debugOnRenderMode = true;\n    }\n\n    /**\n     * Clears the list of registered ads\n     *\n\n     */\n    destroy() {\n        // @ts-expect-error fix when not in Q4\n        this._adMetrics = null;\n        this._registeredAds.length = 0;\n    }\n\n}\n\nexport default AdDebugRegistry;\n","import { cmpCookie } from \"@foundation/cmp-client\";\nimport DependencyLoader from \"../DependencyLoader\";\nimport PerformanceMonitor from \"../util/monitoring/PerformanceMonitor\";\nimport makeMeasure from \"../util/makeMeasure\";\nimport fireEREvt from \"../util/eventRecorderClient\";\nimport { OnDvTagReadyCb } from \"../type\";\nimport { doubleVerifyInitScript, doubleVerifyScriptUrl } from \"./doubleVerifyScript\";\n\nexport default class DoubleVerifyTracking extends DependencyLoader {\n\n    private _dvScriptUrl: string;\n\n    /**\n     * @type {PerformanceMonitor}\n     * @private\n     */\n    _performanceMonitor = new PerformanceMonitor(\"Sparkle:DoubleVerify\");\n    _measure = makeMeasure(this._performanceMonitor);\n\n    constructor(dvScriptUrl = doubleVerifyScriptUrl) {\n        super();\n        this._dvScriptUrl = dvScriptUrl;\n    }\n\n    init() {\n        if (!cmpCookie.padAllowed()) {\n            fireEREvt(\"ad-double-verify-no-consent\");\n\n            return;\n        }\n\n        this.loadScript();\n    }\n\n    loadScript() {\n        fireEREvt(\"ad-double-verify-load-start\");\n        // Stub before inject so ad requests queue on dvtag.cmd while pub.js loads\n        doubleVerifyInitScript();\n        this._measure(\n            \"loadDoubleVerify\",\n            () => this.loadScriptDependency(this._dvScriptUrl).then(() => {\n                fireEREvt(\"ad-double-verify-load-end\");\n            })\n        ).catch((e) => {\n            console.error(`Error init doubleVerify Script:  ${ e }`);\n        });\n    }\n\n    callOnDvTagReady(cb?: OnDvTagReadyCb) {\n        if (typeof window.onDvtagReady === \"function\") {\n            try {\n                window.onDvtagReady(cb);\n            } catch (error) {\n                console.error(\"failed to init onDvtagReady function for double verify\");\n            }\n        } else if (typeof cb === \"function\") {\n            // fallback to call back function\n            cb();\n        }\n    }\n\n    /**\n     * each individual GAM requests and refreshes triggers need to be wrapped in DV callback\n     * @returns promise\n     */\n    dvtagReadyPromise() {\n        return new Promise<void>((resolve) => {\n            this.callOnDvTagReady(resolve);\n        });\n    }\n\n}\n","export const doubleVerifyScriptUrl = \"https://pub.doubleverify.com/dvtag/24434720/DV1462763/pub.js\";\n\n/**\n * Script from Double verify\n * Refer to https://support.doubleverify.com/support/solutions/articles/22000284278-unity-tag-integration\n * JavaScript implementation to properly queue ad requests until the Unity Tag is ready\n * Do not update unless verify with doubleVerify\n */\n/* eslint-disable */\nexport const doubleVerifyInitScript = () => {\n    window.onDvtagReady = function(callback, timeout = 750) {\n        window.dvtag = window.dvtag || {};\n        dvtag.cmd = dvtag.cmd || [];\n        const opt = { callback, timeout, timestamp: new Date().getTime() };\n\n        dvtag.cmd.push(() => { dvtag.queueAdRequest(opt) });\n        setTimeout(() => {\n            const cb = opt.callback;\n\n            opt.callback = null;\n            if (cb) {\n                cb();\n            }\n        }, timeout);\n    };\n};\n","import DependencyLoader from \"../DependencyLoader\";\nimport makeMeasure from \"../util/makeMeasure\";\nimport PerformanceMonitor from \"../util/monitoring/PerformanceMonitor\";\n\nconst ER_SCRIPT_NAME = \"event-recorder-client.min.js\";\nconst ER_SRC = `${ process.env.ASSETS_DOMAIN }/s3/foundation/event-recorder-client/1.0/${ ER_SCRIPT_NAME }`;\n\ntype EventRecorderLoaderProps = {\n    enabled?: boolean;\n    application?: string;\n    scriptUrl?: string;\n}\n\nexport class EventRecorderLoader extends DependencyLoader {\n\n    private performanceMonitor = new PerformanceMonitor(\"Sparkle:EventRecorder\");\n    private measure = makeMeasure(this.performanceMonitor);\n    private options: EventRecorderLoaderProps;\n\n    constructor(options: EventRecorderLoaderProps) {\n        super();\n        this.options = options;\n    }\n\n    init() {\n        if (!this.options.enabled) return;\n        this.initClient(this.options.application);\n        this.measure(\n            \"loadEventRecorder\",\n            () => this.loadScriptDependency(this.options.scriptUrl ?? ER_SRC)\n        ).catch((e) => {\n            console.error(`Error loading EventRecorder script: ${ e }`);\n        });\n    }\n\n    private initClient(application?: string) {\n        const appName = application ?? \"sparkle\";\n        const current = Date.now();\n\n        window.eventRecorder.cmd.push(() => {\n            const eventRecorder = window.getEventRecorderClient(appName);\n\n            // handle cases where first event doesn't come from sparkle and appname is undefined\n            if (eventRecorder.application === \"undefined\") {\n                eventRecorder.application = appName;\n            }\n\n            eventRecorder.fireEvent(\"PageLoaded\", {}, {}, current);\n        });\n    }\n\n}\n","import md5 from \"blueimp-md5\";\nimport Environment from \"../util/Environment\";\nimport curry from \"../util/curry\";\nimport EventTarget, { EventHandler } from \"../util/EventTarget\";\nimport { logError } from \"../util/monitoring/clientUtilsNR\";\nimport fireEREvt from \"../util/eventRecorderClient\";\nimport { getConsentFlags } from \"../util/consent\";\nimport Viewability, { AdSizes, type AdSizeMap } from \"../viewability/Viewability\";\nimport { Targeting } from \"../interfaces/TargetingProvider\";\nimport CompanionGroup from \"../refreshing/CompanionGroup\";\nimport SlotRenderEndedEvent from \"./SlotRenderEndedEvent\";\nimport fixInlineBlockBaseline from \"./fixInlineBlockBaseline\";\n\nconst AD_ELEMENT_CLASS = \"bb-ads__ad\";\nconst RENDERED_CLASS = \"bb-ads__rendered\";\nconst EMPTY_CLASS = \"bb-ads__empty\";\nconst AD_ELEMENT_NO_SIZE_CLASS = \"bb-ads__no_size\";\nconst AD_CREATED = \"sparkleAdCreated\";\n\nconst isEmpty = ({ isEmpty: assertEmpty }: { isEmpty: boolean }) => assertEmpty;\n\nconst isOneByOne = ({ size = [] }: googletag.events.SlotRenderEndedEvent) => {\n    // @ts-expect-error ts migration\n    const [first, second] = size;\n\n    return (first === 1 && second === 1);\n};\n\nexport default class Ad extends EventTarget {\n\n    private _refreshAttemptCounter = 0;\n    private _refreshCount = 0;\n    private _unitName: string;\n    private _dimensions: AdSizeMap;\n    private _targeting: Targeting;\n    private _slot: googletag.Slot | null;\n    private _viewportOffset = 0;\n    private _renderTime: DOMHighResTimeStamp | null = null;\n    private _slotRenderedEvent: SlotRenderEndedEvent | null = null;\n    private _isInterstitial = false;\n    private _triggeredRenderedEventArgument: SlotRenderEndedEvent | null = null;\n    private _triggeredEmptyEventArgument: SlotRenderEndedEvent | null = null;\n    private _containerId: string;\n    private _viewability: Viewability;\n    private _isDecoupled: boolean;\n    private _isMobile = false;\n    private _sizes: AdSizes;\n    private _id: string = \"\";\n    private _requestTime: DOMHighResTimeStamp | undefined = undefined;\n    private _companionGroup: CompanionGroup | undefined = undefined;\n    private _shadowHostElement: HTMLElement | undefined = undefined;\n\n    static EVENTS = {\n        ON_RENDER: \"render\",\n        ON_BEFORE_RENDER: \"beforeRender\",\n        ON_EMPTY: \"empty\",\n        ON_LOAD: \"load\"\n    };\n\n    constructor(\n        viewability: Viewability,\n        containerId: string,\n        unitName: string,\n        dimensions: AdSizeMap,\n        targeting: Targeting = {},\n        isDecoupled = false,\n        shadowHostElement?: HTMLElement\n    ) {\n        super();\n\n        if (targeting.tickers) {\n            targeting.tickers = JSON.stringify(targeting.tickers);\n        }\n\n        this._unitName = unitName;\n        this._dimensions = dimensions;\n        this._targeting = targeting;\n        this._slot = null;\n        this._viewportOffset = 0;\n        this._renderTime = null;\n        this._slotRenderedEvent = null;\n        this._isInterstitial = false;\n        this._triggeredRenderedEventArgument = null;\n        this._triggeredEmptyEventArgument = null;\n        this._containerId = containerId;\n        this._viewability = viewability;\n        this._isDecoupled = isDecoupled;\n        this._shadowHostElement = shadowHostElement;\n\n        this._isMobile = false;\n        this._sizes = this.getSizes();\n        this._contextifyCallbacks();\n        this._setId();\n        this._renderContainer(containerId);\n\n        this.onRender(curry(this.setClassName, RENDERED_CLASS));\n        this.onEmpty(curry(this.setClassName, EMPTY_CLASS));\n    }\n\n    /**\n     * Bind methods to self for use as callbacks\n     *\n     * @private\n     */\n    _contextifyCallbacks() {\n        this.setClassName = this.setClassName.bind(this);\n    }\n\n    /**\n     * Computes unique id from sizes, targeting, and unit name\n     *\n     * @private\n     */\n    _setId() {\n        const idComponents = [\n            this._dimensions,\n            this._targeting,\n            this._unitName\n        ];\n\n        this._id = md5(JSON.stringify(idComponents));\n    }\n\n    /**\n     * Creates and prepends ad element to self\n     *\n     * @private\n     */\n    _renderContainer(containerId: string) {\n        let container = this._shadowHostElement\n            ? this._shadowHostElement.shadowRoot?.getElementById(containerId) as HTMLElement | null\n            : document.getElementById(containerId);\n\n        if (!container) {\n            // eslint-disable-next-line no-console\n            console.log(`Failed to render: Ad container did not exist for id ${ containerId }`);\n\n            return;\n        }\n\n        let adElement: HTMLElement | null = document.createElement(\"div\");\n\n        adElement.setAttribute(\"class\", AD_ELEMENT_CLASS);\n        adElement.setAttribute(\"id\", this._id);\n        adElement.setAttribute(\"aria-hidden\", \"true\");\n        container.insertBefore(adElement, container.firstChild);\n        container = null;\n        adElement = null;\n    }\n\n    /**\n     * @returns {boolean}\n     */\n    isDecoupled() {\n        return this._isDecoupled;\n    }\n\n    getDomId(): string | null {\n        return this._slot ? this._slot.getSlotElementId() : null;\n    }\n\n    /**\n     * @returns {string}\n     */\n    getId() {\n        return this._id;\n    }\n\n    /**\n     * Counts refresh attempts, including ones a refresh strategy later\n     * filters out. Only used to name performance metrics.\n     *\n     * @returns {number}\n     */\n    getAndIncrementRefreshAttempt() {\n        this._refreshAttemptCounter++;\n\n        return this._refreshAttemptCounter;\n    }\n\n    /**\n     * Counts refreshes actually issued to GPT, unlike\n     * {@link getAndIncrementRefreshAttempt}\n     *\n     * @returns {number}\n     */\n    incrementRefreshCount() {\n        this._refreshCount++;\n\n        return this._refreshCount;\n    }\n\n    /**\n     * @returns {number}\n     */\n    getRefreshCount() {\n        return this._refreshCount;\n    }\n\n    getSizes() {\n        if (!this._sizes || !this._sizes?.length) {\n            this._sizes = this._viewability.getSizes(this._dimensions);\n        }\n\n        return this._sizes;\n    }\n\n    /**\n     * @returns {boolean}\n     */\n    isDisplayable() {\n        return Boolean(this.getSizes().length);\n    }\n\n    getSlot() {\n        return this._slot;\n    }\n\n    getTargeting() {\n        return Object.assign({}, this._targeting, {\n            pmid: this.getId()\n        });\n    }\n\n    addTargeting(newTargeting: Targeting) {\n        Object.assign(this._targeting, newTargeting);\n    }\n\n    getElement(): HTMLElement | null {\n        if (this._shadowHostElement) {\n            return this._shadowHostElement.shadowRoot?.getElementById(this._id) as HTMLElement | null;\n        }\n\n        return document.getElementById(this._id);\n    }\n\n    getElementTopPosition() {\n        const el = this.getElement();\n\n        if (!document || !el) {\n            return Infinity;\n        }\n\n        return el.getBoundingClientRect().top + document.documentElement.scrollTop;\n    }\n\n    getIframe() {\n        const element = this.getElement();\n        const iframes = element ? Array.from(element.getElementsByTagName(\"iframe\")) : [];\n        const foundIframe = iframes.find((f) => Boolean(f.offsetParent)) || null;\n\n        if (foundIframe && !foundIframe.hasAttribute(\"title\")) {\n            foundIframe.setAttribute(\"title\", \"Advertisement content\");\n        }\n\n        return foundIframe;\n    }\n\n    getUnitName() {\n        return this._unitName;\n    }\n\n    getPerformanceId() {\n        return this._targeting.performanceId;\n    }\n\n    hasSlot() {\n        return Boolean(this._slot);\n    }\n\n    setHeight(height: string) {\n        let iframe = this.getIframe();\n\n        if (iframe) {\n            iframe.setAttribute(\"height\", height);\n            iframe = null;\n        }\n\n        return this;\n    }\n\n    setDimensions(width: string, height: string) {\n        let iframe = this.getIframe();\n\n        if (iframe) {\n            iframe.setAttribute(\"width\", width);\n            iframe.setAttribute(\"height\", height);\n            iframe = null;\n        }\n\n        return this;\n    }\n\n    setClassName(className: string) {\n        const element = this.getElement();\n\n        if (element) {\n            element.classList.add(className);\n\n            if (this._sizes.some((size) => Boolean(size[0]) && size[0] === size[1])) {\n                element.classList.add(AD_ELEMENT_NO_SIZE_CLASS);\n                this._sizes.forEach((size) => {\n                    if (Boolean(size[0]) && size[0] === size[1]) {\n                        element.classList.add(`bb-ads__size_${ size[0] }x${ size[1] }`);\n                    }\n                });\n            }\n        }\n\n        return this;\n    }\n\n    /**\n     * Sets slot\n     *\n     * @param {googletag.Slot} slot\n     * @returns {Ad}\n     */\n    setSlot(slot: googletag.Slot) {\n        this._slot = slot;\n\n        return this;\n    }\n\n    /**\n     * Sets the viewport offset\n     *\n     * @param {number} viewportOffset\n     * @returns {Ad}\n     */\n    setViewportOffset(viewportOffset: number) {\n        this._viewportOffset = viewportOffset;\n\n        return this;\n    }\n\n    /**\n     * Get viewport offset\n     *\n     * @returns {number}\n     */\n    getViewportOffset() {\n        return this._viewportOffset;\n    }\n\n    setRequestTime(requestTime: DOMHighResTimeStamp) {\n        this._requestTime = requestTime;\n    }\n\n    /**\n     * Get GPT request start time\n     *\n     * @returns {DOMHighResTimeStamp,}\n     */\n    getRequestTime() {\n        return this._requestTime;\n    }\n\n    getRenderTime(): DOMHighResTimeStamp | null {\n        return this._renderTime;\n    }\n\n    /**\n     * Get SlotRenderEndedEvent\n     */\n    setSlotRenderedEvent(event: SlotRenderEndedEvent): void {\n        this._slotRenderedEvent = event;\n    }\n\n    getSlotRenderedEvent(): SlotRenderEndedEvent | null {\n        return this._slotRenderedEvent;\n    }\n\n    /**\n     * Executes callback when the ad has been rendered and is not empty\n     */\n    onRender(callback: EventHandler<SlotRenderEndedEvent>): Ad {\n        // There is a chance that render finish before onRender is executed.\n        // Therefore we need to distinguish between rendered and empty flags\n        if (this._triggeredRenderedEventArgument) {\n            callback(this._triggeredRenderedEventArgument);\n\n            return this;\n        }\n\n        this.addEventListener(Ad.EVENTS.ON_RENDER, callback);\n\n        return this;\n    }\n\n    /**\n     * Executes callback when the ad was served with an empty response. Empty\n     * refers to a lack of inventory for ads targeting\n     */\n    onEmpty(callback: EventHandler<SlotRenderEndedEvent>): Ad {\n        // There is a chance that render finish before onEmpty is executed.\n        // Therefore we need to distinguish between rendered and empty flags\n        if (this._triggeredEmptyEventArgument) {\n            callback(this._triggeredEmptyEventArgument);\n\n            return this;\n        }\n\n        this.addEventListener(Ad.EVENTS.ON_EMPTY, callback);\n\n        return this;\n    }\n\n    /**\n     * Delegates a rendering event to the appropriate event listeners based on\n     * the event being empty or not\n     */\n    handleTaglessRenderEvent(event: SlotRenderEndedEvent): void {\n        this._triggeredRenderedEventArgument = event;\n        this._slotRenderedEvent = event;\n        const element = this.getElement();\n\n        if (element) {\n            element.removeAttribute(\"aria-hidden\");\n        }\n        this.dispatchEvent(Ad.EVENTS.ON_RENDER, event);\n    }\n\n    /**\n     * Delegates a rendering event to the appropriate event listeners based on\n     * the event being empty or not\n     */\n    handleSlotRenderEvent(event: googletag.events.SlotRenderEndedEvent): void {\n        const useEmptyCallbacks = isEmpty(event) || isOneByOne(event);\n\n        this._renderTime = Environment.currentTime();\n\n        this._slotRenderedEvent = new SlotRenderEndedEvent({\n            id: this.getId(),\n            adCode: this.getUnitName(),\n            requestTime: this.getRequestTime(),\n            event\n        });\n\n        const element = this.getElement();\n\n        if (useEmptyCallbacks) {\n            if (element) {\n                element.setAttribute(\"aria-hidden\", \"true\");\n            }\n            this.dispatchEvent(Ad.EVENTS.ON_EMPTY, this._slotRenderedEvent);\n            this.removeEventListener(Ad.EVENTS.ON_RENDER);\n            this._triggeredEmptyEventArgument = this._slotRenderedEvent;\n        } else {\n            if (element) {\n                element.removeAttribute(\"aria-hidden\");\n            }\n            this.dispatchEvent(Ad.EVENTS.ON_RENDER, this._slotRenderedEvent);\n            this.removeEventListener(Ad.EVENTS.ON_EMPTY);\n            this._triggeredRenderedEventArgument = this._slotRenderedEvent;\n        }\n\n        const { creativeId, lineItemId, campaignId, size, advertiserId } = event;\n        const { reqAllowed, funAllowed, padAllowed } = getConsentFlags();\n\n        fireEREvt(\"ad-render\", {\n            \"container-id\": this._containerId,\n            creativeId,\n            lineItemId,\n            campaignId,\n            size,\n            advertiserId,\n            isEmpty: useEmptyCallbacks,\n            reqAllowed,\n            funAllowed,\n            padAllowed,\n            refreshCount: this._refreshCount\n        });\n    }\n\n    handleSlotOnLoadEvent(event?: googletag.events.SlotOnloadEvent, taglessIframe?: HTMLIFrameElement) {\n        this.dispatchEvent(Ad.EVENTS.ON_LOAD, event);\n        fireEREvt(\"ad-load\", { \"container-id\": this._containerId });\n        // check for iframe\n        const iframe = taglessIframe || this.getIframe();\n\n        if (iframe) {\n            // ADSTEAM-2554/2614: neutralize the inline-block baseline gap for\n            // fixed-height creatives (300x250, 320x50)\n            fixInlineBlockBaseline(iframe);\n\n            iframe.addEventListener(\"load\", () => {\n                fireEREvt(\"ad-iframe-loaded\", { \"container-id\": this._containerId });\n                // re-apply in case the friendly iframe (re)navigated on load\n                fixInlineBlockBaseline(iframe);\n            });\n            // This \"data-load-complete\" attribute won't be found in our tagless iframe\n            // since it is a gpt custom attribute\n            const dataLoaded = iframe.getAttributeNode(\"data-load-complete\");\n\n            if (dataLoaded) {\n                if (dataLoaded.textContent === \"true\") {\n                    fireEREvt(\"ad-iframe-dataloaded\", { \"container-id\": this._containerId });\n                }\n            }\n        }\n    }\n\n    /**\n     * Cleans up ad container for new slot\n     */\n    handleSlotResponseReceivedEvent(): void {\n        this._resetContainer();\n        fireEREvt(\"ad-resp-recv\", { \"container-id\": this._containerId });\n    }\n\n    getContainerId(): string {\n        return this._containerId;\n    }\n\n    getShadowHostElement(): HTMLElement | undefined {\n        return this._shadowHostElement;\n    }\n\n    _resetContainer(): void {\n        const container = document.getElementById(this._containerId);\n\n        if (!container) {\n            logError(new Error(`Failed to reset container: Ad container did not exist for id ${ this._containerId }`));\n\n            return;\n        }\n\n        container.setAttribute(\"style\", \"\");\n\n        const adElement = container.getElementsByClassName(AD_ELEMENT_CLASS).item(0);\n\n        if (!adElement) {\n            logError(new Error(`Failed to reset container: Ad element does not exist for the following container: ${ this._containerId }`));\n\n            return;\n        }\n\n        adElement.setAttribute(\"style\", \"\");\n    }\n\n    /**\n     * Sets a flag which designates ad for out of page slot\n     */\n    setInterstitialFlag(flag: boolean) {\n        this._isInterstitial = flag;\n\n        return this;\n    }\n\n    isInterstitial(): boolean {\n        return this._isInterstitial;\n    }\n\n    setCompanionGroup(companionGroup: CompanionGroup): void {\n        this._companionGroup = companionGroup;\n    }\n\n    companionGroup(): CompanionGroup | null {\n        return this._companionGroup || null;\n    }\n\n    notifyAdCreated(): Ad {\n        const containerId = this.getContainerId();\n\n        window.dispatchEvent(new CustomEvent(AD_CREATED, {\n            detail: { containerId }\n        }));\n\n        return this;\n    }\n\n    isCompanionChild(): boolean {\n        // @ts-expect-error ts migration\n        return (this.companionGroup() && this.companionGroup().children()\n            .lastIndexOf(this) >= 0);\n    }\n\n    isMobile(): boolean {\n        this._isMobile = this._viewability?.isMobile(this._dimensions);\n\n        return this._isMobile;\n    }\n\n    destroy(): void {\n        // @ts-expect-error ts migration\n        this._unitName = null;\n        // @ts-expect-error ts migration\n        this._sizes = null;\n        // @ts-expect-error ts migration\n        this._targeting = null;\n        this._slot = null;\n        this._slotRenderedEvent = null;\n    }\n\n}\n","import { v4 as uuidv4 } from \"uuid\";\nimport { cmpCookie } from \"@foundation/cmp-client\";\nimport DependencyLoader from \"../DependencyLoader\";\nimport Environment from \"../util/Environment\";\nimport PerformanceMonitor from \"../util/monitoring/PerformanceMonitor\";\nimport stripSlashes from \"../util/stripSlashes\";\nimport { SLOT_ONLOAD_EVENT, SLOT_RENDER_EVENT, SLOT_REQUESTED, SLOT_RESPONSE_RECEIVED_EVENT } from \"../constants\";\nimport fireEREvt from \"../util/eventRecorderClient\";\nimport DoubleVerifyTracking from \"../doubleVerify/DoubleVerifyTracking\";\nimport Reporter from \"../util/monitoring/Reporter\";\nimport Viewability, { AdSizeMap } from \"../viewability/Viewability\";\nimport { Targeting } from \"../interfaces/TargetingProvider\";\nimport UserInfo from \"../session/UserInfo\";\nimport { WatchlistProvider } from \"../watchlists/WatchlistProvider\";\nimport AdsServiceClient from \"../adsService/AdsServiceClient\";\nimport Ad from \"./Ad\";\n\nconst GPT_SRC = \"https://securepubads.g.doubleclick.net/tag/js/gpt.js\";\n\n/**\n * Refresh depths at or above this are reported to GAM as a single bucket.\n * Values 0 through 9 are reported individually.\n */\nconst MAX_REPORTED_REFRESH = 10;\n\nconst SERVICES = {\n    pubads: \"pubads\",\n    companionAds: \"companionAds\"\n};\n\nexport type ServiceConfig = {\n    services: string[];\n    display?: boolean;\n    changeCorrelator?: boolean;\n}\n\nexport default class GPT extends DependencyLoader {\n\n    private _performanceMonitor = new PerformanceMonitor(\"Sparkle:GPT\");\n    private _cachedSlots: Record<string, googletag.Slot> = {};\n    private _networkCode: string;\n    private _renderedAds: Record<string, Ad> = {};\n    private _googletag = window.googletag;\n    private _tagLoadedToFirstAdMetric: Reporter | null;\n    private _doubleVerifyTracking: DoubleVerifyTracking;\n    private _adsServiceClient: AdsServiceClient;\n    private _watchlistProvider: WatchlistProvider;\n    private _enableLazyLoad: boolean;\n    services = SERVICES;\n\n    constructor(\n        networkCode: string,\n        doubleVerifyTracking: DoubleVerifyTracking,\n        adsServiceClient: AdsServiceClient,\n        watchlistProvider: WatchlistProvider,\n        enableLazyLoad = false\n    ) {\n        super();\n\n        this._networkCode = networkCode;\n        this._tagLoadedToFirstAdMetric = this._performanceMonitor.createMetric(\"tagLoadedToFirstAdMetric\");\n        this._doubleVerifyTracking = doubleVerifyTracking;\n        this._adsServiceClient = adsServiceClient;\n        this._watchlistProvider = watchlistProvider;\n        this._enableLazyLoad = enableLazyLoad;\n\n        this._contextifyCallbacks();\n        this._listenToSlotRenderEvents();\n        this._collapseEmptyDivs();\n\n        // This will be the very first cmd to be enqueue to GPT.\n        // The purpose is to mark the time when GPT queue is ready, which\n        // should represent the time when gpt related scripts finish loading\n        this.enqueue(() => {\n            this._tagLoadedToFirstAdMetric?.start();\n            fireEREvt(\"ad-gpt-pubads-loaded\", {});\n\n            if (enableLazyLoad) {\n                window.googletag.setConfig({\n                    lazyLoad: {\n                        // Fetch slots immediately (null disables the fetch margin;\n                        // omitting it would fall back to Google's lazy default)\n                        fetchMarginPercent: null,\n                        // Render slots within 30% of viewport.\n                        renderMarginPercent: 30,\n                        // Double the above values on mobile, where viewports are smaller\n                        // and users tend to scroll faster.\n                        mobileScaling: 2.0\n                    }\n                });\n            }\n        });\n\n        const loadMetric = this._performanceMonitor.createMetric(\"load\");\n\n        loadMetric.start();\n        fireEREvt(\"ad-gpt-load-start\", {});\n\n        this.loadScriptDependency(GPT_SRC).then(() => {\n            loadMetric.end();\n            fireEREvt(\"ad-gpt-load-end\", {});\n        });\n    }\n\n    static html(): string {\n        return `<script src=\"${ GPT_SRC }\" async></script>`;\n    }\n\n    /**\n     * Binds various callback methods to `this`\n     */\n    private _contextifyCallbacks() {\n        this._handleSlotRenderEvent = this._handleSlotRenderEvent.bind(this);\n        this._handleSlotLoadEvent = this._handleSlotLoadEvent.bind(this);\n        this._handleSlotResponseReceivedEvent = this._handleSlotResponseReceivedEvent.bind(this);\n        this._handleSlotRequestedEvent = this._handleSlotRequestedEvent.bind(this);\n    }\n\n    private _defineSlot(ad: Ad, services: string[] = []) {\n        let slot;\n\n        if (ad.isInterstitial()) {\n            slot = this._googletag.defineOutOfPageSlot(ad.getUnitName(), ad.getId());\n        } else {\n            slot = this._googletag.defineSlot(ad.getUnitName(), ad.getSizes(), ad.getId());\n        }\n\n        if (!slot) {\n            return null;\n        }\n\n        const targeting = ad.getTargeting();\n\n        ad.setSlot(slot);\n\n        slot.setConfig({ targeting: withoutEmptyValues(targeting) });\n        setImpressionIdTargeting(slot);\n        setRefreshTargeting(slot, ad.getRefreshCount());\n\n        services.forEach((service) => slot.addService(this._googletag[service]()));\n\n        this._cachedSlots[ad.getId()] = slot;\n\n        return slot;\n    }\n\n    private _display(ad: Ad) {\n        fireEREvt(\"ad-display\", { \"container-id\": ad.getContainerId() });\n        this._doubleVerifyTracking.dvtagReadyPromise().then(() => {\n            // For shadow DOM, pass element reference directly\n            // For regular DOM, pass ID string\n            this._googletag.display(ad.getShadowHostElement() ? ad.getElement() : ad.getDomId());\n        });\n    }\n\n    /**\n     * Get ad from rendered ads store for use in rendered/empty callbacks\n     */\n    private _getRenderedAd(domId: string) {\n        return this._renderedAds[domId] || null;\n    }\n\n    /**\n     * Dispatches rendering events to the correct Ad and removes from unrendered ad registry\n     */\n    private _handleSlotRenderEvent(event: googletag.events.SlotRenderEndedEvent) {\n        const ad = this._getRenderedAd(event.slot.getSlotElementId());\n\n        if (ad) {\n            ad.handleSlotRenderEvent(event);\n        }\n    }\n\n    /**\n     * Record the duration between gpt scripts finishing loading and first ad requested\n     */\n    private _handleSlotRequestedEvent() {\n        // Mark the time when the first ad request is sent. This metric should\n        // match GAM's metrics of \"Tag loaded to first ad request time\"\n        if (this._tagLoadedToFirstAdMetric) {\n            this._tagLoadedToFirstAdMetric.end();\n            this._tagLoadedToFirstAdMetric = null;\n            fireEREvt(\"ad-first-slot-requested\", {});\n        }\n    }\n\n    /**\n     * Dispatches event when ad has fully finished loading Ad iframe\n     */\n    private _handleSlotLoadEvent(event: googletag.events.SlotOnloadEvent) {\n        const ad = this._getRenderedAd(event.slot.getSlotElementId());\n\n        if (ad) {\n            ad.handleSlotOnLoadEvent(event);\n        }\n    }\n\n    private _handleSlotResponseReceivedEvent(event: googletag.events.SlotResponseReceived) {\n        const ad = this._getRenderedAd(event.slot.getSlotElementId());\n\n        if (ad) {\n            ad.handleSlotResponseReceivedEvent();\n        }\n    }\n\n    /**\n     * Binds listener to GPT's slot render event\n     */\n    private _listenToSlotRenderEvents() {\n        this.enqueue(() => {\n            Object.keys(SERVICES).forEach((service) => {\n                const gservice = this._googletag[service]();\n\n                gservice.addEventListener(SLOT_RENDER_EVENT, this._handleSlotRenderEvent);\n                gservice.addEventListener(SLOT_ONLOAD_EVENT, this._handleSlotLoadEvent);\n                // eslint-disable-next-line max-len\n                gservice.addEventListener(SLOT_RESPONSE_RECEIVED_EVENT, this._handleSlotResponseReceivedEvent);\n                gservice.addEventListener(SLOT_REQUESTED, this._handleSlotRequestedEvent);\n            });\n        });\n    }\n\n    /**\n     * Refresh slots\n     */\n    private _refreshSlots(slots: googletag.Slot[], { changeCorrelator = false } = {}) {\n        slots.forEach(setImpressionIdTargeting);\n        this._doubleVerifyTracking.dvtagReadyPromise().then(() => {\n            this._googletag.pubads().refresh(slots, { changeCorrelator });\n        });\n\n    }\n\n    /**\n     * Refreshes the cached slot for an ad if it exists\n     * Returns true if successful, false if not\n     */\n    private _renderCachedSlot(ad: Ad, options = {}) {\n        const slot = this._cachedSlots[ad.getId()];\n\n        if (!slot) {\n            return false;\n        }\n\n        // A new Ad picking up a cached slot is a first delivery for its page view, so it\n        // clears the refresh targeting the previous ad left behind. The same Ad arriving\n        // here again is re-requesting a slot it already holds, which is a refresh.\n        const isRerequest = ad.getSlot() === slot;\n\n        ad.setSlot(slot);\n        setRefreshTargeting(slot, isRerequest ? ad.incrementRefreshCount() : ad.getRefreshCount());\n        this._storeRenderedAd(ad);\n        this._refreshSlots([slot], options);\n\n        return true;\n    }\n\n    /**\n     * Stores a reference to rendered ad for render/empty callbacks\n     */\n    private _storeRenderedAd(ad: Ad) {\n        this._renderedAds[ad.getDomId() as string] = ad;\n    }\n\n    /**\n     * Configure all ad slots on the page to be expanded by default,\n     * but collapse slots that are unable to be filled with an ad.\n     * https://developers.google.com/publisher-tag/reference#googletag.config.PageSettingsConfig.collapseDiv\n     */\n    private _collapseEmptyDivs() {\n        this.enqueue(() => this._googletag.setConfig({ collapseDiv: \"ON_NO_FILL\" }));\n    }\n\n    /**\n     * Factory method for GPT Ad\n     */\n    createAd(\n        viewability: Viewability,\n        containerId: string,\n        adCode: string,\n        dimensions: AdSizeMap,\n        targeting: Targeting,\n        isDecoupled: boolean,\n        shadowHostElement?: HTMLElement\n    ): Ad {\n        return new Ad(viewability, containerId, `/${ this._networkCode }/${ adCode }`, dimensions, targeting, isDecoupled, shadowHostElement);\n    }\n\n    /**\n     * Sets GPT personalization data based on user consent\n     */\n    setPersonalization(userInfo: UserInfo, gdprApplies?: boolean): Promise<string | undefined | null | void> {\n        return cmpCookie.padAllowedAsync()\n            .then((padAllowed) => {\n                if (padAllowed) {\n                    return userInfo\n                        .getSessionId()\n                        .then((sessionId) => {\n                            const sanitizedSessionId = stripSlashes(sessionId);\n\n                            this.enqueue(() => {\n                                this._googletag.pubads().setPublisherProvidedId(sanitizedSessionId);\n                            });\n\n                            fireEREvt(\"ad-personalization-ret\", { sessionId });\n\n                            return sessionId;\n                        })\n                        .catch((e) => {\n                            fireEREvt(\"ad-personalization-err\", e);\n\n                            return null;\n                        });\n                } else if (gdprApplies) {\n                    // npa flag is only applicable for GDPR and us_privacy string is used for MSPS\n                    this.enqueue(() => {\n                        this._googletag.pubads().setPrivacySettings({ nonPersonalizedAds: true });\n                    });\n                }\n\n                return null;\n            })\n            .catch(() => {\n                this.enqueue(() => {\n                    this._googletag.pubads().setPrivacySettings({ nonPersonalizedAds: true });\n                });\n            });\n    }\n\n    /**\n     * Renders the ad\n     * https://developers.google.com/doubleclick-gpt/reference#googletag.defineSlot\n     * https://developers.google.com/doubleclick-gpt/reference#googletag.display\n     * https://developers.google.com/doubleclick-gpt/reference#googletag.enableServices\n     *\n     * @param {Ad} ad\n     * @param {object} config\n     * @param {string[]} [config.services=[]]\n     * @param {boolean} [config.display=true]\n     * @returns {Promise}\n     */\n    render(ad: Ad, { services = [],\n        display = true,\n        changeCorrelator = false }: ServiceConfig): Promise<void> {\n        return new Promise((resolve) => {\n            this.enqueue(() => {\n                ad.setRequestTime(Environment.currentTime());\n\n                const cached = this._renderCachedSlot(ad, { changeCorrelator });\n\n                if (cached) {\n                    return resolve();\n                }\n\n                const slot = this._defineSlot(ad, services);\n\n                if (!slot) {\n                    return resolve();\n                }\n\n                this._storeRenderedAd(ad);\n\n                this._doubleVerifyTracking.callOnDvTagReady();\n\n                const slotDependencies = [];\n\n                if (this._adsServiceClient) {\n                    const adservicePromise =\n                        this._adsServiceClient.getTargetingsForAdSync().then(\n                            (targetings) => {\n                                ad.getSlot()?.setConfig({ targeting: withoutEmptyValues(targetings) });\n                            }\n                        );\n\n                    // for now, we don't wait for all the async targetings\n                    this._adsServiceClient.getTargetingsForAdAsync().then(\n                        (targetings) => {\n                            ad.getSlot()?.setConfig({ targeting: withoutEmptyValues(targetings) });\n                        }\n                    );\n                    slotDependencies.push(adservicePromise);\n                }\n\n                if (this._watchlistProvider) {\n                    // do not wait for watchlist, it will be done at background.\n                    this._watchlistProvider.getTargeting().then(\n                        (targetings) => {\n                            ad.getSlot()?.setConfig({ targeting: withoutEmptyValues(targetings) });\n                        }\n                    );\n                }\n\n                return Promise.allSettled(slotDependencies)\n                    .then(() => {\n                        fireEREvt(\"ad-render-start\", { \"container-id\": ad.getContainerId() });\n                        ad.dispatchEvent(Ad.EVENTS.ON_BEFORE_RENDER);\n\n                        this._googletag.enableServices();\n\n                        if (display) {\n                            this._display(ad);\n                        }\n                    })\n                    .catch((err) => console.warn(err))\n                    .finally(resolve);\n            });\n        });\n    }\n\n    /**\n     * Renders the ad as fast as possible (ignores bids)\n     * Used for superburst parameter ad call\n     */\n    renderInstant(ad: Ad, { services = [] }: ServiceConfig): void {\n        this.enqueue(() => {\n            ad.dispatchEvent(Ad.EVENTS.ON_BEFORE_RENDER);\n            ad.setRequestTime(Environment.currentTime());\n\n            const cached = this._renderCachedSlot(ad);\n\n            if (cached) {\n                return;\n            }\n\n            const slot = this._defineSlot(ad, services);\n\n            if (!slot) {\n                return;\n            }\n\n            this._googletag.enableServices();\n            this._storeRenderedAd(ad);\n            this._display(ad);\n        });\n    }\n\n    /**\n     * Enables single request mode for fetching multiple ads at the same time.\n     * https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_enableSingleRequest\n     */\n    enableSingleRequest(): void {\n        this.enqueue(() => this._googletag.pubads().enableSingleRequest());\n    }\n\n    /**\n     * Inform GPT that video ads will be present on the page\n     * https://developers.google.com/publisher-tag/reference#googletag.config.PageSettingsConfig.videoAds\n     */\n    enableVideoAds(): void {\n        this.enqueue(() => this._googletag.setConfig({ videoAds: { enableVideoAds: true } }));\n    }\n\n    /**\n     * Push callback to GPT\n     */\n    enqueue(cb: () => void): void {\n        if (this._googletag) this._googletag.cmd.push(cb);\n    }\n\n    /**\n     * Refresh a list of ads\n     * https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_refresh\n     */\n    refresh(ads: Ad[], options = {}): void {\n        ads\n            .filter((ad) => ad.hasSlot())\n            .forEach((ad) => {\n                const slot = ad.getSlot() as googletag.Slot;\n\n                ad.dispatchEvent(Ad.EVENTS.ON_BEFORE_RENDER);\n\n                this.enqueue(() => {\n                    setRefreshTargeting(slot, ad.incrementRefreshCount());\n                    this._refreshSlots([slot], options);\n                });\n            });\n    }\n\n    /**\n     * Enable/disable companion ad backfilling of unfilled slots\n     */\n    setRefreshUnfilledSlots(value: boolean): void {\n        this.enqueue(() => this._googletag.companionAds().setRefreshUnfilledSlots(value));\n    }\n\n    /**\n     * Page-level targeting. setConfig merges targeting per key, so other keys are kept.\n     * https://developers.google.com/publisher-tag/reference#googletag.config.PageSettingsConfig.targeting\n     */\n    setTargeting(name: string, value: string | string[]): void {\n        this.enqueue(() => this._googletag.setConfig({ targeting: { [name]: value } }));\n    }\n\n    /**\n     * Return the list of all GPT page-level targeting keys.\n     */\n    getTargetingKeys(): string[] {\n        return Object.keys(this._getPageTargeting());\n    }\n\n    /**\n     * Return GPT page-level targeting info for a specific key.\n     */\n    getTargeting(key: string): string | string[] {\n        return this._getPageTargeting()[key] ?? [];\n    }\n\n    private _getPageTargeting() {\n        return this._googletag.getConfig(\"targeting\").targeting ?? {};\n    }\n\n    /**\n     * Update correlator value\n     * https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_updateCorrelator\n     */\n    updateCorrelator(): void {\n        this.enqueue(() => this._googletag.pubads().updateCorrelator());\n    }\n\n    getEnableLazyLoad(): boolean {\n        return this._enableLazyLoad;\n    }\n\n    /**\n     * Cleans up references to ads\n     */\n    destroy() {\n        const slots = Object.keys(this._cachedSlots).map((key) => this._cachedSlots[key]);\n\n        this._googletag.cmd.push(() => this._googletag.destroySlots(slots));\n        this._cachedSlots = {};\n        this._googletag = null;\n        this._renderedAds = {};\n\n        super.destroy();\n    }\n\n}\n\n/**\n * setConfig clears a targeting key whose value is null, so drop empty values\n * instead of letting them erase targeting already on the slot.\n */\nfunction withoutEmptyValues(targeting: Targeting): Targeting {\n    const result: Targeting = {};\n\n    Object.keys(targeting).forEach((key) => {\n        if (targeting[key] !== undefined && targeting[key] !== null) {\n            result[key] = targeting[key];\n        }\n    });\n\n    return result;\n}\n\nfunction setImpressionIdTargeting(slot: googletag.Slot) {\n    slot.setConfig({ targeting: { iid: uuidv4() } });\n}\n\n/**\n * Marks how deep into the refresh cycle this ad request is, so GAM reporting\n * can compare a first delivery (`refresh=0`) against a refreshed one\n * (`refresh=1`, `refresh=2`, ...).\n *\n * Depth is bucketed past {@link MAX_REPORTED_REFRESH} to keep the number of\n * `refresh` values bounded — a long session can refresh a slot on every\n * viewport re-entry, and GAM needs each value predefined to report on it. The\n * exact count still reaches the `ad-render` event recorder payload, so\n * reporting off `ad_impressions` is unaffected.\n */\nfunction setRefreshTargeting(slot: googletag.Slot, refreshCount: number) {\n    const depth = refreshCount < MAX_REPORTED_REFRESH\n        ? String(refreshCount)\n        : `${ MAX_REPORTED_REFRESH }plus`;\n\n    slot.setConfig({ targeting: { refresh: depth } });\n}\n","/**\n * Façade for GPT Ad render event.\n *\n * @class SlotRenderEndedEvent\n */\n\n// have to override default slot type by adding string for fallback / tagless\nexport interface SlotEvent extends Pick<googletag.events.SlotRenderEndedEvent, \"isEmpty\" | \"size\"> {\n    advertiserId: string | number | null;\n    creativeId: string | number | null;\n    lineItemId: string | number | null;\n    campaignId: string | number | null;\n}\n\ninterface Props {\n    id: string;\n    adCode: string;\n    requestTime?: DOMHighResTimeStamp;\n    event: SlotEvent;\n}\n\nexport default class SlotRenderEndedEvent {\n\n    _lineItemId: string | number | null;\n    _creativeId: string | number | null;\n    _isEmpty;\n    _size;\n    _adId;\n    _adCode;\n    _adRequestStartTime;\n    toJSON;\n\n    /**\n     * @constructs SlotRenderEndedEvent\n     * @param {google.tags.SlotRenderEndedEvent} event\n     * @param {Ad} ad\n     */\n    constructor({ id, adCode, requestTime, event } : Props) {\n        const { advertiserId, campaignId, lineItemId, creativeId, isEmpty, size } = event;\n\n        this._lineItemId = lineItemId;\n        this._creativeId = creativeId;\n        this._isEmpty = isEmpty;\n        this._size = size || [];\n        this._adId = id;\n        this._adCode = adCode;\n        this._adRequestStartTime = requestTime;\n\n        this.toJSON = () => ({ advertiserId, campaignId, lineItemId, creativeId, isEmpty, size });\n    }\n\n    getAdId(): string {\n        return this._adId;\n    }\n\n    getAdCode(): string {\n        return this._adCode;\n    }\n\n    getLineItemId() {\n        return this._lineItemId;\n    }\n\n    getCreativeId() {\n        return this._creativeId;\n    }\n\n    isEmpty(): boolean {\n        return this._isEmpty;\n    }\n\n    getSize(): string | number[] {\n        return this._size;\n    }\n\n    // Get GPT request start time\n    getRequestTime(): DOMHighResTimeStamp | undefined {\n        return this._adRequestStartTime;\n    }\n\n}\n","// Fixed-height slots where the reserved descender space overflows the iframe.\nconst CLIPPING_SIZES = new Set([\n    \"300x250\", // ADSTEAM-2554 — box / immersive\n    \"320x50\" //   ADSTEAM-2614 — mobile leaderboard\n]);\n\n/**\n * ADSTEAM-2554: 3rd-party CM360/DV360 display creatives ship an inline-block\n * `<ins class=\"dcmads\" style=\"display:inline-block;width:300px;height:250px\">`.\n * An inline-block element sits on the text baseline, so WebKit/Safari reserves\n * descender space below it — pushing a 300x250 creative to ~264px inside its\n * fixed 250px iframe and clipping the bottom of the ad.\n *\n * ADSTEAM-2614: the same creatives clip the 320x50 mobile leaderboard. That slot\n * is worse off than 300x250 — the creative is exactly as tall as its iframe, so\n * there is no slack at all and the reserved descender space both pushes the\n * creative down (visible gap above) and clips it (cut off below).\n *\n * Set `vertical-align:top` directly on the creative's `<ins.dcmads>` (only when\n * it isn't already), which removes it from baseline layout so it fits — the same\n * thing ad-ops apply per-creative in GAM, but for every creative automatically.\n *\n * Scoped to the fixed-height sizes that clip (fluid sizes absorb the descender)\n * and to friendly (same-origin) iframes — a graceful no-op under SafeFrame /\n * cross-origin, where the creative can't (and needn't) be reached.\n *\n * @param {HTMLIFrameElement} iframe The GPT-injected creative iframe.\n */\nexport default function fixInlineBlockBaseline(iframe: HTMLIFrameElement): void {\n    const size = `${ iframe.getAttribute(\"width\") }x${ iframe.getAttribute(\"height\") }`;\n\n    if (!CLIPPING_SIZES.has(size)) {\n        return;\n    }\n\n    try {\n        const doc = iframe.contentDocument;\n\n        if (!doc) {\n            return;\n        }\n\n        doc.querySelectorAll(\"ins.dcmads\").forEach((ins) => {\n            const el = ins as HTMLElement;\n\n            // Only the inline-block <ins> sits on the baseline and needs the fix.\n            // ad-ops apply the same vertical-align inline in GAM, so skip if present.\n            if (el.style.display === \"inline-block\" && el.style.verticalAlign !== \"top\") {\n                el.style.setProperty(\"vertical-align\", \"top\");\n            }\n        });\n    } catch (error) {\n        // cross-origin (SafeFrame) iframe — nothing we can or should do here\n    }\n}\n","export default class AlwaysRefreshStrategy {\n\n    wouldRefresh(/* ads */) {\n        return true;\n    }\n\n}\n","import Ad from \"../gpt/Ad\";\n\n/**\n * Holds relationships between ads for the purpose\n * of refreshing them in tandem\n */\nexport default class CompanionGroup {\n\n    private _parent: Ad | null = null;\n    private _children: Ad[] = [];\n\n    /**\n     * Returns array of ads that are companioned to the parent.\n     */\n    children() {\n        return this._children;\n    }\n\n    /**\n     * Returns all Ads that are a part of the companion group.\n     */\n    members() {\n        return Array.prototype.concat(this._parent, this._children);\n    }\n\n    /**\n     * Returns the parent ad of the parent/children companion pair.\n     */\n    parent() {\n        return this._parent;\n    }\n\n    /**\n     * Sets the parent ad in the parent/children relationship.\n     */\n    addParent(ad: Ad) {\n        this._parent = ad;\n        ad.setCompanionGroup(this);\n    }\n\n    /**\n     * Adds a child to the array of children ads in\n     * the parent/children relationship.\n     */\n    addChild(ad: Ad) {\n        if (this._children.lastIndexOf(ad) < 0) {\n            this._children.push(ad);\n            ad.setCompanionGroup(this);\n        }\n    }\n\n    /**\n     * Removes all children.\n     */\n    clearChildren() {\n        this._children = [];\n    }\n\n    /**\n     * Removes the parent.\n     */\n    clearParent() {\n        this._parent = null;\n    }\n\n}\n","import CompanionGroup from \"./CompanionGroup\";\n\n/**\n * Provides central object to store any CompanionGroup\n * objects used for synchronizing render refreshes\n * for a set of ads.\n *\n * @class\n */\nclass CompanionGroupCoordinator {\n\n    private _all: Record<string, CompanionGroup> = {};\n\n    /**\n     * Returns an existing CompanionGroup by id or\n     * creates a new one if not found\n     */\n    findOrCreate(id: string): CompanionGroup {\n        let companionGroup = this._all[id];\n\n        if (!companionGroup) {\n            companionGroup = new CompanionGroup();\n            this._all[id] = companionGroup;\n        }\n\n        return companionGroup;\n    }\n\n    /**\n     * Finds an existing CompanionGroup\n     */\n    find(id: string): CompanionGroup {\n        return this._all[id];\n    }\n\n    /**\n     * Clear all entries from this instance\n     * of CompanionGroupCoordinator and all the underlying\n     * parent/children pairs.\n     */\n    clearAll(): void {\n        this.clearAllChildren();\n        this.clearAllParents();\n        this._all = {};\n    }\n\n    /**\n     * Clears all children from all CompanionGroups\n     * in this CompanionGroupCoordinator\n     */\n    clearAllChildren(): void {\n        const pairs = Object.keys(this._all);\n\n        pairs.forEach((companionId) => {\n            this._all[companionId].clearChildren();\n        });\n    }\n\n    /**\n     * Clears all parents from all CompanionGroups\n     * in this CompanionGroupCoordinator\n     */\n    clearAllParents(): void {\n        const pairs = Object.keys(this._all);\n\n        pairs.forEach((companionId) => {\n            this._all[companionId].clearParent();\n        });\n    }\n\n    destroy(): void {\n        this.clearAll();\n    }\n\n}\n\nexport default CompanionGroupCoordinator;\n","/*! GroupInViewportRefreshStrategy */\n\nimport Ad from \"../gpt/Ad\";\nimport Viewability from \"../viewability/Viewability\";\n\n/**\n * Provides a strategy to refresh ads grouped by\n * CompanionGroup relationships, constrained\n * by all members of the group being in viewport.\n */\nexport default class GroupInViewportRefreshStrategy {\n\n    /**\n     * @constructs GroupInViewportRefreshStrategy\n     */\n    _viewability: Viewability;\n    constructor(viewability: Viewability) {\n        this._viewability = viewability;\n    }\n\n    /**\n     * Determines which ads to refresh. Ungrouped ads\n     * are always returned, and grouped ads are checked\n     * to be in viewport.\n     */\n    wouldRefresh(ads: Ad[]): Ad[] {\n        const ungroupedAds = ads.filter((ad) => (ad.isDisplayable() && ad.companionGroup() === null));\n\n        const groupParents = ads.filter((ad) =>\n            // exclude ads that are children, we only need to\n            // run the refresh checks starting from one ad\n            // in the group of ads. We consider that one to be\n            // the \"parent\"\n            (ad.isDisplayable() && ad.companionGroup() !== null && !ad.isCompanionChild()));\n\n        return this.entirelyViewableGroups(groupParents).concat(ungroupedAds);\n    }\n\n    /**\n     * Returns ads in a CompanionGroup in all are viewable\n     *\n     */\n    private entirelyViewableGroups(groupParents: Ad[]): Ad[] {\n        return groupParents.reduce((refreshableAds, parentAd) => {\n\n            const parentAdCompanionGroup = parentAd.companionGroup();\n\n            if (!parentAdCompanionGroup) return [];\n\n            const pendingAds = parentAdCompanionGroup.members();\n\n            if (this._viewability.everyViewable(pendingAds)) {\n                return refreshableAds.concat(pendingAds);\n            }\n\n            return refreshableAds;\n        }, [] as Ad[]);\n    }\n\n}\n","import GPT from \"../gpt/GPT\";\nimport FallbackAd from \"../taglessAd/FallbackAd\";\nimport TaglessAd from \"../taglessAd/TaglessAd\";\nimport Ad from \"../gpt/Ad\";\n\n/**\n * Always render ad\n */\n\nexport default class AlwaysRenderRenderingStrategy {\n\n    _gpt: GPT;\n    _gamTagless: TaglessAd;\n    _isTaglessAdEnabled: boolean;\n    _services: string[];\n    _fallbackAd: FallbackAd;\n    _showFallbackAds: boolean;\n\n    constructor(\n        gpt: GPT,\n        gamTagless: TaglessAd,\n        isTaglessAdEnabled: boolean,\n        fallbackAd: FallbackAd,\n        showFallbackAds: boolean\n    ) {\n        this._gpt = gpt;\n        this._gamTagless = gamTagless;\n        this._isTaglessAdEnabled = isTaglessAdEnabled;\n        this._services = [gpt.services.pubads];\n        this._fallbackAd = fallbackAd;\n        this._showFallbackAds = showFallbackAds;\n    }\n\n    /**\n     * Add the ad to the set of unrendered ads and start the state machine\n     */\n    render(ad: Ad) {\n        const containerId = ad.getContainerId();\n\n        if (ad.isDisplayable()) {\n            if (this._showFallbackAds) {\n                this._fallbackAd.render(ad);\n            } else if (this._isTaglessAdEnabled && containerId.includes(\"leaderboard\")) {\n                this._gamTagless.render(ad);\n            } else {\n                this._gpt.render(ad, { services: this._services });\n            }\n        }\n    }\n\n    /**\n     * Refreshes the list of ads immediately\n     */\n    refresh(ads: Ad[]) {\n        this._gpt.refresh(ads);\n    }\n\n    setFallbackFlag(flag: boolean) {\n        this._showFallbackAds = flag;\n    }\n\n}\n","import GPT from \"../gpt/GPT\";\nimport Ad from \"../gpt/Ad\";\n\n/**\n * Always render ad\n */\nexport default class CompanionAdRenderingStrategy {\n\n    /**\n     * @constructs CompanionAdRenderingStrategy\n     */\n\n    _gpt: GPT;\n    _services: string[];\n\n    constructor(gpt: GPT) {\n        this._gpt = gpt;\n        this._services = [gpt.services.pubads, gpt.services.companionAds];\n    }\n\n    /**\n     * Add the ad to the set of unrendered ads and start the state machine\n     */\n    render(ad: Ad): void {\n        if (ad.isDisplayable()) {\n            this._gpt.render(ad, { display: false, services: this._services });\n        }\n    }\n\n    /**\n     * noop - Has no implementation\n     */\n    refresh(ads: Ad[]) { // eslint-disable-line @typescript-eslint/no-unused-vars\n    }\n\n}\n","import GPT from \"../gpt/GPT\";\nimport Ad from \"../gpt/Ad\";\n\n/**\n * Instantly render ad\n *\n */\nexport default class InstantRenderRenderingStrategy {\n\n    /**\n     * @constructs InstantRenderRenderingStrategy\n     */\n\n    _gpt: GPT;\n    _services: string[];\n\n    constructor(gpt: GPT) {\n        this._gpt = gpt;\n        this._services = [gpt.services.pubads];\n    }\n\n    /**\n     * Add the ad to the set of unrendered ads and start the state machine\n     */\n    render(ad: Ad): void {\n        this._gpt.renderInstant(ad, { services: this._services });\n    }\n\n    /**\n     * Refreshes the list of ads immediately\n     */\n    refresh(ads: Ad[]): void {\n        this._gpt.refresh(ads);\n    }\n\n}\n","import Ad from \"../gpt/Ad\";\nimport GPT from \"../gpt/GPT\";\nimport FallbackAd from \"../taglessAd/FallbackAd\";\nimport TaglessAd from \"../taglessAd/TaglessAd\";\nimport AdObserver from \"../util/AdObserver\";\n\nconst defaultObserverOptions: IntersectionObserverInit = { threshold: 0.5 };\n\nexport default class IntersectionObserverRenderingStrategy {\n\n    /**\n     * @constructor\n     * @param {GPT} gpt\n     * @param {Number} adThreshold\n     */\n\n    _gpt: GPT;\n    _gamTaglessAd: TaglessAd;\n    _isTaglessAdEnabled: boolean;\n    _fallbackAd: FallbackAd;\n    _showFallbackAds: boolean;\n    _renderAdObserver: AdObserver;\n    _refreshAdObserver: AdObserver;\n\n    constructor(\n        gpt: GPT,\n        gamTaglessAd: TaglessAd,\n        isTaglessAdEnabled: boolean,\n        fallbackAd: FallbackAd,\n        showFallbackAds: boolean,\n        renderObserverOptions = defaultObserverOptions,\n        refreshObserverOptions = defaultObserverOptions\n    ) {\n        this._gpt = gpt;\n        this._gamTaglessAd = gamTaglessAd;\n        this._isTaglessAdEnabled = isTaglessAdEnabled;\n        this._fallbackAd = fallbackAd;\n        this._showFallbackAds = showFallbackAds;\n        this._renderAdObserver = new AdObserver(this._renderCallback.bind(this), renderObserverOptions);\n        // different IntersectionObserver for refresh\n        // so we don't have to use same rootMargin as render IntersectionObserver\n        this._refreshAdObserver = new AdObserver(this._refreshCallback.bind(this), refreshObserverOptions);\n    }\n\n    _renderCallback(ad: Ad) {\n        const containerId = ad.getContainerId();\n\n        if (this._isTaglessAdEnabled && containerId.includes(\"leaderboard\")) {\n            this._gamTaglessAd.render(ad);\n        } else {\n            this._gpt.render(ad, { services: [this._gpt.services.pubads] });\n        }\n    }\n\n    _refreshCallback(ad: Ad) {\n        if (ad.hasSlot()) {\n            this._gpt.refresh([ad]);\n        } else {\n            this._renderCallback(ad);\n        }\n    }\n\n    start() {\n        this._renderAdObserver.start();\n        this._refreshAdObserver.start();\n    }\n\n    stop() {\n        this._renderAdObserver.stop();\n        this._refreshAdObserver.stop();\n    }\n\n    destroy() {\n        this._renderAdObserver.destroy();\n        this._refreshAdObserver.destroy();\n    }\n\n    render(ad: Ad) {\n        if (this._showFallbackAds) {\n            this._fallbackAd.render(ad);\n        } else {\n            this._renderAdObserver.startObserving(ad);\n        }\n    }\n\n    refresh(ads: Ad[]) {\n        ads.forEach((ad) => {\n            if (ad.isDisplayable()) {\n                this._refreshAdObserver.startObserving(ad);\n            }\n        });\n    }\n\n    setFallbackFlag(flag: boolean) {\n        this._showFallbackAds = flag;\n    }\n\n}\n","import AlwaysRefreshStrategy from \"../refreshing/AlwaysRefreshStrategy\";\nimport GroupInViewportRefreshStrategy from \"../refreshing/GroupInViewportRefreshStrategy\";\nimport Visibility from \"../viewability/Visibility\";\nimport fireEREvt from \"../util/eventRecorderClient\";\nimport FallbackAd from \"../taglessAd/FallbackAd\";\nimport GPT from \"../gpt/GPT\";\nimport TaglessAd from \"../taglessAd/TaglessAd\";\nimport Viewability from \"../viewability/Viewability\";\nimport Ad from \"../gpt/Ad\";\nimport AlwaysRenderRenderingStrategy from \"./AlwaysRenderRenderingStrategy\";\nimport CompanionAdRenderingStrategy from \"./CompanionAdRenderingStrategy\";\nimport InstantRenderRenderingStrategy from \"./InstantRenderRenderingStrategy\";\nimport IntersectionObserverRenderingStrategy from \"./IntersectionObserverRenderingStrategy\";\n/**\n * Responsible for rendering all ads\n */\n\ntype Strategies = {\n    always: AlwaysRenderRenderingStrategy,\n    parameters: InstantRenderRenderingStrategy,\n    companion: CompanionAdRenderingStrategy,\n    viewable: IntersectionObserverRenderingStrategy,\n}\n\ntype RefreshStrategies = {\n    always: AlwaysRefreshStrategy,\n    parameters: AlwaysRefreshStrategy,\n    companion: AlwaysRefreshStrategy,\n    viewable: GroupInViewportRefreshStrategy,\n}\n\nexport default class Renderer {\n\n    _gpt;\n    _gamTaglessAd;\n    _isTaglessAdEnabled;\n    _showFallbackAds;\n    _fallbackAd;\n    _viewability;\n    _visibility: Visibility;\n    _strategies: Strategies | null;\n    _refreshStrategies: RefreshStrategies | null;\n\n    constructor(\n        gpt: GPT,\n        gamTaglessAd: TaglessAd,\n        isTaglessAdEnabled: boolean,\n        viewability: Viewability,\n        visibility: Visibility,\n        strategies = null,\n        observerOptions: IntersectionObserverInit | undefined\n    ) {\n        this._gpt = gpt;\n        this._gamTaglessAd = gamTaglessAd;\n        this._isTaglessAdEnabled = isTaglessAdEnabled;\n        this._showFallbackAds = false;\n        this._fallbackAd = new FallbackAd();\n        this._viewability = viewability;\n        this._visibility = visibility;\n        this._strategies = strategies;\n        this._refreshStrategies = strategies;\n\n        this._contextifyCallbacks();\n        this._initStrategies(observerOptions);\n        this._delegateEvents();\n\n        if (this._visibility?.isVisible()) {\n            this._start();\n        }\n    }\n\n    /**\n     * Binds various callback methods to `this`\n     *\n     * @private\n     */\n    private _contextifyCallbacks(): void {\n        this._start = this._start.bind(this);\n        this._stop = this._stop.bind(this);\n    }\n\n    /**\n     * Delegates events\n     *\n     * @private\n     */\n    private _delegateEvents(): void {\n        this._visibility.addEventListener(Visibility.EVENTS.ON_VISIBLE, this._start);\n        this._visibility.addEventListener(Visibility.EVENTS.ON_INVISIBLE, this._stop);\n    }\n\n    /**\n     * Initializes rendering strategies\n     * @private\n     */\n    private _initStrategies(observerOptions?: IntersectionObserverInit): void {\n\n        const strategies: Strategies = {\n            always: new AlwaysRenderRenderingStrategy(\n                this._gpt,\n                this._gamTaglessAd,\n                this._isTaglessAdEnabled,\n                this._fallbackAd,\n                this._showFallbackAds\n            ),\n            parameters: new InstantRenderRenderingStrategy(this._gpt),\n            companion: new CompanionAdRenderingStrategy(this._gpt),\n            viewable: new IntersectionObserverRenderingStrategy(\n                this._gpt,\n                this._gamTaglessAd,\n                this._isTaglessAdEnabled,\n                this._fallbackAd,\n                this._showFallbackAds,\n                observerOptions\n            )\n        };\n\n        this._strategies = this._strategies || strategies;\n\n        const refreshStrategies = {\n            always: new AlwaysRefreshStrategy(),\n            companion: new AlwaysRefreshStrategy(),\n            parameters: new AlwaysRefreshStrategy(),\n            viewable: new GroupInViewportRefreshStrategy(this._viewability)\n        };\n\n        this._refreshStrategies = this._refreshStrategies || refreshStrategies;\n    }\n\n    /**\n     * Starts startable rendering strategies\n     *\n     */\n    private _start(): void {\n        this._strategies?.viewable.start();\n    }\n\n    /**\n     * Stops stoppable rendering strategies\n     *\n     */\n    private _stop(): void {\n        this._strategies?.viewable.stop();\n    }\n\n    /**\n     * Undelegates events\n     */\n    private _undelegateEvents(): void {\n        this._visibility.removeEventListener(Visibility.EVENTS.ON_VISIBLE, this._start);\n        this._visibility.removeEventListener(Visibility.EVENTS.ON_INVISIBLE, this._stop);\n    }\n\n    /**\n     * Destructor\n     */\n    destroy(): void {\n        this._undelegateEvents();\n    }\n\n    _getStrategy = (ad: Ad, strategy: string) => {\n        if (!this._strategies) return null;\n\n        const key = this._gpt.getEnableLazyLoad() && ad.isDecoupled() ? \"always\" : strategy;\n\n        return this._strategies[key as keyof Strategies];\n    }\n\n    /**\n     * Renders an ad with the given rendering strategy\n     *\n     * @param {Ad} ad\n     * @param {object} config\n     * @param {string} [config.strategy=\"viewable\"]\n     */\n    render(ad: Ad, { strategy = \"viewable\" }): void {\n        const renderingStrategy = this._getStrategy(ad, strategy);\n\n        if (!renderingStrategy) {\n            throw new Error(\"Sparkle: Invalid rendering strategy, supports: ['always', 'companion', 'parameters', 'viewable']\");\n        }\n\n        renderingStrategy.render(ad);\n    }\n\n    private _areAdsToRefresh(adsToRefresh: Ad[] | boolean): adsToRefresh is Ad[] {\n        return Array.isArray(adsToRefresh);\n    }\n\n    /**\n     * Refreshes a list of ads with the given rendering and refresh strategy\n     *\n     * @param {Ad[]} ads\n     * @param {Object} config\n     * @param {string} [config.strategy=\"viewable\"]\n     */\n    refresh(ads: Ad[], { strategy = \"viewable\" as keyof Strategies & keyof RefreshStrategies }): void {\n\n        if (!this._strategies || !this._refreshStrategies) {\n            throw new Error(\"Sparkle: Rendering strategies are not defined.\");\n\n        }\n        const renderingStrategy = this._strategies[strategy];\n        const refreshStrategy = this._refreshStrategies[strategy];\n\n        if (!renderingStrategy) {\n            throw new Error(\"Sparkle: Invalid rendering strategy, supports: ['always', 'companion', 'parameters', 'viewable']\");\n        }\n\n        // check if an ad is part of a companion group,\n        // if it is, only call refresh if all companions\n        // would refresh based on their render strategy\n        const adsToRefresh = refreshStrategy.wouldRefresh(ads);\n\n        interface AdsMap {\n            [key: string]: number | {\n                [key: string]: string | null,\n            };\n        }\n\n        if (!adsToRefresh) return;\n\n        const msg: AdsMap = { \"num-ads\": ads.length };\n\n        ads.forEach((ad) => {\n            msg[ad.getId()] = {\n                \"dom-id\": ad.getDomId(),\n                \"container-id\": ad.getContainerId()\n            };\n        });\n\n        fireEREvt(\"ad-refresh\", msg);\n\n        if (this._areAdsToRefresh(adsToRefresh)) {\n            renderingStrategy.refresh(adsToRefresh);\n        }\n\n    }\n\n    setFallbackFlag(flag: boolean): void {\n        this._showFallbackAds = flag;\n        this._strategies?.viewable?.setFallbackFlag(flag);\n        this._strategies?.always?.setFallbackFlag(flag);\n    }\n\n}\n","import Cookies from \"js-cookie\";\nimport fireEREvt from \"../util/eventRecorderClient\";\nimport { Storage } from \"../util/Storage\";\nimport { RegUIClient, RegUserInfo } from \"../type\";\n\nconst USER_INFO_EVENT = \"reg-user-info-ready\";\nconst REG_USER_SIGNED_IN_EVENT = \"reg-user-signed-in\";\nconst SESSION_ID_COOKIE = \"session_id\";\nconst USER_INFO_TIMEOUT = 500;\nconst SUBS_STATUS_LOCAL_STORAGE_KEY = \"bbads_subs_status\";\n\nconst local = Storage.createLocalStorage();\n\nexport const SUBSCRIBER_TYPE = Object.freeze({\n    BBG_SUBSCRIBER: \"yes\",\n    TERMINAL_SUBSCRIBER: \"term\",\n    NON_SUBSCRIBER: \"no\",\n    /**\n     * Sent when the reg-ui-client has not reported yet and no previous page\n     * load worked it out. Deliberately not \"no\": guessing a subscriber is a\n     * non-subscriber is the mistake this exists to avoid, and an explicit\n     * value is targetable and reportable in a way that omitting the key\n     * would not be. AdOps must allow it on the `subscriber` key.\n     */\n    UNKNOWN: \"unknown\"\n});\n\nexport type SubscriberChangeListener = (subsInfo: string) => void;\n\n/**\n * This implementation tentatively relies on global events emitted by reg-ui-client library\n * @class UserInfo\n */\nexport default class UserInfo {\n\n    _userInfo: RegUserInfo | null = null;\n    _setUserInfoWithResolve: undefined | (({ detail }: { detail: RegUserInfo }) => void);\n\n    /**\n     * Subscriber type currently in effect, i.e. the one the listeners were last\n     * told about. Also what we compare against to avoid redundant writes.\n     */\n    _publishedSubsInfo: string | undefined = undefined;\n    _subscriberListeners: SubscriberChangeListener[] = [];\n    /**\n     * Whether reg-ui-client has finished its own user-info fetch. Latched by\n     * the events below, because the global it sets is not a reliable signal\n     * for a logged-out user.\n     */\n    _regDataReady = false;\n    _regDataHandler: undefined | (() => void);\n\n    getSessionId(timeoutInMs?: number) {\n        const sessionId = this.getSessionIdSync();\n\n        if (sessionId) {\n            return Promise.resolve(sessionId);\n        }\n\n        return this.getUserInfo(timeoutInMs).then((userInfo) => userInfo.sessionId);\n    }\n\n    /**\n     * Subscriber type according to @client, or undefined if it could not be\n     * derived - undefined rather than NON_SUBSCRIBER so a throw is not\n     * mistaken for an answer and cached as one.\n     */\n    _calculateSubsInfo(client?: RegUIClient): string | undefined {\n        try {\n            // isTerminalSubscription check need to be done before BBG\n            // terminal subscription is one of BBG subs.\n            if (client?.isTerminalSubscriber?.()) {\n                return SUBSCRIBER_TYPE.TERMINAL_SUBSCRIBER;\n            }\n\n            if (client?.isBBGSubscriber?.()) {\n                return SUBSCRIBER_TYPE.BBG_SUBSCRIBER;\n            }\n        } catch (err) {\n            // regUIClient is third-party - don't let a throw here take down\n            // Sparkle._init (and every ad on the page) with it.\n            fireEREvt(\"ad-err\", `regUIClient threw while resolving subscriber type: ${ err }`);\n\n            return undefined;\n        }\n\n        return SUBSCRIBER_TYPE.NON_SUBSCRIBER;\n    }\n\n    /**\n     * Last subscriber status persisted by an earlier page load, or undefined\n     * on a miss - note that a storage miss surfaces as an empty string rather\n     * than undefined, so that is treated as a miss too.\n     */\n    _readSubsCache(): string | undefined {\n        const cached = local.getObj(SUBS_STATUS_LOCAL_STORAGE_KEY) as unknown;\n\n        return typeof cached === \"string\" && cached !== \"\" ? cached : undefined;\n    }\n\n    /**\n     * Derives the subscriber type from the reg-ui-client and, if it is a real\n     * answer, publishes and stores it.\n     *\n     * Gated on the client having finished its own fetch:\n     * isBBGSubscriber()/isTerminalSubscriber() answer false until it has, and\n     * regUIClient is assigned before that, so reading it early reports a real\n     * subscriber as a non-subscriber.\n     *\n     * @returns the derived subscriber type, or undefined if there was no real\n     * answer to be had\n     */\n    _setSubsInfoFromClient(): string | undefined {\n        const client = this._isRegDataReady() && window.__bloomberg__?.regUIClient;\n        const subsInfo = client ? this._calculateSubsInfo(client) : undefined;\n\n        if (subsInfo === undefined) {\n            return undefined;\n        }\n\n        this._publishSubsInfo(subsInfo);\n        // Every value we get this far with came from a ready client, so there\n        // is no such thing as one not worth keeping for the next page load.\n        local.setObj(SUBS_STATUS_LOCAL_STORAGE_KEY, subsInfo);\n\n        return subsInfo;\n    }\n\n    _isRegDataReady(): boolean {\n        return this._regDataReady || Boolean(window._regUserInfo);\n    }\n\n    /**\n     * Watches for the reg-ui-client's data becoming trustworthy, and revises\n     * the subscriber type when it does. Attached permanently and for the two\n     * events that both mean \"the client can now be believed\":\n     *\n     * - reg-user-info-ready: its fetch landed, whatever the answer. The only\n     *   signal a logged-out user produces.\n     * - reg-user-signed-in: an in-page login, or - with source\n     *   \"already-signed-in\" - the same landing for a user who was already\n     *   authenticated when the page loaded.\n     *\n     * Logout is intentionally not handled: understating a subscriber briefly\n     * is low-risk; overstating one is the risk this ticket exists to close.\n     */\n    _listenForRegData() {\n        if (this._regDataHandler) {\n            return;\n        }\n\n        this._regDataHandler = () => {\n            this._regDataReady = true;\n            this._setSubsInfoFromClient();\n        };\n\n        window.addEventListener(USER_INFO_EVENT, this._regDataHandler);\n        window.addEventListener(REG_USER_SIGNED_IN_EVENT, this._regDataHandler);\n    }\n\n    /**\n     * Records the subscriber type in effect and notifies the listeners. This\n     * runs once per ad and per refresh, so it is a no-op unless the value\n     * actually changed.\n     *\n     * @returns whether the value changed\n     */\n    _publishSubsInfo(subsInfo: string): boolean {\n        if (this._publishedSubsInfo === subsInfo) {\n            return false;\n        }\n\n        this._publishedSubsInfo = subsInfo;\n        this._subscriberListeners.forEach((cb) => {\n            try {\n                cb(subsInfo);\n            } catch (err) {\n                // don't let one listener's failure stop the others or escape\n                // into Sparkle._init.\n                fireEREvt(\"ad-err\", `subscriber change listener threw: ${ err }`);\n            }\n        });\n\n        return true;\n    }\n\n    /**\n     * Notifies when the subscriber type changes. The listener is called\n     * immediately with the current value if one has already been resolved.\n     */\n    onSubscriberChange(cb: SubscriberChangeListener) {\n        this._subscriberListeners.push(cb);\n\n        if (this._publishedSubsInfo !== undefined) {\n            cb(this._publishedSubsInfo);\n        }\n    }\n\n    /**\n     * Decides the subscriber type for this page and publishes it. Synchronous\n     * and never awaited: it reports the best answer available right now and\n     * revises it in place, through the listeners, if a better one turns up -\n     * no ad ever waits on the reg-ui-client.\n     *\n     * Order of preference, and the whole of it:\n     *\n     * 1. the reg-ui-client, if its data has landed\n     * 2. what the previous page load worked out and stored\n     * 3. \"unknown\" - never a guessed \"no\"\n     */\n    resolveSubscriberInfo(): string {\n        // Unconditionally, and before the guard below: being subscribed to\n        // corrections is independent of having a value, and skipping it\n        // because one is already published would freeze that value for the\n        // life of the page. Idempotent, so repeat calls are free.\n        this._listenForRegData();\n\n        if (this._publishedSubsInfo !== undefined) {\n            return this._publishedSubsInfo;\n        }\n\n        const derived = this._setSubsInfoFromClient();\n\n        if (derived) {\n            return derived;\n        }\n\n        const cached = this._readSubsCache();\n\n        if (!cached) {\n            fireEREvt(\"ad-RegUIClientNotReady\");\n        }\n\n        const subsInfo = cached ?? SUBSCRIBER_TYPE.UNKNOWN;\n\n        this._publishSubsInfo(subsInfo);\n\n        return subsInfo;\n    }\n\n    /**\n     * Subscriber type currently in effect, or undefined before\n     * resolveSubscriberInfo has run. Pure read - no side effects, so it is\n     * free to call per ad.\n     */\n    getSubscriberInfo(): string | undefined {\n        return this._publishedSubsInfo;\n    }\n\n    /**\n     * @deprecated use resolveSubscriberInfo / getSubscriberInfo instead\n     */\n    getCachedSubscriberInfo(): Promise<string> {\n        return Promise.resolve(this.resolveSubscriberInfo());\n    }\n\n    getSessionIdSync() {\n        return this._userInfo &&\n            this._userInfo.sessionId || Cookies.get(SESSION_ID_COOKIE);\n    }\n\n    /**\n     * @returns {Promise<Object>}\n     */\n    getUserInfo(timeoutInMs = USER_INFO_TIMEOUT): Promise<RegUserInfo> {\n        this._userInfo = window._regUserInfo;\n\n        if (this._userInfo) {\n            return Promise.resolve(this._userInfo);\n        }\n\n        return new Promise((resolve, reject) => {\n            this._setUserInfoWithResolve = this._setUserInfo.bind(this, resolve);\n            // @ts-expect-error custom event\n            window.addEventListener(USER_INFO_EVENT, this._setUserInfoWithResolve);\n\n            setTimeout(() => {\n                reject();\n            }, timeoutInMs);\n        });\n    }\n\n    /**\n     * Sets @_userInfo and settles a promise\n     * @param {Function} resolve\n     * @param {Object|Boolean} detail\n     * @private\n     */\n    _setUserInfo(\n        resolve: (info: RegUserInfo | PromiseLike<RegUserInfo>) => void,\n        { detail }: { detail: RegUserInfo }\n    ) {\n        this._userInfo = detail;\n        resolve(this._userInfo);\n    }\n    /**\n     * Cleans up references\n     */\n    destroy() {\n        this._userInfo = null;\n        // @ts-expect-error custom event\n        window.removeEventListener(USER_INFO_EVENT, this._setUserInfoWithResolve);\n        this._setUserInfoWithResolve = undefined;\n\n        if (this._regDataHandler) {\n            window.removeEventListener(USER_INFO_EVENT, this._regDataHandler);\n            window.removeEventListener(REG_USER_SIGNED_IN_EVENT, this._regDataHandler);\n            this._regDataHandler = undefined;\n        }\n\n        this._subscriberListeners = [];\n        // reset the latches too, so a reused instance starts clean\n        this._regDataReady = false;\n        this._publishedSubsInfo = undefined;\n    }\n\n}\n","import Ad from \"../gpt/Ad\";\nimport SlotRenderEndedEvent from \"../gpt/SlotRenderEndedEvent\";\nimport Environment from \"../util/Environment\";\nimport fireEREvt from \"../util/eventRecorderClient\";\nimport { AdSizes } from \"../viewability/Viewability\";\nimport TaglessAdHandler from \"./TaglessAdHandler\";\nimport { FallbackAdConfig, FallbackAdStyle, ORIENTATION } from \"./type\";\n\n// fallback ads constant\nconst dimensionMap: { [key: string]: ORIENTATION } = {\n    \"3,3\": ORIENTATION.SQUARE,\n    \"5,16\": ORIENTATION.HORIZONTAL\n};\n\nexport const COMPASS_AD_URL: string = \"https://compass.bloomberg.com/ads/play/blt7efc30dc0e168fff\";\n\nexport const FALLBACK_ADS_POOL: {[key: string]: FallbackAdConfig} = {\n    blt7efc30dc0e168fff: {\n        url: \"https://compass.bloomberg.com/ads/play/blt7efc30dc0e168fff\",\n        uid: \"blt7efc30dc0e168fff\"\n    },\n    blt371120ef439bdeb8: {\n        url: \"https://compass.bloomberg.com/ads/play/blt371120ef439bdeb8\",\n        uid: \"blt371120ef439bdeb8\"\n    }\n};\n\nconst styles: { [key: string]: FallbackAdStyle } = {\n    horizontal: {\n        containerSize: \"100%\",\n        iframeStyle:\n      \"border:0px; height: 100vh; width: 100%; border: 0px; position: absolute; top: 0px; max-height:400px; min-height: 305px; max-width: 2000px;\"\n    },\n    square: {\n        containerSize: window.innerWidth > 769 ? \"300px\" : \"100vw\",\n        iframeStyle:\n      \"border:0px; height: 100%; width: 100%; border: 0px; position: absolute; top: 0px; left: 0px;\"\n    }\n};\n\n/**\n * @class FallbackAd\n */\nexport default class FallbackAd extends TaglessAdHandler {\n\n  orientation: ORIENTATION | null = ORIENTATION.HORIZONTAL;\n  baseUrl: string = \"\";\n  uid: string = \"\";\n\n  constructor() {\n      super(COMPASS_AD_URL);\n      const fallbackAdKey = this._pickFallbackAds(Object.keys(FALLBACK_ADS_POOL));\n      const { url, uid } = FALLBACK_ADS_POOL[fallbackAdKey];\n\n      this.baseUrl = url;\n      this.uid = uid;\n  }\n\n  private _pickFallbackAds(array: Array<string>):string {\n      const randomPick = array[Math.floor(Math.random() * array.length)];\n\n      return randomPick;\n  }\n\n  /**\n   * get orientation from sizes for compass ads\n   * @param {*} sizes\n   * @returns\n   */\n  private _getOrientation(sizes: AdSizes): ORIENTATION | null {\n      const sizeString: string = JSON.stringify(sizes);\n      const found: string | undefined = Object.keys(dimensionMap).find(\n          (dimension: string) => sizeString.includes(dimension)\n      );\n\n      if (!found) {\n          return null;\n      }\n\n      this.orientation = dimensionMap[found];\n\n      return this.orientation;\n  }\n\n  /**\n   * override TaglessAdHandler decorateAd\n   * @param {HTMLElement} iframe\n   * @param {HTMLElement} container\n   * @returns\n   */\n  decorateAd(iframe: HTMLElement, container: HTMLElement): void {\n      if (!this.orientation) {\n          return;\n      }\n\n      // container style\n      const currentStyle: FallbackAdStyle = styles[this.orientation];\n\n      if (!currentStyle || !iframe || !container) {\n          return;\n      }\n\n      container.style.width = currentStyle.containerSize;\n      container.style.height = currentStyle.containerSize;\n      container.style.position = \"relative\";\n\n      // iframe style\n      iframe.setAttribute(\"style\", currentStyle.iframeStyle);\n      iframe.setAttribute(\"scrolling\", \"no\");\n      iframe.setAttribute(\"title\", \"fallback\");\n  }\n\n  /**\n   * override TaglessAdHandler createAdSrc\n   * @param {*} ad\n   * @returns\n   */\n  getAdSrc(ad: Ad): string | null {\n      const sizes = ad.getSizes() || [];\n\n      this.orientation = this._getOrientation(sizes);\n\n      if (!this.orientation) {\n          return null;\n      }\n\n      const urlParams: Record<string, string> = {\n          orientation: this.orientation.toString(),\n          creativeID: this.uid,\n          lineID: \"fallback\",\n          orderID: \"fallback\",\n          adUnit: \"fallback\"\n      };\n      const searchParams: URLSearchParams = new URLSearchParams(urlParams);\n      const url: string = `${ this.baseUrl }?${ searchParams.toString() }`;\n\n      return url;\n  }\n\n  render(ad: Ad) {\n      const adRenderEvent = ad.getSlotRenderedEvent();\n\n      if (!adRenderEvent) {\n\n          const newEvent = new SlotRenderEndedEvent({\n              id: ad.getId(),\n              adCode: ad.getUnitName(),\n              requestTime: Environment.currentTime(),\n              event: {\n                  advertiserId: ad.getId(),\n                  campaignId: \"fallback\",\n                  lineItemId: \"fallback\",\n                  creativeId: this.uid,\n                  isEmpty: false,\n                  size: []\n              }\n          });\n\n          ad.setSlotRenderedEvent(newEvent);\n      }\n      super.render(ad);\n      fireEREvt(\"ad-fallback-render\", { containerId: ad.getContainerId() });\n  }\n\n}\n","import { v4 as uuidv4 } from \"uuid\";\nimport SlotRenderEndedEvent from \"../gpt/SlotRenderEndedEvent\";\n\nimport Environment from \"../util/Environment\";\nimport Ad from \"../gpt/Ad\";\nimport TaglessAdHandler from \"./TaglessAdHandler\";\nimport { TaglessAdStyle } from \"./type\";\nimport { MOBILE_BREAK_POINT } from \"./constants\";\n\n// NOTE: This is hardcoded API as this is just a POC to prove that this api works and renders ads correctly.\nexport const GAM_TAGLESS_API_ADS: string = `https://securepubads.g.doubleclick.net/gampad/ads?correlator=${ uuidv4() }&gdfp_req=1&enc_prev_ius=/0/1/2/3`;\n\n// hardcoded sizes for only leaderboard for now\nconst AD_SIZES = window.innerWidth > MOBILE_BREAK_POINT ? [[970, 250]] : [[320, 50]];\nconst SCREEN_TYPE = window.innerWidth > MOBILE_BREAK_POINT ? \"desktop\" : \"mobile\";\n\nconst styles: { [key: string]: TaglessAdStyle } = {\n    mobile: {\n        iframeStyle:\n            // set to 60px instead of 50px because some ads have a slight padding within the ad\n            \"height: 60px; width: 320px;\"\n    },\n    desktop: {\n        iframeStyle:\n            \"height: 250px; width: 970px\"\n    }\n};\n\ntype UserConsentTargetings = Record<string, string>;\n\n/**\n * @class TaglessAd\n */\nexport default class TaglessAd extends TaglessAdHandler {\n\n    targetings: UserConsentTargetings;\n\n    constructor(baseUrl: string = GAM_TAGLESS_API_ADS) {\n        super(baseUrl);\n        this.targetings = {};\n    }\n\n    // override tagless decorateAd\n    decorateAd(iframe: HTMLIFrameElement, container: HTMLElement, googleIframeContainer: HTMLElement) {\n        const currentStyle = styles[SCREEN_TYPE];\n\n        googleIframeContainer.setAttribute(\"style\", \"border: 0pt none; width: 100%; height: 100%;\");\n\n        iframe.setAttribute(\"style\", currentStyle.iframeStyle);\n\n        iframe.setAttribute(\"scrolling\", \"no\");\n    }\n\n    // override taglessHandler getAdSrc\n    getAdSrc(ad: Ad): string | null {\n        const adSizes = AD_SIZES.map((size) => {\n\n            if (Array.isArray(size)) {\n                const [width, height] = size;\n\n                return `${ width }x${ height }`;\n            }\n\n            return \"\";\n        }).join(\"|\");\n\n        const targeting_values = this.targetings;\n\n        const targetings = Object.keys(this.targetings).map((key) => {\n            const value = targeting_values[key];\n\n            return `${ key }=${ value }`;\n\n        })\n            .join(\"&\");\n\n        const unitName = ad.getUnitName();\n        const iuParts = unitName.split(\"/\").join(\",\")\n            .slice(1);\n\n        const adParams = {\n            prev_iu_szs: adSizes,\n            iu_parts: iuParts\n        };\n        const searchParams = new URLSearchParams(adParams);\n\n        const url = `${ this.baseUrl }&${ searchParams.toString() }&${ targetings }`;\n\n        return url;\n    }\n\n    addTargeting(newTargeting: object): void {\n        Object.assign(this.targetings, newTargeting);\n    }\n\n    // override taglessHandler render\n    render(ad: Ad): void {\n\n        const iframe = document.createElement(\"iframe\");\n\n        const containerId = ad.getContainerId();\n        const id = ad.getId();\n\n        const container = document.getElementById(containerId);\n        const containerById: HTMLElement | null = document.getElementById(id);\n\n        const url = this.getAdSrc(ad);\n\n        if (!url || !container || !containerById) {\n            return;\n        }\n\n        let googleIframeContainer = document.getElementById(\"google_ads_iframe\");\n\n        // logic needed to handle ad refresh not re-appending parent iframe container\n        if (googleIframeContainer) {\n\n            const newGoogleIframeContainer = document.createElement(\"div\");\n\n            newGoogleIframeContainer.id = \"google_ads_iframe\";\n\n            containerById.replaceChild(newGoogleIframeContainer, googleIframeContainer);\n\n            containerById.appendChild(newGoogleIframeContainer);\n            newGoogleIframeContainer.appendChild(iframe);\n\n            googleIframeContainer = newGoogleIframeContainer;\n\n        } else {\n            googleIframeContainer = document.createElement(\"div\");\n            googleIframeContainer.id = \"google_ads_iframe\";\n\n            containerById.appendChild(googleIframeContainer);\n            googleIframeContainer.appendChild(iframe);\n        }\n\n        iframe.title = containerId;\n        iframe.src = url;\n\n        this.decorateAd(iframe, container, googleIframeContainer);\n\n        const newEvent = new SlotRenderEndedEvent({\n            id: ad.getId(),\n            adCode: ad.getUnitName(),\n            requestTime: Environment.currentTime(),\n            event: {\n                advertiserId: ad.getId(),\n                // Not sure how to get these exact values without the metadata tagless api for now\n                campaignId: \"TaglessCampaignId\",\n                lineItemId: \"TaglessLineItemId\",\n                creativeId: \"TaglessCreativeId\",\n                isEmpty: false,\n                size: AD_SIZES[0]\n            }\n        });\n\n        // Needed to handle hiding Advertisement text on ad\n\n        ad.handleTaglessRenderEvent(newEvent);\n\n        // Handle ALS tracking\n        ad.handleSlotOnLoadEvent(undefined, iframe);\n    }\n\n}\n\n","import Ad from \"../gpt/Ad\";\n\n/**\n * Abstract TaglessAdHandler class\n * @class TaglessAdHandler\n */\nexport default class TaglessAdHandler {\n\n  baseUrl: string | null = null;\n\n  constructor(baseUrl: string) {\n      this.baseUrl = baseUrl;\n  }\n\n  /**\n   * Abstract method used to decorate ad container and iframe\n   * Child class should override this method\n   * @param {html} iframe\n   * @param {html} container\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  decorateAd(iframe: HTMLElement, container: HTMLElement, googleIframeContainer?: HTMLElement): void {}\n\n  /**\n   * Abstract method used to generate ad iframe src\n   * Child class can override this method to add parames\n   * @param {Ad} ad\n   * @returns\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  getAdSrc(ad: Ad): string | null {\n      return this.baseUrl;\n  }\n\n  /**\n   * Method to render ad\n   * @param {Ad} ad\n   */\n  render(ad: Ad): void {\n      const iframe: HTMLIFrameElement = document.createElement(\"iframe\");\n      const containerId: string = ad.getContainerId();\n      const container: HTMLElement | null = document.getElementById(containerId);\n\n      const url: string | null = this.getAdSrc(ad);\n\n      if (!url || !container) {\n          return;\n      }\n\n      iframe.src = url;\n      iframe.title = `iframe-${ containerId }`;\n\n      this.decorateAd(iframe, container);\n\n      container.appendChild(iframe);\n\n      ad.dispatchEvent(\"render\", ad.getSlotRenderedEvent());\n  }\n\n}\n","export const MOBILE_BREAK_POINT = 769;\n","// eslint-disable-next-line no-shadow\nexport enum ORIENTATION {\n    HORIZONTAL = \"horizontal\",\n    SQUARE = \"square\",\n  }\n\nexport interface FallbackAdStyle {\n    containerSize: string;\n    iframeStyle: string;\n  }\n\nexport interface FallbackAdConfig {\n    url: string;\n    uid: string;\n  }\n\nexport interface FallbackAdURL {\n    orientation: string;\n    creativeID: string;\n    lineID: string;\n    orderID?: string;\n    adUnit?: string;\n  }\n\nexport interface TaglessAdStyle {\n  iframeStyle: string;\n}\n","import { Targeting } from \"./interfaces/TargetingProvider\";\nimport { AdSizeMap } from \"./viewability/Viewability\";\n\nexport type ValidOptionsValue = string | null | number | object | boolean | undefined |\n    Array<ValidOptionsValue>;\n\nexport type AdEvents = \"ON_RENDER\" | \"ON_BEFORE_RENDER\" | \"ON_EMPTY\" | \"ON_LOAD\";\n\nexport interface SlotRenderEndedEvent {\n    getAdId: () => string;\n    getAdCode: () => string;\n    getLineItemId: () => string;\n    getCreativeId: () => string;\n    isEmpty: () => boolean;\n    getRequestTime: () => Date;\n    getSize: () => number[][];\n}\n\nexport interface EventTarget {\n    dispatchEvent: (eventType: string, details: SlotRenderEndedEvent) => null;\n}\n\nexport interface Ad extends EventTarget {\n    addTargeting: (targeting: Record<string, ValidOptionsValue>) => Record<string, ValidOptionsValue>;\n    EVENTS: AdEvents;\n    getContainerId: () => string;\n    getDomId: () => string | null;\n    getElement: () => HTMLElement | null;\n    getElementTopPosition: () => number;\n    getId: () => string;\n    getIframe: () => HTMLElement | null;\n    getPerformanceId: () => string;\n    getSizes: () => Array<number>;\n    getSlot: () => object | null;\n    getTargeting: () => object;\n    getUnitName: () => string;\n    getViewportOffset: () => number;\n    hasSlot: () => boolean;\n    isDisplayable: () => boolean;\n    isInterstitial: () => boolean;\n    isMobile: () => boolean;\n    onEmpty: (callback: () => void) => void;\n    onRender: (callback: () => void) => void;\n    setClassName: (className: string) => Ad;\n    setDimensions: (width: string, height: string) => Ad;\n    setHeight: (height: string) => Ad;\n    setInterstitialFlag: (flag: boolean) => Ad;\n    setSlot: (slot: object) => Ad;\n    setSlotRenderedEvent: (event: SlotRenderEndedEvent) => void;\n    setViewportOffset: (offset: number) => Ad;\n    getSlotRenderedEvent: () => SlotRenderEndedEvent;\n    handleSlotOnLoadEvent: (event:object, iframe?: HTMLIFrameElement) => void;\n    handleSlotRenderEvent: (event: SlotRenderEndedEvent) => void;\n    handleTaglessRenderEvent: (event: SlotRenderEndedEvent) => void;\n}\n\ntype CustomAttribute = string | number | boolean | null | undefined;\ntype CustomAttributes = { [key: string]: CustomAttribute };\n\nexport interface NewrelicBrowser {\n    addToTrace: (trace: Record<string, unknown>) => void;\n    addPageAction: (name: string, customAttributes?: CustomAttributes) => void;\n    noticeError: (error: Error, customAttributes?: CustomAttributes) => void;\n    setCustomAttribute: (\n        name: string,\n        value: CustomAttribute,\n        persist?: boolean,\n    ) => void;\n}\n\nexport interface RegUserInfo {\n    sessionId?: string;\n    userId?: string\n}\n\nexport interface RegUIClient {\n    isTerminalSubscriber?: () => boolean;\n    isBBGSubscriber?: () => boolean;\n}\n\nexport type OnDvTagReadyCb = null | (() => void);\nexport type SimpleCb = () => void;\nexport type TargetingDecorator = (targeting: Targeting) => Targeting;\nexport type SparkleStub = {\n    cmd?: {\n        push: (cb: SimpleCb) => void;\n    };\n}\n\ntype BomboraCb = (data: Record<string, unknown>) => unknown;\ninterface Bombora {\n    (name: \"vi\", cb: BomboraCb): void;\n}\n\ndeclare global {\n    const dvtag: {\n        cmd: (() => void)[],\n        queueAdRequest: (opts: { callback?: OnDvTagReadyCb }) => void;\n    };\n    interface Window {\n        __bloomberg__?: { regUIClient: RegUIClient, adMetrics: Record<string, unknown> };\n        _regUserInfo: RegUserInfo;\n        NREUM: NewrelicBrowser;\n        Spritz: {\n            cmd: { push: (cb: () => void) => void };\n            inject: (src: string, opts: Record<string, unknown>) => void;\n        };\n        onDvtagReady: (cb?: OnDvTagReadyCb, timeout?: number) => void;\n        dvtag?: object;\n        _bmb?: Bombora;\n    }\n}\n\nexport interface AdContextData {\n    slug?: string;\n    adPageType?: string;\n    adCode?: string;\n    tickerId?: string;\n    // this field does not exist in foundation because it is used\n    // by shi-chang, which does not use foundation at this point\n    personId?: string;\n    suid?: string;\n}\n\nexport const TARGETING_TYPES = {\n    IVT: \"ivt\",\n    DV: \"dv\",\n    PERSONALIZATION: \"personalization\",\n    DV_BRANDSAFETY: \"dv_brandsafety\",\n    CONTENT: \"content\",\n    TRIGR: \"tr\"\n} as const;\n\nexport type ExcludeTargetingType = typeof TARGETING_TYPES[keyof typeof TARGETING_TYPES]\n\nexport interface SparkleInitOptions {\n    disableTrigr?: boolean;\n    useCachedConsent: boolean;\n    adBlockerShouldBeBlocked?: boolean;\n    breakpoints: Record<string, number>;\n    networkCode: string;\n    adCodeDecorator?: (adCode: string) => string;\n    pageTargeting?: { page?: string } & Targeting;\n    trigrUrl?: string;\n    trigrDeadline?: number;\n    observerOptions?: IntersectionObserverInit;\n    disableIAS?: boolean;\n    dvScriptUrl?: string;\n    adContextData?: AdContextData\n    watchlistUrl?: string;\n    isDecoupled?: boolean;\n    application?: string;\n    enableEventRecorder?: boolean;\n    excludeTargetingTypes?: ExcludeTargetingType[]\n}\n\nexport interface AdOptions {\n    containerId: string;\n    adCode: string;\n    dimensions: AdSizeMap;\n    targeting: Targeting;\n    strategy: string;\n    viewportOffset?: number;\n    targetingModifiers?: TargetingDecorator[];\n    isInterstitial?: boolean;\n    isDecoupled?: boolean;\n    shadowHostElement?: HTMLElement;\n}\n\nexport interface Destructible {\n    destroy: () => void;\n}\n","import Ad from \"../gpt/Ad\";\n\nexport default class AdObserver {\n\n    _isRunning: boolean;\n    _adsMap: Map<string, Ad>;\n    _observer: IntersectionObserver;\n\n    constructor(callback: (ad: Ad) => void, observerOptions: IntersectionObserverInit) {\n\n        this._isRunning = false;\n        this._adsMap = new Map();\n        this._observer = new IntersectionObserver((entries, observer) => {\n            entries.forEach((entry) => {\n                if (entry.isIntersecting && this._isRunning) {\n                    const ad = this._adsMap.get(entry.target.id);\n\n                    if (ad?.isDisplayable()) {\n                        callback(ad);\n                    }\n                    this._adsMap.delete(entry.target.id);\n                    observer.unobserve(entry.target);\n                }\n            });\n        }, {\n            root: null,\n            ...observerOptions\n        });\n    }\n\n    start() {\n        this._isRunning = true;\n    }\n\n    stop() {\n        this._isRunning = false;\n    }\n\n    destroy() {\n        this._adsMap.clear();\n        this._observer.disconnect();\n    }\n\n    startObserving(ad: Ad) {\n        if (!this._adsMap.has(ad.getId())) {\n            this._adsMap.set(ad.getId(), ad);\n\n            const adElement = ad.getElement();\n\n            if (!adElement) return;\n\n            this._observer.observe(adElement);\n        }\n    }\n\n}\n","const REGEX_CHECK_FOR_COJP = /\\.co\\.jp$/i;\n\nexport type ViewportDimensions = { height: number, width: number };\n\n/**\n * Class that holds reference to relevant environment constiables/configs\n * See bb.browser\n */\nexport default class Environment {\n\n    /**\n     * Get the height of the viewport\n     */\n    static getViewportDimensions(): ViewportDimensions {\n\n        if (!(window && document)) {\n            return { height: 0, width: 0 };\n        }\n\n        const height = window.innerHeight || document.documentElement.clientHeight;\n        const width = window.innerWidth || document.documentElement.clientWidth;\n\n        return { height, width };\n    }\n\n    /**\n     * Query browser policy permission to access window.localStorage\n     */\n    static localStorageExists(): Storage | null {\n        try {\n            return window.localStorage;\n        } catch (error) {\n            return null;\n        }\n    }\n\n    /**\n     * Query browser policy permission to access window.sessionStorage\n     */\n    static sessionStorageExists(): Storage | null {\n        try {\n            return window.sessionStorage;\n        } catch (error) {\n            return null;\n        }\n    }\n\n    /**\n     * Query support for cookies\n     */\n    static cookiesAreEnabled(): boolean {\n        return (window && window.navigator) ? window.navigator.cookieEnabled : false;\n    }\n\n    /**\n     * Query if domain is co.jp\n     */\n    static isCOJP(): boolean {\n        return REGEX_CHECK_FOR_COJP.test(window.location.hostname);\n    }\n\n    /**\n     * Query for the existance of the window global\n     */\n    static isBrowser(): boolean {\n        return Boolean(window);\n    }\n\n    /**\n     * Get the current time\n     */\n    static currentTime(): DOMHighResTimeStamp {\n        if (window.performance && window.performance.now) {\n            return window.performance.now();\n        }\n\n        return Date.now();\n    }\n\n    static getElementStyleAttribute(element: HTMLElement, attribute: string): string {\n        return window.getComputedStyle(element).getPropertyValue(attribute);\n    }\n\n}\n","export type EventHandler<T> = (...args: T[]) => void;\n\nexport default class EventTarget {\n\n    _eventQueue = new Map();\n\n    addEventListener<T>(\n        eventType: string | null,\n        eventHandler: EventHandler<T> | null,\n        options: AddEventListenerOptions = {}\n    ) {\n        if (!(typeof eventType === \"string\" && typeof eventHandler === \"function\")) {\n            return null;\n        }\n\n        if (options.once) {\n            this._autoRemoveHandler(eventType, eventHandler);\n\n            return null;\n        }\n\n        const eventTypeQueue = this._getEventTypeQueue(eventType);\n        const eventHandlerPosition = eventTypeQueue.push(eventHandler);\n\n        return () => this._removeEventHandler(eventType, eventHandlerPosition - 1);\n    }\n\n    removeEventListener<T>(eventType: string | null, eventHandler?: EventHandler<T>) {\n        if (typeof eventType !== \"string\") {\n            return null;\n        }\n\n        if (typeof eventHandler === \"function\") {\n            const eventHandlerPosition = this._getEventTypeQueue(eventType).indexOf(eventHandler);\n\n            return this._removeEventHandler(eventType, eventHandlerPosition);\n        }\n\n        this._eventQueue.delete(eventType);\n\n        return true;\n    }\n\n    dispatchEvent(eventType: string, details?: unknown) {\n        if (!this._eventQueue.has(eventType)) {\n            return;\n        }\n\n        const eventTypeQueue = this._getEventTypeQueue(eventType);\n        let i = eventTypeQueue.length - 1;\n\n        /**\n         * [ST] Reverse while loop addresses issue of event handlers which mutate eventTypeQueue array.\n         * Mutations occur when eventHandler self-unregisters with option once.\n         * Using Array.forEach doesn't handle mutated array.\n         */\n        while (i >= 0) {\n            eventTypeQueue[i](details);\n            i--;\n        }\n    }\n\n    private _getEventTypeQueue(eventType: string) {\n        if (!this._eventQueue.has(eventType)) {\n            this._eventQueue.set(eventType, []);\n        }\n\n        return this._eventQueue.get(eventType);\n    }\n\n    private _removeEventHandler(eventType: string, eventHandlerPosition: number) {\n        const eventIndex = eventHandlerPosition;\n\n        if (eventIndex < 0) {\n            return false;\n        }\n\n        this._getEventTypeQueue(eventType).splice(eventIndex, 1);\n\n        return true;\n    }\n\n    private _autoRemoveHandler<T>(eventType: string, eventHandler: EventHandler<T>) {\n        const eventTypeQueue = this._getEventTypeQueue(eventType);\n\n        const eventHandlerPosition = eventTypeQueue.push((...args: T[]) => {\n            eventHandler(...args);\n            this._removeEventHandler(eventType, eventHandlerPosition - 1);\n        });\n    }\n\n}\n","import Environment from \"./Environment\";\n\nexport const OVERLAY_STYLE = {\n    position: \"absolute\",\n    padding: \"4px\",\n    top: \"0\",\n    left: \"0\",\n    height: \"100%\",\n    width: \"100%\",\n    background: \"rgba(0, 0, 0, 0.75)\",\n    border: \"1px solid black\",\n    boxSizing: \"border-box\",\n    color: \"white\",\n    fontFamily: \"sans-serif\",\n    fontSize: \"13px\",\n    overflow: \"scroll\",\n    textAlign: \"left\",\n    webkitFontSmoothing: \"subpixel-antialiased\"\n};\n\nconst RED_STYLING = {\n    height: \"150px\",\n    \"background-color\": \"red\"\n};\n\nconst RESET_STYLING = {\n    height: \"auto\",\n    \"background-color\": \"transparent\"\n};\n\nexport const OVERLAY_CLASS = \"ad-overlay\";\n\ninterface OverlayArgs {\n    content: string;\n    adElement: HTMLElement;\n    empty: boolean;\n}\n\n/**\n * @class Overlayer\n */\nexport default class Overlayer {\n\n    /**\n     * Overlays adElement with content string\n     */\n    static overlay({ content, adElement, empty }: OverlayArgs) {\n        const overlayElement = document.createElement(\"div\");\n        const elementStyling = empty ? RED_STYLING : RESET_STYLING;\n\n        overlayElement.setAttribute(\"class\", OVERLAY_CLASS);\n\n        if (Environment.getElementStyleAttribute(adElement, \"position\") === \"static\") {\n            adElement.style.position = \"relative\";\n        }\n\n        overlayElement.innerHTML = content;\n        adElement.appendChild(overlayElement);\n\n        Object.assign(overlayElement.style, OVERLAY_STYLE);\n        Object.assign(adElement.style, elementStyling);\n    }\n\n    /**\n     * Clears out any existing overlays\n     */\n    static clearOverlays() {\n        const overlays = document.getElementsByClassName(OVERLAY_CLASS);\n\n        for (let i = overlays.length - 1; i >= 0; --i) {\n            const overlay = overlays.item(i);\n\n            // @ts-expect-error fix when not in Q4\n            overlay.parentNode.removeChild(overlay);\n        }\n    }\n\n}\n","import Cookies from \"js-cookie\";\nimport Environment from \"./Environment\";\nimport { logError } from \"./monitoring/clientUtilsNR\";\n\n/**\n * @class ServerStorage\n */\nexport class ServerStorage {\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    get(key: string): string | undefined {\n        return \"\";\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    set(key: string, value: string) { }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    setObj(key: string, value: Record<string, string | number | boolean> | string) { }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    getObj(key: string): Record<string, string | number | boolean> | undefined {\n        return undefined;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    remove(key: string) {}\n\n}\n\nexport class ObjectStorage extends ServerStorage {\n\n    getObj(key: string): Record<string, string | number | boolean> | undefined {\n        try {\n            const raw = this.get(key);\n\n            return raw && JSON.parse(raw);\n        } catch (err) {\n            logError(err as Error, { msg: `failed to get key '${ key }' from localstorage` });\n\n            return undefined;\n        }\n    }\n\n    setObj(key: string, value: Record<string, string | number | boolean> | string): void {\n        try {\n            this.set(key, JSON.stringify(value));\n        } catch (err) {\n            logError(err as Error, { msg: `failed to save key '${ key }' to localstorage` });\n        }\n    }\n\n}\n\n/**\n * @class BrowserLocalStorage\n */\nexport class BrowserLocalStorage extends ObjectStorage {\n\n    _namespace: string;\n\n    constructor(namespace = \"\") {\n        super();\n        this._namespace = namespace;\n    }\n\n    get(key: string) {\n        return window.localStorage.getItem(this._namespace + key) || \"\";\n    }\n\n    set(key: string, value: string) {\n        window.localStorage.setItem(this._namespace + key, value);\n    }\n\n    remove(key: string) {\n        window.localStorage.removeItem(this._namespace + key);\n    }\n\n}\n\n/**\n *\n * @class BrowserSessionStorage\n */\nexport class BrowserSessionStorage extends ObjectStorage {\n\n    _namespace: string;\n\n    constructor(namespace = \"\") {\n        super();\n        this._namespace = namespace;\n    }\n\n    get(key: string) {\n        return window.sessionStorage.getItem(this._namespace + key) || \"\";\n    }\n\n    set(key: string, value: string) {\n        window.sessionStorage.setItem(this._namespace + key, value);\n    }\n\n    remove(key: string) {\n        window.sessionStorage.removeItem(this._namespace + key);\n    }\n\n}\n\n/**\n * @class BrowserCookieStorage\n */\nexport class BrowserCookieStorage extends ObjectStorage {\n\n    _duration: number;\n\n    constructor(duration = 1) {\n        super();\n        this._duration = duration;\n    }\n\n    get(key: string): string | undefined {\n        return Cookies.get(key);\n    }\n\n    set(key: string, value: string) {\n        Cookies.set(key, value, { expires: this._duration });\n    }\n\n    remove(key: string) {\n        Cookies.remove(key);\n    }\n\n}\n\n/**\n * @class Storage\n */\nexport class Storage {\n\n    /**\n     * Factory method for Storage\n     *\n     * @param {string} namespace prefix\n     * @returns {ServerStorage|BrowserLocalStorage|BrowserCookieStorage}\n     */\n    static createLocalStorage(\n        namespace?: string\n    ): ServerStorage | BrowserLocalStorage | BrowserCookieStorage {\n        if (!Environment.isBrowser()) {\n            return new ServerStorage();\n        }\n\n        if (Environment.localStorageExists()) {\n            return new BrowserLocalStorage(namespace);\n        }\n\n        if (Environment.cookiesAreEnabled()) {\n            return new BrowserCookieStorage();\n        }\n\n        return new ServerStorage();\n    }\n\n    /**\n     * @param namespace\n     * @return {*}\n     */\n    static createSessionStorage(namespace?: string) {\n\n        if (!Environment.isBrowser()) {\n            return new ServerStorage();\n        }\n\n        if (Environment.sessionStorageExists()) {\n            return new BrowserSessionStorage(namespace);\n        }\n\n        if (Environment.cookiesAreEnabled()) {\n            return new BrowserCookieStorage();\n        }\n\n        return new ServerStorage();\n    }\n\n    static createCookieStorage(duration?: number) {\n\n        if (!Environment.isBrowser()) {\n            return new ServerStorage();\n        }\n\n        if (Environment.cookiesAreEnabled()) {\n            return new BrowserCookieStorage(duration);\n        }\n\n        return new ServerStorage();\n    }\n\n}\n","import { CmpInitResponse, getCMPData, cmpCookie } from \"@foundation/cmp-client\";\nimport { timeoutSuccess } from \"./timeouts\";\nimport { ServerStorage, Storage } from \"./Storage\";\nimport fireEREvt from \"./eventRecorderClient\";\n\n// this overrides default timeout of 10_000;\nconst local: ServerStorage = Storage.createLocalStorage();\nconst storageKey = \"bbads_consent_data\";\n\nexport const CONSENT_TIMEOUT = 500;\nexport const CONSENT_TIMEOUT_RESPONSE = \"timeout\";\n\nasync function getAndCacheConsent() {\n    const consentData: CmpInitResponse = await getCMPData();\n\n    local.setObj(storageKey, consentData);\n\n    return consentData;\n}\n\n/**\n *\n * @param {Boolean} useCachedConsent\n * @returns {Promise<{ gdprApplies: Boolean, usPrivacyString: String, iabConsentString: String }>}\n */\nexport default async function getUserConsentData(isConsentTimeoutEnabled: boolean): Promise<CmpInitResponse> {\n    fireEREvt(\"ad-cmp\");\n\n    const cachedConsentData = local.getObj(storageKey);\n    const getAndCacheConsentPromise: Promise<CmpInitResponse> = (\n        isConsentTimeoutEnabled\n            ? Promise.race([getAndCacheConsent(), timeoutSuccess(CONSENT_TIMEOUT, {})]) : getAndCacheConsent()\n    );\n\n    if (cachedConsentData) {\n        fireEREvt(\"ad-cachedcmp-resp\", cachedConsentData);\n\n        return cachedConsentData;\n    }\n\n    const cacheRes = await getAndCacheConsentPromise;\n\n    fireEREvt(\"ad-cmp-resp\", cacheRes);\n\n    return cacheRes;\n}\n\nexport function getConsentFlags() {\n    return {\n        reqAllowed: cmpCookie.reqAllowed(),\n        funAllowed: cmpCookie.funAllowed(),\n        padAllowed: cmpCookie.padAllowed()\n    };\n}\n","\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function curry<T extends(...args: any[]) => any>\n(this: unknown, fn: T, ...args: Partial<Parameters<T>>) {\n    return fn.bind(this, ...args);\n}\n","export default function fireEREvt(\n    event: string,\n    contents?: unknown,\n    flags?: Record<string, unknown>\n) {\n    window.eventRecorder = window.eventRecorder || {\n        cmd: []\n    };\n\n    const current: number = Date.now();\n\n    window.eventRecorder.cmd.push(() => {\n        const eventRecorder = window.getEventRecorderClient();\n\n        eventRecorder.fireEvent(event, flags, contents, current);\n    });\n}\n","import md5 from \"blueimp-md5\";\n\n/**\n * Generates an MD5 hash based on object properties\n */\nexport default function getObjectSignature(object = {}): string | null {\n    if (typeof object !== \"object\" || Array.isArray(object)) {\n        return null;\n    }\n\n    const methodNames = Object.getOwnPropertyNames(object).sort()\n        .join(\":\");\n\n    return md5(methodNames);\n}\n","export default function identity<T>(value: T): T { return value }\n","export default function invertObject<T extends Record<PropertyKey, PropertyKey>>(object: T) {\n    return (Object.keys(object) as (keyof T)[])\n        .reduce<Record<T[keyof T], keyof T>>((result, key) => {\n            const value = object[key];\n\n            // eslint-disable-next-line no-param-reassign\n            result[value] = key;\n\n            return result;\n        }, {} as Record<T[keyof T], keyof T>);\n}\n","import type PerformanceMonitor from \"./monitoring/PerformanceMonitor\";\n\n/**\n *\n * Returns a function that can wrap a async func and measure time taken\n * @param {PerformanceMonitor}\n * @returns {Function}\n */\nconst makeMeasure = (monitor: PerformanceMonitor) =>\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    async function measure<F extends(...args: any[]) => any>(\n        this: unknown,\n        name: string,\n        fn: F,\n        ...args: Parameters<typeof fn>): Promise<Awaited<ReturnType<F>>> {\n        const metric = monitor.createMetric(name);\n\n        metric.start();\n        try {\n            return await fn.apply(this, args);\n        } catch (error) {\n            metric.mark(\"error\", { error: error && error.toString().slice(0, 500) });\n            throw error;\n        } finally {\n            metric.end();\n        }\n    };\n\nexport default makeMeasure;\n","import UserInfo from \"../../session/UserInfo\";\nimport { NewrelicBrowser } from \"../../type\";\nimport { logError } from \"./clientUtilsNR\";\nimport { ReporterI } from \"./Reporter\";\n\nconst SESSION_ID_TIMEOUT = 20000;\nconst userInfo = new UserInfo();\n\n// kicks off fetching of sessionId so it's available to metrics\nuserInfo\n    .getSessionId(SESSION_ID_TIMEOUT)\n    .catch((err) => logError(err, { msg: \"Failed to get sessionId for PerformanceMonitor\" }));\n\nexport interface NewRelicBrowserReporterProps {\n    module: string;\n    action: string;\n    containerId: string;\n    position: string;\n}\n\nexport default class NewRelicBrowserReporter implements ReporterI {\n\n    name: string;\n    startTime: number = Date.now();\n    sessionId: string | undefined | null = null;\n    details: NewRelicBrowserReporterProps;\n    disabled = true;\n    newrelic: NewrelicBrowser;\n    sessionStartTime: number | undefined;\n\n    constructor(details: NewRelicBrowserReporterProps) {\n        this.disabled = typeof window.NREUM !== \"object\";\n        this.details = details;\n        this.newrelic = window.NREUM;\n        this.name = this._composeName(details);\n        this.sessionId = userInfo.getSessionIdSync();\n    }\n\n    /**\n     * Creates a mark for beginning of measure\n     */\n    start() {\n        if (this.disabled) return;\n\n        /**\n         * Records absolute start time since beginning of epoch\n         * @type {number}\n         */\n        this.startTime = Date.now();\n        /**\n         * Records relative start time since beginning of session\n         * @type {DOMHighResTimeStamp}\n         */\n        this.sessionStartTime = performance.now();\n    }\n\n    /**\n     * Creates a mark for end of measure\n     */\n    end(detail?: Record<string, unknown>) {\n        if (this.disabled || !this.startTime) {\n            return;\n        }\n\n        this._measure(detail);\n    }\n\n    /**\n     * Marks a single event in time\n     */\n    mark(action: string, attributes?: Record<string, unknown>) {\n        if (this.disabled) return;\n\n        const { position } = this.details;\n\n        this.newrelic.addPageAction(`${ this.name }.${ action }`, {\n            sessionId: this.sessionId,\n            position,\n            ...attributes\n        });\n    }\n\n    /**\n     * Measures duration between two markers\n     * @param {object} [detail]\n     * @private\n     */\n    _measure(detail?: Record<string, unknown>) {\n        const endTime = Date.now();\n        const duration = endTime - this.startTime;\n        const traceObject = {\n            name: this.name,\n            start: this.startTime, // Time in ms since epoch\n            end: endTime\n        };\n\n        const { action, position, module } = this.details;\n\n        this.newrelic.addToTrace(traceObject);\n        this.newrelic.addPageAction(this.name, {\n            ...detail,\n            action,\n            duration,\n            module,\n            position,\n            startTime: this.sessionStartTime,\n            sessionId: this.sessionId\n        });\n    }\n\n    /**\n     * Generates generic event name\n     */\n    _composeName(options: NewRelicBrowserReporterProps) {\n        return `${ /^Sparkle/.test(options.module) ? options.module : `Sparkle:${ options.module }` }.${ options.action }${ options.position ? `-${ options.position }` : \"\" }`;\n    }\n\n}\n","import { ReporterI } from \"./Reporter\";\n\nexport default class PerformanceAPIReporter implements ReporterI {\n\n    name: string;\n    startTime: number | null = null\n\n    /**\n     * @constructor\n     * @param {string} name\n     */\n    constructor(name: string) {\n        this.name = name;\n    }\n\n    /**\n     * Creates a mark for beginning of measure\n     */\n    start() {\n        this.startTime = performance.now();\n        this.mark(\"start\");\n    }\n\n    /**\n     * Creates a mark for end of measure\n     */\n    end() {\n        if (!this.startTime) {\n            return;\n        }\n\n        this.mark(\"end\");\n\n        performance.measure(this.name, `${ this.name }.start`, `${ this.name }.end`);\n    }\n\n    /**\n     * Marks a single event in time\n     */\n    mark(action: string) {\n        return performance.mark(`${ this.name }.${ action }`);\n    }\n\n}\n","import NewRelicBrowserReporter, { NewRelicBrowserReporterProps } from \"./NewRelicBrowserReporter\";\nimport PerformanceAPIReporter from \"./PerformanceAPIReporter\";\nimport Reporter from \"./Reporter\";\n\nconst PARSE_MARK_NAME = /(\\w+)(?!:\\w+)\\.(\\w+)(?:-([\\w\\-()]+))?(?:@(\\w+))?/;\n\n/**\n * Creates a metric used to monitor duration of some action\n * Uses browser native performance API's\n */\nexport default class PerformanceMonitor {\n\n    prefix: string;\n\n    /**\n     * @type {Map}\n     */\n    static metrics = new Map();\n\n    /**\n     * @param {String} [prefix=\"*\"]\n     */\n    constructor(prefix = \"Sparkle\") {\n        this.prefix = prefix;\n    }\n\n    createMetric(name?: string): Reporter {\n        if (!name) {\n            throw new Error(\"Metric name is required\");\n        }\n\n        const measureName = `${ this.prefix }.${ name }`;\n        const [, module, action, containerId, position] = measureName.match(PARSE_MARK_NAME) ?? [];\n        const metricOptions: NewRelicBrowserReporterProps = { module, action, containerId, position };\n\n        /**\n         * @type {Reporter}\n         */\n        const reporter = new Reporter();\n\n        reporter.addReporter(new PerformanceAPIReporter(measureName));\n        reporter.addReporter(new NewRelicBrowserReporter(metricOptions));\n\n        PerformanceMonitor.metrics.set(measureName, reporter);\n\n        return reporter;\n    }\n\n    /**\n     * Prints a table of performance metrics in the console\n     * @static\n     */\n    static logPerformanceInfo() {\n        const sparkleMeasures = performance.getEntriesByType(\"measure\")\n            .filter((entry) => /^Sparkle./.test(entry.name))\n            .map(({ name, duration }) => {\n                const measure = PerformanceMonitor.metrics.get(name);\n                const [, module, action, containerId, position] = name.match(PARSE_MARK_NAME) ?? [];\n                const { advertiserId, lineItemId, creativeId, isEmpty, startTime } = measure.meta || {};\n\n                return ({\n                    module,\n                    action,\n                    containerId,\n                    position,\n                    startTime: Math.round(startTime),\n                    duration: Math.round(duration),\n                    advertiserId, lineItemId, creativeId, isEmpty\n                });\n            });\n\n        console.table(sparkleMeasures);\n    }\n\n    /**\n     * Prints a table of individual performance metrics in the console\n     */\n    static logIndividualAdPerformance(pattern?: string) {\n        if (!pattern) {\n            console.error(\"Missing required Ad position name\");\n\n            return;\n        }\n\n        const sparkleMeasures = performance.getEntriesByType(\"measure\")\n            .filter((entry) => /^Sparkle./.test(entry.name) && entry.name.lastIndexOf(`-${ pattern }`) !== -1)\n            .map(({ name, duration }) => {\n                const measure = PerformanceMonitor.metrics.get(name);\n                const [, module, action, , position] = name.match(PARSE_MARK_NAME) ?? [];\n                const { advertiserId, lineItemId, creativeId, isEmpty, startTime } = measure.meta || {};\n\n                return ({\n                    module,\n                    action,\n                    position,\n                    startTime: Math.round(startTime),\n                    duration: Math.round(duration),\n                    advertiserId, lineItemId, creativeId, isEmpty\n                });\n            });\n\n        console.table(sparkleMeasures);\n    }\n\n    /**\n     * Prints debug instructions in console\n     */\n    static printInstructions() {\n        const toc = [\n            {\n                Command: \"Sparkle.logPerformanceInfo()\",\n                Description: \"Displays a table of all Ad metrics taken during the rendering session\"\n            },\n            {\n                Command: \"Sparkle.logIndividualAdPerformance(position)\",\n                Description: \"Displays a table of metrics per Ad based on position name\"\n            }\n        ];\n\n        console.log(\"%cSparkle debug instructions:\", \"background-color: beige; padding: 4px; color: red; font-size: 20px; font-weight: bold;\");\n        console.table(toc);\n    }\n\n}\n\n","export interface ReporterI {\n    start: (...args: unknown[]) => void;\n    end: (details?: Record<string, unknown>) => void;\n    mark: (...args: [string, Record<string, unknown>]) => void;\n}\n\nexport default class Reporter implements ReporterI {\n\n    startTime: number | null = null;\n    meta = {}\n    reporters: ReporterI[] = [];\n\n    start(...args: unknown[]) {\n        this.startTime = performance.now();\n\n        this.reporters.forEach((rep) => rep.start(...args));\n    }\n\n    end(detail?: Record<string, unknown>) {\n        this.reporters.forEach((rep) => rep.end(detail));\n\n        this.meta = { ...this.meta, ...detail, startTime: this.startTime };\n    }\n\n    mark(...args: [string, Record<string, unknown>]) {\n        this.reporters.forEach((rep) => rep.mark(...args));\n    }\n\n    addReporter(reporter: ReporterI) {\n        this.reporters.push(reporter);\n    }\n\n}\n","const nr =\n    typeof window !== \"undefined\" &&\n    typeof window.NREUM === \"object\" &&\n    window.NREUM;\n\nexport const logError = (err: Error, attributes = {}) => {\n    if (nr) nr.noticeError(err, attributes);\n};\n","import { AdContextData } from \"../type\";\n\nconst TAGLESS_AD_PAGE_IDS = new Set([\n    \"citylab-culture\"\n]);\n\nconst AD_SERVICE_DV_TARGETING_PAGE_IDS = new Set([\"citylab-technology\", \"phoenix-asia\"]);\n\nexport const checkIfTaglessAdEnabled = (pageId: string) => TAGLESS_AD_PAGE_IDS.has(pageId);\n\nexport const isAdserviceDVTargetingEnabled = (pageId: string) => AD_SERVICE_DV_TARGETING_PAGE_IDS.has(pageId);\n\nexport const isInteractivePage = (adContextData: AdContextData) => adContextData.adPageType === \"interactive\";\nexport const isArticleDecoupled = (adContextData: AdContextData, isDecoupled: boolean) => isDecoupled && adContextData.adPageType === \"article\";\nexport const isQuoteDecoupled = (adContextData: AdContextData, isDecoupled: boolean) => isDecoupled && adContextData.adPageType === \"quote\";\n\nexport const isPersonalizedTargetingEnabled = (adContextData: AdContextData, isDecoupled: boolean) =>\n    isArticleDecoupled(adContextData, isDecoupled) ||\n    isInteractivePage(adContextData) || isQuoteDecoupled(adContextData, isDecoupled);\n","/**\n * Returns the parsed contents of the stringified JSON\n */\nexport default function parseJson(input: string, fallback: Record<string, unknown>) {\n    try {\n        return JSON.parse(input);\n    } catch (e) {\n        return fallback;\n    }\n}\n","import { Storage } from \"../util/Storage\";\nimport PerformanceMonitor from \"./monitoring/PerformanceMonitor\";\nimport makeMeasure from \"./makeMeasure\";\nimport fireEREvt from \"./eventRecorderClient\";\n\nconst timeout = <T>(timeoutInMs: number): Promise<T> => new Promise((_, reject) => {\n    setTimeout(() => reject(`RequestTimeout after ${ timeoutInMs }ms`), timeoutInMs);\n});\n\nconst get = <T>(url: string): Promise<T> => {\n    const options: HeadersInit = { method: \"GET\" };\n\n    return fetch(url, options).then((response) => {\n        if (response.ok) {\n            return response.json();\n        }\n\n        return Promise.reject(response);\n    });\n};\n\nexport const makeCachedGet = <T>(name: string, getFn = get) => {\n    let pendingPromise: Promise<T> | undefined = undefined;\n    const performanceMonitor = new PerformanceMonitor(`Sparkle:${ name }`);\n    const withTiming = makeMeasure(performanceMonitor);\n    const local = Storage.createLocalStorage();\n\n    return (url: string, timeoutInMs: number, defaultRes: T, localStorageKey?:string): Promise<T> => {\n\n        if (!pendingPromise) {\n            pendingPromise = withTiming(name, () => getFn<T>(url).then((res) => {\n                if (localStorageKey) local.setObj(localStorageKey, res as Record<string, string>);\n                fireEREvt(`${ name }-api-res`, res);\n\n                return res;\n            }));\n        }\n\n        if (localStorageKey) {\n            const cachedTargetingData = local.getObj(localStorageKey);\n\n            if (cachedTargetingData) {\n                return Promise.resolve(cachedTargetingData as T);\n            }\n        }\n\n        return Promise.race([pendingPromise as Promise<T>, timeout<T>(timeoutInMs)])\n            .catch((err) => {\n                if (defaultRes) return defaultRes;\n                throw err;\n            });\n    };\n};\n","export default function stripSlashes(str?: string | number | null) {\n    if (typeof str !== \"string\") return \"\";\n\n    return (str).replace(/-/g, \"\");\n}\n","import { Targeting } from \"../interfaces/TargetingProvider\";\n\nexport function urlModifier(targeting: Targeting) {\n    const params = new URLSearchParams(window.location.search);\n    const qsTargeting: Targeting = {};\n\n    for (const [key, value] of params.entries()) {\n        qsTargeting[key] = value;\n    }\n\n    qsTargeting.url = window.location.pathname;\n\n    return { ...targeting, ...qsTargeting };\n}\n\n","export function timeoutSuccess<T>(timeout: number, result?: T): Promise<T> {\n    return new Promise((resolve) => {\n        setTimeout(resolve, timeout, result);\n    });\n}\n","import Environment, { type ViewportDimensions } from \"../util/Environment\";\nimport invertObject from \"../util/invertObject\";\nimport Ad from \"../gpt/Ad\";\n\nconst SPANS_ALL_BREAKPOINTS = \"all\";\n\nfunction round(number: number) {\n    return number > 0 ? Math.floor(number) : Math.ceil(number);\n}\n\ntype Breakpoints = Record<string, number>;\ntype InvertedBreakpoints = Record<number, string>;\nexport type AdSizes = [number, number][];\nexport type AdSizeMap = Record<string, AdSizes>;\n\n/**\n * Delegate viewability concerns with respect to the viewport and breakpoints\n */\nexport default class Viewability {\n\n    private _invertedBreakpoints: InvertedBreakpoints;\n\n    constructor(breakpoints: Breakpoints = {}) {\n        this._invertedBreakpoints = invertObject(breakpoints);\n    }\n\n    /**\n     * Gets the current breakpoint of the viewport\n     */\n    private _currentBreakpoint(): string | undefined {\n        const windowWidth = window.innerWidth;\n        const invertedBreakpoints = this._invertedBreakpoints;\n\n        const breakpointWidth =\n            (Object.keys(invertedBreakpoints) as unknown as (keyof typeof invertedBreakpoints)[])\n                .reduce((smallerBreakpoint, largerBreakpoint) =>\n                    (windowWidth >= largerBreakpoint ? largerBreakpoint : smallerBreakpoint));\n\n        return this._invertedBreakpoints[breakpointWidth];\n    }\n\n    private _isViewable(element: HTMLElement, { height, width }: ViewportDimensions, acceptableOffset = 0) {\n        if (!element.offsetParent) {\n            return false;\n        }\n\n        const { top, bottom, left, right } = element.getBoundingClientRect();\n        const viewportTop = 0 - acceptableOffset;\n        const viewportBottom = height + acceptableOffset;\n\n        const verticallyViewable = (round(top) >= viewportTop) && (round(bottom) <= viewportBottom);\n        const horizontallyViewable = round(left) >= 0 && round(right) <= width;\n\n        return verticallyViewable && horizontallyViewable;\n    }\n\n    /**\n     * Returns list of ads that are viewable\n     * It is important to note that all DOM queries are made in batch and as infrequently as possible\n     * Querying the DOM for position info, performing a DOM operation, and performing another query\n     * causes the browser to perform a forced layout. This is extremely expensive and should be avoided.\n     */\n    filter(ads: Ad[] = []): Ad[] {\n        const viewportDimensions = Environment.getViewportDimensions();\n\n        return ads.filter((ad) => this.isViewable(viewportDimensions, ad));\n    }\n\n    /**\n     * returns true when every ad is viewable, false otherwise\n     */\n    everyViewable(ads: Ad[] = []): boolean {\n        const viewportDimensions = Environment.getViewportDimensions();\n\n        return ads.every((ad) => this.isViewable(viewportDimensions, ad));\n    }\n\n    /**\n     * Check if the ad is in viewport given the viewport dimensions\n     * and any offset specified on the ad itself.\n     */\n    isViewable(viewportDimensions: ViewportDimensions, ad: Ad): boolean {\n        let adElement = ad.getElement();\n\n        const viewable = adElement\n            ? this._isViewable(adElement, viewportDimensions, ad.getViewportOffset())\n            : false;\n\n        adElement = null;\n\n        return viewable;\n    }\n\n    /**\n     * Gets the sizes for the current viewport\n     */\n    getSizes(sizes: AdSizeMap | AdSizes): AdSizes {\n        if (isAdDimensions(sizes)) {\n            return sizes;\n        }\n\n        const currentBreakpoint = this._currentBreakpoint();\n        const sizesForCurrentBreakpoint =\n            currentBreakpoint && sizes[currentBreakpoint] ? sizes[currentBreakpoint] : [];\n        const sizesSpanningAllBreakpoints = sizes[SPANS_ALL_BREAKPOINTS] || [];\n\n        return [...sizesForCurrentBreakpoint, ...sizesSpanningAllBreakpoints];\n    }\n\n    /**\n     * Returns true if sizes object contains mobile-only dimensions\n     */\n    isMobile(sizes: AdSizeMap | AdSizes): boolean {\n        const currentBreakpoint = this._currentBreakpoint();\n\n        return \"mobile\" === currentBreakpoint && (\"mobile\" in sizes);\n    }\n\n    destroy() {\n        // @ts-expect-error ts migration\n        this._invertedBreakpoints = null;\n    }\n\n}\n\nfunction isAdDimensions(sizes: AdSizeMap | AdSizes): sizes is AdSizes {\n    return Array.isArray(sizes);\n}\n","import EventTarget from \"../util/EventTarget\";\n\nconst BROWSER_PREFIXES = {\n    webkitHidden: \"webkitvisibilitychange\",\n    mozHidden: \"mozvisibilitychange\",\n    msHidden: \"msvisibilitychange\",\n    hidden: \"visibilitychange\"\n} as const;\n\nconst FALLBACK_VISIBLE_EVENT = \"focus\";\nconst FALLBACK_INVISIBLE_EVENT = \"blur\";\n\nfunction isDefined(something: unknown): boolean {\n    return typeof something !== \"undefined\";\n}\n\n/**\n * Façade for registering callbacks to in and out-of-visibility events\n */\nclass Visibility extends EventTarget {\n\n    private _hiddenAttribute: string | null = null;\n    private _visibleChangeEvent: string | null = null;\n\n    static EVENTS = {\n        ON_VISIBLE: \"visible\",\n        ON_INVISIBLE: \"invisible\"\n    }\n\n    constructor() {\n        super();\n\n        this._useBrowserPrefixedAttributes();\n        this._contextifyCallbacks();\n        this._subscribeToGlobalEvents();\n    }\n\n    /**\n     * Bind methods to self for use as callbacks\n     *\n     * @private\n\n     */\n    _contextifyCallbacks() {\n        this._dispatchEventListeners = this._dispatchEventListeners.bind(this);\n        this._visibleEventListener = this._visibleEventListener.bind(this);\n        this._invisibleEventListener = this._invisibleEventListener.bind(this);\n    }\n\n    /**\n     * Registers global event listener for visibility change\n     *\n     * @private\n     */\n    _subscribeToGlobalEvents() {\n        if (this._visibleChangeEvent) {\n            document.addEventListener(this._visibleChangeEvent, this._dispatchEventListeners);\n\n            return;\n        }\n\n        window.addEventListener(FALLBACK_VISIBLE_EVENT, this._visibleEventListener);\n        window.addEventListener(FALLBACK_INVISIBLE_EVENT, this._invisibleEventListener);\n    }\n\n    /**\n     * Tears down global event listener for visibility change\n     *\n     * @private\n     */\n    _unsubscribeFromGlobalEvents() {\n        if (this._visibleChangeEvent) {\n            document.removeEventListener(this._visibleChangeEvent, this._dispatchEventListeners);\n\n            return;\n        }\n\n        window.removeEventListener(FALLBACK_VISIBLE_EVENT, this._visibleEventListener);\n        window.removeEventListener(FALLBACK_INVISIBLE_EVENT, this._invisibleEventListener);\n    }\n\n    /**\n     * Dispatches appropriate set of events, bound to document visibility change event\n     *\n     * @private\n     */\n    _dispatchEventListeners() {\n        if (this.isVisible()) {\n            this.dispatchEvent(Visibility.EVENTS.ON_VISIBLE);\n        } else {\n            this.dispatchEvent(Visibility.EVENTS.ON_INVISIBLE);\n        }\n    }\n\n    /**\n     * Determines whether or not focus/blur event is a visibility change\n     */\n    _isVisibilityChange({ view }: FocusEvent) {\n        return view === window;\n    }\n\n    /**\n     * Dispatches visible listeners if focus event is a visibility change\n     *\n     * @private\n     */\n    _visibleEventListener(event: FocusEvent) {\n        if (this._isVisibilityChange(event)) {\n            this.dispatchEvent(Visibility.EVENTS.ON_VISIBLE);\n        }\n    }\n\n    /**\n     * Dispatches invisible listeners if blur event is a visibility change\n     *\n     * @private\n     */\n    _invisibleEventListener(event: FocusEvent) {\n        if (this._isVisibilityChange(event)) {\n            this.dispatchEvent(Visibility.EVENTS.ON_INVISIBLE);\n        }\n    }\n\n    /**\n     * Selects correct version of `hidden` and `visibilitychange` for current browser\n     *\n     * @private\n     */\n    _useBrowserPrefixedAttributes() {\n        Object.keys(BROWSER_PREFIXES).some((attr) => {\n            if (isDefined(document[attr as keyof typeof document])) {\n                this._hiddenAttribute = attr;\n                this._visibleChangeEvent = BROWSER_PREFIXES[attr as keyof typeof BROWSER_PREFIXES];\n\n                return true;\n            }\n\n            return false;\n        });\n    }\n\n    /**\n     * Destructor\n     */\n    destroy() {\n        this._unsubscribeFromGlobalEvents();\n    }\n\n    /**\n     * Determines whether or not the document is currently visible\n     */\n    isVisible(): boolean {\n        // @ts-expect-error fix when not in Q4\n        return document && document[this._hiddenAttribute] === false;\n    }\n\n}\n\nexport default Visibility;\n","import { GetUserWatchlistsParams, GetUserWatchlistsResponse, WatchlistClientParams, WatchlistResponse } from \"./types\";\n\nexport default class WatchlistClient {\n\n    watchlistServiceUrl: string;\n\n    constructor({ watchlistServiceUrl }: WatchlistClientParams) {\n        this.watchlistServiceUrl = watchlistServiceUrl;\n    }\n\n    getUserWatchlists(\n        { bconnectId, userToken: userKey }: GetUserWatchlistsParams\n    ): Promise<WatchlistResponse<GetUserWatchlistsResponse>> {\n        const headers = userKey !== undefined ? {\n            userKey\n        } : undefined;\n\n        const url = new URL(`${ this.watchlistServiceUrl }/get/${ bconnectId }`);\n\n        return this.#fetchJSON<GetUserWatchlistsResponse>(url, {\n            method: \"GET\",\n            credentials: \"include\",\n            headers\n        });\n    }\n\n    #fetchJSON<D>(\n        ...args: Parameters<typeof fetch>\n    ): Promise<{ data?: D | string; status: number; message: string; }> {\n        const [url, params] = args;\n\n        return (\n            fetch(url, params)\n                .then(async (response) => {\n                    const { status, ok, statusText: message } = response;\n                    const clone = response.clone();\n                    const data: D | string | undefined = await response.json().catch(\n                        () => clone.text()\n                    );\n\n                    return (ok\n                        ? Promise.resolve({ status, data, message })\n                        : Promise.reject({ status, data, message })\n                    );\n                })\n        );\n    }\n\n}\n","\nimport UserInfo from \"../session/UserInfo\";\nimport { makeCachedGet } from \"../util/requestHelpers\";\nimport { TargetingProvider, Targeting } from \"../interfaces/TargetingProvider\";\nimport WatchlistClient from \"./WatchlistClient\";\n\nexport interface WatchlistClientOptions {\n  watchlistServiceUrl: string;\n  userInfo : UserInfo\n}\n\nexport interface UserWatchlistsParams {\n  bconnectId: string;\n}\n\nconst storageKey = \"bbads_watchlist\";\nconst DEFAULT_WATCHLIST_TARGET = { watchlist: \"no\" };\n\nexport class WatchlistProvider implements TargetingProvider {\n\n  private get: ReturnType<typeof makeCachedGet<Targeting>>;\n  private _userInfo: UserInfo;\n  private timeoutInMs = 5000;\n  private watchlistClient: WatchlistClient;\n\n  constructor(userInfo: UserInfo) {\n      this._userInfo = userInfo;\n      this.get = makeCachedGet<Targeting>(\"watchlistGet\", <T>(userId: string) => this.getUserWatchlists(userId) as Promise<T>);\n      this.watchlistClient = new WatchlistClient({\n          watchlistServiceUrl: `${ process.env.REGISTRATION_URL || \"https://login.bloomberg.com\" }/watchlist-service`\n      });\n  }\n\n  async getUserWatchlists(userId:string): Promise<Targeting> {\n\n      try {\n          const watchlists = await this.watchlistClient.getUserWatchlists({ bconnectId: userId });\n\n          if (watchlists?.data) {\n              return { watchlist: \"yes\" };\n          }\n      } catch (error) {\n          console.error(`Error get watchlist: ${ error }`, error);\n      }\n\n      return DEFAULT_WATCHLIST_TARGET;\n  }\n\n  private async getTargetingInner(): Promise<Targeting> {\n      const userInfo = await this._userInfo.getUserInfo();\n      const userId = userInfo?.userId;\n\n      return userId ? this.get(userId, this.timeoutInMs, {}, storageKey) : DEFAULT_WATCHLIST_TARGET;\n  }\n\n  getTargeting(): Promise<Targeting> {\n      return this.getTargetingInner().catch((error) => {\n          console.error(`Error fetching watchlist targeting: ${ error }`, error);\n\n          return DEFAULT_WATCHLIST_TARGET;\n      });\n  }\n\n}\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.35\n   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n   MIT License *//*\n   Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n   Supports browser & node.js environment. \n   Demo   : https://faisalman.github.io/ua-parser-js\n   Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n    'use strict';\n\n    //////////////\n    // Constants\n    /////////////\n\n\n    var LIBVERSION  = '0.7.35',\n        EMPTY       = '',\n        UNKNOWN     = '?',\n        FUNC_TYPE   = 'function',\n        UNDEF_TYPE  = 'undefined',\n        OBJ_TYPE    = 'object',\n        STR_TYPE    = 'string',\n        MAJOR       = 'major',\n        MODEL       = 'model',\n        NAME        = 'name',\n        TYPE        = 'type',\n        VENDOR      = 'vendor',\n        VERSION     = 'version',\n        ARCHITECTURE= 'architecture',\n        CONSOLE     = 'console',\n        MOBILE      = 'mobile',\n        TABLET      = 'tablet',\n        SMARTTV     = 'smarttv',\n        WEARABLE    = 'wearable',\n        EMBEDDED    = 'embedded',\n        UA_MAX_LENGTH = 350;\n\n    var AMAZON  = 'Amazon',\n        APPLE   = 'Apple',\n        ASUS    = 'ASUS',\n        BLACKBERRY = 'BlackBerry',\n        BROWSER = 'Browser',\n        CHROME  = 'Chrome',\n        EDGE    = 'Edge',\n        FIREFOX = 'Firefox',\n        GOOGLE  = 'Google',\n        HUAWEI  = 'Huawei',\n        LG      = 'LG',\n        MICROSOFT = 'Microsoft',\n        MOTOROLA  = 'Motorola',\n        OPERA   = 'Opera',\n        SAMSUNG = 'Samsung',\n        SHARP   = 'Sharp',\n        SONY    = 'Sony',\n        VIERA   = 'Viera',\n        XIAOMI  = 'Xiaomi',\n        ZEBRA   = 'Zebra',\n        FACEBOOK    = 'Facebook',\n        CHROMIUM_OS = 'Chromium OS',\n        MAC_OS  = 'Mac OS';\n\n    ///////////\n    // Helper\n    //////////\n\n    var extend = function (regexes, extensions) {\n            var mergedRegexes = {};\n            for (var i in regexes) {\n                if (extensions[i] && extensions[i].length % 2 === 0) {\n                    mergedRegexes[i] = extensions[i].concat(regexes[i]);\n                } else {\n                    mergedRegexes[i] = regexes[i];\n                }\n            }\n            return mergedRegexes;\n        },\n        enumerize = function (arr) {\n            var enums = {};\n            for (var i=0; i<arr.length; i++) {\n                enums[arr[i].toUpperCase()] = arr[i];\n            }\n            return enums;\n        },\n        has = function (str1, str2) {\n            return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n        },\n        lowerize = function (str) {\n            return str.toLowerCase();\n        },\n        majorize = function (version) {\n            return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n        },\n        trim = function (str, len) {\n            if (typeof(str) === STR_TYPE) {\n                str = str.replace(/^\\s\\s*/, EMPTY);\n                return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n            }\n    };\n\n    ///////////////\n    // Map helper\n    //////////////\n\n    var rgxMapper = function (ua, arrays) {\n\n            var i = 0, j, k, p, q, matches, match;\n\n            // loop through all regexes maps\n            while (i < arrays.length && !matches) {\n\n                var regex = arrays[i],       // even sequence (0,2,4,..)\n                    props = arrays[i + 1];   // odd sequence (1,3,5,..)\n                j = k = 0;\n\n                // try matching uastring with regexes\n                while (j < regex.length && !matches) {\n\n                    if (!regex[j]) { break; }\n                    matches = regex[j++].exec(ua);\n\n                    if (!!matches) {\n                        for (p = 0; p < props.length; p++) {\n                            match = matches[++k];\n                            q = props[p];\n                            // check if given property is actually array\n                            if (typeof q === OBJ_TYPE && q.length > 0) {\n                                if (q.length === 2) {\n                                    if (typeof q[1] == FUNC_TYPE) {\n                                        // assign modified match\n                                        this[q[0]] = q[1].call(this, match);\n                                    } else {\n                                        // assign given value, ignore regex match\n                                        this[q[0]] = q[1];\n                                    }\n                                } else if (q.length === 3) {\n                                    // check whether function or regex\n                                    if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n                                        // call function (usually string mapper)\n                                        this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n                                    } else {\n                                        // sanitize match using given regex\n                                        this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n                                    }\n                                } else if (q.length === 4) {\n                                        this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n                                }\n                            } else {\n                                this[q] = match ? match : undefined;\n                            }\n                        }\n                    }\n                }\n                i += 2;\n            }\n        },\n\n        strMapper = function (str, map) {\n\n            for (var i in map) {\n                // check if current value is array\n                if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n                    for (var j = 0; j < map[i].length; j++) {\n                        if (has(map[i][j], str)) {\n                            return (i === UNKNOWN) ? undefined : i;\n                        }\n                    }\n                } else if (has(map[i], str)) {\n                    return (i === UNKNOWN) ? undefined : i;\n                }\n            }\n            return str;\n    };\n\n    ///////////////\n    // String map\n    //////////////\n\n    // Safari < 3.0\n    var oldSafariMap = {\n            '1.0'   : '/8',\n            '1.2'   : '/1',\n            '1.3'   : '/3',\n            '2.0'   : '/412',\n            '2.0.2' : '/416',\n            '2.0.3' : '/417',\n            '2.0.4' : '/419',\n            '?'     : '/'\n        },\n        windowsVersionMap = {\n            'ME'        : '4.90',\n            'NT 3.11'   : 'NT3.51',\n            'NT 4.0'    : 'NT4.0',\n            '2000'      : 'NT 5.0',\n            'XP'        : ['NT 5.1', 'NT 5.2'],\n            'Vista'     : 'NT 6.0',\n            '7'         : 'NT 6.1',\n            '8'         : 'NT 6.2',\n            '8.1'       : 'NT 6.3',\n            '10'        : ['NT 6.4', 'NT 10.0'],\n            'RT'        : 'ARM'\n    };\n\n    //////////////\n    // Regex map\n    /////////////\n\n    var regexes = {\n\n        browser : [[\n\n            /\\b(?:crmo|crios)\\/([\\w\\.]+)/i                                      // Chrome for Android/iOS\n            ], [VERSION, [NAME, 'Chrome']], [\n            /edg(?:e|ios|a)?\\/([\\w\\.]+)/i                                       // Microsoft Edge\n            ], [VERSION, [NAME, 'Edge']], [\n\n            // Presto based\n            /(opera mini)\\/([-\\w\\.]+)/i,                                        // Opera Mini\n            /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,                 // Opera Mobi/Tablet\n            /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i                           // Opera\n            ], [NAME, VERSION], [\n            /opios[\\/ ]+([\\w\\.]+)/i                                             // Opera mini on iphone >= 8.0\n            ], [VERSION, [NAME, OPERA+' Mini']], [\n            /\\bopr\\/([\\w\\.]+)/i                                                 // Opera Webkit\n            ], [VERSION, [NAME, OPERA]], [\n\n            // Mixed\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i,      // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n            // Trident based\n            /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i,               // Avant/IEMobile/SlimBrowser\n            /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i,                                  // Baidu Browser\n            /(?:ms|\\()(ie) ([\\w\\.]+)/i,                                         // Internet Explorer\n\n            // Webkit/KHTML based                                               // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n            /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n                                                                                // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n            /(heytap|ovi)browser\\/([\\d\\.]+)/i,                                  // Heytap/Ovi\n            /(weibo)__([\\d\\.]+)/i                                               // Weibo\n            ], [NAME, VERSION], [\n            /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i                 // UCBrowser\n            ], [VERSION, [NAME, 'UC'+BROWSER]], [\n            /microm.+\\bqbcore\\/([\\w\\.]+)/i,                                     // WeChat Desktop for Windows Built-in Browser\n            /\\bqbcore\\/([\\w\\.]+).+microm/i\n            ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n            /micromessenger\\/([\\w\\.]+)/i                                        // WeChat\n            ], [VERSION, [NAME, 'WeChat']], [\n            /konqueror\\/([\\w\\.]+)/i                                             // Konqueror\n            ], [VERSION, [NAME, 'Konqueror']], [\n            /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i                       // IE11\n            ], [VERSION, [NAME, 'IE']], [\n            /ya(?:search)?browser\\/([\\w\\.]+)/i                                  // Yandex\n            ], [VERSION, [NAME, 'Yandex']], [\n            /(avast|avg)\\/([\\w\\.]+)/i                                           // Avast/AVG Secure Browser\n            ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n            /\\bfocus\\/([\\w\\.]+)/i                                               // Firefox Focus\n            ], [VERSION, [NAME, FIREFOX+' Focus']], [\n            /\\bopt\\/([\\w\\.]+)/i                                                 // Opera Touch\n            ], [VERSION, [NAME, OPERA+' Touch']], [\n            /coc_coc\\w+\\/([\\w\\.]+)/i                                            // Coc Coc Browser\n            ], [VERSION, [NAME, 'Coc Coc']], [\n            /dolfin\\/([\\w\\.]+)/i                                                // Dolphin\n            ], [VERSION, [NAME, 'Dolphin']], [\n            /coast\\/([\\w\\.]+)/i                                                 // Opera Coast\n            ], [VERSION, [NAME, OPERA+' Coast']], [\n            /miuibrowser\\/([\\w\\.]+)/i                                           // MIUI Browser\n            ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n            /fxios\\/([-\\w\\.]+)/i                                                // Firefox for iOS\n            ], [VERSION, [NAME, FIREFOX]], [\n            /\\bqihu|(qi?ho?o?|360)browser/i                                     // 360\n            ], [[NAME, '360 '+BROWSER]], [\n            /(oculus|samsung|sailfish|huawei)browser\\/([\\w\\.]+)/i\n            ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [                      // Oculus/Samsung/Sailfish/Huawei Browser\n            /(comodo_dragon)\\/([\\w\\.]+)/i                                       // Comodo Dragon\n            ], [[NAME, /_/g, ' '], VERSION], [\n            /(electron)\\/([\\w\\.]+) safari/i,                                    // Electron-based App\n            /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,                   // Tesla\n            /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i            // QQBrowser/Baidu App/2345 Browser\n            ], [NAME, VERSION], [\n            /(metasr)[\\/ ]?([\\w\\.]+)/i,                                         // SouGouBrowser\n            /(lbbrowser)/i,                                                     // LieBao Browser\n            /\\[(linkedin)app\\]/i                                                // LinkedIn App for iOS & Android\n            ], [NAME], [\n\n            // WebView\n            /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i       // Facebook App for iOS & Android\n            ], [[NAME, FACEBOOK], VERSION], [\n            /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i,                             // Kakao App\n            /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i,                                  // Naver InApp\n            /safari (line)\\/([\\w\\.]+)/i,                                        // Line App for iOS\n            /\\b(line)\\/([\\w\\.]+)\\/iab/i,                                        // Line App for Android\n            /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i                              // Chromium/Instagram\n            ], [NAME, VERSION], [\n            /\\bgsa\\/([\\w\\.]+) .*safari\\//i                                      // Google Search Appliance on iOS\n            ], [VERSION, [NAME, 'GSA']], [\n            /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i                        // TikTok\n            ], [VERSION, [NAME, 'TikTok']], [\n\n            /headlesschrome(?:\\/([\\w\\.]+)| )/i                                  // Chrome Headless\n            ], [VERSION, [NAME, CHROME+' Headless']], [\n\n            / wv\\).+(chrome)\\/([\\w\\.]+)/i                                       // Chrome WebView\n            ], [[NAME, CHROME+' WebView'], VERSION], [\n\n            /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i           // Android Browser\n            ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n            /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i       // Chrome/OmniWeb/Arora/Tizen/Nokia\n            ], [NAME, VERSION], [\n\n            /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i                      // Mobile Safari\n            ], [VERSION, [NAME, 'Mobile Safari']], [\n            /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i                // Safari & Safari Mobile\n            ], [VERSION, NAME], [\n            /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i                      // Safari < 3.0\n            ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n            /(webkit|khtml)\\/([\\w\\.]+)/i\n            ], [NAME, VERSION], [\n\n            // Gecko based\n            /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i                              // Netscape\n            ], [[NAME, 'Netscape'], VERSION], [\n            /mobile vr; rv:([\\w\\.]+)\\).+firefox/i                               // Firefox Reality\n            ], [VERSION, [NAME, FIREFOX+' Reality']], [\n            /ekiohf.+(flow)\\/([\\w\\.]+)/i,                                       // Flow\n            /(swiftfox)/i,                                                      // Swiftfox\n            /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n                                                                                // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n            /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n                                                                                // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n            /(firefox)\\/([\\w\\.]+)/i,                                            // Other Firefox-based\n            /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,                         // Mozilla\n\n            // Other\n            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n                                                                                // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n            /(links) \\(([\\w\\.]+)/i,                                             // Links\n            /panasonic;(viera)/i                                                // Panasonic Viera\n            ], [NAME, VERSION], [\n            \n            /(cobalt)\\/([\\w\\.]+)/i                                              // Cobalt\n            ], [NAME, [VERSION, /master.|lts./, \"\"]]\n        ],\n\n        cpu : [[\n\n            /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i                     // AMD64 (x64)\n            ], [[ARCHITECTURE, 'amd64']], [\n\n            /(ia32(?=;))/i                                                      // IA32 (quicktime)\n            ], [[ARCHITECTURE, lowerize]], [\n\n            /((?:i[346]|x)86)[;\\)]/i                                            // IA32 (x86)\n            ], [[ARCHITECTURE, 'ia32']], [\n\n            /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i                                 // ARM64\n            ], [[ARCHITECTURE, 'arm64']], [\n\n            /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i                                   // ARMHF\n            ], [[ARCHITECTURE, 'armhf']], [\n\n            // PocketPC mistakenly identified as PowerPC\n            /windows (ce|mobile); ppc;/i\n            ], [[ARCHITECTURE, 'arm']], [\n\n            /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i                            // PowerPC\n            ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n            /(sun4\\w)[;\\)]/i                                                    // SPARC\n            ], [[ARCHITECTURE, 'sparc']], [\n\n            /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n                                                                                // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n            ], [[ARCHITECTURE, lowerize]]\n        ],\n\n        device : [[\n\n            //////////////////////////\n            // MOBILES & TABLETS\n            /////////////////////////\n\n            // Samsung\n            /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n            /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n            /samsung[- ]([-\\w]+)/i,\n            /sec-(sgh\\w+)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n            // Apple\n            /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i                          // iPod/iPhone\n            ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n            /\\((ipad);[-\\w\\),; ]+apple/i,                                       // iPad\n            /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n            /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n            ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n            /(macintosh);/i\n            ], [MODEL, [VENDOR, APPLE]], [\n\n            // Sharp\n            /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n            ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n            // Huawei\n            /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n            /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n            /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n            // Xiaomi\n            /\\b(poco[\\w ]+)(?: bui|\\))/i,                                       // Xiaomi POCO\n            /\\b; (\\w+) build\\/hm\\1/i,                                           // Xiaomi Hongmi 'numeric' models\n            /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,                             // Xiaomi Hongmi\n            /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,                   // Xiaomi Redmi\n            /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n            ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n            /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i                        // Mi Pad tablets\n            ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n            // OPPO\n            /; (\\w+) bui.+ oppo/i,\n            /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n            ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n            // Vivo\n            /vivo (\\w+)(?: bui|\\))/i,\n            /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n            ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n            // Realme\n            /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n            ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n            // Motorola\n            /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n            /\\bmot(?:orola)?[- ](\\w*)/i,\n            /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n            /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n            // LG\n            /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n            ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n            /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n            /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n            /\\blg-?([\\d\\w]+) bui/i\n            ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n            // Lenovo\n            /(ideatab[-\\w ]+)/i,\n            /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n            ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n            // Nokia\n            /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n            /nokia[-_ ]?([-\\w\\.]*)/i\n            ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n            // Google\n            /(pixel c)\\b/i                                                      // Google Pixel C\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n            /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i                         // Google Pixel\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n            // Sony\n            /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n            ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n            /sony tablet [ps]/i,\n            /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n            ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n            // OnePlus\n            / (kb2005|in20[12]5|be20[12][59])\\b/i,\n            /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n            ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n            // Amazon\n            /(alexa)webm/i,\n            /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i,                             // Kindle Fire without Silk / Echo Show\n            /(kf[a-z]+)( bui|\\)).+silk\\//i                                      // Kindle Fire HD\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n            /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i                     // Fire Phone\n            ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n            // BlackBerry\n            /(playbook);[-\\w\\),; ]+(rim)/i                                      // BlackBerry PlayBook\n            ], [MODEL, VENDOR, [TYPE, TABLET]], [\n            /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n            /\\(bb10; (\\w+)/i                                                    // BlackBerry 10\n            ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n            // Asus\n            /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n            / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n            // HTC\n            /(nexus 9)/i                                                        // HTC Nexus 9\n            ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n            /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,                         // HTC\n\n            // ZTE\n            /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n            /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i         // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n            ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n            // Acer\n            /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n            ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n            // Meizu\n            /droid.+; (m[1-5] note) bui/i,\n            /\\bmz-([-\\w]{2,})/i\n            ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n            // MIXED\n            /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n                                                                                // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n            /(hp) ([\\w ]+\\w)/i,                                                 // HP iPAQ\n            /(asus)-?(\\w+)/i,                                                   // Asus\n            /(microsoft); (lumia[\\w ]+)/i,                                      // Microsoft Lumia\n            /(lenovo)[-_ ]?([-\\w]+)/i,                                          // Lenovo\n            /(jolla)/i,                                                         // Jolla\n            /(oppo) ?([\\w ]+) bui/i                                             // OPPO\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n            /(kobo)\\s(ereader|touch)/i,                                         // Kobo\n            /(archos) (gamepad2?)/i,                                            // Archos\n            /(hp).+(touchpad(?!.+tablet)|tablet)/i,                             // HP TouchPad\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(nook)[\\w ]+build\\/(\\w+)/i,                                        // Nook\n            /(dell) (strea[kpr\\d ]*[\\dko])/i,                                   // Dell Streak\n            /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,                                  // Le Pan Tablets\n            /(trinity)[- ]*(t\\d{3}) bui/i,                                      // Trinity Tablets\n            /(gigaset)[- ]+(q\\w{1,9}) bui/i,                                    // Gigaset Tablets\n            /(vodafone) ([\\w ]+)(?:\\)| bui)/i                                   // Vodafone\n            ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n            /(surface duo)/i                                                    // Surface Duo\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n            /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i                                 // Fairphone\n            ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n            /(u304aa)/i                                                         // AT&T\n            ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n            /\\bsie-(\\w*)/i                                                      // Siemens\n            ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n            /\\b(rct\\w+) b/i                                                     // RCA Tablets\n            ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n            /\\b(venue[\\d ]{2,7}) b/i                                            // Dell Venue Tablets\n            ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n            /\\b(q(?:mv|ta)\\w+) b/i                                              // Verizon Tablet\n            ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n            /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i                       // Barnes & Noble Tablet\n            ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n            /\\b(tm\\d{3}\\w+) b/i\n            ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n            /\\b(k88) b/i                                                        // ZTE K Series Tablet\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n            /\\b(nx\\d{3}j) b/i                                                   // ZTE Nubia\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n            /\\b(gen\\d{3}) b.+49h/i                                              // Swiss GEN Mobile\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n            /\\b(zur\\d{3}) b/i                                                   // Swiss ZUR Tablet\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n            /\\b((zeki)?tb.*\\b) b/i                                              // Zeki Tablets\n            ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n            /\\b([yr]\\d{2}) b/i,\n            /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i                                // Dragon Touch Tablet\n            ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n            /\\b(ns-?\\w{0,9}) b/i                                                // Insignia Tablets\n            ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n            /\\b((nxa|next)-?\\w{0,9}) b/i                                        // NextBook Tablets\n            ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n            /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i                  // Voice Xtreme Phones\n            ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n            /\\b(lvtel\\-)?(v1[12]) b/i                                           // LvTel Phones\n            ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n            /\\b(ph-1) /i                                                        // Essential PH-1\n            ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n            /\\b(v(100md|700na|7011|917g).*\\b) b/i                               // Envizen Tablets\n            ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n            /\\b(trio[-\\w\\. ]+) b/i                                              // MachSpeed Tablets\n            ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n            /\\btu_(1491) b/i                                                    // Rotor Tablets\n            ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n            /(shield[\\w ]+) b/i                                                 // Nvidia Shield Tablets\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n            /(sprint) (\\w+)/i                                                   // Sprint Phones\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n            /(kin\\.[onetw]{3})/i                                                // Microsoft Kin\n            ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n            /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i             // Zebra\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n            /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n            ///////////////////\n            // SMARTTVS\n            ///////////////////\n\n            /smart-tv.+(samsung)/i                                              // Samsung\n            ], [VENDOR, [TYPE, SMARTTV]], [\n            /hbbtv.+maple;(\\d+)/i\n            ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n            /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i        // LG SmartTV\n            ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n            /(apple) ?tv/i                                                      // Apple TV\n            ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n            /crkey/i                                                            // Google Chromecast\n            ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n            /droid.+aft(\\w)( bui|\\))/i                                          // Fire TV\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n            /\\(dtv[\\);].+(aquos)/i,\n            /(aquos-tv[\\w ]+)\\)/i                                               // Sharp\n            ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n            /(bravia[\\w ]+)( bui|\\))/i                                              // Sony\n            ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n            /(mitv-\\w{5}) bui/i                                                 // Xiaomi\n            ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n            /Hbbtv.*(technisat) (.*);/i                                         // TechniSAT\n            ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n            /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,                          // Roku\n            /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i         // HbbTV devices\n            ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n            /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i                   // SmartTV from Unidentified Vendors\n            ], [[TYPE, SMARTTV]], [\n\n            ///////////////////\n            // CONSOLES\n            ///////////////////\n\n            /(ouya)/i,                                                          // Ouya\n            /(nintendo) ([wids3utch]+)/i                                        // Nintendo\n            ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n            /droid.+; (shield) bui/i                                            // Nvidia\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n            /(playstation [345portablevi]+)/i                                   // Playstation\n            ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n            /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i                                // Microsoft Xbox\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n            ///////////////////\n            // WEARABLES\n            ///////////////////\n\n            /((pebble))app/i                                                    // Pebble\n            ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n            /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i                              // Apple Watch\n            ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n            /droid.+; (glass) \\d/i                                              // Google Glass\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n            /droid.+; (wt63?0{2,3})\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n            /(quest( 2| pro)?)/i                                                // Oculus Quest\n            ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n            ///////////////////\n            // EMBEDDED\n            ///////////////////\n\n            /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i                              // Tesla\n            ], [VENDOR, [TYPE, EMBEDDED]], [\n            /(aeobc)\\b/i                                                        // Echo Dot\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n            ////////////////////\n            // MIXED (GENERIC)\n            ///////////////////\n\n            /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i           // Android Phones from Unidentified Vendors\n            ], [MODEL, [TYPE, MOBILE]], [\n            /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i       // Android Tablets from Unidentified Vendors\n            ], [MODEL, [TYPE, TABLET]], [\n            /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i                      // Unidentifiable Tablet\n            ], [[TYPE, TABLET]], [\n            /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i    // Unidentifiable Mobile\n            ], [[TYPE, MOBILE]], [\n            /(android[-\\w\\. ]{0,9});.+buil/i                                    // Generic Android Device\n            ], [MODEL, [VENDOR, 'Generic']]\n        ],\n\n        engine : [[\n\n            /windows.+ edge\\/([\\w\\.]+)/i                                       // EdgeHTML\n            ], [VERSION, [NAME, EDGE+'HTML']], [\n\n            /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i                         // Blink\n            ], [VERSION, [NAME, 'Blink']], [\n\n            /(presto)\\/([\\w\\.]+)/i,                                             // Presto\n            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n            /ekioh(flow)\\/([\\w\\.]+)/i,                                          // Flow\n            /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,                           // KHTML/Tasman/Links\n            /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i,                                      // iCab\n            /\\b(libweb)/i\n            ], [NAME, VERSION], [\n\n            /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i                                     // Gecko\n            ], [VERSION, NAME]\n        ],\n\n        os : [[\n\n            // Windows\n            /microsoft (windows) (vista|xp)/i                                   // Windows (iTunes)\n            ], [NAME, VERSION], [\n            /(windows) nt 6\\.2; (arm)/i,                                        // Windows RT\n            /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i,            // Windows Phone\n            /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n            ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n            /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n            ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n            // iOS/macOS\n            /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i,              // iOS\n            /ios;fbsv\\/([\\d\\.]+)/i,\n            /cfnetwork\\/.+darwin/i\n            ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n            /(mac os x) ?([\\w\\. ]*)/i,\n            /(macintosh|mac_powerpc\\b)(?!.+haiku)/i                             // Mac OS\n            ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n            // Mobile OSes\n            /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i                    // Android-x86/HarmonyOS\n            ], [VERSION, NAME], [                                               // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n            /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n            /(blackberry)\\w*\\/([\\w\\.]*)/i,                                      // Blackberry\n            /(tizen|kaios)[\\/ ]([\\w\\.]+)/i,                                     // Tizen/KaiOS\n            /\\((series40);/i                                                    // Series 40\n            ], [NAME, VERSION], [\n            /\\(bb(10);/i                                                        // BlackBerry 10\n            ], [VERSION, [NAME, BLACKBERRY]], [\n            /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i         // Symbian\n            ], [VERSION, [NAME, 'Symbian']], [\n            /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n            ], [VERSION, [NAME, FIREFOX+' OS']], [\n            /web0s;.+rt(tv)/i,\n            /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i                              // WebOS\n            ], [VERSION, [NAME, 'webOS']], [\n            /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i                              // watchOS\n            ], [VERSION, [NAME, 'watchOS']], [\n\n            // Google Chromecast\n            /crkey\\/([\\d\\.]+)/i                                                 // Google Chromecast\n            ], [VERSION, [NAME, CHROME+'cast']], [\n            /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i                                  // Chromium OS\n            ], [[NAME, CHROMIUM_OS], VERSION],[\n\n            // Smart TVs\n            /panasonic;(viera)/i,                                               // Panasonic Viera\n            /(netrange)mmh/i,                                                   // Netrange\n            /(nettv)\\/(\\d+\\.[\\w\\.]+)/i,                                         // NetTV\n\n            // Console\n            /(nintendo|playstation) ([wids345portablevuch]+)/i,                 // Nintendo/Playstation\n            /(xbox); +xbox ([^\\);]+)/i,                                         // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n            // Other\n            /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,                            // Joli/Palm\n            /(mint)[\\/\\(\\) ]?(\\w*)/i,                                           // Mint\n            /(mageia|vectorlinux)[; ]/i,                                        // Mageia/VectorLinux\n            /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n                                                                                // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n            /(hurd|linux) ?([\\w\\.]*)/i,                                         // Hurd/Linux\n            /(gnu) ?([\\w\\.]*)/i,                                                // GNU\n            /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n            /(haiku) (\\w+)/i                                                    // Haiku\n            ], [NAME, VERSION], [\n            /(sunos) ?([\\w\\.\\d]*)/i                                             // Solaris\n            ], [[NAME, 'Solaris'], VERSION], [\n            /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,                              // Solaris\n            /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,                                  // AIX\n            /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n            /(unix) ?([\\w\\.]*)/i                                                // UNIX\n            ], [NAME, VERSION]\n        ]\n    };\n\n    /////////////////\n    // Constructor\n    ////////////////\n\n    var UAParser = function (ua, extensions) {\n\n        if (typeof ua === OBJ_TYPE) {\n            extensions = ua;\n            ua = undefined;\n        }\n\n        if (!(this instanceof UAParser)) {\n            return new UAParser(ua, extensions).getResult();\n        }\n\n        var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n        var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n        var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n        var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n        var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n        this.getBrowser = function () {\n            var _browser = {};\n            _browser[NAME] = undefined;\n            _browser[VERSION] = undefined;\n            rgxMapper.call(_browser, _ua, _rgxmap.browser);\n            _browser[MAJOR] = majorize(_browser[VERSION]);\n            // Brave-specific detection\n            if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n                _browser[NAME] = 'Brave';\n            }\n            return _browser;\n        };\n        this.getCPU = function () {\n            var _cpu = {};\n            _cpu[ARCHITECTURE] = undefined;\n            rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n            return _cpu;\n        };\n        this.getDevice = function () {\n            var _device = {};\n            _device[VENDOR] = undefined;\n            _device[MODEL] = undefined;\n            _device[TYPE] = undefined;\n            rgxMapper.call(_device, _ua, _rgxmap.device);\n            if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n                _device[TYPE] = MOBILE;\n            }\n            // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n            if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n                _device[MODEL] = 'iPad';\n                _device[TYPE] = TABLET;\n            }\n            return _device;\n        };\n        this.getEngine = function () {\n            var _engine = {};\n            _engine[NAME] = undefined;\n            _engine[VERSION] = undefined;\n            rgxMapper.call(_engine, _ua, _rgxmap.engine);\n            return _engine;\n        };\n        this.getOS = function () {\n            var _os = {};\n            _os[NAME] = undefined;\n            _os[VERSION] = undefined;\n            rgxMapper.call(_os, _ua, _rgxmap.os);\n            if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {\n                _os[NAME] = _uach.platform  \n                                    .replace(/chrome os/i, CHROMIUM_OS)\n                                    .replace(/macos/i, MAC_OS);           // backward compatibility\n            }\n            return _os;\n        };\n        this.getResult = function () {\n            return {\n                ua      : this.getUA(),\n                browser : this.getBrowser(),\n                engine  : this.getEngine(),\n                os      : this.getOS(),\n                device  : this.getDevice(),\n                cpu     : this.getCPU()\n            };\n        };\n        this.getUA = function () {\n            return _ua;\n        };\n        this.setUA = function (ua) {\n            _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n            return this;\n        };\n        this.setUA(_ua);\n        return this;\n    };\n\n    UAParser.VERSION = LIBVERSION;\n    UAParser.BROWSER =  enumerize([NAME, VERSION, MAJOR]);\n    UAParser.CPU = enumerize([ARCHITECTURE]);\n    UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n    UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n    ///////////\n    // Export\n    //////////\n\n    // check js environment\n    if (typeof(exports) !== UNDEF_TYPE) {\n        // nodejs env\n        if (typeof module !== UNDEF_TYPE && module.exports) {\n            exports = module.exports = UAParser;\n        }\n        exports.UAParser = UAParser;\n    } else {\n        // requirejs env (optional)\n        if (typeof(define) === FUNC_TYPE && define.amd) {\n            define(function () {\n                return UAParser;\n            });\n        } else if (typeof window !== UNDEF_TYPE) {\n            // browser env\n            window.UAParser = UAParser;\n        }\n    }\n\n    // jQuery/Zepto specific (optional)\n    // Note:\n    //   In AMD env the global scope should be kept clean, but jQuery is an exception.\n    //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n    //   and we should catch that.\n    var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n    if ($ && !$.ua) {\n        var parser = new UAParser();\n        $.ua = parser.getResult();\n        $.ua.get = function () {\n            return parser.getUA();\n        };\n        $.ua.set = function (ua) {\n            parser.setUA(ua);\n            var result = parser.getResult();\n            for (var prop in result) {\n                $.ua[prop] = result[prop];\n            }\n        };\n    }\n\n})(typeof window === 'object' ? window : this);\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n    // find the complete implementation of crypto (msCrypto) on IE11.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || new Array(16);\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n\n  if (node == null || clockseq == null) {\n    var seedBytes = options.random || (options.rng || rng)();\n\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n    }\n\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n  var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n\n\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n  if (nsecs >= 10000) {\n    throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n  msecs += 12219292800000; // `time_low`\n\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff; // `time_mid`\n\n  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff; // `time_high_and_version`\n\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n  b[i++] = clockseq & 0xff; // `node`\n\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  var v;\n  var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n  arr[1] = v >>> 16 & 0xff;\n  arr[2] = v >>> 8 & 0xff;\n  arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n  arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n  arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n  arr[9] = v & 0xff; // Parse ........-....-....-....-############\n  // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n  arr[11] = v / 0x100000000 & 0xff;\n  arr[12] = v >>> 24 & 0xff;\n  arr[13] = v >>> 16 & 0xff;\n  arr[14] = v >>> 8 & 0xff;\n  arr[15] = v & 0xff;\n  return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n  str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n  var bytes = [];\n\n  for (var i = 0; i < str.length; ++i) {\n    bytes.push(str.charCodeAt(i));\n  }\n\n  return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n  function generateUUID(value, namespace, buf, offset) {\n    if (typeof value === 'string') {\n      value = stringToBytes(value);\n    }\n\n    if (typeof namespace === 'string') {\n      namespace = parse(namespace);\n    }\n\n    if (namespace.length !== 16) {\n      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    } // Compute hash of namespace and value, Per 4.3\n    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n    // hashfunc([...namespace, ... value])`\n\n\n    var bytes = new Uint8Array(16 + value.length);\n    bytes.set(namespace);\n    bytes.set(value, namespace.length);\n    bytes = hashfunc(bytes);\n    bytes[6] = bytes[6] & 0x0f | version;\n    bytes[8] = bytes[8] & 0x3f | 0x80;\n\n    if (buf) {\n      offset = offset || 0;\n\n      for (var i = 0; i < 16; ++i) {\n        buf[offset + i] = bytes[i];\n      }\n\n      return buf;\n    }\n\n    return stringify(bytes);\n  } // Function#name is not settable on some platforms (#270)\n\n\n  try {\n    generateUUID.name = name; // eslint-disable-next-line no-empty\n  } catch (err) {} // For CommonJS default export support\n\n\n  generateUUID.DNS = DNS;\n  generateUUID.URL = URL;\n  return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n  if (typeof bytes === 'string') {\n    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = new Uint8Array(msg.length);\n\n    for (var i = 0; i < msg.length; ++i) {\n      bytes[i] = msg.charCodeAt(i);\n    }\n  }\n\n  return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n  var output = [];\n  var length32 = input.length * 32;\n  var hexTab = '0123456789abcdef';\n\n  for (var i = 0; i < length32; i += 8) {\n    var x = input[i >> 5] >>> i % 32 & 0xff;\n    var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n    output.push(hex);\n  }\n\n  return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n  return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n  /* append padding */\n  x[len >> 5] |= 0x80 << len % 32;\n  x[getOutputLength(len) - 1] = len;\n  var a = 1732584193;\n  var b = -271733879;\n  var c = -1732584194;\n  var d = 271733878;\n\n  for (var i = 0; i < x.length; i += 16) {\n    var olda = a;\n    var oldb = b;\n    var oldc = c;\n    var oldd = d;\n    a = md5ff(a, b, c, d, x[i], 7, -680876936);\n    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n    b = md5gg(b, c, d, a, x[i], 20, -373897302);\n    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n    d = md5hh(d, a, b, c, x[i], 11, -358537222);\n    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n    a = md5ii(a, b, c, d, x[i], 6, -198630844);\n    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n    a = safeAdd(a, olda);\n    b = safeAdd(b, oldb);\n    c = safeAdd(c, oldc);\n    d = safeAdd(d, oldd);\n  }\n\n  return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n  if (input.length === 0) {\n    return [];\n  }\n\n  var length8 = input.length * 8;\n  var output = new Uint32Array(getOutputLength(length8));\n\n  for (var i = 0; i < length8; i += 8) {\n    output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n  }\n\n  return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n  var lsw = (x & 0xffff) + (y & 0xffff);\n  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n  return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n  return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n  return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n  return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n  return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n  return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  options = options || {};\n  var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (var i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n  switch (s) {\n    case 0:\n      return x & y ^ ~x & z;\n\n    case 1:\n      return x ^ y ^ z;\n\n    case 2:\n      return x & y ^ x & z ^ y & z;\n\n    case 3:\n      return x ^ y ^ z;\n  }\n}\n\nfunction ROTL(x, n) {\n  return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n  var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n  var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n  if (typeof bytes === 'string') {\n    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = [];\n\n    for (var i = 0; i < msg.length; ++i) {\n      bytes.push(msg.charCodeAt(i));\n    }\n  } else if (!Array.isArray(bytes)) {\n    // Convert Array-like to Array\n    bytes = Array.prototype.slice.call(bytes);\n  }\n\n  bytes.push(0x80);\n  var l = bytes.length / 4 + 2;\n  var N = Math.ceil(l / 16);\n  var M = new Array(N);\n\n  for (var _i = 0; _i < N; ++_i) {\n    var arr = new Uint32Array(16);\n\n    for (var j = 0; j < 16; ++j) {\n      arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n    }\n\n    M[_i] = arr;\n  }\n\n  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n  M[N - 1][14] = Math.floor(M[N - 1][14]);\n  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n  for (var _i2 = 0; _i2 < N; ++_i2) {\n    var W = new Uint32Array(80);\n\n    for (var t = 0; t < 16; ++t) {\n      W[t] = M[_i2][t];\n    }\n\n    for (var _t = 16; _t < 80; ++_t) {\n      W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n    }\n\n    var a = H[0];\n    var b = H[1];\n    var c = H[2];\n    var d = H[3];\n    var e = H[4];\n\n    for (var _t2 = 0; _t2 < 80; ++_t2) {\n      var s = Math.floor(_t2 / 20);\n      var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n      e = d;\n      d = c;\n      c = ROTL(b, 30) >>> 0;\n      b = a;\n      a = T;\n    }\n\n    H[0] = H[0] + a >>> 0;\n    H[1] = H[1] + b >>> 0;\n    H[2] = H[2] + c >>> 0;\n    H[3] = H[3] + d >>> 0;\n    H[4] = H[4] + e >>> 0;\n  }\n\n  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import \"../lib/stubs\";\n\nimport _Sparkle from \"./Sparkle\";\n\nconst Sparkle = new _Sparkle(window.Sparkle);\n\nwindow.Sparkle = Sparkle;\nSparkle._flushQueue();\n\nexport { Sparkle };\n"],"names":["window","__bloomberg__","eventRecorder","cmd","googletag","headertag","Spritz","SOURCEPOINT_HOST","SOURCEPOINT_ACCOUNT_ID","AUTHENTICATION_COOKIE","CONSENT_COOKIE_KEY","TCFAPI_VERSION","FUN_ID","PAD_ID","FOOTER_LABELS","ccpa","ja","en","gdpr","Stubs","PROPERTY_ID","KISA_PROPERTY_ID","v2","params","accountId","domain","kisaEnabled","CCPA","MSPS","GDPR_V2","getCookieValue","name","matches","document","cookie","match","getDomain","host","str","split","length","setCookieValue","value","days","d","Date","setTime","getTime","location","hostname","toUTCString","includes","substr","indexOf","reqAllowed","funAllowed","padAllowed","manageCookie","reqAllowedAsync","Promise","resolve","funAllowedAsync","padAllowedAsync","CmpClientScripts","assetHost","clientParams","stubParams","jsxs","Fragment","children","jsx","dangerouslySetInnerHTML","__html","src","crossOrigin","async","id","JSON","stringify","__classPrivateFieldGet","receiver","state","kind","f","TypeError","has","call","get","apis","getGPPSection","pingData","key","undefined","parsedSections","_CmpClient_instances","_CmpClient_loadV2GdprPrivacyManager","_CmpClient_onPrivacyManager","_CmpClient_handleGPPEventLister","_CmpClient_handleConsentString","_CmpClient_validateTcData","_CmpClient_fireBbgConsentReadyGTMEventOnce","_CmpClient_fireEREvt","_CmpClient_trackCmpError","_CmpClient_trackCmpEvents","CmpClient","constructor","language","add","this","set","managerId","_sp_","config","targetingParams","isKisa","loadPrivacyManagerModal","baseEndpoint","startTime","now","loaded","consentReadyEventFired","initialized","init","__tcfapi","gtag_enable_tcf_support","bind","addEventListener","console","error","addPrivacyManager","footerLink","warn","removeEventListener","listenerId","success","onGdprConsent","consents","Error","consentValues","req","fun","pad","consentedPurposes","legIntPurposes","forEach","purpose","_id","grant","Object","entries","grants","purposeGrants","consentString","values","join","log","onUSPSPing","ping","applicableSections","filter","e","info","signalStatus","gppSection","SaleOptOut","getCMPData","reject","tcData","success1","eventStatus","gdprApplies","iabConsentString","tcString","__gpp","event","success2","usPrivacyString","SaleOptOutNotice","MspaCoveredTransactions","gppListenerId","dataGPP","success3","success4","WeakMap","WeakSet","textContent","onclick","usnat","data","dataLayer","push","getEventRecorderClient","fireEvent","consent","navigator","sendBeacon","Blob","url","href","message","userAgent","timeElapsed","type","wasGtmDomEventPushed","find","wasGtmLoadEventPushed","didGoogletagLoadStart","Boolean","_loadStarted_","sourcepointCMPLoaded","gtmDom","gtmLoad","googletagLoadStart","$","safeAdd","x","y","lsw","md5cmn","q","a","b","s","t","num","cnt","md5ff","c","md5gg","md5hh","md5ii","binlMD5","len","i","olda","oldb","oldc","oldd","binl2rstr","input","output","length32","String","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","hexTab","charAt","str2rstrUTF8","unescape","encodeURIComponent","rawMD5","rstrMD5","rawHMACMD5","k","hash","bkey","ipad","opad","concat","rstrHMACMD5","md5","string","raw","module","exports","assign","target","arguments","source","converter","defaultAttributes","attributes","expires","replace","decodeURIComponent","escape","stringifiedAttributes","attributeName","write","create","cookies","jar","parts","slice","found","read","remove","withAttributes","withConverter","freeze","path","factory","Symbol","for","l","m","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","ref","__self","__source","g","h","defaultProps","$$typeof","props","_owner","current","r","u","v","w","z","iterator","B","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","C","D","E","context","refs","updater","F","G","isReactComponent","setState","forceUpdate","H","isPureReactComponent","I","Array","isArray","J","K","L","M","O","P","Q","toString","R","N","A","next","done","keys","S","T","_status","_result","then","default","U","V","transition","W","ReactCurrentDispatcher","ReactCurrentBatchConfig","Children","map","apply","count","toArray","only","Component","Profiler","PureComponent","StrictMode","Suspense","cloneElement","createContext","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","_context","createElement","createFactory","createRef","forwardRef","render","isValidElement","lazy","_payload","_init","memo","compare","startTransition","unstable_act","useCallback","useContext","useDebugValue","useDeferredValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useSyncExternalStore","useTransition","version","_scriptLoadPromise","whenReady","loadScriptDependency","opt","inject","catch","err","logError","destroy","FALL_BACK_AD_PAGE_IDS","CONSENT_TIMEOUT_PAGE_IDS","stub","adCodeDecoratorFunction","userInfo","initPending","isDecoupled","isFallbackAdEnabled","isConsentTimeoutEnabled","isTaglessAdEnabled","disabled","_initQueue","_targets","_destructibles","_performanceMonitor","_measure","_adDebugRegistry","_companionGroupCoordinator","_adMap","Map","GPT","html","getPrototypeOf","cb","showDebugInformationOnRender","printInstructions","disableTrigr","useCachedConsent","networkCode","breakpoints","adCodeDecorator","adBlockerShouldBeBlocked","pageTargeting","observerOptions","dvScriptUrl","doubleVerifyScriptUrl","adContextData","application","enableEventRecorder","excludeTargetingTypes","EventRecorderLoader","enabled","page","pageId","checkIfFallbackAdEnabled","checkIfConsentTimeoutEnabled","checkIfTaglessAdEnabled","ua","major","getBrowser","doubleVerifyTracking","adsServiceClient","watchlistProvider","WatchlistProvider","getTargetingFromAdsService","gpt","onSubscriberChange","subsInfo","setTargeting","resolveSubscriberInfo","gamTaglessAd","postMessages","viewability","visibility","renderer","URL","searchParams","bombora","consentData","setFallbackFlag","initPageTargeting","blockTheAdBlocker","_flushInitQueue","options","finally","addPageTargeting","_setGptTargeting","setPersonalization","uid","exp_pref","newTargeting","us_privacy","gdpr_consent","addTargeting","targeting","createAd","adOptions","_enqueue","containerId","adCode","dimensions","strategy","viewportOffset","targetingModifiers","isInterstitial","shadowHostElement","msg","performanceId","position","createAdMetric","createMetric","start","listOfFunctions","initialValue","reduce","oldValue","newFunction","composeFunctions","urlModifier","subscriber","getSubscriberInfo","adRenderMetric","adLoadMetric","ad","setViewportOffset","setInterstitialFlag","notifyAdCreated","getId","height","setHeight","makeSetIframeHeightListenerFor","width","setDimensions","makeSetIframeDimensionsListenerFor","EVENTS","ON_BEFORE_RENDER","once","ON_RENDER","end","toJSON","ON_EMPTY","ON_LOAD","setAd","getAd","createInterstitialAd","defineProperties","disableCompanionAdBackfilling","setRefreshUnfilledSlots","enableVideoAds","getCompanionGroup","companionId","findOrCreate","clearAllCompanionChildren","clearAllChildren","refresh","ads","refreshAds","getTargeting","getAndIncrementRefreshAttempt","adRefreshMetric","metrics","clear","destructible","shift","showDebugInformation","updateCorrelator","resetAdContext","newAdContextData","resetTargetings","_flushQueue","logPerformanceInfo","logIndividualAdPerformance","VISIT_MULTIPLIER","MESSAGE_DURATION","AD_BLOCKER_NAME_KEY","AD_BLOCKER_INCREMENTED_KEY","AD_BLOCKER_MULTIPLIER_KEY","AD_BLOCKER_DURATION_KEY","AD_BLOCKER_VISITS_KEY","AD_BLOCKER_MESSAGE_KEY","AD_BLOCKER_COOKIE_EXPIRATION","CONTAINER_ID","MESSAGE_ID","CONTINUE_LINK_ID","TIMER_ID","DEFAULT_LOCAL_STORAGE_OBJECT","getBlockerMessage","fireGAEvent","eventCategory","eventAction","eventLabel","clearAdBlockerData","_storage","local","Storage","createLocalStorage","session","createSessionStorage","createCookieStorage","userHasStorage","sessionStorage","localStorage","cookieStorage","adBlockerObject","handleAdBlocker","setAdBlockerData","storage","visitsFromCookie","visits","parseInt","multiplier","getMultiplier","visitNumber","blockerShouldDisplay","renderMessage","getMessage","duration","getDuration","container","renderModal","body","appendChild","getElementById","focus","onLoad","countdownAndReset","interval","timer","continueButton","timerDiv","clickListener","setAttribute","setInterval","clearInterval","style","color","cursor","fakeAd","fakeAdClasses","fakeAdStyles","insertFakeAdInDom","fetch","method","mode","result","hasAdBlocker","withoutAdBlocker","javascriptTest","getComputedStyle","setTimeout","fakeAdElement","getElementsByClassName","fakeAdTemp","getPropertyValue","checkForAdBlockerBehavior","LOGO_STYLES","MESSAGE_DIV_STYLES","CONTAINER_STYLES","ELEMENT_STYLES","CONTINUE_DISPLAY_STYLES","TIMER_STYLES","FAKE_AD_STYLES","FAKE_AD_CLASSES","TEST_DIV_CLASSES","TEST_DIV_STYLES","BLOCKER_FOOTER_STYLES","LOGO_ID","_document","element","logo","logoText","createTextNode","messageDiv","messageText","continueDisplay","continueDisplayText","timerText","footerDiv","logoStyles","messageDivStyles","containerStyles","elementStyles","continueDisplayStyles","timerStyles","footerStyles","preventDefault","display","click","innerHTML","querySelector","focusableElements","firstElement","lastElement","shiftKey","activeElement","testDivStyles","testDivClasses","AdsServiceClient","useCachedTargeting","_adContextData","_contentTargetingTimeout","_userInfo","_useCachedTargeting","_isDecoupled","_pageId","_excludeTargetingTypes","_disableTrigr","isArticleDecoupled","_contentTargetingProvider","ContentTargetingProvider","_getContentTargetingTypes","_userContentTargetingProvider","UserContentTargetingProvider","_getUserContentTargetingTypes","_userGlobalTargetingProvider","UserGlobalTargetingProvider","_getUserGlobalTargetingTypes","initFirstAdHandler","resolver","promise","_firstAd","waitForAd","setFirstAd","waitForFirstAd","isPersonalizedTargetingEnabled","UserContentTargetingType","PERSONALIZATION","UserGlobalTargetingType","isAdserviceDVTargetingEnabled","DV","TRIGR","TARGETING_TYPES","IVT","DV_BRANDSAFETY","CONTENT","_getTargetingUtil","promises","allSettled","results","obj","status","getTargetingFromAdsServiceSync","getTargetingFromAdsServiceAsync","getTargetingsForAdSync","getTargetingsForAdAsync","slug","adPageType","ContentTargetingType","targetingTypes","timeout","targetingUrl","types","makeCachedGet","timeoutInMs","buildUrl","prevUrl","tickerId","personId","suid","cmpCookie","sessionId","getSessionId","slugParam","tickerIdParam","getUnitName","slotId","Bombora","super","_gpt","loadBombora","addBomboraTargeting","_bmb","setupStub","getUrl","o","tmpSegment","industry_id","revenue_id","size_id","functional_area_id","professional_group_id","seniority_id","decision_maker_id","install_data_id","topic_id","interest_group_id","segment","b2b_interest_cluster_id","MESSAGE_EVENT","_listeners","_contextifyCallbacks","_delegateEvents","_dispatchEventListeners","windowId","destructureEvent","callback","_undelegateEvents","listenersForId","item","IX_BIDDABLE_SIZES","SLOT_RENDER_EVENT","SLOT_ONLOAD_EVENT","SLOT_RESPONSE_RECEIVED_EVENT","SLOT_REQUESTED","formatTimestamp","ts","Math","floor","LIST_STYLE","targetingListUtil","getTargetingKeys","targetingListString","AdDebug","show","adElement","getElement","adWasRemovedFromDom","isDisplayable","targetingList","slotTargeting","slot","getSlot","getConfig","slotTargetingList","pageTargetingList","content","empty","creativeId","lineItemId","timeToRequest","timeToRespond","timeToRender","sizes","overlay","getSlotRenderedEvent","getRequestTime","getRenderTime","getSizes","isEmpty","getCreativeId","getLineItemId","_registeredAds","_startTime","currentTime","_debugOnRenderMode","_adMetrics","adMetrics","onRender","onEmpty","resolveMetrics","clearOverlays","DoubleVerifyTracking","_dvScriptUrl","loadScript","doubleVerifyInitScript","callOnDvTagReady","onDvtagReady","dvtagReadyPromise","dvtag","timestamp","queueAdRequest","performanceMonitor","measure","initClient","scriptUrl","appName","AD_ELEMENT_CLASS","Ad","unitName","_refreshAttemptCounter","_refreshCount","_viewportOffset","_renderTime","_slotRenderedEvent","_isInterstitial","_triggeredRenderedEventArgument","_triggeredEmptyEventArgument","_isMobile","_requestTime","_companionGroup","_shadowHostElement","tickers","_unitName","_dimensions","_targeting","_slot","_containerId","_viewability","_sizes","_setId","_renderContainer","setClassName","idComponents","shadowRoot","insertBefore","firstChild","getDomId","getSlotElementId","incrementRefreshCount","getRefreshCount","pmid","getElementTopPosition","el","getBoundingClientRect","top","documentElement","scrollTop","Infinity","getIframe","foundIframe","from","getElementsByTagName","offsetParent","hasAttribute","getPerformanceId","hasSlot","iframe","className","classList","some","size","setSlot","getViewportOffset","setRequestTime","requestTime","setSlotRenderedEvent","handleTaglessRenderEvent","removeAttribute","dispatchEvent","handleSlotRenderEvent","useEmptyCallbacks","assertEmpty","first","second","isOneByOne","campaignId","advertiserId","getConsentFlags","refreshCount","handleSlotOnLoadEvent","taglessIframe","dataLoaded","getAttributeNode","handleSlotResponseReceivedEvent","_resetContainer","getContainerId","getShadowHostElement","flag","setCompanionGroup","companionGroup","CustomEvent","detail","isCompanionChild","lastIndexOf","isMobile","GPT_SRC","SERVICES","pubads","companionAds","enableLazyLoad","_cachedSlots","_renderedAds","_googletag","services","_networkCode","_tagLoadedToFirstAdMetric","_doubleVerifyTracking","_adsServiceClient","_watchlistProvider","_enableLazyLoad","_listenToSlotRenderEvents","_collapseEmptyDivs","enqueue","setConfig","lazyLoad","fetchMarginPercent","renderMarginPercent","mobileScaling","loadMetric","_handleSlotRenderEvent","_handleSlotLoadEvent","_handleSlotResponseReceivedEvent","_handleSlotRequestedEvent","_defineSlot","defineOutOfPageSlot","defineSlot","withoutEmptyValues","setImpressionIdTargeting","setRefreshTargeting","service","addService","_display","_getRenderedAd","domId","gservice","_refreshSlots","slots","changeCorrelator","_renderCachedSlot","isRerequest","_storeRenderedAd","collapseDiv","sanitizedSessionId","setPublisherProvidedId","setPrivacySettings","nonPersonalizedAds","slotDependencies","adservicePromise","targetings","enableServices","renderInstant","enableSingleRequest","videoAds","_getPageTargeting","getEnableLazyLoad","destroySlots","iid","depth","_lineItemId","_creativeId","_isEmpty","_size","_adId","_adCode","_adRequestStartTime","getAdId","getAdCode","getSize","getAttribute","CLIPPING_SIZES","doc","contentDocument","querySelectorAll","ins","verticalAlign","setProperty","Set","wouldRefresh","_parent","_children","members","parent","addParent","addChild","clearChildren","clearParent","_all","clearAll","clearAllParents","ungroupedAds","groupParents","entirelyViewableGroups","refreshableAds","parentAd","parentAdCompanionGroup","pendingAds","everyViewable","gamTagless","fallbackAd","showFallbackAds","_gamTagless","_isTaglessAdEnabled","_services","_fallbackAd","_showFallbackAds","defaultObserverOptions","threshold","renderObserverOptions","refreshObserverOptions","_gamTaglessAd","_renderAdObserver","_renderCallback","_refreshAdObserver","_refreshCallback","stop","startObserving","strategies","_getStrategy","_strategies","_visibility","_refreshStrategies","_initStrategies","isVisible","_start","_stop","ON_VISIBLE","ON_INVISIBLE","always","parameters","companion","viewable","refreshStrategies","renderingStrategy","_areAdsToRefresh","adsToRefresh","refreshStrategy","USER_INFO_EVENT","REG_USER_SIGNED_IN_EVENT","SUBS_STATUS_LOCAL_STORAGE_KEY","SUBSCRIBER_TYPE","BBG_SUBSCRIBER","TERMINAL_SUBSCRIBER","NON_SUBSCRIBER","UNKNOWN","_publishedSubsInfo","_subscriberListeners","_regDataReady","getSessionIdSync","getUserInfo","_calculateSubsInfo","client","isTerminalSubscriber","isBBGSubscriber","_readSubsCache","cached","getObj","_setSubsInfoFromClient","_isRegDataReady","regUIClient","_publishSubsInfo","setObj","_regUserInfo","_listenForRegData","_regDataHandler","derived","getCachedSubscriberInfo","_setUserInfoWithResolve","_setUserInfo","dimensionMap","ORIENTATION","SQUARE","HORIZONTAL","COMPASS_AD_URL","FALLBACK_ADS_POOL","blt7efc30dc0e168fff","blt371120ef439bdeb8","styles","horizontal","containerSize","iframeStyle","square","innerWidth","FallbackAd","orientation","baseUrl","fallbackAdKey","_pickFallbackAds","array","random","_getOrientation","sizeString","dimension","decorateAd","currentStyle","getAdSrc","urlParams","creativeID","lineID","orderID","adUnit","URLSearchParams","newEvent","GAM_TAGLESS_API_ADS","AD_SIZES","MOBILE_BREAK_POINT","SCREEN_TYPE","mobile","desktop","TaglessAd","googleIframeContainer","adSizes","targeting_values","iuParts","prev_iu_szs","iu_parts","containerById","newGoogleIframeContainer","replaceChild","title","_isRunning","_adsMap","_observer","IntersectionObserver","observer","entry","isIntersecting","delete","unobserve","root","disconnect","observe","REGEX_CHECK_FOR_COJP","getViewportDimensions","innerHeight","clientHeight","clientWidth","localStorageExists","sessionStorageExists","cookiesAreEnabled","cookieEnabled","isCOJP","test","isBrowser","performance","getElementStyleAttribute","attribute","_eventQueue","eventType","eventHandler","_autoRemoveHandler","eventHandlerPosition","_getEventTypeQueue","_removeEventHandler","details","eventTypeQueue","eventIndex","splice","args","OVERLAY_STYLE","padding","left","background","border","boxSizing","fontFamily","fontSize","overflow","textAlign","webkitFontSmoothing","RED_STYLING","RESET_STYLING","OVERLAY_CLASS","overlayElement","elementStyling","overlays","parentNode","removeChild","ServerStorage","ObjectStorage","parse","BrowserLocalStorage","namespace","_namespace","getItem","setItem","removeItem","BrowserSessionStorage","BrowserCookieStorage","_duration","cachedConsentData","storageKey","getAndCacheConsentPromise","race","getAndCacheConsent","timeoutSuccess","CONSENT_TIMEOUT","cacheRes","CONSENT_TIMEOUT_RESPONSE","fn","contents","flags","object","methodNames","getOwnPropertyNames","sort","monitor","metric","mark","NREUM","newrelic","_composeName","sessionStartTime","action","addPageAction","endTime","traceObject","addToTrace","PARSE_MARK_NAME","PerformanceMonitor","prefix","measureName","metricOptions","reporter","addReporter","sparkleMeasures","getEntriesByType","meta","round","table","pattern","Command","Description","reporters","rep","nr","noticeError","TAGLESS_AD_PAGE_IDS","AD_SERVICE_DV_TARGETING_PAGE_IDS","isInteractivePage","isQuoteDecoupled","fallback","_","response","ok","json","getFn","pendingPromise","withTiming","defaultRes","localStorageKey","res","cachedTargetingData","search","qsTargeting","pathname","number","ceil","_invertedBreakpoints","_currentBreakpoint","windowWidth","invertedBreakpoints","breakpointWidth","smallerBreakpoint","largerBreakpoint","_isViewable","acceptableOffset","bottom","right","viewportTop","viewportBottom","verticallyViewable","horizontallyViewable","viewportDimensions","isViewable","every","isAdDimensions","currentBreakpoint","BROWSER_PREFIXES","webkitHidden","mozHidden","msHidden","hidden","FALLBACK_VISIBLE_EVENT","FALLBACK_INVISIBLE_EVENT","Visibility","_hiddenAttribute","_visibleChangeEvent","_useBrowserPrefixedAttributes","_subscribeToGlobalEvents","_visibleEventListener","_invisibleEventListener","_unsubscribeFromGlobalEvents","_isVisibilityChange","view","attr","statusText","clone","text","watchlistServiceUrl","getUserWatchlists","bconnectId","userToken","userKey","headers","credentials","DEFAULT_WATCHLIST_TARGET","watchlist","userId","watchlistClient","watchlists","getTargetingInner","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","enumerize","arr","enums","toUpperCase","str1","str2","lowerize","toLowerCase","trim","substring","rgxMapper","arrays","j","regex","exec","strMapper","windowsVersionMap","regexes","browser","cpu","device","engine","EDGE","os","UAParser","extensions","getResult","_navigator","_ua","_uach","userAgentData","_rgxmap","mergedRegexes","extend","_isSelfNav","_browser","brave","isBrave","getCPU","_cpu","getDevice","_device","standalone","maxTouchPoints","getEngine","_engine","getOS","_os","platform","getUA","setUA","CPU","DEVICE","ENGINE","OS","jQuery","Zepto","parser","prop","getRandomValues","rnds8","Uint8Array","rng","crypto","msCrypto","uuid","byteToHex","_nodeId","_clockseq","offset","_lastMSecs","_lastNSecs","buf","node","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","hashfunc","generateUUID","bytes","stringToBytes","DNS","getOutputLength","inputLength8","v35","hex","md5ToHexEncodedArray","wordsToMd5","Uint32Array","bytesToWords","rnds","ROTL","_i","pow","_i2","_t","_t2","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","getter","__esModule","definition","defineProperty","enumerable","toStringTag","Sparkle"],"sourceRoot":""}