{"version":3,"sources":["node_modules/uuid/lib/rng-browser.js","node_modules/uuid/lib/bytesToUuid.js","node_modules/uuid/v1.js","node_modules/uuid/v4.js","node_modules/uuid/index.js","node_modules/crypt/crypt.js","node_modules/charenc/charenc.js","node_modules/sha1/sha1.js","node_modules/@angular/common/locales/global/nb.js","node_modules/@ngrx/store-devtools/fesm2022/ngrx-store-devtools.mjs","src/app/maintenance/maintenance.component.ts","src/app/maintenance/maintenance.component.html","src/app/app-routing.module.ts","src/devextreme.license.ts","src/app/common/enums/one-trust-consent-group.enum.ts","node_modules/@snowplow/tracker-core/dist/index.module.js","node_modules/@snowplow/browser-tracker-core/dist/index.module.js","node_modules/@snowplow/browser-tracker/dist/index.module.js","node_modules/@snowplow/browser-plugin-performance-timing/dist/index.module.js","node_modules/@snowplow/browser-plugin-form-tracking/dist/index.module.js","src/app/core/models/snowplow.models.ts","src/app/core/services/snowplow.service.ts","src/app/common/utils/array.utils.ts","src/app/common/services/one-trust.service.ts","src/app/common/components/one-trust/one-trust.component.ts","src/app/app.component.ts","src/app/app.component.html","src/app/core/core.module.ts","src/app/core/services/app-config-service.ts","src/app/localization.ts","src/app/app.module.ts","src/main.ts"],"sourcesContent":["// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = typeof crypto != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto);\nif (getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n  module.exports = function whatwgRNG() {\n    getRandomValues(rnds8);\n    return rnds8;\n  };\n} else {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n  module.exports = function mathRNG() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n    return rnds;\n  };\n}","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');\n}\nmodule.exports = bytesToUuid;","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`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;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // 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  if (node == null || clockseq == null) {\n    var seedBytes = rng();\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    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\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  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\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;\n\n  // `time_mid`\n  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n  return buf ? buf : bytesToUuid(b);\n}\nmodule.exports = v1;","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n  if (typeof options == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n  return buf || bytesToUuid(rnds);\n}\nmodule.exports = v4;","var v1 = require('./v1');\nvar v4 = require('./v4');\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\nmodule.exports = uuid;","(function () {\n  var base64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n    crypt = {\n      // Bit-wise rotation left\n      rotl: function (n, b) {\n        return n << b | n >>> 32 - b;\n      },\n      // Bit-wise rotation right\n      rotr: function (n, b) {\n        return n << 32 - b | n >>> b;\n      },\n      // Swap big-endian to little-endian and vice versa\n      endian: function (n) {\n        // If number given, swap endian\n        if (n.constructor == Number) {\n          return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n        }\n\n        // Else, assume array and swap all items\n        for (var i = 0; i < n.length; i++) n[i] = crypt.endian(n[i]);\n        return n;\n      },\n      // Generate an array of any length of random bytes\n      randomBytes: function (n) {\n        for (var bytes = []; n > 0; n--) bytes.push(Math.floor(Math.random() * 256));\n        return bytes;\n      },\n      // Convert a byte array to big-endian 32-bit words\n      bytesToWords: function (bytes) {\n        for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8) words[b >>> 5] |= bytes[i] << 24 - b % 32;\n        return words;\n      },\n      // Convert big-endian 32-bit words to a byte array\n      wordsToBytes: function (words) {\n        for (var bytes = [], b = 0; b < words.length * 32; b += 8) bytes.push(words[b >>> 5] >>> 24 - b % 32 & 0xFF);\n        return bytes;\n      },\n      // Convert a byte array to a hex string\n      bytesToHex: function (bytes) {\n        for (var hex = [], i = 0; i < bytes.length; i++) {\n          hex.push((bytes[i] >>> 4).toString(16));\n          hex.push((bytes[i] & 0xF).toString(16));\n        }\n        return hex.join('');\n      },\n      // Convert a hex string to a byte array\n      hexToBytes: function (hex) {\n        for (var bytes = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16));\n        return bytes;\n      },\n      // Convert a byte array to a base-64 string\n      bytesToBase64: function (bytes) {\n        for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n          var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];\n          for (var j = 0; j < 4; j++) if (i * 8 + j * 6 <= bytes.length * 8) base64.push(base64map.charAt(triplet >>> 6 * (3 - j) & 0x3F));else base64.push('=');\n        }\n        return base64.join('');\n      },\n      // Convert a base-64 string to a byte array\n      base64ToBytes: function (base64) {\n        // Remove non-base-64 characters\n        base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n        for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) {\n          if (imod4 == 0) continue;\n          bytes.push((base64map.indexOf(base64.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base64.charAt(i)) >>> 6 - imod4 * 2);\n        }\n        return bytes;\n      }\n    };\n  module.exports = crypt;\n})();","var charenc = {\n  // UTF-8 encoding\n  utf8: {\n    // Convert a string to a byte array\n    stringToBytes: function (str) {\n      return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n    },\n    // Convert a byte array to a string\n    bytesToString: function (bytes) {\n      return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n    }\n  },\n  // Binary encoding\n  bin: {\n    // Convert a string to a byte array\n    stringToBytes: function (str) {\n      for (var bytes = [], i = 0; i < str.length; i++) bytes.push(str.charCodeAt(i) & 0xFF);\n      return bytes;\n    },\n    // Convert a byte array to a string\n    bytesToString: function (bytes) {\n      for (var str = [], i = 0; i < bytes.length; i++) str.push(String.fromCharCode(bytes[i]));\n      return str.join('');\n    }\n  }\n};\nmodule.exports = charenc;","(function () {\n  var crypt = require('crypt'),\n    utf8 = require('charenc').utf8,\n    bin = require('charenc').bin,\n    // The core\n    sha1 = function (message) {\n      // Convert to byte array\n      if (message.constructor == String) message = utf8.stringToBytes(message);else if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer == 'function' && Buffer.isBuffer(message)) message = Array.prototype.slice.call(message, 0);else if (!Array.isArray(message)) message = message.toString();\n\n      // otherwise assume byte array\n\n      var m = crypt.bytesToWords(message),\n        l = message.length * 8,\n        w = [],\n        H0 = 1732584193,\n        H1 = -271733879,\n        H2 = -1732584194,\n        H3 = 271733878,\n        H4 = -1009589776;\n\n      // Padding\n      m[l >> 5] |= 0x80 << 24 - l % 32;\n      m[(l + 64 >>> 9 << 4) + 15] = l;\n      for (var i = 0; i < m.length; i += 16) {\n        var a = H0,\n          b = H1,\n          c = H2,\n          d = H3,\n          e = H4;\n        for (var j = 0; j < 80; j++) {\n          if (j < 16) w[j] = m[i + j];else {\n            var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];\n            w[j] = n << 1 | n >>> 31;\n          }\n          var t = (H0 << 5 | H0 >>> 27) + H4 + (w[j] >>> 0) + (j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 : j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 : j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 : (H1 ^ H2 ^ H3) - 899497514);\n          H4 = H3;\n          H3 = H2;\n          H2 = H1 << 30 | H1 >>> 2;\n          H1 = H0;\n          H0 = t;\n        }\n        H0 += a;\n        H1 += b;\n        H2 += c;\n        H3 += d;\n        H4 += e;\n      }\n      return [H0, H1, H2, H3, H4];\n    },\n    // Public API\n    api = function (message, options) {\n      var digestbytes = crypt.wordsToBytes(sha1(message));\n      return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);\n    };\n  api._blocksize = 16;\n  api._digestsize = 20;\n  module.exports = api;\n})();","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// THIS CODE IS GENERATED - DO NOT MODIFY.\n(function (global) {\n  global.ng ??= {};\n  global.ng.common ??= {};\n  global.ng.common.locales ??= {};\n  const u = undefined;\n  function plural(val) {\n    const n = val;\n    if (n === 1) return 1;\n    return 5;\n  }\n  global.ng.common.locales['nb'] = [\"nb\", [[\"a\", \"p\"], [\"a.m.\", \"p.m.\"], u], [[\"a.m.\", \"p.m.\"], u, u], [[\"S\", \"M\", \"T\", \"O\", \"T\", \"F\", \"L\"], [\"søn.\", \"man.\", \"tir.\", \"ons.\", \"tor.\", \"fre.\", \"lør.\"], [\"søndag\", \"mandag\", \"tirsdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lørdag\"], [\"sø.\", \"ma.\", \"ti.\", \"on.\", \"to.\", \"fr.\", \"lø.\"]], u, [[\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"], [\"jan.\", \"feb.\", \"mar.\", \"apr.\", \"mai\", \"jun.\", \"jul.\", \"aug.\", \"sep.\", \"okt.\", \"nov.\", \"des.\"], [\"januar\", \"februar\", \"mars\", \"april\", \"mai\", \"juni\", \"juli\", \"august\", \"september\", \"oktober\", \"november\", \"desember\"]], [[\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"], [\"jan\", \"feb\", \"mar\", \"apr\", \"mai\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"des\"], [\"januar\", \"februar\", \"mars\", \"april\", \"mai\", \"juni\", \"juli\", \"august\", \"september\", \"oktober\", \"november\", \"desember\"]], [[\"f.Kr.\", \"e.Kr.\"], u, [\"før Kristus\", \"etter Kristus\"]], 1, [6, 0], [\"dd.MM.y\", \"d. MMM y\", \"d. MMMM y\", \"EEEE d. MMMM y\"], [\"HH:mm\", \"HH:mm:ss\", \"HH:mm:ss z\", \"HH:mm:ss zzzz\"], [\"{1}, {0}\", u, \"{1} 'kl'. {0}\", u], [\",\", \" \", \";\", \"%\", \"+\", \"−\", \"E\", \"×\", \"‰\", \"∞\", \"NaN\", \":\"], [\"#,##0.###\", \"#,##0 %\", \"¤ #,##0.00;¤ -#,##0.00\", \"#E0\"], \"NOK\", \"kr\", \"norske kroner\", {\n    \"AUD\": [u, \"$\"],\n    \"BRL\": [u, \"R$\"],\n    \"BYN\": [u, \"р.\"],\n    \"CAD\": [u, \"$\"],\n    \"CNY\": [u, \"¥\"],\n    \"HKD\": [u, \"$\"],\n    \"ILS\": [u, \"₪\"],\n    \"INR\": [u, \"₹\"],\n    \"JPY\": [u, \"¥\"],\n    \"KRW\": [u, \"₩\"],\n    \"MXN\": [u, \"$\"],\n    \"NOK\": [\"kr\"],\n    \"NZD\": [u, \"$\"],\n    \"PHP\": [u, \"₱\"],\n    \"RON\": [u, \"L\"],\n    \"TWD\": [u, \"NT$\"],\n    \"USD\": [u, \"$\"],\n    \"VND\": [u, \"₫\"],\n    \"XAF\": [],\n    \"XCD\": [u, \"$\"],\n    \"XPF\": [],\n    \"XXX\": []\n  }, \"ltr\", plural, [[[\"mn.\", \"mg.\", \"fm.\", \"em.\", \"kv.\", \"nt.\"], [\"midn.\", \"morg.\", \"form.\", \"etterm.\", \"kveld\", \"natt\"], [\"midnatt\", \"på morgenen\", \"på formiddagen\", \"på ettermiddagen\", \"på kvelden\", \"på natten\"]], [[\"mn.\", \"mg.\", \"fm.\", \"em.\", \"kv.\", \"nt.\"], [\"midn.\", \"morg.\", \"form.\", \"etterm.\", \"kveld\", \"natt\"], [\"midnatt\", \"morgen\", \"formiddag\", \"ettermiddag\", \"kveld\", \"natt\"]], [\"00:00\", [\"06:00\", \"10:00\"], [\"10:00\", \"12:00\"], [\"12:00\", \"18:00\"], [\"18:00\", \"24:00\"], [\"00:00\", \"06:00\"]]]];\n})(globalThis);","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, NgZone, Injectable, Inject, makeEnvironmentProviders, NgModule } from '@angular/core';\nimport * as i2 from '@ngrx/store';\nimport { ActionsSubject, UPDATE, INIT, INITIAL_STATE, StateObservable, ReducerManagerDispatcher } from '@ngrx/store';\nimport { EMPTY, Observable, of, merge, queueScheduler, ReplaySubject } from 'rxjs';\nimport { share, filter, map, concatMap, timeout, debounceTime, catchError, take, takeUntil, switchMap, skip, observeOn, withLatestFrom, scan } from 'rxjs/operators';\nimport { toSignal } from '@angular/core/rxjs-interop';\nconst PERFORM_ACTION = 'PERFORM_ACTION';\nconst REFRESH = 'REFRESH';\nconst RESET = 'RESET';\nconst ROLLBACK = 'ROLLBACK';\nconst COMMIT = 'COMMIT';\nconst SWEEP = 'SWEEP';\nconst TOGGLE_ACTION = 'TOGGLE_ACTION';\nconst SET_ACTIONS_ACTIVE = 'SET_ACTIONS_ACTIVE';\nconst JUMP_TO_STATE = 'JUMP_TO_STATE';\nconst JUMP_TO_ACTION = 'JUMP_TO_ACTION';\nconst IMPORT_STATE = 'IMPORT_STATE';\nconst LOCK_CHANGES = 'LOCK_CHANGES';\nconst PAUSE_RECORDING = 'PAUSE_RECORDING';\nclass PerformAction {\n  constructor(action, timestamp) {\n    this.action = action;\n    this.timestamp = timestamp;\n    this.type = PERFORM_ACTION;\n    if (typeof action.type === 'undefined') {\n      throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n    }\n  }\n}\nclass Refresh {\n  constructor() {\n    this.type = REFRESH;\n  }\n}\nclass Reset {\n  constructor(timestamp) {\n    this.timestamp = timestamp;\n    this.type = RESET;\n  }\n}\nclass Rollback {\n  constructor(timestamp) {\n    this.timestamp = timestamp;\n    this.type = ROLLBACK;\n  }\n}\nclass Commit {\n  constructor(timestamp) {\n    this.timestamp = timestamp;\n    this.type = COMMIT;\n  }\n}\nclass Sweep {\n  constructor() {\n    this.type = SWEEP;\n  }\n}\nclass ToggleAction {\n  constructor(id) {\n    this.id = id;\n    this.type = TOGGLE_ACTION;\n  }\n}\nclass SetActionsActive {\n  constructor(start, end, active = true) {\n    this.start = start;\n    this.end = end;\n    this.active = active;\n    this.type = SET_ACTIONS_ACTIVE;\n  }\n}\nclass JumpToState {\n  constructor(index) {\n    this.index = index;\n    this.type = JUMP_TO_STATE;\n  }\n}\nclass JumpToAction {\n  constructor(actionId) {\n    this.actionId = actionId;\n    this.type = JUMP_TO_ACTION;\n  }\n}\nclass ImportState {\n  constructor(nextLiftedState) {\n    this.nextLiftedState = nextLiftedState;\n    this.type = IMPORT_STATE;\n  }\n}\nclass LockChanges {\n  constructor(status) {\n    this.status = status;\n    this.type = LOCK_CHANGES;\n  }\n}\nclass PauseRecording {\n  constructor(status) {\n    this.status = status;\n    this.type = PAUSE_RECORDING;\n  }\n}\n\n/**\n * Chrome extension documentation\n * @see https://github.com/reduxjs/redux-devtools/blob/main/extension/docs/API/Arguments.md\n * Firefox extension documentation\n * @see https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md\n */\nclass StoreDevtoolsConfig {\n  constructor() {\n    /**\n     * Maximum allowed actions to be stored in the history tree (default: `false`)\n     */\n    this.maxAge = false;\n  }\n}\nconst STORE_DEVTOOLS_CONFIG = new InjectionToken('@ngrx/store-devtools Options');\n/**\n * Used to provide a `StoreDevtoolsConfig` for the store-devtools.\n */\nconst INITIAL_OPTIONS = new InjectionToken('@ngrx/store-devtools Initial Config');\nfunction noMonitor() {\n  return null;\n}\nconst DEFAULT_NAME = 'NgRx Store DevTools';\nfunction createConfig(optionsInput) {\n  const DEFAULT_OPTIONS = {\n    maxAge: false,\n    monitor: noMonitor,\n    actionSanitizer: undefined,\n    stateSanitizer: undefined,\n    name: DEFAULT_NAME,\n    serialize: false,\n    logOnly: false,\n    autoPause: false,\n    trace: false,\n    traceLimit: 75,\n    // Add all features explicitly. This prevent buggy behavior for\n    // options like \"lock\" which might otherwise not show up.\n    features: {\n      pause: true,\n      // Start/pause recording of dispatched actions\n      lock: true,\n      // Lock/unlock dispatching actions and side effects\n      persist: true,\n      // Persist states on page reloading\n      export: true,\n      // Export history of actions in a file\n      import: 'custom',\n      // Import history of actions from a file\n      jump: true,\n      // Jump back and forth (time travelling)\n      skip: true,\n      // Skip (cancel) actions\n      reorder: true,\n      // Drag and drop actions in the history list\n      dispatch: true,\n      // Dispatch custom actions or action creators\n      test: true // Generate tests for the selected actions\n    },\n    connectInZone: false\n  };\n  const options = typeof optionsInput === 'function' ? optionsInput() : optionsInput;\n  const logOnly = options.logOnly ? {\n    pause: true,\n    export: true,\n    test: true\n  } : false;\n  const features = options.features || logOnly || DEFAULT_OPTIONS.features;\n  if (features.import === true) {\n    features.import = 'custom';\n  }\n  const config = Object.assign({}, DEFAULT_OPTIONS, {\n    features\n  }, options);\n  if (config.maxAge && config.maxAge < 2) {\n    throw new Error(`Devtools 'maxAge' cannot be less than 2, got ${config.maxAge}`);\n  }\n  return config;\n}\nfunction difference(first, second) {\n  return first.filter(item => second.indexOf(item) < 0);\n}\n/**\n * Provides an app's view into the state of the lifted store.\n */\nfunction unliftState(liftedState) {\n  const {\n    computedStates,\n    currentStateIndex\n  } = liftedState;\n  // At start up NgRx dispatches init actions,\n  // When these init actions are being filtered out by the predicate or safe/block list options\n  // we don't have a complete computed states yet.\n  // At this point it could happen that we're out of bounds, when this happens we fall back to the last known state\n  if (currentStateIndex >= computedStates.length) {\n    const {\n      state\n    } = computedStates[computedStates.length - 1];\n    return state;\n  }\n  const {\n    state\n  } = computedStates[currentStateIndex];\n  return state;\n}\nfunction unliftAction(liftedState) {\n  return liftedState.actionsById[liftedState.nextActionId - 1];\n}\n/**\n * Lifts an app's action into an action on the lifted store.\n */\nfunction liftAction(action) {\n  return new PerformAction(action, +Date.now());\n}\n/**\n * Sanitizes given actions with given function.\n */\nfunction sanitizeActions(actionSanitizer, actions) {\n  return Object.keys(actions).reduce((sanitizedActions, actionIdx) => {\n    const idx = Number(actionIdx);\n    sanitizedActions[idx] = sanitizeAction(actionSanitizer, actions[idx], idx);\n    return sanitizedActions;\n  }, {});\n}\n/**\n * Sanitizes given action with given function.\n */\nfunction sanitizeAction(actionSanitizer, action, actionIdx) {\n  return {\n    ...action,\n    action: actionSanitizer(action.action, actionIdx)\n  };\n}\n/**\n * Sanitizes given states with given function.\n */\nfunction sanitizeStates(stateSanitizer, states) {\n  return states.map((computedState, idx) => ({\n    state: sanitizeState(stateSanitizer, computedState.state, idx),\n    error: computedState.error\n  }));\n}\n/**\n * Sanitizes given state with given function.\n */\nfunction sanitizeState(stateSanitizer, state, stateIdx) {\n  return stateSanitizer(state, stateIdx);\n}\n/**\n * Read the config and tell if actions should be filtered\n */\nfunction shouldFilterActions(config) {\n  return config.predicate || config.actionsSafelist || config.actionsBlocklist;\n}\n/**\n * Return a full filtered lifted state\n */\nfunction filterLiftedState(liftedState, predicate, safelist, blocklist) {\n  const filteredStagedActionIds = [];\n  const filteredActionsById = {};\n  const filteredComputedStates = [];\n  liftedState.stagedActionIds.forEach((id, idx) => {\n    const liftedAction = liftedState.actionsById[id];\n    if (!liftedAction) return;\n    if (idx && isActionFiltered(liftedState.computedStates[idx], liftedAction, predicate, safelist, blocklist)) {\n      return;\n    }\n    filteredActionsById[id] = liftedAction;\n    filteredStagedActionIds.push(id);\n    filteredComputedStates.push(liftedState.computedStates[idx]);\n  });\n  return {\n    ...liftedState,\n    stagedActionIds: filteredStagedActionIds,\n    actionsById: filteredActionsById,\n    computedStates: filteredComputedStates\n  };\n}\n/**\n * Return true is the action should be ignored\n */\nfunction isActionFiltered(state, action, predicate, safelist, blockedlist) {\n  const predicateMatch = predicate && !predicate(state, action.action);\n  const safelistMatch = safelist && !action.action.type.match(safelist.map(s => escapeRegExp(s)).join('|'));\n  const blocklistMatch = blockedlist && action.action.type.match(blockedlist.map(s => escapeRegExp(s)).join('|'));\n  return predicateMatch || safelistMatch || blocklistMatch;\n}\n/**\n * Return string with escaped RegExp special characters\n * https://stackoverflow.com/a/6969486/1337347\n */\nfunction escapeRegExp(s) {\n  return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\nfunction injectZoneConfig(connectInZone) {\n  const ngZone = connectInZone ? inject(NgZone) : null;\n  return {\n    ngZone,\n    connectInZone\n  };\n}\nclass DevtoolsDispatcher extends ActionsSubject {\n  /** @nocollapse */static {\n    this.ɵfac = /* @__PURE__ */(() => {\n      let ɵDevtoolsDispatcher_BaseFactory;\n      return function DevtoolsDispatcher_Factory(__ngFactoryType__) {\n        return (ɵDevtoolsDispatcher_BaseFactory || (ɵDevtoolsDispatcher_BaseFactory = i0.ɵɵgetInheritedFactory(DevtoolsDispatcher)))(__ngFactoryType__ || DevtoolsDispatcher);\n      };\n    })();\n  }\n  /** @nocollapse */\n  static {\n    this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n      token: DevtoolsDispatcher,\n      factory: DevtoolsDispatcher.ɵfac\n    });\n  }\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DevtoolsDispatcher, [{\n    type: Injectable\n  }], null, null);\n})();\nconst ExtensionActionTypes = {\n  START: 'START',\n  DISPATCH: 'DISPATCH',\n  STOP: 'STOP',\n  ACTION: 'ACTION'\n};\nconst REDUX_DEVTOOLS_EXTENSION = new InjectionToken('@ngrx/store-devtools Redux Devtools Extension');\nclass DevtoolsExtension {\n  constructor(devtoolsExtension, config, dispatcher) {\n    this.config = config;\n    this.dispatcher = dispatcher;\n    this.zoneConfig = injectZoneConfig(this.config.connectInZone);\n    this.devtoolsExtension = devtoolsExtension;\n    this.createActionStreams();\n  }\n  notify(action, state) {\n    if (!this.devtoolsExtension) {\n      return;\n    }\n    // Check to see if the action requires a full update of the liftedState.\n    // If it is a simple action generated by the user's app and the recording\n    // is not locked/paused, only send the action and the current state (fast).\n    //\n    // A full liftedState update (slow: serializes the entire liftedState) is\n    // only required when:\n    //   a) redux-devtools-extension fires the @@Init action (ignored by\n    //      @ngrx/store-devtools)\n    //   b) an action is generated by an @ngrx module (e.g. @ngrx/effects/init\n    //      or @ngrx/store/update-reducers)\n    //   c) the state has been recomputed due to time-traveling\n    //   d) any action that is not a PerformAction to err on the side of\n    //      caution.\n    if (action.type === PERFORM_ACTION) {\n      if (state.isLocked || state.isPaused) {\n        return;\n      }\n      const currentState = unliftState(state);\n      if (shouldFilterActions(this.config) && isActionFiltered(currentState, action, this.config.predicate, this.config.actionsSafelist, this.config.actionsBlocklist)) {\n        return;\n      }\n      const sanitizedState = this.config.stateSanitizer ? sanitizeState(this.config.stateSanitizer, currentState, state.currentStateIndex) : currentState;\n      const sanitizedAction = this.config.actionSanitizer ? sanitizeAction(this.config.actionSanitizer, action, state.nextActionId) : action;\n      this.sendToReduxDevtools(() => this.extensionConnection.send(sanitizedAction, sanitizedState));\n    } else {\n      // Requires full state update\n      const sanitizedLiftedState = {\n        ...state,\n        stagedActionIds: state.stagedActionIds,\n        actionsById: this.config.actionSanitizer ? sanitizeActions(this.config.actionSanitizer, state.actionsById) : state.actionsById,\n        computedStates: this.config.stateSanitizer ? sanitizeStates(this.config.stateSanitizer, state.computedStates) : state.computedStates\n      };\n      this.sendToReduxDevtools(() => this.devtoolsExtension.send(null, sanitizedLiftedState, this.getExtensionConfig(this.config)));\n    }\n  }\n  createChangesObservable() {\n    if (!this.devtoolsExtension) {\n      return EMPTY;\n    }\n    return new Observable(subscriber => {\n      const connection = this.zoneConfig.connectInZone ?\n      // To reduce change detection cycles, we need to run the `connect` method\n      // outside of the Angular zone. The `connect` method adds a `message`\n      // event listener to communicate with an extension using `window.postMessage`\n      // and handle message events.\n      this.zoneConfig.ngZone.runOutsideAngular(() => this.devtoolsExtension.connect(this.getExtensionConfig(this.config))) : this.devtoolsExtension.connect(this.getExtensionConfig(this.config));\n      this.extensionConnection = connection;\n      connection.init();\n      connection.subscribe(change => subscriber.next(change));\n      return connection.unsubscribe;\n    });\n  }\n  createActionStreams() {\n    // Listens to all changes\n    const changes$ = this.createChangesObservable().pipe(share());\n    // Listen for the start action\n    const start$ = changes$.pipe(filter(change => change.type === ExtensionActionTypes.START));\n    // Listen for the stop action\n    const stop$ = changes$.pipe(filter(change => change.type === ExtensionActionTypes.STOP));\n    // Listen for lifted actions\n    const liftedActions$ = changes$.pipe(filter(change => change.type === ExtensionActionTypes.DISPATCH), map(change => this.unwrapAction(change.payload)), concatMap(action => {\n      if (action.type === IMPORT_STATE) {\n        // State imports may happen in two situations:\n        // 1. Explicitly by user\n        // 2. User activated the \"persist state accross reloads\" option\n        //    and now the state is imported during reload.\n        // Because of option 2, we need to give possible\n        // lazy loaded reducers time to instantiate.\n        // As soon as there is no UPDATE action within 1 second,\n        // it is assumed that all reducers are loaded.\n        return this.dispatcher.pipe(filter(action => action.type === UPDATE), timeout(1000), debounceTime(1000), map(() => action), catchError(() => of(action)), take(1));\n      } else {\n        return of(action);\n      }\n    }));\n    // Listen for unlifted actions\n    const actions$ = changes$.pipe(filter(change => change.type === ExtensionActionTypes.ACTION), map(change => this.unwrapAction(change.payload)));\n    const actionsUntilStop$ = actions$.pipe(takeUntil(stop$));\n    const liftedUntilStop$ = liftedActions$.pipe(takeUntil(stop$));\n    this.start$ = start$.pipe(takeUntil(stop$));\n    // Only take the action sources between the start/stop events\n    this.actions$ = this.start$.pipe(switchMap(() => actionsUntilStop$));\n    this.liftedActions$ = this.start$.pipe(switchMap(() => liftedUntilStop$));\n  }\n  unwrapAction(action) {\n    // indirect eval according to https://esbuild.github.io/content-types/#direct-eval\n    return typeof action === 'string' ? (0, eval)(`(${action})`) : action;\n  }\n  getExtensionConfig(config) {\n    const extensionOptions = {\n      name: config.name,\n      features: config.features,\n      serialize: config.serialize,\n      autoPause: config.autoPause ?? false,\n      trace: config.trace ?? false,\n      traceLimit: config.traceLimit ?? 75\n      // The action/state sanitizers are not added to the config\n      // because sanitation is done in this class already.\n      // It is done before sending it to the devtools extension for consistency:\n      // - If we call extensionConnection.send(...),\n      //   the extension would call the sanitizers.\n      // - If we call devtoolsExtension.send(...) (aka full state update),\n      //   the extension would NOT call the sanitizers, so we have to do it ourselves.\n    };\n    if (config.maxAge !== false /* support === 0 */) {\n      extensionOptions.maxAge = config.maxAge;\n    }\n    return extensionOptions;\n  }\n  sendToReduxDevtools(send) {\n    try {\n      send();\n    } catch (err) {\n      console.warn('@ngrx/store-devtools: something went wrong inside the redux devtools', err);\n    }\n  }\n  /** @nocollapse */\n  static {\n    this.ɵfac = function DevtoolsExtension_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || DevtoolsExtension)(i0.ɵɵinject(REDUX_DEVTOOLS_EXTENSION), i0.ɵɵinject(STORE_DEVTOOLS_CONFIG), i0.ɵɵinject(DevtoolsDispatcher));\n    };\n  }\n  /** @nocollapse */\n  static {\n    this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n      token: DevtoolsExtension,\n      factory: DevtoolsExtension.ɵfac\n    });\n  }\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DevtoolsExtension, [{\n    type: Injectable\n  }], () => [{\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [REDUX_DEVTOOLS_EXTENSION]\n    }]\n  }, {\n    type: StoreDevtoolsConfig,\n    decorators: [{\n      type: Inject,\n      args: [STORE_DEVTOOLS_CONFIG]\n    }]\n  }, {\n    type: DevtoolsDispatcher\n  }], null);\n})();\nconst INIT_ACTION = {\n  type: INIT\n};\nconst RECOMPUTE = '@ngrx/store-devtools/recompute';\nconst RECOMPUTE_ACTION = {\n  type: RECOMPUTE\n};\n/**\n * Computes the next entry in the log by applying an action.\n */\nfunction computeNextEntry(reducer, action, state, error, errorHandler) {\n  if (error) {\n    return {\n      state,\n      error: 'Interrupted by an error up the chain'\n    };\n  }\n  let nextState = state;\n  let nextError;\n  try {\n    nextState = reducer(state, action);\n  } catch (err) {\n    nextError = err.toString();\n    errorHandler.handleError(err);\n  }\n  return {\n    state: nextState,\n    error: nextError\n  };\n}\n/**\n * Runs the reducer on invalidated actions to get a fresh computation log.\n */\nfunction recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused) {\n  // Optimization: exit early and return the same reference\n  // if we know nothing could have changed.\n  if (minInvalidatedStateIndex >= computedStates.length && computedStates.length === stagedActionIds.length) {\n    return computedStates;\n  }\n  const nextComputedStates = computedStates.slice(0, minInvalidatedStateIndex);\n  // If the recording is paused, recompute all states up until the pause state,\n  // else recompute all states.\n  const lastIncludedActionId = stagedActionIds.length - (isPaused ? 1 : 0);\n  for (let i = minInvalidatedStateIndex; i < lastIncludedActionId; i++) {\n    const actionId = stagedActionIds[i];\n    const action = actionsById[actionId].action;\n    const previousEntry = nextComputedStates[i - 1];\n    const previousState = previousEntry ? previousEntry.state : committedState;\n    const previousError = previousEntry ? previousEntry.error : undefined;\n    const shouldSkip = skippedActionIds.indexOf(actionId) > -1;\n    const entry = shouldSkip ? previousEntry : computeNextEntry(reducer, action, previousState, previousError, errorHandler);\n    nextComputedStates.push(entry);\n  }\n  // If the recording is paused, the last state will not be recomputed,\n  // because it's essentially not part of the state history.\n  if (isPaused) {\n    nextComputedStates.push(computedStates[computedStates.length - 1]);\n  }\n  return nextComputedStates;\n}\nfunction liftInitialState(initialCommittedState, monitorReducer) {\n  return {\n    monitorState: monitorReducer(undefined, {}),\n    nextActionId: 1,\n    actionsById: {\n      0: liftAction(INIT_ACTION)\n    },\n    stagedActionIds: [0],\n    skippedActionIds: [],\n    committedState: initialCommittedState,\n    currentStateIndex: 0,\n    computedStates: [],\n    isLocked: false,\n    isPaused: false\n  };\n}\n/**\n * Creates a history state reducer from an app's reducer.\n */\nfunction liftReducerWith(initialCommittedState, initialLiftedState, errorHandler, monitorReducer, options = {}) {\n  /**\n   * Manages how the history actions modify the history state.\n   */\n  return reducer => (liftedState, liftedAction) => {\n    let {\n      monitorState,\n      actionsById,\n      nextActionId,\n      stagedActionIds,\n      skippedActionIds,\n      committedState,\n      currentStateIndex,\n      computedStates,\n      isLocked,\n      isPaused\n    } = liftedState || initialLiftedState;\n    if (!liftedState) {\n      // Prevent mutating initialLiftedState\n      actionsById = Object.create(actionsById);\n    }\n    function commitExcessActions(n) {\n      // Auto-commits n-number of excess actions.\n      let excess = n;\n      let idsToDelete = stagedActionIds.slice(1, excess + 1);\n      for (let i = 0; i < idsToDelete.length; i++) {\n        if (computedStates[i + 1].error) {\n          // Stop if error is found. Commit actions up to error.\n          excess = i;\n          idsToDelete = stagedActionIds.slice(1, excess + 1);\n          break;\n        } else {\n          delete actionsById[idsToDelete[i]];\n        }\n      }\n      skippedActionIds = skippedActionIds.filter(id => idsToDelete.indexOf(id) === -1);\n      stagedActionIds = [0, ...stagedActionIds.slice(excess + 1)];\n      committedState = computedStates[excess].state;\n      computedStates = computedStates.slice(excess);\n      currentStateIndex = currentStateIndex > excess ? currentStateIndex - excess : 0;\n    }\n    function commitChanges() {\n      // Consider the last committed state the new starting point.\n      // Squash any staged actions into a single committed state.\n      actionsById = {\n        0: liftAction(INIT_ACTION)\n      };\n      nextActionId = 1;\n      stagedActionIds = [0];\n      skippedActionIds = [];\n      committedState = computedStates[currentStateIndex].state;\n      currentStateIndex = 0;\n      computedStates = [];\n    }\n    // By default, aggressively recompute every state whatever happens.\n    // This has O(n) performance, so we'll override this to a sensible\n    // value whenever we feel like we don't have to recompute the states.\n    let minInvalidatedStateIndex = 0;\n    switch (liftedAction.type) {\n      case LOCK_CHANGES:\n        {\n          isLocked = liftedAction.status;\n          minInvalidatedStateIndex = Infinity;\n          break;\n        }\n      case PAUSE_RECORDING:\n        {\n          isPaused = liftedAction.status;\n          if (isPaused) {\n            // Add a pause action to signal the devtools-user the recording is paused.\n            // The corresponding state will be overwritten on each update to always contain\n            // the latest state (see Actions.PERFORM_ACTION).\n            stagedActionIds = [...stagedActionIds, nextActionId];\n            actionsById[nextActionId] = new PerformAction({\n              type: '@ngrx/devtools/pause'\n            }, +Date.now());\n            nextActionId++;\n            minInvalidatedStateIndex = stagedActionIds.length - 1;\n            computedStates = computedStates.concat(computedStates[computedStates.length - 1]);\n            if (currentStateIndex === stagedActionIds.length - 2) {\n              currentStateIndex++;\n            }\n            minInvalidatedStateIndex = Infinity;\n          } else {\n            commitChanges();\n          }\n          break;\n        }\n      case RESET:\n        {\n          // Get back to the state the store was created with.\n          actionsById = {\n            0: liftAction(INIT_ACTION)\n          };\n          nextActionId = 1;\n          stagedActionIds = [0];\n          skippedActionIds = [];\n          committedState = initialCommittedState;\n          currentStateIndex = 0;\n          computedStates = [];\n          break;\n        }\n      case COMMIT:\n        {\n          commitChanges();\n          break;\n        }\n      case ROLLBACK:\n        {\n          // Forget about any staged actions.\n          // Start again from the last committed state.\n          actionsById = {\n            0: liftAction(INIT_ACTION)\n          };\n          nextActionId = 1;\n          stagedActionIds = [0];\n          skippedActionIds = [];\n          currentStateIndex = 0;\n          computedStates = [];\n          break;\n        }\n      case TOGGLE_ACTION:\n        {\n          // Toggle whether an action with given ID is skipped.\n          // Being skipped means it is a no-op during the computation.\n          const {\n            id: actionId\n          } = liftedAction;\n          const index = skippedActionIds.indexOf(actionId);\n          if (index === -1) {\n            skippedActionIds = [actionId, ...skippedActionIds];\n          } else {\n            skippedActionIds = skippedActionIds.filter(id => id !== actionId);\n          }\n          // Optimization: we know history before this action hasn't changed\n          minInvalidatedStateIndex = stagedActionIds.indexOf(actionId);\n          break;\n        }\n      case SET_ACTIONS_ACTIVE:\n        {\n          // Toggle whether an action with given ID is skipped.\n          // Being skipped means it is a no-op during the computation.\n          const {\n            start,\n            end,\n            active\n          } = liftedAction;\n          const actionIds = [];\n          for (let i = start; i < end; i++) actionIds.push(i);\n          if (active) {\n            skippedActionIds = difference(skippedActionIds, actionIds);\n          } else {\n            skippedActionIds = [...skippedActionIds, ...actionIds];\n          }\n          // Optimization: we know history before this action hasn't changed\n          minInvalidatedStateIndex = stagedActionIds.indexOf(start);\n          break;\n        }\n      case JUMP_TO_STATE:\n        {\n          // Without recomputing anything, move the pointer that tell us\n          // which state is considered the current one. Useful for sliders.\n          currentStateIndex = liftedAction.index;\n          // Optimization: we know the history has not changed.\n          minInvalidatedStateIndex = Infinity;\n          break;\n        }\n      case JUMP_TO_ACTION:\n        {\n          // Jumps to a corresponding state to a specific action.\n          // Useful when filtering actions.\n          const index = stagedActionIds.indexOf(liftedAction.actionId);\n          if (index !== -1) currentStateIndex = index;\n          minInvalidatedStateIndex = Infinity;\n          break;\n        }\n      case SWEEP:\n        {\n          // Forget any actions that are currently being skipped.\n          stagedActionIds = difference(stagedActionIds, skippedActionIds);\n          skippedActionIds = [];\n          currentStateIndex = Math.min(currentStateIndex, stagedActionIds.length - 1);\n          break;\n        }\n      case PERFORM_ACTION:\n        {\n          // Ignore action and return state as is if recording is locked\n          if (isLocked) {\n            return liftedState || initialLiftedState;\n          }\n          if (isPaused || liftedState && isActionFiltered(liftedState.computedStates[currentStateIndex], liftedAction, options.predicate, options.actionsSafelist, options.actionsBlocklist)) {\n            // If recording is paused or if the action should be ignored, overwrite the last state\n            // (corresponds to the pause action) and keep everything else as is.\n            // This way, the app gets the new current state while the devtools\n            // do not record another action.\n            const lastState = computedStates[computedStates.length - 1];\n            computedStates = [...computedStates.slice(0, -1), computeNextEntry(reducer, liftedAction.action, lastState.state, lastState.error, errorHandler)];\n            minInvalidatedStateIndex = Infinity;\n            break;\n          }\n          // Auto-commit as new actions come in.\n          if (options.maxAge && stagedActionIds.length === options.maxAge) {\n            commitExcessActions(1);\n          }\n          if (currentStateIndex === stagedActionIds.length - 1) {\n            currentStateIndex++;\n          }\n          const actionId = nextActionId++;\n          // Mutation! This is the hottest path, and we optimize on purpose.\n          // It is safe because we set a new key in a cache dictionary.\n          actionsById[actionId] = liftedAction;\n          stagedActionIds = [...stagedActionIds, actionId];\n          // Optimization: we know that only the new action needs computing.\n          minInvalidatedStateIndex = stagedActionIds.length - 1;\n          break;\n        }\n      case IMPORT_STATE:\n        {\n          // Completely replace everything.\n          ({\n            monitorState,\n            actionsById,\n            nextActionId,\n            stagedActionIds,\n            skippedActionIds,\n            committedState,\n            currentStateIndex,\n            computedStates,\n            isLocked,\n            isPaused\n          } = liftedAction.nextLiftedState);\n          break;\n        }\n      case INIT:\n        {\n          // Always recompute states on hot reload and init.\n          minInvalidatedStateIndex = 0;\n          if (options.maxAge && stagedActionIds.length > options.maxAge) {\n            // States must be recomputed before committing excess.\n            computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused);\n            commitExcessActions(stagedActionIds.length - options.maxAge);\n            // Avoid double computation.\n            minInvalidatedStateIndex = Infinity;\n          }\n          break;\n        }\n      case UPDATE:\n        {\n          const stateHasErrors = computedStates.filter(state => state.error).length > 0;\n          if (stateHasErrors) {\n            // Recompute all states\n            minInvalidatedStateIndex = 0;\n            if (options.maxAge && stagedActionIds.length > options.maxAge) {\n              // States must be recomputed before committing excess.\n              computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused);\n              commitExcessActions(stagedActionIds.length - options.maxAge);\n              // Avoid double computation.\n              minInvalidatedStateIndex = Infinity;\n            }\n          } else {\n            // If not paused/locked, add a new action to signal devtools-user\n            // that there was a reducer update.\n            if (!isPaused && !isLocked) {\n              if (currentStateIndex === stagedActionIds.length - 1) {\n                currentStateIndex++;\n              }\n              // Add a new action to only recompute state\n              const actionId = nextActionId++;\n              actionsById[actionId] = new PerformAction(liftedAction, +Date.now());\n              stagedActionIds = [...stagedActionIds, actionId];\n              minInvalidatedStateIndex = stagedActionIds.length - 1;\n              computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused);\n            }\n            // Recompute state history with latest reducer and update action\n            computedStates = computedStates.map(cmp => ({\n              ...cmp,\n              state: reducer(cmp.state, RECOMPUTE_ACTION)\n            }));\n            currentStateIndex = stagedActionIds.length - 1;\n            if (options.maxAge && stagedActionIds.length > options.maxAge) {\n              commitExcessActions(stagedActionIds.length - options.maxAge);\n            }\n            // Avoid double computation.\n            minInvalidatedStateIndex = Infinity;\n          }\n          break;\n        }\n      default:\n        {\n          // If the action is not recognized, it's a monitor action.\n          // Optimization: a monitor action can't change history.\n          minInvalidatedStateIndex = Infinity;\n          break;\n        }\n    }\n    computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused);\n    monitorState = monitorReducer(monitorState, liftedAction);\n    return {\n      monitorState,\n      actionsById,\n      nextActionId,\n      stagedActionIds,\n      skippedActionIds,\n      committedState,\n      currentStateIndex,\n      computedStates,\n      isLocked,\n      isPaused\n    };\n  };\n}\nclass StoreDevtools {\n  constructor(dispatcher, actions$, reducers$, extension, scannedActions, errorHandler, initialState, config) {\n    const liftedInitialState = liftInitialState(initialState, config.monitor);\n    const liftReducer = liftReducerWith(initialState, liftedInitialState, errorHandler, config.monitor, config);\n    const liftedAction$ = merge(merge(actions$.asObservable().pipe(skip(1)), extension.actions$).pipe(map(liftAction)), dispatcher, extension.liftedActions$).pipe(observeOn(queueScheduler));\n    const liftedReducer$ = reducers$.pipe(map(liftReducer));\n    const zoneConfig = injectZoneConfig(config.connectInZone);\n    const liftedStateSubject = new ReplaySubject(1);\n    this.liftedStateSubscription = liftedAction$.pipe(withLatestFrom(liftedReducer$),\n    // The extension would post messages back outside of the Angular zone\n    // because we call `connect()` wrapped with `runOutsideAngular`. We run change\n    // detection only once at the end after all the required asynchronous tasks have\n    // been processed (for instance, `setInterval` scheduled by the `timeout` operator).\n    // We have to re-enter the Angular zone before the `scan` since it runs the reducer\n    // which must be run within the Angular zone.\n    emitInZone(zoneConfig), scan(({\n      state: liftedState\n    }, [action, reducer]) => {\n      let reducedLiftedState = reducer(liftedState, action);\n      // On full state update\n      // If we have actions filters, we must filter completely our lifted state to be sync with the extension\n      if (action.type !== PERFORM_ACTION && shouldFilterActions(config)) {\n        reducedLiftedState = filterLiftedState(reducedLiftedState, config.predicate, config.actionsSafelist, config.actionsBlocklist);\n      }\n      // Extension should be sent the sanitized lifted state\n      extension.notify(action, reducedLiftedState);\n      return {\n        state: reducedLiftedState,\n        action\n      };\n    }, {\n      state: liftedInitialState,\n      action: null\n    })).subscribe(({\n      state,\n      action\n    }) => {\n      liftedStateSubject.next(state);\n      if (action.type === PERFORM_ACTION) {\n        const unliftedAction = action.action;\n        scannedActions.next(unliftedAction);\n      }\n    });\n    this.extensionStartSubscription = extension.start$.pipe(emitInZone(zoneConfig)).subscribe(() => {\n      this.refresh();\n    });\n    const liftedState$ = liftedStateSubject.asObservable();\n    const state$ = liftedState$.pipe(map(unliftState));\n    Object.defineProperty(state$, 'state', {\n      value: toSignal(state$, {\n        manualCleanup: true,\n        requireSync: true\n      })\n    });\n    this.dispatcher = dispatcher;\n    this.liftedState = liftedState$;\n    this.state = state$;\n  }\n  ngOnDestroy() {\n    // Even though the store devtools plugin is recommended to be\n    // used only in development mode, it can still cause a memory leak\n    // in microfrontend applications that are being created and destroyed\n    // multiple times during development. This results in excessive memory\n    // consumption, as it prevents entire apps from being garbage collected.\n    this.liftedStateSubscription.unsubscribe();\n    this.extensionStartSubscription.unsubscribe();\n  }\n  dispatch(action) {\n    this.dispatcher.next(action);\n  }\n  next(action) {\n    this.dispatcher.next(action);\n  }\n  error(error) {}\n  complete() {}\n  performAction(action) {\n    this.dispatch(new PerformAction(action, +Date.now()));\n  }\n  refresh() {\n    this.dispatch(new Refresh());\n  }\n  reset() {\n    this.dispatch(new Reset(+Date.now()));\n  }\n  rollback() {\n    this.dispatch(new Rollback(+Date.now()));\n  }\n  commit() {\n    this.dispatch(new Commit(+Date.now()));\n  }\n  sweep() {\n    this.dispatch(new Sweep());\n  }\n  toggleAction(id) {\n    this.dispatch(new ToggleAction(id));\n  }\n  jumpToAction(actionId) {\n    this.dispatch(new JumpToAction(actionId));\n  }\n  jumpToState(index) {\n    this.dispatch(new JumpToState(index));\n  }\n  importState(nextLiftedState) {\n    this.dispatch(new ImportState(nextLiftedState));\n  }\n  lockChanges(status) {\n    this.dispatch(new LockChanges(status));\n  }\n  pauseRecording(status) {\n    this.dispatch(new PauseRecording(status));\n  }\n  /** @nocollapse */\n  static {\n    this.ɵfac = function StoreDevtools_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || StoreDevtools)(i0.ɵɵinject(DevtoolsDispatcher), i0.ɵɵinject(i2.ActionsSubject), i0.ɵɵinject(i2.ReducerObservable), i0.ɵɵinject(DevtoolsExtension), i0.ɵɵinject(i2.ScannedActionsSubject), i0.ɵɵinject(i0.ErrorHandler), i0.ɵɵinject(INITIAL_STATE), i0.ɵɵinject(STORE_DEVTOOLS_CONFIG));\n    };\n  }\n  /** @nocollapse */\n  static {\n    this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n      token: StoreDevtools,\n      factory: StoreDevtools.ɵfac\n    });\n  }\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(StoreDevtools, [{\n    type: Injectable\n  }], () => [{\n    type: DevtoolsDispatcher\n  }, {\n    type: i2.ActionsSubject\n  }, {\n    type: i2.ReducerObservable\n  }, {\n    type: DevtoolsExtension\n  }, {\n    type: i2.ScannedActionsSubject\n  }, {\n    type: i0.ErrorHandler\n  }, {\n    type: undefined,\n    decorators: [{\n      type: Inject,\n      args: [INITIAL_STATE]\n    }]\n  }, {\n    type: StoreDevtoolsConfig,\n    decorators: [{\n      type: Inject,\n      args: [STORE_DEVTOOLS_CONFIG]\n    }]\n  }], null);\n})();\n/**\n * If the devtools extension is connected out of the Angular zone,\n * this operator will emit all events within the zone.\n */\nfunction emitInZone({\n  ngZone,\n  connectInZone\n}) {\n  return source => connectInZone ? new Observable(subscriber => source.subscribe({\n    next: value => ngZone.run(() => subscriber.next(value)),\n    error: error => ngZone.run(() => subscriber.error(error)),\n    complete: () => ngZone.run(() => subscriber.complete())\n  })) : source;\n}\nconst IS_EXTENSION_OR_MONITOR_PRESENT = new InjectionToken('@ngrx/store-devtools Is Devtools Extension or Monitor Present');\nfunction createIsExtensionOrMonitorPresent(extension, config) {\n  return Boolean(extension) || config.monitor !== noMonitor;\n}\nfunction createReduxDevtoolsExtension() {\n  const extensionKey = '__REDUX_DEVTOOLS_EXTENSION__';\n  if (typeof window === 'object' && typeof window[extensionKey] !== 'undefined') {\n    return window[extensionKey];\n  } else {\n    return null;\n  }\n}\n/**\n * Provides developer tools and instrumentation for `Store`.\n *\n * @usageNotes\n *\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideStoreDevtools({\n *       maxAge: 25,\n *       logOnly: !isDevMode(),\n *     }),\n *   ],\n * });\n * ```\n */\nfunction provideStoreDevtools(options = {}) {\n  return makeEnvironmentProviders([DevtoolsExtension, DevtoolsDispatcher, StoreDevtools, {\n    provide: INITIAL_OPTIONS,\n    useValue: options\n  }, {\n    provide: IS_EXTENSION_OR_MONITOR_PRESENT,\n    deps: [REDUX_DEVTOOLS_EXTENSION, STORE_DEVTOOLS_CONFIG],\n    useFactory: createIsExtensionOrMonitorPresent\n  }, {\n    provide: REDUX_DEVTOOLS_EXTENSION,\n    useFactory: createReduxDevtoolsExtension\n  }, {\n    provide: STORE_DEVTOOLS_CONFIG,\n    deps: [INITIAL_OPTIONS],\n    useFactory: createConfig\n  }, {\n    provide: StateObservable,\n    deps: [StoreDevtools],\n    useFactory: createStateObservable\n  }, {\n    provide: ReducerManagerDispatcher,\n    useExisting: DevtoolsDispatcher\n  }]);\n}\nfunction createStateObservable(devtools) {\n  return devtools.state;\n}\nclass StoreDevtoolsModule {\n  static instrument(options = {}) {\n    return {\n      ngModule: StoreDevtoolsModule,\n      providers: [provideStoreDevtools(options)]\n    };\n  }\n  /** @nocollapse */\n  static {\n    this.ɵfac = function StoreDevtoolsModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || StoreDevtoolsModule)();\n    };\n  }\n  /** @nocollapse */\n  static {\n    this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: StoreDevtoolsModule\n    });\n  }\n  /** @nocollapse */\n  static {\n    this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n  }\n}\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(StoreDevtoolsModule, [{\n    type: NgModule,\n    args: [{}]\n  }], null, null);\n})();\n\n/**\n * DO NOT EDIT\n *\n * This file is automatically generated at build\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { INITIAL_OPTIONS, RECOMPUTE, REDUX_DEVTOOLS_EXTENSION, StoreDevtools, StoreDevtoolsConfig, StoreDevtoolsModule, provideStoreDevtools };\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n    templateUrl: './maintenance.component.html'\r\n})\r\nexport class MaintenanceComponent { }\r\n","<div class=\"container-fluid\">\r\n    <div class=\"row justify-content-center mt-5\">\r\n        <div class=\"col-auto\">\r\n            <div class=\"card\">\r\n                <div class=\"card-body text-center\">\r\n                    <span class=\"fa-layers fa-fw fa-10x\" style=\"color: #003b5c;\">\r\n                        <i class=\"fal fa-triangle\"></i>\r\n                        <i class=\"fas fa-tools\" data-fa-transform=\"shrink-10 down-2\"></i>\r\n                    </span>\r\n                    <h3 class=\"card-title my-3\">Vedlikehold og oppdatering</h3>\r\n                    <p class=\"card-text\">Kalkulatoren er midlertidig utilgjengelig på grunn av vedlikehold og oppdatering.</p>\r\n                    <p class=\"card-text\">Ved spørsmål, ta kontakt med fagsupport.</p>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { MaintenanceComponent } from './maintenance/maintenance.component';\r\n\r\n/* eslint-disable max-len */\r\nconst routes: Routes = [\r\n  {\r\n    path: '',\r\n    loadChildren: () => import('./home/home.module').then(m => m.HomeModule),\r\n    pathMatch: 'full',\r\n  },\r\n\r\n  {\r\n    path: 'agp',\r\n    loadChildren: () =>\r\n      import('./agp-calculator/agp-calculator.module').then(m => m.AgpCalculatorModule),\r\n  },\r\n  {\r\n    path: 'beregning-av-sykepenger',\r\n    loadChildren: () =>\r\n      import('./sickness-benefit-agp/sickness-benefit-agp.module').then(\r\n        m => m.SicknessBenefitAGPModule\r\n      ),\r\n  },\r\n  { path: 'maltidstrekkalkulator-2018', redirectTo: '/maltidstrekkalkulator' },\r\n  { path: 'maltidstrekkalkulator-2019', redirectTo: '/maltidstrekkalkulator' },\r\n  { path: 'maltidstrekkalkulator-2020', redirectTo: '/maltidstrekkalkulator' },\r\n  {\r\n    path: 'maltidstrekkalkulator',\r\n    loadChildren: () =>\r\n      import('./meal-calculator/meal-calculator.module').then(m => m.MealCalculatorModule),\r\n  },\r\n  {\r\n    path: 'valutakalkulator',\r\n    loadChildren: () =>\r\n      import('./currency-calculator/currency-calculator.module').then(\r\n        m => m.CurrencyCalculatorModule\r\n      ),\r\n  },\r\n  {\r\n    path: 'dager-mellom-datoer',\r\n    loadChildren: () =>\r\n      import('./days-between-dates/days-between-dates.module').then(m => m.DaysBetweenDatesModule),\r\n  },\r\n\r\n  { path: 'mva-kalkulator', redirectTo: '/mva' },\r\n  {\r\n    path: 'mva',\r\n    loadChildren: () =>\r\n      import('./vat-calculator/vat-calculator.module').then(m => m.VatCalculatorModule),\r\n  },\r\n\r\n  { path: 'rente-kalkulator', redirectTo: '/rente' },\r\n  {\r\n    path: 'rente',\r\n    loadChildren: () =>\r\n      import('./interest-calculator/interest-calculator.module').then(\r\n        m => m.InterestCalculatorModule\r\n      ),\r\n  },\r\n\r\n  { path: 'forsinkelsesrente-kalkulator', redirectTo: '/forsinkelsesrente' },\r\n  {\r\n    path: 'forsinkelsesrente',\r\n    loadChildren: () =>\r\n      import('./late-payment-interest/late-payment-interest.module').then(\r\n        m => m.LatePaymentInterestModule\r\n      ),\r\n  },\r\n\r\n  {\r\n    path: 'summerings-og-dokumentasjonsstrimmel',\r\n    loadChildren: () =>\r\n      import('./summary-and-documentation-strip/summary-and-documentation-strip.module').then(\r\n        m => m.SummaryAndDocumentationStripModule\r\n      ),\r\n  },\r\n\r\n  {\r\n    path: 'konsumprisindeks',\r\n    loadChildren: () =>\r\n      import('./consumer-price-index/consumer-price-index.module').then(\r\n        m => m.ConsumerPriceIndexModule\r\n      ),\r\n  },\r\n\r\n  {\r\n    path: 'naverdi',\r\n    loadChildren: () =>\r\n      import('./net-present-value/net-present-value.module').then(m => m.NPVModule),\r\n  },\r\n\r\n  {\r\n    path: 'lanekalkulator',\r\n    loadChildren: () =>\r\n      import('./loan-calculator/loan-calculator.module').then(m => m.LoanCalculatorModule),\r\n  },\r\n\r\n  {\r\n    path: 'utbytte-vs-lonn',\r\n    loadChildren: () =>\r\n      import('./dividend-vs-salary/dividend-vs-salary.module').then(m => m.DividendVsSalaryModule),\r\n  },\r\n\r\n  {\r\n    path: 'firmabil',\r\n    loadChildren: () => import('./company-car/company-car.module').then(m => m.CompanyCarModule),\r\n  },\r\n\r\n  { path: '**', redirectTo: '/' },\r\n\r\n  { path: 'vedlikehold', component: MaintenanceComponent },\r\n];\r\n/* eslint-enable max-len */\r\n\r\n@NgModule({\r\n  imports: [RouterModule.forRoot(routes)],\r\n  exports: [RouterModule],\r\n})\r\nexport class AppRoutingModule {}\r\n","export const licenseKey =\r\n  'ewogICJmb3JtYXQiOiAxLAogICJjdXN0b21lcklkIjogIjNmMDg5MTYwLTVjYTgtNDA4Yy05OTk5LTljNTVkMjIyYjliYiIsCiAgIm1heFZlcnNpb25BbGxvd2VkIjogMjQxCn0=.yIm6ZzlxN6pxNPP/RlBlisQSqWI9MLwuHflJ3r+tT0QuVfsTGPgFdQ3/+Y31ghHGTGFHBTcuadC0ZQtRiGLqaNi78niSFC4eVGUzn3F82pvT3bAoYWObGs6f5qt5eMbP9Ns+lQ==';\r\n","export enum OneTrustConsentGroup {\r\n  StrictlyNecessary = 'C0001',\r\n  Analytical = 'C0002',\r\n  Functional = 'C0003',\r\n  Marketing = 'C0004',\r\n}\r\n","/*!\n * Core functionality for Snowplow JavaScript trackers v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\nimport { __spreadArray, __assign } from 'tslib';\nimport { v4 } from 'uuid';\nvar version$1 = \"3.24.6\";\n\n/*\n * Copyright (c) 2013 Kevin van Zonneveld (http://kvz.io)\n * and Contributors (http://phpjs.org/authors)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n * of the Software, and to permit persons to whom the Software is furnished to do\n * so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/**\n * Decodes a url safe Base 64 encoded string\n * @remarks See: {@link http://tools.ietf.org/html/rfc4648#page-7}\n * @param data - String to decode\n * @returns The decoded string\n */\nfunction base64urldecode(data) {\n  if (!data) {\n    return data;\n  }\n  var padding = 4 - data.length % 4;\n  switch (padding) {\n    case 2:\n      data += '==';\n      break;\n    case 3:\n      data += '=';\n      break;\n  }\n  var b64Data = data.replace(/-/g, '+').replace(/_/g, '/');\n  return base64decode(b64Data);\n}\n/**\n * Encodes a string into a url safe Base 64 encoded string\n * @remarks See: {@link http://tools.ietf.org/html/rfc4648#page-7}\n * @param data - String to encode\n * @returns The url safe Base 64 string\n */\nfunction base64urlencode(data) {\n  if (!data) {\n    return data;\n  }\n  var enc = base64encode(data);\n  return enc.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\nvar b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n/**\n * Encode string as base64.\n * Any type can be passed, but will be stringified\n *\n * @param data - string to encode\n * @returns base64-encoded string\n */\nfunction base64encode(data) {\n  // discuss at: http://phpjs.org/functions/base64_encode/\n  // original by: Tyler Akins (http://rumkin.com)\n  // improved by: Bayron Guevara\n  // improved by: Thunder.m\n  // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n  // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n  // improved by: Rafał Kukawski (http://kukawski.pl)\n  // bugfixed by: Pellentesque Malesuada\n  // example 1: base64_encode('Kevin van Zonneveld');\n  // returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='\n  // example 2: base64_encode('a');\n  // returns 2: 'YQ=='\n  // example 3: base64_encode('✓ à la mode');\n  // returns 3: '4pyTIMOgIGxhIG1vZGU='\n  var o1,\n    o2,\n    o3,\n    h1,\n    h2,\n    h3,\n    h4,\n    bits,\n    i = 0,\n    ac = 0;\n  var tmp_arr = [];\n  if (!data) {\n    return data;\n  }\n  data = unescape(encodeURIComponent(data));\n  do {\n    // pack three octets into four hexets\n    o1 = data.charCodeAt(i++);\n    o2 = data.charCodeAt(i++);\n    o3 = data.charCodeAt(i++);\n    bits = o1 << 16 | o2 << 8 | o3;\n    h1 = bits >> 18 & 0x3f;\n    h2 = bits >> 12 & 0x3f;\n    h3 = bits >> 6 & 0x3f;\n    h4 = bits & 0x3f;\n    // use hexets to index into b64, and append result to encoded string\n    tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n  } while (i < data.length);\n  var enc = tmp_arr.join('');\n  var r = data.length % 3;\n  return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);\n}\n/**\n * Decode base64 to string\n *\n * @param data - base64 to string\n * @returns decoded string\n */\nfunction base64decode(encodedData) {\n  //  discuss at: http://locutus.io/php/base64_decode/\n  // original by: Tyler Akins (http://rumkin.com)\n  // improved by: Thunder.m\n  // improved by: Kevin van Zonneveld (http://kvz.io)\n  // improved by: Kevin van Zonneveld (http://kvz.io)\n  //    input by: Aman Gupta\n  //    input by: Brett Zamir (http://brett-zamir.me)\n  // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)\n  // bugfixed by: Pellentesque Malesuada\n  // bugfixed by: Kevin van Zonneveld (http://kvz.io)\n  // improved by: Indigo744\n  //   example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==')\n  //   returns 1: 'Kevin van Zonneveld'\n  //   example 2: base64_decode('YQ==')\n  //   returns 2: 'a'\n  //   example 3: base64_decode('4pyTIMOgIGxhIG1vZGU=')\n  //   returns 3: '✓ à la mode'\n  // decodeUTF8string()\n  // Internal function to decode properly UTF8 string\n  // Adapted from Solution #1 at https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding\n  var decodeUTF8string = function (str) {\n    // Going backwards: from bytestream, to percent-encoding, to original string.\n    return decodeURIComponent(str.split('').map(function (c) {\n      return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n    }).join(''));\n  };\n  var o1,\n    o2,\n    o3,\n    h1,\n    h2,\n    h3,\n    h4,\n    bits,\n    i = 0,\n    ac = 0,\n    dec = '';\n  var tmpArr = [];\n  if (!encodedData) {\n    return encodedData;\n  }\n  encodedData += '';\n  do {\n    // unpack four hexets into three octets using index points in b64\n    h1 = b64.indexOf(encodedData.charAt(i++));\n    h2 = b64.indexOf(encodedData.charAt(i++));\n    h3 = b64.indexOf(encodedData.charAt(i++));\n    h4 = b64.indexOf(encodedData.charAt(i++));\n    bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;\n    o1 = bits >> 16 & 0xff;\n    o2 = bits >> 8 & 0xff;\n    o3 = bits & 0xff;\n    if (h3 === 64) {\n      tmpArr[ac++] = String.fromCharCode(o1);\n    } else if (h4 === 64) {\n      tmpArr[ac++] = String.fromCharCode(o1, o2);\n    } else {\n      tmpArr[ac++] = String.fromCharCode(o1, o2, o3);\n    }\n  } while (i < encodedData.length);\n  dec = tmpArr.join('');\n  return decodeUTF8string(dec.replace(/\\0+$/, ''));\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nfunction payloadBuilder() {\n  var dict = {},\n    allJson = [],\n    jsonForProcessing = [],\n    contextEntitiesForProcessing = [];\n  var processor;\n  var add = function (key, value) {\n    if (value != null && value !== '') {\n      // null also checks undefined\n      dict[key] = value;\n    }\n  };\n  var addDict = function (dict) {\n    for (var key in dict) {\n      if (Object.prototype.hasOwnProperty.call(dict, key)) {\n        add(key, dict[key]);\n      }\n    }\n  };\n  var addJson = function (keyIfEncoded, keyIfNotEncoded, json) {\n    if (json && isNonEmptyJson(json)) {\n      var jsonWithKeys = {\n        keyIfEncoded: keyIfEncoded,\n        keyIfNotEncoded: keyIfNotEncoded,\n        json: json\n      };\n      jsonForProcessing.push(jsonWithKeys);\n      allJson.push(jsonWithKeys);\n    }\n  };\n  var addContextEntity = function (entity) {\n    contextEntitiesForProcessing.push(entity);\n  };\n  return {\n    add: add,\n    addDict: addDict,\n    addJson: addJson,\n    addContextEntity: addContextEntity,\n    getPayload: function () {\n      return dict;\n    },\n    getJson: function () {\n      return allJson;\n    },\n    withJsonProcessor: function (jsonProcessor) {\n      processor = jsonProcessor;\n    },\n    build: function () {\n      processor === null || processor === void 0 ? void 0 : processor(this, jsonForProcessing, contextEntitiesForProcessing);\n      return dict;\n    }\n  };\n}\n/**\n * A helper to build a Snowplow request from a set of name-value pairs, provided using the add methods.\n * Will base64 encode JSON, if desired, on build\n *\n * @returns The request builder, with add and build methods\n */\nfunction payloadJsonProcessor(encodeBase64) {\n  return function (payloadBuilder, jsonForProcessing, contextEntitiesForProcessing) {\n    var add = function (json, keyIfEncoded, keyIfNotEncoded) {\n      var str = JSON.stringify(json);\n      if (encodeBase64) {\n        payloadBuilder.add(keyIfEncoded, base64urlencode(str));\n      } else {\n        payloadBuilder.add(keyIfNotEncoded, str);\n      }\n    };\n    var getContextFromPayload = function () {\n      var payload = payloadBuilder.getPayload();\n      if (encodeBase64 ? payload.cx : payload.co) {\n        return JSON.parse(encodeBase64 ? base64urldecode(payload.cx) : payload.co);\n      }\n      return undefined;\n    };\n    var combineContexts = function (originalContext, newContext) {\n      var context = originalContext || getContextFromPayload();\n      if (context) {\n        context.data = context.data.concat(newContext.data);\n      } else {\n        context = newContext;\n      }\n      return context;\n    };\n    var context = undefined;\n    for (var _i = 0, jsonForProcessing_1 = jsonForProcessing; _i < jsonForProcessing_1.length; _i++) {\n      var json = jsonForProcessing_1[_i];\n      if (json.keyIfEncoded === 'cx') {\n        context = combineContexts(context, json.json);\n      } else {\n        add(json.json, json.keyIfEncoded, json.keyIfNotEncoded);\n      }\n    }\n    jsonForProcessing.length = 0;\n    if (contextEntitiesForProcessing.length) {\n      var newContext = {\n        schema: 'iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0',\n        data: __spreadArray([], contextEntitiesForProcessing, true)\n      };\n      context = combineContexts(context, newContext);\n      contextEntitiesForProcessing.length = 0;\n    }\n    if (context) {\n      add(context, 'cx', 'co');\n    }\n  };\n}\n/**\n * Is property a non-empty JSON?\n * @param property - Checks if object is non-empty json\n */\nfunction isNonEmptyJson(property) {\n  if (!isJson(property)) {\n    return false;\n  }\n  for (var key in property) {\n    if (Object.prototype.hasOwnProperty.call(property, key)) {\n      return true;\n    }\n  }\n  return false;\n}\n/**\n * Is property a JSON?\n * @param property - Checks if object is json\n */\nfunction isJson(property) {\n  return typeof property !== 'undefined' && property !== null && (property.constructor === {}.constructor || property.constructor === [].constructor);\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nvar label = 'Snowplow: ';\nvar LOG_LEVEL;\n(function (LOG_LEVEL) {\n  LOG_LEVEL[LOG_LEVEL[\"none\"] = 0] = \"none\";\n  LOG_LEVEL[LOG_LEVEL[\"error\"] = 1] = \"error\";\n  LOG_LEVEL[LOG_LEVEL[\"warn\"] = 2] = \"warn\";\n  LOG_LEVEL[LOG_LEVEL[\"debug\"] = 3] = \"debug\";\n  LOG_LEVEL[LOG_LEVEL[\"info\"] = 4] = \"info\";\n})(LOG_LEVEL || (LOG_LEVEL = {}));\nvar LOG = logger();\nfunction logger(logLevel) {\n  if (logLevel === void 0) {\n    logLevel = LOG_LEVEL.warn;\n  }\n  function setLogLevel(level) {\n    if (LOG_LEVEL[level]) {\n      logLevel = level;\n    } else {\n      logLevel = LOG_LEVEL.warn;\n    }\n  }\n  /**\n   * Log errors, with or without error object\n   */\n  function error(message, error) {\n    var extraParams = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n      extraParams[_i - 2] = arguments[_i];\n    }\n    if (logLevel >= LOG_LEVEL.error && typeof console !== 'undefined') {\n      var logMsg = label + message + '\\n';\n      if (error) {\n        console.error.apply(console, __spreadArray([logMsg + '\\n', error], extraParams, false));\n      } else {\n        console.error.apply(console, __spreadArray([logMsg], extraParams, false));\n      }\n    }\n  }\n  /**\n   * Log warnings, with or without error object\n   */\n  function warn(message, error) {\n    var extraParams = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n      extraParams[_i - 2] = arguments[_i];\n    }\n    if (logLevel >= LOG_LEVEL.warn && typeof console !== 'undefined') {\n      var logMsg = label + message;\n      if (error) {\n        console.warn.apply(console, __spreadArray([logMsg + '\\n', error], extraParams, false));\n      } else {\n        console.warn.apply(console, __spreadArray([logMsg], extraParams, false));\n      }\n    }\n  }\n  /**\n   * Log debug messages\n   */\n  function debug(message) {\n    var extraParams = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n      extraParams[_i - 1] = arguments[_i];\n    }\n    if (logLevel >= LOG_LEVEL.debug && typeof console !== 'undefined') {\n      console.debug.apply(console, __spreadArray([label + message], extraParams, false));\n    }\n  }\n  /**\n   * Log info messages\n   */\n  function info(message) {\n    var extraParams = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n      extraParams[_i - 1] = arguments[_i];\n    }\n    if (logLevel >= LOG_LEVEL.info && typeof console !== 'undefined') {\n      console.info.apply(console, __spreadArray([label + message], extraParams, false));\n    }\n  }\n  return {\n    setLogLevel: setLogLevel,\n    warn: warn,\n    error: error,\n    debug: debug,\n    info: info\n  };\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Contains helper functions to aid in the addition and removal of Global Contexts\n */\nfunction globalContexts() {\n  var globalPrimitives = [];\n  var conditionalProviders = [];\n  /**\n   * Returns all applicable global contexts for a specified event\n   * @param event - The event to check for applicable global contexts for\n   * @returns An array of contexts\n   */\n  var assembleAllContexts = function (event) {\n    var eventSchema = getUsefulSchema(event);\n    var eventType = getEventType(event);\n    var contexts = [];\n    var generatedPrimitives = generatePrimitives(globalPrimitives, event, eventType, eventSchema);\n    contexts.push.apply(contexts, generatedPrimitives);\n    var generatedConditionals = generateConditionals(conditionalProviders, event, eventType, eventSchema);\n    contexts.push.apply(contexts, generatedConditionals);\n    return contexts;\n  };\n  return {\n    getGlobalPrimitives: function () {\n      return globalPrimitives;\n    },\n    getConditionalProviders: function () {\n      return conditionalProviders;\n    },\n    addGlobalContexts: function (contexts) {\n      var acceptedConditionalContexts = [];\n      var acceptedContextPrimitives = [];\n      for (var _i = 0, contexts_1 = contexts; _i < contexts_1.length; _i++) {\n        var context = contexts_1[_i];\n        if (isConditionalContextProvider(context)) {\n          acceptedConditionalContexts.push(context);\n        } else if (isContextPrimitive(context)) {\n          acceptedContextPrimitives.push(context);\n        }\n      }\n      globalPrimitives = globalPrimitives.concat(acceptedContextPrimitives);\n      conditionalProviders = conditionalProviders.concat(acceptedConditionalContexts);\n    },\n    clearGlobalContexts: function () {\n      conditionalProviders = [];\n      globalPrimitives = [];\n    },\n    removeGlobalContexts: function (contexts) {\n      var _loop_1 = function (context) {\n        if (isConditionalContextProvider(context)) {\n          conditionalProviders = conditionalProviders.filter(function (item) {\n            return !compareProvider(context, item);\n          });\n        } else if (isContextPrimitive(context)) {\n          globalPrimitives = globalPrimitives.filter(function (item) {\n            return !compareProvider(context, item);\n          });\n        }\n      };\n      for (var _i = 0, contexts_2 = contexts; _i < contexts_2.length; _i++) {\n        var context = contexts_2[_i];\n        _loop_1(context);\n      }\n    },\n    getApplicableContexts: function (event) {\n      return assembleAllContexts(event);\n    }\n  };\n}\nfunction pluginContexts(plugins) {\n  /**\n   * Add common contexts to every event\n   *\n   * @param array - additionalContexts List of user-defined contexts\n   * @returns userContexts combined with commonContexts\n   */\n  return {\n    addPluginContexts: function (additionalContexts) {\n      var combinedContexts = additionalContexts ? __spreadArray([], additionalContexts, true) : [];\n      plugins.forEach(function (plugin) {\n        try {\n          if (plugin.contexts) {\n            combinedContexts.push.apply(combinedContexts, plugin.contexts());\n          }\n        } catch (ex) {\n          LOG.error('Error adding plugin contexts', ex);\n        }\n      });\n      return combinedContexts;\n    }\n  };\n}\n/**\n * Find dynamic context generating functions and return their results to be merged into the static contexts\n * Combine an array of unchanging contexts with the result of a context-creating function\n *\n * @param dynamicOrStaticContexts - Array of custom context Objects or custom context generating functions\n * @param Parameters - to pass to dynamic context callbacks\n * @returns An array of Self Describing JSON context\n */\nfunction resolveDynamicContext(dynamicOrStaticContexts) {\n  var _a;\n  var extraParams = [];\n  for (var _i = 1; _i < arguments.length; _i++) {\n    extraParams[_i - 1] = arguments[_i];\n  }\n  return (_a = dynamicOrStaticContexts === null || dynamicOrStaticContexts === void 0 ? void 0 : dynamicOrStaticContexts.map(function (context) {\n    if (typeof context === 'function') {\n      try {\n        return context.apply(void 0, extraParams);\n      } catch (e) {\n        //TODO: provide warning\n        return undefined;\n      }\n    } else {\n      return context;\n    }\n  }).filter(Boolean)) !== null && _a !== void 0 ? _a : [];\n}\n/**\n * Slices a schema into its composite parts. Useful for ruleset filtering.\n * @param input - A schema string\n * @returns The vendor, schema name, major, minor and patch information of a schema string\n */\nfunction getSchemaParts(input) {\n  var re = new RegExp('^iglu:([a-zA-Z0-9-_.]+)/([a-zA-Z0-9-_]+)/jsonschema/([1-9][0-9]*)-(0|[1-9][0-9]*)-(0|[1-9][0-9]*)$');\n  var matches = re.exec(input);\n  if (matches !== null) return matches.slice(1, 6);\n  return undefined;\n}\n/**\n * Validates the vendor section of a schema string contains allowed wildcard values\n * @param parts - Array of parts from a schema string\n * @returns Whether the vendor validation parts are a valid combination\n */\nfunction validateVendorParts(parts) {\n  if (parts[0] === '*' || parts[1] === '*') {\n    return false; // no wildcard in first or second part\n  }\n  if (parts.slice(2).length > 0) {\n    var asterisk = false;\n    for (var _i = 0, _a = parts.slice(2); _i < _a.length; _i++) {\n      var part = _a[_i];\n      if (part === '*')\n        // mark when we've found a wildcard\n        asterisk = true;else if (asterisk)\n        // invalid if alpha parts come after wildcard\n        return false;\n    }\n    return true;\n  } else if (parts.length == 2) return true;\n  return false;\n}\n/**\n * Validates the vendor part of a schema string is valid for a rule set\n * @param input - Vendor part of a schema string\n * @returns Whether the vendor validation string is valid\n */\nfunction validateVendor(input) {\n  var parts = input.split('.');\n  if (parts && parts.length > 1) return validateVendorParts(parts);\n  return false;\n}\n/**\n * Checks for validity of input and returns all the sections of a schema string that are used to match rules in a ruleset\n * @param input - A Schema string\n * @returns The sections of a schema string that are used to match rules in a ruleset\n */\nfunction getRuleParts(input) {\n  var re = new RegExp('^iglu:((?:(?:[a-zA-Z0-9-_]+|\\\\*).)+(?:[a-zA-Z0-9-_]+|\\\\*))/([a-zA-Z0-9-_.]+|\\\\*)/jsonschema/([1-9][0-9]*|\\\\*)-(0|[1-9][0-9]*|\\\\*)-(0|[1-9][0-9]*|\\\\*)$');\n  var matches = re.exec(input);\n  if (matches !== null && validateVendor(matches[1])) return matches.slice(1, 6);\n  return undefined;\n}\n/**\n * Ensures the rules specified in a schema string of a ruleset are valid\n * @param input - A Schema string\n * @returns if there rule is valid\n */\nfunction isValidRule(input) {\n  var ruleParts = getRuleParts(input);\n  if (ruleParts) {\n    var vendor = ruleParts[0];\n    return ruleParts.length === 5 && validateVendor(vendor);\n  }\n  return false;\n}\n/**\n * Check if a variable is an Array containing only strings\n * @param input - The variable to validate\n * @returns True if the input is an array containing only strings\n */\nfunction isStringArray(input) {\n  return Array.isArray(input) && input.every(function (x) {\n    return typeof x === 'string';\n  });\n}\n/**\n * Validates whether a rule set is an array of valid ruleset strings\n * @param input - The Array of rule set arguments\n * @returns True is the input is an array of valid rules\n */\nfunction isValidRuleSetArg(input) {\n  if (isStringArray(input)) return input.every(function (x) {\n    return isValidRule(x);\n  });else if (typeof input === 'string') return isValidRule(input);\n  return false;\n}\n/**\n * Check if a variable is a valid, non-empty Self Describing JSON\n * @param input - The variable to validate\n * @returns True if a valid Self Describing JSON\n */\nfunction isSelfDescribingJson(input) {\n  var sdj = input;\n  if (isNonEmptyJson(sdj)) if ('schema' in sdj && 'data' in sdj) return typeof sdj.schema === 'string' && typeof sdj.data === 'object';\n  return false;\n}\n/**\n * Validates if the input object contains the expected properties of a ruleset\n * @param input - The object containing a rule set\n * @returns True if a valid rule set\n */\nfunction isRuleSet(input) {\n  var ruleSet = input;\n  var ruleCount = 0;\n  if (input != null && typeof input === 'object' && !Array.isArray(input)) {\n    if (Object.prototype.hasOwnProperty.call(ruleSet, 'accept')) {\n      if (isValidRuleSetArg(ruleSet['accept'])) {\n        ruleCount += 1;\n      } else {\n        return false;\n      }\n    }\n    if (Object.prototype.hasOwnProperty.call(ruleSet, 'reject')) {\n      if (isValidRuleSetArg(ruleSet['reject'])) {\n        ruleCount += 1;\n      } else {\n        return false;\n      }\n    }\n    // if either 'reject' or 'accept' or both exists,\n    // we have a valid ruleset\n    return ruleCount > 0 && ruleCount <= 2;\n  }\n  return false;\n}\n/**\n * Validates if the function can be a valid context generator function\n * @param input - The function to be validated\n */\nfunction isContextCallbackFunction(input) {\n  return typeof input === 'function' && input.length <= 1;\n}\n/**\n * Validates if the function can be a valid context primitive function or self describing json\n * @param input - The function or orbject to be validated\n * @returns True if either a Context Generator or Self Describing JSON\n */\nfunction isContextPrimitive(input) {\n  return isContextCallbackFunction(input) || isSelfDescribingJson(input);\n}\n/**\n * Validates if an array is a valid shape to be a Filter Provider\n * @param input - The Array of Context filter callbacks\n */\nfunction isFilterProvider(input) {\n  if (Array.isArray(input)) {\n    if (input.length === 2) {\n      if (Array.isArray(input[1])) {\n        return isContextCallbackFunction(input[0]) && input[1].every(isContextPrimitive);\n      }\n      return isContextCallbackFunction(input[0]) && isContextPrimitive(input[1]);\n    }\n  }\n  return false;\n}\n/**\n * Validates if an array is a valid shape to be an array of rule sets\n * @param input - The Array of Rule Sets\n */\nfunction isRuleSetProvider(input) {\n  if (Array.isArray(input) && input.length === 2) {\n    if (!isRuleSet(input[0])) return false;\n    if (Array.isArray(input[1])) return input[1].every(isContextPrimitive);\n    return isContextPrimitive(input[1]);\n  }\n  return false;\n}\n/**\n * Checks if an input array is either a filter provider or a rule set provider\n * @param input - An array of filter providers or rule set providers\n * @returns Whether the array is a valid {@link ConditionalContextProvider}\n */\nfunction isConditionalContextProvider(input) {\n  return isFilterProvider(input) || isRuleSetProvider(input);\n}\n/**\n * Checks if a given schema matches any rules within the provided rule set\n * @param ruleSet - The rule set containing rules to match schema against\n * @param schema - The schema to be matched against the rule set\n */\nfunction matchSchemaAgainstRuleSet(ruleSet, schema) {\n  var rejectCount = 0;\n  var acceptCount = 0;\n  var acceptRules = ruleSet['accept'];\n  if (Array.isArray(acceptRules)) {\n    if (ruleSet.accept.some(function (rule) {\n      return matchSchemaAgainstRule(rule, schema);\n    })) {\n      acceptCount++;\n    }\n  } else if (typeof acceptRules === 'string') {\n    if (matchSchemaAgainstRule(acceptRules, schema)) {\n      acceptCount++;\n    }\n  }\n  var rejectRules = ruleSet['reject'];\n  if (Array.isArray(rejectRules)) {\n    if (ruleSet.reject.some(function (rule) {\n      return matchSchemaAgainstRule(rule, schema);\n    })) {\n      rejectCount++;\n    }\n  } else if (typeof rejectRules === 'string') {\n    if (matchSchemaAgainstRule(rejectRules, schema)) {\n      rejectCount++;\n    }\n  }\n  if (acceptCount > 0 && rejectCount === 0) {\n    return true;\n  } else if (acceptCount === 0 && rejectCount > 0) {\n    return false;\n  }\n  return false;\n}\n/**\n * Checks if a given schema matches a specific rule from a rule set\n * @param rule - The rule to match schema against\n * @param schema - The schema to be matched against the rule\n */\nfunction matchSchemaAgainstRule(rule, schema) {\n  if (!isValidRule(rule)) return false;\n  var ruleParts = getRuleParts(rule);\n  var schemaParts = getSchemaParts(schema);\n  if (ruleParts && schemaParts) {\n    if (!matchVendor(ruleParts[0], schemaParts[0])) return false;\n    for (var i = 1; i < 5; i++) {\n      if (!matchPart(ruleParts[i], schemaParts[i])) return false;\n    }\n    return true; // if it hasn't failed, it passes\n  }\n  return false;\n}\nfunction matchVendor(rule, vendor) {\n  // rule and vendor must have same number of elements\n  var vendorParts = vendor.split('.');\n  var ruleParts = rule.split('.');\n  if (vendorParts && ruleParts) {\n    if (vendorParts.length !== ruleParts.length) return false;\n    for (var i = 0; i < ruleParts.length; i++) {\n      if (!matchPart(vendorParts[i], ruleParts[i])) return false;\n    }\n    return true;\n  }\n  return false;\n}\nfunction matchPart(rule, schema) {\n  // parts should be the string nested between slashes in the URI: /example/\n  return rule && schema && rule === '*' || rule === schema;\n}\n// Returns the \"useful\" schema, i.e. what would someone want to use to identify events.\n// For some events this is the 'e' property but for unstructured events, this is the\n// 'schema' from the 'ue_px' field.\nfunction getUsefulSchema(sb) {\n  var eventJson = sb.getJson();\n  for (var _i = 0, eventJson_1 = eventJson; _i < eventJson_1.length; _i++) {\n    var json = eventJson_1[_i];\n    if (json.keyIfEncoded === 'ue_px' && typeof json.json['data'] === 'object') {\n      var schema = json.json['data']['schema'];\n      if (typeof schema == 'string') {\n        return schema;\n      }\n    }\n  }\n  return '';\n}\nfunction getEventType(payloadBuilder) {\n  var eventType = payloadBuilder.getPayload()['e'];\n  return typeof eventType === 'string' ? eventType : '';\n}\nfunction buildGenerator(generator, event, eventType, eventSchema) {\n  var contextGeneratorResult = undefined;\n  try {\n    // try to evaluate context generator\n    var args = {\n      event: event.getPayload(),\n      eventType: eventType,\n      eventSchema: eventSchema\n    };\n    contextGeneratorResult = generator(args);\n    // determine if the produced result is a valid SDJ\n    if (Array.isArray(contextGeneratorResult) && contextGeneratorResult.every(isSelfDescribingJson)) {\n      return contextGeneratorResult;\n    } else if (isSelfDescribingJson(contextGeneratorResult)) {\n      return contextGeneratorResult;\n    } else {\n      return undefined;\n    }\n  } catch (error) {\n    contextGeneratorResult = undefined;\n  }\n  return contextGeneratorResult;\n}\nfunction normalizeToArray(input) {\n  if (Array.isArray(input)) {\n    return input;\n  }\n  return Array.of(input);\n}\nfunction generatePrimitives(contextPrimitives, event, eventType, eventSchema) {\n  var _a;\n  var normalizedInputs = normalizeToArray(contextPrimitives);\n  var partialEvaluate = function (primitive) {\n    var result = evaluatePrimitive(primitive, event, eventType, eventSchema);\n    if (result && result.length !== 0) {\n      return result;\n    }\n    return undefined;\n  };\n  var generatedContexts = normalizedInputs.map(partialEvaluate);\n  return (_a = []).concat.apply(_a, generatedContexts.filter(function (c) {\n    return c != null && c.filter(Boolean);\n  }));\n}\nfunction evaluatePrimitive(contextPrimitive, event, eventType, eventSchema) {\n  if (isSelfDescribingJson(contextPrimitive)) {\n    return [contextPrimitive];\n  } else if (isContextCallbackFunction(contextPrimitive)) {\n    var generatorOutput = buildGenerator(contextPrimitive, event, eventType, eventSchema);\n    if (isSelfDescribingJson(generatorOutput)) {\n      return [generatorOutput];\n    } else if (Array.isArray(generatorOutput)) {\n      return generatorOutput;\n    }\n  }\n  return undefined;\n}\nfunction evaluateProvider(provider, event, eventType, eventSchema) {\n  if (isFilterProvider(provider)) {\n    var filter = provider[0];\n    var filterResult = false;\n    try {\n      var args = {\n        event: event.getPayload(),\n        eventType: eventType,\n        eventSchema: eventSchema\n      };\n      filterResult = filter(args);\n    } catch (error) {\n      filterResult = false;\n    }\n    if (filterResult === true) {\n      return generatePrimitives(provider[1], event, eventType, eventSchema);\n    }\n  } else if (isRuleSetProvider(provider)) {\n    if (matchSchemaAgainstRuleSet(provider[0], eventSchema)) {\n      return generatePrimitives(provider[1], event, eventType, eventSchema);\n    }\n  }\n  return [];\n}\nfunction compareProviderPart(a, b) {\n  if (typeof a === 'function') return a === b;\n  return JSON.stringify(a) === JSON.stringify(b);\n}\nfunction compareProvider(a, b) {\n  if (isConditionalContextProvider(a)) {\n    if (!isConditionalContextProvider(b)) return false;\n    var ruleA = a[0],\n      primitivesA = a[1];\n    var ruleB = b[0],\n      primitivesB_1 = b[1];\n    if (!compareProviderPart(ruleA, ruleB)) return false;\n    if (Array.isArray(primitivesA)) {\n      if (!Array.isArray(primitivesB_1)) return false;\n      if (primitivesA.length !== primitivesB_1.length) return false;\n      return primitivesA.reduce(function (matches, a, i) {\n        return matches && compareProviderPart(a, primitivesB_1[i]);\n      }, true);\n    } else {\n      if (Array.isArray(primitivesB_1)) return false;\n      return compareProviderPart(primitivesA, primitivesB_1);\n    }\n  } else if (isContextPrimitive(a)) {\n    if (!isContextPrimitive(b)) return false;\n    return compareProviderPart(a, b);\n  }\n  return false;\n}\nfunction generateConditionals(providers, event, eventType, eventSchema) {\n  var _a;\n  var normalizedInput = normalizeToArray(providers);\n  var partialEvaluate = function (provider) {\n    var result = evaluateProvider(provider, event, eventType, eventSchema);\n    if (result && result.length !== 0) {\n      return result;\n    }\n    return undefined;\n  };\n  var generatedContexts = normalizedInput.map(partialEvaluate);\n  return (_a = []).concat.apply(_a, generatedContexts.filter(function (c) {\n    return c != null && c.filter(Boolean);\n  }));\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Transform optional/old-behavior number timestamp into`Timestamp` ADT\n *\n * @param timestamp - optional number or timestamp object\n * @returns correct timestamp object\n */\nfunction getTimestamp(timestamp) {\n  if (timestamp == null) {\n    return {\n      type: 'dtm',\n      value: new Date().getTime()\n    };\n  } else if (typeof timestamp === 'number') {\n    return {\n      type: 'dtm',\n      value: timestamp\n    };\n  } else if (timestamp.type === 'ttm') {\n    // We can return timestamp here, but this is safer fallback\n    return {\n      type: 'ttm',\n      value: timestamp.value\n    };\n  } else {\n    return {\n      type: 'dtm',\n      value: timestamp.value || new Date().getTime()\n    };\n  }\n}\n/**\n * Create a tracker core object\n *\n * @param base64 - Whether to base 64 encode contexts and self describing event JSONs\n * @param corePlugins - The core plugins to be processed with each event\n * @param callback - Function applied to every payload dictionary object\n * @returns Tracker core\n */\nfunction trackerCore(configuration) {\n  if (configuration === void 0) {\n    configuration = {};\n  }\n  function newCore(base64, corePlugins, callback) {\n    var pluginContextsHelper = pluginContexts(corePlugins),\n      globalContextsHelper = globalContexts();\n    var encodeBase64 = base64,\n      payloadPairs = {}; // Dictionary of key-value pairs which get added to every payload, e.g. tracker version\n    /**\n     * Wraps an array of custom contexts in a self-describing JSON\n     *\n     * @param contexts - Array of custom context self-describing JSONs\n     * @returns Outer JSON\n     */\n    function completeContexts(contexts) {\n      if (contexts && contexts.length) {\n        return {\n          schema: 'iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0',\n          data: contexts\n        };\n      }\n      return undefined;\n    }\n    /**\n     * Adds all global contexts to a contexts array\n     *\n     * @param pb - PayloadData\n     * @param contexts - Custom contexts relating to the event\n     */\n    function attachGlobalContexts(pb, contexts) {\n      var applicableContexts = globalContextsHelper.getApplicableContexts(pb);\n      var returnedContexts = [];\n      if (contexts && contexts.length) {\n        returnedContexts.push.apply(returnedContexts, contexts);\n      }\n      if (applicableContexts && applicableContexts.length) {\n        returnedContexts.push.apply(returnedContexts, applicableContexts);\n      }\n      return returnedContexts;\n    }\n    /**\n     * Gets called by every trackXXX method\n     * Adds context and payloadPairs name-value pairs to the payload\n     * Applies the callback to the built payload\n     *\n     * @param pb - Payload\n     * @param context - Custom contexts relating to the event\n     * @param timestamp - Timestamp of the event\n     * @returns Payload after the callback is applied\n     */\n    function track(pb, context, timestamp) {\n      pb.withJsonProcessor(payloadJsonProcessor(encodeBase64));\n      pb.add('eid', v4());\n      pb.addDict(payloadPairs);\n      var tstamp = getTimestamp(timestamp);\n      pb.add(tstamp.type, tstamp.value.toString());\n      var allContexts = attachGlobalContexts(pb, pluginContextsHelper.addPluginContexts(context));\n      var wrappedContexts = completeContexts(allContexts);\n      if (wrappedContexts !== undefined) {\n        pb.addJson('cx', 'co', wrappedContexts);\n      }\n      corePlugins.forEach(function (plugin) {\n        try {\n          if (plugin.beforeTrack) {\n            plugin.beforeTrack(pb);\n          }\n        } catch (ex) {\n          LOG.error('Plugin beforeTrack', ex);\n        }\n      });\n      if (typeof callback === 'function') {\n        callback(pb);\n      }\n      var finalPayload = pb.build();\n      corePlugins.forEach(function (plugin) {\n        try {\n          if (plugin.afterTrack) {\n            plugin.afterTrack(finalPayload);\n          }\n        } catch (ex) {\n          LOG.error('Plugin afterTrack', ex);\n        }\n      });\n      return finalPayload;\n    }\n    /**\n     * Set a persistent key-value pair to be added to every payload\n     *\n     * @param key - Field name\n     * @param value - Field value\n     */\n    function addPayloadPair(key, value) {\n      payloadPairs[key] = value;\n    }\n    var core = {\n      track: track,\n      addPayloadPair: addPayloadPair,\n      getBase64Encoding: function () {\n        return encodeBase64;\n      },\n      setBase64Encoding: function (encode) {\n        encodeBase64 = encode;\n      },\n      addPayloadDict: function (dict) {\n        for (var key in dict) {\n          if (Object.prototype.hasOwnProperty.call(dict, key)) {\n            payloadPairs[key] = dict[key];\n          }\n        }\n      },\n      resetPayloadPairs: function (dict) {\n        payloadPairs = isJson(dict) ? dict : {};\n      },\n      setTrackerVersion: function (version) {\n        addPayloadPair('tv', version);\n      },\n      setTrackerNamespace: function (name) {\n        addPayloadPair('tna', name);\n      },\n      setAppId: function (appId) {\n        addPayloadPair('aid', appId);\n      },\n      setPlatform: function (value) {\n        addPayloadPair('p', value);\n      },\n      setUserId: function (userId) {\n        addPayloadPair('uid', userId);\n      },\n      setScreenResolution: function (width, height) {\n        addPayloadPair('res', width + 'x' + height);\n      },\n      setViewport: function (width, height) {\n        addPayloadPair('vp', width + 'x' + height);\n      },\n      setColorDepth: function (depth) {\n        addPayloadPair('cd', depth);\n      },\n      setTimezone: function (timezone) {\n        addPayloadPair('tz', timezone);\n      },\n      setLang: function (lang) {\n        addPayloadPair('lang', lang);\n      },\n      setIpAddress: function (ip) {\n        addPayloadPair('ip', ip);\n      },\n      setUseragent: function (useragent) {\n        addPayloadPair('ua', useragent);\n      },\n      addGlobalContexts: function (contexts) {\n        globalContextsHelper.addGlobalContexts(contexts);\n      },\n      clearGlobalContexts: function () {\n        globalContextsHelper.clearGlobalContexts();\n      },\n      removeGlobalContexts: function (contexts) {\n        globalContextsHelper.removeGlobalContexts(contexts);\n      }\n    };\n    return core;\n  }\n  var base64 = configuration.base64,\n    corePlugins = configuration.corePlugins,\n    callback = configuration.callback,\n    plugins = corePlugins !== null && corePlugins !== void 0 ? corePlugins : [],\n    partialCore = newCore(base64 !== null && base64 !== void 0 ? base64 : true, plugins, callback),\n    core = __assign(__assign({}, partialCore), {\n      addPlugin: function (configuration) {\n        var _a, _b;\n        var plugin = configuration.plugin;\n        plugins.push(plugin);\n        (_a = plugin.logger) === null || _a === void 0 ? void 0 : _a.call(plugin, LOG);\n        (_b = plugin.activateCorePlugin) === null || _b === void 0 ? void 0 : _b.call(plugin, core);\n      }\n    });\n  plugins === null || plugins === void 0 ? void 0 : plugins.forEach(function (plugin) {\n    var _a, _b;\n    (_a = plugin.logger) === null || _a === void 0 ? void 0 : _a.call(plugin, LOG);\n    (_b = plugin.activateCorePlugin) === null || _b === void 0 ? void 0 : _b.call(plugin, core);\n  });\n  return core;\n}\n/**\n * Build a self-describing event\n * A custom event type, allowing for an event to be tracked using your own custom schema\n * and a data object which conforms to the supplied schema\n *\n * @param event - Contains the properties and schema location for the event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildSelfDescribingEvent(event) {\n  var _a = event.event,\n    schema = _a.schema,\n    data = _a.data,\n    pb = payloadBuilder();\n  var ueJson = {\n    schema: 'iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0',\n    data: {\n      schema: schema,\n      data: data\n    }\n  };\n  pb.add('e', 'ue');\n  pb.addJson('ue_px', 'ue_pr', ueJson);\n  return pb;\n}\n/**\n * Build a Page View Event\n * Represents a Page View, which is typically fired as soon as possible when a web page\n * is loaded within the users browser. Often also fired on \"virtual page views\" within\n * Single Page Applications (SPA).\n *\n * @param event - Contains the properties for the Page View event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildPageView(event) {\n  var pageUrl = event.pageUrl,\n    pageTitle = event.pageTitle,\n    referrer = event.referrer,\n    pb = payloadBuilder();\n  pb.add('e', 'pv'); // 'pv' for Page View\n  pb.add('url', pageUrl);\n  pb.add('page', pageTitle);\n  pb.add('refr', referrer);\n  return pb;\n}\n/**\n * Build a Page Ping Event\n * Fires when activity tracking is enabled in the browser.\n * Tracks same information as the last tracked Page View and includes scroll\n * information from the current page view\n *\n * @param event - Contains the properties for the Page Ping event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildPagePing(event) {\n  var pageUrl = event.pageUrl,\n    pageTitle = event.pageTitle,\n    referrer = event.referrer,\n    minXOffset = event.minXOffset,\n    maxXOffset = event.maxXOffset,\n    minYOffset = event.minYOffset,\n    maxYOffset = event.maxYOffset,\n    pb = payloadBuilder();\n  pb.add('e', 'pp'); // 'pp' for Page Ping\n  pb.add('url', pageUrl);\n  pb.add('page', pageTitle);\n  pb.add('refr', referrer);\n  if (minXOffset && !isNaN(Number(minXOffset))) pb.add('pp_mix', minXOffset.toString());\n  if (maxXOffset && !isNaN(Number(maxXOffset))) pb.add('pp_max', maxXOffset.toString());\n  if (minYOffset && !isNaN(Number(minYOffset))) pb.add('pp_miy', minYOffset.toString());\n  if (maxYOffset && !isNaN(Number(maxYOffset))) pb.add('pp_may', maxYOffset.toString());\n  return pb;\n}\n/**\n * Build a Structured Event\n * A classic style of event tracking, allows for easier movement between analytics\n * systems. A loosely typed event, creating a Self Describing event is preferred, but\n * useful for interoperability.\n *\n * @param event - Contains the properties for the Structured event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildStructEvent(event) {\n  var category = event.category,\n    action = event.action,\n    label = event.label,\n    property = event.property,\n    value = event.value,\n    pb = payloadBuilder();\n  pb.add('e', 'se'); // 'se' for Structured Event\n  pb.add('se_ca', category);\n  pb.add('se_ac', action);\n  pb.add('se_la', label);\n  pb.add('se_pr', property);\n  pb.add('se_va', value == null ? undefined : value.toString());\n  return pb;\n}\n/**\n * Build an Ecommerce Transaction Event\n * Allows for tracking common ecommerce events, this event is usually used when\n * a consumer completes a transaction.\n *\n * @param event - Contains the properties for the Ecommerce Transactoion event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildEcommerceTransaction(event) {\n  var orderId = event.orderId,\n    total = event.total,\n    affiliation = event.affiliation,\n    tax = event.tax,\n    shipping = event.shipping,\n    city = event.city,\n    state = event.state,\n    country = event.country,\n    currency = event.currency,\n    pb = payloadBuilder();\n  pb.add('e', 'tr'); // 'tr' for Transaction\n  pb.add('tr_id', orderId);\n  pb.add('tr_af', affiliation);\n  pb.add('tr_tt', total);\n  pb.add('tr_tx', tax);\n  pb.add('tr_sh', shipping);\n  pb.add('tr_ci', city);\n  pb.add('tr_st', state);\n  pb.add('tr_co', country);\n  pb.add('tr_cu', currency);\n  return pb;\n}\n/**\n * Build an Ecommerce Transaction Item Event\n * Related to the {@link buildEcommerceTransaction}\n * Each Ecommerce Transaction may contain one or more EcommerceTransactionItem events\n *\n * @param event - Contains the properties for the Ecommerce Transaction Item event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildEcommerceTransactionItem(event) {\n  var orderId = event.orderId,\n    sku = event.sku,\n    price = event.price,\n    name = event.name,\n    category = event.category,\n    quantity = event.quantity,\n    currency = event.currency,\n    pb = payloadBuilder();\n  pb.add('e', 'ti'); // 'tr' for Transaction Item\n  pb.add('ti_id', orderId);\n  pb.add('ti_sk', sku);\n  pb.add('ti_nm', name);\n  pb.add('ti_ca', category);\n  pb.add('ti_pr', price);\n  pb.add('ti_qu', quantity);\n  pb.add('ti_cu', currency);\n  return pb;\n}\n/**\n * Build a Scren View Event\n * Similar to a Page View but less focused on typical web properties\n * Often used for mobile applications as the user is presented with\n * new views as they performance navigation events\n *\n * @param event - Contains the properties for the Screen View event. One or more properties must be included.\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildScreenView(event) {\n  var name = event.name,\n    id = event.id;\n  return buildSelfDescribingEvent({\n    event: {\n      schema: 'iglu:com.snowplowanalytics.snowplow/screen_view/jsonschema/1-0-0',\n      data: removeEmptyProperties({\n        name: name,\n        id: id\n      })\n    }\n  });\n}\n/**\n * Build a Link Click Event\n * Used when a user clicks on a link on a webpage, typically an anchor tag `<a>`\n *\n * @param event - Contains the properties for the Link Click event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildLinkClick(event) {\n  var targetUrl = event.targetUrl,\n    elementId = event.elementId,\n    elementClasses = event.elementClasses,\n    elementTarget = event.elementTarget,\n    elementContent = event.elementContent;\n  var eventJson = {\n    schema: 'iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1',\n    data: removeEmptyProperties({\n      targetUrl: targetUrl,\n      elementId: elementId,\n      elementClasses: elementClasses,\n      elementTarget: elementTarget,\n      elementContent: elementContent\n    })\n  };\n  return buildSelfDescribingEvent({\n    event: eventJson\n  });\n}\n/**\n * Build a Ad Impression Event\n * Used to track an advertisement impression\n *\n * @remarks\n * If you provide the cost field, you must also provide one of 'cpa', 'cpc', and 'cpm' for the costModel field.\n *\n * @param event - Contains the properties for the Ad Impression event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildAdImpression(event) {\n  var impressionId = event.impressionId,\n    costModel = event.costModel,\n    cost = event.cost,\n    targetUrl = event.targetUrl,\n    bannerId = event.bannerId,\n    zoneId = event.zoneId,\n    advertiserId = event.advertiserId,\n    campaignId = event.campaignId;\n  var eventJson = {\n    schema: 'iglu:com.snowplowanalytics.snowplow/ad_impression/jsonschema/1-0-0',\n    data: removeEmptyProperties({\n      impressionId: impressionId,\n      costModel: costModel,\n      cost: cost,\n      targetUrl: targetUrl,\n      bannerId: bannerId,\n      zoneId: zoneId,\n      advertiserId: advertiserId,\n      campaignId: campaignId\n    })\n  };\n  return buildSelfDescribingEvent({\n    event: eventJson\n  });\n}\n/**\n * Build a Ad Click Event\n * Used to track an advertisement click\n *\n * @remarks\n * If you provide the cost field, you must also provide one of 'cpa', 'cpc', and 'cpm' for the costModel field.\n *\n * @param event - Contains the properties for the Ad Click event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildAdClick(event) {\n  var targetUrl = event.targetUrl,\n    clickId = event.clickId,\n    costModel = event.costModel,\n    cost = event.cost,\n    bannerId = event.bannerId,\n    zoneId = event.zoneId,\n    impressionId = event.impressionId,\n    advertiserId = event.advertiserId,\n    campaignId = event.campaignId;\n  var eventJson = {\n    schema: 'iglu:com.snowplowanalytics.snowplow/ad_click/jsonschema/1-0-0',\n    data: removeEmptyProperties({\n      targetUrl: targetUrl,\n      clickId: clickId,\n      costModel: costModel,\n      cost: cost,\n      bannerId: bannerId,\n      zoneId: zoneId,\n      impressionId: impressionId,\n      advertiserId: advertiserId,\n      campaignId: campaignId\n    })\n  };\n  return buildSelfDescribingEvent({\n    event: eventJson\n  });\n}\n/**\n * Build a Ad Conversion Event\n * Used to track an advertisement click\n *\n * @remarks\n * If you provide the cost field, you must also provide one of 'cpa', 'cpc', and 'cpm' for the costModel field.\n *\n * @param event - Contains the properties for the Ad Conversion event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildAdConversion(event) {\n  var conversionId = event.conversionId,\n    costModel = event.costModel,\n    cost = event.cost,\n    category = event.category,\n    action = event.action,\n    property = event.property,\n    initialValue = event.initialValue,\n    advertiserId = event.advertiserId,\n    campaignId = event.campaignId;\n  var eventJson = {\n    schema: 'iglu:com.snowplowanalytics.snowplow/ad_conversion/jsonschema/1-0-0',\n    data: removeEmptyProperties({\n      conversionId: conversionId,\n      costModel: costModel,\n      cost: cost,\n      category: category,\n      action: action,\n      property: property,\n      initialValue: initialValue,\n      advertiserId: advertiserId,\n      campaignId: campaignId\n    })\n  };\n  return buildSelfDescribingEvent({\n    event: eventJson\n  });\n}\n/**\n * Build a Social Interaction Event\n * Social tracking will be used to track the way users interact\n * with Facebook, Twitter and Google + widgets\n * e.g. to capture “like this” or “tweet this” events.\n *\n * @param event - Contains the properties for the Social Interaction event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildSocialInteraction(event) {\n  var action = event.action,\n    network = event.network,\n    target = event.target;\n  var eventJson = {\n    schema: 'iglu:com.snowplowanalytics.snowplow/social_interaction/jsonschema/1-0-0',\n    data: removeEmptyProperties({\n      action: action,\n      network: network,\n      target: target\n    })\n  };\n  return buildSelfDescribingEvent({\n    event: eventJson\n  });\n}\n/**\n * Build a Add To Cart Event\n * For tracking users adding items from a cart\n * on an ecommerce site.\n *\n * @param event - Contains the properties for the Add To Cart event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildAddToCart(event) {\n  var sku = event.sku,\n    quantity = event.quantity,\n    name = event.name,\n    category = event.category,\n    unitPrice = event.unitPrice,\n    currency = event.currency;\n  return buildSelfDescribingEvent({\n    event: {\n      schema: 'iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0',\n      data: removeEmptyProperties({\n        sku: sku,\n        quantity: quantity,\n        name: name,\n        category: category,\n        unitPrice: unitPrice,\n        currency: currency\n      })\n    }\n  });\n}\n/**\n * Build a Remove From Cart Event\n * For tracking users removing items from a cart\n * on an ecommerce site.\n *\n * @param event - Contains the properties for the Remove From Cart event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildRemoveFromCart(event) {\n  var sku = event.sku,\n    quantity = event.quantity,\n    name = event.name,\n    category = event.category,\n    unitPrice = event.unitPrice,\n    currency = event.currency;\n  return buildSelfDescribingEvent({\n    event: {\n      schema: 'iglu:com.snowplowanalytics.snowplow/remove_from_cart/jsonschema/1-0-0',\n      data: removeEmptyProperties({\n        sku: sku,\n        quantity: quantity,\n        name: name,\n        category: category,\n        unitPrice: unitPrice,\n        currency: currency\n      })\n    }\n  });\n}\n/**\n * Build a Form Focus or Change Form Event based on schema property\n * When a user focuses on a form element or when a user makes a\n * change to a form element.\n *\n * @param event - Contains the properties for the Form Focus or Change Form event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildFormFocusOrChange(event) {\n  var event_schema = '';\n  var schema = event.schema,\n    formId = event.formId,\n    elementId = event.elementId,\n    nodeName = event.nodeName,\n    elementClasses = event.elementClasses,\n    value = event.value,\n    type = event.type;\n  var event_data = {\n    formId: formId,\n    elementId: elementId,\n    nodeName: nodeName,\n    elementClasses: elementClasses,\n    value: value\n  };\n  if (schema === 'change_form') {\n    event_schema = 'iglu:com.snowplowanalytics.snowplow/change_form/jsonschema/1-0-0';\n    event_data.type = type;\n  } else if (schema === 'focus_form') {\n    event_schema = 'iglu:com.snowplowanalytics.snowplow/focus_form/jsonschema/1-0-0';\n    event_data.elementType = type;\n  }\n  return buildSelfDescribingEvent({\n    event: {\n      schema: event_schema,\n      data: removeEmptyProperties(event_data, {\n        value: true\n      })\n    }\n  });\n}\n/**\n * Build a Form Submission Event\n * Used to track when a user submits a form\n *\n * @param event - Contains the properties for the Form Submission event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildFormSubmission(event) {\n  var formId = event.formId,\n    formClasses = event.formClasses,\n    elements = event.elements;\n  return buildSelfDescribingEvent({\n    event: {\n      schema: 'iglu:com.snowplowanalytics.snowplow/submit_form/jsonschema/1-0-0',\n      data: removeEmptyProperties({\n        formId: formId,\n        formClasses: formClasses,\n        elements: elements\n      })\n    }\n  });\n}\n/**\n * Build a Site Search Event\n * Used when a user performs a search action on a page\n *\n * @param event - Contains the properties for the Site Search event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildSiteSearch(event) {\n  var terms = event.terms,\n    filters = event.filters,\n    totalResults = event.totalResults,\n    pageResults = event.pageResults;\n  return buildSelfDescribingEvent({\n    event: {\n      schema: 'iglu:com.snowplowanalytics.snowplow/site_search/jsonschema/1-0-0',\n      data: removeEmptyProperties({\n        terms: terms,\n        filters: filters,\n        totalResults: totalResults,\n        pageResults: pageResults\n      })\n    }\n  });\n}\n/**\n * Build a Consent Withdrawn Event\n * Used for tracking when a user withdraws their consent\n *\n * @param event - Contains the properties for the Consent Withdrawn event\n * @returns An object containing the PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track} and a 'consent_document' context\n */\nfunction buildConsentWithdrawn(event) {\n  var all = event.all,\n    id = event.id,\n    version = event.version,\n    name = event.name,\n    description = event.description;\n  var documentJson = {\n    schema: 'iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0',\n    data: removeEmptyProperties({\n      id: id,\n      version: version,\n      name: name,\n      description: description\n    })\n  };\n  return {\n    event: buildSelfDescribingEvent({\n      event: {\n        schema: 'iglu:com.snowplowanalytics.snowplow/consent_withdrawn/jsonschema/1-0-0',\n        data: removeEmptyProperties({\n          all: all\n        })\n      }\n    }),\n    context: [documentJson]\n  };\n}\n/**\n * Build a Consent Granted Event\n * Used for tracking when a user grants their consent\n *\n * @param event - Contains the properties for the Consent Granted event\n * @returns An object containing the PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track} and a 'consent_document' context\n */\nfunction buildConsentGranted(event) {\n  var expiry = event.expiry,\n    id = event.id,\n    version = event.version,\n    name = event.name,\n    description = event.description;\n  var documentJson = {\n    schema: 'iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0',\n    data: removeEmptyProperties({\n      id: id,\n      version: version,\n      name: name,\n      description: description\n    })\n  };\n  return {\n    event: buildSelfDescribingEvent({\n      event: {\n        schema: 'iglu:com.snowplowanalytics.snowplow/consent_granted/jsonschema/1-0-0',\n        data: removeEmptyProperties({\n          expiry: expiry\n        })\n      }\n    }),\n    context: [documentJson]\n  };\n}\n/**\n * Returns a copy of a JSON with undefined and null properties removed\n *\n * @param event - JSON object to clean\n * @param exemptFields - Set of fields which should not be removed even if empty\n * @returns A cleaned copy of eventJson\n */\nfunction removeEmptyProperties(event, exemptFields) {\n  if (exemptFields === void 0) {\n    exemptFields = {};\n  }\n  var ret = {};\n  for (var k in event) {\n    if (exemptFields[k] || event[k] !== null && typeof event[k] !== 'undefined') {\n      ret[k] = event[k];\n    }\n  }\n  return ret;\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nvar version = version$1;\nexport { LOG, LOG_LEVEL, buildAdClick, buildAdConversion, buildAdImpression, buildAddToCart, buildConsentGranted, buildConsentWithdrawn, buildEcommerceTransaction, buildEcommerceTransactionItem, buildFormFocusOrChange, buildFormSubmission, buildLinkClick, buildPagePing, buildPageView, buildRemoveFromCart, buildScreenView, buildSelfDescribingEvent, buildSiteSearch, buildSocialInteraction, buildStructEvent, getRuleParts, getSchemaParts, globalContexts, isConditionalContextProvider, isContextCallbackFunction, isContextPrimitive, isFilterProvider, isJson, isNonEmptyJson, isRuleSet, isRuleSetProvider, isSelfDescribingJson, isStringArray, isValidRule, isValidRuleSetArg, matchSchemaAgainstRule, matchSchemaAgainstRuleSet, payloadBuilder, payloadJsonProcessor, pluginContexts, removeEmptyProperties, resolveDynamicContext, trackerCore, validateVendor, validateVendorParts, version };\n","/*!\n * Core functionality for Snowplow Browser trackers v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\nimport { LOG, trackerCore, buildPageView, buildPagePing } from '@snowplow/tracker-core';\nimport { __assign, __spreadArray } from 'tslib';\nimport hash from 'sha1';\nimport { v4 } from 'uuid';\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Attempt to get a value from localStorage\n *\n * @param string - key\n * @returns string The value obtained from localStorage, or\n *                undefined if localStorage is inaccessible\n */\nfunction attemptGetLocalStorage(key) {\n  try {\n    var localStorageAlias = window.localStorage,\n      exp = localStorageAlias.getItem(key + '.expires');\n    if (exp === null || +exp > Date.now()) {\n      return localStorageAlias.getItem(key);\n    } else {\n      localStorageAlias.removeItem(key);\n      localStorageAlias.removeItem(key + '.expires');\n    }\n    return undefined;\n  } catch (e) {\n    return undefined;\n  }\n}\n/**\n * Attempt to write a value to localStorage\n *\n * @param string - key\n * @param string - value\n * @param number - ttl Time to live in seconds, defaults to 2 years from Date.now()\n * @returns boolean Whether the operation succeeded\n */\nfunction attemptWriteLocalStorage(key, value, ttl) {\n  if (ttl === void 0) {\n    ttl = 63072000;\n  }\n  try {\n    var localStorageAlias = window.localStorage,\n      t = Date.now() + ttl * 1000;\n    localStorageAlias.setItem(\"\".concat(key, \".expires\"), t.toString());\n    localStorageAlias.setItem(key, value);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n/**\n * Attempt to delete a value from localStorage\n *\n * @param string - key\n * @returns boolean Whether the operation succeeded\n */\nfunction attemptDeleteLocalStorage(key) {\n  try {\n    var localStorageAlias = window.localStorage;\n    localStorageAlias.removeItem(key);\n    localStorageAlias.removeItem(key + '.expires');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n/**\n * Attempt to get a value from sessionStorage\n *\n * @param string - key\n * @returns string The value obtained from sessionStorage, or\n *                undefined if sessionStorage is inaccessible\n */\nfunction attemptGetSessionStorage(key) {\n  try {\n    return window.sessionStorage.getItem(key);\n  } catch (e) {\n    return undefined;\n  }\n}\n/**\n * Attempt to write a value to sessionStorage\n *\n * @param string - key\n * @param string - value\n * @returns boolean Whether the operation succeeded\n */\nfunction attemptWriteSessionStorage(key, value) {\n  try {\n    window.sessionStorage.setItem(key, value);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\nvar DEFAULT_CROSS_DOMAIN_LINKER_PARAMS = {\n  sessionId: true,\n  sourceId: true,\n  sourcePlatform: false,\n  userId: false,\n  reason: false\n};\nfunction createCrossDomainParameterValue(isExtendedFormat, attributeConfiguration, attributeValues) {\n  var _a;\n  var crossDomainParameterValue;\n  var timestamp = new Date().getTime();\n  var config = __assign(__assign({}, DEFAULT_CROSS_DOMAIN_LINKER_PARAMS), attributeConfiguration);\n  var domainUserId = attributeValues.domainUserId,\n    userId = attributeValues.userId,\n    sessionId = attributeValues.sessionId,\n    sourceId = attributeValues.sourceId,\n    sourcePlatform = attributeValues.sourcePlatform,\n    event = attributeValues.event;\n  var eventTarget = event.currentTarget;\n  var reason = typeof config.reason === 'function' ? config.reason(event) : (_a = eventTarget === null || eventTarget === void 0 ? void 0 : eventTarget.textContent) === null || _a === void 0 ? void 0 : _a.trim();\n  if (isExtendedFormat) {\n    /* Index is used by Enrich, so it should not be changed. */\n    crossDomainParameterValue = [domainUserId, timestamp, config.sessionId && sessionId, config.userId && urlSafeBase64Encode(userId || ''), config.sourceId && urlSafeBase64Encode(sourceId || ''), config.sourcePlatform && sourcePlatform, config.reason && urlSafeBase64Encode(reason || '')].map(function (attribute) {\n      return attribute || '';\n    }).join('.')\n    // Remove trailing dots\n    .replace(/([.]*$)/, '');\n  } else {\n    crossDomainParameterValue = attributeValues.domainUserId + '.' + timestamp;\n  }\n  return crossDomainParameterValue;\n}\n/**\n *\n * The url-safe variation emits - and _ instead of + and / characters. Also removes = sign padding.\n * @param {string} str The string to encode in a URL safe manner\n * @return {string}\n */\nfunction urlSafeBase64Encode(str) {\n  return btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=+$/, '');\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Checks if an object is a string\n * @param str - The object to check\n */\nfunction isString(str) {\n  if (str && typeof str.valueOf() === 'string') {\n    return true;\n  }\n  return false;\n}\n/**\n * Checks if an object is an integer\n * @param int - The object to check\n */\nfunction isInteger(int) {\n  return Number.isInteger && Number.isInteger(int) || typeof int === 'number' && isFinite(int) && Math.floor(int) === int;\n}\n/**\n * Checks if the input parameter is a function\n * @param func - The object to check\n */\nfunction isFunction(func) {\n  if (func && typeof func === 'function') {\n    return true;\n  }\n  return false;\n}\n/**\n * Cleans up the page title\n */\nfunction fixupTitle(title) {\n  if (!isString(title)) {\n    title = title.text || '';\n    var tmp = document.getElementsByTagName('title');\n    if (tmp && tmp[0] != null) {\n      title = tmp[0].text;\n    }\n  }\n  return title;\n}\n/**\n * Extract hostname from URL\n */\nfunction getHostName(url) {\n  // scheme : // [username [: password] @] hostname [: port] [/ [path] [? query] [# fragment]]\n  var e = new RegExp('^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)'),\n    matches = e.exec(url);\n  return matches ? matches[1] : url;\n}\n/**\n * Fix-up domain\n */\nfunction fixupDomain(domain) {\n  var dl = domain.length;\n  // remove trailing '.'\n  if (domain.charAt(--dl) === '.') {\n    domain = domain.slice(0, dl);\n  }\n  // remove leading '*'\n  if (domain.slice(0, 2) === '*.') {\n    domain = domain.slice(1);\n  }\n  return domain;\n}\n/**\n * Get page referrer. In the case of a single-page app,\n * if the URL changes without the page reloading, pass\n * in the old URL. It will be returned unless overriden\n * by a \"refer(r)er\" parameter in the querystring.\n *\n * @param string - oldLocation Optional.\n * @returns string The referrer\n */\nfunction getReferrer(oldLocation) {\n  var windowAlias = window,\n    fromQs = fromQuerystring('referrer', windowAlias.location.href) || fromQuerystring('referer', windowAlias.location.href);\n  // Short-circuit\n  if (fromQs) {\n    return fromQs;\n  }\n  // In the case of a single-page app, return the old URL\n  if (oldLocation) {\n    return oldLocation;\n  }\n  try {\n    if (windowAlias.top) {\n      return windowAlias.top.document.referrer;\n    } else if (windowAlias.parent) {\n      return windowAlias.parent.document.referrer;\n    }\n  } catch (_a) {}\n  return document.referrer;\n}\n/**\n * Cross-browser helper function to add event handler\n */\nfunction addEventListener(element, eventType, eventHandler, options) {\n  if (element.addEventListener) {\n    element.addEventListener(eventType, eventHandler, options);\n    return true;\n  }\n  // IE Support\n  if (element.attachEvent) {\n    return element.attachEvent('on' + eventType, eventHandler);\n  }\n  element['on' + eventType] = eventHandler;\n}\n/**\n * Return value from name-value pair in querystring\n */\nfunction fromQuerystring(field, url) {\n  var match = new RegExp('^[^#]*[?&]' + field + '=([^&#]*)').exec(url);\n  if (!match) {\n    return null;\n  }\n  return decodeURIComponent(match[1].replace(/\\+/g, ' '));\n}\n/**\n * Add a name-value pair to the querystring of a URL\n *\n * @param string - url URL to decorate\n * @param string - name Name of the querystring pair\n * @param string - value Value of the querystring pair\n */\nfunction decorateQuerystring(url, name, value) {\n  var initialQsParams = name + '=' + value;\n  var hashSplit = url.split('#');\n  var qsSplit = hashSplit[0].split('?');\n  var beforeQuerystring = qsSplit.shift();\n  // Necessary because a querystring may contain multiple question marks\n  var querystring = qsSplit.join('?');\n  if (!querystring) {\n    querystring = initialQsParams;\n  } else {\n    // Whether this is the first time the link has been decorated\n    var initialDecoration = true;\n    var qsFields = querystring.split('&');\n    for (var i = 0; i < qsFields.length; i++) {\n      if (qsFields[i].substr(0, name.length + 1) === name + '=') {\n        initialDecoration = false;\n        qsFields[i] = initialQsParams;\n        querystring = qsFields.join('&');\n        break;\n      }\n    }\n    if (initialDecoration) {\n      querystring = initialQsParams + '&' + querystring;\n    }\n  }\n  hashSplit[0] = beforeQuerystring + '?' + querystring;\n  return hashSplit.join('#');\n}\n/**\n * Finds the root domain\n */\nfunction findRootDomain(sameSite, secure) {\n  var windowLocationHostnameAlias = window.location.hostname,\n    cookiePrefix = '_sp_root_domain_test_',\n    cookieName = cookiePrefix + new Date().getTime(),\n    cookieValue = '_test_value_' + new Date().getTime();\n  var locationParts = windowLocationHostnameAlias.split('.');\n  for (var idx = locationParts.length - 2; idx >= 0; idx--) {\n    var currentDomain = locationParts.slice(idx).join('.');\n    cookie(cookieName, cookieValue, 0, '/', currentDomain, sameSite, secure);\n    if (cookie(cookieName) === cookieValue) {\n      // Clean up created cookie(s)\n      deleteCookie(cookieName, currentDomain, sameSite, secure);\n      var cookieNames = getCookiesWithPrefix(cookiePrefix);\n      for (var i = 0; i < cookieNames.length; i++) {\n        deleteCookie(cookieNames[i], currentDomain, sameSite, secure);\n      }\n      return currentDomain;\n    }\n  }\n  // Cookies cannot be read\n  return windowLocationHostnameAlias;\n}\n/**\n * Checks whether a value is present within an array\n *\n * @param val - The value to check for\n * @param array - The array to check within\n * @returns boolean Whether it exists\n */\nfunction isValueInArray(val, array) {\n  for (var i = 0; i < array.length; i++) {\n    if (array[i] === val) {\n      return true;\n    }\n  }\n  return false;\n}\n/**\n * Deletes an arbitrary cookie by setting the expiration date to the past\n *\n * @param cookieName - The name of the cookie to delete\n * @param domainName - The domain the cookie is in\n */\nfunction deleteCookie(cookieName, domainName, sameSite, secure) {\n  cookie(cookieName, '', -1, '/', domainName, sameSite, secure);\n}\n/**\n * Fetches the name of all cookies beginning with a certain prefix\n *\n * @param cookiePrefix - The prefix to check for\n * @returns array The cookies that begin with the prefix\n */\nfunction getCookiesWithPrefix(cookiePrefix) {\n  var cookies = document.cookie.split('; ');\n  var cookieNames = [];\n  for (var i = 0; i < cookies.length; i++) {\n    if (cookies[i].substring(0, cookiePrefix.length) === cookiePrefix) {\n      cookieNames.push(cookies[i]);\n    }\n  }\n  return cookieNames;\n}\n/**\n * Get and set the cookies associated with the current document in browser\n * This implementation always returns a string, returns the cookie value if only name is specified\n *\n * @param name - The cookie name (required)\n * @param value - The cookie value\n * @param ttl - The cookie Time To Live (seconds)\n * @param path - The cookies path\n * @param domain - The cookies domain\n * @param samesite - The cookies samesite attribute\n * @param secure - Boolean to specify if cookie should be secure\n * @returns string The cookies value\n */\nfunction cookie(name, value, ttl, path, domain, samesite, secure) {\n  if (arguments.length > 1) {\n    return document.cookie = name + '=' + encodeURIComponent(value !== null && value !== void 0 ? value : '') + (ttl ? '; Expires=' + new Date(+new Date() + ttl * 1000).toUTCString() : '') + (path ? '; Path=' + path : '') + (domain ? '; Domain=' + domain : '') + (samesite ? '; SameSite=' + samesite : '') + (secure ? '; Secure' : '');\n  }\n  return decodeURIComponent((('; ' + document.cookie).split('; ' + name + '=')[1] || '').split(';')[0]);\n}\n/**\n * Parses an object and returns either the\n * integer or undefined.\n *\n * @param obj - The object to parse\n * @returns the result of the parse operation\n */\nfunction parseAndValidateInt(obj) {\n  var result = parseInt(obj);\n  return isNaN(result) ? undefined : result;\n}\n/**\n * Parses an object and returns either the\n * number or undefined.\n *\n * @param obj - The object to parse\n * @returns the result of the parse operation\n */\nfunction parseAndValidateFloat(obj) {\n  var result = parseFloat(obj);\n  return isNaN(result) ? undefined : result;\n}\n/**\n * Convert a criterion object to a filter function\n *\n * @param object - criterion Either {allowlist: [array of allowable strings]}\n *                             or {denylist: [array of allowable strings]}\n *                             or {filter: function (elt) {return whether to track the element}\n * @param boolean - byClass Whether to allowlist/denylist based on an element's classes (for forms)\n *                        or name attribute (for fields)\n */\nfunction getFilterByClass(criterion) {\n  // If the criterion argument is not an object, add listeners to all elements\n  if (criterion == null || typeof criterion !== 'object' || Array.isArray(criterion)) {\n    return function () {\n      return true;\n    };\n  }\n  var inclusive = Object.prototype.hasOwnProperty.call(criterion, 'allowlist');\n  var specifiedClassesSet = getSpecifiedClassesSet(criterion);\n  return getFilter(criterion, function (elt) {\n    return checkClass(elt, specifiedClassesSet) === inclusive;\n  });\n}\n/**\n * Convert a criterion object to a filter function\n *\n * @param object - criterion Either {allowlist: [array of allowable strings]}\n *                             or {denylist: [array of allowable strings]}\n *                             or {filter: function (elt) {return whether to track the element}\n */\nfunction getFilterByName(criterion) {\n  // If the criterion argument is not an object, add listeners to all elements\n  if (criterion == null || typeof criterion !== 'object' || Array.isArray(criterion)) {\n    return function () {\n      return true;\n    };\n  }\n  var inclusive = criterion.hasOwnProperty('allowlist');\n  var specifiedClassesSet = getSpecifiedClassesSet(criterion);\n  return getFilter(criterion, function (elt) {\n    return elt.name in specifiedClassesSet === inclusive;\n  });\n}\n/**\n * List the classes of a DOM element without using elt.classList (for compatibility with IE 9)\n */\nfunction getCssClasses(elt) {\n  return elt.className.match(/\\S+/g) || [];\n}\n/**\n * Check whether an element has at least one class from a given list\n */\nfunction checkClass(elt, classList) {\n  var classes = getCssClasses(elt);\n  for (var _i = 0, classes_1 = classes; _i < classes_1.length; _i++) {\n    var className = classes_1[_i];\n    if (classList[className]) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction getFilter(criterion, fallbackFilter) {\n  if (criterion.hasOwnProperty('filter') && criterion.filter) {\n    return criterion.filter;\n  }\n  return fallbackFilter;\n}\nfunction getSpecifiedClassesSet(criterion) {\n  // Convert the array of classes to an object of the form {class1: true, class2: true, ...}\n  var specifiedClassesSet = {};\n  var specifiedClasses = criterion.allowlist || criterion.denylist;\n  if (specifiedClasses) {\n    if (!Array.isArray(specifiedClasses)) {\n      specifiedClasses = [specifiedClasses];\n    }\n    for (var i = 0; i < specifiedClasses.length; i++) {\n      specifiedClassesSet[specifiedClasses[i]] = true;\n    }\n  }\n  return specifiedClassesSet;\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/*\n * Checks whether sessionStorage is available, in a way that\n * does not throw a SecurityError in Firefox if \"always ask\"\n * is enabled for cookies (https://github.com/snowplow/snowplow/issues/163).\n */\nfunction hasSessionStorage() {\n  try {\n    return !!window.sessionStorage;\n  } catch (e) {\n    return true; // SecurityError when referencing it means it exists\n  }\n}\n/*\n * Checks whether localStorage is available, in a way that\n * does not throw a SecurityError in Firefox if \"always ask\"\n * is enabled for cookies (https://github.com/snowplow/snowplow/issues/163).\n */\nfunction hasLocalStorage() {\n  try {\n    return !!window.localStorage;\n  } catch (e) {\n    return true; // SecurityError when referencing it means it exists\n  }\n}\n/*\n * Checks whether localStorage is accessible\n * sets and removes an item to handle private IOS5 browsing\n * (http://git.io/jFB2Xw)\n */\nfunction localStorageAccessible() {\n  var mod = 'modernizr';\n  if (!hasLocalStorage()) {\n    return false;\n  }\n  try {\n    var ls = window.localStorage;\n    ls.setItem(mod, mod);\n    ls.removeItem(mod);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\nvar WEB_PAGE_SCHEMA = 'iglu:com.snowplowanalytics.snowplow/web_page/jsonschema/1-0-0';\nvar BROWSER_CONTEXT_SCHEMA = 'iglu:com.snowplowanalytics.snowplow/browser_context/jsonschema/2-0-0';\nvar CLIENT_SESSION_SCHEMA = 'iglu:com.snowplowanalytics.snowplow/client_session/jsonschema/1-0-2';\nvar PAYLOAD_DATA_SCHEMA = 'iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4';\n\n/**\n * Object handling sending events to a collector.\n * Instantiated once per tracker instance.\n *\n * @param id - The Snowplow function name (used to generate the localStorage key)\n * @param sharedSate - Stores reference to the outbound queue so it can unload the page when all queues are empty\n * @param useLocalStorage - Whether to use localStorage at all\n * @param eventMethod - if null will use 'beacon' otherwise can be set to 'post', 'get', or 'beacon' to force.\n * @param postPath - The path where events are to be posted\n * @param bufferSize - How many events to batch in localStorage before sending them all\n * @param maxPostBytes - Maximum combined size in bytes of the event JSONs in a POST request\n * @param maxGetBytes - Maximum size in bytes of the complete event URL string in a GET request. 0 for no limit.\n * @param useStm - Whether to add timestamp to events\n * @param maxLocalStorageQueueSize - Maximum number of queued events we will attempt to store in local storage\n * @param connectionTimeout - Defines how long to wait before aborting the request\n * @param anonymousTracking - Defines whether to set the SP-Anonymous header for anonymous tracking on GET and POST\n * @param customHeaders - Allows custom headers to be defined and passed on XMLHttpRequest requests\n * @param withCredentials - Sets the value of the withCredentials flag on XMLHttpRequest (GET and POST) requests\n * @param retryStatusCodes – Failure HTTP response status codes from Collector for which sending events should be retried (they can override the `dontRetryStatusCodes`)\n * @param dontRetryStatusCodes – Failure HTTP response status codes from Collector for which sending events should not be retried\n * @param idService - Id service full URL. This URL will be added to the queue and will be called using a GET method.\n * @param retryFailedRequests - Whether to retry failed requests - Takes precedent over `retryStatusCodes` and `dontRetryStatusCodes`\n * @param onRequestSuccess - Function called when a request succeeds\n * @param onRequestFailure - Function called when a request does not succeed\n * @returns object OutQueueManager instance\n */\nfunction OutQueueManager(id, sharedSate, useLocalStorage, eventMethod, postPath, bufferSize, maxPostBytes, maxGetBytes, useStm, maxLocalStorageQueueSize, connectionTimeout, anonymousTracking, customHeaders, withCredentials, retryStatusCodes, dontRetryStatusCodes, idService, retryFailedRequests, onRequestSuccess, onRequestFailure) {\n  if (retryFailedRequests === void 0) {\n    retryFailedRequests = true;\n  }\n  var executingQueue = false,\n    configCollectorUrl,\n    outQueue = [],\n    idServiceCalled = false;\n  //Force to lower case if its a string\n  eventMethod = typeof eventMethod === 'string' ? eventMethod.toLowerCase() : eventMethod;\n  // Use the Beacon API if eventMethod is set true, 'true', or 'beacon'.\n  var isBeaconRequested = eventMethod === true || eventMethod === 'beacon' || eventMethod === 'true',\n    // Fall back to POST or GET for browsers which don't support Beacon API\n    isBeaconAvailable = Boolean(isBeaconRequested && window.navigator && typeof window.navigator.sendBeacon === 'function' && !hasWebKitBeaconBug(window.navigator.userAgent)),\n    useBeacon = isBeaconAvailable && isBeaconRequested,\n    // Use GET if specified\n    isGetRequested = eventMethod === 'get',\n    // Don't use XhrHttpRequest for browsers which don't support CORS XMLHttpRequests (e.g. IE <= 9)\n    useXhr = Boolean(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n    // Use POST if specified\n    usePost = !isGetRequested && useXhr && (eventMethod === 'post' || isBeaconRequested),\n    // Resolve all options and capabilities and decide path\n    path = usePost ? postPath : '/i',\n    // Different queue names for GET and POST since they are stored differently\n    queueName = \"snowplowOutQueue_\".concat(id, \"_\").concat(usePost ? 'post2' : 'get');\n  // Ensure we don't set headers when beacon is the requested eventMethod as we might fallback to POST\n  // and end up sending them in older browsers which don't support beacon leading to inconsistencies\n  if (isBeaconRequested) customHeaders = {};\n  // Get buffer size or set 1 if unable to buffer\n  bufferSize = useLocalStorage && localStorageAccessible() && usePost && bufferSize || 1;\n  if (useLocalStorage) {\n    // Catch any JSON parse errors or localStorage that might be thrown\n    try {\n      var localStorageQueue = window.localStorage.getItem(queueName);\n      outQueue = localStorageQueue ? JSON.parse(localStorageQueue) : [];\n    } catch (e) {}\n  }\n  // Initialize to and empty array if we didn't get anything out of localStorage\n  if (!Array.isArray(outQueue)) {\n    outQueue = [];\n  }\n  // Used by pageUnloadGuard\n  sharedSate.outQueues.push(outQueue);\n  if (useXhr && bufferSize > 1) {\n    sharedSate.bufferFlushers.push(function (sync) {\n      if (!executingQueue) {\n        executeQueue(sync);\n      }\n    });\n  }\n  /*\n   * Convert a dictionary to a querystring\n   * The context field is the last in the querystring\n   */\n  function getQuerystring(request) {\n    var querystring = '?',\n      lowPriorityKeys = {\n        co: true,\n        cx: true\n      },\n      firstPair = true;\n    for (var key in request) {\n      if (request.hasOwnProperty(key) && !lowPriorityKeys.hasOwnProperty(key)) {\n        if (!firstPair) {\n          querystring += '&';\n        } else {\n          firstPair = false;\n        }\n        querystring += encodeURIComponent(key) + '=' + encodeURIComponent(request[key]);\n      }\n    }\n    for (var contextKey in lowPriorityKeys) {\n      if (request.hasOwnProperty(contextKey) && lowPriorityKeys.hasOwnProperty(contextKey)) {\n        querystring += '&' + contextKey + '=' + encodeURIComponent(request[contextKey]);\n      }\n    }\n    return querystring;\n  }\n  /*\n   * Convert numeric fields to strings to match payload_data schema\n   */\n  function getBody(request) {\n    var cleanedRequest = Object.keys(request).map(function (k) {\n      return [k, request[k]];\n    }).reduce(function (acc, _a) {\n      var key = _a[0],\n        value = _a[1];\n      acc[key] = value.toString();\n      return acc;\n    }, {});\n    return {\n      evt: cleanedRequest,\n      bytes: getUTF8Length(JSON.stringify(cleanedRequest))\n    };\n  }\n  /**\n   * Count the number of bytes a string will occupy when UTF-8 encoded\n   * Taken from http://stackoverflow.com/questions/2848462/count-bytes-in-textarea-using-javascript/\n   *\n   * @param string - s\n   * @returns number Length of s in bytes when UTF-8 encoded\n   */\n  function getUTF8Length(s) {\n    var len = 0;\n    for (var i = 0; i < s.length; i++) {\n      var code = s.charCodeAt(i);\n      if (code <= 0x7f) {\n        len += 1;\n      } else if (code <= 0x7ff) {\n        len += 2;\n      } else if (code >= 0xd800 && code <= 0xdfff) {\n        // Surrogate pair: These take 4 bytes in UTF-8 and 2 chars in UCS-2\n        // (Assume next char is the other [valid] half and just skip it)\n        len += 4;\n        i++;\n      } else if (code < 0xffff) {\n        len += 3;\n      } else {\n        len += 4;\n      }\n    }\n    return len;\n  }\n  var postable = function (queue) {\n    return typeof queue[0] === 'object' && 'evt' in queue[0];\n  };\n  /**\n   * Send event as POST request right away without going to queue. Used when the request surpasses maxGetBytes or maxPostBytes\n   * @param body POST request body\n   * @param configCollectorUrl full collector URL with path\n   */\n  function sendPostRequestWithoutQueueing(body, configCollectorUrl) {\n    var xhr = initializeXMLHttpRequest(configCollectorUrl, true, false);\n    var batch = attachStmToEvent([body.evt]);\n    xhr.onreadystatechange = function () {\n      if (xhr.readyState === 4) {\n        if (isSuccessfulRequest(xhr.status)) {\n          onRequestSuccess === null || onRequestSuccess === void 0 ? void 0 : onRequestSuccess(batch);\n        } else {\n          onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure({\n            status: xhr.status,\n            message: xhr.statusText,\n            events: batch,\n            willRetry: false\n          });\n        }\n      }\n    };\n    xhr.send(encloseInPayloadDataEnvelope(batch));\n  }\n  function removeEventsFromQueue(numberToSend) {\n    for (var deleteCount = 0; deleteCount < numberToSend; deleteCount++) {\n      outQueue.shift();\n    }\n    if (useLocalStorage) {\n      attemptWriteLocalStorage(queueName, JSON.stringify(outQueue.slice(0, maxLocalStorageQueueSize)));\n    }\n  }\n  function setXhrCallbacks(xhr, numberToSend, batch) {\n    xhr.onreadystatechange = function () {\n      if (xhr.readyState === 4) {\n        clearTimeout(xhrTimeout);\n        if (isSuccessfulRequest(xhr.status)) {\n          removeEventsFromQueue(numberToSend);\n          onRequestSuccess === null || onRequestSuccess === void 0 ? void 0 : onRequestSuccess(batch);\n          executeQueue();\n        } else {\n          var willRetry = shouldRetryForStatusCode(xhr.status);\n          if (!willRetry) {\n            LOG.error(\"Status \".concat(xhr.status, \", will not retry.\"));\n            removeEventsFromQueue(numberToSend);\n          }\n          onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure({\n            status: xhr.status,\n            message: xhr.statusText,\n            events: batch,\n            willRetry: willRetry\n          });\n          executingQueue = false;\n        }\n      }\n    };\n    // Time out POST requests after connectionTimeout\n    var xhrTimeout = setTimeout(function () {\n      xhr.abort();\n      if (!retryFailedRequests) {\n        removeEventsFromQueue(numberToSend);\n      }\n      onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure({\n        status: 0,\n        message: 'timeout',\n        events: batch,\n        willRetry: retryFailedRequests\n      });\n      executingQueue = false;\n    }, connectionTimeout);\n  }\n  /*\n   * Queue for submission to the collector and start processing queue\n   */\n  function enqueueRequest(request, url) {\n    configCollectorUrl = url + path;\n    var eventTooBigWarning = function (bytes, maxBytes) {\n      return LOG.warn('Event (' + bytes + 'B) too big, max is ' + maxBytes);\n    };\n    if (usePost) {\n      var body = getBody(request);\n      if (body.bytes >= maxPostBytes) {\n        eventTooBigWarning(body.bytes, maxPostBytes);\n        sendPostRequestWithoutQueueing(body, configCollectorUrl);\n        return;\n      } else {\n        outQueue.push(body);\n      }\n    } else {\n      var querystring = getQuerystring(request);\n      if (maxGetBytes > 0) {\n        var requestUrl = createGetUrl(querystring);\n        var bytes = getUTF8Length(requestUrl);\n        if (bytes >= maxGetBytes) {\n          eventTooBigWarning(bytes, maxGetBytes);\n          if (useXhr) {\n            var body = getBody(request);\n            var postUrl = url + postPath;\n            sendPostRequestWithoutQueueing(body, postUrl);\n          }\n          return;\n        }\n      }\n      outQueue.push(querystring);\n    }\n    var savedToLocalStorage = false;\n    if (useLocalStorage) {\n      savedToLocalStorage = attemptWriteLocalStorage(queueName, JSON.stringify(outQueue.slice(0, maxLocalStorageQueueSize)));\n    }\n    // If we're not processing the queue, we'll start.\n    if (!executingQueue && (!savedToLocalStorage || outQueue.length >= bufferSize)) {\n      executeQueue();\n    }\n  }\n  /*\n   * Run through the queue of requests, sending them one at a time.\n   * Stops processing when we run out of queued requests, or we get an error.\n   */\n  function executeQueue(sync) {\n    if (sync === void 0) {\n      sync = false;\n    }\n    // Failsafe in case there is some way for a bad value like \"null\" to end up in the outQueue\n    while (outQueue.length && typeof outQueue[0] !== 'string' && typeof outQueue[0] !== 'object') {\n      outQueue.shift();\n    }\n    if (!outQueue.length) {\n      executingQueue = false;\n      return;\n    }\n    // Let's check that we have a URL\n    if (!isString(configCollectorUrl)) {\n      throw 'No collector configured';\n    }\n    executingQueue = true;\n    if (idService && !idServiceCalled) {\n      var xhr_1 = initializeXMLHttpRequest(idService, false, sync);\n      idServiceCalled = true;\n      xhr_1.timeout = connectionTimeout;\n      xhr_1.onreadystatechange = function () {\n        if (xhr_1.readyState === 4) {\n          executeQueue();\n        }\n      };\n      xhr_1.send();\n      return;\n    }\n    if (useXhr) {\n      // Keep track of number of events to delete from queue\n      var chooseHowManyToSend = function (queue) {\n        var numberToSend = 0,\n          byteCount = 0;\n        while (numberToSend < queue.length) {\n          byteCount += queue[numberToSend].bytes;\n          if (byteCount >= maxPostBytes) {\n            break;\n          } else {\n            numberToSend += 1;\n          }\n        }\n        return numberToSend;\n      };\n      var url = void 0,\n        xhr = void 0,\n        numberToSend = void 0;\n      if (postable(outQueue)) {\n        url = configCollectorUrl;\n        xhr = initializeXMLHttpRequest(url, true, sync);\n        numberToSend = chooseHowManyToSend(outQueue);\n      } else {\n        url = createGetUrl(outQueue[0]);\n        xhr = initializeXMLHttpRequest(url, false, sync);\n        numberToSend = 1;\n      }\n      if (!postable(outQueue)) {\n        // If not postable then it's a GET so just send it\n        setXhrCallbacks(xhr, numberToSend, [url]);\n        xhr.send();\n      } else {\n        var batch = outQueue.slice(0, numberToSend);\n        if (batch.length > 0) {\n          var beaconStatus = false;\n          var eventBatch = batch.map(function (x) {\n            return x.evt;\n          });\n          if (useBeacon) {\n            var blob = new Blob([encloseInPayloadDataEnvelope(attachStmToEvent(eventBatch))], {\n              type: 'application/json'\n            });\n            try {\n              beaconStatus = window.navigator.sendBeacon(url, blob);\n            } catch (error) {\n              beaconStatus = false;\n            }\n          }\n          // When beaconStatus is true, we can't _guarantee_ that it was successful (beacon queues asynchronously)\n          // but the browser has taken it out of our hands, so we want to flush the queue assuming it will do its job\n          if (beaconStatus === true) {\n            removeEventsFromQueue(numberToSend);\n            onRequestSuccess === null || onRequestSuccess === void 0 ? void 0 : onRequestSuccess(batch);\n            executeQueue();\n          } else {\n            var batch_1 = attachStmToEvent(eventBatch);\n            setXhrCallbacks(xhr, numberToSend, batch_1);\n            xhr.send(encloseInPayloadDataEnvelope(batch_1));\n          }\n        }\n      }\n    } else if (!anonymousTracking && !postable(outQueue)) {\n      // We can't send with this technique if anonymous tracking is on as we can't attach the header\n      var image = new Image(1, 1),\n        loading_1 = true;\n      image.onload = function () {\n        if (!loading_1) return;\n        loading_1 = false;\n        outQueue.shift();\n        if (useLocalStorage) {\n          attemptWriteLocalStorage(queueName, JSON.stringify(outQueue.slice(0, maxLocalStorageQueueSize)));\n        }\n        executeQueue();\n      };\n      image.onerror = function () {\n        if (!loading_1) return;\n        loading_1 = false;\n        executingQueue = false;\n      };\n      image.src = createGetUrl(outQueue[0]);\n      setTimeout(function () {\n        if (loading_1 && executingQueue) {\n          loading_1 = false;\n          executeQueue();\n        }\n      }, connectionTimeout);\n    } else {\n      executingQueue = false;\n    }\n  }\n  /**\n   * Determines whether a request was successful, based on its status code\n   * Anything in the 2xx range is considered successful\n   *\n   * @param statusCode The status code of the request\n   * @returns Whether the request was successful\n   */\n  function isSuccessfulRequest(statusCode) {\n    return statusCode >= 200 && statusCode < 300;\n  }\n  function shouldRetryForStatusCode(statusCode) {\n    // success, don't retry\n    if (isSuccessfulRequest(statusCode)) {\n      return false;\n    }\n    if (!retryFailedRequests) {\n      return false;\n    }\n    // retry if status code among custom user-supplied retry codes\n    if (retryStatusCodes.includes(statusCode)) {\n      return true;\n    }\n    // retry if status code *not* among the don't retry codes\n    return !dontRetryStatusCodes.includes(statusCode);\n  }\n  /**\n   * Open an XMLHttpRequest for a given endpoint with the correct credentials and header\n   *\n   * @param string - url The destination URL\n   * @returns object The XMLHttpRequest\n   */\n  function initializeXMLHttpRequest(url, post, sync) {\n    var xhr = new XMLHttpRequest();\n    if (post) {\n      xhr.open('POST', url, !sync);\n      xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');\n    } else {\n      xhr.open('GET', url, !sync);\n    }\n    xhr.withCredentials = withCredentials;\n    if (anonymousTracking) {\n      xhr.setRequestHeader('SP-Anonymous', '*');\n    }\n    for (var header in customHeaders) {\n      if (Object.prototype.hasOwnProperty.call(customHeaders, header)) {\n        xhr.setRequestHeader(header, customHeaders[header]);\n      }\n    }\n    return xhr;\n  }\n  /**\n   * Enclose an array of events in a self-describing payload_data JSON string\n   *\n   * @param array - events Batch of events\n   * @returns string payload_data self-describing JSON\n   */\n  function encloseInPayloadDataEnvelope(events) {\n    return JSON.stringify({\n      schema: PAYLOAD_DATA_SCHEMA,\n      data: events\n    });\n  }\n  /**\n   * Attaches the STM field to outbound POST events.\n   *\n   * @param events - the events to attach the STM to\n   */\n  function attachStmToEvent(events) {\n    var stm = new Date().getTime().toString();\n    for (var i = 0; i < events.length; i++) {\n      events[i]['stm'] = stm;\n    }\n    return events;\n  }\n  /**\n   * Creates the full URL for sending the GET request. Will append `stm` if enabled\n   *\n   * @param nextRequest - the query string of the next request\n   */\n  function createGetUrl(nextRequest) {\n    if (useStm) {\n      return configCollectorUrl + nextRequest.replace('?', '?stm=' + new Date().getTime() + '&');\n    }\n    return configCollectorUrl + nextRequest;\n  }\n  return {\n    enqueueRequest: enqueueRequest,\n    executeQueue: function () {\n      if (!executingQueue) {\n        executeQueue();\n      }\n    },\n    setUseLocalStorage: function (localStorage) {\n      useLocalStorage = localStorage;\n    },\n    setAnonymousTracking: function (anonymous) {\n      anonymousTracking = anonymous;\n    },\n    setCollectorUrl: function (url) {\n      configCollectorUrl = url + path;\n    },\n    setBufferSize: function (newBufferSize) {\n      bufferSize = newBufferSize;\n    }\n  };\n  function hasWebKitBeaconBug(useragent) {\n    return isIosVersionLessThanOrEqualTo(13, useragent) || isMacosxVersionLessThanOrEqualTo(10, 15, useragent) && isSafari(useragent);\n    function isIosVersionLessThanOrEqualTo(major, useragent) {\n      var match = useragent.match('(iP.+; CPU .*OS (d+)[_d]*.*) AppleWebKit/');\n      if (match && match.length) {\n        return parseInt(match[0]) <= major;\n      }\n      return false;\n    }\n    function isMacosxVersionLessThanOrEqualTo(major, minor, useragent) {\n      var match = useragent.match('(Macintosh;.*Mac OS X (d+)_(d+)[_d]*.*) AppleWebKit/');\n      if (match && match.length) {\n        return parseInt(match[0]) <= major || parseInt(match[0]) === major && parseInt(match[1]) <= minor;\n      }\n      return false;\n    }\n    function isSafari(useragent) {\n      return useragent.match('Version/.* Safari/') && !isChromiumBased(useragent);\n    }\n    function isChromiumBased(useragent) {\n      return useragent.match('Chrom(e|ium)');\n    }\n  }\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/*\n * Extract parameter from URL\n */\nfunction getParameter(url, name) {\n  // scheme : // [username [: password] @] hostname [: port] [/ [path] [? query] [# fragment]]\n  var e = new RegExp('^(?:https?|ftp)(?::/*(?:[^?]+))([?][^#]+)'),\n    matches = e.exec(url);\n  if (matches && (matches === null || matches === void 0 ? void 0 : matches.length) > 1) {\n    return fromQuerystring(name, matches[1]);\n  }\n  return null;\n}\n/*\n * Fix-up URL when page rendered from search engine cache or translated page.\n */\nfunction fixupUrl(hostName, href, referrer) {\n  var _a;\n  if (hostName === 'translate.googleusercontent.com') {\n    // Google\n    if (referrer === '') {\n      referrer = href;\n    }\n    href = (_a = getParameter(href, 'u')) !== null && _a !== void 0 ? _a : '';\n    hostName = getHostName(href);\n  } else if (hostName === 'cc.bingj.com' ||\n  // Bing & Yahoo\n  hostName === 'webcache.googleusercontent.com' // Google\n  ) {\n    href = document.links[0].href;\n    hostName = getHostName(href);\n  }\n  return [hostName, href, referrer];\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Indices of cookie values\n */\nvar cookieDisabledIndex = 0,\n  domainUserIdIndex = 1,\n  createTsIndex = 2,\n  visitCountIndex = 3,\n  nowTsIndex = 4,\n  lastVisitTsIndex = 5,\n  sessionIdIndex = 6,\n  previousSessionIdIndex = 7,\n  firstEventIdIndex = 8,\n  firstEventTsInMsIndex = 9,\n  eventIndexIndex = 10;\nfunction emptyIdCookie() {\n  var idCookie = ['1', '', 0, 0, 0, undefined, '', '', '', undefined, 0];\n  return idCookie;\n}\n/**\n * Parses the cookie values from its string representation.\n *\n * @param id Cookie value as string\n * @param domainUserId Domain user ID to be used in case of empty cookie string\n * @returns Parsed ID cookie tuple\n */\nfunction parseIdCookie(id, domainUserId, memorizedSessionId, memorizedVisitCount) {\n  var now = new Date(),\n    nowTs = Math.round(now.getTime() / 1000),\n    tmpContainer;\n  if (id) {\n    tmpContainer = id.split('.');\n    // cookies enabled\n    tmpContainer.unshift('0');\n  } else {\n    tmpContainer = [\n    // cookies disabled\n    '1',\n    // Domain user ID\n    domainUserId,\n    // Creation timestamp - seconds since Unix epoch\n    nowTs,\n    // visitCount - 0 = no previous visit\n    memorizedVisitCount,\n    // Current visit timestamp\n    nowTs,\n    // Last visit timestamp - blank meaning no previous visit\n    '',\n    // Session ID\n    memorizedSessionId];\n  }\n  if (!tmpContainer[sessionIdIndex] || tmpContainer[sessionIdIndex] === 'undefined') {\n    // session id\n    tmpContainer[sessionIdIndex] = v4();\n  }\n  if (!tmpContainer[previousSessionIdIndex] || tmpContainer[previousSessionIdIndex] === 'undefined') {\n    // previous session id\n    tmpContainer[previousSessionIdIndex] = '';\n  }\n  if (!tmpContainer[firstEventIdIndex] || tmpContainer[firstEventIdIndex] === 'undefined') {\n    // firstEventId - blank meaning no previous event\n    tmpContainer[firstEventIdIndex] = '';\n  }\n  if (!tmpContainer[firstEventTsInMsIndex] || tmpContainer[firstEventTsInMsIndex] === 'undefined') {\n    // firstEventTs - blank meaning no previous event\n    tmpContainer[firstEventTsInMsIndex] = '';\n  }\n  if (!tmpContainer[eventIndexIndex] || tmpContainer[eventIndexIndex] === 'undefined') {\n    // eventIndex – 0 = no previous event\n    tmpContainer[eventIndexIndex] = 0;\n  }\n  var parseIntOr = function (value, defaultValue) {\n    var parsed = parseInt(value);\n    return isNaN(parsed) ? defaultValue : parsed;\n  };\n  var parseIntOrUndefined = function (value) {\n    return value ? parseIntOr(value, undefined) : undefined;\n  };\n  var parsed = [tmpContainer[cookieDisabledIndex], tmpContainer[domainUserIdIndex], parseIntOr(tmpContainer[createTsIndex], nowTs), parseIntOr(tmpContainer[visitCountIndex], memorizedVisitCount), parseIntOr(tmpContainer[nowTsIndex], nowTs), parseIntOrUndefined(tmpContainer[lastVisitTsIndex]), tmpContainer[sessionIdIndex], tmpContainer[previousSessionIdIndex], tmpContainer[firstEventIdIndex], parseIntOrUndefined(tmpContainer[firstEventTsInMsIndex]), parseIntOr(tmpContainer[eventIndexIndex], 0)];\n  return parsed;\n}\n/**\n * Initializes the domain user ID if not already present in the cookie. Sets an empty string if anonymous tracking.\n *\n * @param idCookie Parsed cookie\n * @param configAnonymousTracking Whether anonymous tracking is enabled\n * @returns Domain user ID\n */\nfunction initializeDomainUserId(idCookie, configAnonymousTracking) {\n  var domainUserId;\n  if (idCookie[domainUserIdIndex]) {\n    domainUserId = idCookie[domainUserIdIndex];\n  } else if (!configAnonymousTracking) {\n    domainUserId = v4();\n    idCookie[domainUserIdIndex] = domainUserId;\n  } else {\n    domainUserId = '';\n    idCookie[domainUserIdIndex] = domainUserId;\n  }\n  return domainUserId;\n}\n/**\n * Starts a new session with a new ID.\n * Sets the previous session, last visit timestamp, and increments visit count if cookies enabled.\n * First event references are reset and will be updated in `updateFirstEventInIdCookie`.\n *\n * @param idCookie Parsed cookie\n * @param options.configStateStorageStrategy Cookie storage strategy\n * @param options.configAnonymousTracking If anonymous tracking is enabled\n * @param options.memorizedVisitCount Visit count to be used if cookies not enabled\n * @param options.onSessionUpdateCallback Session callback triggered on every session update\n * @returns New session ID\n */\nfunction startNewIdCookieSession(idCookie, options) {\n  if (options === void 0) {\n    options = {\n      memorizedVisitCount: 1\n    };\n  }\n  var memorizedVisitCount = options.memorizedVisitCount;\n  // If cookies are enabled, base visit count and session ID on the cookies\n  if (cookiesEnabledInIdCookie(idCookie)) {\n    // Store the previous session ID\n    idCookie[previousSessionIdIndex] = idCookie[sessionIdIndex];\n    // Set lastVisitTs to currentVisitTs\n    idCookie[lastVisitTsIndex] = idCookie[nowTsIndex];\n    // Increment the session ID\n    idCookie[visitCountIndex]++;\n  } else {\n    idCookie[visitCountIndex] = memorizedVisitCount;\n  }\n  // Create a new sessionId\n  var sessionId = v4();\n  idCookie[sessionIdIndex] = sessionId;\n  // Reset event index and first event references\n  idCookie[eventIndexIndex] = 0;\n  idCookie[firstEventIdIndex] = '';\n  idCookie[firstEventTsInMsIndex] = undefined;\n  return sessionId;\n}\n/**\n * Update now timestamp in cookie.\n *\n * @param idCookie Parsed cookie\n */\nfunction updateNowTsInIdCookie(idCookie) {\n  idCookie[nowTsIndex] = Math.round(new Date().getTime() / 1000);\n}\n/**\n * Updates the first event references according to the event payload if first event in session.\n *\n * @param idCookie Parsed cookie\n * @param payloadBuilder Event payload builder\n */\nfunction updateFirstEventInIdCookie(idCookie, payloadBuilder) {\n  // Update first event references if new session or not present\n  if (idCookie[eventIndexIndex] === 0) {\n    var payload = payloadBuilder.build();\n    idCookie[firstEventIdIndex] = payload['eid'];\n    var ts = payload['dtm'] || payload['ttm'];\n    idCookie[firstEventTsInMsIndex] = ts ? parseInt(ts) : undefined;\n  }\n}\n/**\n * Increments event index counter.\n *\n * @param idCookie Parsed cookie\n */\nfunction incrementEventIndexInIdCookie(idCookie) {\n  idCookie[eventIndexIndex] += 1;\n}\n/**\n * Serializes parsed cookie to string representation.\n *\n * @param idCookie Parsed cookie\n * @returns String cookie value\n */\nfunction serializeIdCookie(idCookie, configAnonymousTracking) {\n  var anonymizedIdCookie = __spreadArray([], idCookie, true);\n  if (configAnonymousTracking) {\n    anonymizedIdCookie[domainUserIdIndex] = '';\n    anonymizedIdCookie[previousSessionIdIndex] = '';\n  }\n  anonymizedIdCookie.shift();\n  return anonymizedIdCookie.join('.');\n}\n/**\n * Transforms the parsed cookie into a client session context entity.\n *\n * @param idCookie Parsed cookie\n * @param configStateStorageStrategy Cookie storage strategy\n * @param configAnonymousTracking If anonymous tracking is enabled\n * @returns Client session context entity\n */\nfunction clientSessionFromIdCookie(idCookie, configStateStorageStrategy, configAnonymousTracking) {\n  var firstEventTsInMs = idCookie[firstEventTsInMsIndex];\n  var clientSession = {\n    userId: configAnonymousTracking ? '00000000-0000-0000-0000-000000000000' // TODO: use uuid.NIL when we upgrade to uuid v8.3\n    : idCookie[domainUserIdIndex],\n    sessionId: idCookie[sessionIdIndex],\n    eventIndex: idCookie[eventIndexIndex],\n    sessionIndex: idCookie[visitCountIndex],\n    previousSessionId: configAnonymousTracking ? null : idCookie[previousSessionIdIndex] || null,\n    storageMechanism: configStateStorageStrategy == 'localStorage' ? 'LOCAL_STORAGE' : 'COOKIE_1',\n    firstEventId: idCookie[firstEventIdIndex] || null,\n    firstEventTimestamp: firstEventTsInMs ? new Date(firstEventTsInMs).toISOString() : null\n  };\n  return clientSession;\n}\nfunction sessionIdFromIdCookie(idCookie) {\n  return idCookie[sessionIdIndex];\n}\nfunction domainUserIdFromIdCookie(idCookie) {\n  return idCookie[domainUserIdIndex];\n}\nfunction visitCountFromIdCookie(idCookie) {\n  return idCookie[visitCountIndex];\n}\nfunction cookiesEnabledInIdCookie(idCookie) {\n  return idCookie[cookieDisabledIndex] === '0';\n}\nfunction eventIndexFromIdCookie(idCookie) {\n  return idCookie[eventIndexIndex];\n}\nfunction useResizeObserver() {\n  return 'ResizeObserver' in window;\n}\nvar resizeObserverInitialized = false;\nfunction initializeResizeObserver() {\n  if (resizeObserverInitialized) {\n    return;\n  }\n  if (!document || !document.body || !document.documentElement) {\n    return;\n  }\n  resizeObserverInitialized = true;\n  var resizeObserver = new ResizeObserver(function (entries) {\n    for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n      var entry = entries_1[_i];\n      if (entry.target === document.body || entry.target === document.documentElement) {\n        cachedProperties = readBrowserProperties();\n      }\n    }\n  });\n  resizeObserver.observe(document.body);\n  resizeObserver.observe(document.documentElement);\n}\nvar cachedProperties;\n/* Separator used for dimension values e.g. widthxheight */\nvar DIMENSION_SEPARATOR = 'x';\n/**\n * Gets various browser properties (that are expensive to read!)\n * - Will use a \"ResizeObserver\" approach in modern browsers to update cached properties only on change\n * - Will fallback to a direct read approach without cache in old browsers\n *\n * @returns BrowserProperties\n */\nfunction getBrowserProperties() {\n  if (!useResizeObserver()) {\n    return readBrowserProperties();\n  }\n  if (!cachedProperties) {\n    cachedProperties = readBrowserProperties();\n  }\n  initializeResizeObserver();\n  return cachedProperties;\n}\n/**\n * Reads the browser properties - expensive call!\n *\n * @returns BrowserProperties\n */\nfunction readBrowserProperties() {\n  return {\n    viewport: floorDimensionFields(detectViewport()),\n    documentSize: floorDimensionFields(detectDocumentSize()),\n    resolution: floorDimensionFields(detectScreenResolution()),\n    colorDepth: screen.colorDepth,\n    devicePixelRatio: window.devicePixelRatio,\n    cookiesEnabled: window.navigator.cookieEnabled,\n    online: window.navigator.onLine,\n    browserLanguage: window.navigator.language || window.navigator.userLanguage,\n    documentLanguage: document.documentElement.lang,\n    webdriver: window.navigator.webdriver,\n    deviceMemory: window.navigator.deviceMemory,\n    hardwareConcurrency: window.navigator.hardwareConcurrency\n  };\n}\n/**\n * Gets the current viewport.\n *\n * Code based on:\n * - http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\n * - http://responsejs.com/labs/dimensions/\n */\nfunction detectViewport() {\n  var width, height;\n  if ('innerWidth' in window) {\n    width = window['innerWidth'];\n    height = window['innerHeight'];\n  } else {\n    var e = document.documentElement || document.body;\n    width = e['clientWidth'];\n    height = e['clientHeight'];\n  }\n  return Math.max(0, width) + DIMENSION_SEPARATOR + Math.max(0, height);\n}\n/**\n * Gets the dimensions of the current\n * document.\n *\n * Code based on:\n * - http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\n */\nfunction detectDocumentSize() {\n  var de = document.documentElement,\n    // Alias\n    be = document.body,\n    // document.body may not have rendered, so check whether be.offsetHeight is null\n    bodyHeight = be ? Math.max(be.offsetHeight, be.scrollHeight) : 0;\n  var w = Math.max(de.clientWidth, de.offsetWidth, de.scrollWidth);\n  var h = Math.max(de.clientHeight, de.offsetHeight, de.scrollHeight, bodyHeight);\n  return isNaN(w) || isNaN(h) ? '' : w + DIMENSION_SEPARATOR + h;\n}\nfunction detectScreenResolution() {\n  return screen.width + DIMENSION_SEPARATOR + screen.height;\n}\nfunction floorDimensionFields(field) {\n  return field && field.split(DIMENSION_SEPARATOR).map(function (dimension) {\n    return Math.floor(Number(dimension));\n  }).join(DIMENSION_SEPARATOR);\n}\n\n/**\n * The Snowplow Tracker\n *\n * @param trackerId - The unique identifier of the tracker\n * @param namespace - The namespace of the tracker object\n * @param version - The current version of the JavaScript Tracker\n * @param endpoint - The collector endpoint to send events to, with or without protocol\n * @param sharedState - An object containing state which is shared across tracker instances\n * @param trackerConfiguration - Dictionary of configuration options\n */\nfunction Tracker(trackerId, namespace, version, endpoint, sharedState, trackerConfiguration) {\n  if (trackerConfiguration === void 0) {\n    trackerConfiguration = {};\n  }\n  var browserPlugins = [];\n  var newTracker = function (trackerId, namespace, version, endpoint, state, trackerConfiguration) {\n    /************************************************************\n     * Private members\n     ************************************************************/\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4;\n    //use POST if eventMethod isn't present on the newTrackerConfiguration\n    trackerConfiguration.eventMethod = (_a = trackerConfiguration.eventMethod) !== null && _a !== void 0 ? _a : 'post';\n    var getStateStorageStrategy = function (config) {\n        var _a;\n        return (_a = config.stateStorageStrategy) !== null && _a !== void 0 ? _a : 'cookieAndLocalStorage';\n      },\n      getAnonymousSessionTracking = function (config) {\n        var _a, _b;\n        if (typeof config.anonymousTracking === 'boolean') {\n          return false;\n        }\n        return (_b = ((_a = config.anonymousTracking) === null || _a === void 0 ? void 0 : _a.withSessionTracking) === true) !== null && _b !== void 0 ? _b : false;\n      },\n      getAnonymousServerTracking = function (config) {\n        var _a, _b;\n        if (typeof config.anonymousTracking === 'boolean') {\n          return false;\n        }\n        return (_b = ((_a = config.anonymousTracking) === null || _a === void 0 ? void 0 : _a.withServerAnonymisation) === true) !== null && _b !== void 0 ? _b : false;\n      },\n      getAnonymousTracking = function (config) {\n        return !!config.anonymousTracking;\n      },\n      isBrowserContextAvailable = (_c = (_b = trackerConfiguration === null || trackerConfiguration === void 0 ? void 0 : trackerConfiguration.contexts) === null || _b === void 0 ? void 0 : _b.browser) !== null && _c !== void 0 ? _c : false,\n      isWebPageContextAvailable = (_e = (_d = trackerConfiguration === null || trackerConfiguration === void 0 ? void 0 : trackerConfiguration.contexts) === null || _d === void 0 ? void 0 : _d.webPage) !== null && _e !== void 0 ? _e : true,\n      getExtendedCrossDomainTrackingConfiguration = function (crossDomainTrackingConfig) {\n        if (typeof crossDomainTrackingConfig === 'boolean') {\n          return {\n            useExtendedCrossDomainLinker: crossDomainTrackingConfig\n          };\n        }\n        return {\n          useExtendedCrossDomainLinker: true,\n          collectCrossDomainAttributes: crossDomainTrackingConfig\n        };\n      };\n    // Get all injected plugins\n    browserPlugins.push(getBrowserDataPlugin());\n    /* When including the Web Page context, we add the relevant internal plugins */\n    if (isWebPageContextAvailable) {\n      browserPlugins.push(getWebPagePlugin());\n    }\n    if (isBrowserContextAvailable) {\n      browserPlugins.push(getBrowserContextPlugin());\n    }\n    browserPlugins.push.apply(browserPlugins, (_f = trackerConfiguration.plugins) !== null && _f !== void 0 ? _f : []);\n    var\n      // Tracker core\n      core = trackerCore({\n        base64: trackerConfiguration.encodeBase64,\n        corePlugins: browserPlugins,\n        callback: sendRequest\n      }),\n      // Aliases\n      documentCharset = document.characterSet || document.charset,\n      // Current URL and Referrer URL\n      locationArray = fixupUrl(window.location.hostname, window.location.href, getReferrer()),\n      domainAlias = fixupDomain(locationArray[0]),\n      locationHrefAlias = locationArray[1],\n      configReferrerUrl = locationArray[2],\n      customReferrer,\n      // Platform defaults to web for this tracker\n      configPlatform = (_g = trackerConfiguration.platform) !== null && _g !== void 0 ? _g : 'web',\n      // Snowplow collector URL\n      configCollectorUrl = asCollectorUrl(endpoint),\n      // Custom path for post requests (to get around adblockers)\n      configPostPath = (_h = trackerConfiguration.postPath) !== null && _h !== void 0 ? _h : '/com.snowplowanalytics.snowplow/tp2',\n      // Site ID\n      configTrackerSiteId = (_j = trackerConfiguration.appId) !== null && _j !== void 0 ? _j : '',\n      // Document URL\n      configCustomUrl,\n      // Document title\n      lastDocumentTitle = document.title,\n      // Custom title\n      lastConfigTitle,\n      // Indicates that the lastConfigTitle was set from a trackPageView call\n      // Custom title configured this way has a shorter lifespan than when set using setDocumentTitle.\n      // It only lasts until the next trackPageView call.\n      lastConfigTitleFromTrackPageView = false,\n      // Controls whether activity tracking page ping event timers are reset on page view events\n      resetActivityTrackingOnPageView = (_k = trackerConfiguration.resetActivityTrackingOnPageView) !== null && _k !== void 0 ? _k : true,\n      // Disallow hash tags in URL. TODO: Should this be set to true by default?\n      configDiscardHashTag,\n      // Disallow brace in URL.\n      configDiscardBrace,\n      // First-party cookie name prefix\n      configCookieNamePrefix = (_l = trackerConfiguration.cookieName) !== null && _l !== void 0 ? _l : '_sp_',\n      // First-party cookie domain\n      // User agent defaults to origin hostname\n      configCookieDomain = (_m = trackerConfiguration.cookieDomain) !== null && _m !== void 0 ? _m : undefined,\n      // First-party cookie path\n      // Default is user agent defined.\n      configCookiePath = '/',\n      // First-party cookie samesite attribute\n      configCookieSameSite = (_o = trackerConfiguration.cookieSameSite) !== null && _o !== void 0 ? _o : 'None',\n      // First-party cookie secure attribute\n      configCookieSecure = (_p = trackerConfiguration.cookieSecure) !== null && _p !== void 0 ? _p : true,\n      // Do Not Track browser feature\n      dnt = window.navigator.doNotTrack || window.navigator.msDoNotTrack || window.doNotTrack,\n      // Do Not Track\n      configDoNotTrack = typeof trackerConfiguration.respectDoNotTrack !== 'undefined' ? trackerConfiguration.respectDoNotTrack && (dnt === 'yes' || dnt === '1') : false,\n      // Opt out of cookie tracking\n      configOptOutCookie,\n      // Life of the visitor cookie (in seconds)\n      configVisitorCookieTimeout = (_q = trackerConfiguration.cookieLifetime) !== null && _q !== void 0 ? _q : 63072000,\n      // 2 years\n      // Life of the session cookie (in seconds)\n      configSessionCookieTimeout = (_r = trackerConfiguration.sessionCookieTimeout) !== null && _r !== void 0 ? _r : 1800,\n      // 30 minutes\n      // Allows tracking user session (using cookies or local storage), can only be used with anonymousTracking\n      configAnonymousSessionTracking = getAnonymousSessionTracking(trackerConfiguration),\n      // Will send a header to server to prevent returning cookie and capturing IP\n      configAnonymousServerTracking = getAnonymousServerTracking(trackerConfiguration),\n      // Sets tracker to work in anonymous mode without accessing client storage\n      configAnonymousTracking = getAnonymousTracking(trackerConfiguration),\n      // Strategy defining how to store the state: cookie, localStorage, cookieAndLocalStorage or none\n      configStateStorageStrategy = getStateStorageStrategy(trackerConfiguration),\n      // Last activity timestamp\n      lastActivityTime,\n      // The last time an event was fired on the page - used to invalidate session if cookies are disabled\n      lastEventTime = new Date().getTime(),\n      // How are we scrolling?\n      minXOffset,\n      maxXOffset,\n      minYOffset,\n      maxYOffset,\n      // Domain hash value\n      domainHash,\n      // Domain unique user ID\n      domainUserId,\n      // ID for the current session\n      memorizedSessionId,\n      // Index for the current session - kept in memory in case cookies are disabled\n      memorizedVisitCount = 1,\n      // Business-defined unique user ID\n      businessUserId,\n      // Manager for local storage queue\n      outQueue = OutQueueManager(trackerId, state, configStateStorageStrategy == 'localStorage' || configStateStorageStrategy == 'cookieAndLocalStorage', trackerConfiguration.eventMethod, configPostPath, (_s = trackerConfiguration.bufferSize) !== null && _s !== void 0 ? _s : 1, (_t = trackerConfiguration.maxPostBytes) !== null && _t !== void 0 ? _t : 40000, (_u = trackerConfiguration.maxGetBytes) !== null && _u !== void 0 ? _u : 0, (_v = trackerConfiguration.useStm) !== null && _v !== void 0 ? _v : true, (_w = trackerConfiguration.maxLocalStorageQueueSize) !== null && _w !== void 0 ? _w : 1000, (_x = trackerConfiguration.connectionTimeout) !== null && _x !== void 0 ? _x : 5000, configAnonymousServerTracking, (_y = trackerConfiguration.customHeaders) !== null && _y !== void 0 ? _y : {}, (_z = trackerConfiguration.withCredentials) !== null && _z !== void 0 ? _z : true, (_0 = trackerConfiguration.retryStatusCodes) !== null && _0 !== void 0 ? _0 : [], ((_1 = trackerConfiguration.dontRetryStatusCodes) !== null && _1 !== void 0 ? _1 : []).concat([400, 401, 403, 410, 422]), trackerConfiguration.idService, trackerConfiguration.retryFailedRequests, trackerConfiguration.onRequestSuccess, trackerConfiguration.onRequestFailure),\n      // Whether pageViewId should be regenerated after each trackPageView. Affect web_page context\n      preservePageViewId = false,\n      // Whether pageViewId should be kept the same until the page URL changes. Affects web_page context\n      preservePageViewIdForUrl = (_2 = trackerConfiguration.preservePageViewIdForUrl) !== null && _2 !== void 0 ? _2 : false,\n      // The pageViewId of the last page view event or undefined if no page view tracked yet. Used to determine if pageViewId should be regenerated for a new page view.\n      lastSentPageViewId = undefined,\n      // Activity tracking config for callback and page ping variants\n      activityTrackingConfig = {\n        enabled: false,\n        installed: false,\n        configurations: {}\n      },\n      configSessionContext = (_4 = (_3 = trackerConfiguration.contexts) === null || _3 === void 0 ? void 0 : _3.session) !== null && _4 !== void 0 ? _4 : false,\n      toOptoutByCookie,\n      onSessionUpdateCallback = trackerConfiguration.onSessionUpdateCallback,\n      manualSessionUpdateCalled = false,\n      _5 = getExtendedCrossDomainTrackingConfiguration(trackerConfiguration.useExtendedCrossDomainLinker || false),\n      useExtendedCrossDomainLinker = _5.useExtendedCrossDomainLinker,\n      collectCrossDomainAttributes = _5.collectCrossDomainAttributes;\n    if (trackerConfiguration.hasOwnProperty('discoverRootDomain') && trackerConfiguration.discoverRootDomain) {\n      configCookieDomain = findRootDomain(configCookieSameSite, configCookieSecure);\n    }\n    var _6 = getBrowserProperties(),\n      browserLanguage = _6.browserLanguage,\n      resolution = _6.resolution,\n      colorDepth = _6.colorDepth,\n      cookiesEnabled = _6.cookiesEnabled;\n    // Set up unchanging name-value pairs\n    core.setTrackerVersion(version);\n    core.setTrackerNamespace(namespace);\n    core.setAppId(configTrackerSiteId);\n    core.setPlatform(configPlatform);\n    core.addPayloadPair('cookie', cookiesEnabled ? '1' : '0');\n    core.addPayloadPair('cs', documentCharset);\n    core.addPayloadPair('lang', browserLanguage);\n    core.addPayloadPair('res', resolution);\n    core.addPayloadPair('cd', colorDepth);\n    /*\n     * Initialize tracker\n     */\n    updateDomainHash();\n    initializeIdsAndCookies();\n    if (trackerConfiguration.crossDomainLinker) {\n      decorateLinks(trackerConfiguration.crossDomainLinker);\n    }\n    /**\n     * Recalculate the domain, URL, and referrer\n     */\n    function refreshUrl() {\n      locationArray = fixupUrl(window.location.hostname, window.location.href, getReferrer());\n      // If this is a single-page app and the page URL has changed, then:\n      //   - if the new URL's querystring contains a \"refer(r)er\" parameter, use it as the referrer\n      //   - otherwise use the old URL as the referer\n      if (locationArray[1] !== locationHrefAlias) {\n        configReferrerUrl = getReferrer(locationHrefAlias);\n      }\n      domainAlias = fixupDomain(locationArray[0]);\n      locationHrefAlias = locationArray[1];\n    }\n    /**\n     * Create link handler to decorate the querystring of a link (onClick/onMouseDown)\n     *\n     * @param event - e The event targeting the link\n     */\n    function addLinkDecorationHandler(extended) {\n      var CROSS_DOMAIN_PARAMETER_NAME = '_sp';\n      return function (evt) {\n        var elt = evt.currentTarget;\n        var crossDomainParameterValue = createCrossDomainParameterValue(extended, collectCrossDomainAttributes, {\n          domainUserId: domainUserId,\n          userId: businessUserId || undefined,\n          sessionId: memorizedSessionId,\n          sourceId: configTrackerSiteId,\n          sourcePlatform: configPlatform,\n          event: evt\n        });\n        if (elt === null || elt === void 0 ? void 0 : elt.href) {\n          elt.href = decorateQuerystring(elt.href, CROSS_DOMAIN_PARAMETER_NAME, crossDomainParameterValue);\n        }\n      };\n    }\n    /**\n     * Enable querystring decoration for links passing a filter\n     * Whenever such a link is clicked on or navigated to via the keyboard,\n     * add \"_sp={{duid}}.{{timestamp}}\" to its querystring\n     *\n     * @param crossDomainLinker - Function used to determine which links to decorate\n     */\n    function decorateLinks(crossDomainLinker) {\n      var crossDomainLinkHandler = addLinkDecorationHandler(useExtendedCrossDomainLinker);\n      for (var i = 0; i < document.links.length; i++) {\n        var elt = document.links[i];\n        if (!elt.spDecorationEnabled && crossDomainLinker(elt)) {\n          elt.addEventListener('click', crossDomainLinkHandler, true);\n          elt.addEventListener('mousedown', crossDomainLinkHandler, true);\n          // Don't add event listeners more than once\n          elt.spDecorationEnabled = true;\n        }\n      }\n    }\n    /*\n     * Removes hash tag from the URL\n     *\n     * URLs are purified before being recorded in the cookie,\n     * or before being sent as GET parameters\n     */\n    function purify(url) {\n      var targetPattern;\n      if (configDiscardHashTag) {\n        targetPattern = new RegExp('#.*');\n        url = url.replace(targetPattern, '');\n      }\n      if (configDiscardBrace) {\n        targetPattern = new RegExp('[{}]', 'g');\n        url = url.replace(targetPattern, '');\n      }\n      return url;\n    }\n    /*\n     * Extract scheme/protocol from URL\n     */\n    function getProtocolScheme(url) {\n      var e = new RegExp('^([a-z]+):'),\n        matches = e.exec(url);\n      return matches ? matches[1] : null;\n    }\n    /*\n     * Resolve relative reference\n     *\n     * Note: not as described in rfc3986 section 5.2\n     */\n    function resolveRelativeReference(baseUrl, url) {\n      var protocol = getProtocolScheme(url),\n        i;\n      if (protocol) {\n        return url;\n      }\n      if (url.slice(0, 1) === '/') {\n        return getProtocolScheme(baseUrl) + '://' + getHostName(baseUrl) + url;\n      }\n      baseUrl = purify(baseUrl);\n      if ((i = baseUrl.indexOf('?')) >= 0) {\n        baseUrl = baseUrl.slice(0, i);\n      }\n      if ((i = baseUrl.lastIndexOf('/')) !== baseUrl.length - 1) {\n        baseUrl = baseUrl.slice(0, i + 1);\n      }\n      return baseUrl + url;\n    }\n    /*\n     * Send request\n     */\n    function sendRequest(request) {\n      if (!(configDoNotTrack || toOptoutByCookie)) {\n        outQueue.enqueueRequest(request.build(), configCollectorUrl);\n      }\n    }\n    /*\n     * Get cookie name with prefix and domain hash\n     */\n    function getSnowplowCookieName(baseName) {\n      return configCookieNamePrefix + baseName + '.' + domainHash;\n    }\n    /*\n     * Cookie getter.\n     */\n    function getSnowplowCookieValue(cookieName) {\n      var fullName = getSnowplowCookieName(cookieName);\n      if (configStateStorageStrategy == 'localStorage') {\n        return attemptGetLocalStorage(fullName);\n      } else if (configStateStorageStrategy == 'cookie' || configStateStorageStrategy == 'cookieAndLocalStorage') {\n        return cookie(fullName);\n      }\n      return undefined;\n    }\n    /*\n     * Update domain hash\n     */\n    function updateDomainHash() {\n      refreshUrl();\n      domainHash = hash((configCookieDomain || domainAlias) + (configCookiePath || '/')).slice(0, 4); // 4 hexits = 16 bits\n    }\n    /*\n     * Process all \"activity\" events.\n     * For performance, this function must have low overhead.\n     */\n    function activityHandler() {\n      var now = new Date();\n      lastActivityTime = now.getTime();\n    }\n    /*\n     * Process all \"scroll\" events.\n     */\n    function scrollHandler() {\n      updateMaxScrolls();\n      activityHandler();\n    }\n    /*\n     * Returns [pageXOffset, pageYOffset]\n     */\n    function getPageOffsets() {\n      var documentElement = document.documentElement;\n      if (documentElement) {\n        return [documentElement.scrollLeft || window.pageXOffset, documentElement.scrollTop || window.pageYOffset];\n      }\n      return [0, 0];\n    }\n    /*\n     * Quick initialization/reset of max scroll levels\n     */\n    function resetMaxScrolls() {\n      var offsets = getPageOffsets();\n      var x = offsets[0];\n      minXOffset = x;\n      maxXOffset = x;\n      var y = offsets[1];\n      minYOffset = y;\n      maxYOffset = y;\n    }\n    /*\n     * Check the max scroll levels, updating as necessary\n     */\n    function updateMaxScrolls() {\n      var offsets = getPageOffsets();\n      var x = offsets[0];\n      if (x < minXOffset) {\n        minXOffset = x;\n      } else if (x > maxXOffset) {\n        maxXOffset = x;\n      }\n      var y = offsets[1];\n      if (y < minYOffset) {\n        minYOffset = y;\n      } else if (y > maxYOffset) {\n        maxYOffset = y;\n      }\n    }\n    /*\n     * Prevents offsets from being decimal or NaN\n     * See https://github.com/snowplow/snowplow-javascript-tracker/issues/324\n     */\n    function cleanOffset(offset) {\n      return Math.round(offset);\n    }\n    /**\n     * Sets or renews the session cookie.\n     * Responsible for calling the `onSessionUpdateCallback` callback.\n     * @returns {boolean} If the value persisted in cookies or LocalStorage\n     */\n    function setSessionCookie() {\n      var cookieName = getSnowplowCookieName('ses');\n      var cookieValue = '*';\n      return persistValue(cookieName, cookieValue, configSessionCookieTimeout);\n    }\n    /**\n     * @mutates idCookie\n     * @param {ParsedIdCookie} idCookie\n     * @returns {boolean} If the value persisted in cookies or LocalStorage\n     */\n    function setDomainUserIdCookie(idCookie) {\n      var cookieName = getSnowplowCookieName('id');\n      var cookieValue = serializeIdCookie(idCookie, configAnonymousTracking);\n      return persistValue(cookieName, cookieValue, configVisitorCookieTimeout);\n    }\n    /**\n     * no-op if anonymousTracking enabled, will still set cookies if anonymousSessionTracking is enabled\n     * Sets a cookie based on the storage strategy:\n     * - if 'localStorage': attempts to write to local storage\n     * - if 'cookie' or 'cookieAndLocalStorage': writes to cookies\n     * - otherwise: no-op\n     * @param {string} name Name/key of the value to persist\n     * @param {string} value\n     * @param {number} timeout Used as the expiration date for cookies or as a TTL to be checked on LocalStorage\n     * @returns {boolean} If the operation was successful or not\n     */\n    function persistValue(name, value, timeout) {\n      if (configAnonymousTracking && !configAnonymousSessionTracking) {\n        return false;\n      }\n      if (configStateStorageStrategy == 'localStorage') {\n        return attemptWriteLocalStorage(name, value, timeout);\n      } else if (configStateStorageStrategy == 'cookie' || configStateStorageStrategy == 'cookieAndLocalStorage') {\n        cookie(name, value, timeout, configCookiePath, configCookieDomain, configCookieSameSite, configCookieSecure);\n        return document.cookie.indexOf(\"\".concat(name, \"=\")) !== -1 ? true : false;\n      }\n      return false;\n    }\n    /**\n     * Clears all cookie and local storage for id and ses values\n     */\n    function clearUserDataAndCookies(configuration) {\n      var idname = getSnowplowCookieName('id');\n      var sesname = getSnowplowCookieName('ses');\n      attemptDeleteLocalStorage(idname);\n      attemptDeleteLocalStorage(sesname);\n      deleteCookie(idname, configCookieDomain, configCookieSameSite, configCookieSecure);\n      deleteCookie(sesname, configCookieDomain, configCookieSameSite, configCookieSecure);\n      if (!(configuration === null || configuration === void 0 ? void 0 : configuration.preserveSession)) {\n        memorizedSessionId = v4();\n        memorizedVisitCount = 1;\n      }\n      if (!(configuration === null || configuration === void 0 ? void 0 : configuration.preserveUser)) {\n        domainUserId = configAnonymousTracking ? '' : v4();\n        businessUserId = null;\n      }\n    }\n    /**\n     * Toggle Anonymous Tracking\n     */\n    function toggleAnonymousTracking(configuration) {\n      if (configuration && configuration.stateStorageStrategy) {\n        trackerConfiguration.stateStorageStrategy = configuration.stateStorageStrategy;\n        configStateStorageStrategy = getStateStorageStrategy(trackerConfiguration);\n      }\n      configAnonymousTracking = getAnonymousTracking(trackerConfiguration);\n      configAnonymousSessionTracking = getAnonymousSessionTracking(trackerConfiguration);\n      configAnonymousServerTracking = getAnonymousServerTracking(trackerConfiguration);\n      outQueue.setUseLocalStorage(configStateStorageStrategy == 'localStorage' || configStateStorageStrategy == 'cookieAndLocalStorage');\n      outQueue.setAnonymousTracking(configAnonymousServerTracking);\n    }\n    /*\n     * Load the domain user ID and the session ID\n     * Set the cookies (if cookies are enabled)\n     */\n    function initializeIdsAndCookies() {\n      if (configAnonymousTracking && !configAnonymousSessionTracking) {\n        return;\n      }\n      var sesCookieSet = configStateStorageStrategy != 'none' && !!getSnowplowCookieValue('ses');\n      var idCookie = loadDomainUserIdCookie();\n      domainUserId = initializeDomainUserId(idCookie, configAnonymousTracking);\n      if (!sesCookieSet) {\n        memorizedSessionId = startNewIdCookieSession(idCookie);\n      } else {\n        memorizedSessionId = sessionIdFromIdCookie(idCookie);\n      }\n      memorizedVisitCount = visitCountFromIdCookie(idCookie);\n      if (configStateStorageStrategy != 'none') {\n        setSessionCookie();\n        // Update currentVisitTs\n        updateNowTsInIdCookie(idCookie);\n        setDomainUserIdCookie(idCookie);\n      }\n    }\n    /*\n     * Load visitor ID cookie\n     */\n    function loadDomainUserIdCookie() {\n      if (configStateStorageStrategy == 'none') {\n        return emptyIdCookie();\n      }\n      var id = getSnowplowCookieValue('id') || undefined;\n      return parseIdCookie(id, domainUserId, memorizedSessionId, memorizedVisitCount);\n    }\n    /**\n     * Adds the protocol in front of our collector URL\n     *\n     * @param string - collectorUrl The collector URL with or without protocol\n     * @returns string collectorUrl The tracker URL with protocol\n     */\n    function asCollectorUrl(collectorUrl) {\n      if (collectorUrl.indexOf('http') === 0) {\n        return collectorUrl;\n      }\n      return ('https:' === document.location.protocol ? 'https' : 'http') + '://' + collectorUrl;\n    }\n    /**\n     * Initialize new `pageViewId` if it shouldn't be preserved.\n     * Should be called when `trackPageView` is invoked\n     */\n    function resetPageView() {\n      if (!preservePageViewId || state.pageViewId == null) {\n        state.pageViewId = v4();\n        state.pageViewUrl = configCustomUrl || locationHrefAlias;\n      }\n    }\n    /**\n     * Safe function to get `pageViewId`.\n     * Generates it if it wasn't initialized by other tracker\n     */\n    function getPageViewId() {\n      if (shouldGenerateNewPageViewId()) {\n        state.pageViewId = v4();\n        state.pageViewUrl = configCustomUrl || locationHrefAlias;\n      }\n      return state.pageViewId;\n    }\n    function shouldGenerateNewPageViewId() {\n      // If pageViewId is not initialized, generate it\n      if (state.pageViewId == null) {\n        return true;\n      }\n      // If pageViewId should be preserved regardless of the URL, don't generate a new one\n      if (preservePageViewId || !preservePageViewIdForUrl) {\n        return false;\n      }\n      // If doesn't have previous URL in state, generate a new pageViewId\n      if (state.pageViewUrl === undefined) {\n        return true;\n      }\n      var current = configCustomUrl || locationHrefAlias;\n      // If full preserve is enabled, compare the full URL\n      if (preservePageViewIdForUrl === true || preservePageViewIdForUrl == 'full' || !('URL' in window)) {\n        return state.pageViewUrl != current;\n      }\n      var currentUrl = new URL(current);\n      var previousUrl = new URL(state.pageViewUrl);\n      // If pathname preserve is enabled, compare the pathname\n      if (preservePageViewIdForUrl == 'pathname') {\n        return currentUrl.pathname != previousUrl.pathname;\n      }\n      // If pathname and search preserve is enabled, compare the pathname and search\n      if (preservePageViewIdForUrl == 'pathnameAndSearch') {\n        return currentUrl.pathname != previousUrl.pathname || currentUrl.search != previousUrl.search;\n      }\n      return false;\n    }\n    /**\n     * Safe function to get `tabId`.\n     * Generates it if it is not yet initialized. Shared between trackers.\n     */\n    function getTabId() {\n      if (configStateStorageStrategy === 'none' || configAnonymousTracking || !isWebPageContextAvailable) {\n        return null;\n      }\n      var SESSION_STORAGE_TAB_ID = '_sp_tab_id';\n      var tabId = attemptGetSessionStorage(SESSION_STORAGE_TAB_ID);\n      if (!tabId) {\n        attemptWriteSessionStorage(SESSION_STORAGE_TAB_ID, v4());\n        tabId = attemptGetSessionStorage(SESSION_STORAGE_TAB_ID);\n      }\n      return tabId || null;\n    }\n    /**\n     * Put together a web page context with a unique UUID for the page view\n     *\n     * @returns web_page context\n     */\n    function getWebPagePlugin() {\n      return {\n        contexts: function () {\n          return [{\n            schema: WEB_PAGE_SCHEMA,\n            data: {\n              id: getPageViewId()\n            }\n          }];\n        }\n      };\n    }\n    function getBrowserContextPlugin() {\n      return {\n        contexts: function () {\n          return [{\n            schema: BROWSER_CONTEXT_SCHEMA,\n            data: __assign(__assign({}, getBrowserProperties()), {\n              tabId: getTabId()\n            })\n          }];\n        }\n      };\n    }\n    /*\n     * Attaches common web fields to every request (resolution, url, referrer, etc.)\n     * Also sets the required cookies.\n     */\n    function getBrowserDataPlugin() {\n      var anonymizeOr = function (value) {\n        return configAnonymousTracking ? null : value;\n      };\n      var anonymizeSessionOr = function (value) {\n        return configAnonymousSessionTracking ? value : anonymizeOr(value);\n      };\n      return {\n        beforeTrack: function (payloadBuilder) {\n          var existingSession = getSnowplowCookieValue('ses'),\n            idCookie = loadDomainUserIdCookie();\n          var isFirstEventInSession = eventIndexFromIdCookie(idCookie) === 0;\n          if (configOptOutCookie) {\n            toOptoutByCookie = !!cookie(configOptOutCookie);\n          } else {\n            toOptoutByCookie = false;\n          }\n          if (configDoNotTrack || toOptoutByCookie) {\n            clearUserDataAndCookies();\n            return;\n          }\n          // If cookies are enabled, base visit count and session ID on the cookies\n          if (cookiesEnabledInIdCookie(idCookie)) {\n            // New session?\n            if (!existingSession && configStateStorageStrategy != 'none') {\n              memorizedSessionId = startNewIdCookieSession(idCookie);\n            } else {\n              memorizedSessionId = sessionIdFromIdCookie(idCookie);\n            }\n            memorizedVisitCount = visitCountFromIdCookie(idCookie);\n          } else if (new Date().getTime() - lastEventTime > configSessionCookieTimeout * 1000) {\n            memorizedVisitCount++;\n            memorizedSessionId = startNewIdCookieSession(idCookie, {\n              memorizedVisitCount: memorizedVisitCount\n            });\n          }\n          // Update cookie\n          updateNowTsInIdCookie(idCookie);\n          updateFirstEventInIdCookie(idCookie, payloadBuilder);\n          incrementEventIndexInIdCookie(idCookie);\n          var _a = getBrowserProperties(),\n            viewport = _a.viewport,\n            documentSize = _a.documentSize;\n          payloadBuilder.add('vp', viewport);\n          payloadBuilder.add('ds', documentSize);\n          payloadBuilder.add('vid', anonymizeSessionOr(memorizedVisitCount));\n          payloadBuilder.add('sid', anonymizeSessionOr(memorizedSessionId));\n          payloadBuilder.add('duid', anonymizeOr(domainUserIdFromIdCookie(idCookie))); // Always load from cookie as this is better etiquette than in-memory values\n          payloadBuilder.add('uid', anonymizeOr(businessUserId));\n          refreshUrl();\n          payloadBuilder.add('refr', purify(customReferrer || configReferrerUrl));\n          // Add the page URL last as it may take us over the IE limit (and we don't always need it)\n          payloadBuilder.add('url', purify(configCustomUrl || locationHrefAlias));\n          var clientSession = clientSessionFromIdCookie(idCookie, configStateStorageStrategy, configAnonymousTracking);\n          if (configSessionContext && (!configAnonymousTracking || configAnonymousSessionTracking)) {\n            addSessionContextToPayload(payloadBuilder, clientSession);\n          }\n          // Update cookies\n          if (configStateStorageStrategy != 'none') {\n            setDomainUserIdCookie(idCookie);\n            var sessionIdentifierPersisted = setSessionCookie();\n            if ((!existingSession || isFirstEventInSession) && sessionIdentifierPersisted && onSessionUpdateCallback && !manualSessionUpdateCalled) {\n              onSessionUpdateCallback(clientSession);\n              manualSessionUpdateCalled = false;\n            }\n          }\n          lastEventTime = new Date().getTime();\n        }\n      };\n    }\n    function addSessionContextToPayload(payloadBuilder, clientSession) {\n      var sessionContext = {\n        schema: CLIENT_SESSION_SCHEMA,\n        data: clientSession\n      };\n      payloadBuilder.addContextEntity(sessionContext);\n    }\n    /**\n     * Expires current session and starts a new session.\n     */\n    function newSession() {\n      // If cookies are enabled, base visit count and session ID on the cookies\n      var idCookie = loadDomainUserIdCookie();\n      // When cookies are enabled\n      if (cookiesEnabledInIdCookie(idCookie)) {\n        // When cookie/local storage is enabled - make a new session\n        if (configStateStorageStrategy != 'none') {\n          memorizedSessionId = startNewIdCookieSession(idCookie);\n        } else {\n          memorizedSessionId = sessionIdFromIdCookie(idCookie);\n        }\n        memorizedVisitCount = visitCountFromIdCookie(idCookie);\n      } else {\n        memorizedVisitCount++;\n        memorizedSessionId = startNewIdCookieSession(idCookie, {\n          memorizedVisitCount: memorizedVisitCount\n        });\n      }\n      updateNowTsInIdCookie(idCookie);\n      // Update cookies\n      if (configStateStorageStrategy != 'none') {\n        var clientSession = clientSessionFromIdCookie(idCookie, configStateStorageStrategy, configAnonymousTracking);\n        setDomainUserIdCookie(idCookie);\n        var sessionIdentifierPersisted = setSessionCookie();\n        if (sessionIdentifierPersisted && onSessionUpdateCallback) {\n          manualSessionUpdateCalled = true;\n          onSessionUpdateCallback(clientSession);\n        }\n      }\n      lastEventTime = new Date().getTime();\n    }\n    /**\n     * Combine an array of unchanging contexts with the result of a context-creating function\n     *\n     * @param staticContexts - Array of custom contexts\n     * @param contextCallback - Function returning an array of contexts\n     */\n    function finalizeContexts(staticContexts, contextCallback) {\n      return (staticContexts || []).concat(contextCallback ? contextCallback() : []);\n    }\n    function logPageView(_a) {\n      var title = _a.title,\n        context = _a.context,\n        timestamp = _a.timestamp,\n        contextCallback = _a.contextCallback;\n      refreshUrl();\n      if (lastSentPageViewId && lastSentPageViewId == getPageViewId()) {\n        // Do not reset pageViewId if a page view was not tracked yet or a different page view ID was used (in order to support multiple trackers with shared state)\n        resetPageView();\n      }\n      lastSentPageViewId = getPageViewId();\n      // So we know what document.title was at the time of trackPageView\n      lastDocumentTitle = document.title;\n      if (title) {\n        lastConfigTitle = title;\n        lastConfigTitleFromTrackPageView = true;\n      } else if (lastConfigTitleFromTrackPageView) {\n        lastConfigTitle = null;\n      }\n      // Fixup page title\n      var pageTitle = fixupTitle(lastConfigTitle || lastDocumentTitle);\n      // Log page view\n      core.track(buildPageView({\n        pageUrl: purify(configCustomUrl || locationHrefAlias),\n        pageTitle: pageTitle,\n        referrer: purify(customReferrer || configReferrerUrl)\n      }), finalizeContexts(context, contextCallback), timestamp);\n      // Send ping (to log that user has stayed on page)\n      var now = new Date();\n      var installingActivityTracking = false;\n      if (activityTrackingConfig.enabled && !activityTrackingConfig.installed) {\n        activityTrackingConfig.installed = true;\n        installingActivityTracking = true;\n        // Add mousewheel event handler, detect passive event listeners for performance\n        var detectPassiveEvents_1 = {\n          update: function update() {\n            if (typeof window !== 'undefined' && typeof window.addEventListener === 'function') {\n              var passive_1 = false;\n              var options = Object.defineProperty({}, 'passive', {\n                get: function get() {\n                  passive_1 = true;\n                },\n                set: function set() {}\n              });\n              // note: have to set and remove a no-op listener instead of null\n              // (which was used previously), because Edge v15 throws an error\n              // when providing a null callback.\n              // https://github.com/rafrex/detect-passive-events/pull/3\n              var noop = function noop() {};\n              window.addEventListener('testPassiveEventSupport', noop, options);\n              window.removeEventListener('testPassiveEventSupport', noop, options);\n              detectPassiveEvents_1.hasSupport = passive_1;\n            }\n          }\n        };\n        detectPassiveEvents_1.update();\n        // Detect available wheel event\n        var wheelEvent = 'onwheel' in document.createElement('div') ? 'wheel' // Modern browsers support \"wheel\"\n        : document.onmousewheel !== undefined ? 'mousewheel' // Webkit and IE support at least \"mousewheel\"\n        : 'DOMMouseScroll'; // let's assume that remaining browsers are older Firefox\n        if (Object.prototype.hasOwnProperty.call(detectPassiveEvents_1, 'hasSupport')) {\n          addEventListener(document, wheelEvent, activityHandler, {\n            passive: true\n          });\n        } else {\n          addEventListener(document, wheelEvent, activityHandler);\n        }\n        // Capture our initial scroll points\n        resetMaxScrolls();\n        // Add event handlers; cross-browser compatibility here varies significantly\n        // @see http://quirksmode.org/dom/events\n        var documentHandlers = ['click', 'mouseup', 'mousedown', 'mousemove', 'keypress', 'keydown', 'keyup', 'touchend', 'touchstart'];\n        var windowHandlers = ['resize', 'focus', 'blur'];\n        var listener = function (_, handler) {\n          if (handler === void 0) {\n            handler = activityHandler;\n          }\n          return function (ev) {\n            return addEventListener(document, ev, handler);\n          };\n        };\n        documentHandlers.forEach(listener(document));\n        windowHandlers.forEach(listener(window));\n        listener(window, scrollHandler)('scroll');\n      }\n      if (activityTrackingConfig.enabled && (resetActivityTrackingOnPageView || installingActivityTracking)) {\n        // Periodic check for activity.\n        lastActivityTime = now.getTime();\n        var key = void 0;\n        for (key in activityTrackingConfig.configurations) {\n          var config = activityTrackingConfig.configurations[key];\n          if (config) {\n            //Clear page ping heartbeat on new page view\n            window.clearInterval(config.activityInterval);\n            scheduleActivityInterval(config, context, contextCallback);\n          }\n        }\n      }\n    }\n    function scheduleActivityInterval(config, context, contextCallback) {\n      var executePagePing = function (cb, context) {\n        refreshUrl();\n        cb({\n          context: context,\n          pageViewId: getPageViewId(),\n          minXOffset: minXOffset,\n          minYOffset: minYOffset,\n          maxXOffset: maxXOffset,\n          maxYOffset: maxYOffset\n        });\n        resetMaxScrolls();\n      };\n      var timeout = function () {\n        var now = new Date();\n        // There was activity during the heart beat period;\n        // on average, this is going to overstate the visitDuration by configHeartBeatTimer/2\n        if (lastActivityTime + config.configMinimumVisitLength > now.getTime()) {\n          executePagePing(config.callback, finalizeContexts(context, contextCallback));\n        }\n        config.activityInterval = window.setInterval(heartbeat, config.configHeartBeatTimer);\n      };\n      var heartbeat = function () {\n        var now = new Date();\n        // There was activity during the heart beat period;\n        // on average, this is going to overstate the visitDuration by configHeartBeatTimer/2\n        if (lastActivityTime + config.configHeartBeatTimer > now.getTime()) {\n          executePagePing(config.callback, finalizeContexts(context, contextCallback));\n        }\n      };\n      if (config.configMinimumVisitLength === 0) {\n        config.activityInterval = window.setInterval(heartbeat, config.configHeartBeatTimer);\n      } else {\n        config.activityInterval = window.setTimeout(timeout, config.configMinimumVisitLength);\n      }\n    }\n    /**\n     * Configure the activity tracking and ensures integer values for min visit and heartbeat\n     */\n    function configureActivityTracking(configuration) {\n      var minimumVisitLength = configuration.minimumVisitLength,\n        heartbeatDelay = configuration.heartbeatDelay,\n        callback = configuration.callback;\n      if (isInteger(minimumVisitLength) && isInteger(heartbeatDelay)) {\n        return {\n          configMinimumVisitLength: minimumVisitLength * 1000,\n          configHeartBeatTimer: heartbeatDelay * 1000,\n          callback: callback\n        };\n      }\n      LOG.error('Activity tracking minimumVisitLength & heartbeatDelay must be integers');\n      return undefined;\n    }\n    /**\n     * Log that a user is still viewing a given page by sending a page ping.\n     * Not part of the public API - only called from logPageView() above.\n     */\n    function logPagePing(_a) {\n      var context = _a.context,\n        minXOffset = _a.minXOffset,\n        minYOffset = _a.minYOffset,\n        maxXOffset = _a.maxXOffset,\n        maxYOffset = _a.maxYOffset;\n      var newDocumentTitle = document.title;\n      if (newDocumentTitle !== lastDocumentTitle) {\n        lastDocumentTitle = newDocumentTitle;\n        lastConfigTitle = undefined;\n      }\n      core.track(buildPagePing({\n        pageUrl: purify(configCustomUrl || locationHrefAlias),\n        pageTitle: fixupTitle(lastConfigTitle || lastDocumentTitle),\n        referrer: purify(customReferrer || configReferrerUrl),\n        minXOffset: cleanOffset(minXOffset),\n        maxXOffset: cleanOffset(maxXOffset),\n        minYOffset: cleanOffset(minYOffset),\n        maxYOffset: cleanOffset(maxYOffset)\n      }), context);\n    }\n    function disableActivityTrackingAction(actionKey) {\n      var callbackConfiguration = activityTrackingConfig.configurations[actionKey];\n      if ((callbackConfiguration === null || callbackConfiguration === void 0 ? void 0 : callbackConfiguration.configMinimumVisitLength) === 0) {\n        window.clearTimeout(callbackConfiguration === null || callbackConfiguration === void 0 ? void 0 : callbackConfiguration.activityInterval);\n      } else {\n        window.clearInterval(callbackConfiguration === null || callbackConfiguration === void 0 ? void 0 : callbackConfiguration.activityInterval);\n      }\n      activityTrackingConfig.configurations[actionKey] = undefined;\n    }\n    var apiMethods = {\n      getDomainSessionIndex: function () {\n        return memorizedVisitCount;\n      },\n      getPageViewId: getPageViewId,\n      getTabId: getTabId,\n      newSession: newSession,\n      getCookieName: function (basename) {\n        return getSnowplowCookieName(basename);\n      },\n      getUserId: function () {\n        return businessUserId;\n      },\n      getDomainUserId: function () {\n        return loadDomainUserIdCookie()[1];\n      },\n      getDomainUserInfo: function () {\n        return loadDomainUserIdCookie();\n      },\n      setReferrerUrl: function (url) {\n        customReferrer = url;\n      },\n      setCustomUrl: function (url) {\n        refreshUrl();\n        configCustomUrl = resolveRelativeReference(locationHrefAlias, url);\n      },\n      setDocumentTitle: function (title) {\n        // So we know what document.title was at the time of trackPageView\n        lastDocumentTitle = document.title;\n        lastConfigTitle = title;\n        lastConfigTitleFromTrackPageView = false;\n      },\n      discardHashTag: function (enableFilter) {\n        configDiscardHashTag = enableFilter;\n      },\n      discardBrace: function (enableFilter) {\n        configDiscardBrace = enableFilter;\n      },\n      setCookiePath: function (path) {\n        configCookiePath = path;\n        updateDomainHash();\n      },\n      setVisitorCookieTimeout: function (timeout) {\n        configVisitorCookieTimeout = timeout;\n      },\n      crossDomainLinker: function (crossDomainLinkerCriterion) {\n        decorateLinks(crossDomainLinkerCriterion);\n      },\n      enableActivityTracking: function (configuration) {\n        if (!activityTrackingConfig.configurations.pagePing) {\n          activityTrackingConfig.enabled = true;\n          activityTrackingConfig.configurations.pagePing = configureActivityTracking(__assign(__assign({}, configuration), {\n            callback: logPagePing\n          }));\n        }\n      },\n      enableActivityTrackingCallback: function (configuration) {\n        if (!activityTrackingConfig.configurations.callback) {\n          activityTrackingConfig.enabled = true;\n          activityTrackingConfig.configurations.callback = configureActivityTracking(configuration);\n        }\n      },\n      disableActivityTracking: function () {\n        disableActivityTrackingAction('pagePing');\n      },\n      disableActivityTrackingCallback: function () {\n        disableActivityTrackingAction('callback');\n      },\n      updatePageActivity: function () {\n        activityHandler();\n      },\n      setOptOutCookie: function (name) {\n        configOptOutCookie = name;\n      },\n      setUserId: function (userId) {\n        businessUserId = userId;\n      },\n      setUserIdFromLocation: function (querystringField) {\n        refreshUrl();\n        businessUserId = fromQuerystring(querystringField, locationHrefAlias);\n      },\n      setUserIdFromReferrer: function (querystringField) {\n        refreshUrl();\n        businessUserId = fromQuerystring(querystringField, configReferrerUrl);\n      },\n      setUserIdFromCookie: function (cookieName) {\n        businessUserId = cookie(cookieName);\n      },\n      setCollectorUrl: function (collectorUrl) {\n        configCollectorUrl = asCollectorUrl(collectorUrl);\n        outQueue.setCollectorUrl(configCollectorUrl);\n      },\n      setBufferSize: function (newBufferSize) {\n        outQueue.setBufferSize(newBufferSize);\n      },\n      flushBuffer: function (configuration) {\n        if (configuration === void 0) {\n          configuration = {};\n        }\n        outQueue.executeQueue();\n        if (configuration.newBufferSize) {\n          outQueue.setBufferSize(configuration.newBufferSize);\n        }\n      },\n      trackPageView: function (event) {\n        if (event === void 0) {\n          event = {};\n        }\n        logPageView(event);\n      },\n      preservePageViewId: function () {\n        preservePageViewId = true;\n      },\n      preservePageViewIdForUrl: function (preserve) {\n        preservePageViewIdForUrl = preserve;\n      },\n      disableAnonymousTracking: function (configuration) {\n        trackerConfiguration.anonymousTracking = false;\n        toggleAnonymousTracking(configuration);\n        initializeIdsAndCookies();\n        outQueue.executeQueue(); // There might be some events in the queue we've been unable to send in anonymous mode\n      },\n      enableAnonymousTracking: function (configuration) {\n        var _a;\n        trackerConfiguration.anonymousTracking = (_a = configuration && (configuration === null || configuration === void 0 ? void 0 : configuration.options)) !== null && _a !== void 0 ? _a : true;\n        toggleAnonymousTracking(configuration);\n        // Reset the page view, if not tracking the session, so can't stitch user into new events on the page view id\n        if (!configAnonymousSessionTracking) {\n          resetPageView();\n        }\n      },\n      clearUserData: clearUserDataAndCookies\n    };\n    return __assign(__assign({}, apiMethods), {\n      id: trackerId,\n      namespace: namespace,\n      core: core,\n      sharedState: state\n    });\n  };\n  // Initialise the tracker\n  var partialTracker = newTracker(trackerId, namespace, version, endpoint, sharedState, trackerConfiguration),\n    tracker = __assign(__assign({}, partialTracker), {\n      addPlugin: function (configuration) {\n        var _a, _b;\n        tracker.core.addPlugin(configuration);\n        (_b = (_a = configuration.plugin).activateBrowserPlugin) === null || _b === void 0 ? void 0 : _b.call(_a, tracker);\n      }\n    });\n  // Initialise each plugin with the tracker\n  browserPlugins.forEach(function (p) {\n    var _a;\n    (_a = p.activateBrowserPlugin) === null || _a === void 0 ? void 0 : _a.call(p, tracker);\n  });\n  return tracker;\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nvar namedTrackers = {};\n/**\n * Dispatch function to all specified trackers\n *\n * @param trackers - An optional list of trackers to send the event to, or will send to all trackers\n * @param fn - The function which will run against each tracker\n */\nfunction dispatchToTrackers(trackers, fn) {\n  try {\n    getTrackers(trackers !== null && trackers !== void 0 ? trackers : allTrackerNames()).forEach(fn);\n  } catch (ex) {\n    LOG.error('Function failed', ex);\n  }\n}\n/**\n * Dispatch function to all specified trackers from the supplied collection\n *\n * @param trackers - An optional list of trackers to send the event to, or will send to all trackers\n * @param trackerCollection - The collection which the trackers will be selected from\n * @param fn - The function which will run against each tracker\n */\nfunction dispatchToTrackersInCollection(trackers, trackerCollection, fn) {\n  try {\n    getTrackersFromCollection(trackers !== null && trackers !== void 0 ? trackers : Object.keys(trackerCollection), trackerCollection).forEach(fn);\n  } catch (ex) {\n    LOG.error('Function failed', ex);\n  }\n}\n/**\n * Checks if a tracker has been created for a particular identifier\n * @param trackerId - The unique identifier of the tracker\n */\nfunction trackerExists(trackerId) {\n  return namedTrackers.hasOwnProperty(trackerId);\n}\n/**\n * Creates a Tracker and adds it to the internal collection\n * @param trackerId - The unique identifier of the tracker\n * @param namespace - The namespace of the tracker, tracked with each event as `tna`\n * @param version - The current version of the tracker library\n * @param endpoint - The endpoint to send events to\n * @param sharedState - The instance of shared state to use for this tracker\n * @param configuration - The configuration to use for this tracker instance\n */\nfunction addTracker(trackerId, namespace, version, endpoint, sharedState, configuration) {\n  if (!namedTrackers.hasOwnProperty(trackerId)) {\n    namedTrackers[trackerId] = Tracker(trackerId, namespace, version, endpoint, sharedState, configuration);\n    return namedTrackers[trackerId];\n  }\n  return null;\n}\n/**\n * Gets a single instance of the internal tracker object\n * @param trackerId - The unique identifier of the tracker\n * @returns The tracker instance, or null if not found\n */\nfunction getTracker(trackerId) {\n  if (namedTrackers.hasOwnProperty(trackerId)) {\n    return namedTrackers[trackerId];\n  }\n  LOG.warn(trackerId + ' not configured');\n  return null;\n}\n/**\n * Gets an array of tracker instances based on the list of identifiers\n * @param trackerIds - An array of unique identifiers of the trackers\n * @returns The tracker instances, or empty list if none found\n */\nfunction getTrackers(trackerIds) {\n  return getTrackersFromCollection(trackerIds, namedTrackers);\n}\n/**\n * Gets all the trackers as a object, keyed by their unique identifiers\n */\nfunction allTrackers() {\n  return namedTrackers;\n}\n/**\n * Returns all the unique tracker identifiers\n */\nfunction allTrackerNames() {\n  return Object.keys(namedTrackers);\n}\nfunction getTrackersFromCollection(trackerIds, trackerCollection) {\n  var trackers = [];\n  for (var _i = 0, trackerIds_1 = trackerIds; _i < trackerIds_1.length; _i++) {\n    var id = trackerIds_1[_i];\n    if (trackerCollection.hasOwnProperty(id)) {\n      trackers.push(trackerCollection[id]);\n    } else {\n      LOG.warn(id + ' not configured');\n    }\n  }\n  return trackers;\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * A set of variables which are shared among all initialised trackers\n */\nvar SharedState = /** @class */function () {\n  function SharedState() {\n    /* List of request queues - one per Tracker instance */\n    this.outQueues = [];\n    this.bufferFlushers = [];\n    /* DOM Ready */\n    this.hasLoaded = false;\n    this.registeredOnLoadHandlers = [];\n  }\n  return SharedState;\n}();\nfunction createSharedState() {\n  var sharedState = new SharedState(),\n    documentAlias = document,\n    windowAlias = window;\n  /*\n   * Handle page visibility event\n   * Works everywhere except IE9\n   */\n  function visibilityChangeHandler() {\n    if (documentAlias.visibilityState == 'hidden') {\n      // Flush all POST queues\n      sharedState.bufferFlushers.forEach(function (flusher) {\n        flusher(false);\n      });\n    }\n  }\n  function flushBuffers() {\n    // Flush all POST queues\n    sharedState.bufferFlushers.forEach(function (flusher) {\n      flusher(false);\n    });\n  }\n  /*\n   * Handler for onload event\n   */\n  function loadHandler() {\n    var i;\n    if (!sharedState.hasLoaded) {\n      sharedState.hasLoaded = true;\n      for (i = 0; i < sharedState.registeredOnLoadHandlers.length; i++) {\n        sharedState.registeredOnLoadHandlers[i]();\n      }\n    }\n    return true;\n  }\n  /*\n   * Add onload or DOM ready handler\n   */\n  function addReadyListener() {\n    if (documentAlias.addEventListener) {\n      documentAlias.addEventListener('DOMContentLoaded', function ready() {\n        documentAlias.removeEventListener('DOMContentLoaded', ready, false);\n        loadHandler();\n      });\n    } else if (documentAlias.attachEvent) {\n      documentAlias.attachEvent('onreadystatechange', function ready() {\n        if (documentAlias.readyState === 'complete') {\n          documentAlias.detachEvent('onreadystatechange', ready);\n          loadHandler();\n        }\n      });\n    }\n    // fallback\n    addEventListener(windowAlias, 'load', loadHandler, false);\n  }\n  /************************************************************\n   * Constructor\n   ************************************************************/\n  // initialize the Snowplow singleton\n  if (documentAlias.visibilityState) {\n    // Flush for mobile and modern browsers\n    addEventListener(documentAlias, 'visibilitychange', visibilityChangeHandler, false);\n  }\n  // Last attempt at flushing in beforeunload\n  addEventListener(windowAlias, 'beforeunload', flushBuffers, false);\n  if (document.readyState === 'loading') {\n    addReadyListener();\n  } else {\n    loadHandler();\n  }\n  return sharedState;\n}\nexport { SharedState, addEventListener, addTracker, allTrackerNames, allTrackers, attemptDeleteLocalStorage, attemptGetLocalStorage, attemptGetSessionStorage, attemptWriteLocalStorage, attemptWriteSessionStorage, cookie, createCrossDomainParameterValue, createSharedState, decorateQuerystring, deleteCookie, dispatchToTrackers, dispatchToTrackersInCollection, findRootDomain, fixupDomain, fixupTitle, fixupUrl, fromQuerystring, getCookiesWithPrefix, getCssClasses, getFilterByClass, getFilterByName, getHostName, getReferrer, getTracker, getTrackers, hasLocalStorage, hasSessionStorage, isFunction, isInteger, isString, isValueInArray, localStorageAccessible, parseAndValidateFloat, parseAndValidateInt, trackerExists, urlSafeBase64Encode };\n","/*!\n * Browser tracker for Snowplow v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\nimport { dispatchToTrackers, createSharedState, addTracker } from '@snowplow/browser-tracker-core';\nimport { buildStructEvent, buildSelfDescribingEvent, version } from '@snowplow/tracker-core';\nexport { version } from '@snowplow/tracker-core';\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Expires current session and starts a new session.\n *\n * @param trackers - The tracker identifiers which will have their session refreshed\n */\nfunction newSession(trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.newSession();\n  });\n}\n/**\n * Override referrer\n *\n * @param url - Custom Referrer which will be used as override\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setReferrerUrl(url, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setReferrerUrl(url);\n  });\n}\n/**\n * Override url\n *\n * @param url - Custom URL which will be used as override\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setCustomUrl(url, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setCustomUrl(url);\n  });\n}\n/**\n * Override document.title\n *\n * @param title - Document title which will be used as override\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setDocumentTitle(title, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setDocumentTitle(title);\n  });\n}\n/**\n * Strip hash tag (or anchor) from URL\n *\n * @param enable - Whether to enable stripping of hash\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction discardHashTag(enable, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.discardHashTag(enable);\n  });\n}\n/**\n * Strip braces from URL\n *\n * @param enable - Whther to enable stripping of braces\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction discardBrace(enable, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.discardBrace(enable);\n  });\n}\n/**\n * Set first-party cookie path\n *\n * @param path - The path which will be used when setting cookies\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setCookiePath(path, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setCookiePath(path);\n  });\n}\n/**\n * Set visitor cookie timeout (in seconds)\n *\n * @param timeout - The timeout until cookies will expire\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setVisitorCookieTimeout(timeout, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setVisitorCookieTimeout(timeout);\n  });\n}\n/**\n * Enable querystring decoration for links passing a filter\n *\n * @param crossDomainLinker - Function used to determine which links to decorate\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction crossDomainLinker(crossDomainLinkerCriterion, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.crossDomainLinker(crossDomainLinkerCriterion);\n  });\n}\n/**\n * Enables page activity tracking (sends page pings to the Collector regularly).\n *\n * @param configuration - The activity tracking configuration\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction enableActivityTracking(configuration, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.enableActivityTracking(configuration);\n  });\n}\n/**\n * Enables page activity tracking (replaces collector ping with callback).\n *\n * @param configuration - The activity tracking callback configuration\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction enableActivityTrackingCallback(configuration, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.enableActivityTrackingCallback(configuration);\n  });\n}\n/**\n * Disables page activity tracking.\n *\n * @param trackers - The tracker identifiers the activity tracking will be disabled.\n */\nfunction disableActivityTracking(trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.disableActivityTracking();\n  });\n}\n/**\n * Disables page activity tracking callback.\n *\n * @param trackers - The tracker identifiers the activity tracking callback will be disabled.\n */\nfunction disableActivityTrackingCallback(trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.disableActivityTrackingCallback();\n  });\n}\n/**\n * Triggers the activityHandler manually to allow external user defined activity. i.e. While watching a video\n *\n * @param trackers - The tracker identifiers which will be updated\n */\nfunction updatePageActivity(trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.updatePageActivity();\n  });\n}\n/**\n * Sets the opt out cookie.\n *\n * @param name - of the opt out cookie\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setOptOutCookie(name, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setOptOutCookie(name);\n  });\n}\n/**\n * Set the business-defined user ID for this user.\n *\n * @param userId - The business-defined user ID\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setUserId(userId, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setUserId(userId);\n  });\n}\n/**\n * Set the business-defined user ID for this user using the location querystring.\n *\n * @param querystringField - Name of a querystring name-value pair\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setUserIdFromLocation(querystringField, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setUserIdFromLocation(querystringField);\n  });\n}\n/**\n * Set the business-defined user ID for this user using the referrer querystring.\n *\n * @param querystringField - Name of a querystring name-value pair\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setUserIdFromReferrer(querystringField, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setUserIdFromReferrer(querystringField);\n  });\n}\n/**\n * Set the business-defined user ID for this user to the value of a cookie.\n *\n * @param cookieName - Name of the cookie whose value will be assigned to businessUserId\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setUserIdFromCookie(cookieName, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setUserIdFromCookie(cookieName);\n  });\n}\n/**\n * Specify the Snowplow collector URL. Specific http or https to force it\n * or leave it off to match the website protocol.\n *\n * @param collectorUrl - The collector URL, with or without protocol\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setCollectorUrl(collectorUrl, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setCollectorUrl(collectorUrl);\n  });\n}\n/**\n * Set the buffer size\n * Can be useful if you want to stop batching requests to ensure events start\n * sending closer to event creation\n *\n * @param newBufferSize - The value with which to update the bufferSize to\n * @param trackers - The tracker identifiers which will be flushed\n */\nfunction setBufferSize(newBufferSize, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.setBufferSize(newBufferSize);\n  });\n}\n/**\n * Send all events in the outQueue\n * Only need to use this when sending events with a bufferSize of at least 2\n *\n * @param configuration - The configuration to use following flushing the buffer\n * @param trackers - The tracker identifiers which will be flushed\n */\nfunction flushBuffer(configuration, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.flushBuffer(configuration);\n  });\n}\n/**\n * Track a visit to a web page\n *\n * @param event - The Page View Event properties\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction trackPageView(event, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.trackPageView(event);\n  });\n}\n/**\n * Track a structured event\n * A classic style of event tracking, allows for easier movement between analytics\n * systems. A loosely typed event, creating a Self Describing event is preferred, but\n * useful for interoperability.\n *\n * @param event - The Structured Event properties\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction trackStructEvent(event, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.core.track(buildStructEvent(event), event.context, event.timestamp);\n  });\n}\n/**\n * Track a self-describing event happening on this page.\n * A custom event type, allowing for an event to be tracked using your own custom schema\n * and a data object which conforms to the supplied schema\n *\n * @param event - The event information\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction trackSelfDescribingEvent(event, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.core.track(buildSelfDescribingEvent({\n      event: event.event\n    }), event.context, event.timestamp);\n  });\n}\n/**\n * All provided contexts will be sent with every event\n *\n * @param contexts - An array of contexts or conditional contexts\n * @param trackers - The tracker identifiers which the global contexts will be added to\n */\nfunction addGlobalContexts(contexts, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.core.addGlobalContexts(contexts);\n  });\n}\n/**\n * All provided contexts will no longer be sent with every event\n *\n * @param contexts - An array of contexts or conditional contexts\n * @param trackers - The tracker identifiers which the global contexts will be remove from\n */\nfunction removeGlobalContexts(contexts, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.core.removeGlobalContexts(contexts);\n  });\n}\n/**\n * Clear all global contexts that are sent with events\n *\n * @param trackers - The tracker identifiers which the global contexts will be cleared from\n */\nfunction clearGlobalContexts(trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.core.clearGlobalContexts();\n  });\n}\n/**\n * Stop regenerating `pageViewId` (available from `web_page` context)\n *\n * @param trackers - The tracker identifiers which the event will preserve their Page View Ids\n */\nfunction preservePageViewId(trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.preservePageViewId();\n  });\n}\n/**\n * Disables anonymous tracking if active (ie. tracker initialized with `anonymousTracking`)\n * For stateStorageStrategy override, uses supplied value first,\n * falls back to one defined in initial config, otherwise uses cookieAndLocalStorage.\n *\n * @param configuration - The configuration for disabling anonymous tracking\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction disableAnonymousTracking(configuration, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.disableAnonymousTracking(configuration);\n  });\n}\n/**\n * Enables anonymous tracking (ie. tracker initialized without `anonymousTracking`)\n *\n * @param configuration - The configuration for enabling anonymous tracking\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction enableAnonymousTracking(configuration, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.enableAnonymousTracking(configuration);\n  });\n}\n/**\n * Clears all cookies and local storage containing user and session identifiers\n *\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction clearUserData(configuration, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.clearUserData(configuration);\n  });\n}\n/**\n * Add a plugin into the plugin collection after trackers have already been initialised\n *\n * @param configuration - The plugin to add\n * @param trackers - The tracker identifiers which the plugin will be added to\n */\nfunction addPlugin(configuration, trackers) {\n  dispatchToTrackers(trackers, function (t) {\n    t.addPlugin(configuration);\n  });\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nvar state = typeof window !== 'undefined' ? createSharedState() : undefined;\n/**\n * Initialise a new tracker\n *\n * @param trackerId - The tracker id - also known as tracker namespace\n * @param endpoint - Collector endpoint in the form collector.mysite.com\n * @param configuration - The initialisation options of the tracker\n */\nfunction newTracker(trackerId, endpoint, configuration) {\n  if (configuration === void 0) {\n    configuration = {};\n  }\n  if (state) {\n    return addTracker(trackerId, trackerId, \"js-\".concat(version), endpoint, state, configuration);\n  } else {\n    return undefined;\n  }\n}\nexport { addGlobalContexts, addPlugin, clearGlobalContexts, clearUserData, crossDomainLinker, disableActivityTracking, disableActivityTrackingCallback, disableAnonymousTracking, discardBrace, discardHashTag, enableActivityTracking, enableActivityTrackingCallback, enableAnonymousTracking, flushBuffer, newSession, newTracker, preservePageViewId, removeGlobalContexts, setBufferSize, setCollectorUrl, setCookiePath, setCustomUrl, setDocumentTitle, setOptOutCookie, setReferrerUrl, setUserId, setUserIdFromCookie, setUserIdFromLocation, setUserIdFromReferrer, setVisitorCookieTimeout, trackPageView, trackSelfDescribingEvent, trackStructEvent, updatePageActivity };\n","/*!\n * Attaches Performance Timing data to Snowplow events v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *    contributors may be used to endorse or promote products derived from\n *    this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Adds Performance Timing context to events\n *\n * @remarks\n * May not be fully populated when inital Page View fires\n * Often a good idea to take the latest performance timing context\n * for a given page view id when analysing in the warehouse\n */\nfunction PerformanceTimingPlugin() {\n  /**\n   * Creates a context from the window.performance.timing object\n   *\n   * @returns object PerformanceTiming context\n   */\n  function getPerformanceTimingContext() {\n    var windowAlias = window,\n      performanceAlias = windowAlias.performance || windowAlias.mozPerformance || windowAlias.msPerformance || windowAlias.webkitPerformance,\n      performanceTimingAlias = performanceAlias.timing;\n    if (performanceAlias) {\n      var performanceTiming = {\n        navigationStart: performanceTimingAlias.navigationStart,\n        redirectStart: performanceTimingAlias.redirectStart,\n        redirectEnd: performanceTimingAlias.redirectEnd,\n        fetchStart: performanceTimingAlias.fetchStart,\n        domainLookupStart: performanceTimingAlias.domainLookupStart,\n        domainLookupEnd: performanceTimingAlias.domainLookupEnd,\n        connectStart: performanceTimingAlias.connectStart,\n        secureConnectionStart: performanceTimingAlias.secureConnectionStart,\n        connectEnd: performanceTimingAlias.connectEnd,\n        requestStart: performanceTimingAlias.requestStart,\n        responseStart: performanceTimingAlias.responseStart,\n        responseEnd: performanceTimingAlias.responseEnd,\n        unloadEventStart: performanceTimingAlias.unloadEventStart,\n        unloadEventEnd: performanceTimingAlias.unloadEventEnd,\n        domLoading: performanceTimingAlias.domLoading,\n        domInteractive: performanceTimingAlias.domInteractive,\n        domContentLoadedEventStart: performanceTimingAlias.domContentLoadedEventStart,\n        domContentLoadedEventEnd: performanceTimingAlias.domContentLoadedEventEnd,\n        domComplete: performanceTimingAlias.domComplete,\n        loadEventStart: performanceTimingAlias.loadEventStart,\n        loadEventEnd: performanceTimingAlias.loadEventEnd,\n        msFirstPaint: performanceTimingAlias.msFirstPaint,\n        chromeFirstPaint: performanceTimingAlias.chromeFirstPaint,\n        requestEnd: performanceTimingAlias.requestEnd,\n        proxyStart: performanceTimingAlias.proxyStart,\n        proxyEnd: performanceTimingAlias.proxyEnd\n      };\n      return [{\n        schema: 'iglu:org.w3/PerformanceTiming/jsonschema/1-0-0',\n        data: performanceTiming\n      }];\n    }\n    return [];\n  }\n  return {\n    contexts: function () {\n      return getPerformanceTimingContext();\n    }\n  };\n}\nexport { PerformanceTimingPlugin };\n","/*!\n * Form tracking for Snowplow v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\nimport { addEventListener, getCssClasses, getFilterByClass, getFilterByName } from '@snowplow/browser-tracker-core';\nimport { buildFormFocusOrChange, resolveDynamicContext, buildFormSubmission } from '@snowplow/tracker-core';\n\n/** Events to capture in form tracking */\nvar FormTrackingEvent;\n(function (FormTrackingEvent) {\n  /** Form field changed event */\n  FormTrackingEvent[\"CHANGE_FORM\"] = \"change_form\";\n  /** Form field focused event */\n  FormTrackingEvent[\"FOCUS_FORM\"] = \"focus_form\";\n  /** Form submitted event */\n  FormTrackingEvent[\"SUBMIT_FORM\"] = \"submit_form\";\n})(FormTrackingEvent || (FormTrackingEvent = {}));\nvar defaultFormTrackingEvents = [FormTrackingEvent.CHANGE_FORM, FormTrackingEvent.FOCUS_FORM, FormTrackingEvent.SUBMIT_FORM];\nvar innerElementTags = ['textarea', 'input', 'select'];\nvar defaultTransformFn = function (x) {\n  return x;\n};\n/*\n * Add submission event listeners to all form elements\n * Add value change event listeners to all mutable inner form elements\n */\nfunction addFormListeners(tracker, configuration) {\n  var _a;\n  var options = configuration.options,\n    context = configuration.context,\n    trackingMarker = tracker.id + 'form',\n    config = getConfigurationForOptions(options);\n  var forms = (_a = config.forms) !== null && _a !== void 0 ? _a : document.getElementsByTagName('form');\n  Array.prototype.slice.call(forms).forEach(function (form) {\n    if (config.formFilter(form)) {\n      Array.prototype.slice.call(innerElementTags).forEach(function (tagname) {\n        Array.prototype.slice.call(form.getElementsByTagName(tagname)).forEach(function (innerElement) {\n          if (config.fieldFilter(innerElement) && !innerElement[trackingMarker] && innerElement.type.toLowerCase() !== 'password') {\n            if (config.eventFilter(FormTrackingEvent.FOCUS_FORM)) {\n              addEventListener(innerElement, 'focus', getFormChangeListener(tracker, config, 'focus_form', context), false);\n            }\n            if (config.eventFilter(FormTrackingEvent.CHANGE_FORM)) {\n              addEventListener(innerElement, 'change', getFormChangeListener(tracker, config, 'change_form', context), false);\n            }\n            innerElement[trackingMarker] = true;\n          }\n        });\n      });\n      if (!form[trackingMarker]) {\n        if (config.eventFilter(FormTrackingEvent.SUBMIT_FORM)) {\n          addEventListener(form, 'submit', getFormSubmissionListener(tracker, config, trackingMarker, context));\n        }\n        form[trackingMarker] = true;\n      }\n    }\n  });\n}\n/**\n * Check if forms array is a collection of HTML form elements or a filter or undefined\n */\nfunction isCollectionOfHTMLFormElements(forms) {\n  return forms != null && Array.prototype.slice.call(forms).length > 0;\n}\n/*\n * Configures form tracking: which forms and fields will be tracked, and the context to attach\n */\nfunction getConfigurationForOptions(options) {\n  if (options) {\n    var formFilter = function (_) {\n      return true;\n    };\n    var forms = null;\n    if (isCollectionOfHTMLFormElements(options.forms)) {\n      // options.forms is a collection of HTML form elements\n      forms = options.forms;\n    } else {\n      // options.forms is null or a filter\n      formFilter = getFilterByClass(options.forms);\n    }\n    return {\n      forms: forms,\n      formFilter: formFilter,\n      fieldFilter: getFilterByName(options.fields),\n      fieldTransform: getTransform(options.fields),\n      eventFilter: function (event) {\n        var _a;\n        return ((_a = options.events) !== null && _a !== void 0 ? _a : defaultFormTrackingEvents).indexOf(event) > -1;\n      }\n    };\n  } else {\n    return {\n      forms: null,\n      formFilter: function () {\n        return true;\n      },\n      fieldFilter: function () {\n        return true;\n      },\n      fieldTransform: defaultTransformFn,\n      eventFilter: function () {\n        return true;\n      }\n    };\n  }\n}\n/**\n * Convert a criterion object to a transform function\n *\n * @param object - criterion {transform: function (elt) {return the result of transform function applied to element}\n */\nfunction getTransform(criterion) {\n  if (criterion && Object.prototype.hasOwnProperty.call(criterion, 'transform')) {\n    return criterion.transform;\n  }\n  return defaultTransformFn;\n}\n/*\n * Get an identifier for a form, input, textarea, or select element\n */\nfunction getElementIdentifier(elt) {\n  var properties = ['name', 'id', 'type', 'nodeName'];\n  for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n    var propName = properties_1[_i];\n    if (elt[propName] != false && typeof elt[propName] === 'string') {\n      return elt[propName];\n    }\n  }\n  return null;\n}\n/*\n * Identifies the parent form in which an element is contained\n */\nfunction getParentFormIdentifier(elt) {\n  while (elt && elt.nodeName && elt.nodeName.toUpperCase() !== 'HTML' && elt.nodeName.toUpperCase() !== 'FORM') {\n    elt = elt.parentNode;\n  }\n  if (elt && elt.nodeName && elt.nodeName.toUpperCase() === 'FORM') {\n    return getElementIdentifier(elt);\n  }\n  return null;\n}\n/*\n * Returns a list of the input, textarea, and select elements inside a form along with their values\n */\nfunction getInnerFormElements(trackingMarker, elt) {\n  var innerElements = [];\n  Array.prototype.slice.call(innerElementTags).forEach(function (tagname) {\n    var trackedChildren = Array.prototype.slice.call(elt.getElementsByTagName(tagname)).filter(function (child) {\n      return child.hasOwnProperty(trackingMarker);\n    });\n    Array.prototype.slice.call(trackedChildren).forEach(function (child) {\n      if (child.type === 'submit') {\n        return;\n      }\n      var elementJson = {\n        elementData: {\n          name: getElementIdentifier(child),\n          value: child.value,\n          nodeName: child.nodeName\n        },\n        originalElement: child\n      };\n      if (child.type && child.nodeName.toUpperCase() === 'INPUT') {\n        elementJson.elementData.type = child.type;\n      }\n      if ((child.type === 'checkbox' || child.type === 'radio') && !child.checked) {\n        elementJson.elementData.value = null;\n      }\n      innerElements.push(elementJson);\n    });\n  });\n  return innerElements;\n}\n/*\n * Return function to handle form field change event\n */\nfunction getFormChangeListener(tracker, config, event_type, context) {\n  return function (e) {\n    var _a, _b;\n    var elt = e.target;\n    if (elt) {\n      var type = elt.nodeName && elt.nodeName.toUpperCase() === 'INPUT' ? elt.type : null;\n      var value = elt.type === 'checkbox' && !elt.checked ? null : config.fieldTransform(elt.value, elt, elt);\n      if (event_type === 'change_form' || type !== 'checkbox' && type !== 'radio') {\n        tracker.core.track(buildFormFocusOrChange({\n          schema: event_type,\n          formId: (_a = getParentFormIdentifier(elt)) !== null && _a !== void 0 ? _a : '',\n          elementId: (_b = getElementIdentifier(elt)) !== null && _b !== void 0 ? _b : '',\n          nodeName: elt.nodeName,\n          type: type,\n          elementClasses: getCssClasses(elt),\n          value: value !== null && value !== void 0 ? value : null\n        }), resolveDynamicContext(context, elt, type, value));\n      }\n    }\n  };\n}\n/*\n * Return function to handle form submission event\n */\nfunction getFormSubmissionListener(tracker, config, trackingMarker, context) {\n  return function (e) {\n    var _a;\n    var elt = e.target;\n    var innerElements = getInnerFormElements(trackingMarker, elt);\n    innerElements.forEach(function (innerElement) {\n      var _a;\n      var eltData = innerElement.elementData;\n      eltData.value = (_a = config.fieldTransform(eltData.value, eltData, innerElement.originalElement)) !== null && _a !== void 0 ? _a : eltData.value;\n    });\n    var elementsData = innerElements.map(function (elt) {\n      return elt.elementData;\n    });\n    tracker.core.track(buildFormSubmission({\n      formId: (_a = getElementIdentifier(elt)) !== null && _a !== void 0 ? _a : '',\n      formClasses: getCssClasses(elt),\n      elements: elementsData\n    }), resolveDynamicContext(context, elt, elementsData));\n  };\n}\nvar _trackers = {};\n/**\n * A plugin which enabled automatic form tracking\n */\nfunction FormTrackingPlugin() {\n  return {\n    activateBrowserPlugin: function (tracker) {\n      _trackers[tracker.id] = tracker;\n    }\n  };\n}\n/**\n * Enables automatic form tracking\n * An event will be fired when a form field is changed or a form submitted.\n * This can be called multiple times: only forms not already tracked will be tracked.\n *\n * @param configuration - The form tracking configuration\n * @param trackers - The tracker identifiers which the events will be sent to\n */\nfunction enableFormTracking(configuration, trackers) {\n  if (configuration === void 0) {\n    configuration = {};\n  }\n  if (trackers === void 0) {\n    trackers = Object.keys(_trackers);\n  }\n  trackers.forEach(function (t) {\n    if (_trackers[t]) {\n      if (_trackers[t].sharedState.hasLoaded) {\n        addFormListeners(_trackers[t], configuration);\n      } else {\n        _trackers[t].sharedState.registeredOnLoadHandlers.push(function () {\n          addFormListeners(_trackers[t], configuration);\n        });\n      }\n    }\n  });\n}\nexport { FormTrackingPlugin, enableFormTracking };\n","export type SnowplowContext =\r\n  | CustomContext\r\n  | CustomerContext\r\n  | ProductContext\r\n  | UserContext;\r\n\r\nexport enum SnowplowSchemaType {\r\n  CustomSchema = 'iglu:com.visma-tech-hubs/context_custom/jsonschema/1-0-0',\r\n  CustomerSchema = 'iglu:com.visma-tech-hubs/context_customer/jsonschema/1-0-0',\r\n  ProductSchema = 'iglu:com.visma-tech-hubs/context_product/jsonschema/1-0-0',\r\n  UserSchema = 'iglu:com.visma-tech-hubs/context_user/jsonschema/1-0-0',\r\n}\r\n\r\nexport interface CustomContext extends Record<string, unknown> {\r\n  custom_name?: string;\r\n  customfield_custom1?: string;\r\n  customfield_custom2?: string;\r\n  customfield_custom3?: string;\r\n}\r\n\r\nexport interface CustomerContext extends Record<string, unknown> {\r\n  business_unit: string;\r\n  company_name?: string;\r\n  countryiso?: string; // string with two chars: XX\r\n  customer_name: string;\r\n  customfield_customer1?: string;\r\n  customfield_customer2?: string;\r\n  customfield_customer3?: string;\r\n  organization_no?: string;\r\n}\r\n\r\nexport interface ProductContext extends Record<string, unknown> {\r\n  customfield_product1?: string;\r\n  customfield_product2?: string;\r\n  customfield_product3?: string;\r\n  module_name?: string;\r\n  module_no?: string;\r\n  product_name: string;\r\n  r12?: string;\r\n}\r\n\r\nexport interface UserContext extends Record<string, unknown> {\r\n  customfield_user1?: string;\r\n  customfield_user2?: string;\r\n  customfield_user3?: string;\r\n  registration_date?: string; // yyyy-mm-dd\r\n  user_type: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  BrowserTracker,\r\n  enableActivityTracking,\r\n  newTracker,\r\n  SelfDescribingJson,\r\n  setUserId,\r\n  trackPageView,\r\n} from '@snowplow/browser-tracker';\r\nimport { PerformanceTimingPlugin } from '@snowplow/browser-plugin-performance-timing';\r\nimport { FormTrackingPlugin } from '@snowplow/browser-plugin-form-tracking';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport {\r\n  CustomerContext,\r\n  ProductContext,\r\n  SnowplowContext,\r\n  SnowplowSchemaType,\r\n  UserContext,\r\n} from '../models/snowplow.models';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable()\r\nexport class SnowplowService {\r\n  private contexts: SelfDescribingJson<SnowplowContext>[] = [];\r\n  private tracker: BrowserTracker;\r\n  private isInitialized = false;\r\n\r\n  constructor(private router: Router) {}\r\n\r\n  public startTracking(): void {\r\n    // Added this so that we can manually set when this should be started.\r\n    // For those without config files, that uses environment.ts files, they can modify\r\n    // all of this so that they use in the app module APP_INITIALIZER and useClass: Snowplow\r\n    // then move this.startTracker() into the constructor and this should run with only modifying\r\n    // app.module.ts . That is in case someone want to copy this.\r\n    // Of course even better would be to have a way to build this without hardcoding to a product\r\n\r\n    if (this.isInitialized) {\r\n      return;\r\n    }\r\n    this.initTracker();\r\n    this.initUserAndCustomerContext();\r\n    this.initProductContext();\r\n    this.startTrackingRoutes();\r\n    this.isInitialized = true;\r\n  }\r\n\r\n  private initTracker(): void {\r\n    if (this.tracker != null) {\r\n      return;\r\n    }\r\n    this.tracker = newTracker('oppslag', environment.snowplowUrl, {\r\n      appId: 'sticos',\r\n      cookieSameSite: 'Lax',\r\n\r\n      cookieSecure: true,\r\n      plugins: [PerformanceTimingPlugin(), FormTrackingPlugin()],\r\n    });\r\n    enableActivityTracking(\r\n      {\r\n        heartbeatDelay: 10,\r\n        minimumVisitLength: 10,\r\n      },\r\n      ['oppslag']\r\n    );\r\n  }\r\n\r\n  private initUserAndCustomerContext(): void {\r\n    this.createUserContext();\r\n    this.createCustomerContext();\r\n    setUserId('');\r\n  }\r\n  private createUserContext(): void {\r\n    const userContext: Record<keyof UserContext, string> = {\r\n      user_type: 'User',\r\n      customfield_user1: '',\r\n      customfield_user2: null,\r\n      customfield_user3: null,\r\n      registration_date: null,\r\n    };\r\n    this.contexts.push({\r\n      data: userContext,\r\n      schema: SnowplowSchemaType.UserSchema,\r\n    });\r\n  }\r\n\r\n  private createCustomerContext(): void {\r\n    const customerContext: Record<keyof CustomerContext, string> = {\r\n      business_unit: 'Sticos AS',\r\n      company_name: '',\r\n      customer_name: '',\r\n      countryiso: 'NO',\r\n      organisation_no: '',\r\n      customfield_customer1: '',\r\n      customfield_customer2: null,\r\n      customfield_customer3: null,\r\n    };\r\n\r\n    this.contexts.push({\r\n      schema: SnowplowSchemaType.CustomerSchema,\r\n      data: customerContext,\r\n    });\r\n  }\r\n\r\n  private initProductContext(): void {\r\n    const productContext: Record<keyof ProductContext, string> = {\r\n      module_name: 'Kalkulator',\r\n      product_name: 'Oppslag',\r\n      r12: '485',\r\n      customfield_product1: null,\r\n      customfield_product2: null,\r\n      customfield_product3: null,\r\n    };\r\n    this.contexts.push({\r\n      schema: SnowplowSchemaType.ProductSchema,\r\n      data: productContext,\r\n    });\r\n  }\r\n\r\n  private startTrackingRoutes(): void {\r\n    this.router.events.subscribe(event => {\r\n      if (event instanceof NavigationEnd) {\r\n        // according to snowplow documentation this needs to be done before track pageview:\r\n        // https://docs.snowplow.io/docs/collecting-data/collecting-from-own-applications/javascript-trackers/javascript-tracker/javascript-tracker-v3/tracking-events/#activity-tracking-page-pings\r\n\r\n        trackPageView({ title: event.url, context: this.contexts });\r\n      }\r\n    });\r\n  }\r\n}\r\n","export type ArrayChunk = {\r\n  indexFrom: number;\r\n  indexTo: number;\r\n  count: number;\r\n};\r\n\r\nexport class ArrayUtils {\r\n  /**\r\n   * For the given enum, return all its values (correctly typed)\r\n   * as an array so we can iterate over them.\r\n   */\r\n  public static enumToArray<T extends object>(enumValues: T): Array<T[keyof T]> {\r\n    const keys = Object.keys(enumValues).filter(key => !/^[0-9]+$/.test(key)) as Array<keyof T>;\r\n    return keys.map(key => enumValues[key]);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, distinctUntilChanged, filter, map, Observable } from 'rxjs';\r\nimport { OneTrustConsentGroup } from '../enums/one-trust-consent-group.enum';\r\nimport { ArrayUtils } from '../utils/array.utils';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class OneTrustService {\r\n  private activeGroups$ = new BehaviorSubject<OneTrustConsentGroup[]>([]);\r\n\r\n  /**\r\n   * Handler that is called when the OneTrust script\r\n   * is loaded, on bootstrap.\r\n   */\r\n  public scriptLoadedHandler(): void {\r\n    this.listenForConsentChanges();\r\n    this.consentChangeHandler();\r\n  }\r\n\r\n  /**\r\n   * Observable that broadcasts changes in user consent\r\n   * (active groups). Only emits distinct values.\r\n   */\r\n  public getActiveGroups(): Observable<OneTrustConsentGroup[]> {\r\n    return this.activeGroups$.pipe(\r\n      filter(groups => groups.length > 0),\r\n      distinctUntilChanged()\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Observable that broadcasts whether or not the user\r\n   * has given consent for storing/using the given type of cookies.\r\n   */\r\n  public hasGivenConsentFor(group: OneTrustConsentGroup): Observable<boolean> {\r\n    return this.getActiveGroups().pipe(map(activeGroups => activeGroups.includes(group)));\r\n  }\r\n\r\n  /**\r\n   * Listen for changes in user consent.\r\n   */\r\n  private listenForConsentChanges(): void {\r\n    if (!OneTrust) return;\r\n    OneTrust.OnConsentChanged(this.consentChangeHandler.bind(this));\r\n  }\r\n\r\n  /**\r\n   * Function that runs when user cookie consent changes.\r\n   *\r\n   * In practise this is when:\r\n   * - the user makes changes to their cookie settings in the OneTrust consent dialog.\r\n   * - The function also runs once at bootstrap, when the OneTrust script is loaded\r\n   */\r\n  private consentChangeHandler(): void {\r\n    if (OnetrustActiveGroups === undefined) return;\r\n    const validValues = ArrayUtils.enumToArray(OneTrustConsentGroup);\r\n    const activeGroups = OnetrustActiveGroups.trim()\r\n      .split(',')\r\n      .filter((value): value is OneTrustConsentGroup => value !== '')\r\n      .filter(value => validValues.includes(value as OneTrustConsentGroup));\r\n    this.activeGroups$.next(activeGroups);\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-one-trust',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  template: '',\r\n})\r\nexport class OneTrustComponent {\r\n  constructor() {\r\n    const initScript = document.createElement('script');\r\n    initScript.type = 'text/javascript';\r\n    initScript.innerHTML =\r\n      'function OptanonWrapper() {' +\r\n      'if(window.oneTrustLoaded) return;' +\r\n      \"const oneTrustLoadedEvent = new CustomEvent('oneTrustLoaded');\" +\r\n      'window.dispatchEvent(oneTrustLoadedEvent);' +\r\n      'window.oneTrustLoaded = true;' +\r\n      '}';\r\n    document.head.appendChild(initScript);\r\n  }\r\n}\r\n","import { Component, DestroyRef, OnInit } from '@angular/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { SnowplowService } from './core/services/snowplow.service';\r\nimport config from 'devextreme/core/config';\r\nimport { licenseKey } from 'src/devextreme.license';\r\nimport { OneTrustService } from './common/services/one-trust.service';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { OneTrustConsentGroup } from './common/enums/one-trust-consent-group.enum';\r\n\r\nconfig({\r\n  licenseKey: licenseKey,\r\n});\r\n\r\n@Component({\r\n  selector: 'app-root',\r\n  templateUrl: './app.component.html',\r\n  styleUrls: ['./app.component.css'],\r\n})\r\nexport class AppComponent implements OnInit {\r\n  constructor(\r\n    private snowplowService: SnowplowService,\r\n    private oneTrustService: OneTrustService,\r\n    private destroyRef: DestroyRef\r\n  ) {\r\n    window.addEventListener('oneTrustLoaded', () => this.oneTrustService.scriptLoadedHandler(), {\r\n      once: true,\r\n    });\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.oneTrustService\r\n      .hasGivenConsentFor(OneTrustConsentGroup.Analytical)\r\n      .pipe(takeUntilDestroyed(this.destroyRef))\r\n      .subscribe(hasConsent => {\r\n        if (hasConsent && environment.production) {\r\n          this.snowplowService.startTracking();\r\n        }\r\n      });\r\n  }\r\n}\r\n","<app-one-trust></app-one-trust>\r\n<router-outlet></router-outlet>\r\n","import { CommonModule } from '@angular/common';\r\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\r\nimport {\r\n  ModuleWithProviders,\r\n  NgModule,\r\n  Optional,\r\n  SkipSelf,\r\n} from '@angular/core';\r\n\r\n@NgModule({ imports: [CommonModule], providers: [provideHttpClient(withInterceptorsFromDi())] })\r\nexport class CoreModule {\r\n  constructor(@Optional() @SkipSelf() core: CoreModule) {\r\n    if (core) {\r\n      throw new Error('Trying to inject CoreModule in CoreModule');\r\n    }\r\n  }\r\n\r\n  static forRoot(): ModuleWithProviders<CoreModule> {\r\n    return {\r\n      ngModule: CoreModule,\r\n      providers: [],\r\n    };\r\n  }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { environment } from '../../../environments/environment';\r\nimport { AppConfig } from '../models/app-config.model';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AppConfigService {\r\n  constructor(private http: HttpClient) {}\r\n\r\n  public load() {\r\n    return this.http.get<AppConfig>('assets/config/config.json').pipe(\r\n      tap(config => {\r\n        environment.snowplowUrl = config.snowplowUrl;\r\n        environment.ratesApiHost = config.ratesApiHost;\r\n        environment.fetchVatRatesFromApi = config.fetchVatRatesFromApi;\r\n        environment.fetchInterestRatesFromApi = config.fetchInterestRatesFromApi;\r\n        environment.fetchMealRatesFromApi = config.fetchMealRatesFromApi;\r\n      }),\r\n      catchError(error => {\r\n        console.error('Could not load file config.json');\r\n        return error;\r\n      })\r\n    );\r\n  }\r\n}\r\n","import config from 'devextreme/core/config';\r\nimport { locale, loadMessages } from 'devextreme/localization';\r\n\r\n// Load localized messages (English included by default)\r\nconst messagesNo = {\r\n    nb: {\r\n        'Yes': 'Ja',\r\n        'No': 'Nei',\r\n        'Cancel': 'Avbryt',\r\n        'Clear': 'Tøm',\r\n        'Done': 'Ferdig',\r\n        'Loading': 'Laster...',\r\n        'Select': 'Velg...',\r\n        'Search': 'Søk...',\r\n        'Back': 'Tilbake',\r\n        'OK': 'OK',\r\n\r\n        'dxCollectionWidget-noDataText': 'Ingen data å vise',\r\n        'validation-required': 'Påkrevd',\r\n        'validation-required-formatted': '{0} er påkrevd',\r\n        'validation-numeric': 'Verdien må være et tall',\r\n        'validation-numeric-formatted': '{0} må være et tall',\r\n        'validation-range': 'Verdien er utenfor gyldig område',\r\n        'validation-range-formatted': '{0} er utenfor gyldig område',\r\n        'validation-stringLength': 'Lengden på verdien er ikke korrekt',\r\n        'validation-stringLength-formatted': 'Lengden på {0} er ikke korrekt',\r\n        'validation-custom': 'Verdien er ugyldig',\r\n        'validation-custom-formatted': '{0} er ugyldig',\r\n        'validation-compare': 'Verdiene er ikke like',\r\n        'validation-compare-formatted': '{0} er ikke like',\r\n        'validation-pattern': 'Verdien passer ikke mønsteret',\r\n        'validation-pattern-formatted': '{0} passer ikke mønsteret',\r\n        'validation-email': 'E-posten er ugyldig',\r\n        'validation-email-formatted': '{0} er ugyldig',\r\n        'validation-mask': 'Verdien er ugyldig',\r\n\r\n        'dxLookup-searchPlaceholder': 'Minimum antall tegn: {0}',\r\n        'dxList-pullingDownText': 'Dra ned for å oppdatere',\r\n        'dxList-pulledDownText': 'Slipp for å oppdatere',\r\n        'dxList-refreshingText': 'Oppdaterer...',\r\n        'dxList-pageLoadingText': 'Laster...',\r\n        'dxList-nextButtonText': 'Mer',\r\n        'dxList-selectAll': 'Velg alle',\r\n        'dxListEditDecorator-delete': 'Slett',\r\n        'dxListEditDecorator-more': 'Mer',\r\n        'dxScrollView-pullingDownText': 'Dra ned for å oppdatere',\r\n        'dxScrollView-pulledDownText': 'Slipp for å oppdatere',\r\n        'dxScrollView-refreshingText': 'Oppdaterer...',\r\n        'dxScrollView-reachBottomText': 'Laster...',\r\n        'dxDateBox-simulatedDataPickerTitleTime': 'Velg tid',\r\n        'dxDateBox-simulatedDataPickerTitleDate': 'Velg dato',\r\n        'dxDateBox-simulatedDataPickerTitleDateTime': 'Velg dato og tid',\r\n        'dxDateBox-validation-datetime': 'Verdien må være en dato eller en tid',\r\n        'dxFileUploader-selectFile': 'Velg fil',\r\n        'dxFileUploader-dropFile': 'eller dra hit',\r\n        'dxFileUploader-bytes': 'Bytes',\r\n        'dxFileUploader-kb': 'kb',\r\n        'dxFileUploader-Mb': 'Mb',\r\n        'dxFileUploader-Gb': 'Gb',\r\n        'dxFileUploader-upload': 'Last opp',\r\n        'dxFileUploader-uploaded': 'Lastet opp',\r\n        'dxFileUploader-readyToUpload': 'Klar til å laste opp',\r\n        'dxFileUploader-uploadFailedMessage': 'Feil ved opplasting',\r\n        'dxRangeSlider-ariaFrom': 'Fra',\r\n        'dxRangeSlider-ariaTill': 'Til',\r\n        'dxSwitch-onText': 'PÅ',\r\n        'dxSwitch-offText': 'AV',\r\n        'dxForm-optionalMark': 'valgfritt',\r\n        'dxForm-requiredMessage': '{0} er et obligatorisk felt',\r\n        'dxNumberBox-invalidValueMessage': 'Verdien må være et tall',\r\n\r\n        'dxDataGrid-columnChooserTitle': 'Kolonnevalg',\r\n        'dxDataGrid-columnChooserEmptyText': 'Dra kolonner hit for å skjule dem',\r\n        'dxDataGrid-groupContinuesMessage': 'Fortsetter på neste side',\r\n        'dxDataGrid-groupContinuedMessage': 'Fortsetter fra forrige side',\r\n        'dxDataGrid-groupHeaderText': 'Grupper etter denne kolonnen',\r\n        'dxDataGrid-ungroupHeaderText': 'Fjern gruppe',\r\n        'dxDataGrid-ungroupAllText': 'Fjern alle grupper',\r\n        'dxDataGrid-editingEditRow': 'Rediger',\r\n        'dxDataGrid-editingSaveRowChanges': 'Lagre',\r\n        'dxDataGrid-editingCancelRowChanges': 'Avbryt',\r\n        'dxDataGrid-editingDeleteRow': 'Fjern',\r\n        'dxDataGrid-editingUndeleteRow': 'Gjenopprett',\r\n        'dxDataGrid-editingConfirmDeleteMessage': 'Er du sikker på at du vil slette denne posten?',\r\n        'dxDataGrid-validationCancelChanges': 'Forkast endringer',\r\n        'dxDataGrid-groupPanelEmptyText': 'Dra en kolonne hit for å gruppere',\r\n        'dxDataGrid-noDataText': 'Ingen data',\r\n        'dxDataGrid-searchPanelPlaceholder': 'Søk...',\r\n        'dxDataGrid-filterRowShowAllText': '(Alle)',\r\n        'dxDataGrid-filterRowResetOperationText': 'Tilbakestill',\r\n        'dxDataGrid-filterRowOperationEquals': 'Er lik',\r\n        'dxDataGrid-filterRowOperationNotEquals': 'Er ulik',\r\n        'dxDataGrid-filterRowOperationLess': 'Mindre enn',\r\n        'dxDataGrid-filterRowOperationLessOrEquals': 'Mindre enn eller lik',\r\n        'dxDataGrid-filterRowOperationGreater': 'Større enn',\r\n        'dxDataGrid-filterRowOperationGreaterOrEquals': 'Større enn eller lik',\r\n        'dxDataGrid-filterRowOperationStartsWith': 'Starter med',\r\n        'dxDataGrid-filterRowOperationContains': 'Inneholder',\r\n        'dxDataGrid-filterRowOperationNotContains': 'Inneholder ikke',\r\n        'dxDataGrid-filterRowOperationEndsWith': 'Slutter på',\r\n        'dxDataGrid-filterRowOperationBetween': 'Mellom',\r\n        'dxDataGrid-filterRowOperationBetweenStartText': 'Start',\r\n        'dxDataGrid-filterRowOperationBetweenEndText': 'Slutt',\r\n        'dxDataGrid-applyFilterText': 'Bruk filter',\r\n        'dxDataGrid-trueText': 'sant',\r\n        'dxDataGrid-falseText': 'usant',\r\n        'dxDataGrid-sortingAscendingText': 'Sorter stigende',\r\n        'dxDataGrid-sortingDescendingText': 'Sorter synkende',\r\n        'dxDataGrid-sortingClearText': 'Avbryt sortering',\r\n        'dxDataGrid-editingSaveAllChanges': 'Lagre endringer',\r\n        'dxDataGrid-editingCancelAllChanges': 'Forkast endringer',\r\n        'dxDataGrid-editingAddRow': 'Ny rad',\r\n        'dxDataGrid-summaryMin': 'Min: {0}',\r\n        'dxDataGrid-summaryMinOtherColumn': 'Minimum for {1} er {0}',\r\n        'dxDataGrid-summaryMax': 'Maks: {0}',\r\n        'dxDataGrid-summaryMaxOtherColumn': 'Maksimum for {1} er {0}',\r\n        'dxDataGrid-summaryAvg': 'Ø: {0}',\r\n        'dxDataGrid-summaryAvgOtherColumn': 'Gjennomsnitt for {1} er {0}',\r\n        'dxDataGrid-summarySum': 'Sum: {0}',\r\n        'dxDataGrid-summarySumOtherColumn': 'Sum for {1} er {0}',\r\n        'dxDataGrid-summaryCount': 'Antall: {0}',\r\n        'dxDataGrid-columnFixingFix': 'Fest',\r\n        'dxDataGrid-columnFixingUnfix': 'Løsne',\r\n        'dxDataGrid-columnFixingLeftPosition': 'Til venstre',\r\n        'dxDataGrid-columnFixingRightPosition': 'Til høyre',\r\n        'dxDataGrid-exportTo': 'Eksporter',\r\n        'dxDataGrid-exportToExcel': 'Eksporter til Excel-fil',\r\n        'dxDataGrid-excelFormat': 'Excel-fil',\r\n        'dxDataGrid-selectedRows': 'Valgte rader',\r\n        'dxDataGrid-exportAll': 'Eksporter alle data',\r\n        'dxDataGrid-exportSelectedRows': 'Eksporter valgte rader',\r\n        'dxDataGrid-headerFilterEmptyValue': '(Tomme verdier)',\r\n        'dxDataGrid-headerFilterOK': 'OK',\r\n        'dxDataGrid-headerFilterCancel': 'Avbryt',\r\n        'dxDataGrid-ariaColumn': 'Kolonne',\r\n        'dxDataGrid-ariaValue': 'Verdi',\r\n        'dxDataGrid-ariaFilterCell': 'Filter-celle',\r\n        'dxDataGrid-ariaCollapse': 'Sammenslå',\r\n        'dxDataGrid-ariaExpand': 'Utvid',\r\n        'dxDataGrid-ariaDataGrid': 'Datatabell',\r\n        'dxDataGrid-ariaSearchInGrid': 'Søk i datatabellen',\r\n        'dxDataGrid-ariaSelectAll': 'Velg alle',\r\n        'dxDataGrid-ariaSelectRow': 'Velg rad',\r\n        'dxPager-infoText': 'Side {0} av {1} ({2} elementer)',\r\n        'dxPager-pagesCountText': 'av',\r\n        'dxPivotGrid-grandTotal': 'Totalt',\r\n        'dxPivotGrid-total': '{0} Totalt',\r\n        'dxPivotGrid-fieldChooserTitle': 'Feltvelger',\r\n        'dxPivotGrid-showFieldChooser': 'Vis feltvelger',\r\n        'dxPivotGrid-expandAll': 'Utvid alle',\r\n        'dxPivotGrid-collapseAll': 'Sammenslå alle',\r\n        'dxPivotGrid-sortColumnBySummary': '\\'{0}\\' sorter etter denne kolonnen',\r\n        'dxPivotGrid-sortRowBySummary': '\\'{0}\\' sorter etter denne raden',\r\n        'dxPivotGrid-removeAllSorting': 'Fjern sortering',\r\n        'dxPivotGrid-rowFields': 'Radfelter',\r\n        'dxPivotGrid-columnFields': 'Kolonnefelter',\r\n        'dxPivotGrid-dataFields': 'Datafelter',\r\n        'dxPivotGrid-filterFields': 'Filterfelter',\r\n        'dxPivotGrid-allFields': 'Alle felter',\r\n        'dxPivotGrid-columnFieldArea': 'Dra kolonnefelter hit',\r\n        'dxPivotGrid-dataFieldArea': 'Dra datafelter hit',\r\n        'dxPivotGrid-rowFieldArea': 'Dra radfelter hit',\r\n        'dxPivotGrid-filterFieldArea': 'Dra filterfelter hit',\r\n        'dxScheduler-editorLabelTitle': 'Emne',\r\n        'dxScheduler-editorLabelStartDate': 'Starttidspunkt',\r\n        'dxScheduler-editorLabelEndDate': 'Sluttidspunkt',\r\n        'dxScheduler-editorLabelDescription': 'Beskrivelse',\r\n        'dxScheduler-editorLabelRecurrence': 'Repetisjon',\r\n        'dxScheduler-openAppointment': 'Åpen dato',\r\n        'dxScheduler-recurrenceNever': 'Aldri',\r\n        'dxScheduler-recurrenceDaily': 'Daglig',\r\n        'dxScheduler-recurrenceWeekly': 'Ukentlig',\r\n        'dxScheduler-recurrenceMonthly': 'Månedlig',\r\n        'dxScheduler-recurrenceYearly': 'Årlig',\r\n        'dxScheduler-recurrenceEvery': 'Alle',\r\n        'dxScheduler-recurrenceEnd': 'Repetisjonsslutt',\r\n        'dxScheduler-recurrenceAfter': 'Etter',\r\n        'dxScheduler-recurrenceOn': 'På',\r\n        'dxScheduler-recurrenceRepeatDaily': 'Dag(er)',\r\n        'dxScheduler-recurrenceRepeatWeekly': 'Uke(r)',\r\n        'dxScheduler-recurrenceRepeatMonthly': 'Måned(er)',\r\n        'dxScheduler-recurrenceRepeatYearly': 'År',\r\n        'dxScheduler-switcherDay': 'Dag',\r\n        'dxScheduler-switcherWeek': 'Uke',\r\n        'dxScheduler-switcherWorkWeek': 'Arbeidsuke',\r\n        'dxScheduler-switcherMonth': 'Måned',\r\n        'dxScheduler-switcherTimelineDay': 'Tidslinje dag',\r\n        'dxScheduler-switcherTimelineWeek': 'Tidslinje uke',\r\n        'dxScheduler-switcherTimelineWorkWeek': 'Tidslinje arbeidsuke',\r\n        'dxScheduler-switcherTimelineMonth': 'Tidslinje måned',\r\n        'dxScheduler-switcherAgenda': 'Agenda',\r\n        'dxScheduler-recurrenceRepeatOnDate': 'på dato',\r\n        'dxScheduler-recurrenceRepeatCount': 'Hendelser',\r\n        'dxScheduler-allDay': 'Fulltid',\r\n        'dxScheduler-confirmRecurrenceEditMessage': 'Vil du redigere bare denne hendelsen eller hele serien?',\r\n        'dxScheduler-confirmRecurrenceDeleteMessage': 'Vil du slette bare denne hendelsen eller hele serien?',\r\n        'dxScheduler-confirmRecurrenceEditSeries': 'Rediger serien',\r\n        'dxScheduler-confirmRecurrenceDeleteSeries': 'Slett serien',\r\n        'dxScheduler-confirmRecurrenceEditOccurrence': 'Rediger hendelse',\r\n        'dxScheduler-confirmRecurrenceDeleteOccurrence': 'Slett datoer',\r\n        'dxScheduler-noTimezoneTitle': 'Ingen tidssone',\r\n        'dxCalendar-todayButtonText': 'I dag',\r\n        'dxCalendar-ariaWidgetName': 'Kalender',\r\n        'dxColorView-ariaRed': 'Rød',\r\n        'dxColorView-ariaGreen': 'Grønn',\r\n        'dxColorView-ariaBlue': 'Blå',\r\n        'dxColorView-ariaAlpha': 'Gjennomsiktig',\r\n        'dxColorView-ariaHex': 'Fargeverdi',\r\n        'vizExport-printingButtonText': 'Utskrift',\r\n        'vizExport-titleMenuText': 'Eksporter/Skriv ut',\r\n        'vizExport-exportButtonText': '{0}-fil'\r\n    }\r\n};\r\n\r\nloadMessages(messagesNo);\r\nlocale('nb');\r\nconfig({ defaultCurrency: 'NOK' });\r\n","import { APP_BASE_HREF, HashLocationStrategy, LocationStrategy } from '@angular/common';\r\nimport '@angular/common/locales/global/nb';\r\nimport { APP_INITIALIZER, LOCALE_ID, NgModule, isDevMode } from '@angular/core';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { EffectsModule } from '@ngrx/effects';\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { AppComponent } from './app.component';\r\nimport { CoreModule } from './core/core.module';\r\nimport { AppConfigService } from './core/services/app-config-service';\r\nimport { SnowplowService } from './core/services/snowplow.service';\r\nimport './localization';\r\nimport { MaintenanceComponent } from './maintenance/maintenance.component';\r\nimport { OneTrustComponent } from './common/components/one-trust/one-trust.component';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport function initApiConfiguration(appConfig: AppConfigService): Function {\r\n  return () => {\r\n    return appConfig.load();\r\n  };\r\n}\r\n\r\n@NgModule({\r\n  imports: [\r\n    BrowserModule,\r\n    CoreModule.forRoot(),\r\n    StoreModule.forRoot(),\r\n    EffectsModule.forRoot(),\r\n    AppRoutingModule,\r\n    StoreDevtoolsModule.instrument({ maxAge: 25, logOnly: !isDevMode() }),\r\n    OneTrustComponent,\r\n  ],\r\n  declarations: [AppComponent, MaintenanceComponent],\r\n  providers: [\r\n    { provide: LOCALE_ID, useValue: 'nb' },\r\n    {\r\n      provide: APP_INITIALIZER,\r\n      useFactory: initApiConfiguration,\r\n      deps: [AppConfigService],\r\n      multi: true,\r\n    },\r\n    {\r\n      provide: APP_BASE_HREF,\r\n      useValue: '/',\r\n    },\r\n    {\r\n      provide: LocationStrategy,\r\n      useClass: HashLocationStrategy,\r\n    },\r\n    SnowplowService,\r\n  ],\r\n  bootstrap: [AppComponent],\r\n})\r\nexport class AppModule {}\r\n","/// <reference types=\"@angular/localize\" />\r\n\r\nimport { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n  enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic()\r\n  .bootstrapModule(AppModule)\r\n  .catch(err => console.error(err));\r\n"],"mappings":"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","names":["i","v4","v4","state","state","action","OneTrustConsentGroup","dict","payloadBuilder","json","newContext","context","LOG_LEVEL","error","payloadBuilder","filter","a","base64","corePlugins","callback","core","version","configuration","import_uuid","configCollectorUrl","bytes","numberToSend","useragent","parsed","payloadBuilder","version","newTracker","trackerId","namespace","endpoint","state","trackerConfiguration","_a","_b","hash","timeout","noop","context","minXOffset","minYOffset","maxXOffset","maxYOffset","version","SharedState","FormTrackingEvent","SnowplowSchemaType"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,15,16,17,18,19]}